[Qemu-devel] [PATCH v5 09/10] migration: optimize xbzrle by reducing data copy

2014-04-04 Thread arei.gonglei
From: ChenLiang chenlian...@huawei.com

Reducing data copy can reduce cpu overhead.

Signed-off-by: ChenLiang chenlian...@huawei.com
Signed-off-by: Gonglei arei.gong...@huawei.com
---
 arch_init.c | 8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/arch_init.c b/arch_init.c
index 84a4bd3..94b62e2 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -373,11 +373,8 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t 
**current_data,
 
 prev_cached_page = get_cached_data(XBZRLE.cache, current_addr);
 
-/* save current buffer into memory */
-memcpy(XBZRLE.current_buf, *current_data, TARGET_PAGE_SIZE);
-
 /* XBZRLE encoding (if there is no overflow) */
-encoded_len = xbzrle_encode_buffer(prev_cached_page, XBZRLE.current_buf,
+encoded_len = xbzrle_encode_buffer(prev_cached_page, *current_data,
TARGET_PAGE_SIZE, XBZRLE.encoded_buf,
TARGET_PAGE_SIZE);
 if (encoded_len == 0) {
@@ -396,7 +393,8 @@ 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 
*/
 if (!last_stage) {
-memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);
+xbzrle_decode_buffer(XBZRLE.encoded_buf, encoded_len, prev_cached_page,
+ TARGET_PAGE_SIZE);
 }
 
 /* Send XBZRLE based compressed page */
-- 
1.7.12.4





Re: [Qemu-devel] [PATCH v5 09/10] migration: optimize xbzrle by reducing data copy

2014-04-04 Thread Dr. David Alan Gilbert
* arei.gong...@huawei.com (arei.gong...@huawei.com) wrote:
 From: ChenLiang chenlian...@huawei.com
 
 Reducing data copy can reduce cpu overhead.
 
 Signed-off-by: ChenLiang chenlian...@huawei.com
 Signed-off-by: Gonglei arei.gong...@huawei.com

Yes, with the previous patches that's now correct.

Reviewed-by: Dr. David Alan Gilbert dgilb...@redhat.com

 ---
  arch_init.c | 8 +++-
  1 file changed, 3 insertions(+), 5 deletions(-)
 
 diff --git a/arch_init.c b/arch_init.c
 index 84a4bd3..94b62e2 100644
 --- a/arch_init.c
 +++ b/arch_init.c
 @@ -373,11 +373,8 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t 
 **current_data,
  
  prev_cached_page = get_cached_data(XBZRLE.cache, current_addr);
  
 -/* save current buffer into memory */
 -memcpy(XBZRLE.current_buf, *current_data, TARGET_PAGE_SIZE);
 -
  /* XBZRLE encoding (if there is no overflow) */
 -encoded_len = xbzrle_encode_buffer(prev_cached_page, XBZRLE.current_buf,
 +encoded_len = xbzrle_encode_buffer(prev_cached_page, *current_data,
 TARGET_PAGE_SIZE, XBZRLE.encoded_buf,
 TARGET_PAGE_SIZE);
  if (encoded_len == 0) {
 @@ -396,7 +393,8 @@ 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 */
  if (!last_stage) {
 -memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);
 +xbzrle_decode_buffer(XBZRLE.encoded_buf, encoded_len, 
 prev_cached_page,
 + TARGET_PAGE_SIZE);
  }
  
  /* Send XBZRLE based compressed page */
 -- 
 1.7.12.4
 
 
--
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK