[CRIU] [PATCH v2] Added option to display dump/restore stats
Adrian Reber
adrian at lisas.de
Mon Oct 10 08:26:33 PDT 2016
From: Adrian Reber <areber at redhat.com>
Currently criu writes dump/restore statistics to a file. This patch adds
the option '--display-stats' which additionally displays the same
information on the console:
# criu dump --display-stats -D /tmp/cp -t <PID>
Displaying dump stats:
Freezing time: 133 us
Frozen time: 135173 us
Memory dump time: 114760 us
Memory write time: 85107 us
IRMAP resolve time: 0 us
Memory pages scanned: 2099 (0x833)
Memory pages skipped from parent: 0 (0x0)
Memory pages written: 1052 (0x41c)
Zero memory pages: 0 (0x0)
Lazy memory pages: 0 (0x0)
# criu restore --display-stats -D /tmp/cp
Displaying restore stats:
Pages compared: 0 (0x0)
Pages skipped COW: 0 (0x0)
Pages restored: 51227 (0xc81b)
Restore time: 57428 us
Forking time: 51473 us
v2:
- fix compile failure on 32bit ARM
Signed-off-by: Adrian Reber <areber at redhat.com>
---
criu/crtools.c | 5 +++++
criu/include/cr_options.h | 1 +
criu/stats.c | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 46 insertions(+)
diff --git a/criu/crtools.c b/criu/crtools.c
index 0e853ee..8b5ec5d 100644
--- a/criu/crtools.c
+++ b/criu/crtools.c
@@ -279,6 +279,7 @@ int main(int argc, char *argv[], char *envp[])
{ "cgroup-dump-controller", required_argument, 0, 1082 },
{ SK_INFLIGHT_PARAM, no_argument, 0, 1083 },
{ "deprecated", no_argument, 0, 1084 },
+ { "display-stats", no_argument, 0, 1086 },
{ },
};
@@ -594,6 +595,9 @@ int main(int argc, char *argv[], char *envp[])
pr_msg("Turn deprecated stuff ON\n");
opts.deprecated_ok = true;
break;
+ case 1086:
+ opts.display_stats = true;
+ break;
case 'V':
pr_msg("Version: %s\n", CRIU_VERSION);
if (strcmp(CRIU_GITID, "0"))
@@ -919,6 +923,7 @@ usage:
" -v2|-vv - also warnings (default level)\n"
" -v3|-vvv - also information messages and timestamps\n"
" -v4|-vvvv - lots of debug\n"
+" --display-stats print out dump/restore stats\n"
"\n"
"* Memory dumping options:\n"
" --track-mem turn on memory changes tracker in kernel\n"
diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h
index 8a9427b..521a896 100644
--- a/criu/include/cr_options.h
+++ b/criu/include/cr_options.h
@@ -114,6 +114,7 @@ struct cr_options {
* to turn one ON while the code is in.
*/
bool deprecated_ok;
+ bool display_stats;
};
extern struct cr_options opts;
diff --git a/criu/stats.c b/criu/stats.c
index a575e77..661c2e0 100644
--- a/criu/stats.c
+++ b/criu/stats.c
@@ -2,6 +2,7 @@
#include <fcntl.h>
#include <sys/time.h>
#include "asm/atomic.h"
+#include "cr_options.h"
#include "rst-malloc.h"
#include "protobuf.h"
#include "stats.h"
@@ -100,6 +101,42 @@ static void encode_time(int t, u_int32_t *to)
*to = tm->total.tv_sec * USEC_PER_SEC + tm->total.tv_usec;
}
+static void display_stats(int what, StatsEntry *stats)
+{
+ if (what == DUMP_STATS) {
+ pr_msg("Displaying dump stats:\n");
+ pr_msg("Freezing time: %d us\n", stats->dump->freezing_time);
+ pr_msg("Frozen time: %d us\n", stats->dump->frozen_time);
+ pr_msg("Memory dump time: %d us\n", stats->dump->memdump_time);
+ pr_msg("Memory write time: %d us\n", stats->dump->memwrite_time);
+ if (stats->dump->has_irmap_resolve)
+ pr_msg("IRMAP resolve time: %d us\n", stats->dump->irmap_resolve);
+ pr_msg("Memory pages scanned: %" PRIu64 " (0x%" PRIx64 ")\n", stats->dump->pages_scanned,
+ stats->dump->pages_scanned);
+ pr_msg("Memory pages skipped from parent: %" PRIu64 " (0x%" PRIx64 ")\n",
+ stats->dump->pages_skipped_parent,
+ stats->dump->pages_skipped_parent);
+ pr_msg("Memory pages written: %" PRIu64 " (0x%" PRIx64 ")\n", stats->dump->pages_written,
+ stats->dump->pages_written);
+ pr_msg("Zero memory pages: %" PRIu64 " (0x%" PRIx64 ")\n", stats->dump->pages_zero,
+ stats->dump->pages_zero);
+ pr_msg("Lazy memory pages: %" PRIu64 " (0x%" PRIx64 ")\n", stats->dump->pages_lazy,
+ stats->dump->pages_lazy);
+ } else if (what == RESTORE_STATS) {
+ pr_msg("Displaying restore stats:\n");
+ pr_msg("Pages compared: %" PRIu64 " (0x%" PRIx64 ")\n", stats->restore->pages_compared,
+ stats->restore->pages_compared);
+ pr_msg("Pages skipped COW: %" PRIu64 " (0x%" PRIx64 ")\n", stats->restore->pages_skipped_cow,
+ stats->restore->pages_skipped_cow);
+ if (stats->restore->has_pages_restored)
+ pr_msg("Pages restored: %" PRIu64 " (0x%" PRIx64 ")\n", stats->restore->pages_restored,
+ stats->restore->pages_restored);
+ pr_msg("Restore time: %d us\n", stats->restore->restore_time);
+ pr_msg("Forking time: %d us\n", stats->restore->forking_time);
+ } else
+ return;
+}
+
void write_stats(int what)
{
StatsEntry stats = STATS_ENTRY__INIT;
@@ -146,6 +183,9 @@ void write_stats(int what)
pb_write_one(img, &stats, PB_STATS);
close_image(img);
}
+
+ if (opts.display_stats)
+ display_stats(what, &stats);
}
int init_stats(int what)
--
2.9.3
More information about the CRIU
mailing list