[PULL 17/17] tests/migration: introduce multifd into guestperf

2021-05-13 Thread Dr. David Alan Gilbert (git)
From: Hyman 

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(黄勇) 
Message-Id: 

Reviewed-by: Daniel P. Berrangé 
Signed-off-by: Dr. David Alan Gilbert 
---
 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 ba2edbe546..c03b3f6d7e 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 6b49aed579..208e095794 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 28ef36c26d..de70d9b2f5 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 

[PULL 17/17] tests/migration: introduce multifd into guestperf

2021-05-11 Thread Dr. David Alan Gilbert (git)
From: Hyman 

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(黄勇) 
Message-Id: 

Reviewed-by: Daniel P. Berrangé 
Signed-off-by: Dr. David Alan Gilbert 
---
 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 ba2edbe546..c03b3f6d7e 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 6b49aed579..208e095794 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 28ef36c26d..de70d9b2f5 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