On Sat, Jan 27, 2018 at 6:43 PM, Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> 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