Re: Something fishy happening on frogmouth
Andres Freund <andres@2ndquadrant.com>
From: Andres Freund <andres@2ndquadrant.com>
To: Heikki Linnakangas <hlinnakangas@vmware.com>
Cc: Noah Misch <noah@leadboat.com>, Robert Haas <robertmhaas@gmail.com>,
Tom Lane <tgl@sss.pgh.pa.us>, Andrew Dunstan <andrew@dunslane.net>,
"pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2013-11-04T11:19:12Z
Lists: pgsql-hackers
On 2013-11-04 13:13:27 +0200, Heikki Linnakangas wrote: > On 04.11.2013 11:55, Andres Freund wrote: > >On 2013-11-04 10:27:47 +0200, Heikki Linnakangas wrote: > >>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. That quickly will result in fragmentation which we don't have the tools to handle. > >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." We also support sysv shmem and have the same cleanup problem there. > 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. Probably true. > >I think this is looking for a solution without an actually relevant > >problem disregarding the actual problem space. To make that clearer: I think the discussions about making it impossible to leak segments after rm -rf are the irrelevant problem. > I agree. What are these dynamic shared memory segments supposed to be used > for? Parallel sort and stuff like that. Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Commits
-
Initialize random() in bootstrap/stand-alone postgres and in initdb.
- 402da7054f34 9.3.25 landed
- 401228183a63 9.4.20 landed
- d68d5adfdcae 9.5.15 landed
- 89f2b64da370 11.0 landed
- 4232cff11b84 10.6 landed
- 329cacb90270 9.6.11 landed
- d18f6674bd60 12.0 landed
-
Modify dynamic shared memory code to use Size rather than uint64.
- d2aecaea1555 9.4.0 cited