Message ID | 1394542415-5152-7-git-send-email-arei.gonglei@huawei.com |
---|---|
State | New |
Headers | show |
<arei.gonglei@huawei.com> wrote: > From: ChenLiang <chenliang88@huawei.com> > > Reducing data copy can reduce cpu overhead. > > Signed-off-by: ChenLiang <chenliang88@huawei.com> > Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Juan Quintela <quintela@redhat.com>
<arei.gonglei@huawei.com> wrote: > From: ChenLiang <chenliang88@huawei.com> > > Reducing data copy can reduce cpu overhead. > > Signed-off-by: ChenLiang <chenliang88@huawei.com> > Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Juan Quintela <quintela@redhat.com>
On 03/11/2014 06:53 AM, arei.gonglei@huawei.com wrote: > From: ChenLiang <chenliang88@huawei.com> s/migraion/migration/ in the subject (here and in 7/10) s/optimiztion/optimize/ in the subject > +++ b/arch_init.c > @@ -381,11 +381,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) { > @@ -404,7 +401,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); So, is XBZRLE.current_buf even needed after this patch? Oh, patch 7 kills it. I guess splitting in two patches is okay, although I personally would have squashed them into one.
diff --git a/arch_init.c b/arch_init.c index d79535c..7ef3ebb 100644 --- a/arch_init.c +++ b/arch_init.c @@ -381,11 +381,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) { @@ -404,7 +401,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 */