Hyper-V 网络驱动程序¶
兼容性¶
此驱动程序与 Windows Server 2012 R2、2016 和 Windows 10 兼容。
功能¶
校验和卸载¶
只要 Hyper-V 主机版本支持,netvsc 驱动程序就支持校验和卸载。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 上,使用 L4 哈希时,分片的 UDP 数据包丢失率很高。在这种情况下,建议使用 L3 哈希。
例如,对于 eth0 上的 IPv4 UDP
在哈希中包含 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 操作。