On Fri, Apr 2, 2021 at 9:42 AM Tom Lane <t...@sss.pgh.pa.us> wrote: > Thomas Munro <thomas.mu...@enterprisedb.com> writes: > > On Tue, Jan 8, 2019 at 7:14 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > >> So I looked around for an alternative, and found out that modern > >> OpenBSD releases support named POSIX semaphores (though not unnamed > >> ones, at least not shared unnamed ones). What's more, it appears that > >> in this implementation, named semaphores don't eat open file descriptors > >> as they do on macOS, removing our major objection to using them. > > > No OpenBSD here, but I was curious enough to peek at their > > implementation. Like others, they create a tiny file under /tmp for > > each one, mmap() and close the fd straight away. > > Oh, yeah, I can see a bunch of tiny mappings with procmap. I wonder > whether that scales any better than an open FD per semaphore, when > it comes to forking a bunch of child processes that will inherit > all those mappings or FDs. I've not tried to benchmark child process > launch as such --- as I said, I'm not running this on hardware that > would support serious benchmarking.
I also have no ability to benchmark on a real OpenBSD system, but once a year or so when I spin up a little OpenBSD VM to test some patch or other, it annoys me that our tests fail out of the box and then I have to look up how to change the sysctls, so here's a patch. I also checked the release notes to confirm that 5.5 is the right release to look for[1]; by now that's EOL and probably not even worth bothering with the test but doesn't cost much to be cautious about that. 4.x is surely too old to waste electrons on. I guess the question for OpenBSD experts is whether having (say) a thousand tiny mappings is bad. On the plus side, we know from other Oses that having semas spread out is good for reducing false sharing on large systems. [1] https://www.openbsd.org/55.html
From e7bcfa563e568ca8d3474432fd094a38205c78f0 Mon Sep 17 00:00:00 2001 From: Thomas Munro <thomas.mu...@gmail.com> Date: Fri, 2 Apr 2021 03:43:26 +1300 Subject: [PATCH] Use POSIX_NAMED_SEMAPHORES on OpenBSD. For PostgreSQL to work out of the box without sysctl changes, let's use POSIX semaphores instead of System V ones. The "unamed" kind aren't supported in shared memory, so we use the "named" kind. Discussion: https://postgr.es/m/27582.1546928073%40sss.pgh.pa.us --- doc/src/sgml/runtime.sgml | 6 +----- src/template/openbsd | 11 +++++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index bf877c0e0c..9aa3129aba 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -998,11 +998,7 @@ psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such <para> The default shared memory settings are usually good enough, unless you have set <literal>shared_memory_type</literal> to <literal>sysv</literal>. - You will usually want to - increase <literal>kern.seminfo.semmni</literal> - and <literal>kern.seminfo.semmns</literal>, - as <systemitem class="osname">OpenBSD</systemitem>'s default settings - for these are uncomfortably small. + System V semaphores are not used on this platform (since OpenBSD 5.5). </para> <para> diff --git a/src/template/openbsd b/src/template/openbsd index 365268c489..d3b6bf464a 100644 --- a/src/template/openbsd +++ b/src/template/openbsd @@ -2,3 +2,14 @@ # Extra CFLAGS for code that will go into a shared library CFLAGS_SL="-fPIC -DPIC" + +# OpenBSD 5.5 (2014) gained named POSIX semaphores. They work out of the box +# without changing any sysctl settings, unlike System V semaphores. +case $host_os in + openbsd5.[01234]*) + USE_SYSV_SEMAPHORES=1 + ;; + *) + USE_NAMED_POSIX_SEMAPHORES=1 + ;; +esac -- 2.30.1