我在 VirtualBox 中运行的 Linux 上进行一些开发。计算机是运行 Windows 7(32 位)的 Core i5。根据 Wikipedia 上的条目,CPU 应该支持 SSE4.2,但只有 SSE3 在 VM 中工作。如果我使用 gcc 中的 -msse4 标志进行编译,生成的二进制文件将因非法指令错误而崩溃。
答案1
这是一个已知问题,并且已在他们的错误跟踪器中:
[功能请求] 使客户操作系统能够使用 SSE4.1、4.2 和 POPCNT 指令集 https://www.virtualbox.org/ticket/8651
答案2
VirtualBox 或 KVM 或任何其他此类虚拟化技术都会向客户机公开主机 CPU 的一些功能。
为什么不导出主机 CPU 的所有功能?假设您想要将虚拟机从一台主机迁移到另一台主机,且不中断(或通过保存状态)。但第二台主机没有 SSE 4。如果您的虚拟机在主机 1 上公开了 SSE 4,并且您已成功使用此指令集编译并执行程序,则在迁移到主机 2 时它将中断。
这就是为什么——在我看来——明智的做法是不要默认公开主机 CPU 的所有支持指令集,我对 VirtualBox 的情况并不感到惊讶。但是它应该(我希望这将是该票证的实施解决方案)允许用户覆盖默认的公开功能选择。据我所知,此选项尚不存在。所以你必须耐心等待。
请注意,KVM 允许您为每个访客设置想要向访客公开的指令集。