Hyper-V 网络驱动程序

兼容性

此驱动程序与 Windows Server 2012 R2、2016 和 Windows 10 兼容。

特性

校验和卸载

netvsc 驱动程序支持校验和卸载,只要 Hyper-V 主机版本支持。 Windows Server 2016 和 Azure 支持 IPv4 和 IPv6 的 TCP 和 UDP 校验和卸载。 Windows Server 2012 仅支持 TCP 的校验和卸载。

接收端缩放

Hyper-V 支持接收端缩放。对于 TCP 和 UDP,数据包可以根据 IP 地址和端口号分配到可用的队列中。

对于 TCP 和 UDP,我们可以通过 ethtool 命令在 L3 和 L4 之间切换哈希级别。 TCP/UDP over IPv4 和 v6 可以设置不同。默认哈希级别为 L4。我们目前只允许从访客内部切换 TX 哈希级别。

在 Azure 上,分片的 UDP 数据包在使用 L4 哈希时具有较高的丢包率。在这种情况下,建议使用 L3 哈希。

例如,对于 eth0 上的 UDP over IPv4

要在哈希中包含 UDP 端口号

ethtool -N eth0 rx-flow-hash udp4 sdfn

要在哈希中排除 UDP 端口号

ethtool -N eth0 rx-flow-hash udp4 sd

要显示 UDP 哈希级别

ethtool -n eth0 rx-flow-hash udp4

通用接收卸载,又名 GRO

该驱动程序支持 GRO,并且默认情况下已启用。 GRO 合并类似的数据包,并显着降低重 Rx 负载下的 CPU 使用率。

大型接收卸载 (LRO) 或接收端合并 (RSC)

该驱动程序支持 vSwitch 功能中的 LRO/RSC。它通过尽可能合并多个 TCP 段来减少每个数据包的处理开销。该功能默认在 Windows Server 2019 及更高版本上运行的 VM 上启用。可以通过 ethtool 命令更改它

ethtool -K eth0 lro on
ethtool -K eth0 lro off

SR-IOV 支持

Hyper-V 支持 SR-IOV 作为硬件加速选项。如果在 vSwitch 和访客配置中都启用了 SR-IOV,则虚拟函数 (VF) 设备将作为 PCI 设备传递给访客。在这种情况下,合成 (netvsc) 和 VF 设备在访客操作系统中都可见,并且两个 NIC 具有相同的 MAC 地址。

VF 由 netvsc 设备控制。当 VF 可用并启动时,netvsc 驱动程序将透明地将数据路径切换到 VF。网络状态(地址、防火墙等)应仅应用于 netvsc 设备;在大多数情况下,不应直接访问从属设备。例外情况是,如果需要一些特殊的队列规则或流方向,则应将它们直接应用于 VF 从属设备。

接收缓冲区

数据包被接收到探测设备时创建的接收区域中。接收区域被分成 MTU 大小的块,每个块可能包含一个或多个数据包。可以通过 ethtool Rx 环参数更改接收部分的数量。

有一个类似的发送缓冲区,用于聚合要发送的数据包。发送区域被分成块,通常为 6144 字节,每个部分可能包含一个或多个数据包。小数据包通常通过复制到发送缓冲区来传输。但是,如果缓冲区暂时耗尽,或者要传输的数据包是 LSO 数据包,则驱动程序将向主机提供指向 SKB 中数据的指针。这试图在数据复制的开销和重新映射 VM 内存以供主机访问的影响之间实现平衡。

XDP 支持

XDP(eXpress Data Path)是一项功能,可以在数据包到达 NIC 卡的早期阶段运行 eBPF 字节码。目标是提高数据包处理的性能,减少 SKB 分配和其他上层网络的开销。

hv_netvsc 以本机模式支持 XDP,并且还会透明地在关联的 VF NIC 上设置 XDP 程序。

在合成 NIC (netvsc) 上设置/取消设置 XDP 程序会自动传播到 VF NIC。不建议直接在 VF NIC 上设置/取消设置 XDP 程序,也不会传播到合成 NIC,并且可能会被合成 NIC 的设置覆盖。

XDP 程序无法在启用 LRO (RSC) 的情况下运行,因此您需要在运行 XDP 之前禁用 LRO

ethtool -K eth0 lro off

尚不支持 XDP_REDIRECT 操作。