guestperf: Introduce multifd compression option
Guestperf tool does not cover the multifd compression option currently, it is worth supporting so that developers can analysis the migration performance with different compression algorithms. Multifd support 4 compression algorithms currently: zlib, zstd, qpl, uadk To request that multifd with the specified compression algorithm such as zlib: $ ./tests/migration-stress/guestperf.py \ --multifd --multifd-channels 4 --multifd-compression zlib \ --output output.json To run the entire standardized set of multifd compression comparisons, with unix migration: $ ./tests/migration-stress/guestperf-batch.py \ --dst-host localhost --transport unix \ --filter compr-multifd-compression* --output outputdir Signed-off-by: Hyman Huang <yong.huang@smartx.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <c0e3313d81e8130f8119ef4f242e4625886278cf.1739530098.git.yong.huang@smartx.com> Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
parent
42f5975cd8
commit
45f34156e4
@ -158,4 +158,17 @@ COMPARISONS = [
|
||||
Scenario("compr-dirty-limit-50MB",
|
||||
dirty_limit=True, vcpu_dirty_limit=50),
|
||||
]),
|
||||
|
||||
# Looking at effect of multifd with
|
||||
# different compression algorithms
|
||||
Comparison("compr-multifd-compression", scenarios = [
|
||||
Scenario("compr-multifd-compression-zlib",
|
||||
multifd=True, multifd_channels=2, multifd_compression="zlib"),
|
||||
Scenario("compr-multifd-compression-zstd",
|
||||
multifd=True, multifd_channels=2, multifd_compression="zstd"),
|
||||
Scenario("compr-multifd-compression-qpl",
|
||||
multifd=True, multifd_channels=2, multifd_compression="qpl"),
|
||||
Scenario("compr-multifd-compression-uadk",
|
||||
multifd=True, multifd_channels=2, multifd_compression="uadk"),
|
||||
]),
|
||||
]
|
||||
|
@ -31,6 +31,8 @@ sys.path.append(os.path.join(os.path.dirname(__file__),
|
||||
'..', '..', '..', 'python'))
|
||||
from qemu.machine import QEMUMachine
|
||||
|
||||
# multifd supported compression algorithms
|
||||
MULTIFD_CMP_ALGS = ("zlib", "zstd", "qpl", "uadk")
|
||||
|
||||
class Engine(object):
|
||||
|
||||
@ -191,6 +193,12 @@ class Engine(object):
|
||||
scenario._compression_xbzrle_cache))
|
||||
|
||||
if scenario._multifd:
|
||||
if (scenario._multifd_compression and
|
||||
(scenario._multifd_compression not in MULTIFD_CMP_ALGS)):
|
||||
raise Exception("unsupported multifd compression "
|
||||
"algorithm: %s" %
|
||||
scenario._multifd_compression)
|
||||
|
||||
resp = src.cmd("migrate-set-capabilities",
|
||||
capabilities = [
|
||||
{ "capability": "multifd",
|
||||
@ -206,6 +214,12 @@ class Engine(object):
|
||||
resp = dst.cmd("migrate-set-parameters",
|
||||
multifd_channels=scenario._multifd_channels)
|
||||
|
||||
if scenario._multifd_compression:
|
||||
resp = src.cmd("migrate-set-parameters",
|
||||
multifd_compression=scenario._multifd_compression)
|
||||
resp = dst.cmd("migrate-set-parameters",
|
||||
multifd_compression=scenario._multifd_compression)
|
||||
|
||||
if scenario._dirty_limit:
|
||||
if not hardware._dirty_ring_size:
|
||||
raise Exception("dirty ring size must be configured when "
|
||||
|
@ -30,7 +30,7 @@ class Scenario(object):
|
||||
auto_converge=False, auto_converge_step=10,
|
||||
compression_mt=False, compression_mt_threads=1,
|
||||
compression_xbzrle=False, compression_xbzrle_cache=10,
|
||||
multifd=False, multifd_channels=2,
|
||||
multifd=False, multifd_channels=2, multifd_compression="",
|
||||
dirty_limit=False, x_vcpu_dirty_limit_period=500,
|
||||
vcpu_dirty_limit=1):
|
||||
|
||||
@ -61,6 +61,7 @@ class Scenario(object):
|
||||
|
||||
self._multifd = multifd
|
||||
self._multifd_channels = multifd_channels
|
||||
self._multifd_compression = multifd_compression
|
||||
|
||||
self._dirty_limit = dirty_limit
|
||||
self._x_vcpu_dirty_limit_period = x_vcpu_dirty_limit_period
|
||||
@ -85,6 +86,7 @@ class Scenario(object):
|
||||
"compression_xbzrle_cache": self._compression_xbzrle_cache,
|
||||
"multifd": self._multifd,
|
||||
"multifd_channels": self._multifd_channels,
|
||||
"multifd_compression": self._multifd_compression,
|
||||
"dirty_limit": self._dirty_limit,
|
||||
"x_vcpu_dirty_limit_period": self._x_vcpu_dirty_limit_period,
|
||||
"vcpu_dirty_limit": self._vcpu_dirty_limit,
|
||||
@ -109,4 +111,5 @@ class Scenario(object):
|
||||
data["compression_xbzrle"],
|
||||
data["compression_xbzrle_cache"],
|
||||
data["multifd"],
|
||||
data["multifd_channels"])
|
||||
data["multifd_channels"],
|
||||
data["multifd_compression"])
|
||||
|
@ -131,6 +131,8 @@ class Shell(BaseShell):
|
||||
action="store_true")
|
||||
parser.add_argument("--multifd-channels", dest="multifd_channels",
|
||||
default=2, type=int)
|
||||
parser.add_argument("--multifd-compression", dest="multifd_compression",
|
||||
default="")
|
||||
|
||||
parser.add_argument("--dirty-limit", dest="dirty_limit", default=False,
|
||||
action="store_true")
|
||||
@ -167,6 +169,7 @@ class Shell(BaseShell):
|
||||
|
||||
multifd=args.multifd,
|
||||
multifd_channels=args.multifd_channels,
|
||||
multifd_compression=args.multifd_compression,
|
||||
|
||||
dirty_limit=args.dirty_limit,
|
||||
x_vcpu_dirty_limit_period=\
|
||||
|
Loading…
x
Reference in New Issue
Block a user