diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2014-03-27 14:32:17 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2014-03-27 14:32:17 +0000 |
commit | 9ad665df2a9eeb8ed6f3501896e45c1a3cd9dd5f (patch) | |
tree | 98d331da8ca0de2ee028d31512f1b7d58e60ec3c | |
parent | bea4acda3bff00e98cb00d5354f23de9e74a928f (diff) | |
parent | 9013dca5539186ddca018bebcf2d5da63d061365 (diff) |
Merge remote-tracking branch 'remotes/amit-migration/tags/for_upstream' into staging
migration: traces
Adds trace messages to migration path. Patches have been on list for a
while, and have been reviewed by Juan.
# gpg: Signature made Thu 27 Mar 2014 10:44:21 GMT using RSA key ID 854083B6
# gpg: Can't check signature: public key not found
* remotes/amit-migration/tags/for_upstream:
migration: add more traces
util: add qemu_ether_ntoa
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | include/qemu-common.h | 2 | ||||
-rw-r--r-- | migration.c | 30 | ||||
-rw-r--r-- | qemu-file.c | 2 | ||||
-rw-r--r-- | savevm.c | 8 | ||||
-rw-r--r-- | trace-events | 16 | ||||
-rw-r--r-- | util/cutils.c | 14 | ||||
-rw-r--r-- | vmstate.c | 2 |
7 files changed, 50 insertions, 24 deletions
diff --git a/include/qemu-common.h b/include/qemu-common.h index c8a58a873a..a998e8d36c 100644 --- a/include/qemu-common.h +++ b/include/qemu-common.h @@ -472,4 +472,6 @@ size_t buffer_find_nonzero_offset(const void *buf, size_t len); */ int parse_debug_env(const char *name, int max, int initial); +const char *qemu_ether_ntoa(const MACAddr *mac); + #endif diff --git a/migration.c b/migration.c index e0e24d42c7..bd1fb912ae 100644 --- a/migration.c +++ b/migration.c @@ -26,16 +26,6 @@ #include "qmp-commands.h" #include "trace.h" -//#define DEBUG_MIGRATION - -#ifdef DEBUG_MIGRATION -#define DPRINTF(fmt, ...) \ - do { printf("migration: " fmt, ## __VA_ARGS__); } while (0) -#else -#define DPRINTF(fmt, ...) \ - do { } while (0) -#endif - enum { MIG_STATE_ERROR = -1, MIG_STATE_NONE, @@ -112,7 +102,6 @@ static void process_incoming_migration_co(void *opaque) exit(EXIT_FAILURE); } qemu_announce_self(); - DPRINTF("successfully loaded vm state\n"); bdrv_clear_incoming_migration_all(); /* Make sure all file formats flush their mutable metadata */ @@ -306,7 +295,7 @@ static void migrate_fd_cleanup(void *opaque) s->cleanup_bh = NULL; if (s->file) { - DPRINTF("closing file\n"); + trace_migrate_fd_cleanup(); qemu_mutex_unlock_iothread(); qemu_thread_join(&s->thread); qemu_mutex_lock_iothread(); @@ -329,7 +318,7 @@ static void migrate_fd_cleanup(void *opaque) void migrate_fd_error(MigrationState *s) { - DPRINTF("setting error state\n"); + trace_migrate_fd_error(); assert(s->file == NULL); s->state = MIG_STATE_ERROR; trace_migrate_set_state(MIG_STATE_ERROR); @@ -339,7 +328,7 @@ void migrate_fd_error(MigrationState *s) static void migrate_fd_cancel(MigrationState *s) { int old_state ; - DPRINTF("cancelling migration\n"); + trace_migrate_fd_cancel(); do { old_state = s->state; @@ -589,29 +578,23 @@ static void *migration_thread(void *opaque) int64_t start_time = initial_time; bool old_vm_running = false; - DPRINTF("beginning savevm\n"); qemu_savevm_state_begin(s->file, &s->params); s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start; migrate_set_state(s, MIG_STATE_SETUP, MIG_STATE_ACTIVE); - DPRINTF("setup complete\n"); - while (s->state == MIG_STATE_ACTIVE) { int64_t current_time; uint64_t pending_size; if (!qemu_file_rate_limit(s->file)) { - DPRINTF("iterate\n"); pending_size = qemu_savevm_state_pending(s->file, max_size); - DPRINTF("pending size %" PRIu64 " max %" PRIu64 "\n", - pending_size, max_size); + trace_migrate_pending(pending_size, max_size); if (pending_size && pending_size >= max_size) { qemu_savevm_state_iterate(s->file); } else { int ret; - DPRINTF("done iterating\n"); qemu_mutex_lock_iothread(); start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER); @@ -650,9 +633,8 @@ static void *migration_thread(void *opaque) s->mbps = time_spent ? (((double) transferred_bytes * 8.0) / ((double) time_spent / 1000.0)) / 1000.0 / 1000.0 : -1; - DPRINTF("transferred %" PRIu64 " time_spent %" PRIu64 - " bandwidth %g max_size %" PRId64 "\n", - transferred_bytes, time_spent, bandwidth, max_size); + trace_migrate_transferred(transferred_bytes, time_spent, + bandwidth, max_size); /* if we haven't sent anything, we don't want to recalculate 10000 is a small enough number for our purposes */ if (s->dirty_bytes_rate && transferred_bytes > 10000) { diff --git a/qemu-file.c b/qemu-file.c index e5ec798e0b..8d5f45dcb0 100644 --- a/qemu-file.c +++ b/qemu-file.c @@ -4,6 +4,7 @@ #include "block/coroutine.h" #include "migration/migration.h" #include "migration/qemu-file.h" +#include "trace.h" #define IO_BUF_SIZE 32768 #define MAX_IOV_SIZE MIN(IOV_MAX, 64) @@ -595,6 +596,7 @@ int qemu_fclose(QEMUFile *f) ret = f->last_error; } g_free(f); + trace_qemu_file_fclose(); return ret; } @@ -81,6 +81,7 @@ static void qemu_announce_self_iter(NICState *nic, void *opaque) uint8_t buf[60]; int len; + trace_qemu_announce_self_iter(qemu_ether_ntoa(&nic->conf->macaddr)); len = announce_self_create(buf, nic->conf->macaddr.a); qemu_send_packet_raw(qemu_get_queue(nic), buf, len); @@ -429,6 +430,7 @@ void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd, static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id) { + trace_vmstate_load(se->idstr, se->vmsd ? se->vmsd->name : "(old)"); if (!se->vmsd) { /* Old style */ return se->ops->load_state(f, se->opaque, version_id); } @@ -437,6 +439,7 @@ static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id) static void vmstate_save(QEMUFile *f, SaveStateEntry *se) { + trace_vmstate_save(se->idstr, se->vmsd ? se->vmsd->name : "(old)"); if (!se->vmsd) { /* Old style */ se->ops->save_state(f, se->opaque); return; @@ -463,6 +466,7 @@ void qemu_savevm_state_begin(QEMUFile *f, SaveStateEntry *se; int ret; + trace_savevm_state_begin(); QTAILQ_FOREACH(se, &savevm_handlers, entry) { if (!se->ops || !se->ops->set_params) { continue; @@ -515,6 +519,7 @@ int qemu_savevm_state_iterate(QEMUFile *f) SaveStateEntry *se; int ret = 1; + trace_savevm_state_iterate(); QTAILQ_FOREACH(se, &savevm_handlers, entry) { if (!se->ops || !se->ops->save_live_iterate) { continue; @@ -554,6 +559,8 @@ void qemu_savevm_state_complete(QEMUFile *f) SaveStateEntry *se; int ret; + trace_savevm_state_complete(); + cpu_synchronize_all_states(); QTAILQ_FOREACH(se, &savevm_handlers, entry) { @@ -628,6 +635,7 @@ void qemu_savevm_state_cancel(void) { SaveStateEntry *se; + trace_savevm_state_cancel(); QTAILQ_FOREACH(se, &savevm_handlers, entry) { if (se->ops && se->ops->cancel) { se->ops->cancel(se->opaque); diff --git a/trace-events b/trace-events index 3b7ff4d970..3df3f32314 100644 --- a/trace-events +++ b/trace-events @@ -1042,6 +1042,17 @@ vmware_setmode(uint32_t w, uint32_t h, uint32_t bpp) "%dx%d @ %d bpp" # savevm.c savevm_section_start(const char *id, unsigned int section_id) "%s, section_id %u" savevm_section_end(const char *id, unsigned int section_id) "%s, section_id %u" +savevm_state_begin(void) "" +savevm_state_iterate(void) "" +savevm_state_complete(void) "" +savevm_state_cancel(void) "" +vmstate_save(const char *idstr, const char *vmsd_name) "%s, %s" +vmstate_load(const char *idstr, const char *vmsd_name) "%s, %s" +vmstate_load_field_error(const char *field, int ret) "field \"%s\" load failed, ret = %d" +qemu_announce_self_iter(const char *mac) "%s" + +# qemu-file.c +qemu_file_fclose(void) "" # arch_init.c migration_bitmap_sync_start(void) "" @@ -1181,6 +1192,11 @@ flic_reset_failed(int err) "flic: reset failed %d" # migration.c migrate_set_state(int new_state) "new state %d" +migrate_fd_cleanup(void) "" +migrate_fd_error(void) "" +migrate_fd_cancel(void) "" +migrate_pending(uint64_t size, uint64_t max) "pending size %" PRIu64 " max %" PRIu64 +migrate_transferred(uint64_t tranferred, uint64_t time_spent, double bandwidth, uint64_t size) "transferred %" PRIu64 " time_spent %" PRIu64 " bandwidth %g max_size %" PRId64 # kvm-all.c kvm_ioctl(int type, void *arg) "type 0x%x, arg %p" diff --git a/util/cutils.c b/util/cutils.c index 0116fcde74..b337293239 100644 --- a/util/cutils.c +++ b/util/cutils.c @@ -27,6 +27,7 @@ #include "qemu/sockets.h" #include "qemu/iov.h" +#include "net/net.h" void strpadcpy(char *buf, int buf_size, const char *str, char pad) { @@ -530,3 +531,16 @@ int parse_debug_env(const char *name, int max, int initial) } return debug; } + +/* + * Helper to print ethernet mac address + */ +const char *qemu_ether_ntoa(const MACAddr *mac) +{ + static char ret[18]; + + snprintf(ret, sizeof(ret), "%02x:%02x:%02x:%02x:%02x:%02x", + mac->a[0], mac->a[1], mac->a[2], mac->a[3], mac->a[4], mac->a[5]); + + return ret; +} @@ -3,6 +3,7 @@ #include "migration/qemu-file.h" #include "migration/vmstate.h" #include "qemu/bitops.h" +#include "trace.h" static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd, void *opaque); @@ -73,6 +74,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, } if (ret < 0) { + trace_vmstate_load_field_error(field->name, ret); return ret; } } |