From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:37711) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Su3kU-0004eH-Rc for qemu-devel@nongnu.org; Wed, 25 Jul 2012 11:43:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Su3kO-0004ir-K5 for qemu-devel@nongnu.org; Wed, 25 Jul 2012 11:43:42 -0400 Received: from g4t0015.houston.hp.com ([15.201.24.18]:33257) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Su3kO-0004gY-9u for qemu-devel@nongnu.org; Wed, 25 Jul 2012 11:43:36 -0400 From: "Vinod, Chegu" Date: Wed, 25 Jul 2012 15:41:56 +0000 Message-ID: <4168C988EBDF2141B4E0B6475B6A73D115952A@G6W2493.americas.hpqcorp.net> References: <1343227834-5400-1-git-send-email-owasserm@redhat.com> <1343227834-5400-13-git-send-email-owasserm@redhat.com> In-Reply-To: <1343227834-5400-13-git-send-email-owasserm@redhat.com> Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_4168C988EBDF2141B4E0B6475B6A73D115952AG6W2493americashp_" MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 11/11] Restart optimization on stage3 update version List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Orit Wasserman , "qemu-devel@nongnu.org" Cc: "peter.maydell@linaro.org" , "aliguori@us.ibm.com" , "quintela@redhat.com" , "stefanha@gmail.com" , "mdroth@linux.vnet.ibm.com" , "lcapitulino@redhat.com" , "blauwirbel@gmail.com" , "avi@redhat.com" , "pbonzini@redhat.com" , "eblake@redhat.com" --_000_4168C988EBDF2141B4E0B6475B6A73D115952AG6W2493americashp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable -----Original Message----- From: Orit Wasserman [mailto:owasserm@redhat.com] From: Juan Quintela > Signed-off-by: Juan Quintela > --- 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 =3D 0, bytes_sent =3D -1; XBZRLEHeader hdr =3D { @@ -289,8 +289,10 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t *curr= ent_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 *curre= nt_data, /* we need to update the data in the cache, in order to get the same d= ata we cached we decode the encoded page on the cached data */ Nit : Are the above comments still valid...given that there is no decoding= happening here ? - 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 =3D encoded_len; hdr.xh_flags |=3D 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 =3D last_block; ram_addr_t offset =3D last_offset; @@ -376,8 +380,10 @@ static int ram_save_block(QEMUFile *f) } else if (migrate_use_xbzrle()) { current_addr =3D block->offset + offset; bytes_sent =3D save_xbzrle_page(f, p, current_addr, block, - offset, cont); - p =3D get_cached_data(XBZRLE.cache, current_addr); + offset, cont, last_stage); + if (!last_stage) { + p =3D 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 *opaq= ue) while ((ret =3D qemu_file_rate_limit(f)) =3D=3D 0) { int bytes_sent; - bytes_sent =3D ram_save_block(f); + bytes_sent =3D 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 =3D ram_save_block(f); + bytes_sent =3D ram_save_block(f, true); /* no more blocks to sent */ if (bytes_sent < 0) { break; -- 1.7.7.6 --_000_4168C988EBDF2141B4E0B6475B6A73D115952AG6W2493americashp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

 

 

-----Original Message-----
From: Orit Wasserman [mailto:owasserm@redhat.com]

 

From: Juan Quintela <quintel= a@redhat.com>

 

Signed-off-by: Juan Quintela <quintela@redhat.com>

---

arch_init.c |   24 ++++= +++++++++++---------=

1 files changed, 15 insertions(+), 9 deletion= s(-)

 

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_hd= r(QEMUFile *f, RAMBlock *block, ram_addr_t offset,

 static int save_xbzrle_page(QEMUFile *f, ui= nt8_t *current_data,

        &= nbsp;           &nbs= p;        ram_addr_t current_addr, RAMBl= ock *block,

-        =              &n= bsp;      ram_addr_t offset, int cont)

+       &n= bsp;            = ;        ram_addr_t offset, int cont, bo= ol

+ last_stage)

{

     int encoded_len =3D 0, b= ytes_sent =3D -1;

     XBZRLEHeader hdr =3D {

@@ -289,8 +289,10 @@ static int save_xbzrle_p= age(QEMUFile *f, uint8_t *current_data,

     uint8_t *prev_cached_pag= e;

     if (!cache_is_cache= d(XBZRLE.cache, current_addr)) {

-        cache= _insert(XBZRLE.cache, current_addr,

-        =              g_= memdup(current_data, TARGET_PAGE_SIZE));

+        i= f (!last_stage) {

+        &= nbsp;   cache_insert(XBZRLE.cache, current_addr,<= /p>

+       &n= bsp;            = ;     g_memdup(current_data, TARGET_PAGE_SIZE));

+        }=

         = acct_info.xbzrle_cache_miss++;

         = return -1;

     }

@@ -317,7 +319,9 @@ static int save_xbzrle_pa= ge(QEMUFile *f, uint8_t *current_data,

     /* we need to updat= e the data in the cache, in order to get the same data

        we cac= hed we decode the encoded page on the cached data */

 

Nit :  Are the= above comments still valid…given that there is no decoding happening= here ?

 

-    memcpy(prev_cached_page, XBZR= LE.current_buf, TARGET_PAGE_SIZE);

+    if (!last_stage) {

+        m= emcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);

+    }

     hdr.xh_len =3D enco= ded_len;

     hdr.xh_flags |=3D ENCODI= NG_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 =3D last= _block;

     ram_addr_t offset =3D la= st_offset;

@@ -376,8 +380,10 @@ static int ram_save_bloc= k(QEMUFile *f)

        &= nbsp;    } else if (migrate_use_xbzrle()) {

        &= nbsp;        current_addr =3D block->= offset + offset;

        &= nbsp;        bytes_sent =3D save_xbzrle_= page(f, p, current_addr, block,

-        =             &nb= sp;            =              of= fset, cont);

-        =         p =3D get_cached_data(XBZRLE.cac= he, current_addr);

+       &n= bsp;            = ;            &n= bsp;            = ; offset, cont, last_stage);

+       &n= bsp;        if (!last_stage) {

+       &n= bsp;            p = =3D get_cached_data(XBZRLE.cache, current_addr);

+        &= nbsp;       }

        &= nbsp;    }

        &= nbsp;    /* either we didn't send yet (we may have had = XBZRLE overflow) */ @@ -549,7 +555,7 @@ static int ram_save_iterate(QEM= UFile *f, void *opaque)

     while ((ret =3D qemu_fil= e_rate_limit(f)) =3D=3D 0) {

         = int bytes_sent;

-        bytes= _sent =3D ram_save_block(f);

+        b= ytes_sent =3D ram_save_block(f, false);

         = /* no more blocks to sent */

         = if (bytes_sent < 0) {

        &= nbsp;    break;

@@ -611,7 +617,7 @@ static int ram_save_compl= ete(QEMUFile *f, void *opaque)

     while (true) {

         = int bytes_sent;

-        bytes= _sent =3D ram_save_block(f);

+        b= ytes_sent =3D ram_save_block(f, true);

         = /* no more blocks to sent */

         = if (bytes_sent < 0) {

        &= nbsp;    break;

--

1.7.7.6

 

--_000_4168C988EBDF2141B4E0B6475B6A73D115952AG6W2493americashp_--