具有特定 CPU 的虚拟机

具有特定 CPU 的虚拟机

是否可以创建具有仅支持特定指令集的特定 CPU 的虚拟机。

例如,我想在具有不支持 AVX 或 SSE 指令的 CPU 的机器上尝试某些操作,是否可以创建一个具有不支持 AVX 或 SSE 的 CPU 的虚拟机?

答案1

有点。VMware 和 VirtualBox 不支持模拟,只支持虚拟化。所以这意味着你不能添加功能。但是,删除功能应该不会造成问题。

本文有一些关于如何伪造 CPUID 并报告给客户机的详细信息。请记住,这实际上不会禁用任何功能。

VMware 产品说明(引文):

使用编辑器(例如记事本)打开虚拟机配置文件(.vmx)
添加以下行:

cpuid.1.eax = "00000000000000110100011010101001"
cpuid.1.edx = "10111111111010111111101111111011"

如果 CPUID 仍然没有变化或者无效,请尝试添加:

cpuid.1.ebx = "00000000000000110100011010101001"
cpuid.1.ecx = "10111111111010111111101111111011"

保存配置文件并启动虚拟机。

VirtualBox 说明(引述):

打开命令提示符并切换到 VirtualBox 工作目录。
运行以下命令来更改 CPUID。

vboxmanage modifyvm  --cpuidset 1 000306a9 00100800 3d9ae3bf bfebfbff

启动您的虚拟机。

如何获取这些 CPUID 值取决于您,您可能需要查阅 CPU 供应商的指令集架构手册。

如果您想要模拟功能,则需要使用模拟器。QEMU 可以进行虚拟化和完全模拟。它还支持除 x86/x64 之外的许多 CPU 架构。

答案2

VMware 文档中提到了“CPUID 掩码”,但我不知道它如何配置。

如果您愿意尝试其他 VMM,QEMU 可以在命令行中启用和禁用 CPUID 标志。例如,qemu-system-i386 -cpu n270,fpu=off会导致虚拟 CPU 具有 n270 的功能,但 fpu 标志已禁用。 有受支持的 CPU 型号和 CPUID 标志的完整列表,请访问qemu-system-i386 -cpu help

相关内容