1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-07 20:06:10 +02:00

p7519: add trace logging during perf test

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>
This commit is contained in:
Jeff Hostetler 2021-02-03 15:34:43 +00:00 committed by Junio C Hamano
parent a7556c3bde
commit 4f2009dce2
3 changed files with 35 additions and 2 deletions

1
t/perf/.gitignore vendored
View File

@ -1,3 +1,4 @@
/build/ /build/
/test-results/ /test-results/
/test-trace/
/trash directory*/ /trash directory*/

View File

@ -7,10 +7,10 @@ perf: pre-clean
./run ./run
pre-clean: pre-clean:
rm -rf test-results rm -rf test-results test-trace
clean: clean:
rm -rf build "trash directory".* test-results rm -rf build "trash directory".* test-results test-trace
test-lint: test-lint:
$(MAKE) -C .. test-lint $(MAKE) -C .. test-lint

View File

@ -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_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_perf_large_repo
test_checkout_worktree test_checkout_worktree
@ -70,6 +72,32 @@ then
fi fi
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" ' test_expect_success "one time repo setup" '
# set untrackedCache depending on the environment # set untrackedCache depending on the environment
if test -n "$GIT_PERF_7519_UNTRACKED_CACHE" if test -n "$GIT_PERF_7519_UNTRACKED_CACHE"
@ -213,6 +241,7 @@ test_fsmonitor_suite() {
# such as Watchman. # such as Watchman.
# #
trace_start fsmonitor-watchman
if test -n "$GIT_PERF_7519_FSMONITOR"; then if test -n "$GIT_PERF_7519_FSMONITOR"; then
for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do
test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor' test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor'
@ -231,11 +260,13 @@ then
# preventing the removal of the trash directory # preventing the removal of the trash directory
watchman shutdown-server >/dev/null 2>&1 watchman shutdown-server >/dev/null 2>&1
fi fi
trace_stop
# #
# Run a full set of perf tests with the fsmonitor feature disabled. # Run a full set of perf tests with the fsmonitor feature disabled.
# #
trace_start fsmonitor-disabled
test_expect_success "setup without fsmonitor" ' test_expect_success "setup without fsmonitor" '
unset INTEGRATION_SCRIPT && unset INTEGRATION_SCRIPT &&
git config --unset core.fsmonitor && git config --unset core.fsmonitor &&
@ -243,5 +274,6 @@ test_expect_success "setup without fsmonitor" '
' '
test_fsmonitor_suite test_fsmonitor_suite
trace_stop
test_done test_done