[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/11] Restart optimization on stage3 update version
From: |
Orit Wasserman |
Subject: |
[Qemu-devel] [PATCH 11/11] Restart optimization on stage3 update version |
Date: |
Wed, 25 Jul 2012 17:50:34 +0300 |
From: Juan Quintela <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
---
arch_init.c | 24 +++++++++++++++---------
1 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/arch_init.c b/arch_init.c
index f484bd5..f555c27 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -279,7 +279,7 @@ static void save_block_hdr(QEMUFile *f, RAMBlock *block,
ram_addr_t offset,
static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data,
ram_addr_t current_addr, RAMBlock *block,
- ram_addr_t offset, int cont)
+ ram_addr_t offset, int cont, bool last_stage)
{
int encoded_len = 0, bytes_sent = -1;
XBZRLEHeader hdr = {
@@ -289,8 +289,10 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t
*current_data,
uint8_t *prev_cached_page;
if (!cache_is_cached(XBZRLE.cache, current_addr)) {
- cache_insert(XBZRLE.cache, current_addr,
- g_memdup(current_data, TARGET_PAGE_SIZE));
+ if (!last_stage) {
+ cache_insert(XBZRLE.cache, current_addr,
+ g_memdup(current_data, TARGET_PAGE_SIZE));
+ }
acct_info.xbzrle_cache_miss++;
return -1;
}
@@ -317,7 +319,9 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t
*current_data,
/* we need to update the data in the cache, in order to get the same data
we cached we decode the encoded page on the cached data */
- memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);
+ if (!last_stage) {
+ memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);
+ }
hdr.xh_len = encoded_len;
hdr.xh_flags |= ENCODING_FLAG_XBZRLE;
@@ -345,7 +349,7 @@ static ram_addr_t last_offset;
* n: the amount of bytes written in other case
*/
-static int ram_save_block(QEMUFile *f)
+static int ram_save_block(QEMUFile *f, bool last_stage)
{
RAMBlock *block = last_block;
ram_addr_t offset = last_offset;
@@ -376,8 +380,10 @@ static int ram_save_block(QEMUFile *f)
} else if (migrate_use_xbzrle()) {
current_addr = block->offset + offset;
bytes_sent = save_xbzrle_page(f, p, current_addr, block,
- offset, cont);
- p = get_cached_data(XBZRLE.cache, current_addr);
+ offset, cont, last_stage);
+ if (!last_stage) {
+ p = get_cached_data(XBZRLE.cache, current_addr);
+ }
}
/* either we didn't send yet (we may have had XBZRLE overflow) */
@@ -549,7 +555,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
while ((ret = qemu_file_rate_limit(f)) == 0) {
int bytes_sent;
- bytes_sent = ram_save_block(f);
+ bytes_sent = ram_save_block(f, false);
/* no more blocks to sent */
if (bytes_sent < 0) {
break;
@@ -611,7 +617,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
while (true) {
int bytes_sent;
- bytes_sent = ram_save_block(f);
+ bytes_sent = ram_save_block(f, true);
/* no more blocks to sent */
if (bytes_sent < 0) {
break;
--
1.7.7.6
- [Qemu-devel] [PATCH 00/11] Migration next v6, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 02/11] Add migrate_set_parameter and query-migrate-parameters, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 01/11] Add migration capabilities, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 03/11] Add XBZRLE documentation, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 05/11] Add uleb encoding/decoding functions, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 04/11] Add cache handling functions, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 00/11] Migration next v6, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 11/11] Restart optimization on stage3 update version,
Orit Wasserman <=
- [Qemu-devel] [PATCH 07/11] Add XBZRLE to ram_save_block and ram_save_live, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 08/11] Add migrate_set_cachesize command, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 06/11] Add xbzrle_encode_buffer and xbzrle_decode_buffer functions, Orit Wasserman, 2012/07/25
- [Qemu-devel] [PATCH 10/11] Add XBZRLE statistics, Orit Wasserman, 2012/07/25