unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#60474: 30.0.50; `write-region-inhibit-fsync' and copy-on-write file systems
@ 2023-01-01 18:51 Ihor Radchenko
  2023-01-01 20:07 ` Eli Zaretskii
  0 siblings, 1 reply; 7+ messages in thread
From: Ihor Radchenko @ 2023-01-01 18:51 UTC (permalink / raw)
  To: 60474; +Cc: Timothy

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>





^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-01-02 19:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-01 18:51 bug#60474: 30.0.50; `write-region-inhibit-fsync' and copy-on-write file systems Ihor Radchenko
2023-01-01 20:07 ` Eli Zaretskii
2023-01-02  3:21   ` Paul Eggert
2023-01-02  5:54     ` Ihor Radchenko
2023-01-02 12:23       ` Eli Zaretskii
2023-01-02 12:12     ` Eli Zaretskii
2023-01-02 19:38       ` Paul Eggert

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).