From: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- Documentation/git.txt | 1 + cache.h | 1 + read-cache.c | 16 ++++++++++++++++ trace.c | 5 ++++- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Documentation/git.txt b/Documentation/git.txt index 794271e..71a88a8 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -1056,6 +1056,7 @@ of clones and fetches. See 'GIT_TRACE' for available trace output options. 'GIT_TRACE_PACK_STATS':: +'GIT_TRACE_INDEX_STATS':: Print various statistics. 'GIT_TRACE_SETUP':: diff --git a/cache.h b/cache.h index bc2f529..e22296c 100644 --- a/cache.h +++ b/cache.h @@ -1835,5 +1835,6 @@ void sleep_millisec(int millisec); void safe_create_dir(const char *dir, int share); void report_pack_stats(struct trace_key *key); +void report_index_stats(struct trace_key *key); #endif /* CACHE_H */ diff --git a/read-cache.c b/read-cache.c index eb4b9b4..7bd3ce4 100644 --- a/read-cache.c +++ b/read-cache.c @@ -50,6 +50,10 @@ static struct cache_entry *refresh_cache_entry(struct cache_entry *ce, struct index_state the_index; static const char *alternate_index_output; +static unsigned int nr_read_index; +static unsigned int nr_read_shm_index; +static unsigned int nr_write_index; + static void set_index_entry(struct index_state *istate, int nr, struct cache_entry *ce) { istate->cache[nr] = ce; @@ -1614,6 +1618,7 @@ static int try_shm(struct index_state *istate) istate->mmap = new_mmap; istate->mmap_size = new_size; istate->from_shm = 1; + nr_read_shm_index++; return 0; } @@ -1711,6 +1716,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) } if (!istate->keep_mmap) munmap(mmap, mmap_size); + nr_read_index++; return istate->cache_nr; unmap: @@ -2197,6 +2203,7 @@ static int do_write_index(struct index_state *istate, int newfd, return -1; istate->timestamp.sec = (unsigned int)st.st_mtime; istate->timestamp.nsec = ST_MTIME_NSEC(st); + nr_write_index++; return 0; } @@ -2423,3 +2430,12 @@ void stat_validity_update(struct stat_validity *sv, int fd) fill_stat_data(sv->sd, &st); } } + +void report_index_stats(struct trace_key *key) +{ + trace_printf_key(key, "\n" + "index stats: file reads = %10u\n" + "index stats: cache reads = %10u\n" + "index stats: file writes = %10u\n", + nr_read_index, nr_read_shm_index, nr_write_index); +} diff --git a/trace.c b/trace.c index b1d0885..eea1fa8 100644 --- a/trace.c +++ b/trace.c @@ -434,14 +434,17 @@ void trace_command_performance(const char **argv) } static struct trace_key trace_pack_stats = TRACE_KEY_INIT(PACK_STATS); +static struct trace_key trace_index_stats = TRACE_KEY_INIT(INDEX_STATS); static void print_stats_atexit(void) { report_pack_stats(&trace_pack_stats); + report_index_stats(&trace_index_stats); } void trace_stats(void) { - if (trace_want(&trace_pack_stats)) + if (trace_want(&trace_pack_stats) || + trace_want(&trace_index_stats)) atexit(print_stats_atexit); } -- 2.4.2.767.g62658d5-twtrsrc -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html