Marvell(Aquantia) AQtion 驱动程序

适用于 aQuantia 多千兆位 PCI Express 以太网适配器系列

识别您的适配器

此版本中的驱动程序与基于 AQC-100、AQC-107、AQC-108 的以太网适配器兼容。

SFP+ 设备(适用于基于 AQC-100 的适配器)

此版本已使用无源直连电缆 (DAC) 和 SFP+/LC 光收发器进行测试。

配置

巨型帧

该驱动程序支持所有适配器的巨型帧。通过将 MTU 更改为大于默认值 1500 的值来启用巨型帧支持。MTU 的最大值为 16000。使用 ip 命令增加 MTU 大小。例如

ip link set mtu 16000 dev enp1s0

ethtool

该驱动程序利用 ethtool 接口进行驱动程序配置和诊断,以及显示统计信息。此功能需要最新的 ethtool 版本。

NAPI

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

支持的 ethtool 选项

查看适配器设置

ethtool <ethX>

输出示例

Settings for enp1s0:
  Supported ports: [ TP ]
  Supported link modes:   100baseT/Full
                          1000baseT/Full
                          10000baseT/Full
                          2500baseT/Full
                          5000baseT/Full
  Supported pause frame use: Symmetric
  Supports auto-negotiation: Yes
  Supported FEC modes: Not reported
  Advertised link modes:  100baseT/Full
                          1000baseT/Full
                          10000baseT/Full
                          2500baseT/Full
                          5000baseT/Full
  Advertised pause frame use: Symmetric
  Advertised auto-negotiation: Yes
  Advertised FEC modes: Not reported
  Speed: 10000Mb/s
  Duplex: Full
  Port: Twisted Pair
  PHYAD: 0
  Transceiver: internal
  Auto-negotiation: on
  MDI-X: Unknown
  Supports Wake-on: g
  Wake-on: d
  Link detected: yes

注意

只有 linux 内核 > 4.10 才会显示 AQrate 速度(2.5/5 Gb/s)。但您仍然可以使用这些速度

ethtool -s eth0 autoneg off speed 2500

查看适配器信息

ethtool -i <ethX>

输出示例

driver: atlantic
version: 5.2.0-050200rc5-generic-kern
firmware-version: 3.1.78
expansion-rom-version:
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no

查看以太网适配器统计信息

ethtool -S <ethX>

输出示例

NIC statistics:
   InPackets: 13238607
   InUCast: 13293852
   InMCast: 52
   InBCast: 3
   InErrors: 0
   OutPackets: 23703019
   OutUCast: 23704941
   OutMCast: 67
   OutBCast: 11
   InUCastOctects: 213182760
   OutUCastOctects: 22698443
   InMCastOctects: 6600
   OutMCastOctects: 8776
   InBCastOctects: 192
   OutBCastOctects: 704
   InOctects: 2131839552
   OutOctects: 226938073
   InPacketsDma: 95532300
   OutPacketsDma: 59503397
   InOctetsDma: 1137102462
   OutOctetsDma: 2394339518
   InDroppedDma: 0
   Queue[0] InPackets: 23567131
   Queue[0] OutPackets: 20070028
   Queue[0] InJumboPackets: 0
   Queue[0] InLroPackets: 0
   Queue[0] InErrors: 0
   Queue[1] InPackets: 45428967
   Queue[1] OutPackets: 11306178
   Queue[1] InJumboPackets: 0
   Queue[1] InLroPackets: 0
   Queue[1] InErrors: 0
   Queue[2] InPackets: 3187011
   Queue[2] OutPackets: 13080381
   Queue[2] InJumboPackets: 0
   Queue[2] InLroPackets: 0
   Queue[2] InErrors: 0
   Queue[3] InPackets: 23349136
   Queue[3] OutPackets: 15046810
   Queue[3] InJumboPackets: 0
   Queue[3] InLroPackets: 0
   Queue[3] InErrors: 0

中断合并支持

ITR 模式,TX/RX 合并时序可以使用以下命令查看

ethtool -c <ethX>

并使用以下命令更改

ethtool -C <ethX> tx-usecs <usecs> rx-usecs <usecs>

禁用合并

ethtool -C <ethX> tx-usecs 0 rx-usecs 0 tx-max-frames 1 tx-max-frames 1

网络唤醒支持

通过幻数据包支持 WOL

ethtool -s <ethX> wol g

禁用 WOL

ethtool -s <ethX> wol d

设置并检查驱动程序消息级别

设置消息级别

ethtool -s <ethX> msglvl <level>

级别值

0x0001

通用驱动程序状态。

0x0002

硬件探测。

0x0004

链路状态。

0x0008

定期状态检查。

0x0010

正在关闭接口。

0x0020

正在启动接口。

0x0040

接收错误。

0x0080

传输错误。

0x0200

中断处理。

0x0400

传输完成。

0x0800

接收完成。

0x1000

数据包内容。

0x2000

硬件状态。

0x4000

网络唤醒状态。

默认情况下,调试消息级别设置为 0x0001(通用驱动程序状态)。

检查消息级别

ethtool <ethX> | grep "Current message level"

如果要禁用消息输出

ethtool -s <ethX> msglvl 0

RX 流规则 (ntuple 过滤器)

支持单独的规则,这些规则按该顺序应用

  1. 16 个 VLAN ID 规则

  2. 16 个 L2 EtherType 规则

  3. 8 个 L3/L4 5 元组规则

该驱动程序利用 ethtool 接口通过 ethtool -N <device> <filter> 配置 ntuple 过滤器。

启用或禁用 RX 流规则

ethtool -K ethX ntuple <on|off>

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

由于规则的固定顺序,过滤器的位置也是固定的

  • 位置 0 - 15 用于 VLAN ID 过滤器

  • 位置 16 - 31 用于 L2 EtherType 过滤器

  • 位置 32 - 39 用于 L3/L4 5 元组过滤器(IPv6 的位置 32、36)

L3/L4 5 元组(协议、源和目标 IP 地址、源和目标 TCP/UDP/SCTP 端口)与 8 个过滤器进行比较。对于 IPv4,最多可以匹配 8 个源和目标地址。对于 IPv6,最多可以支持 2 对地址。仅针对 TCP/UDP/SCTP 数据包比较源端口和目标端口。

要添加将数据包定向到队列 5 的过滤器,请使用 <-N|-U|--config-nfc|--config-ntuple> 开关

ethtool -N <ethX> flow-type udp4 src-ip 10.0.0.1 dst-ip 10.0.0.2 src-port 2000 dst-port 2001 action 5 <loc 32>
  • action 是队列号。

  • loc 是规则编号。

对于 flow-type ip4|udp4|tcp4|sctp4|ip6|udp6|tcp6|sctp6,您必须在 32 - 39 范围内设置 loc 编号。对于 flow-type ip4|udp4|tcp4|sctp4|ip6|udp6|tcp6|sctp6,您可以为流量 IPv4 设置 8 条规则,也可以为流量 IPv6 设置 2 条规则。Loc 编号流量 IPv6 为 32 和 36。目前,您不能同时使用 IPv4 和 IPv6 过滤器。

IPv6 过滤器流量的示例过滤器

sudo ethtool -N <ethX> flow-type tcp6 src-ip 2001:db8:0:f101::1 dst-ip 2001:db8:0:f101::2 action 1 loc 32
sudo ethtool -N <ethX> flow-type ip6 src-ip 2001:db8:0:f101::2 dst-ip 2001:db8:0:f101::5 action -1 loc 36

IPv4 过滤器流量的示例过滤器

sudo ethtool -N <ethX> flow-type udp4 src-ip 10.0.0.4 dst-ip 10.0.0.7 src-port 2000 dst-port 2001 loc 32
sudo ethtool -N <ethX> flow-type tcp4 src-ip 10.0.0.3 dst-ip 10.0.0.9 src-port 2000 dst-port 2001 loc 33
sudo ethtool -N <ethX> flow-type ip4 src-ip 10.0.0.6 dst-ip 10.0.0.4 loc 34

如果设置 action -1,则将丢弃与过滤器对应的所有流量。

action 的最大值为 31。

VLAN 过滤器(VLAN id)与 16 个过滤器进行比较。VLAN id 必须带有掩码 0xF000。这是为了区分 VLAN 过滤器和带有 UserPriority 的 L2 Ethertype 过滤器,因为用户优先级和 VLAN ID 都在同一个“vlan”参数中传递。

要添加将 VLAN 2001 中的数据包定向到队列 5 的过滤器

ethtool -N <ethX> flow-type ip4 vlan 2001 m 0xF000 action 1 loc 0

L2 EtherType 过滤器允许按 EtherType 字段或 802.1Q 的 EtherType 和 User Priority (PCP) 字段过滤数据包。UserPriority (vlan) 参数必须带有掩码 0x1FFF。这是为了区分 VLAN 过滤器和带有 UserPriority 的 L2 Ethertype 过滤器,因为用户优先级和 VLAN ID 都在同一个“vlan”参数中传递。

要添加将优先级 3 的 IP4 数据包定向到队列 3 的过滤器

ethtool -N <ethX> flow-type ether proto 0x800 vlan 0x600 m 0x1FFF action 3 loc 16

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

ethtool <-u|-n|--show-nfc|--show-ntuple> <ethX>

可以从表本身删除规则。这是使用以下方法完成的

sudo ethtool <-N|-U|--config-nfc|--config-ntuple> <ethX> delete <loc>
  • loc 是要删除的规则编号。

Rx 过滤器是一个用于加载过滤器表的接口,该表将所有流导入队列 0,除非使用“action”指定备用队列。在这种情况下,任何符合过滤器条件的流都将定向到相应的队列。所有内核 2.6.30 及更高版本都支持 RX 过滤器。

UDP 的 RSS

目前,NIC 不支持分段 IP 数据包的 RSS,这会导致分段 UDP 流量的 RSS 工作不正确。要禁用 UDP 的 RSS,可以使用 RX Flow L3/L4 规则。

示例

ethtool -N eth0 flow-type udp4 action 0 loc 32

UDP GSO 硬件卸载

UDP GSO 允许通过将 UDP 标头分配卸载到硬件来提高 UDP tx 速率。为此需要一个特殊的用户空间套接字选项,可以使用 /kernel/tools/testing/selftests/net/ 进行验证

udpgso_bench_tx -u -4 -D 10.0.1.1 -s 6300 -S 100

将导致从单个 6300 字节用户缓冲区中形成 100 字节大小的 UDP 数据包。

UDP GSO 通过以下方式配置

ethtool -K eth0 tx-udp-segmentation on

专用标志(测试)

Atlantic 驱动程序支持用于硬件自定义功能的专用标志

$ ethtool --show-priv-flags ethX

Private flags for ethX:
DMASystemLoopback  : off
PKTSystemLoopback  : off
DMANetworkLoopback : off
PHYInternalLoopback: off
PHYExternalLoopback: off

示例

$ ethtool --set-priv-flags ethX DMASystemLoopback on

DMASystemLoopback:DMA 主机环回。PKTSystemLoopback:数据包缓冲区主机环回。DMANetworkLoopback:DMA 块上的网络侧环回。PHYInternalLoopback:Phy 上的内部环回。PHYExternalLoopback:Phy 上的外部环回(使用环回以太网电缆)。

命令行参数

以下命令行参数在 atlantic 驱动程序上可用

aq_itr - 中断节流模式

接受的值:0、1、0xFFFF

默认值:0xFFFF

0

禁用中断节流。

1

启用中断节流并使用指定的 tx 和 rx 速率。

0xFFFF

自动节流模式。驱动程序将根据链路速度选择最佳的 RX 和 TX 中断节流设置。

aq_itr_tx - TX 中断节流速率

接受的值:0 - 0x1FF

默认值:0

TX 侧节流(以微秒为单位)。适配器将最大中断延迟设置为此值。最小中断延迟将为此值的一半

aq_itr_rx - RX 中断节流速率

接受的值:0 - 0x1FF

默认值:0

RX 侧节流(以微秒为单位)。适配器将最大中断延迟设置为此值。最小中断延迟将为此值的一半

注意

ITR 设置可以在运行时通过 ethtool -c 方式更改(见下文)

配置文件参数

对于某些微调和性能优化,可以在 {source_dir}/aq_cfg.h 文件中更改某些参数。

AQ_CFG_RX_PAGEORDER

默认值:0

RX 页面顺序覆盖。这是为每个描述符分配的 RX 页面的 2 的幂数。接收到的描述符大小仍然受 AQ_CFG_RX_FRAME_MAX 限制。

增加 pageorder 可以更好地重复使用页面(在启用 iommu 的系统上实际存在)。

AQ_CFG_RX_REFILL_THRES

默认值:32

RX 重新填充阈值。RX 路径将不会重新填充已释放的描述符,直到观察到指定数量的空闲描述符。较大的值可能有助于更好地重复使用页面,但也可能导致数据包丢失。

AQ_CFG_VECS_DEF

队列数

有效范围:0 - 8(最高 AQ_CFG_VECS_MAX)

默认值:8

请注意,此值将受到系统上可用内核数量的限制。

AQ_CFG_IS_RSS_DEF

启用/禁用接收端缩放

此功能允许适配器跨多个 CPU 内核分配接收处理,并防止单个 CPU 内核过载。

有效值

0

disabled

1

enabled

默认值:1

AQ_CFG_NUM_RSS_QUEUES_DEF

接收端缩放的队列数

有效范围:0 - 8(最高 AQ_CFG_VECS_DEF)

默认值:AQ_CFG_VECS_DEF

AQ_CFG_IS_LRO_DEF

启用/禁用大型接收卸载

此卸载使适配器能够合并多个 TCP 段,并将它们作为单个合并单元指示给 OS 网络子系统。

系统消耗的能量更少,但也会在数据包处理中引入更多延迟。

有效值

0

disabled

1

enabled

默认值:1

AQ_CFG_TX_CLEAN_BUDGET

一次在 TX 上清理的最大描述符数。

默认值:256

在更改 aq_cfg.h 文件后,必须重新构建驱动程序才能生效。

支持

如果在使用受支持的适配器在受支持的内核上发布的源代码中发现问题,请将与问题相关的具体信息通过电子邮件发送至 aqn_support@marvell.com

许可证

aQuantia Corporation 网络驱动程序

版权所有 © 2014 - 2019 aQuantia Corporation。

本程序是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证第 2 版的条款和条件重新分发和/或修改它。