如何让 VirtualBox 客户机使用 NVidia 显卡?
主机设置:
Windows 7 x64
NVidia Optimus
在NVIDIA 控制面板,我明确选择高性能 NVIDIA 处理器 为了:
C:\Program Files\oracle\VirtualBox\VirtualBox.exe C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
当 VirtualBox 运行时,NVidia 软件不会将其列为使用 NVidia GPU 的应用程序。因此,我认为 VirtualBox 确实不使用 Nvidia GPU。
客人:
Windows 7 x64(即与主机相同)
新增嘉宾已安装
在 VirtualBox 设置中启用 3D 加速:显示/视频/启用 3D 加速
什么犀牛,具有 OpenGL 功能的应用程序报告为视频适配器:
Humper Chromium OpenGL version: 2.1 Chromium 1.9 Render version: 2.0 Shading Language: 1.40 - Intel Build 9.17.10.3517 Driver Date: NA Driver Version: NA Maximum Texture size: 8192 x 8192 Z-Buffer depth: 32bits Maximum Viewport size: 8192 x 8192 Total Video Memory: 64 MB
对我来说,虚拟机确实使用了主机的 3D 硬件加速,但不幸的是使用了英特尔加速。
答案1
我知道已经过去了几年,但还是想回答,因为当你在谷歌上搜索“virtualbox 3d multiple GPU”时,这篇文章的排名很高。随着时间的推移,事情变得简单多了,也好多了。
偶然发现此主题的人可能会来到这里,因为他们的笔记本电脑或 PC 有两个 GPU,这在当今非常常见 - 尤其是在游戏笔记本电脑上。板载英特尔 GPU 用于渲染窗口和一般应用程序,但使用 GPU 3D 功能的应用程序应通过性能更高的 Nvidia GPU 来实现。
今天,我在笔记本电脑上构建了一个 Ubuntu VM 来进行一些跨平台开发,一切都很好,只是客户 VM 非常慢,而且无法解释,因为 CPU、内存、磁盘都显示利用率低。
没过多久我们就发现是视频性能导致了这个问题。启动应用程序、最大化/最小化窗口——这些在 2019 年我们认为理所当然的事情,但需要 3D 加速才能以合理的速度运行——使用的是 GPU 0。
确定这一点很容易,因为 Windows 10 现在可以使用“任务管理器”然后是“性能”选项卡查看 GPU 利用率。当我移动窗口、最大化、最小化时,我可以看到这是通过主机上的 GPU 完成的。主机上的 GPU 是集成的 Intel HD GPU,我想使用 NVidia GTX-1050ti,即 GPU1。
经过一番搜索,我并没有找到可以指定使用哪个 GPU 的地方。但这个帖子和其他一些帖子提醒我,在这种设置中,你必须进入 NVidia 控制面板,然后“管理 3D 设置”,然后是“程序设置”选项卡。
您很可能不会在列表中找到“Virtualbox”。但您可以按“添加”按钮,然后添加 virtualbox.exe。您可能需要深入了解安装 Virtualbox 的驱动器/路径。添加后,在下面的设置中,确保第 2 项“选择此程序的首选图形处理器”设置为您希望它使用的 GPU,在我的情况下是“高性能 NVIDIA 处理器”。
不要将其设置为自动,当然也不要将其设置为集成。当然,您需要在虚拟机设置中勾选 3D 加速框,并且需要在主机上安装客户机附加组件。但是,一旦您按照上述方法设置了主机视频 3D 设置,请关闭客户机虚拟机,退出虚拟盒,然后重新启动虚拟盒和虚拟机。
如果您使用任务管理器|性能并查看“virtualbox 管理器”进程,并观察在浏览客户虚拟机的 UI 时使用了哪个 GPU,您应该会看到它现在使用更好的 GPU。请参阅下面粘贴的图像。
尽管如此,不要指望能够在客户虚拟机中运行游戏。3D 加速直通仍然没有那么快。但您可以期望在客户机中拥有现代操作系统和 UI,并获得可接受的体验。人们可以在客户虚拟机中玩旧游戏,比如任何基于 directX9 的游戏。不幸的是,随着虚拟化 GPU 能力的提高,3D 游戏技术的发展速度更快。
答案2
为客户机提供完全的 GPU 访问权限可能是不可能的。如果虚拟机在主机使用 GPU 时直接访问 GPU,就会发生坏事TM,因为两台实际上不同的计算机之间共享内存是不可能的;指针、地址和其他东西在它们之间会有很大不同。(没有消费者可用的卡支持同时为两台计算机提供服务。)
不过,您可以尝试以下方法。首先,在 NVidia 控制面板中将首选图形处理器设置为好的处理器(3D 设置→管理 3D 设置→首选图形处理器)。这可能会使 VirtualBox 与 NVidia 卡配合使用以实现 OpenGL。
如果这没有帮助,请尝试在安全模式下安装 Guest Additions对客人。
最后,在 Linux 主机上,您可以尝试将 GPU 传递到虚拟机,但这仅适用于 PCI 卡,我无法确定您的卡是否是 PCI,即使如此,您也很有可能将 GPU 从主机上扯下来或导致其他问题。首先找到好卡的 PCI 地址(总线、设备和功能)。将虚拟机的芯片组设置为 ICH9;当我尝试时,这并没有立即破坏任何东西。然后使用 VBoxManage 实用程序连接卡:
vboxmanage modifyvm "Your VM Name" --pciattach BB:DD.F@bb:dd.f
Your VM Name
根据需要进行替换。BB
是主机上 GPU 的总线号;DD
是设备;F
是功能。 在 之后@
,输入客户机上的 PCI 插槽。例如:
vboxmanage modifyvm "Windows 7 x64" --pciattach 01:[email protected]
一般而言,GPU 直通在 Linux 主机上更有可能实现。请参阅如何设置具有 GPU 直通功能的游戏机。