英特尔(R)以太网控制器 700 系列 Linux 基本驱动程序

英特尔 40 千兆 Linux 驱动程序。版权所有(c) 1999-2018 英特尔公司。

目录

  • 概述

  • 识别您的适配器

  • 英特尔(R)以太网流导向器

  • 其他配置

  • 已知问题

  • 支持

可以使用 ethtool、lspci 和 ifconfig 获取驱动程序信息。有关更新 ethtool 的说明,请参阅本文档后面的“其他配置”部分。

有关硬件要求的问题,请参阅您的英特尔适配器随附的文档。列出的所有硬件要求均适用于 Linux。

识别您的适配器

该驱动程序与基于以下设备的设备兼容

  • 英特尔(R)以太网控制器 X710

  • 英特尔(R)以太网控制器 XL710

  • 英特尔(R)以太网网络连接 X722

  • 英特尔(R)以太网控制器 XXV710

为了获得最佳性能,请确保您的设备上安装了最新的 NVM/FW。

有关如何识别您的适配器以及最新的 NVM/FW 映像和英特尔网络驱动程序的信息,请参阅英特尔支持网站:https://www.intel.com/support

SFP+ 和 QSFP+ 设备

有关支持的介质的信息,请参阅此文档:https://www.intel.com/content/dam/www/public/us/en/documents/release-notes/xl710-ethernet-controller-feature-matrix.pdf

注意:某些基于英特尔(R)以太网控制器 700 系列的适配器仅支持英特尔以太网光模块。在这些适配器上,不支持其他模块,并且它们将无法工作。在所有情况下,英特尔都建议使用英特尔以太网光模块;其他模块可能可以工作,但未经过英特尔验证。有关支持的介质类型,请联系英特尔。

注意:对于基于英特尔(R)以太网控制器 700 系列的连接,支持取决于您的系统主板。请向您的供应商咨询详细信息。

注意:在没有足够气流来冷却适配器和光模块的系统中,您必须使用高温光模块。

虚拟功能 (VF)

使用 sysfs 启用 VF。例如

#echo $num_vf_enabled > /sys/class/net/$dev/device/sriov_numvfs #enable VFs
#echo 0 > /sys/class/net/$dev/device/sriov_numvfs #disable VFs

例如,以下说明将在 VLAN 10 上配置 PF eth0 和第一个 VF

$ ip link set dev eth0 vf 0 vlan 10

VLAN 标签数据包控制

允许您将带有特定 VLAN 标签的所有数据包发送到特定的 SR-IOV 虚拟功能 (VF)。此外,此功能允许您将特定的 VF 指定为受信任的,并允许该受信任的 VF 在物理功能 (PF) 上请求选择性混杂模式。

要将 VF 设置为受信任或不受信任,请在 Hypervisor 中输入以下命令

# ip link set dev eth0 vf 1 trust [on|off]

一旦 VF 被指定为受信任的,请在 VM 中使用以下命令将 VF 设置为混杂模式。

For promiscuous all:
#ip link set eth2 promisc on
Where eth2 is a VF interface in the VM

For promiscuous Multicast:
#ip link set eth2 allmulticast on
Where eth2 is a VF interface in the VM

注意:默认情况下,ethtool priv-flag vf-true-promisc-support 设置为“off”,这意味着 VF 的混杂模式将受到限制。要将 VF 的混杂模式设置为真正的混杂模式并允许 VF 查看所有入口流量,请使用以下命令

#ethtool -set-priv-flags p261p1 vf-true-promisc-support on

vf-true-promisc-support priv-flag 不会启用混杂模式;相反,它指定当您使用上面的 ip link 命令启用混杂模式时,您将获得哪种类型的混杂模式(有限或真正的)。请注意,这是一个影响整个设备的全局设置。但是,vf-true-promisc-support priv-flag 仅暴露给设备的第一个 PF。无论 vf-true-promisc-support 设置如何,PF 始终处于有限的混杂模式(除非它处于 MFP 模式)。

现在在 VF 接口上添加 VLAN 接口

#ip link add link eth2 name eth2.100 type vlan id 100

请注意,您将 VF 设置为混杂模式和添加 VLAN 接口的顺序无关紧要(您可以先执行任何一个)。此示例中的最终结果是 VF 将获得所有标记为 VLAN 100 的流量。

英特尔(R)以太网流导向器

英特尔以太网流导向器执行以下任务

  • 根据接收数据包的流向将其定向到不同的队列。

  • 能够严格控制平台中流的路由。

  • 匹配流和 CPU 内核以实现流亲和性。

  • 支持多个参数,以实现灵活的流分类和负载平衡(仅在 SFP 模式下)。

注意:Linux i40e 驱动程序支持以下流类型:IPv4、TCPv4 和 UDPv4。对于给定的流类型,它支持 IP 地址(源或目标)和 UDP/TCP 端口(源和目标)的有效组合。例如,您只能提供源 IP 地址、源 IP 地址和目标端口,或者这四个参数中的一个或多个的任意组合。

注意:Linux i40e 驱动程序允许您通过使用 ethtool user-def 和 mask 字段,基于用户定义的灵活的两字节模式和偏移量来过滤流量。用户定义的灵活过滤器仅支持 L3 和 L4 流类型。对于给定的流类型,您必须清除所有英特尔以太网流导向器过滤器,然后才能更改输入集(对于该流类型)。

要启用或禁用英特尔以太网流导向器

# ethtool -K ethX ntuple <on|off>

禁用 ntuple 过滤器时,所有用户编程的过滤器都会从驱动程序缓存和硬件中刷新。重新启用 ntuple 时,必须重新添加所有需要的过滤器。

要添加将数据包定向到队列 2 的过滤器,请使用 -U 或 -N 开关

# ethtool -N ethX flow-type tcp4 src-ip 192.168.10.1 dst-ip \
192.168.10.2 src-port 2000 dst-port 2001 action 2 [loc 1]

要仅使用源和目标 IP 地址设置过滤器

# ethtool -N ethX flow-type tcp4 src-ip 192.168.10.1 dst-ip \
192.168.10.2 action 2 [loc 1]

要查看当前存在的过滤器列表

# ethtool <-u|-n> ethX

应用程序定向路由 (ATR) 完美过滤器

当内核处于多传输队列模式时,默认启用 ATR。当 TCP-IP 流开始时,会添加 ATR 英特尔以太网流导向器过滤器规则,并在流结束时删除该规则。当从 ethtool (Sideband 过滤器) 添加 TCP-IP 英特尔以太网流导向器规则时,驱动程序会关闭 ATR。要重新启用 ATR,可以使用 ethtool -K 选项禁用 Sideband。例如

ethtool -K [adapter] ntuple [off|on]

如果在重新启用 ATR 后重新启用了 sideband,则 ATR 将保持启用状态,直到添加 TCP-IP 流。当所有 TCP-IP sideband 规则被删除时,ATR 会自动重新启用。

与 ATR 规则匹配的数据包在 ethtool 中的 fdir_atr_match 统计信息中计数,该统计信息还可用于验证 ATR 规则是否仍然存在。

Sideband 完美过滤器

Sideband 完美过滤器用于定向匹配指定特征的流量。它们通过 ethtool 的 ntuple 接口启用。要添加新的过滤器,请使用以下命令

ethtool -U <device> flow-type <type> src-ip <ip> dst-ip <ip> src-port <port> \
dst-port <port> action <queue>
其中

<设备> - 要编程的以太网设备 <类型> - 可以是 ip4、tcp4、udp4 或 sctp4 <ip> - 要匹配的 IP 地址 <端口> - 要匹配的端口号 <队列> - 要将流量定向到的队列 (-1 会丢弃匹配的流量)

使用以下命令显示所有活动的过滤器

ethtool -u <device>

使用以下命令删除过滤器

ethtool -U <device> delete <N>

其中 <N> 是打印所有活动过滤器时显示的过滤器 ID,也可以在使用 “loc <N>” 添加过滤器时指定。

以下示例匹配从 192.168.0.1 端口 5300 发送的、定向到 192.168.0.5 端口 80 的 TCP 流量,并将其发送到队列 7

ethtool -U enp130s0 flow-type tcp4 src-ip 192.168.0.1 dst-ip 192.168.0.5 \
src-port 5300 dst-port 80 action 7

对于每种流类型,编程的过滤器都必须具有相同的匹配输入集。例如,发出以下两个命令是可以接受的

ethtool -U enp130s0 flow-type ip4 src-ip 192.168.0.1 src-port 5300 action 7
ethtool -U enp130s0 flow-type ip4 src-ip 192.168.0.5 src-port 55 action 10

但是,发出接下来的两个命令是不可接受的,因为第一个命令指定了 src-ip,第二个命令指定了 dst-ip

ethtool -U enp130s0 flow-type ip4 src-ip 192.168.0.1 src-port 5300 action 7
ethtool -U enp130s0 flow-type ip4 dst-ip 192.168.0.5 src-port 55 action 10

第二个命令将失败并显示错误。您可以使用不同的值编程具有相同字段的多个过滤器,但是,在一个设备上,您不能使用不同的匹配字段编程两个 tcp4 过滤器。

i40e 驱动程序不支持匹配字段的子部分,因此不支持部分掩码字段。

该驱动程序还支持匹配数据包有效负载中的用户定义数据。可以使用 ethtool 命令的“user-def”字段按以下方式指定此灵活数据

31 28 24 20 16

15 12 8 4 0

数据包有效负载中的偏移量

2 字节的灵活数据

例如,

... user-def 0x4FFFF ...

告诉过滤器查看有效负载的第 4 个字节,并将该值与 0xFFFF 进行匹配。偏移量基于有效负载的开头,而不是数据包的开头。因此

flow-type tcp4 ... user-def 0x8BEAF ...

将匹配 TCP/IPv4 数据包,该数据包在 TCP/IPv4 有效负载的第 8 个字节中有值 0xBEAF。

请注意,ICMP 标头解析为 4 字节标头和 4 字节有效负载。因此,要匹配有效负载的第一个字节,您实际上必须向偏移量添加 4 个字节。另请注意,ip4 过滤器既匹配 ICMP 帧,也匹配原始(未知)ip4 帧,其中有效负载将是 IP4 帧的 L3 有效负载。

最大偏移量为 64。硬件将仅从有效负载读取最多 64 字节的数据。偏移量必须是偶数,因为灵活数据为 2 字节长,并且必须与数据包有效负载的字节 0 对齐。

用户定义的灵活偏移量也被视为输入集的一部分,并且不能为相同类型的多个过滤器单独编程。但是,灵活数据不是输入集的一部分,并且多个过滤器可以使用相同的偏移量但匹配不同的数据。

要创建将流量定向到特定虚拟功能的过滤器,请使用“action”参数。将操作指定为 64 位值,其中低 32 位表示队列号,而接下来的 8 位表示哪个 VF。请注意,0 是 PF,因此 VF 标识符偏移 1。例如

... action 0x800000002 ...

指定将流量定向到虚拟功能 7(8 减 1)到该 VF 的队列 2。

请注意,这些过滤器不会破坏内部路由规则,并且不会路由否则不会发送到指定虚拟功能的流量。

巨型帧

通过将最大传输单元 (MTU) 更改为大于默认值 1500 的值,可以启用巨型帧支持。

使用 ifconfig 命令来增加 MTU 大小。例如,输入以下命令,其中 <x> 是接口编号

ifconfig eth<x> mtu 9000 up

或者,您可以使用 ip 命令,如下所示

ip link set mtu 9000 dev eth<x>
ip link set up dev eth<x>

此设置不会在重启后保存。可以通过在文件中添加“MTU=9000”来使设置更改永久生效

/etc/sysconfig/network-scripts/ifcfg-eth<x> // for RHEL
/etc/sysconfig/network/<config_file> // for SLES

注意:巨型帧的最大 MTU 设置为 9702。此值与最大巨型帧大小 9728 字节一致。

注意:此驱动程序将尝试使用多个页面大小的缓冲区来接收每个巨型数据包。这应该有助于在分配接收数据包时避免缓冲区饥饿问题。

ethtool

该驱动程序利用 ethtool 接口进行驱动程序配置和诊断,并显示统计信息。此功能需要最新的 ethtool 版本。请从以下地址下载:https://linuxkernel.org.cn/pub/software/network/ethtool/

支持的 ethtool 过滤命令和选项

-n --show-nfc

检索接收网络流分类配置。

rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6

检索指定网络流量类型的哈希选项。

-N --config-nfc

配置接收网络流分类。

rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 m|v|t|s|d|f|n|r...

配置指定网络流量类型的哈希选项。

udp4 IPv4 上的 UDP udp6 IPv6 上的 UDP

f 对 Rx 数据包的第 4 层报头中的字节 0 和 1 进行哈希。n 对 Rx 数据包的第 4 层报头中的字节 2 和 3 进行哈希。

速度和双工配置

在解决速度和双工配置问题时,您需要区分基于铜缆的适配器和基于光纤的适配器。

在默认模式下,使用铜缆连接的 Intel(R) 以太网网络适配器将尝试与其链路伙伴进行自动协商,以确定最佳设置。如果适配器无法使用自动协商与链路伙伴建立连接,您可能需要手动将适配器和链路伙伴配置为相同的设置,以建立连接并传递数据包。只有在尝试与不支持自动协商或已被强制设置为特定速度或双工模式的旧交换机连接时,才需要这样做。您的链路伙伴必须与您选择的设置匹配。无法强制使用 1 Gbps 及更高的速度。使用自动协商通告设置手动为 1 Gbps 及更高的设备设置。

注意:您无法为基于 Intel(R) 以太网网络适配器 XXV710 的设备设置速度。

速度、双工和自动协商通告通过 ethtool 实用程序进行配置。

警告:只有经验丰富的网络管理员才应强制设置速度和双工或手动更改自动协商通告。交换机上的设置必须始终与适配器设置匹配。如果您的适配器配置与交换机不同,则适配器性能可能会受到影响,或者您的适配器可能无法工作。

但是,使用基于光纤的连接的 Intel(R) 以太网网络适配器不会尝试与其链路伙伴进行自动协商,因为这些适配器仅在全双工模式下以其本机速度运行。

NAPI

i40e 驱动程序支持 NAPI(Rx 轮询模式)。

有关详细信息,请参见 Documentation/networking/napi.rst

流控制

可以使用 ethtool 配置以太网流控制 (IEEE 802.3x),以启用 i40e 的接收和发送暂停帧。启用发送时,当接收数据包缓冲区超过预定义的阈值时,会生成暂停帧。启用接收时,当收到暂停帧时,发送单元将暂停指定的时间延迟。

注意:您必须具有支持流控制的链路伙伴。

默认情况下,流控制处于启用状态。

使用 ethtool 更改流控制设置。

要启用或禁用 Rx 或 Tx 流控制

ethtool -A eth? rx <on|off> tx <on|off>

注意:仅当禁用自动协商时,此命令才会启用或禁用流控制。如果启用自动协商,则此命令会更改用于与链路伙伴进行自动协商的参数。

要启用或禁用自动协商

ethtool -s eth? autoneg <on|off>

注意:流控制自动协商是链路自动协商的一部分。根据您的设备,您可能无法更改自动协商设置。

RSS 哈希流

允许您为每种流类型设置哈希字节,以及接收端缩放 (RSS) 哈希字节配置的一个或多个选项的任意组合。

# ethtool -N <dev> rx-flow-hash <type> <option>
其中 <type> 是

tcp4 表示 IPv4 上的 TCP udp4 表示 IPv4 上的 UDP tcp6 表示 IPv6 上的 TCP udp6 表示 IPv6 上的 UDP

并且 <option> 是以下一个或多个

s 对 Rx 数据包的 IP 源地址进行哈希。d 对 Rx 数据包的 IP 目标地址进行哈希。f 对 Rx 数据包的第 4 层报头中的字节 0 和 1 进行哈希。n 对 Rx 数据包的第 4 层报头中的字节 2 和 3 进行哈希。

MAC 和 VLAN 反欺骗功能

当恶意驱动程序尝试发送欺骗数据包时,该数据包将被硬件丢弃,而不会被发送。注意:可以为特定的虚拟功能 (VF) 禁用此功能

ip link set <pf dev> vf <vf id> spoofchk {off|on}

IEEE 1588 精确时间协议 (PTP) 硬件时钟 (PHC)

精确时间协议 (PTP) 用于同步计算机网络中的时钟。PTP 支持因支持此驱动程序的英特尔设备而异。使用“ethtool -T <netdev name>”获取设备支持的 PTP 功能的明确列表。

IEEE 802.1ad (QinQ) 支持

IEEE 802.1ad 标准(非正式名称为 QinQ)允许在单个以太网帧中使用多个 VLAN ID。VLAN ID 有时称为“标签”,因此多个 VLAN ID 称为“标签堆栈”。标签堆栈允许 L2 隧道,并能够在特定的 VLAN ID 中隔离流量,以及其他用途。

以下是配置 802.1ad (QinQ) 的示例

ip link add link eth0 eth0.24 type vlan proto 802.1ad id 24
ip link add link eth0.24 eth0.24.371 type vlan proto 802.1Q id 371

其中“24”和“371”是示例 VLAN ID。

备注

接收校验和卸载、云过滤器和 VLAN 加速不支持 802.1ad (QinQ) 数据包。

VXLAN 和 GENEVE 覆盖 HW 卸载

虚拟可扩展 LAN (VXLAN) 允许您在 L3 网络上扩展 L2 网络,这在虚拟化或云环境中可能很有用。某些 Intel(R) 以太网网络设备会执行 VXLAN 处理,从而将其从操作系统中卸载。这会降低 CPU 使用率。

VXLAN 卸载由 ethtool 提供的 Tx 和 Rx 校验和卸载选项控制。也就是说,如果启用了 Tx 校验和卸载,并且适配器具有该功能,则也会启用 VXLAN 卸载。

对 VXLAN 和 GENEVE HW 卸载的支持取决于内核对 HW 卸载功能的支持。

每个端口的多个功能

某些基于 Intel 以太网控制器 X710/XL710 的适配器支持单个物理端口上的多个功能。通过系统设置/BIOS 配置这些功能。

最小 TX 带宽是分区将接收到的保证最小数据传输带宽,以完整物理端口链路速度的百分比表示。分区获得的带宽永远不会低于您指定的级别。

最小带宽值的范围为:1 到 ((100 减去物理端口上的分区数) 加 1)。例如,如果一个物理端口有 4 个分区,则范围为:1 到 ((100 - 4) + 1 = 97)

最大带宽百分比表示分配给分区的最大发送带宽,以完整物理端口链路速度的百分比表示。接受的值范围为 1-100。该值用作限制器,如果您选择任何一个特定功能都不能占用端口 100% 的带宽(如果可用)。最大带宽的所有值的总和不受限制,因为永远不会使用超过端口 100% 的带宽。

注意:当启用每个端口多个功能 (MFP) 和 SR-IOV 时,X710/XXV710 设备无法启用最大 VF (64)。来自 i40e 的错误日志记录,内容为“VF N 的 add vsi 失败,aq_err 16”。要解决此问题,请启用少于 64 个虚拟功能 (VF)。

数据中心桥接 (DCB)

DCB 是硬件中的配置服务质量实现。它使用 VLAN 优先级标签 (802.1p) 来过滤流量。这意味着可以将流量过滤为 8 个不同的优先级。它还支持优先级流控制 (802.1Qbb),该控制可以限制或消除网络压力期间丢弃的数据包数量。可以将带宽分配给每个优先级,这是在硬件级别强制执行的 (802.1Qaz)。

适配器固件分别根据 802.1AB 和 802.1Qaz 实现 LLDP 和 DCBX 协议代理。基于固件的 DCBX 代理仅在愿意模式下运行,并且可以接受来自支持 DCBX 的对等方的设置。不支持通过 dcbtool/lldptool 对 DCBX 参数进行软件配置。

注意:可以通过设置私有标志 disable-fw-lldp 来禁用固件 LLDP。

i40e 驱动程序实现 DCB netlink 接口层,以允许用户空间与驱动程序通信并查询端口的 DCB 配置。

注意:内核假定 TC0 可用,并且如果 TC0 不可用,则会禁用设备上的优先级流控制 (PFC)。要解决此问题,请在交换机上设置 DCB 时确保启用了 TC0。

中断速率限制

有效范围

0-235(0=无限制)

Intel(R) Ethernet Controller XL710 系列支持中断速率限制机制。用户可以通过 ethtool 控制中断之间的微秒数。

语法

# ethtool -C ethX rx-usecs-high N

0-235 微秒的范围提供了每秒 4,310 到 250,000 次中断的有效范围。rx-usecs-high 的值可以在同一 ethtool 命令中独立于 rx-usecs 和 tx-usecs 进行设置,并且也独立于自适应中断调节算法。底层硬件支持 4 微秒间隔的粒度,因此相邻的值可能会导致相同的中断速率。

一个可能的用例是以下情况

# ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs-high 20 rx-usecs \
  5 tx-usecs 5

上述命令将禁用自适应中断调节,并允许在指示接收或发送完成之前最多等待 5 微秒。然而,它不会导致每秒高达 200,000 次的中断,而是通过 rx-usecs-high 参数将每秒的总中断次数限制为 50,000 次。

性能优化

驱动程序的默认设置旨在适应各种工作负载,但如果需要进一步优化,我们建议尝试以下设置。

注意:为了在处理小 (64B) 帧大小时获得更好的性能,请尝试在 BIOS 中启用超线程,以便增加系统中的逻辑核心数量,并随后增加适配器可用的队列数量。

虚拟化环境

1. 通过使用包含的 virt_perf_default 脚本或以 root 身份运行以下命令,在两端禁用 XPS

for file in `ls /sys/class/net/<ethX>/queues/tx-*/xps_cpus`;
do echo 0 > $file; done

2. 在虚拟机中使用适当的机制 (vcpupin),将 CPU 固定到单独的 lcpu,确保使用设备 local_cpulist 中包含的一组 CPU:/sys/class/net/<ethX>/device/local_cpulist。

3. 在虚拟机中配置尽可能多的 Rx/Tx 队列。不要依赖默认的 1 设置。

非虚拟化环境

通过禁用 irqbalance 服务并使用包含的 set_irq_affinity 脚本,将适配器的 IRQ 固定到特定的核心。有关更多选项,请参阅脚本的帮助文本。

  • 以下设置会将 IRQ 均匀地分配到所有核心

    # scripts/set_irq_affinity -x all <interface1> , [ <interface2>, ... ]
    
  • 以下设置会将 IRQ 分配到适配器本地的所有核心(相同的 NUMA 节点)

    # scripts/set_irq_affinity -x local <interface1> ,[ <interface2>, ... ]
    

对于 CPU 密集型工作负载,我们建议将 IRQ 固定到所有核心。

对于 IP 转发:禁用自适应 ITR 并使用 ethtool 降低每个队列的 Rx 和 Tx 中断。

  • 将 rx-usecs 和 tx-usecs 设置为 125 将把每个队列的中断限制在每秒大约 8000 次中断。

# ethtool -C <interface> adaptive-rx off adaptive-tx off rx-usecs 125 \
  tx-usecs 125

为了降低 CPU 利用率:禁用自适应 ITR 并使用 ethtool 降低每个队列的 Rx 和 Tx 中断。

  • 将 rx-usecs 和 tx-usecs 设置为 250 将把每个队列的中断限制在每秒大约 4000 次中断。

# ethtool -C <interface> adaptive-rx off adaptive-tx off rx-usecs 250 \
  tx-usecs 250

为了降低延迟:禁用自适应 ITR 并通过使用 ethtool 将 Rx 和 Tx 设置为 0 来禁用 ITR。

# ethtool -C <interface> adaptive-rx off adaptive-tx off rx-usecs 0 \
  tx-usecs 0

应用程序设备队列 (ADq)

应用程序设备队列 (ADq) 允许您将一个或多个队列专用于特定的应用程序。这可以减少指定应用程序的延迟,并允许按应用程序限制 Tx 流量的速率。按照以下步骤设置 ADq。

1. 创建流量类别 (TC)。每个接口最多可以创建 8 个 TC。整形器 bw_rlimit 参数是可选的。

示例:设置两个 tc,tc0 和 tc1,每个 tc 有 16 个队列,tc0 的最大 tx 速率设置为 1Gbit,tc1 的最大 tx 速率设置为 3Gbit。

# tc qdisc add dev <interface> root mqprio num_tc 2 map 0 0 0 0 1 1 1 1
queues 16@0 16@16 hw 1 mode channel shaper bw_rlimit min_rate 1Gbit 2Gbit
max_rate 1Gbit 3Gbit

map:最多 16 个优先级的优先级映射到 tc(例如,map 0 0 0 0 1 1 1 1 设置优先级 0-3 使用 tc0,优先级 4-7 使用 tc1)

queues:对于每个 tc,<队列数量>@<偏移量>(例如,queues 16@0 16@16 将 16 个队列分配给偏移量为 0 的 tc0,将 16 个队列分配给偏移量为 16 的 tc1。所有 tc 的最大队列总数为 64 或核心数量,以较小者为准。)

hw 1 mode channel:将 'hw' 设置为 1 的 'channel' 是 mqprio 中的一种新的硬件卸载模式,它充分利用了 mqprio 选项、TC、队列配置和 QoS 参数。

shaper bw_rlimit:对于每个 tc,设置最小和最大带宽速率。总数必须等于或小于端口速度。

例如:min_rate 1Gbit 3Gbit:使用网络监控工具(如 ifstatsar -n DEV [interval] [number of samples])验证带宽限制

  1. 在接口上启用 HW TC 卸载

    # ethtool -K <interface> hw-tc-offload on
    
  2. 将 TC 应用于接口的入口 (RX) 流

    # tc qdisc add dev <interface> ingress
    
备注
  • 从 iproute2 <pathtoiproute2>/tc/ 目录运行所有 tc 命令。

  • ADq 与云过滤器不兼容。

  • 当使用 mqprio 配置 TC 时,不支持通过 ethtool (ethtool -L) 设置通道。

  • 您必须拥有最新版本的 iproute2

  • 需要 NVM 6.01 或更高版本。

  • 当启用以下任何功能时,无法启用 ADq:数据中心桥接 (DCB)、每个端口的多个功能 (MFP) 或边带过滤器。

  • 如果另一个驱动程序(例如,DPDK)已设置云过滤器,则无法启用 ADq。

  • ADq 中不支持隧道过滤器。如果封装的数据包以非隧道模式到达,则将对内部标头进行过滤。例如,对于非隧道模式下的 VXLAN 流量,PCTYPE 被识别为 VXLAN 封装数据包,忽略外部标头。因此,会匹配内部标头。

  • 如果 PF 上的 TC 过滤器匹配通过 VF(在 PF 上)的流量,则该流量将被路由到 PF 的相应队列,而不会传递到 VF。此类流量最终会在 TCP/IP 堆栈中被丢弃,因为它与 PF 地址数据不匹配。

  • 如果流量匹配指向不同 TC 的多个 TC 过滤器,则该流量将被复制并发送到所有匹配的 TC 队列。当匹配多个过滤器时,硬件交换机将数据包镜像到 VSI 列表。

已知问题/故障排除

注意:基于 Intel(R) Ethernet Network Connection X722 的 1 Gb 设备不支持以下功能

  • 数据中心桥接 (DCB)

  • QOS

  • VMQ

  • SR-IOV

  • 任务封装卸载 (VXLAN、NVGRE)

  • 节能以太网 (EEE)

  • 自动介质检测

当设备驱动程序和 DPDK 共享设备时出现意外问题

当 i40e 设备处于多驱动程序模式并且内核驱动程序和 DPDK 驱动程序共享设备时,可能会出现意外问题。这是因为对全局 NIC 资源的访问在多个驱动程序之间没有同步。对全局 NIC 配置的任何更改(写入全局寄存器、通过 AQ 设置全局配置或更改交换机模式)都会影响设备上的所有端口和驱动程序。使用 “multi-driver” 模块参数加载 DPDK 可以缓解一些问题。

在交换机上设置 DCB 时必须启用 TC0

内核假定 TC0 可用,如果 TC0 不可用,则会禁用设备上的优先级流控制 (PFC)。要解决此问题,请确保在交换机上设置 DCB 时启用 TC0。

支持

有关一般信息,请访问 Intel 支持网站:https://www.intel.com/support/

如果在支持的适配器的支持的内核上发布的源代码中发现问题,请将与该问题相关的特定信息通过电子邮件发送至 intel-wired-lan@lists.osuosl.org