qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 6/6] multithread decompression: Avoid one copy


From: Li, Liang Z
Subject: Re: [Qemu-devel] [PATCH 6/6] multithread decompression: Avoid one copy
Date: Wed, 16 Dec 2015 01:12:31 +0000

> From: "Dr. David Alan Gilbert" <address@hidden>
> 
> qemu_get_buffer does a copy, we can avoid the memcpy, and we can then
> remove the extra buffer.
> 
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> ---
>  migration/ram.c | 11 +++--------
>  1 file changed, 3 insertions(+), 8 deletions(-)
> 
> diff --git a/migration/ram.c b/migration/ram.c index 994552c..2da3b51 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -286,7 +286,6 @@ static bool quit_comp_thread;  static bool
> quit_decomp_thread;  static DecompressParam *decomp_param;  static
> QemuThread *decompress_threads; -static uint8_t *compressed_data_buf;
> 
>  static int do_compress_ram_page(CompressParam *param);
> 
> @@ -2207,7 +2206,6 @@ void migrate_decompress_threads_create(void)
>      thread_count = migrate_decompress_threads();
>      decompress_threads = g_new0(QemuThread, thread_count);
>      decomp_param = g_new0(DecompressParam, thread_count);
> -    compressed_data_buf =
> g_malloc0(compressBound(TARGET_PAGE_SIZE));
>      quit_decomp_thread = false;
>      for (i = 0; i < thread_count; i++) {
>          qemu_mutex_init(&decomp_param[i].mutex);
> @@ -2238,13 +2236,11 @@ void migrate_decompress_threads_join(void)
>      }
>      g_free(decompress_threads);
>      g_free(decomp_param);
> -    g_free(compressed_data_buf);
>      decompress_threads = NULL;
>      decomp_param = NULL;
> -    compressed_data_buf = NULL;
>  }
> 
> -static void decompress_data_with_multi_threads(uint8_t *compbuf,
> +static void decompress_data_with_multi_threads(QEMUFile *f,
>                                                 void *host, int len)  {
>      int idx, thread_count;
> @@ -2253,7 +2249,7 @@ static void
> decompress_data_with_multi_threads(uint8_t *compbuf,
>      while (true) {
>          for (idx = 0; idx < thread_count; idx++) {
>              if (!decomp_param[idx].start) {
> -                memcpy(decomp_param[idx].compbuf, compbuf, len);
> +                qemu_get_buffer(f, decomp_param[idx].compbuf, len);
>                  decomp_param[idx].des = host;
>                  decomp_param[idx].len = len;
>                  start_decompression(&decomp_param[idx]);
> @@ -2498,8 +2494,7 @@ static int ram_load(QEMUFile *f, void *opaque, int
> version_id)
>                  ret = -EINVAL;
>                  break;
>              }
> -            qemu_get_buffer(f, compressed_data_buf, len);
> -            decompress_data_with_multi_threads(compressed_data_buf, host,
> len);
> +            decompress_data_with_multi_threads(f, host, len);
>              break;
> 
>          case RAM_SAVE_FLAG_XBZRLE:
> --

I am not familiar with post-copy code, so I just care about this patch. 

Good finding, thanks.

Reviewed-by: Liang Li <address@hidden>

Liang



reply via email to

[Prev in Thread] Current Thread [Next in Thread]