tests/migration: introduce multifd into guestperf
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> Message-Id: <cfeeb04d17ad932c42a9871294058b77429ad1b7.1616171924.git.huangy81@chinatelecom.cn> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
ff7b9b56cd
commit
1c3baa1ac4
@ -121,4 +121,18 @@ COMPARISONS = [
|
||||
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),
|
||||
]),
|
||||
]
|
||||
|
@ -188,6 +188,22 @@ class Engine(object):
|
||||
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
|
||||
|
@ -29,7 +29,8 @@ class Scenario(object):
|
||||
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 @@ class Scenario(object):
|
||||
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 @@ class Scenario(object):
|
||||
"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 @@ class Scenario(object):
|
||||
data["compression_mt"],
|
||||
data["compression_mt_threads"],
|
||||
data["compression_xbzrle"],
|
||||
data["compression_xbzrle_cache"])
|
||||
data["compression_xbzrle_cache"],
|
||||
data["multifd"],
|
||||
data["multifd_channels"])
|
||||
|
@ -122,6 +122,11 @@ class Shell(BaseShell):
|
||||
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 @@ class Shell(BaseShell):
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user