All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] Introduce dirty ring live migration test for guestperf
@ 2022-03-16 13:39 huangy81
  2022-03-16 13:39 ` [PATCH v2] tests/migration: Introduce dirty-ring-size option into guestperf huangy81
  0 siblings, 1 reply; 4+ messages in thread
From: huangy81 @ 2022-03-16 13:39 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hyman Huang, Daniel P. Berrangé,
	Dr. David Alan Gilbert, Juan Quintela

From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>

v2:
- rebase on master
- fix style problems and make qemu test passes

Ping

Please review. Thanks,

Regards
Yong

v1:
- original version sent by accident, send the right patch

Dirtylimit implementation has been reviewed in the past few months, if
things go well, it will be merged in the near future, which is the first
step to implement a new live migration feature. For more details refer to: 
https://lore.kernel.org/qemu-devel/cover.1646247968.git.huangy81@chinatelecom.cn/

The second step is to implement the "dirtylimit" capability of live
migration basing on the implementation in first step, and the main
logic is almost done, refer to: 
https://github.com/newfriday/qemu/commits/migration_dirtylimit_v1

Since "dirtylimit" capability of live migration is basing on dirty
ring, so if we want compare live migration used "dirtylimit" capability 
with other capabilities such as "auto-converge" in performance, set
dirty ring size when start vm using guestperf tool is an convenient way.

So let's introduce dirty ring size for guestperf tool. 

Hyman Huang (1):
  tests/migration: Introduce dirty-ring-size option into guestperf

 tests/migration/guestperf/engine.py   | 6 +++++-
 tests/migration/guestperf/hardware.py | 8 ++++++--
 tests/migration/guestperf/shell.py    | 7 ++++++-
 3 files changed, 17 insertions(+), 4 deletions(-)

-- 
1.8.3.1



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2] tests/migration: Introduce dirty-ring-size option into guestperf
  2022-03-16 13:39 [PATCH v2] Introduce dirty ring live migration test for guestperf huangy81
@ 2022-03-16 13:39 ` huangy81
  2022-03-23 14:06   ` Hyman Huang
  2022-04-01 13:05   ` Hyman Huang
  0 siblings, 2 replies; 4+ messages in thread
From: huangy81 @ 2022-03-16 13:39 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hyman Huang, Daniel P. Berrangé,
	Dr. David Alan Gilbert, Juan Quintela

From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>

Guestperf tool does not enable diry ring feature when test
migration by default.

To support dirty ring migration performance test, introduce
dirty-ring-size option into guestperf tools, which ranges in
[1024, 65536].

To set dirty ring size with 4096 during migration test:
$ ./tests/migration/guestperf.py --dirty-ring-size 4096 xxx

Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
---
 tests/migration/guestperf/engine.py   | 6 +++++-
 tests/migration/guestperf/hardware.py | 8 ++++++--
 tests/migration/guestperf/shell.py    | 7 ++++++-
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/tests/migration/guestperf/engine.py b/tests/migration/guestperf/engine.py
index 87a6ab2..3d3f6bd 100644
--- a/tests/migration/guestperf/engine.py
+++ b/tests/migration/guestperf/engine.py
@@ -304,7 +304,6 @@ def _get_common_args(self, hardware, tunnelled=False):
             cmdline = "'" + cmdline + "'"
 
         argv = [
-            "-accel", "kvm",
             "-cpu", "host",
             "-kernel", self._kernel,
             "-initrd", self._initrd,
@@ -315,6 +314,11 @@ def _get_common_args(self, hardware, tunnelled=False):
             "-smp", str(hardware._cpus),
         ]
 
+        if hardware._dirty_ring_size:
+            argv.extend(["-accel", "kvm,dirty-ring-size=%s" % hardware._dirty_ring_size])
+        else:
+            argv.extend(["-accel", "kvm"])
+
         if self._debug:
             argv.extend(["-device", "sga"])
 
diff --git a/tests/migration/guestperf/hardware.py b/tests/migration/guestperf/hardware.py
index 3145785..f779cc0 100644
--- a/tests/migration/guestperf/hardware.py
+++ b/tests/migration/guestperf/hardware.py
@@ -23,7 +23,8 @@ def __init__(self, cpus=1, mem=1,
                  src_cpu_bind=None, src_mem_bind=None,
                  dst_cpu_bind=None, dst_mem_bind=None,
                  prealloc_pages = False,
-                 huge_pages=False, locked_pages=False):
+                 huge_pages=False, locked_pages=False,
+                 dirty_ring_size=0):
         self._cpus = cpus
         self._mem = mem # GiB
         self._src_mem_bind = src_mem_bind # List of NUMA nodes
@@ -33,6 +34,7 @@ def __init__(self, cpus=1, mem=1,
         self._prealloc_pages = prealloc_pages
         self._huge_pages = huge_pages
         self._locked_pages = locked_pages
+        self._dirty_ring_size = dirty_ring_size
 
 
     def serialize(self):
@@ -46,6 +48,7 @@ def serialize(self):
             "prealloc_pages": self._prealloc_pages,
             "huge_pages": self._huge_pages,
             "locked_pages": self._locked_pages,
+            "dirty_ring_size": self._dirty_ring_size,
         }
 
     @classmethod
@@ -59,4 +62,5 @@ def deserialize(cls, data):
             data["dst_mem_bind"],
             data["prealloc_pages"],
             data["huge_pages"],
-            data["locked_pages"])
+            data["locked_pages"],
+            data["dirty_ring_size"])
diff --git a/tests/migration/guestperf/shell.py b/tests/migration/guestperf/shell.py
index 8a809e3..f87bce6 100644
--- a/tests/migration/guestperf/shell.py
+++ b/tests/migration/guestperf/shell.py
@@ -60,6 +60,8 @@ def __init__(self):
         parser.add_argument("--prealloc-pages", dest="prealloc_pages", default=False)
         parser.add_argument("--huge-pages", dest="huge_pages", default=False)
         parser.add_argument("--locked-pages", dest="locked_pages", default=False)
+        parser.add_argument("--dirty-ring-size", dest="dirty_ring_size", default=0,
+                            type=int)
 
         self._parser = parser
 
@@ -89,7 +91,10 @@ def split_map(value):
 
                         locked_pages=args.locked_pages,
                         huge_pages=args.huge_pages,
-                        prealloc_pages=args.prealloc_pages)
+                        prealloc_pages=args.prealloc_pages,
+
+                        dirty_ring_size=args.dirty_ring_size)
+
 
 
 class Shell(BaseShell):
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] tests/migration: Introduce dirty-ring-size option into guestperf
  2022-03-16 13:39 ` [PATCH v2] tests/migration: Introduce dirty-ring-size option into guestperf huangy81
@ 2022-03-23 14:06   ` Hyman Huang
  2022-04-01 13:05   ` Hyman Huang
  1 sibling, 0 replies; 4+ messages in thread
From: Hyman Huang @ 2022-03-23 14:06 UTC (permalink / raw)
  To: qemu-devel
  Cc: Guoyi Tu, Juan Quintela, 袁明浩,
	Dr. David Alan Gilbert, wucy11, dengpc12, Daniel P. Berrangé,
	baiyw2

Ping.

Hi, what do you think of this patch.

在 2022/3/16 21:39, huangy81@chinatelecom.cn 写道:
> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
> 
> Guestperf tool does not enable diry ring feature when test
> migration by default.
> 
> To support dirty ring migration performance test, introduce
> dirty-ring-size option into guestperf tools, which ranges in
> [1024, 65536].
> 
> To set dirty ring size with 4096 during migration test:
> $ ./tests/migration/guestperf.py --dirty-ring-size 4096 xxx
> 
> Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
> ---
>   tests/migration/guestperf/engine.py   | 6 +++++-
>   tests/migration/guestperf/hardware.py | 8 ++++++--
>   tests/migration/guestperf/shell.py    | 7 ++++++-
>   3 files changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/migration/guestperf/engine.py b/tests/migration/guestperf/engine.py
> index 87a6ab2..3d3f6bd 100644
> --- a/tests/migration/guestperf/engine.py
> +++ b/tests/migration/guestperf/engine.py
> @@ -304,7 +304,6 @@ def _get_common_args(self, hardware, tunnelled=False):
>               cmdline = "'" + cmdline + "'"
>   
>           argv = [
> -            "-accel", "kvm",
>               "-cpu", "host",
>               "-kernel", self._kernel,
>               "-initrd", self._initrd,
> @@ -315,6 +314,11 @@ def _get_common_args(self, hardware, tunnelled=False):
>               "-smp", str(hardware._cpus),
>           ]
>   
> +        if hardware._dirty_ring_size:
> +            argv.extend(["-accel", "kvm,dirty-ring-size=%s" % hardware._dirty_ring_size])
> +        else:
> +            argv.extend(["-accel", "kvm"])
> +
>           if self._debug:
>               argv.extend(["-device", "sga"])
>   
> diff --git a/tests/migration/guestperf/hardware.py b/tests/migration/guestperf/hardware.py
> index 3145785..f779cc0 100644
> --- a/tests/migration/guestperf/hardware.py
> +++ b/tests/migration/guestperf/hardware.py
> @@ -23,7 +23,8 @@ def __init__(self, cpus=1, mem=1,
>                    src_cpu_bind=None, src_mem_bind=None,
>                    dst_cpu_bind=None, dst_mem_bind=None,
>                    prealloc_pages = False,
> -                 huge_pages=False, locked_pages=False):
> +                 huge_pages=False, locked_pages=False,
> +                 dirty_ring_size=0):
>           self._cpus = cpus
>           self._mem = mem # GiB
>           self._src_mem_bind = src_mem_bind # List of NUMA nodes
> @@ -33,6 +34,7 @@ def __init__(self, cpus=1, mem=1,
>           self._prealloc_pages = prealloc_pages
>           self._huge_pages = huge_pages
>           self._locked_pages = locked_pages
> +        self._dirty_ring_size = dirty_ring_size
>   
>   
>       def serialize(self):
> @@ -46,6 +48,7 @@ def serialize(self):
>               "prealloc_pages": self._prealloc_pages,
>               "huge_pages": self._huge_pages,
>               "locked_pages": self._locked_pages,
> +            "dirty_ring_size": self._dirty_ring_size,
>           }
>   
>       @classmethod
> @@ -59,4 +62,5 @@ def deserialize(cls, data):
>               data["dst_mem_bind"],
>               data["prealloc_pages"],
>               data["huge_pages"],
> -            data["locked_pages"])
> +            data["locked_pages"],
> +            data["dirty_ring_size"])
> diff --git a/tests/migration/guestperf/shell.py b/tests/migration/guestperf/shell.py
> index 8a809e3..f87bce6 100644
> --- a/tests/migration/guestperf/shell.py
> +++ b/tests/migration/guestperf/shell.py
> @@ -60,6 +60,8 @@ def __init__(self):
>           parser.add_argument("--prealloc-pages", dest="prealloc_pages", default=False)
>           parser.add_argument("--huge-pages", dest="huge_pages", default=False)
>           parser.add_argument("--locked-pages", dest="locked_pages", default=False)
> +        parser.add_argument("--dirty-ring-size", dest="dirty_ring_size", default=0,
> +                            type=int)
>   
>           self._parser = parser
>   
> @@ -89,7 +91,10 @@ def split_map(value):
>   
>                           locked_pages=args.locked_pages,
>                           huge_pages=args.huge_pages,
> -                        prealloc_pages=args.prealloc_pages)
> +                        prealloc_pages=args.prealloc_pages,
> +
> +                        dirty_ring_size=args.dirty_ring_size)
> +
>   
>   
>   class Shell(BaseShell):

-- 
Best regard

Hyman Huang(黄勇)


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] tests/migration: Introduce dirty-ring-size option into guestperf
  2022-03-16 13:39 ` [PATCH v2] tests/migration: Introduce dirty-ring-size option into guestperf huangy81
  2022-03-23 14:06   ` Hyman Huang
@ 2022-04-01 13:05   ` Hyman Huang
  1 sibling, 0 replies; 4+ messages in thread
From: Hyman Huang @ 2022-04-01 13:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Daniel P. Berrangé

Hi, Daniel.
     Sorry to bother you, but i have a request of you.
     I'm posting a simple patch of Qemu guestperf test to support dirty 
ring migration test. I'm very pleased if you could spare some time to 
review it and even give some advices.

Yong

在 2022/3/16 21:39, huangy81@chinatelecom.cn 写道:
> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
> 
> Guestperf tool does not enable diry ring feature when test
> migration by default.
> 
> To support dirty ring migration performance test, introduce
> dirty-ring-size option into guestperf tools, which ranges in
> [1024, 65536].
> 
> To set dirty ring size with 4096 during migration test:
> $ ./tests/migration/guestperf.py --dirty-ring-size 4096 xxx
> 
> Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
> ---
>   tests/migration/guestperf/engine.py   | 6 +++++-
>   tests/migration/guestperf/hardware.py | 8 ++++++--
>   tests/migration/guestperf/shell.py    | 7 ++++++-
>   3 files changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/migration/guestperf/engine.py b/tests/migration/guestperf/engine.py
> index 87a6ab2..3d3f6bd 100644
> --- a/tests/migration/guestperf/engine.py
> +++ b/tests/migration/guestperf/engine.py
> @@ -304,7 +304,6 @@ def _get_common_args(self, hardware, tunnelled=False):
>               cmdline = "'" + cmdline + "'"
>   
>           argv = [
> -            "-accel", "kvm",
>               "-cpu", "host",
>               "-kernel", self._kernel,
>               "-initrd", self._initrd,
> @@ -315,6 +314,11 @@ def _get_common_args(self, hardware, tunnelled=False):
>               "-smp", str(hardware._cpus),
>           ]
>   
> +        if hardware._dirty_ring_size:
> +            argv.extend(["-accel", "kvm,dirty-ring-size=%s" % hardware._dirty_ring_size])
> +        else:
> +            argv.extend(["-accel", "kvm"])
> +
>           if self._debug:
>               argv.extend(["-device", "sga"])
>   
> diff --git a/tests/migration/guestperf/hardware.py b/tests/migration/guestperf/hardware.py
> index 3145785..f779cc0 100644
> --- a/tests/migration/guestperf/hardware.py
> +++ b/tests/migration/guestperf/hardware.py
> @@ -23,7 +23,8 @@ def __init__(self, cpus=1, mem=1,
>                    src_cpu_bind=None, src_mem_bind=None,
>                    dst_cpu_bind=None, dst_mem_bind=None,
>                    prealloc_pages = False,
> -                 huge_pages=False, locked_pages=False):
> +                 huge_pages=False, locked_pages=False,
> +                 dirty_ring_size=0):
>           self._cpus = cpus
>           self._mem = mem # GiB
>           self._src_mem_bind = src_mem_bind # List of NUMA nodes
> @@ -33,6 +34,7 @@ def __init__(self, cpus=1, mem=1,
>           self._prealloc_pages = prealloc_pages
>           self._huge_pages = huge_pages
>           self._locked_pages = locked_pages
> +        self._dirty_ring_size = dirty_ring_size
>   
>   
>       def serialize(self):
> @@ -46,6 +48,7 @@ def serialize(self):
>               "prealloc_pages": self._prealloc_pages,
>               "huge_pages": self._huge_pages,
>               "locked_pages": self._locked_pages,
> +            "dirty_ring_size": self._dirty_ring_size,
>           }
>   
>       @classmethod
> @@ -59,4 +62,5 @@ def deserialize(cls, data):
>               data["dst_mem_bind"],
>               data["prealloc_pages"],
>               data["huge_pages"],
> -            data["locked_pages"])
> +            data["locked_pages"],
> +            data["dirty_ring_size"])
> diff --git a/tests/migration/guestperf/shell.py b/tests/migration/guestperf/shell.py
> index 8a809e3..f87bce6 100644
> --- a/tests/migration/guestperf/shell.py
> +++ b/tests/migration/guestperf/shell.py
> @@ -60,6 +60,8 @@ def __init__(self):
>           parser.add_argument("--prealloc-pages", dest="prealloc_pages", default=False)
>           parser.add_argument("--huge-pages", dest="huge_pages", default=False)
>           parser.add_argument("--locked-pages", dest="locked_pages", default=False)
> +        parser.add_argument("--dirty-ring-size", dest="dirty_ring_size", default=0,
> +                            type=int)
>   
>           self._parser = parser
>   
> @@ -89,7 +91,10 @@ def split_map(value):
>   
>                           locked_pages=args.locked_pages,
>                           huge_pages=args.huge_pages,
> -                        prealloc_pages=args.prealloc_pages)
> +                        prealloc_pages=args.prealloc_pages,
> +
> +                        dirty_ring_size=args.dirty_ring_size)
> +
>   
>   
>   class Shell(BaseShell):

-- 
Best regard

Hyman Huang(黄勇)


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-04-01 13:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-16 13:39 [PATCH v2] Introduce dirty ring live migration test for guestperf huangy81
2022-03-16 13:39 ` [PATCH v2] tests/migration: Introduce dirty-ring-size option into guestperf huangy81
2022-03-23 14:06   ` Hyman Huang
2022-04-01 13:05   ` Hyman Huang

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.