V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
keepwalk2020
V2EX  ›  Linux

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

  •  
  •   keepwalk2020 · 361 天前 · 4461 次点击
    这是一个创建于 361 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    pibbKYV.png

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

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

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

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

    45 条回复    2024-08-26 13:15:59 +08:00
    yulgang
        1
    yulgang  
       361 天前
    可以共享给不同虚拟机,但是一次只能启动一个虚拟机。开机后虚拟机就接管这个直通的显卡了,你的显示器上显示的是虚拟机的画面,就是麻烦。

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

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

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

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

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

    另外 macos 10.14 以后 n 卡不能用了吧?
    photon006
        13
    photon006  
       361 天前
    iommu 分组不难,我就是用 pve 把一台物理机虚拟多台 vm 同时运行当服务器,甚至直通多张显卡,性能没损失,挖矿算力跟物理机一样

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

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

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

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

    我为啥这么搞,因为自己出钱放公司当开发机的,不想多花钱,搞的 c612 ( x99 )的垃圾,现在开发也够用==
    clorischan
        20
    clorischan  
       361 天前
    有 Windows 的需求直接用 Windows 做宿主也或许更方便?
    WSL2 默认就开启了 vGPU
    Hyper-V 也可以开 vGPU, 但是驱动需要自己装, 可以从 WSL2 里面提取驱动
    vGPU 方案不独占显卡, 宿主跟多个虚拟机可以同时运行, GPU 性能够就行
    Eytoyes
        21
    Eytoyes  
       361 天前
    笔记本 BIOS 没这么多虚拟化选项吧
    photon006
        22
    photon006  
       361 天前
    @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
        23
    nullico  
       361 天前
    顺便列一下我现在的配置:

    ## 硬件

    主板: 超微 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
        24
    nullico  
       361 天前
    @photon006 #22 你说的我都试过,读写大的时候性能很差,还容易卡顿,要让损耗尽可能低,还是直通控制器最小
    LokiSharp
        25
    LokiSharp  
       361 天前
    @keepwalk2020 #8 PVE 就是 Debian ,可以自己装 GUI 的
    blankmiss
        26
    blankmiss  
       361 天前
    问题来了 你怎么给下面的虚拟机 VGPU 我记得消费卡是不支持的
    flyqie
        27
    flyqie  
       361 天前 via Android
    @QiShine #3

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

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

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

    笔记本因为 pcie 不够的问题所以 usb 基本都是挂同一个 hub 上的,你虚拟机外接键鼠内置的触摸板键盘蓝牙摄像头都有可能跪,先看看 pcie 布局。。。
    如果你用混合模式的话 optimus 下我没见过谁直通成的。。。
    如果你用独显直连模式系统引导大概率优先独显,换言之你有可能只能直通核显,家用 pc 板卡也会有这种问题。。。
    ntedshen
        42
    ntedshen  
       361 天前
    另外内屏和外部接口的线路设计是厂家硬件上做死的,除非你的电脑刚刚好在支持独显直连的同时还有一个核显输出的接口,不然理当是根本没法做到内外同时输出。。。
    “通过 HDMI 接口在外接显示器上显示虚拟机的画面,宿主机器的画面用集成显卡在笔记本的屏幕上显示,不知能否实现?”
    这个需求除非你刚好用的那些一般评测里会“不推荐”的机器,不然只能反过来。。。
    (不推荐是因为这种输出方式的机器在正常系统下外接显示器用双屏,日常崩驱动。。。
    ShCby
        43
    ShCby  
       360 天前
    @keepwalk2020 其实用不上 proxmox ve ,hyper-v 可以虚拟一个显卡用来加速(但是没有见过 macos 跑在 hyper-v 上的)
    xiafengjieying
        44
    xiafengjieying  
       302 天前 via iPhone
    Qemu kvm 安装 mac 稳定么?
    ruanimal
        45
    ruanimal  
       118 天前
    直通完显示可以用 looking-grass ,软件显示,不用拔插显示器
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1738 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:16 · PVG 00:16 · LAX 08:16 · JFK 11:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.