All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Liang Li <liang.z.li@intel.com>
Cc: quintela@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com,
	lcapitulino@redhat.com, yang.z.zhang@intel.com
Subject: Re: [Qemu-devel] [v3 01/13] docs: Add a doc about multiple thread compression
Date: Fri, 23 Jan 2015 13:17:09 +0000	[thread overview]
Message-ID: <20150123131709.GB2370@work-vm> (raw)
In-Reply-To: <1418347746-15829-2-git-send-email-liang.z.li@intel.com>

* Liang Li (liang.z.li@intel.com) wrote:
> Give some details about the multiple compression threads and
> how to use it in live migration.
> 
> Signed-off-by: Liang Li <liang.z.li@intel.com>
> Signed-off-by: Yang Zhang <yang.z.zhang@intel.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  docs/multi-thread-compression.txt | 141 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 141 insertions(+)
>  create mode 100644 docs/multi-thread-compression.txt
> 
> diff --git a/docs/multi-thread-compression.txt b/docs/multi-thread-compression.txt
> new file mode 100644
> index 0000000..3bbc641
> --- /dev/null
> +++ b/docs/multi-thread-compression.txt
> @@ -0,0 +1,141 @@
> +Use multiple thread (de)compression in live migration
> +======================================================
> +Copyright (C) 2014 Intel Corporation
> +Author: Li Liang <liang.z.li@intel.com>
> +
> +This work is licensed under the terms of the GNU GPLv2 or later. See
> +the COPYING file in the top-level directory.
> +
> +Contents:
> +=========
> +* Introduction
> +* When to use
> +* Performance
> +* Usage
> +* TODO
> +
> +Introduction
> +============
> +Instead of sending the guest memory directly, this solution will
> +compress the ram page before sending; after receiving, the data will
> +be decompressed. Using compression in live migration can help
> +to reduce the data transferred about 60%, this is very useful when the
> +bandwidth is limited, and the migration time can also be reduced about
> +70% in a typical case.
> +
> +The process of compression will consume additional CPU cycles, and the
> +extra CPU cycles will increase the migration time. On the other hand,
> +the amount of data transferred will reduced, this factor can reduce
> +the migration time. If the process of the compression is quick
> +enough, then the total migration time can be reduced, and multiple
> +thread compression can be used to accelerate the compression process.
> +
> +The decompression speed of zlib is at least 4 times as quick as
> +compression, if the source and destination CPU have equal speed,
> +keeping the compression thread count 4 times the decompression
> +thread count can avoid CPU waste.
> +
> +Compression level can be used to control the compression speed and the
> +compression ratio. High compression ratio will take more time, level 0
> +stands for no compression, level 1 stands for the best compression
> +speed, and level 9 stands for the best compression ratio. Users can
> +select a level number between 0 and 9.
> +
> +
> +When to use the multiple thread compression in live migration
> +==============================================================
> +Compression of data will consume extra CPU cycles; so in a system with
> +high overhead of CPU, avoid using this feature. When the network
> +bandwidth is very limited and the CPU resource is adequate, use of
> +multiple thread compression will be very helpful. If both the CPU and
> +the network bandwidth are adequate, use of multiple thread compression
> +can still help to reduce the migration time.
> +
> +Performance
> +===========
> +Test environment:
> +
> +CPU: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz
> +Socket Count: 2
> +Ram: 128G
> +NIC: Intel I350 (10/100/1000Mbps)
> +Host OS: CentOS 7 64-bit
> +Guest OS: Ubuntu 12.10 64-bit
> +Parameter: qemu-system-x86_64 -enable-kvm -m 1024
> + /share/ia32e_ubuntu12.10.img -monitor stdio
> +
> +There is no additional application is running on the guest when doing
> +the test.
> +
> +
> +Speed limit: 32MB/s
> +---------------------------------------------------------------
> +                    | original  | compress thread: 8
> +                    |   way     | decompress thread: 2
> +                    |           | compression level: 1
> +---------------------------------------------------------------
> +total time(msec):   |  26561    |  7920
> +---------------------------------------------------------------
> +transferred ram(kB):|  877054   | 260641
> +---------------------------------------------------------------
> +throughput(mbps):   |  270.53   | 269.68
> +---------------------------------------------------------------
> +total ram(kB):      |  1057604  | 1057604
> +---------------------------------------------------------------
> +
> +
> +Speed limit: No
> +---------------------------------------------------------------
> +                    | original  | compress thread: 15
> +                    |   way     | decompress thread: 4
> +                    |           | compression level: 1
> +---------------------------------------------------------------
> +total time(msec):   |  7611     |  2888
> +---------------------------------------------------------------
> +transferred ram(kB):|  876761   | 262301
> +---------------------------------------------------------------
> +throughput(mbps):   |  943.78   | 744.27
> +---------------------------------------------------------------
> +total ram(kB):      |  1057604  | 1057604
> +---------------------------------------------------------------
> +
> +Usage
> +=====
> +1. Verify both the source and destination QEMU are able
> +to support the multiple thread compression migration:
> +    {qemu} info_migrate_capablilites
> +    {qemu} ... compress: off ...
> +
> +2. Activate compression on the souce:
> +    {qemu} migrate_set_capability compress on
> +
> +3. Set the compression thread count on source:
> +    {qemu} migrate_set_paramter compress_threads 12
> +
> +4. Set the compression level on the source:
> +    {qemu} migrate_set_parameter compress_level 1
> +
> +5. Set the decompression thread count on destination:
> +    {qemu} migrate_set_parameter decompress_threads 3
> +
> +6. Start outgoing migration:
> +    {qemu} migrate -d tcp:destination.host:4444
> +    {qemu} info migrate
> +    Capabilities: ... compress: on
> +    ...
> +
> +The following is the default setting:
> +    compress: off
> +    compress_threads: 8
> +    decompress_threads: 2
> +    compress_level: 1 (which means best speed)
> +
> +So, only the first two steps are required to use the multiple
> +thread compression in migration. You can do more if the default
> +setting is not appropriate.
> +
> +TODO
> +====
> +Some faster (de)compression method such as lz4 and quicklz can help
> +to reduce the CPU consumption when doing (de)compression. Less
> +(de)compression threads are needed when doing the migration.
> -- 
> 1.8.3.1
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

  reply	other threads:[~2015-01-23 13:17 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-12  1:28 [Qemu-devel] [PATCH v3 0/13] migration: Add a new feature to do live migration Liang Li
2014-12-12  1:28 ` [Qemu-devel] [v3 01/13] docs: Add a doc about multiple thread compression Liang Li
2015-01-23 13:17   ` Dr. David Alan Gilbert [this message]
2015-01-23 15:24   ` Eric Blake
2014-12-12  1:28 ` [Qemu-devel] [v3 02/13] migration: Add the framework of multi-thread compression Liang Li
2015-01-23 13:23   ` Dr. David Alan Gilbert
2015-01-23 16:09   ` Eric Blake
2014-12-12  1:28 ` [Qemu-devel] [v3 03/13] migration: Add the framework of muti-thread decompression Liang Li
2015-01-23 13:26   ` Dr. David Alan Gilbert
2015-01-23 16:22   ` Eric Blake
2014-12-12  1:28 ` [Qemu-devel] [v3 04/13] qemu-file: Add tow function will be used in migration Liang Li
2015-01-23 13:31   ` Dr. David Alan Gilbert
2015-01-24 13:42     ` Li, Liang Z
2014-12-12  1:28 ` [Qemu-devel] [v3 05/13] arch_init: alloc and free data struct in multi-thread compression Liang Li
2015-01-23 13:35   ` Dr. David Alan Gilbert
2015-01-24 13:46     ` Li, Liang Z
2014-12-12  1:28 ` [Qemu-devel] [v3 06/13] arch_init: Add data struct used by decompression Liang Li
2014-12-12  1:29 ` [Qemu-devel] [v3 07/13] migraion: Rewrite the function ram_save_page() Liang Li
2015-01-23 13:38   ` Dr. David Alan Gilbert
2014-12-12  1:29 ` [Qemu-devel] [v3 08/13] migration: Add the core code of multi-thread compresion Liang Li
2015-01-23 13:39   ` Dr. David Alan Gilbert
2015-01-24 13:51     ` Li, Liang Z
2014-12-12  1:29 ` [Qemu-devel] [v3 09/13] migration: Make compression co-work with xbzrle Liang Li
2015-01-23 13:40   ` Dr. David Alan Gilbert
2014-12-12  1:29 ` [Qemu-devel] [v3 10/13] migration: Add the core code of multi-thread decompression Liang Li
2015-01-23 13:42   ` Dr. David Alan Gilbert
2014-12-12  1:29 ` [Qemu-devel] [v3 11/13] migration: Add interface to control compression Liang Li
2015-01-23 13:44   ` Dr. David Alan Gilbert
2015-01-23 15:26   ` Eric Blake
2014-12-12  1:29 ` [Qemu-devel] [v3 12/13] migration: Add command to set migration parameter Liang Li
2015-01-23 13:48   ` Dr. David Alan Gilbert
2015-01-23 15:42     ` Eric Blake
2015-01-23 15:59       ` Dr. David Alan Gilbert
2015-01-23 16:06         ` Eric Blake
2015-01-24 14:14     ` Li, Liang Z
2015-01-26  9:22       ` Dr. David Alan Gilbert
2015-01-23 15:39   ` Eric Blake
2014-12-12  1:29 ` [Qemu-devel] [v3 13/13] migration: Add command to query " Liang Li
2015-01-23 13:49   ` Dr. David Alan Gilbert
2015-01-23 15:47   ` Eric Blake
2014-12-24  5:08 ` [Qemu-devel] [PATCH v3 0/13] migration: Add a new feature to do live migration Li, Liang Z
2015-01-07  3:12 ` Li, Liang Z
2015-01-23 13:10 ` Dr. David Alan Gilbert
2015-01-24 13:25   ` Li, Liang Z

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150123131709.GB2370@work-vm \
    --to=dgilbert@redhat.com \
    --cc=armbru@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=liang.z.li@intel.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=yang.z.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.