如何在 QEMU 中获得 AVX 支持?

如何在 QEMU 中获得 AVX 支持?

我想尝试新的 AVX 指令。我看到 QEMU 可能得到支持,所以我从 Git 构建了它(昨天)。我将 CPU 设置为 SandyBridge,并启动了 Tiny Core Linux。TCL 有内核 3.0,维基百科声称Linux 在 2.6.30 版中获得 AVX 支持。TCL 也适用于 Bochs 中的 AVX。但是当我在 QEMU 中运行时 cat /proc/cpuinfo 时,avx 缺失flags

$ cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 42
model name  : Intel Xeon E312xx (Sandy Bridge)
stepping    : 1
cpu MHz     : 1861.924
cache size  : 4096 KB
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc up pni cx16 popcnt hypervisor lahf_lm
bogomips    : 3725.00
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

$

如何在 QEMU 中获得 AVX 支持?

答案1

似乎如果定义的功能不可用,它将默认静默失败(来源)。Qemu 可以模拟一些主机 CPU 不支持的指令集,但我不确定 AVX 是否在其中(或者还不是)。

确保 Qemu 使用的所有库(尤其是 libvirt)都达到正确的级别。您还可以尝试 的 qemu-kvm 参数-cpu sandyBridge,+avx,enforce。另请参阅此主题很有用。

对于 AVX 和其他新指令集扩展,英特尔提供了一个模拟器:
英特尔软件开发模拟器
您也许可以使用它来获得 AVX 的经验。

答案2

另一个选择是Libvirt 格式域docs,您可以编辑 xml ( virsh edit <domain>) 并将 更改为cpu modehost-model此操作假设lscpuflags 在支持的指令列表中包含 avx。

  <cpu mode='host-model' check='none'>
    <model fallback='forbid'>qemu64</model>
  </cpu>

进行此编辑后,您需要完全关闭虚拟机并重新启动,然后更改才会生效。

相关内容