如何在 QEMU 中获得 AVX 支持?

Jan*_*sen 10 cpu virtualization qemu bochs

我想玩新的 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:

$
Run Code Online (Sandbox Code Playgroud)

如何在 QEMU 中获得 AVX 支持?

har*_*ymc 11

似乎如果定义的功能不可用,默认情况下它会以静默方式失败(source)。Qemu 可以模拟主机 CPU 不支持的一些指令集,但我不确定 AVX 是否在其中(或还没有)。

确保 Qemu 使用的所有库,尤其是 libvirt,都达到正确的级别。你也可以试试 .qemu-kvm 的参数-cpu sandyBridge,+avx,enforce。另请参阅此线程是否有用。

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