Re: [Qemu-devel] [PATCH 2/8] Add tracepoints for savevm section start/end
On 06/22/2012 04:46 PM, Juan Quintela wrote: This allows to know how long each section takes to save. An awk script like this tells us sections that takes more that 10ms $1 ~ /savevm_state_iterate_end/ { /* Print savevm_section_end line when 10ms duration */ if ($2 1) { printf(%s times_missing=%u\n, $0, times_missing++); } } Signed-off-by: Juan Quintela quint...@redhat.com fix ws tracepoints Signed-off-by: Juan Quintela quint...@redhat.com --- savevm.c |8 trace-events |5 + 2 files changed, 13 insertions(+) diff --git a/savevm.c b/savevm.c index faa8145..40320be 100644 --- a/savevm.c +++ b/savevm.c @@ -85,6 +85,7 @@ #include cpus.h #include memory.h #include qmp-commands.h +#include trace.h #define SELF_ANNOUNCE_ROUNDS 5 @@ -1624,11 +1625,14 @@ int qemu_savevm_state_iterate(QEMUFile *f) if (se-save_live_state == NULL) continue; +trace_savevm_section_start(); /* Section type */ qemu_put_byte(f, QEMU_VM_SECTION_PART); qemu_put_be32(f, se-section_id); ret = se-save_live_state(f, QEMU_VM_SECTION_PART, se-opaque); +trace_savevm_section_end(se-section_id); + if (ret = 0) { /* Do not proceed to the next vmstate before this one reported completion of the current stage. This serializes the migration @@ -1658,11 +1662,13 @@ int qemu_savevm_state_complete(QEMUFile *f) if (se-save_live_state == NULL) continue; +trace_savevm_section_start(); /* Section type */ qemu_put_byte(f, QEMU_VM_SECTION_END); qemu_put_be32(f, se-section_id); ret = se-save_live_state(f, QEMU_VM_SECTION_END, se-opaque); +trace_savevm_section_end(se-section_id); if (ret 0) { return ret; } @@ -1674,6 +1680,7 @@ int qemu_savevm_state_complete(QEMUFile *f) if (se-save_state == NULL se-vmsd == NULL) continue; +trace_savevm_section_start(); /* Section type */ qemu_put_byte(f, QEMU_VM_SECTION_FULL); qemu_put_be32(f, se-section_id); @@ -1687,6 +1694,7 @@ int qemu_savevm_state_complete(QEMUFile *f) qemu_put_be32(f, se-version_id); vmstate_save(f, se); +trace_savevm_section_end(se-section_id); } qemu_put_byte(f, QEMU_VM_EOF); diff --git a/trace-events b/trace-events index 5c82b3a..82c7619 100644 --- a/trace-events +++ b/trace-events @@ -782,6 +782,11 @@ displaysurface_resize(void *display_state, void *display_surface, int width, int # vga.c ppm_save(const char *filename, void *display_surface) %s surface=%p +# savevm.c + +savevm_section_start(void) +savevm_section_end(unsigned int section_id) section_id %u + # hw/qxl.c disable qxl_interface_set_mm_time(int qid, uint32_t mm_time) %d %d disable qxl_io_write_vga(int qid, const char *mode, uint32_t addr, uint32_t val) %d %s addr=%u val=%u Reviewed-by: Orit Wasserman owass...@redhat.com
[Qemu-devel] [PATCH 2/8] Add tracepoints for savevm section start/end
This allows to know how long each section takes to save. An awk script like this tells us sections that takes more that 10ms $1 ~ /savevm_state_iterate_end/ { /* Print savevm_section_end line when 10ms duration */ if ($2 1) { printf(%s times_missing=%u\n, $0, times_missing++); } } Signed-off-by: Juan Quintela quint...@redhat.com fix ws tracepoints Signed-off-by: Juan Quintela quint...@redhat.com --- savevm.c |8 trace-events |5 + 2 files changed, 13 insertions(+) diff --git a/savevm.c b/savevm.c index faa8145..40320be 100644 --- a/savevm.c +++ b/savevm.c @@ -85,6 +85,7 @@ #include cpus.h #include memory.h #include qmp-commands.h +#include trace.h #define SELF_ANNOUNCE_ROUNDS 5 @@ -1624,11 +1625,14 @@ int qemu_savevm_state_iterate(QEMUFile *f) if (se-save_live_state == NULL) continue; +trace_savevm_section_start(); /* Section type */ qemu_put_byte(f, QEMU_VM_SECTION_PART); qemu_put_be32(f, se-section_id); ret = se-save_live_state(f, QEMU_VM_SECTION_PART, se-opaque); +trace_savevm_section_end(se-section_id); + if (ret = 0) { /* Do not proceed to the next vmstate before this one reported completion of the current stage. This serializes the migration @@ -1658,11 +1662,13 @@ int qemu_savevm_state_complete(QEMUFile *f) if (se-save_live_state == NULL) continue; +trace_savevm_section_start(); /* Section type */ qemu_put_byte(f, QEMU_VM_SECTION_END); qemu_put_be32(f, se-section_id); ret = se-save_live_state(f, QEMU_VM_SECTION_END, se-opaque); +trace_savevm_section_end(se-section_id); if (ret 0) { return ret; } @@ -1674,6 +1680,7 @@ int qemu_savevm_state_complete(QEMUFile *f) if (se-save_state == NULL se-vmsd == NULL) continue; +trace_savevm_section_start(); /* Section type */ qemu_put_byte(f, QEMU_VM_SECTION_FULL); qemu_put_be32(f, se-section_id); @@ -1687,6 +1694,7 @@ int qemu_savevm_state_complete(QEMUFile *f) qemu_put_be32(f, se-version_id); vmstate_save(f, se); +trace_savevm_section_end(se-section_id); } qemu_put_byte(f, QEMU_VM_EOF); diff --git a/trace-events b/trace-events index 5c82b3a..82c7619 100644 --- a/trace-events +++ b/trace-events @@ -782,6 +782,11 @@ displaysurface_resize(void *display_state, void *display_surface, int width, int # vga.c ppm_save(const char *filename, void *display_surface) %s surface=%p +# savevm.c + +savevm_section_start(void) +savevm_section_end(unsigned int section_id) section_id %u + # hw/qxl.c disable qxl_interface_set_mm_time(int qid, uint32_t mm_time) %d %d disable qxl_io_write_vga(int qid, const char *mode, uint32_t addr, uint32_t val) %d %s addr=%u val=%u -- 1.7.10.2