| From: | Andres Freund <andres(at)anarazel(dot)de> | 
|---|---|
| To: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> | 
| Cc: | Tristan Partin <tristan(at)neon(dot)tech>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com> | 
| Subject: | Re: Refactoring backend fork+exec code | 
| Date: | 2024-01-23 19:50:09 | 
| Message-ID: | 20240123195009.44wtutga24p5sh3s@awork3.anarazel.de | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
Hi,
On 2024-01-23 21:07:08 +0200, Heikki Linnakangas wrote:
> On 22/01/2024 23:07, Andres Freund wrote:
> > > diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c
> > > index 1a1050c8da1..92f24db4e18 100644
> > > --- a/src/backend/utils/activity/backend_status.c
> > > +++ b/src/backend/utils/activity/backend_status.c
> > > @@ -257,17 +257,16 @@ pgstat_beinit(void)
> > >   	else
> > >   	{
> > >   		/* Must be an auxiliary process */
> > > -		Assert(MyAuxProcType != NotAnAuxProcess);
> > > +		Assert(IsAuxProcess(MyBackendType));
> > >   		/*
> > >   		 * Assign the MyBEEntry for an auxiliary process.  Since it doesn't
> > >   		 * have a BackendId, the slot is statically allocated based on the
> > > -		 * auxiliary process type (MyAuxProcType).  Backends use slots indexed
> > > -		 * in the range from 0 to MaxBackends (exclusive), so we use
> > > -		 * MaxBackends + AuxProcType as the index of the slot for an auxiliary
> > > -		 * process.
> > > +		 * auxiliary process type.  Backends use slots indexed in the range
> > > +		 * from 0 to MaxBackends (exclusive), and aux processes use the slots
> > > +		 * after that.
> > >   		 */
> > > -		MyBEEntry = &BackendStatusArray[MaxBackends + MyAuxProcType];
> > > +		MyBEEntry = &BackendStatusArray[MaxBackends + MyBackendType - FIRST_AUX_PROC];
> > >   	}
> > 
> > Hm, this seems less than pretty. It's probably ok for now, but it seems like a
> > better fix might be to just start assigning backend ids to aux procs or switch
> > to indexing by pgprocno?
> 
> Using pgprocno is a good idea. Come to think of it, why do we even have a
> concept of backend ID that's separate from pgprocno? backend ID is used to
> index the ProcState array, but AFAICS we could use pgprocno as the index to
> that, too.
I think we should do that. There are a few processes not participating in
sinval, but it doesn't make enough of a difference to make sinval slower. And
I think there'd be far bigger efficiency improvements to sinvaladt than not
having a handful more entries.
Greetings,
Andres Freund
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Andres Freund | 2024-01-23 20:07:04 | Re: the s_lock_stuck on perform_spin_delay | 
| Previous Message | Andres Freund | 2024-01-23 19:47:08 | Re: Remove pthread_is_threaded_np() checks in postmaster |