尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

UnRaid使用iGVT-g插件实现Intel核显虚拟化,多虚拟机共享QSV硬解

UnRaid使用iGVT-g插件实现Intel核显虚拟化,多虚拟机共享QSV硬解 当你在一台UnRaid服务器上跑了Jellyfin、Windows虚拟机、Home Assistant却只有一颗带核显的Intel CPU时总会在某一刻被同一个问题卡住这颗核显到底给谁用给Windows虚拟机做图形加速Jellyfin就只能软件转码CPU占用瞬间拉满给Jellyfin硬解Windows那边又卡成PPT。之前我自己一直在用直通整块核显的方案直到换成iGVT-g插件之后才真正实现了一块Intel核显同时分给多台虚拟机做硬件加速而且每台虚拟机里都能正常调用QSV编解码。这篇东西不是那种贴一堆概念就完事的“科普”而是我把UnRaid装到物理机上之后从BIOS设置、插件安装、vGPU划分到虚拟机驱动一步步踩完坑的完整记录。如果你也打算在UnRaid里同时跑多个虚拟机并且希望每个VM都能用上Intel核显的硬件转码和基础图形加速那这篇内容应该能帮你省下好几个晚上。我会尽量把每一步的原理也讲清楚方便你根据自己硬件做一些偏移。1. 为什么非要用iGVT-g把核显切成几份1.1 直通一整块核显的问题先说一个很现实的场景。我最初用的是整个核显直接直通给Windows虚拟机原理也很简单通过VFIO把PCIe设备0000:00:02.0从宿主机剥离绑定到vfio-pci驱动然后整块GPU给某一台VM独占。很多All in One玩家第一反应都是这个因为网上大把教程都是这么写的。但落到Intel核显上这条路有几个麻烦直通后宿主机UnRaid就彻底看不到核显了。跑在UnRaid宿主上的Docker容器比如Jellyfin、Plex想直接调用/dev/dri/renderD128就变成奢望。如果后来想再开一台虚拟机也要用GPU对不起整块已经给了别人除非你关机重新分配。Intel核显的驱动本来就比较“敏感”直接VFIO透传时经常出现启动报错、代码43、重启后设备丢失的问题。所以直通整块核显适合那种“我只要一台Windows主力机和一块核显就满足了”的小场景不适合真正想玩多虚拟机共享的人。我在折腾了两轮直通之后就把目光转向了iGVT-g。1.2 iGVT-g的工作原理与UnRaid的结合方式iGVT-g的全称很长叫Intel Graphics Virtualization Technology - g翻译过来就是Intel图形虚拟化技术。它依赖一个很核心的机制mediated passthrough中文一般叫“中介直通”。可以把它理解成核显把自己内部的计算能力切成几个虚拟GPU实例每个实例都拥有独立的显存地址空间、命令队列和显示帧缓冲但对虚拟机来说它看到的是一块“完整的Intel核显”。这个机制比SR-IOV更轻量不需要网卡那种硬件级的物理功能拆分而是由i915驱动和KVMGT在内核层面模拟出虚拟GPU设备。虚拟机里的Intel显卡驱动可以直接操作这块虚拟出来的GPU几乎不用经过宿主机的软件模拟层所以性能接近物理核显。UnRaid能玩iGVT-g靠的是一个社区插件。这个插件做的事情本质上就是给UnRaid的i915驱动打上支持GVT-g的补丁并处理好KVM侧的mdev设备创建逻辑。装上插件之后你会在/sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/下面看到一票可选的虚拟GPU类型。我们只需要为每台虚拟机在这个目录下创建一个UUID设备然后把该UUID添加到虚拟机的XML里虚拟机启动时就能认到这块假核显。这里要特别提醒一下iGVT-g在Intel第6代到第9代酷睿上最成熟比如常见的i5-8400、i7-8700K、或者那些带UHD Graphics 630的CPU。在这些平台上无论是Windows还是Linux虚拟机里的驱动都能正常初始化。第10代部分型号也能用但需要在驱动和内核版本上多花点心思。至于更老的平台比如网上还能搜到的“Intel G630核显驱动下载win7 64位”这种那基本是第二代Sandy Bridge时代的东西了核显虚拟化想都不要想。2. 开始之前硬件、BIOS和UnRaid版本确认2.1 CPU、主板和核显的最低门槛在开始装插件之前先确认你的平台。我这里做了一个清单是我个人实际测试下来比较稳妥的配置供你对照组件最低要求建议配置CPUIntel第6代Skylake及以上第79代酷睿比如i5-8500、i7-8700核显HD Graphics 530 / 630 或 UHD Graphics 630UHD 630最常见驱动兼容性最好主板支持VT-dBIOS里能正常开启VT-d和iGPU多显示器输出内存8GB起16GB或以上因为vGPU的“显存”共享系统内存UnRaid版本6.9以上6.10或6.12社区插件支持更全如果你的CPU核显是UHD 630那恭喜你这是目前网上讨论最多、驱动最容易找的型号后面我在Windows虚拟机里也是拿它做例子。如果CPU是带F尾缀、无核显的型号或者主板在BIOS里根本找不到VT-d选项那下面所有内容都不用看了直接去买一张独立显卡可能更省事。2.2 BIOS设置VT-d、iGPU多显示器、共享显存进入BIOS后我一般会按顺序处理这四件事打开VT-d。Intel平台一般在“Advanced - Virtualization Technology”或“Advanced - System Agent Configuration”里不同主板名字不一样但搜VT-d基本都能找到。这个不开后面UnRaid内核里i915和vfio都会拒绝干活。确保核显处于启用状态。很多主板在插了独立显卡后会自动屏蔽核显这会导致UnRaid里根本看不到iGPU设备。BIOS里找iGPU、Internal Graphics、Multi-Monitor或IGD相关选项把它设为Enabled或Auto。如果你没有独立显卡单纯用核显输出那这步通常默认没问题。把“首选显示设备”设成核显如果你还打算用HDMI/DP接显示器调试的话。如果你是完全无头服务器这个选项可以不管但核显必须保持开启。设置核显共享显存。一般是UMA Frame Buffer Size或者DVMT Pre-Allocated建议设成64MB或128MB。这里别误解这个值不是虚拟机vGPU显存的硬上限它主要影响主机启动时UEFI为核显预分配的显存。设太小可能导致虚拟机里已经识别到显卡但分辨率最多只有低分辨率或者驱动报错。设置完成后保存重启在UnRaid终端里执行lspci | grep VGA或者lspci | grep Display你应该能看到类似00:02.0 VGA compatible controller: Intel Corporation CoffeeLake-S GT2 [UHD Graphics 630]的输出。没有这一行的话后面就不用继续了。2.3 UnRaid内核与i915驱动的准备UnRaid默认内核其实是支持i915驱动的但很多版本的内核没有开启GVT-g相关的补丁和配置。所以我们需要靠插件来补上这一环。我个人建议在安装任何插件之前先把UnRaid升级到比较新的稳定版尤其是6.10以上的版本社区对GVT-g的补丁维护会轻松很多。另外在UnRaid终端里可以执行下面几条命令确认当前内核和i915模块的状态uname -r ls /dev/dri cat /proc/modules | grep i915如果/dev/dri下能看到card0和renderD128说明宿主机的i915驱动已经加载了。此时先别急着高兴GVT-g还需要内核配置里开启CONFIG_DRM_I915_GVT我们可以用zcat /proc/config.gz | grep GVT如果这个命令没有输出或者显示CONFIG_DRM_I915_GVT未设置那就说明当前内核不支持。这种情况就老老实实去装插件插件会想办法帮你把带GVT-g支持的i915驱动放到UnRaid启动环境里。我知道有一些教程会让你自己改内核、重编驱动但对普通家用All in One来说用社区插件是最省心的路径。3. 安装Intel GVT-g插件并划分虚拟GPU3.1 从社区应用安装和启用插件在UnRaid Web管理界面里打开APPS市场搜索Intel GVT-g会找到一个专门为UnRaid做的插件。安装完成后通常在Plugins或Settings页面会多出一个Intel GVT-g标签页。进入插件设置你需要设置两个关键点PCI设备地址也就是核显的PCI地址一般就是0000:00:02.0。驱动模式选择GVT-g模式而不是VFIO直通模式。设置完成后插件一般会要求你重启UnRaid。这一步不是插件矫情而是它需要把带GVT-g补丁的i915驱动提前加载到initramfs里否则重启后设备不会正确暴露mdev接口。重启完成之后进入UnRaid终端执行ls /sys/bus/pci/devices/0000:00:02.0/如果一切正常你会在这个目录下看到一个mdev_supported_types子目录。再执行ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/里面会出现类似i915-GVTg_V5_2、i915-GVTg_V5_4、i915-GVTg_V5_8的文件夹这就是你可以给虚拟机分配的vGPU规格。如果没看到这些目录大概率说明插件没有正确加载驱动或者内核里GVT-g支持没生效。这时候不要急着折腾先回到插件设置确认核显地址是不是对的再检查/boot/config/plugins下是否有这个插件的启动脚本。也有可能是BIOS里的VT-d没开所以系统根本没把00:02.0暴露给USB控制器之外的虚拟化层。3.2 理解vGPU类型与实例规划mdev_supported_types下的每一个目录都代表一种虚拟GPU规格。规格名称末尾的数字通常意味着这个vGPU实例可以分配到的显存和分辨率档位。比如i915-GVTg_V5_4、i915-GVTg_V5_8数字越大允许的分辨率越高、帧缓冲越大但代价是同一时间能创建的实例数越少。我自己用得最多的是i915-GVTg_V5_4和i915-GVTg_V5_8。前者给跑Jellyfin转码的Linux VM用足够了后者给Windows虚拟机做桌面图形加速更流畅。如果你只有两台虚拟机可以各分一个中档实例如果虚拟机数量多就需要把档位调小一点否则会提示资源不足无法创建更多的mdev设备。在创建之前可以用这个命令查看某个vGPU类型能创建的最大实例数cat /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_8/available_instances这个数字如果显示为0就说明已经没有剩余配额了。合理规划vGPU类型其实就是配额和性能之间的权衡想要每台虚拟机都流畅硬解4K就得多留一些实例但每个实例可以分到的资源就少。3.3 手动创建mdev设备并绑定到UnRaid启动脚本某些插件版本会提供网页管理界面来帮助你创建mdev设备但为了排查问题方便我倾向于手动创建。创建mdev设备的核心命令就是往sysfs里写入一个UUID比如UUID0a4b3f44-6c9e-4b9a-8e21-2dc7a9c140d1 echo $UUID /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_8/create执行完以后再执行ls /sys/bus/mdev/devices/就能看到刚才填进去的UUID。这个UUID就代表了一个虚拟GPU设备接下来需要把它挂到虚拟机里。但有个问题UnRaid重启后这些mdev设备并不会自动重建。我一般会写一个用户脚本放在UnRaid的Settings - User Scripts里选择在“Array Start”阶段运行。脚本内容类似#!/bin/bash VGPU_TYPEi915-GVTg_V5_8 UUID_LIST( 0a4b3f44-6c9e-4b9a-8e21-2dc7a9c140d1 3a94b22a-3e4a-4f87-b7b5-4e0ab2d81c9a ) for UUID in ${UUID_LIST[]}; do echo $UUID /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/$VGPU_TYPE/create 2/dev/null || true done这个脚本容错做得比较粗但好处是即使某个UUID已经存在也不会因为报错中断整个流程。创建完以后进入UnRaid的虚拟机编辑页面切到高级视图找到XML编辑框在每个虚拟机的devices段里加入类似下面的内容hostdev modesubsystem typemdev managedno modelvfio-pci source address uuid0a4b3f44-6c9e-4b9a-8e21-2dc7a9c140d1/ /source /hostdev这样虚拟机启动时KVM会把对应的vGPU设备以PCI设备的形式交给虚拟机。理论上来讲加完这一段虚拟机里就能看到一块Intel显卡了。但Windows驱动那些坑我们下一节慢慢说。4. 虚拟机配置与Intel核显驱动的安装细节4.1 Windows虚拟机的机型选择和QEMU参数在UnRaid里创建Windows虚拟机时别用默认的i440FX机型强烈建议选择Q35。原因很简单Q35芯片组在PCIe设备拓扑上更接近现代主板对PCIe和mdev虚拟GPU的兼容性更好。CPU模式也建议选择host-passthrough让虚拟机能看到和宿主机一模一样的CPU特性集这样Intel驱动做指令集检测时不会因为缺特性而罢工。如果你在虚拟机里已经加了mdev设备建议把原本那个虚拟显卡设备设成none。否则Windows有可能优先去驱动那个很普通的虚拟显卡然后给你默认只显示VGA分辨率的画面真正的vGPU反而被晾在一边。当然你可以先用虚拟显卡把系统装好等到Windows驱动都装完之后再切到vGPU避免一开始装系统时因为没有显示输出而发蒙。内存方面Windows虚拟机的内存不建议小于4GB。vGPU的共享内存是从系统内存里扣的如果虚拟机内存太小Windows的桌面体验和驱动初始化都会很吃力。我实际测试下来给Windows分配8GB内存vGPU用i915-GVTg_V5_8日常看网页、播放视频已经很流畅。4.2 Windows 10/11下安装UHD 630驱动虚拟机启动后打开设备管理器你应该能看到一个带有黄色感叹号的标准VGA设备名字大概率叫“Microsoft基本显示适配器”。这说明vGPU已经出现只是驱动不对。接下来前往Intel官网下载支持UHD 630的显卡驱动装之前我习惯先把设备管理器里那个基本显示适配器卸载并在弹出窗口里勾选“删除此设备的驱动程序软件”。如果你之前装过其他驱动最好用DDU工具在安全模式下彻底清理一遍否则大概率会碰上代码43或者安装到一半提示“此驱动程序已安装”。安装完成后设备管理器里应该出现“Intel(R) UHD Graphics 630”的条目。打开dxdiag在“显示”选项卡里会看到设备名称、制造商、显存大小等信息。如果显示的名字是“Microsoft基本显示适配器”说明驱动没装上或者说vGPU设备的状态有问题需要回到UnRaid侧检查mdev设备是否还在。这里还藏着一个特别容易被忽略的坑Windows会通过Windows Update自动推送一个基础显卡驱动有时候它会在你装Intel官方驱动前抢先一步安装。这个基础驱动的存在会导致Intel官方驱动“不认账”即使安装成功也会在重启后被打回原形。我的做法是把Windows Update的自动显卡驱动更新暂时关掉或者在安装Intel驱动完成前不重启Windows。4.3 Linux虚拟机里的i915驱动和QSV验证如果你给Linux虚拟机分配了vGPU那Linux驱动反而简单得多因为内核原生支持i915。你唯一需要做的就是保证内核版本不要太老同时把linux-firmware装上。以Ubuntu 22.04为例虚拟机启动后执行sudo apt update sudo apt install linux-firmware intel-gpu-tools ls /dev/dri如果vGPU工作正常/dev/dri下会同时出现card0和renderD128。接着运行sudo intel_gpu_top这个命令会进入一个实时刷新的界面显示GPU占用、解码器占用等。如果界面能正常跑起来说明i915驱动已经成功绑定到了vGPU设备上。如果这个命令报错“No devices found”大概率是内核没识别到设备或者mdev设备没有正确创建。在Linux虚拟机里跑Jellyfin的话控制台里选择“Intel QuickSync (QSV)”作为硬件加速方案然后播放一条4K HDR视频观察intel_gpu_top里的Video Engine占用率。如果解码器占用上升、CPU占用不高且Jellyfin转码日志里出现hw: yes那就说明QSV硬解已经实际生效了。4.4 关于OVMF和传统BIOS的选择对于Windows虚拟机我更推荐使用OVMFUEFI启动方式。不是说传统BIOS不行而是我遇到过好几次传统BIOS模式下Windows对mdev设备初始化不太稳定具体表现是启动时卡在Windows Logo或者驱动装上后一重启就代码43。后来把虚拟机改成UEFI启动就很少再出问题。UnRaid里创建虚拟机时如果选择UEFI启动会自动挂载OVMF固件。这个固件在系统层面会给UEFI驱动提供协议接口对PCI设备初始化更完整也更容易兼容虚拟GPU。注意修改启动方式会影响引导分区如果你是已经装好系统的VM建议新建一台UEFI虚拟机重装而不是直接改配置。5. 实测硬件加速效果Jellyfin转码、Windows图形与TinyMediaManager5.1 Jellyfin容器/虚拟机里的QSV转码实测我把一台Linux虚拟机分配了i915-GVTg_V5_8之后把Jellyfin装在了这台虚拟机里而不是UnRaid宿主的Docker里。这样做的好处是Jellyfin能与UnRaid上的其他服务做资源隔离同时还能用上分配给这台VM的vGPU。实际转码测试用的是4K HEVC 10bit HDR《双子杀手》片段转码到1080p。转码开始前Jellyfin播放页面选择“直接播放”时CPU占用不到10%一旦强制转码软件解码模式下CPU立刻冲到80%以上画面偶尔卡顿。切到QSV硬件加速后CPU占用稳定在15%左右intel_gpu_top里Video Decode Engine占用率达到70%以上拖动进度条时延迟明显缩短。这个结果说明vGPU里的QSV解码能力是真实可用的不是那种“识别到显卡但硬解不生效”的假把式。如果你是在UnRaid宿主的Docker里跑Jellyfin其实不需要走iGVT-g直接把/dev/dri/renderD128映射进容器就能用硬解。但问题在于如果你还有其他虚拟机要用核显宿主Docker商用掉renderD128vGPU实例的资源就会紧张。我见过一些玩家想要“宿主导Docker 虚拟机都吃核显”两头通吃结果在iGVT-g和普通i915驱动之间来回折腾。我个人的结论是既然决定做多虚拟机共享就尽量把需要硬解的服务也挪到某一台VM里统一走vGPU宿主层就保持干净。5.2 Windows虚拟机里的桌面与播放体验Windows虚拟机分配了vGPU之后最明显的变化就是桌面操作顺滑了。之前用虚拟显卡窗口拖动都像隔着一层雾现在可以开Aero毛玻璃效果Chrome/Edge浏览器里的WebGL、硬件视频解码也都默认可用。如果你喜欢在Windows虚拟机里用Ruffle这类Flash兼容模拟器看老动画之前很多时候靠CPU软渲染现在也能调用GPU加速坐实了“多了一份GPU”的体验。不过要说清楚iGVT-g不是让你拿核显玩游戏。虽然Windows里能看到Intel UHD Graphics 630显存也可能显示为几百MB甚至几GB但它的3D性能和一个物理核显相比还是有衰减的。我试过跑《英雄联盟》低画质能玩但偶尔掉帧跑3A游戏想都不要想。这台虚拟机的定位更偏向于图形办公、浏览器加速、视频硬解而不是游戏机。如果你想验证Windows虚拟机里的GPU有没有真正参与视频解码可以在系统里渲染一段视频或者打开浏览器播放4K YouTube视频然后在任务管理器里看GPU的“Video Decode”引擎占用。如果占用曲线一直在跳说明确实在用核显硬件解码。如果GPU占用为0但CPU占用很高大概率驱动没有正确启用硬件加速或者播放器不支持。5.3 TinyMediaManager这类“轻图形”应用的表现有朋友问过我在UnRaid上跑TinyMediaManager是否需要GPU。TinyMediaManager主要工作是刮削电影海报、元数据和影片信息管理本身不依赖GPU转码但它的界面是JavaFX写的对图形渲染也有一定要求。它在普通虚拟显卡下的问题不是“不能跑”而是界面缩放、海报墙滚动时会有明显的延迟感CPU占用还高。在我给这台Ubuntu VM挂上vGPU之后再打开TinyMediaManager海报加载和滑动体验虽然不能和Windows原生桌面比但相比纯CPU渲染流畅度还是提升了不少。更重要的是因为这台VM已经通过QSV做Jellyfin硬件转码TinyMediaManager跑在同一台虚拟机里方便统一管理刮削和媒体库网络路径也不用跨宿主机来回映射。6. 我踩过的坑PVE迁移、UUID冲突和休眠唤醒6.1 从PVE环境迁到UnRaid的注意事项很多人会先接触PVEProxmox VE因为PVE在管理界面里原生支持添加“Host PCI设备”和“虚拟GPU”鼠标点几下就能给虚拟机分配GVT-g的mdev设备。后来为了用UnRaid的磁盘阵列和Docker生态又想把PVE换掉或者把UnRaid装成PVE里的虚拟机。这里我要说一个比较容易踩的坑如果你是在PVE里装UnRaid虚拟机再想通过UnRaid里的iGVT-g插件实现二次虚拟化那基本是行不通的。iGVT-g需要宿主机内核直接控制并管理核显嵌套虚拟化环境下UnRaid自己是ray没权限从PVE手里再切一块vGPU出来的。正确的做法是不要让UnRaid当PVE的guest而是让UnRaid作为物理机的宿主机直接安装。如果你PVE里已经配置了GVT-g迁移到UnRaid时vGPU的UUID和类型名称不能直接照抄因为两个平台的i915驱动版本和内核选项可能不一样。我一开始直接把PVE里生成的UUID复制到UnRaid的VM XML里结果启动虚拟机时一直报“failed to create mediated device”最后发现是PVE环境下创建的那个mdev设备占用了同一个UUID但两边内核看到的设备路径完全不同。解决办法就是删掉PVE侧对应的mdev设备重新在UnRaid侧生成新UUID。6.2 虚拟机启动时vGPU UUID冲突这个坑在排障时特别隐蔽。它有几种表象虚拟机启动到一半自动停止QEMU日志里写着mdev device is busy或者Windows虚拟机进系统以后设备管理器里看不到vGPU再或者能进系统但一打开视频播放就蓝屏。我遇到最多的情况是同一台虚拟机被克隆或备份恢复后XML里保留了多个指向同一UUID的mdev引用。尤其是UnRaid的VM和用户脚本同时去创建相同UUID时就会导致一个mdev设备被反复“create”然后报EEXIST。虽然这个错误不影响已有设备工作但如果你在脚本里使用了或set -e后续操作就会被中断虚拟机自然起不来。我的建议是每个虚拟机只用唯一的UUID不要复用。在脚本开头主动检查/sys/bus/mdev/devices/$UUID目录是否存在如果存在就不再执行create。虚拟机XML里的mdev设备和脚本创建的UUID必须一一对应。如果你不小心把同一个mdev UUID配到了两台虚拟机里那后果比没GPU更严重两台虚拟机同时启动可能直接让宿主机的i915驱动崩溃甚至整个UnRaid卡死。这个问题我折腾了一晚上才意识到因为我在UnRaid的“克隆虚拟机”功能里复刻了一台测试用的Windows VM结果它把XML里的mdev地址也一起复制过去了。6.3 休眠唤醒后iGVT-g失效的处理UnRaid通常是一台7x24小时开机的服务器但很多玩家还是会设置CPU节能或者让它支持S3睡眠。问题来了iGVT-g的mdev设备在系统休眠恢复后经常消失虚拟机里看到的就是显卡被弹出然后黑屏或者设备管理器里出现一个大大的感叹号。原因是主机休眠后PCI设备做了电源状态切换i915驱动的状态恢复流程并不总是能完整重建mdev设备。我在日志里看到过i915: Failed to re-initialize GVT-g这样的报错。解决方向有两个在UnRaid里禁用S3睡眠。UnRaid本身的“睡眠”功能本来就不算完善做All in One服务器没有必要让它睡眠直接在BIOS里把Suspend to RAM关掉或者UnRaid系统设置里不使用睡眠。如果实在需要睡眠写一个用户脚本在唤醒后把所有mdev设备删除再重建。删除mdev设备的方法是向/sys/bus/mdev/devices/$UUID/remove写入1比如for uuid_dir in /sys/bus/mdev/devices/*/; do uuid$(basename $uuid_dir) echo 1 /sys/bus/mdev/devices/$uuid/remove 2/dev/null || true done # 然后重新创建 ...但这段脚本会先把所有vGPU都拔掉如果当时有虚拟机正在运行可能会直接把虚拟机搞崩。所以稳妥的选择还是让UnRaid一直保持运行状态不搞睡眠。7. 稳定使用的几个参数建议7.1 vGPU类型怎么选才不后悔我的原则是“按需分配宁小勿大”。如果你只跑一台Linux VM做Jellyfin硬解用i915-GVTg_V5_4就够了如果还要同一时间跑一台Windows VM看视频那Windows VM用i915-GVTg_V5_8。不要给所有虚拟机都塞最大的vGPU类型因为每个类型的可用实例数是有限的占满了以后后续再想加一台VM就要先删一个已有实例非常被动。另外要注意不同宿主机的CPU和BIOS设置会影响GVT-g实例数量。比如某些BIOS里核显显存设成128MB、256MB、512MB实际可分配的vGPU资源池大小就会变化。如果发现available_instances总是0可以尝试把BIOS里核显共享显存调大一些。7.2 虚拟机CPU拓扑和内存分配的经验vGPU不像独立显卡那样自带显存它使用的是虚拟机内存作为共享显存。所以给虚拟机分配内存时不要只按普通办公需求来还要额外预留出一些内存给vGPU。Windows虚拟机建议至少8GBLinux VM至少4GB。如果同时跑两台虚拟机加上UnRaid宿主本身的Docker容器整机16GB内存是底线32GB更从容。CPU拓扑方面我建议给每台使用vGPU的虚拟机至少分配2个核心并且开启hyper-v时钟标志Windows虚拟机。这主要是为了降低vGPU驱动在等待CPU时间片时出现的高延迟。我当时给Windows分配了2核4线程GPU解码和桌面操作都比较跟手后来为了测试降到1核明显感觉画面掉帧和卡顿。7.3 升级UnRaid前必须做的备份UnRaid每次大版本升级内核都会被替换而iGVT-g插件几乎和内核版本强绑定。你升级前看着插件还在升级后很可能就失效了因为新的内核可能没有对应的GVT-g补丁。我吃过一次亏从6.10升到6.12后所有vGPU实例全部消失mdev_supported_types目录直接没了最后只能回滚到之前的启动U盘备份。所以我养成一个习惯升级前先备份/boot目录下的整个UnRaid配置。至少要把这几个东西单独备份/boot/config/plugins里的Intel GVT-g插件目录/boot/config/vm里的虚拟机XML文件/boot/config/go启动脚本/boot/config/plugins/user.scripts/scripts里的用户脚本升级后如果发现vGPU失效优先把插件重装一遍再检查mdev_supported_types是否恢复。如果插件作者已经适配新内核那通常只要重装就能用如果还没适配就只能回滚版本别硬等。说实话iGVT-g这套方案放到今天来看并不是最前沿的虚拟化方案Intel新一代平台都在推SR-IOV和硬件辅助虚拟化但如果你手上正好是一台经典的Coffee Lake平台UnRaid加Intel GVT-g插件确实是性价比最高的多虚拟机共享核显思路。用vGPU这台虚拟机能解码那台虚拟机也能解码不用再为了“一块显卡到底给谁”这种问题反复拔掉设备重分配。我在实际使用中最大的体会是iGVT-g的目标不是造一块游戏卡而是给每台虚拟机发一张“硬解卡”。想清楚这个定位你的UnRaid在7x24小时运行时会变得从容得多。
返回列表