]> git.ipfire.org Git - thirdparty/git.git/commit - Makefile
core.fsyncmethod: add writeout-only mode
authorNeeraj Singh <neerajsi@microsoft.com>
Thu, 10 Mar 2022 22:43:20 +0000 (22:43 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 10 Mar 2022 23:10:22 +0000 (15:10 -0800)
commitabf38abec201cded6094801766d69e11a6c112b6
treef1258b40f52f600be015a365ae5e57ed3b977a33
parent19d3f228c8df7e946278c96fb52acf1cea0f6a7a
core.fsyncmethod: add writeout-only mode

This commit introduces the `core.fsyncMethod` configuration
knob, which can currently be set to `fsync` or `writeout-only`.

The new writeout-only mode attempts to tell the operating system to
flush its in-memory page cache to the storage hardware without issuing a
CACHE_FLUSH command to the storage controller.

Writeout-only fsync is significantly faster than a vanilla fsync on
common hardware, since data is written to a disk-side cache rather than
all the way to a durable medium. Later changes in this patch series will
take advantage of this primitive to implement batching of hardware
flushes.

When git_fsync is called with FSYNC_WRITEOUT_ONLY, it may fail and the
caller is expected to do an ordinary fsync as needed.

On Apple platforms, the fsync system call does not issue a CACHE_FLUSH
directive to the storage controller. This change updates fsync to do
fcntl(F_FULLFSYNC) to make fsync actually durable. We maintain parity
with existing behavior on Apple platforms by setting the default value
of the new core.fsyncMethod option.

Signed-off-by: Neeraj Singh <neerajsi@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 files changed:
Documentation/config/core.txt
Makefile
cache.h
compat/mingw.h
compat/win32/flush.c [new file with mode: 0644]
config.c
config.mak.uname
configure.ac
contrib/buildsystems/CMakeLists.txt
environment.c
git-compat-util.h
wrapper.c
write-or-die.c