* [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration
@ 2016-01-15 3:37 zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 1/6] ram: Split host_from_stream_offset() into two helper functions zhanghailiang
` (8 more replies)
0 siblings, 9 replies; 20+ messages in thread
From: zhanghailiang @ 2016-01-15 3:37 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, zhanghailiang, peter.huangpeng, dgilbert, quintela
Patch 1 ~ patch 4 are picked from COLO and live memory snapshot series,
They are just small improvements for migration codes and have been reviewed
by Dave.
Patch 5, 6 are small fixes for migration releated documention.
Please review.
zhanghailiang (6):
ram: Split host_from_stream_offset() into two helper functions
migration: Rename the'file' member of MigrationState
savevm: Split load vm state function qemu_loadvm_state
migration/ram: Fix some helper functions' parameter to use
PageSearchStatus
qmp-commands.hx: Fix the missing options for migration parameters
commands
qmp-commands.hx: Document the missing options for migration capability
commands
include/exec/ram_addr.h | 8 ++-
include/migration/migration.h | 2 +-
migration/exec.c | 4 +-
migration/fd.c | 4 +-
migration/migration.c | 72 +++++++++----------
migration/postcopy-ram.c | 6 +-
migration/ram.c | 73 +++++++++++--------
migration/rdma.c | 2 +-
migration/savevm.c | 158 +++++++++++++++++++++++++-----------------
migration/tcp.c | 4 +-
migration/unix.c | 4 +-
qmp-commands.hx | 33 +++++++--
12 files changed, 222 insertions(+), 148 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 1/6] ram: Split host_from_stream_offset() into two helper functions
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
@ 2016-01-15 3:37 ` zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState zhanghailiang
` (7 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: zhanghailiang @ 2016-01-15 3:37 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, zhanghailiang, peter.huangpeng, dgilbert, quintela
Split host_from_stream_offset() into two parts:
One is to get ram block, which the block idstr may be get from migration
stream, the other is to get hva (host) address from block and the offset.
Besides, we will do the check working in a new helper offset_in_ramblock().
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
include/exec/ram_addr.h | 8 ++++++--
migration/ram.c | 40 +++++++++++++++++++++++++---------------
2 files changed, 31 insertions(+), 17 deletions(-)
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index ef1489d..606e277 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -38,10 +38,14 @@ struct RAMBlock {
int fd;
};
+static inline bool offset_in_ramblock(RAMBlock *b, ram_addr_t offset)
+{
+ return (b && b->host && offset < b->used_length) ? true : false;
+}
+
static inline void *ramblock_ptr(RAMBlock *block, ram_addr_t offset)
{
- assert(offset < block->used_length);
- assert(block->host);
+ assert(offset_in_ramblock(block, offset));
return (char *)block->host + offset;
}
diff --git a/migration/ram.c b/migration/ram.c
index 4e606ab..8583da8 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2124,28 +2124,24 @@ static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
* Returns a pointer from within the RCU-protected ram_list.
*/
/*
- * Read a RAMBlock ID from the stream f, find the host address of the
- * start of that block and add on 'offset'
+ * Read a RAMBlock ID from the stream f.
*
* f: Stream to read from
- * offset: Offset within the block
* flags: Page flags (mostly to see if it's a continuation of previous block)
*/
-static inline void *host_from_stream_offset(QEMUFile *f,
- ram_addr_t offset,
- int flags)
+static inline RAMBlock *ram_block_from_stream(QEMUFile *f,
+ int flags)
{
static RAMBlock *block = NULL;
char id[256];
uint8_t len;
if (flags & RAM_SAVE_FLAG_CONTINUE) {
- if (!block || block->max_length <= offset) {
+ if (!block) {
error_report("Ack, bad migration stream!");
return NULL;
}
-
- return block->host + offset;
+ return block;
}
len = qemu_get_byte(f);
@@ -2153,12 +2149,22 @@ static inline void *host_from_stream_offset(QEMUFile *f,
id[len] = 0;
block = qemu_ram_block_by_name(id);
- if (block && block->max_length > offset) {
- return block->host + offset;
+ if (!block) {
+ error_report("Can't find block %s", id);
+ return NULL;
}
- error_report("Can't find block %s", id);
- return NULL;
+ return block;
+}
+
+static inline void *host_from_ram_block_offset(RAMBlock *block,
+ ram_addr_t offset)
+{
+ if (!offset_in_ramblock(block, offset)) {
+ return NULL;
+ }
+
+ return block->host + offset;
}
/*
@@ -2302,7 +2308,9 @@ static int ram_load_postcopy(QEMUFile *f)
trace_ram_load_postcopy_loop((uint64_t)addr, flags);
place_needed = false;
if (flags & (RAM_SAVE_FLAG_COMPRESS | RAM_SAVE_FLAG_PAGE)) {
- host = host_from_stream_offset(f, addr, flags);
+ RAMBlock *block = ram_block_from_stream(f, flags);
+
+ host = host_from_ram_block_offset(block, addr);
if (!host) {
error_report("Illegal RAM offset " RAM_ADDR_FMT, addr);
ret = -EINVAL;
@@ -2433,7 +2441,9 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
if (flags & (RAM_SAVE_FLAG_COMPRESS | RAM_SAVE_FLAG_PAGE |
RAM_SAVE_FLAG_COMPRESS_PAGE | RAM_SAVE_FLAG_XBZRLE)) {
- host = host_from_stream_offset(f, addr, flags);
+ RAMBlock *block = ram_block_from_stream(f, flags);
+
+ host = host_from_ram_block_offset(block, addr);
if (!host) {
error_report("Illegal RAM offset " RAM_ADDR_FMT, addr);
ret = -EINVAL;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 1/6] ram: Split host_from_stream_offset() into two helper functions zhanghailiang
@ 2016-01-15 3:37 ` zhanghailiang
2016-02-04 10:47 ` Amit Shah
2016-01-15 3:37 ` [Qemu-devel] [PATCH 3/6] savevm: Split load vm state function qemu_loadvm_state zhanghailiang
` (6 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: zhanghailiang @ 2016-01-15 3:37 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, zhanghailiang, peter.huangpeng, dgilbert, quintela
Rename the 'file' member of MigrationState to 'to_dst_file'.
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
include/migration/migration.h | 2 +-
migration/exec.c | 4 +--
migration/fd.c | 4 +--
migration/migration.c | 72 ++++++++++++++++++++++---------------------
migration/postcopy-ram.c | 6 ++--
migration/rdma.c | 2 +-
migration/savevm.c | 2 +-
migration/tcp.c | 4 +--
migration/unix.c | 4 +--
9 files changed, 52 insertions(+), 48 deletions(-)
diff --git a/include/migration/migration.h b/include/migration/migration.h
index 0fc1ffa..74684ad 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -133,7 +133,7 @@ struct MigrationState
size_t xfer_limit;
QemuThread thread;
QEMUBH *cleanup_bh;
- QEMUFile *file;
+ QEMUFile *to_dst_file;
int parameters[MIGRATION_PARAMETER__MAX];
int state;
diff --git a/migration/exec.c b/migration/exec.c
index 8406d2b..9037109 100644
--- a/migration/exec.c
+++ b/migration/exec.c
@@ -36,8 +36,8 @@
void exec_start_outgoing_migration(MigrationState *s, const char *command, Error **errp)
{
- s->file = qemu_popen_cmd(command, "w");
- if (s->file == NULL) {
+ s->to_dst_file = qemu_popen_cmd(command, "w");
+ if (s->to_dst_file == NULL) {
error_setg_errno(errp, errno, "failed to popen the migration target");
return;
}
diff --git a/migration/fd.c b/migration/fd.c
index 3e4bed0..9a9d6c5 100644
--- a/migration/fd.c
+++ b/migration/fd.c
@@ -50,9 +50,9 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **
}
if (fd_is_socket(fd)) {
- s->file = qemu_fopen_socket(fd, "wb");
+ s->to_dst_file = qemu_fopen_socket(fd, "wb");
} else {
- s->file = qemu_fdopen(fd, "wb");
+ s->to_dst_file = qemu_fdopen(fd, "wb");
}
migrate_fd_connect(s);
diff --git a/migration/migration.c b/migration/migration.c
index bc611e4..f96a755 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -808,7 +808,7 @@ static void migrate_fd_cleanup(void *opaque)
flush_page_queue(s);
- if (s->file) {
+ if (s->to_dst_file) {
trace_migrate_fd_cleanup();
qemu_mutex_unlock_iothread();
if (s->migration_thread_running) {
@@ -818,8 +818,8 @@ static void migrate_fd_cleanup(void *opaque)
qemu_mutex_lock_iothread();
migrate_compress_threads_join();
- qemu_fclose(s->file);
- s->file = NULL;
+ qemu_fclose(s->to_dst_file);
+ s->to_dst_file = NULL;
}
assert((s->state != MIGRATION_STATUS_ACTIVE) &&
@@ -836,7 +836,7 @@ static void migrate_fd_cleanup(void *opaque)
void migrate_fd_error(MigrationState *s)
{
trace_migrate_fd_error();
- assert(s->file == NULL);
+ assert(s->to_dst_file == NULL);
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
MIGRATION_STATUS_FAILED);
notifier_list_notify(&migration_state_notifiers, s);
@@ -845,7 +845,7 @@ void migrate_fd_error(MigrationState *s)
static void migrate_fd_cancel(MigrationState *s)
{
int old_state ;
- QEMUFile *f = migrate_get_current()->file;
+ QEMUFile *f = migrate_get_current()->to_dst_file;
trace_migrate_fd_cancel();
if (s->rp_state.from_dst_file) {
@@ -916,7 +916,7 @@ MigrationState *migrate_init(const MigrationParams *params)
s->bytes_xfer = 0;
s->xfer_limit = 0;
s->cleanup_bh = 0;
- s->file = NULL;
+ s->to_dst_file = NULL;
s->state = MIGRATION_STATUS_NONE;
s->params = *params;
s->rp_state.from_dst_file = NULL;
@@ -1095,8 +1095,9 @@ void qmp_migrate_set_speed(int64_t value, Error **errp)
s = migrate_get_current();
s->bandwidth_limit = value;
- if (s->file) {
- qemu_file_set_rate_limit(s->file, s->bandwidth_limit / XFER_LIMIT_RATIO);
+ if (s->to_dst_file) {
+ qemu_file_set_rate_limit(s->to_dst_file,
+ s->bandwidth_limit / XFER_LIMIT_RATIO);
}
}
@@ -1366,7 +1367,7 @@ out:
static int open_return_path_on_source(MigrationState *ms)
{
- ms->rp_state.from_dst_file = qemu_file_get_return_path(ms->file);
+ ms->rp_state.from_dst_file = qemu_file_get_return_path(ms->to_dst_file);
if (!ms->rp_state.from_dst_file) {
return -1;
}
@@ -1388,7 +1389,7 @@ static int await_return_path_close_on_source(MigrationState *ms)
* rp_thread will exit, however if there's an error we need to cause
* it to exit.
*/
- if (qemu_file_get_error(ms->file) && ms->rp_state.from_dst_file) {
+ if (qemu_file_get_error(ms->to_dst_file) && ms->rp_state.from_dst_file) {
/*
* shutdown(2), if we have it, will cause it to unblock if it's stuck
* waiting for the destination.
@@ -1431,7 +1432,7 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
* Cause any non-postcopiable, but iterative devices to
* send out their final data.
*/
- qemu_savevm_state_complete_precopy(ms->file, true);
+ qemu_savevm_state_complete_precopy(ms->to_dst_file, true);
/*
* in Finish migrate and with the io-lock held everything should
@@ -1449,9 +1450,9 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
* will notice we're in POSTCOPY_ACTIVE and not actually
* wrap their state up here
*/
- qemu_file_set_rate_limit(ms->file, INT64_MAX);
+ qemu_file_set_rate_limit(ms->to_dst_file, INT64_MAX);
/* Ping just for debugging, helps line traces up */
- qemu_savevm_send_ping(ms->file, 2);
+ qemu_savevm_send_ping(ms->to_dst_file, 2);
/*
* While loading the device state we may trigger page transfer
@@ -1485,7 +1486,7 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
qsb = qemu_buf_get(fb);
/* Now send that blob */
- if (qemu_savevm_send_packaged(ms->file, qsb)) {
+ if (qemu_savevm_send_packaged(ms->to_dst_file, qsb)) {
goto fail_closefb;
}
qemu_fclose(fb);
@@ -1497,9 +1498,9 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
* Although this ping is just for debug, it could potentially be
* used for getting a better measurement of downtime at the source.
*/
- qemu_savevm_send_ping(ms->file, 4);
+ qemu_savevm_send_ping(ms->to_dst_file, 4);
- ret = qemu_file_get_error(ms->file);
+ ret = qemu_file_get_error(ms->to_dst_file);
if (ret) {
error_report("postcopy_start: Migration stream errored");
migrate_set_state(&ms->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
@@ -1542,8 +1543,8 @@ static void migration_completion(MigrationState *s, int current_active_state,
if (!ret) {
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
if (ret >= 0) {
- qemu_file_set_rate_limit(s->file, INT64_MAX);
- qemu_savevm_state_complete_precopy(s->file, false);
+ qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
+ qemu_savevm_state_complete_precopy(s->to_dst_file, false);
}
}
qemu_mutex_unlock_iothread();
@@ -1554,7 +1555,7 @@ static void migration_completion(MigrationState *s, int current_active_state,
} else if (s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
trace_migration_completion_postcopy_end();
- qemu_savevm_state_complete_postcopy(s->file);
+ qemu_savevm_state_complete_postcopy(s->to_dst_file);
trace_migration_completion_postcopy_end_after_complete();
}
@@ -1575,7 +1576,7 @@ static void migration_completion(MigrationState *s, int current_active_state,
}
}
- if (qemu_file_get_error(s->file)) {
+ if (qemu_file_get_error(s->to_dst_file)) {
trace_migration_completion_file_err();
goto fail;
}
@@ -1610,24 +1611,24 @@ static void *migration_thread(void *opaque)
rcu_register_thread();
- qemu_savevm_state_header(s->file);
+ qemu_savevm_state_header(s->to_dst_file);
if (migrate_postcopy_ram()) {
/* Now tell the dest that it should open its end so it can reply */
- qemu_savevm_send_open_return_path(s->file);
+ qemu_savevm_send_open_return_path(s->to_dst_file);
/* And do a ping that will make stuff easier to debug */
- qemu_savevm_send_ping(s->file, 1);
+ qemu_savevm_send_ping(s->to_dst_file, 1);
/*
* Tell the destination that we *might* want to do postcopy later;
* if the other end can't do postcopy it should fail now, nice and
* early.
*/
- qemu_savevm_send_postcopy_advise(s->file);
+ qemu_savevm_send_postcopy_advise(s->to_dst_file);
}
- qemu_savevm_state_begin(s->file, &s->params);
+ qemu_savevm_state_begin(s->to_dst_file, &s->params);
s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start;
current_active_state = MIGRATION_STATUS_ACTIVE;
@@ -1641,10 +1642,10 @@ static void *migration_thread(void *opaque)
int64_t current_time;
uint64_t pending_size;
- if (!qemu_file_rate_limit(s->file)) {
+ if (!qemu_file_rate_limit(s->to_dst_file)) {
uint64_t pend_post, pend_nonpost;
- qemu_savevm_state_pending(s->file, max_size, &pend_nonpost,
+ qemu_savevm_state_pending(s->to_dst_file, max_size, &pend_nonpost,
&pend_post);
pending_size = pend_nonpost + pend_post;
trace_migrate_pending(pending_size, max_size,
@@ -1665,7 +1666,7 @@ static void *migration_thread(void *opaque)
continue;
}
/* Just another iteration step */
- qemu_savevm_state_iterate(s->file, entered_postcopy);
+ qemu_savevm_state_iterate(s->to_dst_file, entered_postcopy);
} else {
trace_migration_thread_low_pending(pending_size);
migration_completion(s, current_active_state,
@@ -1674,7 +1675,7 @@ static void *migration_thread(void *opaque)
}
}
- if (qemu_file_get_error(s->file)) {
+ if (qemu_file_get_error(s->to_dst_file)) {
migrate_set_state(&s->state, current_active_state,
MIGRATION_STATUS_FAILED);
trace_migration_thread_file_err();
@@ -1682,7 +1683,8 @@ static void *migration_thread(void *opaque)
}
current_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
if (current_time >= initial_time + BUFFER_DELAY) {
- uint64_t transferred_bytes = qemu_ftell(s->file) - initial_bytes;
+ uint64_t transferred_bytes = qemu_ftell(s->to_dst_file) -
+ initial_bytes;
uint64_t time_spent = current_time - initial_time;
double bandwidth = (double)transferred_bytes / time_spent;
max_size = bandwidth * migrate_max_downtime() / 1000000;
@@ -1698,11 +1700,11 @@ static void *migration_thread(void *opaque)
s->expected_downtime = s->dirty_bytes_rate / bandwidth;
}
- qemu_file_reset_rate_limit(s->file);
+ qemu_file_reset_rate_limit(s->to_dst_file);
initial_time = current_time;
- initial_bytes = qemu_ftell(s->file);
+ initial_bytes = qemu_ftell(s->to_dst_file);
}
- if (qemu_file_rate_limit(s->file)) {
+ if (qemu_file_rate_limit(s->to_dst_file)) {
/* usleep expects microseconds */
g_usleep((initial_time + BUFFER_DELAY - current_time)*1000);
}
@@ -1716,7 +1718,7 @@ static void *migration_thread(void *opaque)
qemu_mutex_lock_iothread();
qemu_savevm_state_cleanup();
if (s->state == MIGRATION_STATUS_COMPLETED) {
- uint64_t transferred_bytes = qemu_ftell(s->file);
+ uint64_t transferred_bytes = qemu_ftell(s->to_dst_file);
s->total_time = end_time - s->total_time;
if (!entered_postcopy) {
s->downtime = end_time - start_time;
@@ -1744,7 +1746,7 @@ void migrate_fd_connect(MigrationState *s)
s->expected_downtime = max_downtime/1000000;
s->cleanup_bh = qemu_bh_new(migrate_fd_cleanup, s);
- qemu_file_set_rate_limit(s->file,
+ qemu_file_set_rate_limit(s->to_dst_file,
s->bandwidth_limit / XFER_LIMIT_RATIO);
/* Notify before starting migration thread */
diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
index 3946aa9..0c88006 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -727,7 +727,8 @@ void postcopy_discard_send_range(MigrationState *ms, PostcopyDiscardState *pds,
if (pds->cur_entry == MAX_DISCARDS_PER_COMMAND) {
/* Full set, ship it! */
- qemu_savevm_send_postcopy_ram_discard(ms->file, pds->ramblock_name,
+ qemu_savevm_send_postcopy_ram_discard(ms->to_dst_file,
+ pds->ramblock_name,
pds->cur_entry,
pds->start_list,
pds->length_list);
@@ -747,7 +748,8 @@ void postcopy_discard_send_finish(MigrationState *ms, PostcopyDiscardState *pds)
{
/* Anything unsent? */
if (pds->cur_entry) {
- qemu_savevm_send_postcopy_ram_discard(ms->file, pds->ramblock_name,
+ qemu_savevm_send_postcopy_ram_discard(ms->to_dst_file,
+ pds->ramblock_name,
pds->cur_entry,
pds->start_list,
pds->length_list);
diff --git a/migration/rdma.c b/migration/rdma.c
index dcabb91..3314589 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -3506,7 +3506,7 @@ void rdma_start_outgoing_migration(void *opaque,
trace_rdma_start_outgoing_migration_after_rdma_connect();
- s->file = qemu_fopen_rdma(rdma, "wb");
+ s->to_dst_file = qemu_fopen_rdma(rdma, "wb");
migrate_fd_connect(s);
return;
err:
diff --git a/migration/savevm.c b/migration/savevm.c
index b9caf59..05f6678 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1163,7 +1163,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp)
.shared = 0
};
MigrationState *ms = migrate_init(¶ms);
- ms->file = f;
+ ms->to_dst_file = f;
if (qemu_savevm_state_blocked(errp)) {
return -EINVAL;
diff --git a/migration/tcp.c b/migration/tcp.c
index ae89172..e083d68 100644
--- a/migration/tcp.c
+++ b/migration/tcp.c
@@ -39,11 +39,11 @@ static void tcp_wait_for_connect(int fd, Error *err, void *opaque)
if (fd < 0) {
DPRINTF("migrate connect error: %s\n", error_get_pretty(err));
- s->file = NULL;
+ s->to_dst_file = NULL;
migrate_fd_error(s);
} else {
DPRINTF("migrate connect success\n");
- s->file = qemu_fopen_socket(fd, "wb");
+ s->to_dst_file = qemu_fopen_socket(fd, "wb");
migrate_fd_connect(s);
}
}
diff --git a/migration/unix.c b/migration/unix.c
index b591813..5492dd6 100644
--- a/migration/unix.c
+++ b/migration/unix.c
@@ -39,11 +39,11 @@ static void unix_wait_for_connect(int fd, Error *err, void *opaque)
if (fd < 0) {
DPRINTF("migrate connect error: %s\n", error_get_pretty(err));
- s->file = NULL;
+ s->to_dst_file = NULL;
migrate_fd_error(s);
} else {
DPRINTF("migrate connect success\n");
- s->file = qemu_fopen_socket(fd, "wb");
+ s->to_dst_file = qemu_fopen_socket(fd, "wb");
migrate_fd_connect(s);
}
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 3/6] savevm: Split load vm state function qemu_loadvm_state
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 1/6] ram: Split host_from_stream_offset() into two helper functions zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState zhanghailiang
@ 2016-01-15 3:37 ` zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 4/6] migration/ram: Fix some helper functions' parameter to use PageSearchStatus zhanghailiang
` (5 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: zhanghailiang @ 2016-01-15 3:37 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, zhanghailiang, peter.huangpeng, dgilbert, quintela
qemu_loadvm_state is too long, and we can simplify it by splitting up
with three helper functions.
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
migration/savevm.c | 156 +++++++++++++++++++++++++++++++----------------------
1 file changed, 92 insertions(+), 64 deletions(-)
diff --git a/migration/savevm.c b/migration/savevm.c
index 05f6678..6d534d1 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1718,90 +1718,118 @@ void loadvm_free_handlers(MigrationIncomingState *mis)
}
}
+static int
+qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
+{
+ uint32_t instance_id, version_id, section_id;
+ SaveStateEntry *se;
+ LoadStateEntry *le;
+ char idstr[256];
+ int ret;
+
+ /* Read section start */
+ section_id = qemu_get_be32(f);
+ if (!qemu_get_counted_string(f, idstr)) {
+ error_report("Unable to read ID string for section %u",
+ section_id);
+ return -EINVAL;
+ }
+ instance_id = qemu_get_be32(f);
+ version_id = qemu_get_be32(f);
+
+ trace_qemu_loadvm_state_section_startfull(section_id, idstr,
+ instance_id, version_id);
+ /* Find savevm section */
+ se = find_se(idstr, instance_id);
+ if (se == NULL) {
+ error_report("Unknown savevm section or instance '%s' %d",
+ idstr, instance_id);
+ return -EINVAL;
+ }
+
+ /* Validate version */
+ if (version_id > se->version_id) {
+ error_report("savevm: unsupported version %d for '%s' v%d",
+ version_id, idstr, se->version_id);
+ return -EINVAL;
+ }
+
+ /* Add entry */
+ le = g_malloc0(sizeof(*le));
+
+ le->se = se;
+ le->section_id = section_id;
+ le->version_id = version_id;
+ QLIST_INSERT_HEAD(&mis->loadvm_handlers, le, entry);
+
+ ret = vmstate_load(f, le->se, le->version_id);
+ if (ret < 0) {
+ error_report("error while loading state for instance 0x%x of"
+ " device '%s'", instance_id, idstr);
+ return ret;
+ }
+ if (!check_section_footer(f, le)) {
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int
+qemu_loadvm_section_part_end(QEMUFile *f, MigrationIncomingState *mis)
+{
+ uint32_t section_id;
+ LoadStateEntry *le;
+ int ret;
+
+ section_id = qemu_get_be32(f);
+
+ trace_qemu_loadvm_state_section_partend(section_id);
+ QLIST_FOREACH(le, &mis->loadvm_handlers, entry) {
+ if (le->section_id == section_id) {
+ break;
+ }
+ }
+ if (le == NULL) {
+ error_report("Unknown savevm section %d", section_id);
+ return -EINVAL;
+ }
+
+ ret = vmstate_load(f, le->se, le->version_id);
+ if (ret < 0) {
+ error_report("error while loading state section id %d(%s)",
+ section_id, le->se->idstr);
+ return ret;
+ }
+ if (!check_section_footer(f, le)) {
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
static int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis)
{
uint8_t section_type;
int ret;
while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
- uint32_t instance_id, version_id, section_id;
- SaveStateEntry *se;
- LoadStateEntry *le;
- char idstr[256];
trace_qemu_loadvm_state_section(section_type);
switch (section_type) {
case QEMU_VM_SECTION_START:
case QEMU_VM_SECTION_FULL:
- /* Read section start */
- section_id = qemu_get_be32(f);
- if (!qemu_get_counted_string(f, idstr)) {
- error_report("Unable to read ID string for section %u",
- section_id);
- return -EINVAL;
- }
- instance_id = qemu_get_be32(f);
- version_id = qemu_get_be32(f);
-
- trace_qemu_loadvm_state_section_startfull(section_id, idstr,
- instance_id, version_id);
- /* Find savevm section */
- se = find_se(idstr, instance_id);
- if (se == NULL) {
- error_report("Unknown savevm section or instance '%s' %d",
- idstr, instance_id);
- return -EINVAL;
- }
-
- /* Validate version */
- if (version_id > se->version_id) {
- error_report("savevm: unsupported version %d for '%s' v%d",
- version_id, idstr, se->version_id);
- return -EINVAL;
- }
-
- /* Add entry */
- le = g_malloc0(sizeof(*le));
-
- le->se = se;
- le->section_id = section_id;
- le->version_id = version_id;
- QLIST_INSERT_HEAD(&mis->loadvm_handlers, le, entry);
-
- ret = vmstate_load(f, le->se, le->version_id);
+ ret = qemu_loadvm_section_start_full(f, mis);
if (ret < 0) {
- error_report("error while loading state for instance 0x%x of"
- " device '%s'", instance_id, idstr);
return ret;
}
- if (!check_section_footer(f, le)) {
- return -EINVAL;
- }
break;
case QEMU_VM_SECTION_PART:
case QEMU_VM_SECTION_END:
- section_id = qemu_get_be32(f);
-
- trace_qemu_loadvm_state_section_partend(section_id);
- QLIST_FOREACH(le, &mis->loadvm_handlers, entry) {
- if (le->section_id == section_id) {
- break;
- }
- }
- if (le == NULL) {
- error_report("Unknown savevm section %d", section_id);
- return -EINVAL;
- }
-
- ret = vmstate_load(f, le->se, le->version_id);
+ ret = qemu_loadvm_section_part_end(f, mis);
if (ret < 0) {
- error_report("error while loading state section id %d(%s)",
- section_id, le->se->idstr);
return ret;
}
- if (!check_section_footer(f, le)) {
- return -EINVAL;
- }
break;
case QEMU_VM_COMMAND:
ret = loadvm_process_command(f);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 4/6] migration/ram: Fix some helper functions' parameter to use PageSearchStatus
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
` (2 preceding siblings ...)
2016-01-15 3:37 ` [Qemu-devel] [PATCH 3/6] savevm: Split load vm state function qemu_loadvm_state zhanghailiang
@ 2016-01-15 3:37 ` zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands zhanghailiang
` (4 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: zhanghailiang @ 2016-01-15 3:37 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, zhanghailiang, peter.huangpeng, dgilbert, quintela
Some helper functions use parameters 'RAMBlock *block' and 'ram_addr_t *offset',
We can use 'PageSearchStatus *pss' directly instead, with this change, we
can reduce the number of parameters for these helper function, also
it is easily to add new parameters for these helper functions.
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
migration/ram.c | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/migration/ram.c b/migration/ram.c
index 8583da8..c36daea 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -729,7 +729,7 @@ static int save_zero_page(QEMUFile *f, RAMBlock *block, ram_addr_t offset,
* @last_stage: if we are at the completion stage
* @bytes_transferred: increase it with the number of transferred bytes
*/
-static int ram_save_page(QEMUFile *f, RAMBlock* block, ram_addr_t offset,
+static int ram_save_page(QEMUFile *f, PageSearchStatus *pss,
bool last_stage, uint64_t *bytes_transferred)
{
int pages = -1;
@@ -738,6 +738,8 @@ static int ram_save_page(QEMUFile *f, RAMBlock* block, ram_addr_t offset,
uint8_t *p;
int ret;
bool send_async = true;
+ RAMBlock *block = pss->block;
+ ram_addr_t offset = pss->offset;
p = block->host + offset;
@@ -912,14 +914,16 @@ static int compress_page_with_multi_thread(QEMUFile *f, RAMBlock *block,
* @last_stage: if we are at the completion stage
* @bytes_transferred: increase it with the number of transferred bytes
*/
-static int ram_save_compressed_page(QEMUFile *f, RAMBlock *block,
- ram_addr_t offset, bool last_stage,
+static int ram_save_compressed_page(QEMUFile *f, PageSearchStatus *pss,
+ bool last_stage,
uint64_t *bytes_transferred)
{
int pages = -1;
uint64_t bytes_xmit;
uint8_t *p;
int ret;
+ RAMBlock *block = pss->block;
+ ram_addr_t offset = pss->offset;
p = block->host + offset;
@@ -1229,7 +1233,7 @@ err:
* Returns: Number of pages written.
*/
static int ram_save_target_page(MigrationState *ms, QEMUFile *f,
- RAMBlock *block, ram_addr_t offset,
+ PageSearchStatus *pss,
bool last_stage,
uint64_t *bytes_transferred,
ram_addr_t dirty_ram_abs)
@@ -1240,11 +1244,11 @@ static int ram_save_target_page(MigrationState *ms, QEMUFile *f,
if (migration_bitmap_clear_dirty(dirty_ram_abs)) {
unsigned long *unsentmap;
if (compression_switch && migrate_use_compression()) {
- res = ram_save_compressed_page(f, block, offset,
+ res = ram_save_compressed_page(f, pss,
last_stage,
bytes_transferred);
} else {
- res = ram_save_page(f, block, offset, last_stage,
+ res = ram_save_page(f, pss, last_stage,
bytes_transferred);
}
@@ -1260,7 +1264,7 @@ static int ram_save_target_page(MigrationState *ms, QEMUFile *f,
* to the stream.
*/
if (res > 0) {
- last_sent_block = block;
+ last_sent_block = pss->block;
}
}
@@ -1284,26 +1288,27 @@ static int ram_save_target_page(MigrationState *ms, QEMUFile *f,
* @bytes_transferred: increase it with the number of transferred bytes
* @dirty_ram_abs: Address of the start of the dirty page in ram_addr_t space
*/
-static int ram_save_host_page(MigrationState *ms, QEMUFile *f, RAMBlock *block,
- ram_addr_t *offset, bool last_stage,
+static int ram_save_host_page(MigrationState *ms, QEMUFile *f,
+ PageSearchStatus *pss,
+ bool last_stage,
uint64_t *bytes_transferred,
ram_addr_t dirty_ram_abs)
{
int tmppages, pages = 0;
do {
- tmppages = ram_save_target_page(ms, f, block, *offset, last_stage,
+ tmppages = ram_save_target_page(ms, f, pss, last_stage,
bytes_transferred, dirty_ram_abs);
if (tmppages < 0) {
return tmppages;
}
pages += tmppages;
- *offset += TARGET_PAGE_SIZE;
+ pss->offset += TARGET_PAGE_SIZE;
dirty_ram_abs += TARGET_PAGE_SIZE;
- } while (*offset & (qemu_host_page_size - 1));
+ } while (pss->offset & (qemu_host_page_size - 1));
/* The offset we leave with is the last one we looked at */
- *offset -= TARGET_PAGE_SIZE;
+ pss->offset -= TARGET_PAGE_SIZE;
return pages;
}
@@ -1351,7 +1356,7 @@ static int ram_find_and_save_block(QEMUFile *f, bool last_stage,
}
if (found) {
- pages = ram_save_host_page(ms, f, pss.block, &pss.offset,
+ pages = ram_save_host_page(ms, f, &pss,
last_stage, bytes_transferred,
dirty_ram_abs);
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
` (3 preceding siblings ...)
2016-01-15 3:37 ` [Qemu-devel] [PATCH 4/6] migration/ram: Fix some helper functions' parameter to use PageSearchStatus zhanghailiang
@ 2016-01-15 3:37 ` zhanghailiang
2016-01-28 18:22 ` Dr. David Alan Gilbert
2016-02-04 10:30 ` Amit Shah
2016-01-15 3:37 ` [Qemu-devel] [PATCH 6/6] qmp-commands.hx: Document the missing options for migration capability commands zhanghailiang
` (3 subsequent siblings)
8 siblings, 2 replies; 20+ messages in thread
From: zhanghailiang @ 2016-01-15 3:37 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, zhanghailiang, peter.huangpeng, dgilbert, quintela
We didn't document x-cpu-throttle-initial/x-cpu-throttle-increment for
commands migrate-set-parameters and query-migrate-parameters.
Here we add the descriptions for these two options and fix the wrong example
for query-migrate-parameters qmp commands.
Besides, this will also fix the bug that we can't set x-cpu-throttle-initial
and x-cpu-throttle-increment through migrate-set-parameters qmp command.
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
---
qmp-commands.hx | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/qmp-commands.hx b/qmp-commands.hx
index db072a6..0a2cded 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3700,6 +3700,10 @@ Set migration parameters
- "compress-level": set compression level during migration (json-int)
- "compress-threads": set compression thread count for migration (json-int)
- "decompress-threads": set decompression thread count for migration (json-int)
+- "x-cpu-throttle-initial": set initial percentage of time guest cpus are
+ throttled for auto-coverge (json-int)
+- "x-cpu-throttle-increment": set throttle increasing percentage for
+ auto-converge (json-int)
Arguments:
@@ -3713,7 +3717,7 @@ EQMP
{
.name = "migrate-set-parameters",
.args_type =
- "compress-level:i?,compress-threads:i?,decompress-threads:i?",
+ "compress-level:i?,compress-threads:i?,decompress-threads:i?,x-cpu-throttle-initial:i?,x-cpu-throttle-increment:i?",
.mhandler.cmd_new = qmp_marshal_migrate_set_parameters,
},
SQMP
@@ -3726,6 +3730,10 @@ Query current migration parameters
- "compress-level" : compression level value (json-int)
- "compress-threads" : compression thread count value (json-int)
- "decompress-threads" : decompression thread count value (json-int)
+ - "x-cpu-throttle-initial" : initial percentage of time guest cpus are
+ throttled (json-int)
+ - "x-cpu-throttle-increment" : throttle increasing percentage for
+ auto-converge (json-int)
Arguments:
@@ -3734,9 +3742,11 @@ Example:
-> { "execute": "query-migrate-parameters" }
<- {
"return": {
- "decompress-threads", 2,
- "compress-threads", 8,
- "compress-level", 1
+ "decompress-threads": 2,
+ "x-cpu-throttle-increment": 10,
+ "compress-threads": 8,
+ "compress-level": 1,
+ "x-cpu-throttle-initial": 20
}
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH 6/6] qmp-commands.hx: Document the missing options for migration capability commands
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
` (4 preceding siblings ...)
2016-01-15 3:37 ` [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands zhanghailiang
@ 2016-01-15 3:37 ` zhanghailiang
2016-01-28 18:24 ` Dr. David Alan Gilbert
2016-01-22 8:43 ` [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration Hailiang Zhang
` (2 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: zhanghailiang @ 2016-01-15 3:37 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, zhanghailiang, peter.huangpeng, dgilbert, quintela
Add the missing descriptions for the options of migration capability commands,
and fix the example for query-migrate-capabilities command.
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
---
qmp-commands.hx | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 0a2cded..12be357 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3647,7 +3647,9 @@ Enable/Disable migration capabilities
- "rdma-pin-all": pin all pages when using RDMA during migration
- "auto-converge": throttle down guest to help convergence of migration
- "zero-blocks": compress zero blocks during block migration
+- "compress": use multiple compression threads to accelerate live migration
- "events": generate events for each migration state change
+- "x-postcopy-ram": postcopy mode for live migration
Arguments:
@@ -3675,13 +3677,24 @@ Query current migration capabilities
- "rdma-pin-all" : RDMA Pin Page state (json-bool)
- "auto-converge" : Auto Converge state (json-bool)
- "zero-blocks" : Zero Blocks state (json-bool)
+ - "compress": Multiple compression threads state (json-bool)
+ - "events": Migration state change event state (json-bool)
+ - "x-postcopy-ram": postcopy ram state (json-bool)
Arguments:
Example:
-> { "execute": "query-migrate-capabilities" }
-<- { "return": [ { "state": false, "capability": "xbzrle" } ] }
+<- {"return": [
+ {"state": false, "capability": "xbzrle"},
+ {"state": false, "capability": "rdma-pin-all"},
+ {"state": false, "capability": "auto-converge"},
+ {"state": false, "capability": "zero-blocks"},
+ {"state": false, "capability": "compress"},
+ {"state": true, "capability": "events"},
+ {"state": false, "capability": "x-postcopy-ram"}
+ ]}
EQMP
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
` (5 preceding siblings ...)
2016-01-15 3:37 ` [Qemu-devel] [PATCH 6/6] qmp-commands.hx: Document the missing options for migration capability commands zhanghailiang
@ 2016-01-22 8:43 ` Hailiang Zhang
2016-01-30 10:32 ` Hailiang Zhang
2016-02-04 11:08 ` Amit Shah
8 siblings, 0 replies; 20+ messages in thread
From: Hailiang Zhang @ 2016-01-22 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: amit.shah, peter.huangpeng, dgilbert, quintela
ping ?
On 2016/1/15 11:37, zhanghailiang wrote:
> Patch 1 ~ patch 4 are picked from COLO and live memory snapshot series,
> They are just small improvements for migration codes and have been reviewed
> by Dave.
>
> Patch 5, 6 are small fixes for migration releated documention.
>
> Please review.
>
> zhanghailiang (6):
> ram: Split host_from_stream_offset() into two helper functions
> migration: Rename the'file' member of MigrationState
> savevm: Split load vm state function qemu_loadvm_state
> migration/ram: Fix some helper functions' parameter to use
> PageSearchStatus
> qmp-commands.hx: Fix the missing options for migration parameters
> commands
> qmp-commands.hx: Document the missing options for migration capability
> commands
>
> include/exec/ram_addr.h | 8 ++-
> include/migration/migration.h | 2 +-
> migration/exec.c | 4 +-
> migration/fd.c | 4 +-
> migration/migration.c | 72 +++++++++----------
> migration/postcopy-ram.c | 6 +-
> migration/ram.c | 73 +++++++++++--------
> migration/rdma.c | 2 +-
> migration/savevm.c | 158 +++++++++++++++++++++++++-----------------
> migration/tcp.c | 4 +-
> migration/unix.c | 4 +-
> qmp-commands.hx | 33 +++++++--
> 12 files changed, 222 insertions(+), 148 deletions(-)
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands
2016-01-15 3:37 ` [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands zhanghailiang
@ 2016-01-28 18:22 ` Dr. David Alan Gilbert
2016-02-04 10:30 ` Amit Shah
1 sibling, 0 replies; 20+ messages in thread
From: Dr. David Alan Gilbert @ 2016-01-28 18:22 UTC (permalink / raw)
To: zhanghailiang; +Cc: amit.shah, peter.huangpeng, qemu-devel, jjherne, quintela
* zhanghailiang (zhang.zhanghailiang@huawei.com) wrote:
> We didn't document x-cpu-throttle-initial/x-cpu-throttle-increment for
> commands migrate-set-parameters and query-migrate-parameters.
>
> Here we add the descriptions for these two options and fix the wrong example
> for query-migrate-parameters qmp commands.
> Besides, this will also fix the bug that we can't set x-cpu-throttle-initial
> and x-cpu-throttle-increment through migrate-set-parameters qmp command.
>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
(cc'd in Jason who wrote the autothrottle)
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> qmp-commands.hx | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index db072a6..0a2cded 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -3700,6 +3700,10 @@ Set migration parameters
> - "compress-level": set compression level during migration (json-int)
> - "compress-threads": set compression thread count for migration (json-int)
> - "decompress-threads": set decompression thread count for migration (json-int)
> +- "x-cpu-throttle-initial": set initial percentage of time guest cpus are
> + throttled for auto-coverge (json-int)
> +- "x-cpu-throttle-increment": set throttle increasing percentage for
> + auto-converge (json-int)
>
> Arguments:
>
> @@ -3713,7 +3717,7 @@ EQMP
> {
> .name = "migrate-set-parameters",
> .args_type =
> - "compress-level:i?,compress-threads:i?,decompress-threads:i?",
> + "compress-level:i?,compress-threads:i?,decompress-threads:i?,x-cpu-throttle-initial:i?,x-cpu-throttle-increment:i?",
> .mhandler.cmd_new = qmp_marshal_migrate_set_parameters,
> },
> SQMP
> @@ -3726,6 +3730,10 @@ Query current migration parameters
> - "compress-level" : compression level value (json-int)
> - "compress-threads" : compression thread count value (json-int)
> - "decompress-threads" : decompression thread count value (json-int)
> + - "x-cpu-throttle-initial" : initial percentage of time guest cpus are
> + throttled (json-int)
> + - "x-cpu-throttle-increment" : throttle increasing percentage for
> + auto-converge (json-int)
>
> Arguments:
>
> @@ -3734,9 +3742,11 @@ Example:
> -> { "execute": "query-migrate-parameters" }
> <- {
> "return": {
> - "decompress-threads", 2,
> - "compress-threads", 8,
> - "compress-level", 1
> + "decompress-threads": 2,
> + "x-cpu-throttle-increment": 10,
> + "compress-threads": 8,
> + "compress-level": 1,
> + "x-cpu-throttle-initial": 20
> }
> }
>
> --
> 1.8.3.1
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 6/6] qmp-commands.hx: Document the missing options for migration capability commands
2016-01-15 3:37 ` [Qemu-devel] [PATCH 6/6] qmp-commands.hx: Document the missing options for migration capability commands zhanghailiang
@ 2016-01-28 18:24 ` Dr. David Alan Gilbert
0 siblings, 0 replies; 20+ messages in thread
From: Dr. David Alan Gilbert @ 2016-01-28 18:24 UTC (permalink / raw)
To: zhanghailiang; +Cc: amit.shah, peter.huangpeng, qemu-devel, quintela
* zhanghailiang (zhang.zhanghailiang@huawei.com) wrote:
> Add the missing descriptions for the options of migration capability commands,
> and fix the example for query-migrate-capabilities command.
>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> qmp-commands.hx | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 0a2cded..12be357 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -3647,7 +3647,9 @@ Enable/Disable migration capabilities
> - "rdma-pin-all": pin all pages when using RDMA during migration
> - "auto-converge": throttle down guest to help convergence of migration
> - "zero-blocks": compress zero blocks during block migration
> +- "compress": use multiple compression threads to accelerate live migration
> - "events": generate events for each migration state change
> +- "x-postcopy-ram": postcopy mode for live migration
>
> Arguments:
>
> @@ -3675,13 +3677,24 @@ Query current migration capabilities
> - "rdma-pin-all" : RDMA Pin Page state (json-bool)
> - "auto-converge" : Auto Converge state (json-bool)
> - "zero-blocks" : Zero Blocks state (json-bool)
> + - "compress": Multiple compression threads state (json-bool)
> + - "events": Migration state change event state (json-bool)
> + - "x-postcopy-ram": postcopy ram state (json-bool)
>
> Arguments:
>
> Example:
>
> -> { "execute": "query-migrate-capabilities" }
> -<- { "return": [ { "state": false, "capability": "xbzrle" } ] }
> +<- {"return": [
> + {"state": false, "capability": "xbzrle"},
> + {"state": false, "capability": "rdma-pin-all"},
> + {"state": false, "capability": "auto-converge"},
> + {"state": false, "capability": "zero-blocks"},
> + {"state": false, "capability": "compress"},
> + {"state": true, "capability": "events"},
> + {"state": false, "capability": "x-postcopy-ram"}
> + ]}
>
> EQMP
>
> --
> 1.8.3.1
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
` (6 preceding siblings ...)
2016-01-22 8:43 ` [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration Hailiang Zhang
@ 2016-01-30 10:32 ` Hailiang Zhang
2016-02-04 10:08 ` Amit Shah
2016-02-04 11:08 ` Amit Shah
8 siblings, 1 reply; 20+ messages in thread
From: Hailiang Zhang @ 2016-01-30 10:32 UTC (permalink / raw)
To: qemu-devel, quintela, amit.shah; +Cc: peter.huangpeng, dgilbert
Hi Juan & Amit,
This series is prerequisite of COLO, and all of them have been reviewed by Dave,
Could you please review and merge them ?
Thanks,
Hailiang
On 2016/1/15 11:37, zhanghailiang wrote:
> Patch 1 ~ patch 4 are picked from COLO and live memory snapshot series,
> They are just small improvements for migration codes and have been reviewed
> by Dave.
>
> Patch 5, 6 are small fixes for migration releated documention.
>
> Please review.
>
> zhanghailiang (6):
> ram: Split host_from_stream_offset() into two helper functions
> migration: Rename the'file' member of MigrationState
> savevm: Split load vm state function qemu_loadvm_state
> migration/ram: Fix some helper functions' parameter to use
> PageSearchStatus
> qmp-commands.hx: Fix the missing options for migration parameters
> commands
> qmp-commands.hx: Document the missing options for migration capability
> commands
>
> include/exec/ram_addr.h | 8 ++-
> include/migration/migration.h | 2 +-
> migration/exec.c | 4 +-
> migration/fd.c | 4 +-
> migration/migration.c | 72 +++++++++----------
> migration/postcopy-ram.c | 6 +-
> migration/ram.c | 73 +++++++++++--------
> migration/rdma.c | 2 +-
> migration/savevm.c | 158 +++++++++++++++++++++++++-----------------
> migration/tcp.c | 4 +-
> migration/unix.c | 4 +-
> qmp-commands.hx | 33 +++++++--
> 12 files changed, 222 insertions(+), 148 deletions(-)
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration
2016-01-30 10:32 ` Hailiang Zhang
@ 2016-02-04 10:08 ` Amit Shah
0 siblings, 0 replies; 20+ messages in thread
From: Amit Shah @ 2016-02-04 10:08 UTC (permalink / raw)
To: Hailiang Zhang; +Cc: peter.huangpeng, qemu-devel, dgilbert, quintela
On (Sat) 30 Jan 2016 [18:32:22], Hailiang Zhang wrote:
> Hi Juan & Amit,
>
> This series is prerequisite of COLO, and all of them have been reviewed by Dave,
> Could you please review and merge them ?
Yea, I've been away last couple of weeks. Getting to this now.
Amit
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands
2016-01-15 3:37 ` [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands zhanghailiang
2016-01-28 18:22 ` Dr. David Alan Gilbert
@ 2016-02-04 10:30 ` Amit Shah
1 sibling, 0 replies; 20+ messages in thread
From: Amit Shah @ 2016-02-04 10:30 UTC (permalink / raw)
To: zhanghailiang; +Cc: peter.huangpeng, qemu-devel, dgilbert, quintela
On (Fri) 15 Jan 2016 [11:37:45], zhanghailiang wrote:
> We didn't document x-cpu-throttle-initial/x-cpu-throttle-increment for
> commands migrate-set-parameters and query-migrate-parameters.
>
> Here we add the descriptions for these two options and fix the wrong example
> for query-migrate-parameters qmp commands.
> Besides, this will also fix the bug that we can't set x-cpu-throttle-initial
> and x-cpu-throttle-increment through migrate-set-parameters qmp command.
>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> ---
> qmp-commands.hx | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index db072a6..0a2cded 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -3700,6 +3700,10 @@ Set migration parameters
> - "compress-level": set compression level during migration (json-int)
> - "compress-threads": set compression thread count for migration (json-int)
> - "decompress-threads": set decompression thread count for migration (json-int)
> +- "x-cpu-throttle-initial": set initial percentage of time guest cpus are
> + throttled for auto-coverge (json-int)
typo, should be converge. No need to re-send the series again unless
a respin is required.
> +- "x-cpu-throttle-increment": set throttle increasing percentage for
> + auto-converge (json-int)
Amit
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState
2016-01-15 3:37 ` [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState zhanghailiang
@ 2016-02-04 10:47 ` Amit Shah
2016-02-04 10:50 ` Dr. David Alan Gilbert
0 siblings, 1 reply; 20+ messages in thread
From: Amit Shah @ 2016-02-04 10:47 UTC (permalink / raw)
To: zhanghailiang; +Cc: peter.huangpeng, qemu-devel, dgilbert, quintela
On (Fri) 15 Jan 2016 [11:37:42], zhanghailiang wrote:
> Rename the 'file' member of MigrationState to 'to_dst_file'.
Why?
(Use this space to explain why you're doing it, rather than repeating
the first line of the commit. It helps when reviewing the git logs
later.)
Thanks,
Amit
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState
2016-02-04 10:47 ` Amit Shah
@ 2016-02-04 10:50 ` Dr. David Alan Gilbert
2016-02-04 10:57 ` Amit Shah
0 siblings, 1 reply; 20+ messages in thread
From: Dr. David Alan Gilbert @ 2016-02-04 10:50 UTC (permalink / raw)
To: Amit Shah; +Cc: peter.huangpeng, quintela, zhanghailiang, qemu-devel
* Amit Shah (amit.shah@redhat.com) wrote:
> On (Fri) 15 Jan 2016 [11:37:42], zhanghailiang wrote:
> > Rename the 'file' member of MigrationState to 'to_dst_file'.
>
> Why?
>
> (Use this space to explain why you're doing it, rather than repeating
> the first line of the commit. It helps when reviewing the git logs
> later.)
I think the simple answer is consistency; now we've got a bidirectional
connection we've already got to_src_file, from_src_file and from_dst_file,
so 'file' is an oddity that I was too lazy to rename previously.
Dave
>
> Thanks,
>
> Amit
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState
2016-02-04 10:50 ` Dr. David Alan Gilbert
@ 2016-02-04 10:57 ` Amit Shah
2016-02-04 11:10 ` Dr. David Alan Gilbert
0 siblings, 1 reply; 20+ messages in thread
From: Amit Shah @ 2016-02-04 10:57 UTC (permalink / raw)
To: Dr. David Alan Gilbert
Cc: peter.huangpeng, quintela, zhanghailiang, qemu-devel
On (Thu) 04 Feb 2016 [10:50:16], Dr. David Alan Gilbert wrote:
> * Amit Shah (amit.shah@redhat.com) wrote:
> > On (Fri) 15 Jan 2016 [11:37:42], zhanghailiang wrote:
> > > Rename the 'file' member of MigrationState to 'to_dst_file'.
> >
> > Why?
> >
> > (Use this space to explain why you're doing it, rather than repeating
> > the first line of the commit. It helps when reviewing the git logs
> > later.)
>
> I think the simple answer is consistency; now we've got a bidirectional
> connection we've already got to_src_file, from_src_file and from_dst_file,
> so 'file' is an oddity that I was too lazy to rename previously.
Sure, I just mean we need better commit description. Just provide
one, and I'll use that when doing the pull req.
Thanks,
Amit
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
` (7 preceding siblings ...)
2016-01-30 10:32 ` Hailiang Zhang
@ 2016-02-04 11:08 ` Amit Shah
2016-02-04 12:01 ` Hailiang Zhang
8 siblings, 1 reply; 20+ messages in thread
From: Amit Shah @ 2016-02-04 11:08 UTC (permalink / raw)
To: zhanghailiang; +Cc: peter.huangpeng, qemu-devel, dgilbert, quintela
On (Fri) 15 Jan 2016 [11:37:40], zhanghailiang wrote:
> Patch 1 ~ patch 4 are picked from COLO and live memory snapshot series,
> They are just small improvements for migration codes and have been reviewed
> by Dave.
>
> Patch 5, 6 are small fixes for migration releated documention.
>
> Please review.
Reviewed-by: Amit Shah <amit.shah@redhat.com>
Just provide a better commit text for patch 2 and I'll apply.
Thanks,
Amit
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState
2016-02-04 10:57 ` Amit Shah
@ 2016-02-04 11:10 ` Dr. David Alan Gilbert
2016-02-04 12:02 ` Hailiang Zhang
0 siblings, 1 reply; 20+ messages in thread
From: Dr. David Alan Gilbert @ 2016-02-04 11:10 UTC (permalink / raw)
To: Amit Shah; +Cc: peter.huangpeng, quintela, zhanghailiang, qemu-devel
* Amit Shah (amit.shah@redhat.com) wrote:
> On (Thu) 04 Feb 2016 [10:50:16], Dr. David Alan Gilbert wrote:
> > * Amit Shah (amit.shah@redhat.com) wrote:
> > > On (Fri) 15 Jan 2016 [11:37:42], zhanghailiang wrote:
> > > > Rename the 'file' member of MigrationState to 'to_dst_file'.
> > >
> > > Why?
> > >
> > > (Use this space to explain why you're doing it, rather than repeating
> > > the first line of the commit. It helps when reviewing the git logs
> > > later.)
> >
> > I think the simple answer is consistency; now we've got a bidirectional
> > connection we've already got to_src_file, from_src_file and from_dst_file,
> > so 'file' is an oddity that I was too lazy to rename previously.
>
> Sure, I just mean we need better commit description. Just provide
> one, and I'll use that when doing the pull req.
I suggest:
Rename the 'file' memory of MigrationState to 'to_dst_file' to
be consistent with to_src_file, from_src_file and from_dst_file.
Dave
>
> Thanks,
>
> Amit
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration
2016-02-04 11:08 ` Amit Shah
@ 2016-02-04 12:01 ` Hailiang Zhang
0 siblings, 0 replies; 20+ messages in thread
From: Hailiang Zhang @ 2016-02-04 12:01 UTC (permalink / raw)
To: Amit Shah; +Cc: quintela, peter.huangpeng, dgilbert, qemu-devel
On 2016/2/4 19:08, Amit Shah wrote:
> On (Fri) 15 Jan 2016 [11:37:40], zhanghailiang wrote:
>> Patch 1 ~ patch 4 are picked from COLO and live memory snapshot series,
>> They are just small improvements for migration codes and have been reviewed
>> by Dave.
>>
>> Patch 5, 6 are small fixes for migration releated documention.
>>
>> Please review.
>
> Reviewed-by: Amit Shah <amit.shah@redhat.com>
>
> Just provide a better commit text for patch 2 and I'll apply.
>
OK, i will send v2.
Thanks,
Hailiang
> Thanks,
>
> Amit
>
> .
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState
2016-02-04 11:10 ` Dr. David Alan Gilbert
@ 2016-02-04 12:02 ` Hailiang Zhang
0 siblings, 0 replies; 20+ messages in thread
From: Hailiang Zhang @ 2016-02-04 12:02 UTC (permalink / raw)
To: Dr. David Alan Gilbert, Amit Shah; +Cc: quintela, peter.huangpeng, qemu-devel
On 2016/2/4 19:10, Dr. David Alan Gilbert wrote:
> * Amit Shah (amit.shah@redhat.com) wrote:
>> On (Thu) 04 Feb 2016 [10:50:16], Dr. David Alan Gilbert wrote:
>>> * Amit Shah (amit.shah@redhat.com) wrote:
>>>> On (Fri) 15 Jan 2016 [11:37:42], zhanghailiang wrote:
>>>>> Rename the 'file' member of MigrationState to 'to_dst_file'.
>>>>
>>>> Why?
>>>>
>>>> (Use this space to explain why you're doing it, rather than repeating
>>>> the first line of the commit. It helps when reviewing the git logs
>>>> later.)
>>>
>>> I think the simple answer is consistency; now we've got a bidirectional
>>> connection we've already got to_src_file, from_src_file and from_dst_file,
>>> so 'file' is an oddity that I was too lazy to rename previously.
>>
>> Sure, I just mean we need better commit description. Just provide
>> one, and I'll use that when doing the pull req.
>
> I suggest:
>
> Rename the 'file' memory of MigrationState to 'to_dst_file' to
> be consistent with to_src_file, from_src_file and from_dst_file.
>
A very Good suggestion, thanks.
> Dave
>
>>
>> Thanks,
>>
>> Amit
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>
> .
>
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2016-02-04 12:03 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-15 3:37 [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 1/6] ram: Split host_from_stream_offset() into two helper functions zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 2/6] migration: Rename the'file' member of MigrationState zhanghailiang
2016-02-04 10:47 ` Amit Shah
2016-02-04 10:50 ` Dr. David Alan Gilbert
2016-02-04 10:57 ` Amit Shah
2016-02-04 11:10 ` Dr. David Alan Gilbert
2016-02-04 12:02 ` Hailiang Zhang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 3/6] savevm: Split load vm state function qemu_loadvm_state zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 4/6] migration/ram: Fix some helper functions' parameter to use PageSearchStatus zhanghailiang
2016-01-15 3:37 ` [Qemu-devel] [PATCH 5/6] qmp-commands.hx: Fix the missing options for migration parameters commands zhanghailiang
2016-01-28 18:22 ` Dr. David Alan Gilbert
2016-02-04 10:30 ` Amit Shah
2016-01-15 3:37 ` [Qemu-devel] [PATCH 6/6] qmp-commands.hx: Document the missing options for migration capability commands zhanghailiang
2016-01-28 18:24 ` Dr. David Alan Gilbert
2016-01-22 8:43 ` [Qemu-devel] [PATCH 0/6] Some improvements and small fixes for migration Hailiang Zhang
2016-01-30 10:32 ` Hailiang Zhang
2016-02-04 10:08 ` Amit Shah
2016-02-04 11:08 ` Amit Shah
2016-02-04 12:01 ` Hailiang Zhang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).