mbox series

[00/14] migration/ram.c: Refactor compress code

Message ID cover.1680457764.git.lukasstraub2@web.de (mailing list archive)
Headers show
Series migration/ram.c: Refactor compress code | expand

Message

Lukas Straub April 2, 2023, 5:55 p.m. UTC
This series refactors the ram compress code.

It first removes ram.c dependencies from the core compress code, then
moves it out to its own file. Finally, on the migration destination side
the initialisation and cleanup of compress threads is moved out of ram.c
to migration.c. This allows using COLO with compress enabled.

This series is based on the following series:
https://lore.kernel.org/qemu-devel/af76761aa6978071c5b8e9b872b697db465a5520.1680457631.git.lukasstraub2@web.de/T/#t

Lukas Straub (14):
  ram.c: Let the compress threads return a CompressResult enum
  ram.c: Dont change param->block in the compress thread
  ram.c: Reset result after sending queued data
  ram.c: Do not call save_page_header() from compress threads
  ram.c: Call update_compress_thread_counts from
    compress_send_queued_data
  ram.c: Remove last ram.c dependency from the core compress code
  ram.c: Introduce whitespace (squash with next patch)
  ram.c: Move core compression code into its own file
  ram.c: Remove whitespace (squash with previous patch)
  ram.c: Move core decompression code into its own file
  ram compress: Assert that the file buffer matches the result
  ram.c: Remove unused include after moving out code
  ram-compress.c: Make target independent
  migration: Initialize and cleanup decompression in migration.c

 migration/meson.build    |   5 +-
 migration/migration.c    |   9 +
 migration/qemu-file.c    |  11 +
 migration/qemu-file.h    |   1 +
 migration/ram-compress.c | 483 ++++++++++++++++++++++++++++++++++++++
 migration/ram-compress.h |  70 ++++++
 migration/ram.c          | 490 +++------------------------------------
 7 files changed, 615 insertions(+), 454 deletions(-)
 create mode 100644 migration/ram-compress.c
 create mode 100644 migration/ram-compress.h

--
2.30.2

Comments

Zhang Chen April 3, 2023, 2:16 a.m. UTC | #1
> -----Original Message-----
> From: qemu-devel-bounces+chen.zhang=intel.com@nongnu.org <qemu-
> devel-bounces+chen.zhang=intel.com@nongnu.org> On Behalf Of Lukas
> Straub
> Sent: Monday, April 3, 2023 1:56 AM
> To: qemu-devel <qemu-devel@nongnu.org>
> Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>; Juan Quintela
> <quintela@redhat.com>; Peter Xu <peterx@redhat.com>
> Subject: [PATCH 00/14] migration/ram.c: Refactor compress code
> 
> This series refactors the ram compress code.
> 
> It first removes ram.c dependencies from the core compress code, then
> moves it out to its own file. Finally, on the migration destination side the
> initialisation and cleanup of compress threads is moved out of ram.c to
> migration.c. This allows using COLO with compress enabled.
> 

Nice to see this optimization~
Support the ram compress feature will reduce COLO checkpoint network bandwidth requirements
And may improve COLO protected VM's performance.

Thanks
Chen

> This series is based on the following series:
> https://lore.kernel.org/qemu-
> devel/af76761aa6978071c5b8e9b872b697db465a5520.1680457631.git.lukasstr
> aub2@web.de/T/#t
> 
> Lukas Straub (14):
>   ram.c: Let the compress threads return a CompressResult enum
>   ram.c: Dont change param->block in the compress thread
>   ram.c: Reset result after sending queued data
>   ram.c: Do not call save_page_header() from compress threads
>   ram.c: Call update_compress_thread_counts from
>     compress_send_queued_data
>   ram.c: Remove last ram.c dependency from the core compress code
>   ram.c: Introduce whitespace (squash with next patch)
>   ram.c: Move core compression code into its own file
>   ram.c: Remove whitespace (squash with previous patch)
>   ram.c: Move core decompression code into its own file
>   ram compress: Assert that the file buffer matches the result
>   ram.c: Remove unused include after moving out code
>   ram-compress.c: Make target independent
>   migration: Initialize and cleanup decompression in migration.c
> 
>  migration/meson.build    |   5 +-
>  migration/migration.c    |   9 +
>  migration/qemu-file.c    |  11 +
>  migration/qemu-file.h    |   1 +
>  migration/ram-compress.c | 483
> ++++++++++++++++++++++++++++++++++++++
>  migration/ram-compress.h |  70 ++++++
>  migration/ram.c          | 490 +++------------------------------------
>  7 files changed, 615 insertions(+), 454 deletions(-)  create mode 100644
> migration/ram-compress.c  create mode 100644 migration/ram-compress.h
> 
> --
> 2.30.2
Lukas Straub April 5, 2023, 2:44 p.m. UTC | #2
On Sun, 2 Apr 2023 17:55:59 +0000
Lukas Straub <lukasstraub2@web.de> wrote:

> This series refactors the ram compress code.
> 
> It first removes ram.c dependencies from the core compress code, then
> moves it out to its own file. Finally, on the migration destination side
> the initialisation and cleanup of compress threads is moved out of ram.c
> to migration.c. This allows using COLO with compress enabled.
> 
> This series is based on the following series:
> https://lore.kernel.org/qemu-devel/af76761aa6978071c5b8e9b872b697db465a5520.1680457631.git.lukasstraub2@web.de/T/#t
> 

Hmm, I'm wondering if I should add postcopy+compress tests in this
series? Because if we start this, the test matrix really will explode.

Regards,
Lukas Straub

--
Peter Xu April 5, 2023, 2:54 p.m. UTC | #3
On Wed, Apr 05, 2023 at 02:44:13PM +0000, Lukas Straub wrote:
> On Sun, 2 Apr 2023 17:55:59 +0000
> Lukas Straub <lukasstraub2@web.de> wrote:
> 
> > This series refactors the ram compress code.
> > 
> > It first removes ram.c dependencies from the core compress code, then
> > moves it out to its own file. Finally, on the migration destination side
> > the initialisation and cleanup of compress threads is moved out of ram.c
> > to migration.c. This allows using COLO with compress enabled.
> > 
> > This series is based on the following series:
> > https://lore.kernel.org/qemu-devel/af76761aa6978071c5b8e9b872b697db465a5520.1680457631.git.lukasstraub2@web.de/T/#t
> > 
> 
> Hmm, I'm wondering if I should add postcopy+compress tests in this
> series? Because if we start this, the test matrix really will explode.

Do you perhaps mean when compress added to the existing (and already large)
postcopy test matrix?

I assume we can still add one for vanilla postcopy+compress, so it still
covers the major parts.  Or, add the compress test with the postcopy test
with most features enabled? The most comprehensive one in qtest should be:

/x86_64/migration/postcopy/preempt/recovery/tls/psk

That covers postcopy+preempt+tls, meanwhile there'll be an emulation of
network failure too during postcopy and test recovering from it.