Commit 094330c3 authored by Pavel Emelyanov's avatar Pavel Emelyanov

stats: Add writing-memory-image timing

Dumping memory is draining it from parasite, for pre-dump
this time would be reasonably small. _Writing_ the memory
would occur _after_ tasks unseize and resume.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 1b544845
...@@ -6,6 +6,7 @@ enum { ...@@ -6,6 +6,7 @@ enum {
TIME_FREEZING, TIME_FREEZING,
TIME_FROZEN, TIME_FROZEN,
TIME_MEMDUMP, TIME_MEMDUMP,
TIME_MEMWRITE,
TIME_NR_STATS, TIME_NR_STATS,
}; };
......
...@@ -358,6 +358,7 @@ static int __parasite_dump_pages_seized(struct parasite_ctl *ctl, ...@@ -358,6 +358,7 @@ static int __parasite_dump_pages_seized(struct parasite_ctl *ctl,
args->off += args->nr_segs; args->off += args->nr_segs;
} }
timing_start(TIME_MEMWRITE);
ret = open_page_xfer(&xfer, CR_FD_PAGEMAP, ctl->pid.virt); ret = open_page_xfer(&xfer, CR_FD_PAGEMAP, ctl->pid.virt);
if (ret < 0) if (ret < 0)
goto out_pp; goto out_pp;
...@@ -365,6 +366,7 @@ static int __parasite_dump_pages_seized(struct parasite_ctl *ctl, ...@@ -365,6 +366,7 @@ static int __parasite_dump_pages_seized(struct parasite_ctl *ctl,
ret = page_xfer_dump_pages(&xfer, pp, 0); ret = page_xfer_dump_pages(&xfer, pp, 0);
xfer.close(&xfer); xfer.close(&xfer);
timing_stop(TIME_MEMWRITE);
task_reset_dirty_track(ctl->pid.real); task_reset_dirty_track(ctl->pid.real);
out_pp: out_pp:
destroy_page_pipe(pp); destroy_page_pipe(pp);
......
...@@ -3,6 +3,7 @@ message dump_stats_entry { ...@@ -3,6 +3,7 @@ message dump_stats_entry {
required uint32 freezing_time = 1; required uint32 freezing_time = 1;
required uint32 frozen_time = 2; required uint32 frozen_time = 2;
required uint32 memdump_time = 3; required uint32 memdump_time = 3;
required uint32 memwrite_time = 4;
} }
message stats_entry { message stats_entry {
......
...@@ -46,7 +46,7 @@ void timing_stop(int t) ...@@ -46,7 +46,7 @@ void timing_stop(int t)
void show_stats(int fd) void show_stats(int fd)
{ {
do_pb_show_plain(fd, PB_STATS, 1, NULL, "1.1:%u 1.2:%u 1.3:%u"); do_pb_show_plain(fd, PB_STATS, 1, NULL, "1.1:%u 1.2:%u 1.3:%u 1.4:%u");
} }
static void encode_time(int t, u_int32_t *to) static void encode_time(int t, u_int32_t *to)
...@@ -68,6 +68,7 @@ void write_stats(int what) ...@@ -68,6 +68,7 @@ void write_stats(int what)
encode_time(TIME_FREEZING, &dstats.freezing_time); encode_time(TIME_FREEZING, &dstats.freezing_time);
encode_time(TIME_FROZEN, &dstats.frozen_time); encode_time(TIME_FROZEN, &dstats.frozen_time);
encode_time(TIME_MEMDUMP, &dstats.memdump_time); encode_time(TIME_MEMDUMP, &dstats.memdump_time);
encode_time(TIME_MEMWRITE, &dstats.memwrite_time);
name = "dump"; name = "dump";
} else } else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment