qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v1] tests/migration: introduce multifd into guestperf


From: Hyman Huang
Subject: Re: [PATCH v1] tests/migration: introduce multifd into guestperf
Date: Wed, 24 Mar 2021 09:18:34 +0800
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1

cc thuth@redhat.com and berrange@redhat.com

Please review, thanks

在 2021/3/20 1:04, huangy81@chinatelecom.cn 写道:
From: Hyman <huangy81@chinatelecom.cn>

Guestperf tool does not cover the multifd-enabled migration
currently, it is worth supporting so that developers can
analysis the migration performance with all kinds of
migration.

To request that multifd is enabled, with 4 channels:
$ ./tests/migration/guestperf.py \
     --multifd --multifd-channels 4 --output output.json

To run the entire standardized set of multifd-enabled
comparisons, with unix migration:
$ ./tests/migration/guestperf-batch.py \
     --dst-host localhost --transport unix \
     --filter compr-multifd* --output outputdir

Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
---
  tests/migration/guestperf/comparison.py | 14 ++++++++++++++
  tests/migration/guestperf/engine.py     | 16 ++++++++++++++++
  tests/migration/guestperf/scenario.py   | 12 ++++++++++--
  tests/migration/guestperf/shell.py      | 10 +++++++++-
  4 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/tests/migration/guestperf/comparison.py 
b/tests/migration/guestperf/comparison.py
index ba2edbe..c03b3f6 100644
--- a/tests/migration/guestperf/comparison.py
+++ b/tests/migration/guestperf/comparison.py
@@ -121,4 +121,18 @@ def __init__(self, name, scenarios):
          Scenario("compr-xbzrle-cache-50",
                   compression_xbzrle=True, compression_xbzrle_cache=50),
      ]),
+
+
+    # Looking at effect of multifd with
+    # varying numbers of channels
+    Comparison("compr-multifd", scenarios = [
+        Scenario("compr-multifd-channels-4",
+                 multifd=True, multifd_channels=2),
+        Scenario("compr-multifd-channels-8",
+                 multifd=True, multifd_channels=8),
+        Scenario("compr-multifd-channels-32",
+                 multifd=True, multifd_channels=32),
+        Scenario("compr-multifd-channels-64",
+                 multifd=True, multifd_channels=64),
+    ]),
  ]
diff --git a/tests/migration/guestperf/engine.py 
b/tests/migration/guestperf/engine.py
index e399447..fab3957 100644
--- a/tests/migration/guestperf/engine.py
+++ b/tests/migration/guestperf/engine.py
@@ -188,6 +188,22 @@ def _migrate(self, hardware, scenario, src, dst, 
connect_uri):
                                     1024 * 1024 * 1024 / 100 *
                                     scenario._compression_xbzrle_cache))
+ if scenario._multifd:
+            resp = src.command("migrate-set-capabilities",
+                               capabilities = [
+                                   { "capability": "multifd",
+                                     "state": True }
+                               ])
+            resp = src.command("migrate-set-parameters",
+                               multifd_channels=scenario._multifd_channels)
+            resp = dst.command("migrate-set-capabilities",
+                               capabilities = [
+                                   { "capability": "multifd",
+                                     "state": True }
+                               ])
+            resp = dst.command("migrate-set-parameters",
+                               multifd_channels=scenario._multifd_channels)
+
          resp = src.command("migrate", uri=connect_uri)
post_copy = False
diff --git a/tests/migration/guestperf/scenario.py 
b/tests/migration/guestperf/scenario.py
index 28ef36c..de70d9b 100644
--- a/tests/migration/guestperf/scenario.py
+++ b/tests/migration/guestperf/scenario.py
@@ -29,7 +29,8 @@ def __init__(self, name,
                   post_copy=False, post_copy_iters=5,
                   auto_converge=False, auto_converge_step=10,
                   compression_mt=False, compression_mt_threads=1,
-                 compression_xbzrle=False, compression_xbzrle_cache=10):
+                 compression_xbzrle=False, compression_xbzrle_cache=10,
+                 multifd=False, multifd_channels=2):
self._name = name @@ -56,6 +57,9 @@ def __init__(self, name,
          self._compression_xbzrle = compression_xbzrle
          self._compression_xbzrle_cache = compression_xbzrle_cache # 
percentage of guest RAM
+ self._multifd = multifd
+        self._multifd_channels = multifd_channels
+
      def serialize(self):
          return {
              "name": self._name,
@@ -73,6 +77,8 @@ def serialize(self):
              "compression_mt_threads": self._compression_mt_threads,
              "compression_xbzrle": self._compression_xbzrle,
              "compression_xbzrle_cache": self._compression_xbzrle_cache,
+            "multifd": self._multifd,
+            "multifd_channels": self._multifd_channels,
          }
@classmethod
@@ -92,4 +98,6 @@ def deserialize(cls, data):
              data["compression_mt"],
              data["compression_mt_threads"],
              data["compression_xbzrle"],
-            data["compression_xbzrle_cache"])
+            data["compression_xbzrle_cache"],
+            data["multifd"],
+            data["multifd_channels"])
diff --git a/tests/migration/guestperf/shell.py 
b/tests/migration/guestperf/shell.py
index f838888..8a809e3 100644
--- a/tests/migration/guestperf/shell.py
+++ b/tests/migration/guestperf/shell.py
@@ -122,6 +122,11 @@ def __init__(self):
          parser.add_argument("--compression-xbzrle", dest="compression_xbzrle", 
default=False, action="store_true")
          parser.add_argument("--compression-xbzrle-cache", 
dest="compression_xbzrle_cache", default=10, type=int)
+ parser.add_argument("--multifd", dest="multifd", default=False,
+                            action="store_true")
+        parser.add_argument("--multifd-channels", dest="multifd_channels",
+                            default=2, type=int)
+
      def get_scenario(self, args):
          return Scenario(name="perfreport",
                          downtime=args.downtime,
@@ -142,7 +147,10 @@ def get_scenario(self, args):
                          compression_mt_threads=args.compression_mt_threads,
compression_xbzrle=args.compression_xbzrle,
-                        compression_xbzrle_cache=args.compression_xbzrle_cache)
+                        compression_xbzrle_cache=args.compression_xbzrle_cache,
+
+                        multifd=args.multifd,
+                        multifd_channels=args.multifd_channels)
def run(self, argv):
          args = self._parser.parse_args(argv)


--
Best regard

Hyman Huang(黄勇)



reply via email to

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