我想尝试新的 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 mode
。host-model
此操作假设lscpu
flags 在支持的指令列表中包含 avx。
<cpu mode='host-model' check='none'>
<model fallback='forbid'>qemu64</model>
</cpu>
进行此编辑后,您需要完全关闭虚拟机并重新启动,然后更改才会生效。