
On Fri, Dec 15, 2023 at 04:12:00PM -0600, Jonathon Jongsma wrote:
As described in detail in the commit "cpu_map: add canonical names to existing CPU models", the unversioned CPU model names are not migration-safe. If qemu makes the anticipated changes to CPU alias mapping, an unversioned CPU model may be represented by different underlying CPU models on different hosts. To avoid being susceptible to this issue, use the new 'canonical_name' property of the CPU definition to always specify a specific versioned CPU model version to qemu rather than using CPU model aliases.
The CPU models *are* migration safe because libvirt /always/ uses the versioned machine type name.
This canonical name is only used in the qemu backend and is not exposed to the user in anyway. The libvirt CPU configuration will continue to use existing unversioned model names in the domain xml for continuity. But internally we will translate these to a specific version.
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com> --- src/qemu/qemu_command.c | 5 ++++- tests/qemuxml2argvdata/cpu-Haswell-noTSX.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-Haswell.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-Haswell2.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-Haswell3.x86_64-latest.args | 2 +- .../cpu-Icelake-Server-pconfig.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-cache-disable3.x86_64-latest.args | 2 +- .../cpu-check-default-partial.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-fallback.x86_64-5.2.0.args | 2 +- tests/qemuxml2argvdata/cpu-fallback.x86_64-8.0.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-cmt.x86_64-latest.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-4.2.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-5.0.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-5.1.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-5.2.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-6.0.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-6.1.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-6.2.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-7.0.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-7.1.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-7.2.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-8.0.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-8.1.0.args | 2 +- .../cpu-host-model-fallback-kvm.x86_64-latest.args | 2 +- .../cpu-host-model-fallback-tcg.x86_64-7.2.0.args | 2 +- .../cpu-host-model-fallback-tcg.x86_64-8.0.0.args | 2 +- .../cpu-host-model-fallback-tcg.x86_64-8.1.0.args | 2 +- .../cpu-host-model-fallback-tcg.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-4.2.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-5.0.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-5.1.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-5.2.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-6.0.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-6.1.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-6.2.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-7.0.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-7.1.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-7.2.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-8.0.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-8.1.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-kvm.x86_64-latest.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-4.2.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-5.0.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-5.1.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-5.2.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-6.0.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-6.1.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-6.2.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-7.0.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-7.1.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-7.2.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-8.0.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-8.1.0.args | 2 +- .../cpu-host-model-nofallback-kvm.x86_64-latest.args | 2 +- .../cpu-host-model-nofallback-tcg.x86_64-7.2.0.args | 2 +- .../cpu-host-model-nofallback-tcg.x86_64-8.0.0.args | 2 +- .../cpu-host-model-nofallback-tcg.x86_64-8.1.0.args | 2 +- .../cpu-host-model-nofallback-tcg.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-tcg.x86_64-7.2.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-tcg.x86_64-8.0.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-tcg.x86_64-8.1.0.args | 2 +- tests/qemuxml2argvdata/cpu-host-model-tcg.x86_64-latest.args | 2 +- .../cpu-host-model-vendor.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-minimum1.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-minimum2.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-nofallback.x86_64-8.0.0.args | 2 +- .../cpu-phys-bits-emulate2.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-strict1.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args | 2 +- tests/qemuxml2argvdata/cpu-tsc-frequency.x86_64-latest.args | 2 +- 70 files changed, 73 insertions(+), 70 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 54fb8220e8..be9cbe4915 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6267,7 +6267,10 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver, break;
case VIR_CPU_MODE_CUSTOM: - virBufferAdd(buf, cpu->model, -1); + if (cpu->canonical_model) + virBufferAdd(buf, cpu->canonical_model, -1); + else + virBufferAdd(buf, cpu->model, -1); break;
This isn't checking whether QEMU supports the versioned CPU model or not. QEMU has had 'Haswell-noTSX' long before 'Haswell-v2' was added. Can you check what version QEMU introduced CPU versions, and whether that's /equal or older/ than our minimum QEMU version. Assuming it is, then record this in the commit message as justification for why this doesn't break compatibility with launching old QEMU. With 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 :|