我希望能在第三代 Intel Core 上模拟 Athlon XP 或 Pentium IV 处理器。有没有办法运行专门用于禁用a) 较新的CPU 功能比如sse2
sse3
? 和 b) cpu缓存?
我使用 Qemu/KVM。我启动它的方式只有隐藏对客户操作系统的 CPU 指令,其应用程序仍然可以访问主机的较新的应用程序:
主持人
$ qemu-system-i386 -cpu pentium3,enforce (...) -enable-kvm
客人
$ inxi -f
CPU: Single core Pentium III (Katmai) (-UP-) cache: 16384 KB speed: 3292 MHz (max)
CPU Flags: apic cmov cx8 de fpu fxsr hypervisor mca mce mmx msr mtrr pae pge pse
pse36 sep sse tsc x2apic
$ firefox # v.54 which requires sse2;
运行良好,Palemoon 和 mpv 也是如此,它们无法在缺少 sse2 的 CPU(如 Athlon XP)上运行(产生“非法指令”)。这意味着 sse2 绝对可用于客户操作系统。只有检查 CPUID 的应用程序才会失败,例如:
$ chromium-browser
# (...)
# Fatal error in ../../v8/src/ia32/assembler-ia32.cc, line 109
# Check failed: cpu.has_sse2().
#
#0 0x0000b40b9f0a base::debug::StackTrace::StackTrace()
当我使用 运行虚拟机时,也会发生同样的事情-cpu athlon,sse2=off
。因此,虽然我们可以合理地考虑核心数量、处理器速度(使用cpulimit
)或 I/O 功能(使用 qemu 的风门参数),我们不能限制客户机可用的CPU指令集,可以吗?
答案1
您必须跳过 KVM 的使用并让 QEMU 自己模拟所有指令,以便指令停止可用。