英特尔(R)以太网自适应虚拟功能 Linux 基础驱动程序

英特尔以太网自适应虚拟功能 Linux 驱动程序。版权所有 (c) 2013-2018 英特尔公司。

目录

  • 概述

  • 识别您的适配器

  • 其他配置

  • 已知问题/故障排除

  • 支持

概述

此文件描述 iavf Linux 基础驱动程序。此驱动程序以前称为 i40evf。

iavf 驱动程序支持以下提到的虚拟功能设备,并且只能在运行 i40e 或更新版本的物理功能 (PF) 驱动程序(使用 CONFIG_PCI_IOV 编译)的内核上激活。 iavf 驱动程序需要启用 CONFIG_PCI_MSI。

加载 iavf 驱动程序的客户操作系统必须支持 MSI-X 中断。

识别您的适配器

此内核中的驱动程序与基于以下设备的设备兼容
  • 英特尔(R) XL710 X710 虚拟功能

  • 英特尔(R) X722 虚拟功能

  • 英特尔(R) XXV710 虚拟功能

  • 英特尔(R) 以太网自适应虚拟功能

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

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

其他功能和配置

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

  • 硬件邮箱用于 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)

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

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

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

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

注意

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

  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。 由于与 PF 地址数据不匹配,此类流量最终会在 TCP/IP 堆栈中更高处被丢弃。

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

已知问题/故障排除

绑定失败,VF 绑定到英特尔(R)以太网控制器 700 系列设备

如果您将虚拟功能 (VF) 绑定到基于英特尔(R) 以太网控制器 700 系列的设备,则当 VF 从属设备变为活动从属设备时可能会失败。 如果 VF 的 MAC 地址由设备的 PF(物理功能)设置,则当您添加从属设备或更改活动备份从属设备时,Linux 绑定会尝试将备份从属设备的 MAC 地址同步为与活动从属设备相同的 MAC 地址。 此时,Linux 绑定将失败。 如果 VF 的 MAC 地址不是由 PF 设置的,则不会发生此问题。

VM 和客户端之间未传递流量

如果虚拟功能 (VF,或虚拟网卡) 未处于受信任模式,且在 VF 上启用了欺骗检查,您可能无法在客户端系统和运行在单独主机上的虚拟机 (VM) 之间传递流量。请注意,这种情况可能发生在客户端、主机和客户操作系统之间的任何组合中。有关如何将 VF 设置为受信任模式的信息,请参阅本自述文件中的“VLAN 标记数据包导向”部分。有关设置欺骗检查的信息,请参阅本自述文件中的“MAC 和 VLAN 反欺骗功能”部分。

如果活动 VM 的 VF 已绑定到端口驱动程序,请勿卸载该驱动程序

如果带有活动虚拟机 (VM) 的虚拟功能 (VF) 已绑定到端口驱动程序,请勿卸载该端口的驱动程序。这样做会导致端口出现挂起。一旦 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

虚拟功能的 MAC 地址意外更改

如果未在主机中分配虚拟功能的 MAC 地址,则 VF (虚拟功能) 驱动程序将使用随机 MAC 地址。每次重新加载 VF 驱动程序时,此随机 MAC 地址可能会更改。您可以在主机中分配静态 MAC 地址。此静态 MAC 地址将在 VF 驱动程序重新加载后保留。

驱动程序缓冲区溢出修复

此驱动程序及未来版本中包含了解决 Intel SA-00069 中引用的 CVE-2016-8105 的修复程序 https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00069.html

同一以太网广播网络上的多个接口

由于 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 页面分配错误

在高负载情况下可能会出现“页面分配失败。顺序:0”错误。这是由 Linux 内核报告此压力状态的方式引起的。

支持

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

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