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 时,必须重新添加所有需要的过滤器。

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

  • VLAN ID 过滤器的位置为 0 - 15

  • L2 EtherType 过滤器的位置为 16 - 31

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

将 L3/L4 5 元组(协议、源 IP 地址和目标 IP 地址、源 TCP/UDP/SCTP 端口和目标 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,您必须将 loc 号设置为 32 - 39 之间。对于 flow-type ip4|udp4|tcp4|sctp4|ip6|udp6|tcp6|sctp6,您可以为 IPv4 流量设置 8 个规则,或者您可以为 IPv6 流量设置 2 个规则。IPv6 流量的 loc 号为 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 过滤器,因为 User Priority 和 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 过滤器,因为 User Priority 和 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 流 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 限制。

增加页顺序可以更好地重用页(在启用 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

启用/禁用接收端缩放 (Receive Side Scaling)

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

有效值

0

已禁用

1

已启用

默认值:1

AQ_CFG_NUM_RSS_QUEUES_DEF

用于接收端缩放的队列数量

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

默认值:AQ_CFG_VECS_DEF

AQ_CFG_IS_LRO_DEF

启用/禁用大型接收卸载 (Large Receive Offload)

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

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

有效值

0

已禁用

1

已启用

默认值:1

AQ_CFG_TX_CLEAN_BUDGET

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

默认值:256

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

支持

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

许可

aQuantia 公司网络驱动程序

版权所有 © 2014 - 2019 aQuantia 公司。

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