RE: Some shared memory chunks are allocated even if related processes won't start
От
Hayato Kuroda (Fujitsu)
Тема
RE: Some shared memory chunks are allocated even if related processes won't start
Дата
Msg-id
TYCPR01MB1207763B3AFB6DB7C49B27613F5222@TYCPR01MB12077.jpnprd01.prod.outlook.com
Ответ на
Re: Some shared memory chunks are allocated even if related processes won't start ('Alvaro Herrera')
Список
Дерево обсуждения
Some shared memory chunks are allocated even if related processes won't start "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Re: Some shared memory chunks are allocated even if related processes won't start Alvaro Herrera <alvherre@alvh.no-ip.org>
RE: Some shared memory chunks are allocated even if related processes won't start "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Re: Some shared memory chunks are allocated even if related processes won't start 'Alvaro Herrera' <alvherre@alvh.no-ip.org>
RE: Some shared memory chunks are allocated even if related processes won't start "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Re: Some shared memory chunks are allocated even if related processes won't start 'Alvaro Herrera' <alvherre@alvh.no-ip.org>
RE: Some shared memory chunks are allocated even if related processes won't start "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Re: Some shared memory chunks are allocated even if related processes won't start 'Alvaro Herrera' <alvherre@alvh.no-ip.org>
Re: Some shared memory chunks are allocated even if related processes won't start Tom Lane <tgl@sss.pgh.pa.us>
RE: Some shared memory chunks are allocated even if related processes won't start "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Dear Alvaro,
Thanks for giving comments!
> > I agreed it sounds good, but I don't think it can be implemented by
> > current interface. An interface for dynamically allocating memory is
> > GetNamedDSMSegment(), and it returns the same shared memory region if
> > input names are the same. Therefore, there is no way to re-alloc the
> > shared memory.
>
> Yeah, I was imagining something like this: the workitem-array becomes a
> struct, which has a name and a "next" pointer and a variable number of
> workitem slots; the AutoVacuumShmem struct has a pointer to the first
> workitem-struct and the last one; when a workitem is requested by
> brininsert, we initially allocate via GetNamedDSMSegment("workitem-0") a
> workitem-struct with a smallish number of elements; if we request
> another workitem and the array is full, we allocate another array via
> GetNamedDSMSegment("workitem-1") and store a pointer to it in workitem-0
> (so that the list can be followed by an autovacuum worker that's
> processing the database), and it's also set as the tail of the list in
> AutoVacuumShmem (so that we know where to store further work items).
> When all items in a workitem-struct are processed, we can free it
> (I guess via dsm_unpin_segment), and make AutoVacuumShmem->av_workitems
> point to the next one in the list.
>
> This way, the "array" can grow arbitrarily.
>
Basically sounds good. My concerns are:
* GetNamedDSMSegment() does not returns a raw pointer to dsm_segment. This means
that it may be difficult to do dsm_unpin_segment on the caller side.
* dynamic shared memory is recorded in dhash (dsm_registry_table) and the entry
won't be deleted. The reference for the chunk might be remained.
Overall, it may be needed that dsm_registry may be also extended. I do not start
working yet, so will share results after trying them.
Best Regards,
Hayato Kuroda
FUJITSU LIMITED
https://www.fujitsu.com/
В списке pgsql-hackers по дате отправления
От: Nathan Bossart
Дата: