Plain qemu with the EPYC-Rome model works without any problems. I already get xsave, xsaveopt, xsavec and xsaveerptr with the current focal kernel, which also means that gcc finally uses znver1 (for v3) and znver2 (for Rome) optimizations.
Libvirt would require cherrypicking a number of commits to enable support for all CPU flags currently supported by focal qemu and for the additional AMD flags from the mentioned patched.
I currently run a private build in production with the following patches added:
- cpu_map: Distinguish Cascadelake-Server from Skylake-Server (unrelated, but recommended)
- cpu_map: Add pschange-mc-no bit in IA32_ARCH_CAPABILITIES MSR
- cpu_map: Request test files update when adding x86 features
- cpu_map: Add missing x86 features in 0x7 CPUID leaf
- cpu_map: Add missing x86 features in 0x80000008 CPUID leaf
Plus the attached patch which defines an EPYC-Rome type (without any tests), so not quite ready for upstream
Plain qemu with the EPYC-Rome model works without any problems. I already get xsave, xsaveopt, xsavec and xsaveerptr with the current focal kernel, which also means that gcc finally uses znver1 (for v3) and znver2 (for Rome) optimizations.
Libvirt would require cherrypicking a number of commits to enable support for all CPU flags currently supported by focal qemu and for the additional AMD flags from the mentioned patched.
I currently run a private build in production with the following patches added:
https:/ /github. com/libvirt/ libvirt/ commits/ master/ src/cpu_ map:
- cpu_map: Distinguish Cascadelake-Server from Skylake-Server (unrelated, but recommended) CAPABILITIES MSR
- cpu_map: Add pschange-mc-no bit in IA32_ARCH_
- cpu_map: Request test files update when adding x86 features
- cpu_map: Add missing x86 features in 0x7 CPUID leaf
- cpu_map: Add missing x86 features in 0x80000008 CPUID leaf
Plus the attached patch which defines an EPYC-Rome type (without any tests), so not quite ready for upstream