[libvirt] [PATCH v3 3/7] qemu monitor: add multithread compress parameters accessors
Jiri Denemark
jdenemar at redhat.com
Fri Feb 5 15:24:26 UTC 2016
On Fri, Feb 05, 2016 at 18:01:30 +0300, Nikolay Shirokovskiy wrote:
>
>
> On 04.02.2016 21:11, Jiri Denemark wrote:
> > On Thu, Jan 28, 2016 at 10:04:29 +0300, Nikolay Shirokovskiy wrote:
> >> From: ShaoHe Feng <shaohe.feng at intel.com>
> >>
> >> Current compression does not use all range of parameter values
> >> so let's use some of them as 'unspecified' values. These
> >> values will be used to mark parameters that were not specified
> >> on migrate command line. Thus we check that qemu does not
> >> use these values when we read parameters.
> >>
> >> Signed-off-by: ShaoHe Feng <shaohe.feng at intel.com>
> >> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> >> ---
> >> src/qemu/qemu_monitor.c | 29 +++++++++++++
> >> src/qemu/qemu_monitor.h | 16 +++++++
> >> src/qemu/qemu_monitor_json.c | 87 +++++++++++++++++++++++++++++++++++++
> >> src/qemu/qemu_monitor_json.h | 5 +++
> >> src/qemu/qemu_monitor_text.c | 100 +++++++++++++++++++++++++++++++++++++++++++
> >> src/qemu/qemu_monitor_text.h | 5 +++
> >
> >>
> >>
> >> int
> >> +qemuMonitorGetMigrationCompressParametersMT(qemuMonitorPtr mon,
> >> + qemuMonitorMigrationMTParametersPtr params)
> >
> > I think a more general qemuMonitor[GS]etMigrationParameters [gs]etting
> > all parameters at once would be a bit better. After all, it all boils
> > down to query-migrate-parameters and migrate-set-parameters and having
> > separate functions for each group of parameters would mean we'd have to
> > call the QMP commands several times.
>
> AFAIK it is not so. We can't set(get) xbzrle options (only size now) and
> multithread options togather. We neet "query-migrate-cache-size" for the
> first and "query-migrate-parameters" for the second.
Yes, that's true. I didn't explicitly say so, but I was thinking about
future additions to query-migrate-perameters. It's very likely that new
parameters will be added and I think we should cover them all in one
QMP call. Rather than calling several qemuMonitorGet* functions which
would all run query-migrate-perameters command, but each of them would
be interested only in a subset of parameters.
We did similar stuff in the past with some query-block... command which
we called for every single disk again and again even though it returned
all of them at once. It's cleaner to just call it once, fill in a
structure describing the whole reply and do the filtering one layer up
to avoid calling the same command and parsing the same reply several
times.
> >> +int qemuMonitorJSONSetMigrationCompressParametersMT(qemuMonitorPtr mon,
> >> + qemuMonitorMigrationMTParametersPtr params)
> >> +{
> >> + int ret = -1;
> >> + virJSONValuePtr cmd;
> >> + virJSONValuePtr reply = NULL;
> >> +
> >> + cmd = qemuMonitorJSONMakeCommand("migrate-set-parameters",
> >> + "i:compress-level", params->level,
> >> + "u:compress-threads", params->threads,
> >> + "u:decompress-threads", params->dthreads,
> >> + NULL);
> >
> > Is passing an "undefined" value for any of these parameters allowed
> > (i.e., will QEMU use a default value) or do we always have to set all of
> > them?
>
> QEMU is good enough to take partial parameters specs. In this case the other
> just stay untouched. But I never use this command in this mode and specify
> all parameters. I do it to make sure we don't get compression parameters
> from previous failed migration attempt. See patch number 5.
Yeah, I saw that and it was the reason I asked the question :-)
> Basically instead of reverting parameters on unsuccessful migration I
> use hardcoded default values for parameters that are not specified on
> migration.
Somehow I don't like the hardcoded default values. Either we should
force users to specify all parameters or we could check current
values from QEMU, change some of them as requested by a user, migrate,
and revert the values back to their original values. Or we can just let
another migration attempt reuse the previous values (as we do with other
parameters, I believe).
Jirka
More information about the libvir-list
mailing list