Skip to content

Commit

Permalink
p7519: add trace logging during perf test
Browse files Browse the repository at this point in the history
Add optional trace logging to allow us to better compare performance of
various fsmonitor providers and compare results with non-fsmonitor runs.

Currently, this includes Trace2 logging, but may be extended to include
other trace targets, such as GIT_TRACE_FSMONITOR if desired.

Using this logging helped me explain an odd behavior on MacOS where the
kernel was dropping events and causing the hook to Watchman to timeout.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
jeffhostetler authored and gitster committed Feb 17, 2021
1 parent a7556c3 commit 4f2009d
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 2 deletions.
1 change: 1 addition & 0 deletions t/perf/.gitignore
@@ -1,3 +1,4 @@
/build/
/test-results/
/test-trace/
/trash directory*/
4 changes: 2 additions & 2 deletions t/perf/Makefile
Expand Up @@ -7,10 +7,10 @@ perf: pre-clean
./run

pre-clean:
rm -rf test-results
rm -rf test-results test-trace

clean:
rm -rf build "trash directory".* test-results
rm -rf build "trash directory".* test-results test-trace

test-lint:
$(MAKE) -C .. test-lint
Expand Down
32 changes: 32 additions & 0 deletions t/perf/p7519-fsmonitor.sh
Expand Up @@ -32,6 +32,8 @@ test_description="Test core.fsmonitor"
#
# GIT_PERF_7519_DROP_CACHE: if set, the OS caches are dropped between tests
#
# GIT_PERF_7519_TRACE: if set, enable trace logging during the test.
# Trace logs will be grouped by fsmonitor provider.

test_perf_large_repo
test_checkout_worktree
Expand Down Expand Up @@ -70,6 +72,32 @@ then
fi
fi

trace_start() {
if test -n "$GIT_PERF_7519_TRACE"
then
name="$1"
TEST_TRACE_DIR="$TEST_OUTPUT_DIRECTORY/test-trace/p7519/"
echo "Writing trace logging to $TEST_TRACE_DIR"

mkdir -p "$TEST_TRACE_DIR"

# Start Trace2 logging and any other GIT_TRACE_* logs that you
# want for this named test case.

GIT_TRACE2_PERF="$TEST_TRACE_DIR/$name.trace2perf"
export GIT_TRACE2_PERF

>"$GIT_TRACE2_PERF"
fi
}

trace_stop() {
if test -n "$GIT_PERF_7519_TRACE"
then
unset GIT_TRACE2_PERF
fi
}

test_expect_success "one time repo setup" '
# set untrackedCache depending on the environment
if test -n "$GIT_PERF_7519_UNTRACKED_CACHE"
Expand Down Expand Up @@ -213,6 +241,7 @@ test_fsmonitor_suite() {
# such as Watchman.
#

trace_start fsmonitor-watchman
if test -n "$GIT_PERF_7519_FSMONITOR"; then
for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do
test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor'
Expand All @@ -231,17 +260,20 @@ then
# preventing the removal of the trash directory
watchman shutdown-server >/dev/null 2>&1
fi
trace_stop

#
# Run a full set of perf tests with the fsmonitor feature disabled.
#

trace_start fsmonitor-disabled
test_expect_success "setup without fsmonitor" '
unset INTEGRATION_SCRIPT &&
git config --unset core.fsmonitor &&
git update-index --no-fsmonitor
'

test_fsmonitor_suite
trace_stop

test_done

0 comments on commit 4f2009d

Please sign in to comment.