defaults: disable 'fsync'

ref #6725

fsync() is very slow on some systems.  And since the parent commit, Nvim
is smarter about flushing files at certain times (e.g. CursorHold),
regardless of whether 'fsync' is enabled.  So it's less risky to disable
'fsync'.

Profiling showed slow (2-4s) :write and :quit caused by fsync():

:quit
    shada_write_file(NULL, false);

:write + fsync
    0  0x00007f72da567b2d in fsync () at ../sysdeps/unix/syscall-template.S:84
    1  0x0000000000638970 in uv__fs_fsync (req=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:150
    2  uv__fs_work (w=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:953
    3  0x0000000000639a70 in uv_fs_fsync (loop=<optimized out>, req=<optimized out>, file=41, cb=0x7f72da567b2d <fsync+45>)
       at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:1094
    4  0x0000000000573694 in os_fsync (fd=41) at ../src/nvim/os/fs.c:631
    5  0x00000000004ec9dc in buf_write (buf=<optimized out>, fname=<optimized out>, sfname=<optimized out>, start=1, end=1997, eap=0x7fffc864c570,
       append=<optimized out>, forceit=<optimized out>, reset_changed=<optimized out>, filtering=<optimized out>) at ../src/nvim/fileio.c:3387
    6  0x00000000004b44ff in do_write (eap=0x7fffc864c570) at ../src/nvim/ex_cmds.c:1745
    ...

:write + nofsync
    0  0x00007f72da567b2d in fsync () at ../sysdeps/unix/syscall-template.S:84
    1  0x0000000000638970 in uv__fs_fsync (req=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:150
    2  uv__fs_work (w=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:953
    3  0x0000000000639a70 in uv_fs_fsync (loop=<optimized out>, req=<optimized out>, file=36, cb=0x7f72da567b2d <fsync+45>)
       at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:1094
    4  0x0000000000573694 in os_fsync (fd=36) at ../src/nvim/os/fs.c:631
    5  0x0000000000528f5a in mf_sync (mfp=0x7f72d8968d00, flags=5) at ../src/nvim/memfile.c:466
    6  0x000000000052d569 in ml_preserve (buf=0x7f72d890f000, message=0) at ../src/nvim/memline.c:1659
    7  0x00000000004ebadf in buf_write (buf=<optimized out>, fname=<optimized out>, sfname=<optimized out>, start=1, end=1997, eap=0x7fffc864c570,
       append=<optimized out>, forceit=<optimized out>, reset_changed=<optimized out>, filtering=<optimized out>) at ../src/nvim/fileio.c:3071
    8  0x00000000004b44ff in do_write (eap=0x7fffc864c570) at ../src/nvim/ex_cmds.c:1745
    ...
This commit is contained in:
Justin M. Keyes
2018-04-21 01:27:55 +02:00
parent 498731615c
commit 9139bf81cf
2 changed files with 12 additions and 10 deletions

View File

@@ -2690,17 +2690,19 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons. security reasons.
*'fsync'* *'fs'* *'fsync'* *'fs'*
'fsync' 'fs' boolean (default on) 'fsync' 'fs' boolean (default off)
global global
When on, the library function fsync() will be called after writing a When on, the OS function fsync() will be called after saving a file
file. This will flush a file to disk, ensuring that it is safely (|:write|, |writefile()|, …), |swap-file| and |shada-file|. This
written even on filesystems which do metadata-only journaling. This flushes the file to disk, ensuring that it is safely written.
will force the harddrive to spin up on Linux systems running in laptop Slow on some systems: writing buffers, quitting Nvim, and other
mode, so it may be undesirable in some situations. Be warned that operations may sometimes take a few seconds.
turning this off increases the chances of data loss after a crash.
Currently applies only to writing the buffer with e.g. |:w| and Files are ALWAYS flushed ('fsync' is ignored) when:
|writefile()|. - |CursorHold| event is triggered
- |:preserve| is called
- system signals low battery life
- Nvim exits abnormally
*'gdefault'* *'gd'* *'nogdefault'* *'nogd'* *'gdefault'* *'gd'* *'nogdefault'* *'nogd'*
'gdefault' 'gd' boolean (default off) 'gdefault' 'gd' boolean (default off)

View File

@@ -976,7 +976,7 @@ return {
secure=true, secure=true,
vi_def=true, vi_def=true,
varname='p_fs', varname='p_fs',
defaults={if_true={vi=true}} defaults={if_true={vi=false}}
}, },
{ {
full_name='gdefault', abbreviation='gd', full_name='gdefault', abbreviation='gd',