[PATCH 4/4] cache: add hit/miss statistics to the final report
Petr Tesarik
ptesarik at suse.cz
Fri Mar 6 01:26:13 PST 2015
Add the most basic cache statistics (pages hit and missed). Note that
the hit rate is not printed if cache was not used to avoid division
by zero.
Signed-off-by: Petr Tesarik <ptesarik at suse.cz>
---
makedumpfile.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/makedumpfile.c b/makedumpfile.c
index c62d035..d778139 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -39,6 +39,10 @@ struct SplitBlock *splitblock = NULL;
char filename_stdout[] = FILENAME_STDOUT;
+/* Cache statistics */
+static unsigned long long cache_hit;
+static unsigned long long cache_miss;
+
static void first_cycle(mdf_pfn_t start, mdf_pfn_t max, struct cycle *cycle)
{
cycle->start_pfn = round(start, info->pfn_cyclic);
@@ -645,6 +649,7 @@ next_page:
pgaddr = PAGEBASE(paddr);
pgbuf = cache_search(pgaddr);
if (!pgbuf) {
+ ++cache_miss;
cached = cache_alloc(pgaddr);
if (!cached)
goto error;
@@ -661,7 +666,8 @@ next_page:
goto error_cached;
}
cache_add(cached);
- }
+ } else
+ ++cache_hit;
memcpy(bufptr, pgbuf + PAGEOFFSET(paddr), read_size);
@@ -8294,6 +8300,11 @@ print_report(void)
REPORT_MSG("--------------------------------------------------\n");
REPORT_MSG("Total pages : 0x%016llx\n", info->max_mapnr);
REPORT_MSG("\n");
+ REPORT_MSG("Cache hit: %lld, miss: %lld", cache_hit, cache_miss);
+ if (cache_hit + cache_miss)
+ REPORT_MSG(", hit rate: %.1f%%",
+ 100.0 * cache_hit / (cache_hit + cache_miss));
+ REPORT_MSG("\n\n");
}
static void
--
1.8.4.5
More information about the kexec
mailing list