[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#60474: 30.0.50; `write-region-inhibit-fsync' and copy-on-write file
From: |
Ihor Radchenko |
Subject: |
bug#60474: 30.0.50; `write-region-inhibit-fsync' and copy-on-write file systems |
Date: |
Sun, 01 Jan 2023 18:51:59 +0000 |
Hi,
We are currently exploring performance of frequent file writes in Emacs.
This is important in org-persist library when we need to cache large
number of data pieces, writing them on disk.
It turns out that Emacs is pretty slow when writing hundreds of files:
(benchmark-run-compiled
1000
(with-temp-file "/tmp/test"
(insert "test"))) ; => 4 sec
Mostly because of fsync:
(benchmark-run-compiled
1000
(let ((write-region-inhibit-fsync t))
(with-temp-file "/tmp/test"
(insert "test")))) ; => 0.15 sec
Timothy have found the following comment in src/fileio.c:
/* fsync can be a significant performance hit. Often it doesn't
suffice to make the file-save operation survive a crash. For
batch scripts, which are typically part of larger shell commands
that don't fsync other files, its effect on performance can be
significant so its utility is particularly questionable.
Hence, for now by default fsync is used only when interactive.
For more on why fsync often fails to work on today's hardware, see:
Zheng M et al. Understanding the robustness of SSDs under power fault.
11th USENIX Conf. on File and Storage Technologies, 2013 (FAST '13), 271-84
https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf
For more on why fsync does not suffice even if it works properly, see:
Roche X. Necessary step(s) to synchronize filename operations on disk.
Austin Group Defect 672, 2013-03-19
https://austingroupbugs.net/view.php?id=672 */
write_region_inhibit_fsync = noninteractive;
Although fsync may provide some benefit on generic file systems, it does
not look like it is any useful in copy-on-write file systems.
I am wondering if Emacs could detect file system when writing the file
and disable fsync for FSes like BTRFS and other CoW file systems.
In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.35, cairo version 1.17.6) of 2022-12-26 built on localhost
Repository revision: cc29fab3a66c59e77d0ff67c0f3e2e34ec80a03c
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101004
System Description: Gentoo Linux
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
- bug#60474: 30.0.50; `write-region-inhibit-fsync' and copy-on-write file systems,
Ihor Radchenko <=