mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Support direct I/O on macOS.
Macs don't understand O_DIRECT, but they can disable caching with a separate fcntl() call. Extend the file opening functions in fd.c to handle this for us if the caller passes in PG_O_DIRECT. For now, this affects only WAL data and even then only if you set: max_wal_senders=0 wal_level=minimal This is not expected to be very useful on its own, but later proposed patches will make greater use of direct I/O, and it'll be useful for testing if developers on Macs can see the effects. Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CA%2BhUKG%2BADiyyHe0cun2wfT%2BSVnFVqNYPxoO6J9zcZkVO7%2BNGig%40mail.gmail.com
This commit is contained in:
@@ -79,6 +79,22 @@ extern int max_safe_fds;
|
||||
#define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT || (err) == EACCES)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* O_DIRECT is not standard, but almost every Unix has it. We translate it
|
||||
* to the appropriate Windows flag in src/port/open.c. We simulate it with
|
||||
* fcntl(F_NOCACHE) on macOS inside fd.c's open() wrapper. We use the name
|
||||
* PG_O_DIRECT rather than defining O_DIRECT in that case (probably not a good
|
||||
* idea on a Unix).
|
||||
*/
|
||||
#if defined(O_DIRECT)
|
||||
#define PG_O_DIRECT O_DIRECT
|
||||
#elif defined(F_NOCACHE)
|
||||
#define PG_O_DIRECT 0x80000000
|
||||
#define PG_O_DIRECT_USE_F_NOCACHE
|
||||
#else
|
||||
#define PG_O_DIRECT 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* prototypes for functions in fd.c
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user