On 04.11.2013 11:55, Andres Freund wrote:
On 2013-11-04 10:27:47 +0200, Heikki Linnakangas wrote:
Hmm, here's another idea:

Postmaster creates the POSIX shared memory object at startup, by calling
shm_open(), and immediately calls shm_unlink on it. That way, once all the
processes have exited, the object will be removed automatically. Child
processes inherit the file descriptor at fork(), and don't need to call
shm_open, just mmap().

Uh. Won't that completely and utterly remove the point of dsm which is
that you can create segments *after* startup? We surely don't want to
start overallocating enough shmem so we don't ever dynamically need to
allocate segments.

You don't need to allocate the shared memory beforehand, only create the file descriptor. Note that the size of the segment is specified in the shm_open() call, but the mmap() that comes later.

If we need a large amount of small segments, so that it's not feasible to shm_open() them all at postmaster startup, you could shm_open() just one segment, and carve out smaller segments from it by mmap()ing at different offsets.

Also, I don't think it's portable across platforms to access segments
that already have been unlinked.

See http://pubs.opengroup.org/onlinepubs/009695299/functions/shm_unlink.html: "If one or more references to the shared memory object exist when the object is unlinked, the name shall be removed before shm_unlink() returns, but the removal of the memory object contents shall be postponed until all open and map references to the shared memory object have been removed."

That doesn't explicitly say that a new shm_open() on the file descriptor must still work after shm_unlink, but I would be surprised if there is a platform where it doesn't.

I think this is looking for a solution without an actually relevant
problem disregarding the actual problem space.

I agree. What are these dynamic shared memory segments supposed to be used for?

- Heikki


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to