Re: macOS prefetching support
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2024-08-16T18:58:33Z
Lists: pgsql-hackers
Attachments
- v2-0001-Add-prefetching-support-on-macOS.patch (text/plain) patch v2-0001
On 14.08.24 16:39, Peter Eisentraut wrote: > On 14.08.24 14:36, Thomas Munro wrote: >> On Wed, Aug 14, 2024 at 7:04 PM Peter Eisentraut >> <peter@eisentraut.org> wrote: >>> Attached is a patch to implement this. It seems to work, but of course >>> it's kind of hard to tell whether it actually does anything useful. >> >> Header order problem: pg_config_os.h defines __darwin__, but >> pg_config_manual.h is included first, and tests __darwin__. I hacked >> my way around that, and then made a table of 40,000,000 integers in a >> 2GB buffer pool. I used "select count(pg_buffercache_evict(buffered)) >> from pg_buffer_cache", and "sudo purge", to clear the two layers of >> cache for each test, and then measured: >> >> maintenance_io_concurrency=0, ANALYZE: 2311ms >> maintenance_io_concurrency=10, ANALYZE: 652ms >> maintenance_io_concurrency=25, ANALYZE: 389ms >> >> It works! > > Cool! I'll work on a more polished patch. Here it is. Some interesting questions: What to do about the order of the symbols and include files. I threw something into src/include/port/darwin.h, but I'm not sure if that's good. Alternatively, we could not use __darwin__ but instead the more standard and predefined defined(__APPLE__) && defined(__MACH__). How to document it. The current documentation makes references mainly to the availability of posix_fadvise(). That seems quite low-level. How could a user of a prepared package even find out about that? Should we just say "requires OS support" (kind of like I did here) and you can query the effective state by looking at the *_io_concurrency settings? Or do we need a read-only parameter that shows whether prefetch support exists (kind of along the lines of huge pages)? Btw., for context, here is what I gather the prefetch support (with this patch) is: cygwin posix_fadvise darwin fcntl freebsd posix_fadvise linux posix_fadvise netbsd posix_fadvise openbsd no solaris fake win32 no (There is also the possibility that we provide an implementation of posix_fadvise() for macOS that wraps the platform-specific code in this patch. And then Apple could just take that. ;-) )
Commits
-
Standardize "read-ahead advice" terminology.
- 813fde73d4dd 18.0 landed
-
Fixup for prefetching support on macOS
- d7fe02fb9e6e 18.0 landed
-
Add prefetching support on macOS
- 6654bb92047b 18.0 landed