[Libvir] The problem of the definition of tuning informations
veillard at redhat.com
Thu Nov 8 16:02:51 UTC 2007
I promised that mail for the beginning of the week but I still have
a very hard time to try to formulate a good plan of action, I'm still
stuck in a dilemna, see below.
What is it?
I think tuning informations are that set of parameters associated
to a domain or a host, which are not stricly needed to get the
domain(s) working but improve their runtime behaviour.
To me this includes:
- scheduling parameters the scope may be host/hypervisor/domain
- vcpu affinity i.e. to which set of physical CPU each of the
vcpu may be bound
- and possibly others ...
People would like to associate those to the XML domain informations,
the goal being to be able to restore those informations when a domain
I have been objecting it so far because, I think those informations
don't have the same lifetime and scope as the other domain informations
saved in the XML. Since they are not needed to start the domain, and
that once the domain is started the existing domain API can be used
to change those informations, it is better to keep them separate.
However I got objections from David Lutterkort , Jim Fehlig ,
and John Levon  plus of course the initial request for it from
Tatsuro Enokura (and the Fujistu people in general) 
The problem to me comes from 2 things:
1/ storing tuning informations in domains descriptions is not sufficient
2/ if we store them there we also need to always save them when exporting
the XML domain file
2/ is fairly important to avoid a lot of problems as we have experienced
before for example with console informations. If the input for virsh create
gets different from the output of dumpxml, a lot of rather annoying things
happen in practice, it certainly generate confusion. So we really need
to output those tuning data if we put them in.
Also I strongly believe in 1/, i.e. tuning informations are cross domain
and they are vey likely to change fast as soon as the management applications
will get deployed, but even in relatively small deployment the tuning is
rather a per host informations, which may depend on the current workload
of the machine. I don't believe in tuning being loaded at create time
and never changing later. Even in my own very basic usage that doesn't match
my use which lead me to load and stop domain on demand for short period
We need better tools, even for simple use case to be able to save
an existing tuning for a domain or a full machine, and reload it
when needed. This is IMHO better done on top of the existing API
which already have the entry points to implement them. My idea is
to provide tuning commands in virsh . If you implement tuning both
at creation time and in the tool, this mean you either make them
different in which case you have no coherency between what you say
when you create a domain or save its config and what you do at the
virsh level. If you don't make it different (for example trying to
use the same kind of XML syntax), then you need code for doing this
both in the tool and in the library itself, or you export as a
new API the tuning load and save. Exporting as a parallel API what
we have already for scheduling and VCPU affinity makes the API
more complex, and less coherent.
I don't want to force the decision one way or another, it is
probable I missed something, but I don't think adding tuning informations
to the domain configuration file to be really that convenient,
I could be done better, and with less associated problems by
keeping those separate.
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard | virtualization library http://libvirt.org/
veillard at redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
More information about the libvir-list