On Wed, Jan 19, 2011 at 1:53 PM, Bruce Momjian <br...@momjian.us> wrote: > Is there a reason we only use O_DIRECT with open_* sync options? > xlogdefs.h says: > > /* > * Because O_DIRECT bypasses the kernel buffers, and because we never > * read those buffers except during crash recovery, it is a win to use > * it in all cases where we sync on each write(). We could allow O_DIRECT > * with fsync(), but because skipping the kernel buffer forces writes out > * quickly, it seems best just to use it for O_SYNC. It is hard to imagine > * how fsync() could be a win for O_DIRECT compared to O_SYNC and O_DIRECT. > * Also, O_DIRECT is never enough to force data to the drives, it merely > * tries to bypass the kernel cache, so we still need O_SYNC or fsync(). > */ > > This seems wrong because fsync() can win if there are two writes before > the sync call.
Well, the comment does say "...in all cases where we sync on each write()". But that's certainly not true of WAL, so I dunno. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers