From: Nguyễn Thái Ngọc Duy <[email protected]>
Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html