On Fri, Mar 01, 2013 at 02:28:37PM +0100, Jiri Denemark wrote:
On Thu, Feb 21, 2013 at 11:58:18 -0300, Eduardo Habkost wrote:
> = Querying host capabilities =
>
> Requirement: libvirt needs to know which feature can really be enabled, before
> it tries to start a VM, and before it tries to start a live-migration process.
>
> The set of available capabilities depend on:
>
> • Host CPU (hardware) capabilities;
> • Kernel capabilities (reported by GET_SUPPORTED_CPUID);
> • QEMU capabilities;
> • Specific configuration options (e.g. in-kernel IRQ chip is required for
> some features).
Actually, one more thing. Can any of these requirements change while a
host is up and QEMU is not upgraded? I believe, host CPU capabilities
can only change when the host starts. Kernel capabilities are a bit less
clear since I guess they could possibly change when kvm module is
unloaded and loaded back with a different options. QEMU capabilities
should only change when different version is installed. And the specific
configuration options are the most unclear to me. The reason I'm asking
is whether libvirt could run-time cache CPU definitions (including all
model details) in the same way we currently cache QEMU capabilities,
such as availability of specific QMP commands.
That's a good question. Let's check each item so I don't forget any
detail:
> • Host CPU (hardware) capabilities;
This shouldn't change without a host reboot.
> • Kernel capabilities (reported by GET_SUPPORTED_CPUID);
This may possibly change if the KVM module is unloaded and reloaded with
different options, but... I guess we should simply require libvirtd to
be restarted if any user does that?
> • QEMU capabilities;
This shouldn't change as long as the QEMU binary doesn't change.
> • Specific configuration options (e.g. in-kernel IRQ chip is
required for
> some features).
This part seems tricky. Currently kernel-irqchip is probably the only
option that affects which features are available, but what if other QEMU
options affect the set of features too?
I believe the answer is to rely on machine-types. I mean: if a new
option that affects "-cpu host" and the set of available CPU features is
created, there are two options:
1) Using the default value;
2) Setting the option explicitly.
1) If using the default value, the default will depend on machine-type, so
libvirt should already consider machine-type as an option that affects
available-CPU-features.
2) If using an explicit value, libvirt should use the explicit value only
after being changed to take into account the fact that the option
affects available-CPU-features.
So, let's add one more item to the list. The set of available
capabilities depend on:
• Host CPU (hardware) capabilities;
• Kernel capabilities (reported by GET_SUPPORTED_CPUID);
• QEMU capabilities;
• Specific configuration options:
• kernel-irqchip (currently affects tsc-deadline and x2apic, but may
affect other features in the future)
• machine-type (may affect any feature in the future)
--
Eduardo