Re: [HACKERS] Regarding Postgres Dynamic Shared Memory (DSA) - Mailing list pgsql-hackers

From Mahi Gurram
Subject Re: [HACKERS] Regarding Postgres Dynamic Shared Memory (DSA)
Date
Msg-id CAGg=Gue4Gja+u=SPz+rPU_0JXTJURvVAG2+KLGbvfuoWPSdVVQ@mail.gmail.com
Whole thread Raw
In response to Re: [HACKERS] Regarding Postgres Dynamic Shared Memory (DSA)  (Mahi Gurram <teckymahi@gmail.com>)
Responses Re: [HACKERS] Regarding Postgres Dynamic Shared Memory (DSA)  (Mahi Gurram <teckymahi@gmail.com>)
List pgsql-hackers
Hi,

As Michael said, i'm creating DSA too early. Shared_Preload libraries are loading prior to memory related stuff. 

But i'm totally clueless how to solve my use case.

Please help me with any work around. 

Thanks & Best Regards,
- Mahi

On Tue, May 23, 2017 at 5:52 PM, Mahi Gurram <teckymahi@gmail.com> wrote:
Hi Michael,

Thanks for your response.

All i'm building is In-Memory Index as an extension over Postgres.

Postgres Indexes will get Insert calls and Read calls from various processes(typically client/connection process - forked processes to postmaster process). Hence i have to maintain my In-Memory index in shared memory.

If i create DynamicSharedArea (DSA) in postmaster/main process, all these Client/Connection processes(In-Memory Index Processes)  need not attach to that DSA using area handle. Because these are forked processes to postmaster/Main process and hence they automatically gets attached.

Hence i'm trying to create DSA in _PG_init function as it is called by postmaster/main process.

Hope this is clear.

Thanks & Best Regards,
- Mahi
  

On Tue, May 23, 2017 at 5:30 PM, Michael Paquier <michael.paquier@gmail.com> wrote:
On Tue, May 23, 2017 at 6:42 AM, Mahi Gurram <teckymahi@gmail.com> wrote:
> I'm building In-Memory index extension for Postgres, for which i'm trying to
> use DSA. But ended with some issues, as it is not allowing me to create
> DSA(Dynamic Shared Area) in _PG_init function.
>
> Please refer my_PG_init code below:
>>
>> void
>> _PG_init(void)
>> {
>> area = dsa_create(LWLockNewTrancheId(), "CustomIndex_DSA");
>> area_handle = dsa_get_handle(area);
>> }
>
>
> Because of this code, Postgres is not starting. Not even giving any error
> messages in pg logs. Hence, i'm totally clue less :(

It seems to me that you are creating those too early. For example, for
a background worker process, DSA segments would likely be created in
the main process routine. Without understanding what you are trying to
achieve, it is hard to make a good answer. You could always use a
ramdisk, but that would be likely be a waste of memory as Postgres has
its own buffer pool, killing the performance gains of OS caching.
--
Michael


pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: [HACKERS] Causal reads take II
Next
From: Mahi Gurram
Date:
Subject: Re: [HACKERS] Regarding Postgres Dynamic Shared Memory (DSA)