熟悉虚拟机和显卡直通(passthrough)的老哥帮忙看看, 这么设置开发测试环境是否合理,是否有坑?

2023-12-27 09:43:41 +08:00
 keepwalk2020

向熟悉虚拟机和显卡直通(passthrough)的老哥请教下:

因为正在开发的软件需要在不同平台运行,在电脑上安装了三个虚拟机 win10, unbuntu ,macos , 程序测试的时候,打开虚拟机在不同平台测试,修改代码适配平台,一直相安无事。如图 1

但是最近这个程序需要升级, 跑在某个 3D 引擎上,众所周知,虚拟机上的 3D 加速功能非常弱鸡,甚至在虚拟机里无法启动上面提到的 3D 引擎,搜了下,想在虚拟机里启动 3D 引擎,只有一个办法,就是给虚拟机开通显卡直通(passthrough),所以打算重装系统,把开发和测试环境配置成如下结构,图 2

开通显卡直通(passthrough)的话,Nv2070 独显会被虚拟机占据,宿主机上已经无法启动上面提到的 3D 引擎,只能用集成显卡显示基本内容,如浏览器网页。

主要开发环境需要迁移到某一台虚拟机上,开通显卡直通(passthrough)后宿主机已经变成一个平台空壳。

问题:一块显卡( Nv2070 )是否可以通过 显卡直通 共享给不同虚拟机?当然,不会同时打开多个虚拟机,同一时间只打开一台虚拟机。 网上看了几个测试,说开通显卡直通的虚拟机的 3D 加速功能可以达到原宿主机的 95%以上,如果只损失 5%的效能还是可以接受的,不知按上述构架配置有没有什么坑,还请大佬多指教,谢谢!

5260 次点击
所在节点    Linux
45 条回复
yulgang
2023-12-27 09:54:35 +08:00
可以共享给不同虚拟机,但是一次只能启动一个虚拟机。开机后虚拟机就接管这个直通的显卡了,你的显示器上显示的是虚拟机的画面,就是麻烦。

如果你有条件折腾,或许可以试试 https://github.com/DualCoder/vgpu_unlock
keepwalk2020
2023-12-27 10:04:00 +08:00
@yulgang 打算外接一个显示器,通过 HDMI 接口在外接显示器上显示虚拟机的画面,宿主机器的画面用集成显卡在笔记本的屏幕上显示,不知能否实现?查了几个显卡直通的帖子,说好像需要两套键盘鼠标,需要在宿主机和虚拟机之间切换键盘鼠标,这个好像优点烦 ...
QiShine
2023-12-27 10:04:06 +08:00
显卡虚拟化估计永远也成熟不了,nvidia 现在如日中天,没有搞虚拟化的动力
billccn
2023-12-27 10:08:01 +08:00
我很久之前折腾过,最费时的是实验各种 PCI 重置方案,可以调整的参数挺多,排列组合一个一个测下来才保证宿主机不重启的情况下可以随意开关虚拟机。

老实说方便程度不如 VMware Workstation 或者 Virtualbox 里面自带的虚拟 3D 卡,如果不是 CUDA 程序,这些虚拟 3D 卡可以共享物理显卡跑 3D 运算。
haohunhun
2023-12-27 10:08:37 +08:00
你可以用一些现成的系统比如 PVE ,可以显卡直通给不同系统的虚拟机。
keepwalk2020
2023-12-27 10:14:03 +08:00
@billccn 谢谢提醒,这确实是个坑,刚才在看显卡直通的教程, 里面提到 iommu group 分组,查关联的硬件 id ,一头雾水...
tsanie
2023-12-27 10:15:42 +08:00
你是不是在寻找 vGPU
keepwalk2020
2023-12-27 10:16:17 +08:00
@haohunhun 搜了下,PVE 好像无 GUI ,只能通过网页控制,如果在宿主机上装 PVE ,宿主机不就基本废了? 啥也干不了,连网页都不能看了...
yulgang
2023-12-27 10:19:08 +08:00
@keepwalk2020

1 、可以用 Teamviewer 这类工具远程连过去就不用两套键鼠了,或者你在宿主机上插多套键鼠,虚拟机开机后,自动将特定 USB 端口的设备连到虚拟机里。

2 、宿主机要将主显卡设置为集成显卡,可以给集成显卡单独加个显示器,一个显示器前面一套键鼠这样就不会乱了。

如果你是想在笔记本上显示服务器集显输出的图像,那笔记本不得用 USB 视频采集卡?是我理解错了吗,还是说你的宿主机是笔记本,笔记本我可没试过 2 ,因为笔记本的独显画面很可能是经集显输出的😂
wheat0r
2023-12-27 10:19:50 +08:00
我只是觉得核显还没有弱到只能显示基本内容
tool2d
2023-12-27 10:24:30 +08:00
你 macos 应该装不上驱动,需要把显卡换成 amd 的。
tsanie
2023-12-27 10:24:49 +08:00
@keepwalk2020 pve 就是个 debian ,可以在上面安装桌面环境,不过感觉着实没啥必要。

另外 macos 10.14 以后 n 卡不能用了吧?
photon006
2023-12-27 10:26:47 +08:00
iommu 分组不难,我就是用 pve 把一台物理机虚拟多台 vm 同时运行当服务器,甚至直通多张显卡,性能没损失,挖矿算力跟物理机一样

https://geili.me/en/all_in_one/

用虚拟化技术有个好处,显卡有时分给 windows 有时分给 linux ,在浏览器点点鼠标就好,一切可以远程操作,不像物理机还要插拔硬件,上面灰尘老多了,嫌弃[doge]
photon006
2023-12-27 10:29:35 +08:00
@keepwalk2020

pve 宿主机监听 8006 端口提供 web 服务,是通过网络传输,不需要接显示器,网页能用,局域网任何一台机器都能远程访问 web gui 。
CivAx
2023-12-27 10:32:00 +08:00
Qemu Passthrough 怎么听着有点耳熟,我记得有 Apex 的外挂就是这么实现防封号的
haohunhun
2023-12-27 10:34:18 +08:00
@keepwalk2020 pve 进入虚拟机之后因为显卡透传就可以看到画面了。进入之前是要通过网页设置,网页界面上有显卡透传的设置。还需要一些命令先禁用要透传的显卡。你也可以直接用物理机 unbuntu+kvm 来配置,windows 跑虚拟机里用透传的显卡玩游戏显卡性能损失不大。
keepwalk2020
2023-12-27 10:36:59 +08:00
@yulgang 谢谢解答,宿主机就是台笔记本,打算把笔记本的 intel 集成显卡用于宿主机的显示
keepwalk2020
2023-12-27 10:40:14 +08:00
@photon006 谢谢解答,在考虑用 PVE 方案,需要先测试下,一顿折腾跑不了...
nullico
2023-12-27 10:46:33 +08:00
我现在就是全在虚拟机工作的,宿主机 proxmox ,然后虚拟了 windows ,osx ,Linux ,接了两个显卡,分别直通给 windows 和 osx ,楼上很多人给你说了,其实很多坑,一般人我是真不建议折腾。首先,你的 pcie 通道得要足够多,因为你至少得直通显卡吧,如果要接外设,那还得直通 usb 控制器,一般主板上就一个 usb 控制器,意味着你要接 1 个 pcie 的控制器,两个系统,也就是说,最低你要接 2 个显卡,1 个 usb 扩展卡,然后如果要尽可能追求最小的损耗,硬盘你也得直通吧,也就是得还要两个 m2 接口,消费级别的主板上基本上不够。一套算下来,成本可能还不如你搞两个小主机+kvm 切换器成本低。 这还是硬件,软件有哪些坑?

直通真的是很大的坑,显卡直通你会遇到很多 reset 之类的坑,也就是你虚拟机可能没法重启,要重启就要重启整个 host 才行。 还有 m2 硬盘也是,很可能无法直通。至少我遇到了这两个问题。

我为啥这么搞,因为自己出钱放公司当开发机的,不想多花钱,搞的 c612 ( x99 )的垃圾,现在开发也够用==
clorischan
2023-12-27 10:56:35 +08:00
有 Windows 的需求直接用 Windows 做宿主也或许更方便?
WSL2 默认就开启了 vGPU
Hyper-V 也可以开 vGPU, 但是驱动需要自己装, 可以从 WSL2 里面提取驱动
vGPU 方案不独占显卡, 宿主跟多个虚拟机可以同时运行, GPU 性能够就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1003714

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX