diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-04-04 10:56:23 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-04-04 10:56:23 -0700 |
commit | fe496dc5b9b527a85d381a3fc8e5f2fda9439842 (patch) | |
tree | 86aaf60c13375db007b695c41f8053783cf892d2 | |
parent | Merge branch 'gc/branch-recurse-submodules-fix' (diff) | |
parent | trace2: add stats for fsync operations (diff) | |
download | tgif-fe496dc5b9b527a85d381a3fc8e5f2fda9439842.tar.xz |
Merge branch 'ns/trace2-fsync-stat'
Trace2 code has been taught to report stats for fsync operations.
* ns/trace2-fsync-stat:
trace2: add stats for fsync operations
-rw-r--r-- | git-compat-util.h | 5 | ||||
-rw-r--r-- | t/t0211/scrub_perf.perl | 4 | ||||
-rw-r--r-- | trace2.c | 1 | ||||
-rw-r--r-- | wrapper.c | 12 |
4 files changed, 22 insertions, 0 deletions
diff --git a/git-compat-util.h b/git-compat-util.h index 0892e209a2..4d444dca27 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -1282,6 +1282,11 @@ enum fsync_action { int git_fsync(int fd, enum fsync_action action); /* + * Writes out trace statistics for fsync using the trace2 API. + */ +void trace_git_fsync_stats(void); + +/* * Preserves errno, prints a message, but gives no warning for ENOENT. * Returns 0 on success, which includes trying to unlink an object that does * not exist. diff --git a/t/t0211/scrub_perf.perl b/t/t0211/scrub_perf.perl index d164b750ff..299999f0f8 100644 --- a/t/t0211/scrub_perf.perl +++ b/t/t0211/scrub_perf.perl @@ -59,6 +59,10 @@ while (<>) { # and highly variable. Just omit them. goto SKIP_LINE; } + if ($tokens[$col_category] =~ m/fsync/) { + # fsync events aren't interesting for the test + goto SKIP_LINE; + } } # t_abs and t_rel are either blank or a float. Replace the float @@ -214,6 +214,7 @@ int trace2_cmd_exit_fl(const char *file, int line, int code) if (!trace2_enabled) return code; + trace_git_fsync_stats(); trace2_collect_process_info(TRACE2_PROCESS_INFO_EXIT); tr2main_exit_code = code; @@ -4,6 +4,9 @@ #include "cache.h" #include "config.h" +static intmax_t count_fsync_writeout_only; +static intmax_t count_fsync_hardware_flush; + #ifdef HAVE_RTLGENRANDOM /* This is required to get access to RtlGenRandom. */ #define SystemFunction036 NTAPI SystemFunction036 @@ -564,6 +567,7 @@ int git_fsync(int fd, enum fsync_action action) { switch (action) { case FSYNC_WRITEOUT_ONLY: + count_fsync_writeout_only += 1; #ifdef __APPLE__ /* @@ -595,6 +599,8 @@ int git_fsync(int fd, enum fsync_action action) return -1; case FSYNC_HARDWARE_FLUSH: + count_fsync_hardware_flush += 1; + /* * On macOS, a special fcntl is required to really flush the * caches within the storage controller. As of this writing, @@ -610,6 +616,12 @@ int git_fsync(int fd, enum fsync_action action) } } +void trace_git_fsync_stats(void) +{ + trace2_data_intmax("fsync", the_repository, "fsync/writeout-only", count_fsync_writeout_only); + trace2_data_intmax("fsync", the_repository, "fsync/hardware-flush", count_fsync_hardware_flush); +} + static int warn_if_unremovable(const char *op, const char *file, int rc) { int err; |