Re: Enhancing Memory Context Statistics Reporting - Mailing list pgsql-hackers

From Rahila Syed
Subject Re: Enhancing Memory Context Statistics Reporting
Date
Msg-id CAH2L28tzfSdFawTQS45SWVR5mqk2iQBDz0hFahCZEQOf93HxrQ@mail.gmail.com
Whole thread Raw
In response to Re: Enhancing Memory Context Statistics Reporting  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers


That's not an argument against moving it to BaseInit() though, as that's
called before procsignal is even initialized and before signals are unmasked.
 
Yes, OK.

> 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.

I strongly disagree.  The limit should be in an understandable unit, not on
another subystems's defaults that might change at some point.
 
OK, makes sense.
 


> > +     /* 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.

Pretty sure it's reachable, consider a failure of dsa_allocate(). That'll
throw an error, while attached to the segment.

 
You are right, I did not think of this scenario. 
 

> This could be an assert but since it is a cleanup code, I thought returning
> would be a harmless step.

The problem is that the code seems wrong - if we are already attached we'll
leak the memory!

 
I understand your concern. One issue I recall is that we do not have a dsa_find_mapping
function similar to dsm_find_mapping(). If I understand correctly, the only way to access
an already attached DSA is to ensure we store the DSA area mapping in a global variable.
I'm considering using a global variable and accessing it from the cleanup function in case
it is already mapped.
Does that sound fine?


As I also mentioned, I don't understand why we're constantly
attaching/detaching from the dsa/dsm either. It just seems to make things more
complicated an dmore expensive.

OK, I see that this could be expensive if a process is periodically being queried for
statistics. However, in scenarios where a process is queried only once for memory,
statistics, keeping the area mapped would consume memory resources, correct?
 

Thank you,
Rahila Syed
 

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Support NOT VALID / VALIDATE constraint options for named NOT NULL constraints
Next
From: Steve Chavez
Date:
Subject: Re: [PATCH] clarify palloc comment on quote_literal_cstr