Message ID | cfeeb04d17ad932c42a9871294058b77429ad1b7.1616171924.git.huangy81@chinatelecom.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v1] tests/migration: introduce multifd into guestperf | expand |
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) >
在 2021/3/24 9:18, Hyman Huang 写道: > 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) >> > Ping - Hi, What would you think about this patch ? :)
On Sat, Mar 20, 2021 at 01:04:56AM +0800, huangy81@chinatelecom.cn wrote: > 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(-) Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> I'll queue it, sorry for the delay in responding to this. Regards, Daniel
* Daniel P. Berrangé (berrange@redhat.com) wrote: > On Sat, Mar 20, 2021 at 01:04:56AM +0800, huangy81@chinatelecom.cn wrote: > > 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(-) > > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> > > I'll queue it, sorry for the delay in responding to this. I've just picked this up in my migration queue > > > Regards, > Daniel > -- > |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| > |: https://libvirt.org -o- https://fstop138.berrange.com :| > |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| > >
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)