Marvell(Aquantia) AQtion 驱动程序¶
适用于 Aquantia 多千兆 PCI Express 以太网适配器系列
识别您的适配器¶
此版本中的驱动程序与基于 AQC-100、AQC-107、AQC-108 的以太网适配器兼容。
SFP+ 设备(适用于基于 AQC-100 的适配器)¶
此版本已使用无源直连电缆 (DAC) 和 SFP+/LC 光收发器进行测试。
配置¶
查看链接消息¶
如果发行版限制系统消息,则链接消息不会显示在控制台上。为了在控制台上看到网络驱动程序链接消息,请通过输入以下内容将 dmesg 设置为 8
dmesg -n 8注意
此设置不会在重启后保存。
巨型帧¶
该驱动程序支持所有适配器的巨型帧。通过将 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 过滤器)¶
支持单独的规则,这些规则按以下顺序应用
16 个 VLAN ID 规则
16 个 L2 EtherType 规则
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 36IPv4 过滤流量的示例过滤器
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 0L2 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 onDMASystemLoopback: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 版的条款和条件重新分发和/或修改它。