在 Windows Server 上為 Hyper-V 虛擬機配置 SR-IOV - HeyAdvice.net
使用PowerShell 在硬件級別確定 Hyper-V 服務器是否支持 SR-IOV:
(get-vmhost).IovSupport
(get-vmhost).IovSupportReasons
如果您的服务器支持该功能,IovSupport 将包含 True. 如果没有,它将是 False. 在这种情况下, IovSupportReasons 显示了不支持 SR-IOV 的原因。 通常,会详细说明原因。 以下是典型的原因:
完整输出 get-vmswitch | fl *iov* 包含一些有用的信息。 例如:
IovVirtualFunctionCount : 6
IovVirtualFunctionsInUse : 3Copy
这些数字显示有多少 IOV 虚拟设备可用,以及其中有多少被虚拟机使用。

这种就是支持

主板设置没开

windows 虚拟交换机m没配置
- [root@node1 ~]# lspci -nn | grep Eth
- 08:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
- 08:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
-
- [root@node1 ~]# lspci -s 08:00.0 -vvv | grep Capabilities
- Capabilities: [40] Power Management version 3
- Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
- Capabilities: [70] MSI-X: Enable+ Count=10 Masked-
- Capabilities: [a0] Express (v2) Endpoint, MSI 00
- Capabilities: [100 v2] Advanced Error Reporting
- Capabilities: [140 v1] Device Serial Number f8-0f-41-ff-ff-f4-af-6c
- Capabilities: [150 v1] Alternative Routing-ID Interpretation (ARI)
- Capabilities: [160 v1] Single Root I/O Virtualization (SR-IOV)
- Capabilities: [1a0 v1] Transaction Processing Hints
- Capabilities: [1c0 v1] Latency Tolerance Reporting
- Capabilities: [1d0 v1] Access Control Services
您可能不会拥有所有项目,甚至没有 SR-IOV。 但这并不意味著您的服务器不支持 SR-IOV。 例如,Supermicro 主板在 BIOS 中可能没有 SR-IOV,但默认情况下禁用了 ASPM。 如果启用 ASPM 和虚拟化支持,将自动启用 SR-IOV
物理机确认开启了SRIOV功能之后,接下来在操作系统层面操作,首先Hyper-V若要使用SRIOV,有两处需要修改,一个是虚拟交换机,如下图确认在创建虚拟交换机时开启了SRIOV(单根虚拟化),需要注意的是虚拟交换机一旦创建后,SRIOV功能无法在修改,也就是说你要是忘了开启那对不起,麻烦您删了重来

或者在使用 PowerShell 创建虚拟交换机时启用 EnableIOV 选项:
New-VMSwitch -Name “VMNetExt” -NetAdapterName “Ethernet 2” -EnableIov 1
Important. 创建虚拟交换机后无法启用 SR-IOV。 如果您没有立即完成,则必须删除 vswitch 并重新创建。
虚拟交换机启用SRIOV之后,就要在我测试的虚拟机上操作了,在虚拟机的vNIC(虚拟网卡)上开启SRIOV,如下图所示,这里是可以随时开关的 
确认了上面的操作之后,通过powershell可以进一步确认系统是否识别了我的设置,在当前宿主机执行(get-vmhost).iovsupport或iovsupportreasons来查看返回结果,有关powershell中对象的属性可以通过管道符“|gm”来查看
另外如下图所示,通过get-netadaptersriov来查看当前主机上支持sriov的物理网卡有哪些,并且从返回结果来看,我的x520-2网卡最多支持62的vf。
顺带提一句Peripheral Component Interconnect Special Interest Group(外围部件互连专业组),简称PCISIG,这个组织定义了每个设备最多可支持的vf数量为256个 
还有一件很重要的事情。 一块主板可能有多个网络适配器,但 SR-IOV 可能仅受其中一些支持。 此外,如果适配器根据其数据表支持 SR-IOV,并不意味著它在您的主板上工作。
因此,在您配置交换机后,请使用以下命令对其进行检查:
get-vmswitch | select IovSupport, IovSupportReasons, IovEnabled
IovEnabled 选项显示是否启用了 SR-IOV。
您可以使用 PowerShell 显示支持 SR-IOV 的网络适配器列表:
Get-NetAdapterSriov | sort name | ft Name, InterfaceDescription, SriovSupport
在虚拟机管理程序和虚拟交换机级别启用 SR-IOV 后,您可以在虚拟机上启用它(默认情况下禁用)。 你可以找到 Enable SR-IOV 在裡面 Hardware Acceleration 您的虚拟机网络适配器。

或者,您可以通過 PowerShell 為虛擬機的網絡適配器啟用 SR-IOV:
Set-VMNetworkAdapter -VMName mytestvm -VMNetworkAdapterName Network Adapter -IovWeight 100
要禁用 SR-IOV,請將 IovWeight 的值更改為 0。
您可以使用單獨的事件查看器日誌在 Hyper-V 中找到所有 SR-IOV 錯誤和事件:
應用程序和服務日誌 -> Microsoft -> Windows -> Hyper-V-SynthNic -> 管理員。
如果 SR-IOV 工作正常,您將在虛擬機啟動時在事件查看器中看到以下條目:
- 12597 Network adapter (%NIC_ID%) Connected to virtual network.
- 12582 Network adapter (%NIC_ID%) started successfully.
- 12584 Network adapter (%NIC_ID%) allocated a virtual function.
- 12588 Network adapter (%NIC_ID%) assigned a virtual function.
在正确且成功开启了sriov功能之后,我启动这台测试虚拟机SRIOV_2012,可以看到hyper-v下方显示当前SRIOV是活动状态,但奇怪的是我发现有两个IP。。怎么回事呢?

进入到虚拟机系统里来看设备管理器,发现多了一块网卡,叫做“Intel(R)82599虚拟功能”,其实我这块Intel x520 series网卡是基于Intel 82599控制芯片的,后面的虚拟功能翻译过来就是virtual function,也就是虚出来的一个VF,它以一块虚拟网卡的形式呈现在虚机操作系统里了,因此我刚才看到了两个IP地址

这里可能有个小bug,就是我需要重新配一次IP,这样这台虚拟机才不会出现两个IP地址,如下图目前这个正常的测试IP显示的是(复制)

重新输一遍之后就恢复正常了,也就是说原先的IP地址没有直接映射到我的VF上面,下图显示当前IP已经恢复正常了,只有一个6.6.6.0的IP

同样通过powershell命令“get-netadaptersriovvf”可以看到当前生成的VF信息
