Hi,

Please see some responses below.

On Mon, Apr 7, 2025 at 9:13 PM Andres Freund <and...@anarazel.de> wrote:

> Hi,
>
> On 2025-04-07 15:41:37 +0200, Daniel Gustafsson wrote:
> > I think this function can be a valuable debugging aid going forward.
>
> What I am most excited about for this is to be able to measure server-wide
> and
> fleet-wide memory usage over time. Today I have actually very little idea
> about what memory is being used for across all connections, not to speak
> of a
> larger number of servers.
>
>
> > diff --git a/src/backend/postmaster/auxprocess.c
> b/src/backend/postmaster/auxprocess.c
> > index 4f6795f7265..d3b4df27935 100644
> > --- a/src/backend/postmaster/auxprocess.c
> > +++ b/src/backend/postmaster/auxprocess.c
> > @@ -84,6 +84,13 @@ AuxiliaryProcessMainCommon(void)
> >       /* register a before-shutdown callback for LWLock cleanup */
> >       before_shmem_exit(ShutdownAuxiliaryProcess, 0);
> >
> > +     /*
> > +      * The before shmem exit callback frees the DSA memory occupied by
> the
> > +      * latest memory context statistics that could be published by
> this aux
> > +      * proc if requested.
> > +      */
> > +     before_shmem_exit(AtProcExit_memstats_dsa_free, 0);
> > +
> >       SetProcessingMode(NormalProcessing);
> >  }
>
> How about putting it into BaseInit()?  Or maybe just register it when its
> first used?
>
>
Problem with registering it when dsa is first used is that dsa is used in
an interrupt handler.
The handler could be called from the PG_ENSURE_ERROR_CLEANUP block. This
block
operates under the assumption that the before_shmem_exit callback
registered at the beginning,
will be the last one in the registered callback list at the end of the
block. However, this won't be
the case if a callback is registered from an interrupt handler called in
the
PG_ENSURE_ERROR_CLEANUP block.


>

I don't really understand why DSA_DEFAULT_INIT_SEGMENT_SIZE is

something that makes sense to use here?
>
>
To determine the memory  limit per backend in multiples of
DSA_DEFAULT_INIT_SEGMENT_SIZE.
Currently it is set to  1 * DSA_DEFAULT_INIT_SEGMENT_SIZE.
Since a call to dsa_create would create a DSA segment of this size, I
thought it makes sense
to define a limit related to the segment size.



> > +/*
>
> +     /* If the dsm mapping could not be found, attach to the area */
> > +     if (dsm_seg != NULL)
> > +             return;
>
> I don't understand what we do here with the dsm?  Why do we not need
> cleanup
> if we are already attached to the dsm segment?
>

I am not expecting to hit this case, since we are always detaching from the
dsa.
This could be an assert but since it is a cleanup code, I thought returning
would be
a harmless step.

Thank you,
Rahila Syed

Reply via email to