HyperVikuai网卡直通以及恢复教程

发布于 2024-09-02  1000 次阅读


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

从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显卡的直通限制)

网卡直通–使用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

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

硬盘直通

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

使用物理硬盘

  1. 在磁盘管理中右键选择脱机,让磁盘处于脱机状态
  1. 在虚拟机中添加新硬盘,选择物理硬盘即可直通。

如何恢复被直通的硬件

关闭虚拟机。赋变量 $locationpath 为刚刚获得的 PCIe 设备路径,赋变量 $VmName 为虚拟机名,然后运行:

# 将设备从虚拟机里移除
Remove-VMAssignableDevice -VMName $VmName -LocationPath $locationpath
# 挂载设备回 Management OS
Mount-VMHostAssignableDevice -LocationPath $locationpath

然后在设备管理器里重新启用设备。

注:可能会出现的问题

1.直通软件打不开

检查net运行库是否安装

如果之前有直通过,重启机器后软件就会打不开,报错,解决方法:

使用:

Remove-VMAssignableDevice -VMName 虚拟机名字 -LocationPath PCIE位置路径

取消直通后,方可打开软件

2.网卡直通后在宿主机上找不到了

在设备管理器-系统设备里找到后缀为(-已卸除)的设备,找到PCIE路径位置使用:

Mount-VMHostAssignableDevice -LocationPath PCIE路径位置

恢复网卡后重新进行直通操作即可

3.直通网卡蓝屏

在使用直通软件进行直通网卡时有时候会出现蓝屏,解决办法:

使用powershell命令进行直通

4.非PCIE网卡无法直通

如果遇到网卡信息里面PCIE通道信息为MLXC_****的,在系统设备里可以找到改网卡的PCIE控制器(原理为:部分网卡会部分情况下会使用网卡控制器分成两个网口而这两个网口是不会被识别成PCIE设备的),直接直通控制器即可,控制器会带着两个网口一起被直通

  • alipay_img
  • wechat_img
得不到的永远在骚动,被偏爱的都有恃无恐
最后更新于 2024-09-05