Windows now has fdatasync()
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2021-12-12T02:48:10Z
Lists: pgsql-hackers
Attachments
- 0001-Fix-treatment-of-direct-I-O-in-pg_test_fsync.patch (text/x-patch) patch 0001
- 0002-Add-fdatasync-wrapper-for-Windows.patch (text/x-patch) patch 0002
Hi, While porting some new IO code to lots of OSes I noticed in passing that there is now a way to do synchronous fdatasync() on Windows. This mechanism doesn't have an async variant, which is what I was actually looking for (which turns out to doable with bleeding edge IoRings, more on that later), but I figured this might be useful anyway. I see that at least one other open source database has discovered it and seen speedups. Like some other file API improvements discussed recently, it's Windows 10+ and NTFS only. I tried out a quick POC patch and it runs a bit faster than fsync(), as expected. I'm not sure if it's worth bothering with or not given the other options, but figured it was worth sharing. While testing that I also couldn't resist adding an extra output line to pg_test_fsync to run open_datasync in buffered I/O mode, like PostgreSQL actually does in real life. I guess I should really change it to duplicate less code, though... [1] https://www.postgresql.org/message-id/flat/1527846213.2475.31.camel%40cybertec.at
Commits
-
Remove configure probe for fdatasync.
- d2e150831af8 16.0 landed
-
Remove O_FSYNC and associated macros.
- a1b56090eb54 16.0 landed
-
Fix warnings on Windows.
- bde60daa0ec9 16.0 landed
-
Add wal_sync_method=fdatasync for Windows.
- 9430fb407bb6 16.0 landed