Why a VM reports a lower level

An operating system learns what its processor can do from the CPUID instruction. In a virtual machine the hypervisor answers CPUID, and it answers with the CPU model configured for the VM rather than with the host’s processor.

Hypervisors default to conservative models so that a VM can move between hosts with different processors: they present only features that every host is expected to have. The guest’s x86-64 level follows from that model, so a VM on an x86-64-v4 server can be x86-64-v1.

The error messages

Error messages caused by a processor, or a virtual CPU model, below the required level
MessageWhat it means
Fatal glibc error: CPU does not support x86-64-v2The system’s C library was built for x86-64-v2, for example on RHEL 9 and its derivatives, SLES 16 or openSUSE Leap 16, and the processor the guest sees lacks a v2 feature.
Fatal glibc error: CPU does not support x86-64-v3The same for systems built for x86-64-v3, such as RHEL 10, Rocky Linux 10 and AlmaLinux 10.
The current CPU is missing one or more of the baseline instruction sets..NET 11 or later on a processor below x86-64-v2.

glibc performs its check in the dynamic loader, before any program code runs, so every dynamically linked program fails with the same message. Container images built from these distributions fail the same way on such machines, because a container uses the processor of the machine it runs on. Which systems require which level lists the minimums.

QEMU and KVM

Without a -cpu option, QEMU gives x86-64 guests the qemu64 model. It has SSE3, CMPXCHG16B and LAHF/SAHF but not SSSE3, SSE4.1, SSE4.2 or POPCNT, so the guest is x86-64-v1. The older kvm64 model lacks LAHF/SAHF as well and is also x86-64-v1.

Passing the host’s processor through is what QEMU recommends when the VM does not need live migration:

qemu-system-x86_64 -enable-kvm -cpu host ...

For a VM that migrates between hosts, pick a named model that matches the oldest host instead (qemu-system-x86_64 -cpu help lists them), and check the level inside the guest.

libvirt

A domain with no <cpu> element gets the qemu64 model. Use one of these in the domain XML instead:

<cpu mode='host-passthrough'/>
<cpu mode='host-model'/>

host-passthrough exposes the host processor as it is. host-model asks libvirt for the closest description of the host processor it can express, which keeps live migration possible between similar hosts.

Proxmox VE

The CPU type is set per VM under Hardware > Processors > Type, or with qm set <vmid> --cpu <type>. Proxmox defines types named after the levels:

Proxmox VE CPU types and the x86-64 level a guest sees
CPU typeLevelNotes
kvm64x86-64-v1The default when no type is set.
x86-64-v2x86-64-v2
x86-64-v2-AESx86-64-v2Adds AES-NI. The default for VMs created in the web interface.
x86-64-v3x86-64-v3
x86-64-v4x86-64-v4
hostas the hostPasses the host processor through.

The web interface default, x86-64-v2-AES, is enough for RHEL 9 and its derivatives but not for RHEL 10, Rocky Linux 10 or AlmaLinux 10, which need x86-64-v3 or host.

VMware vSphere

Enhanced vMotion Compatibility (EVC) masks the processor features of a cluster down to one processor generation, and guests see only that generation’s features. Broadcom advises an EVC mode of Nehalem or higher for guests that need x86-64-v2. For x86-64-v3, choose an EVC mode for a generation that reaches it; the CPU pages show which generations do.

Hyper-V

With processor compatibility mode enabled, Hyper-V hides newer instruction sets from a VM (Microsoft describes them as, typically, those introduced within the last ten years) so the VM can move to hosts with older processors. Microsoft recommends enabling it only for a migration and turning it off afterwards. Windows Server 2025 adds a dynamic mode that presents the features common to all nodes of a cluster.

Checking the result

After changing the CPU model, restart the VM and check the level inside the guest.

Sources

  1. glibc: sysdeps/x86/dl-get-cpu-features.c (the start-up level check)
  2. QEMU documentation: Recommendations for KVM CPU model configuration on x86 hosts
  3. QEMU: target/i386/cpu.c (qemu64 and kvm64 models)
  4. Proxmox VE documentation: QEMU/KVM Virtual Machines, CPU Type
  5. Broadcom: "Fatal glibc error: CPU does not support x86-64-v2" (EVC mode)
  6. Microsoft: Processor compatibility for Hyper-V virtual machines
  7. SUSE Linux Enterprise Server 16.0 release notes
  8. .NET 11 breaking change: minimum hardware requirements (Microsoft)