Intel(R) Ethernet Controller 700 系列的 Linux 基本驱动

Intel 40 Gigabit Linux 驱动。版权所有(c) 1999-2018 Intel Corporation。

目录

  • 概述

  • 识别您的适配器

  • Intel(R) 以太网流导向器

  • 附加配置

  • 已知问题

  • 支持

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

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

识别您的适配器

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

  • Intel(R) 以太网控制器 X710

  • Intel(R) 以太网控制器 XL710

  • Intel(R) 以太网网络连接 X722

  • Intel(R) 以太网控制器 XXV710

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

有关如何识别您的适配器以及最新的 NVM/FW 映像和 Intel 网络驱动程序的信息,请访问 Intel 支持网站: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

注意:某些基于 Intel(R) 以太网控制器 700 系列的适配器仅支持 Intel 以太网光模块。在这些适配器上,其他模块不受支持且无法运行。在所有情况下,Intel 建议使用 Intel 以太网光模块;其他模块可能运行但未经 Intel 验证。请联系 Intel 获取支持的介质类型。

注意:对于基于 Intel(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

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

$ ip link set dev eth0 vf 0 vlan 10

VLAN 标签数据包导向

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

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

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

一旦 VF 被指定为可信,在虚拟机中使用以下命令将 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 私有标志不会启用混杂模式;相反,它指定了当您使用上述 ip link 命令启用混杂模式时将获得哪种类型的混杂模式(有限或真实)。请注意,这是一个影响整个设备的全局设置。然而,vf-true-promisc-support 私有标志仅暴露给设备的第一个 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 的流量。

Intel(R) 以太网流导向器

Intel 以太网流导向器执行以下任务:

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

  • 实现对平台中流路由的严格控制。

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

  • 支持多种参数,用于灵活的流分类和负载均衡(仅限 SFP 模式)。

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

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

启用或禁用 Intel 以太网流导向器:

# 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 Intel 以太网流导向器过滤规则,并在流结束时删除。当通过 ethtool (Sideband filter) 添加 TCP-IP Intel 以太网流导向器规则时,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 负载中偏移 8 个字节处具有值 0xBEAF 的 TCP/IPv4 数据包。

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

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

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

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

... action 0x800000002 ...

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

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

设置 mdd-auto-reset-vf 私有标志

当 mdd-auto-reset-vf 私有标志设置为“on”时,如果检测到格式错误描述符,问题 VF 将自动重置。如果该标志设置为“off”,问题 VF 将被禁用。

使用 ethtool 查看和设置 mdd-auto-reset-vf,如下所示:

ethtool --show-priv-flags ethX
ethtool --set-priv-flags ethX mdd-auto-reset-vf [on|off]

巨型帧

通过将最大传输单元 (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>

此设置在重启后不会保存。可以通过在文件 `/etc/sysconfig/network-scripts/ifcfg-ethX` 中添加“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 对接收数据包的第四层报头的字节 0 和 1 进行哈希。n 对接收数据包的第四层报头的字节 2 和 3 进行哈希。

速度和双工配置

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

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

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

速度、双工和自动协商广告通过 ethtool 工具配置。

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

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

NAPI

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

有关更多信息,请参阅Documentation/networking/napi.rst

流控制

以太网流控制 (IEEE 802.3x) 可以使用 ethtool 配置,以启用 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 对接收数据包的 IP 源地址进行哈希。d 对接收数据包的 IP 目标地址进行哈希。f 对接收数据包的第四层报头的字节 0 和 1 进行哈希。n 对接收数据包的第四层报头的字节 2 和 3 进行哈希。

MAC 和 VLAN 防欺骗功能

当恶意驱动程序试图发送欺骗数据包时,硬件会将其丢弃而不进行传输。注意:此功能可以针对特定的虚拟功能 (VF) 禁用。

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

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

精密时间协议 (PTP) 用于同步计算机网络中的时钟。PTP 支持在支持此驱动程序的 Intel 设备中有所不同。使用“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。

注意事项:

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

VXLAN 和 GENEVE 覆盖硬件卸载

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

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

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

每端口多功能

某些基于 Intel Ethernet Controller 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 会记录一个错误,显示“add vsi failed for VF N, 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) 以太网控制器 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 微秒的时间来指示接收或传输完成。然而,它通过 rx-usecs-high 参数将每秒总中断限制在 50,000 次,而不是高达 200,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

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

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

应用设备队列 (ADq)

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

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

示例:设置两个 TC,tc0 和 tc1,每个有 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,<num queues>@<offset>(例如,queues 16@0 16@16 将 16 个队列分配给 tc0 的偏移量 0,16 个队列分配给 tc1 的偏移量 16。所有 TC 的最大总队列数是 64 或 CPU 核心数,取两者中较小的一个。)

hw 1 mode channel:在 mqprio 中,‘hw’ 设置为 1 的‘channel’是一种新的硬件卸载模式,它充分利用了 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) 或 Sideband 过滤器。

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

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

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

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

已知问题/故障排除

注意:基于 Intel(R) 以太网网络连接 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