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

360 天前
 keepwalk2020

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

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

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

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

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

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

4452 次点击
所在节点    Linux
45 条回复
Eytoyes
360 天前
笔记本 BIOS 没这么多虚拟化选项吧
photon006
360 天前
@nullico

多折腾一下顺手了也没那么多坑,usb 可以按设备直通不用直通整个 pci 控制器,也不需要外接 usb 扩展卡,一般一台主机 4 、5 个 usb 够用了,可以分给几个 vm 同时使用,鼠标键盘啥的。

磁盘性能问题,nvme 本身速度好几千读写,不直通 pcie 设备直接分配 scsi 给 vm 速度也有几千,损失不大可以接受,消费级主板 2 个 m2 接口也很普及,我前年买的 b550 就 2 个 m2 ,其中一个没啥用跑跑 pcdn 回血,很奇葩的是这张主板居然涨价了。就算没有 m2 ,sata 协议固态性能也挺好,可以直通给 vm ,要知道,就算购买昂贵的云服务器,磁盘也是虚拟的,那 ssd 性能也不咋样。

直通 N 卡给 windows 最多的坑是 43 错误,多折腾一下会解决的。
nullico
360 天前
顺便列一下我现在的配置:

## 硬件

主板: 超微 x10dri ,主板有 3 个 x16 ,3 个 x8 接口,都支持拆分
内存:recc 16g*8 = 128g ,当初买的还比较贵,现在我看 16g 的条子已经降到 100 一下了
cpu:2667v4 *2,加起来一共 16c32t ,bios 开启了性能模式,pve 也开了 performance ,全核 3.5 在跑,现在其实性能不咋的了,大概率两个还打不过现在 amd 的 5950x ,更别说 7950x 之类的了
显卡:amd rx5500 8g 直通给黑苹果,rx560 4g 直通给 windows ,都去掉了风扇,只保留了散热片,因为不玩游戏,也基本没有什么高负载的操作,显卡屁股上 diy 了一个 12cm 的风扇吹,问题不大
硬盘:x16 拆分卡,m2 硬盘*2 ,分别直通给 osx 和 windows ,256g 的 sata 固态,主要做虚拟机系统的存储,1t*4 的退役 2.5 寸硬盘,给家里的 homelab server 提供异地备份
其他外设:pcie 的 usb3 拓展卡*2 ,直通给 osx 和 windows

## 系统

1. osx:10.15.7 就日常开发,涉及到 ios 的部分,直接 remote 到公司机房里的 mac mini 上处理,主要开发 web 和 go 这些,够用了,11 之后的系统感觉都是 arm 优先的,也找不到升级的必要
2. windows10: 主要是调试 windows 上的应用,以及微信之类非工作的软件放在 windows 上。 通过 parsec 串流
3. Linux Server: 手搓了一个透明网关,给整个 vm 提供透明无缝自由网络
4. Linux Desktop for LinuxMint: 主要是一些涉及到 Linux 的开发,ssh/vnc 登陆上面操作
5. OMV:主要是给上诉的虚拟机提供一个 smb 的空间以及和家里 homelab 的一些重要数据提供异地备份
6. 爱快: 管理虚拟机的网络之类的,主要是方便,最开始本来想手搓的,放弃了
7. 其他一些 lxc 容器,主要是开发用

总之,都是一堆垃圾玩意儿,21 年 4 月份的时候搞的,期间 pcie 的问题升级过硬件,也去掉了一些没用的硬件。目前来说总体比较满意,虽然性能现在来看很一般,但是在这个硬件有点过剩的时代也算够用,每当我有想换更好的时候,就提醒自己差生文具多放弃了。嗯,计划这个垃圾玩意儿至少再战 3 年吧。
nullico
360 天前
@photon006 #22 你说的我都试过,读写大的时候性能很差,还容易卡顿,要让损耗尽可能低,还是直通控制器最小
LokiSharp
360 天前
@keepwalk2020 #8 PVE 就是 Debian ,可以自己装 GUI 的
blankmiss
360 天前
问题来了 你怎么给下面的虚拟机 VGPU 我记得消费卡是不支持的
flyqie
360 天前
@QiShine #3

显卡虚拟化得分在哪个层做。。

nvdia 推的那个 vgpu 也是显卡虚拟化的一种,而且动力很强。
lingeo
360 天前
没有 macos 的话那就是 windows+wsl 就可以满足。如果你要用虚拟机的方案吗,宿主机系统推荐 pve ,exis 资料挺少的。然后配置显卡直通,要么你多卡给每个虚拟机分配一张,要么就是同时只开一台机器,用哪个环境就改哪个环境,但是这样挺蠢的。
lingeo
360 天前
maocili
360 天前
vfio pci + iommu
虚拟机用远程访问就好了,没必要多套键鼠。
直通 PCI 的坑贼拉多,虚拟机内核参数,虚拟化参数等等
tsanie
360 天前
@lingeo vgpu_unlock 就可以了,搞 host 的驱动稍微麻烦点,以前 github 上有个库刚删库跑路。
我就是 rtx2070 ,架一个 fast-dls ,guest 上的授权问题也能解决。

maocili
359 天前
@tsanie macos 上也能跑 vGPU 吗
jim9606
359 天前
直通=Guest 独占 PCI 设备。能把一张卡掰到几个 Guest 用的不叫直通,那叫 vGPU 。
linux 的话有个内核 patch 可以把伪装硬件 id 改成支持 vGPU 的 GRID 计算卡。
Windows Hyper-V 也有一个 GPU 分区的跨厂商方案。
这两种方法都有很多坑,只能实测。
lategege
359 天前
@maocili macos 上 vgpu 、核显都无法驱动,需要直通 amd 免驱卡,或者老的 nvidia 架构免驱卡,需要权衡,其他系统 vgpu 基本没多大问题。
tsanie
359 天前
@maocili 没有驱动,guest 要驱动 vgpu 只能用专门的 grid 驱动
keepwalk2020
359 天前
@nullico 谢谢贴出硬件配置列表,我这因为不会同时打开多个虚拟机,打算用尽量少的显卡直通给虚拟机
keepwalk2020
359 天前
@lingeo 搜了下,macos 现在也可以用 N 卡直通了,以前不行
keepwalk2020
359 天前
@jim9606 不是把一张显卡掰开给多个虚拟机,是把一张显卡在不同时间段共享给多个虚拟机,不会同时打开多个虚拟机,同一时间只有一台虚拟机在运行
nullico
359 天前
@keepwalk2020 #37 osx 直通了 n 卡也没啥用,最多到 10.13.6 ,后面的版本虽然能用一堆问题,黑苹果只建议 A 卡,但是 A 卡很容易遇到 reset 的问题。更何况我看了你还是笔记本,只能说如果你时间和精力足够的话可以折腾,否则楼上说的 windows 下的虚拟化之类的方案就挺合适的,还能用到 gpu 加速
keepwalk2020
359 天前
根据上面几位老哥给的意见,目前能看到的坑有:
1 显卡直通后,多台虚拟机之间切换,可能需要重启宿主机,宿主机本身除了调度虚拟机,几乎不能干别的了
2 需要第二个显示器
3 可能需要两套鼠标键盘
4 硬件分组配置复杂

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

https://www.v2ex.com/t/1003714

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

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

© 2021 V2EX