侧边栏壁纸
博主头像
v林羽博主等级

行动起来,活在当下

  • 累计撰写 172 篇文章
  • 累计创建 34 个标签
  • 累计收到 21 条评论

目 录CONTENT

文章目录

【Windows使用】之--Hyper-V网卡、显卡直通等PCIe硬件直通

v林羽
2022-10-07 / 2 评论 / 16 点赞 / 31045 阅读 / 6756 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-11-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

【Windows使用】之–Hyper-V网卡、显卡直通等PCIe硬件直通

#手册 #教程 #系统 #Windows #虚拟机 #Hyper-V

从Windows Server 2016 TP4 版本,微软为Hyper-V虚拟机加入了物理设备直通(Discrete Device Assignment, DDA)的功能,允许虚拟机完全控制宿主机上的某些硬件(包括但不限于GPU,网络适配器等)。Hyper-V硬件直通需要满足以下几个条件:

  • 必须使用Windows Server Hyper-V。
  • 硬件支持IOMMU (Intel VT-d / AMD-Vi / ARM SMMU)
  • 设备支持硬件直通,如NVIDIA GeForce系列家用显卡就不受支持(2021年4月更新的英伟达驱动据说移除了GeForce显卡的直通限制)

下面以Windows Server 2022系统为例,使用前先检查BIOS开启IOMMU (Intel VT-d / AMD-Vi / ARM SMMU) :

1. 硬件检测

通过微软提供的powershell命令检测一下硬件支持情况:Virtualization-Documentation/SurveyDDA.ps1 · GitHub

curl -o SurveyDDA.ps1 https://raw.githubusercontent.com/MicrosoftDocs/Virtualization-Documentation/live/hyperv-tools/DiscreteDeviceAssignment/SurveyDDA.ps1 .\SurveyDDA.ps1

运行完毕后会得到如下的一个清单:

PS C:\Users\Administrator> .\SurveyDDA.ps1
Executing SurveyDDA.ps1, revision 1
Generating a list of PCI Express endpoint devices


NVIDIA GeForce GTX 970
Legacy Express Endpoint -- graphics controller.
All of the interrupts are line-based, no assignment can work.


Intel(R) Xeon(R) processor P family/Core i7 IOAPIC - 2026
Embedded Endpoint -- less secure.
    And it has no interrupts at all -- assignment can work.
    And it requires at least: 1 MB of MMIO gap space
PCIROOT(0)#PCI(0504)


Intel(R) Xeon(R) processor P family/Core i7 IOxAPIC Configuration Registers - 2036
Embedded Endpoint -- less secure.
    And it has no interrupts at all -- assignment can work.
    And it requires at least: 1 MB of MMIO gap space
PCIROOT(16)#PCI(0504)
…………

All of the interrupts are line-based, no assignment can work. 红色代表不被支持
And it has no interrupts at all -- assignment can work.绿色支持直通。
PCIROOT(0)#PCI(0504) 硬件的位置路径

这里看看就可以了,多数显示不支持的设备也能直通成功,比如:NVIDIA GetForce GTX970显卡,也是能直通成功的。

2. 网卡直通–使用powershell命令模式

绝大部分PCIe设备都是支持的,这里以Intel® Ethernet Connection I219-LM网卡直通为例:

  1. 获取直通设备的位置路径

在设备管理器中,右键查看属性,找到详细信息,获取位置路径

  1. 设备管理器里禁用准备直通的设备
  2. 通过Hyper-V管理器,完全关闭虚拟机。
  3. 执行如下命令
# 变量赋值$locationpath需要直通硬件的位置路径,$VmName直通的指定虚拟机名称
$locationpath = 'PCIROOT(0)#PCI(1F06)'
$VmName = 'openwrt'
# 卸载硬件
Dismount-VMHostAssignableDevice -LocationPath $locationpath -Force
# 直通设备的虚拟机不能被暂停或热迁移,所以自动关机动作必须为 ACPI shutdown 或者硬关机
Set-VM -Name $VmName -AutomaticStopAction TurnOff
# 将设备添加给指定虚拟机
Add-VMAssignableDevice -VMName $VmName -LocationPath $locationpath
# 查看虚拟机直通设备情况
Get-VMAssignableDevice -VMName openwrt

通过上面命令可以得到如下信息,证明PCIROOT(0)#PCI(1B03)#PCI(0000)设备直通成功。

PS C:\Users\Administrator> Get-VMAssignableDevice -VMName openwrt


InstanceID       : PCIP\VEN_8086&DEV_1533&SUBSYS_103717AA&REV_03\702084FFFF0971F200
LocationPath     : PCIROOT(0)#PCI(1F06)
ResourcePoolName : Primordial
VirtualFunction  : 0
Name             : PCI Express 端口
Id               : Microsoft:A1A4F2EF-63C4-404E-B857-8C185046D91A\C161BC40-91BF-4CAD-AE5F-1F209BEFC9C7
VMId             : a1a4f2ef-63c4-404e-b857-8c185046d91a
VMName           : openwrt
VMSnapshotId     : 00000000-0000-0000-0000-000000000000
VMSnapshotName   :
CimSession       : CimSession: .
ComputerName     : WIN-Q285J6F0FG3
IsDeleted        : False
VMCheckpointId   : 00000000-0000-0000-0000-000000000000
VMCheckpointName :

3. 显卡直通–使用图形界面的直通工具

最近在GitHub上发现一个图形化界面的直通工具:GitHub - chanket/DDA: 实现Hyper-V离散设备分配功能的图形界面工具。

可以看到界面很简单,能够显示已有的虚拟机的直通情况。下面直通显卡测试一下。

添加NVIDIA GetForce GTX970显卡(在上面的检测中,是不被支持的,直通下试试)

开机后设备管理器中已经有了。

安装完驱动可以看到显卡已被正确识别,没有报错,看来英伟达驱动真的是移除了GeForce显卡的直通限制。下面我们测试一下显卡。

开启增强会话模式,测试游戏可以看到GPU的变化,证明显卡已经能正常工作了。

某些设备(尤其是 GPU)需要为 VM 分配额外的 MMIO 空间,以便访问该设备的内存。默认情况下,每个 VM 开始时分配有 128MB 的低 MMIO 空间和 512MB 的高 MMIO 空间。但是,设备可能需要更多 MMIO 空间,或者可能会通过多个设备,从而使组合要求超过这些值。具体可以参看微软给出的解释:Plan for deploying devices using Discrete Device Assignment | Microsoft Learn

在图形界面的直通工具Discrete Device Assignment(DDA)中也有相关的三个功能。

具体的设置也可以按照设备管理器-显卡属性-资源,三个内存范围。这里是十六进制,通过计算可知16M+256M+32M

4. 硬盘直通

Hyper-V虚拟机中硬盘有三种使用方式:虚拟硬盘、直接使用物理硬盘、DDA硬件直通。经过测试后面两个基本都能达到物理机下的性能,DDA模式下能更好的被系统和软件识别做更多设置和检测,如正确识别硬盘型号、温度显示等等。

4.1. 使用物理硬盘

  1. 在磁盘管理中右键选择脱机,让磁盘处于脱机状态

  1. 在虚拟机中添加新硬盘,选择物理硬盘。

4.2. DDA硬件直通

参看网卡、显卡直通。

16

评论区