On Sat, Jan 27, 2018 at 6:43 PM, Ævar Arnfjörð Bjarmason <ava...@gmail.com> wrote: > a) no fsmonitor > > $ time GIT_TRACE_PERFORMANCE=1 ~/g/git/git-status > 12:32:44.947651 read-cache.c:1890 performance: 0.053153609 s: read > cache .git/index > 12:32:44.967943 preload-index.c:112 performance: 0.020161093 s: > preload index > 12:32:44.974217 read-cache.c:1446 performance: 0.006230611 s: > refresh index > > ... > > b) with fsmonitor > > $ time GIT_TRACE_PERFORMANCE=1 ~/g/git/git-status > 12:34:23.833625 read-cache.c:1890 performance: 0.049485685 s: read > cache .git/index > 12:34:23.838622 preload-index.c:112 performance: 0.001221197 s: > preload index > 12:34:23.858723 fsmonitor.c:170 performance: 0.020059647 s: > fsmonitor process '.git/hooks/fsmonitor-watchman' > 12:34:23.871532 read-cache.c:1446 performance: 0.032870818 s: > refresh index
Hmm.. why does refresh take longer with fsmonitor/watchman? With the help from watchman, we know what files are modified. We don't need manual stat()'ing and this line should be lower than the "no fsmonitor" case, which is 0.006230611s. > 12:34:23.876427 diff-lib.c:250 performance: 0.004731427 s: > diff-files > 12:34:23.880669 diff-lib.c:527 performance: 0.003944422 s: > diff-index > 12:34:23.899225 dir.c:2290 performance: 0.018509066 s: read > directory > 12:34:23.901914 trace.c:417 performance: 0.118250995 s: git > command: '/home/aearnfjord/g/git/git-status' I don't see any "write index" line here, which is interesting since your case c) is about "don't write index". > c) with fsmonitor + don't write index -- Duy