适用于 Intel(R) 以太网自适应虚拟功能的 Linux 基本驱动程序¶
Intel 以太网自适应虚拟功能 Linux 驱动程序。Copyright(c) 2013-2018 Intel Corporation。
目录¶
概述
识别您的适配器
其他配置
已知问题/故障排除
支持
概述¶
此文件描述了 iavf Linux 基本驱动程序。此驱动程序以前称为 i40evf。
iavf 驱动程序支持下面提到的虚拟功能设备,并且只能在运行使用 CONFIG_PCI_IOV 编译的 i40e 或更新的物理功能 (PF) 驱动程序的内核上激活。 iavf 驱动程序需要启用 CONFIG_PCI_MSI。
加载 iavf 驱动程序的客户操作系统必须支持 MSI-X 中断。
识别您的适配器¶
- 此内核中的驱动程序与基于以下设备的设备兼容
Intel(R) XL710 X710 虚拟功能
Intel(R) X722 虚拟功能
Intel(R) XXV710 虚拟功能
Intel(R) 以太网自适应虚拟功能
为了获得最佳性能,请确保在您的设备上安装最新的 NVM/FW。
有关如何识别您的适配器,以及获取最新的 NVM/FW 镜像和 Intel 网络驱动程序的信息,请参阅 Intel 支持网站:https://www.intel.com/support
其他功能和配置¶
查看链接消息¶
如果发行版限制系统消息,则链接消息将不会显示到控制台。为了在您的控制台上看到网络驱动程序链接消息,请通过输入以下内容将 dmesg 设置为八
# dmesg -n 8
- 注意
此设置不会在重新启动后保存。
ethtool¶
驱动程序利用 ethtool 接口进行驱动程序配置和诊断,以及显示统计信息。此功能需要最新的 ethtool 版本。 在以下位置下载:https://linuxkernel.org.cn/pub/software/network/ethtool/
设置 VLAN 标签剥离¶
如果您有需要虚拟功能 (VF) 接收带有 VLAN 标签的数据包的应用程序,您可以禁用 VF 的 VLAN 标签剥离。 物理功能 (PF) 处理从 VF 发出的启用或禁用 VLAN 标签剥离的请求。 请注意,如果 PF 已将 VLAN 分配给 VF,则来自该 VF 的设置 VLAN 标签剥离的请求将被忽略。
要为 VF 启用/禁用 VLAN 标签剥离,请从运行 VF 的 VM 内发出以下命令
# ethtool -K <if_name> rxvlan on/off
或替代地
# ethtool --offload <if_name> rxvlan on/off
自适应虚拟功能¶
自适应虚拟功能 (AVF) 允许虚拟功能驱动程序或 VF 适应与其关联的物理功能驱动程序 (PF) 的不断变化的功能集。 这允许系统管理员更新 PF,而无需更新与其关联的所有 VF。 所有 AVF 都有一个共同的设备 ID 和品牌字符串。
AVF 具有一组称为“基本模式”的最小功能集,但可能会根据与 AVF 关联的 PF 中可用的功能提供其他功能。 以下是基本模式功能
4 个队列对 (QP) 和相关的 Tx/Rx 配置状态寄存器 (CSR)
i40e 描述符和环形格式
描述符写回完成
1 个控制队列,带有 i40e 描述符、CSR 和环形格式
5 个 MSI-X 中断向量和相应的 i40e CSR
1 个中断节流率 (ITR) 索引
每个 VF 1 个虚拟站接口 (VSI)
1 个流量类别 (TC),TC0
接收端缩放 (RSS),具有 64 个条目的间接表和密钥,通过 PF 配置
每个 VF 保留 1 个单播 MAC 地址
每个 VF 16 个 MAC 地址过滤器
无状态卸载 - 非隧道校验和
AVF 设备 ID
HW 邮箱用于 VF 到 PF 的通信(包括 Windows 上)
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) 数据包。
应用程序设备队列 (ADq)¶
应用程序设备队列 (ADq) 允许您将一个或多个队列专用于特定应用程序。 这可以减少指定应用程序的延迟,并允许每个应用程序限制 Tx 流量的速率。 请按照以下步骤设置 ADq。
要求
必须加载 sch_mqprio、act_mirred 和 cls_flower 模块
最新版本的 iproute2
如果另一个驱动程序(例如,DPDK)已设置云过滤器,则无法启用 ADQ
根据底层 PF 设备,启用以下功能时无法启用 ADQ
数据中心桥接 (DCB)
每个端口多个功能 (MFP)
边带过滤器
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:使用网络监视工具(如 ifstat
或 sar -n DEV [interval] [number of samples]
)验证带宽限制
- 注意
使用 mqprio 配置 TC 时,不支持通过 ethtool (ethtool -L) 设置通道。
在接口上启用 HW TC 卸载
# ethtool -K <interface> hw-tc-offload on
将 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。 由于此类流量与 PF 地址数据不匹配,因此最终将在 TCP/IP 堆栈中被更高地丢弃。
如果流量匹配指向不同 TC 的多个 TC 过滤器,则该流量将被复制并发送到所有匹配的 TC 队列。 当匹配多个过滤器时,硬件交换机将数据包镜像到 VSI 列表。
已知问题/故障排除¶
绑定失败,VF 绑定到 Intel(R) 以太网控制器 700 系列设备¶
如果您将虚拟功能 (VF) 绑定到基于 Intel(R) 以太网控制器 700 系列的设备,则 VF 从站在成为活动从站时可能会失败。 如果 VF 的 MAC 地址由设备的物理功能 (PF) 设置,则当您添加从站或更改活动-备份从站时,Linux 绑定会尝试将备份从站的 MAC 地址同步到与活动从站相同的 MAC 地址。 Linux 绑定此时将失败。 如果 VF 的 MAC 地址不是由 PF 设置的,则不会发生此问题。
流量未在 VM 和客户端之间传递¶
如果虚拟功能(VF 或虚拟 NIC)未处于受信任模式,并且在 VF 上启用了欺骗检查,您可能无法在客户端系统和在单独主机上运行的虚拟机 (VM) 之间传递流量。 请注意,这种情况可能发生在客户端、主机和访客操作系统中的任何组合中。 有关如何将 VF 设置为受信任模式的信息,请参阅此自述文档中的“VLAN 标签数据包控制”部分。 有关设置欺骗检查的信息,请参阅此自述文档中的“MAC 和 VLAN 反欺骗功能”部分。
如果 VF 与活动 VM 绑定,请勿卸载端口驱动程序¶
如果虚拟功能 (VF) 与活动虚拟机 (VM) 绑定,请勿卸载端口的驱动程序。 这样做会导致端口似乎挂起。 一旦 VM 关闭或以其他方式释放 VF,命令将完成。
使用四个流量类别失败¶
不要尝试在 iavf 驱动程序中保留超过三个流量类别。 这样做将无法设置任何流量类别,并将导致驱动程序将错误写入 stdout。 使用最多三个队列以避免此问题。
在 iavf 驱动程序删除时出现多个日志错误消息¶
如果您有多个 VF 并且您删除了 iavf 驱动程序,则以下日志错误的多个实例将被写入日志
Unable to send opcode 2 to PF, err I40E_ERR_QUEUE_EMPTY, aq_err ok
Unable to send the message to VF 2 aq_err 12
ARQ Overflow Error detected
虚拟机没有获得链接¶
如果虚拟机分配了多个虚拟端口,并且这些虚拟端口绑定到不同的物理端口,则您可能无法在所有虚拟端口上获得链接。 以下命令可能会解决此问题
# ethtool -r <PF>
其中 <PF> 是主机中的 PF 接口,例如:p5p1。 您可能需要多次运行该命令才能在所有虚拟端口上获得链接。
虚拟功能的 MAC 地址意外更改¶
如果在主机中未分配虚拟功能的 MAC 地址,则 VF(虚拟功能)驱动程序将使用随机 MAC 地址。 每次重新加载 VF 驱动程序时,此随机 MAC 地址可能会更改。 您可以在主机中分配静态 MAC 地址。 此静态 MAC 地址将在 VF 驱动程序重新加载后保留。
驱动程序缓冲区溢出修复¶
解决 Intel SA-00069 https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00069.html 中引用的 CVE-2016-8105 的修复程序包含在此驱动程序和未来版本中。
同一以太网广播网络上的多个接口¶
由于 Linux 上的默认 ARP 行为,不可能在同一以太网广播域(非分区交换机)中的两个 IP 网络上拥有一个按预期运行的系统。 所有以太网接口都将响应分配给系统的任何 IP 地址的 IP 流量。 这会导致不平衡的接收流量。
如果您的服务器中有多个接口,请通过输入以下内容打开 ARP 过滤
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
- 注意
此设置不会在重新启动后保存。 可以通过将以下行添加到文件 /etc/sysctl.conf 使配置更改永久生效
net.ipv4.conf.all.arp_filter = 1
另一种方法是将接口安装在单独的广播域中(在不同的交换机中或在分区为 VLAN 的交换机中)。
Rx 页面分配错误¶
压力下可能会发生“页面分配失败。 order:0”错误。 这是由 Linux 内核报告此压力状态的方式引起的。
支持¶
有关一般信息,请访问 Intel 支持网站:https://support.intel.com
如果在受支持的适配器的受支持内核上识别出已发布源代码的问题,请将与该问题相关的特定信息通过电子邮件发送至 intel-wired-lan@lists.osuosl.org。