mlx5 devlink 支持¶
本文档描述了 mlx5
设备驱动程序所实现的 devlink 功能。
参数¶
名称 |
模式 |
验证 |
|
driverinit |
类型: 布尔值 如果设备支持 RoCE 禁用,则 RoCE 启用状态控制设备对 RoCE 功能的支持。否则,控制发生在驱动程序堆栈中。当在驱动程序级别禁用 RoCE 时,仅支持原始以太网 QP。 |
|
driverinit |
范围在 64 到 4096 之间。 |
|
driverinit |
范围在 64 到 4096 之间。 |
|
driverinit |
范围在 1 到 2^31 之间。仅支持 2 的幂值。 |
mlx5
驱动程序还实现了以下驱动程序特定参数。
名称 |
类型 |
模式 |
描述 |
|
string |
runtime |
控制驱动程序的流转向模式
与默认 DMFS 模式相比,SMFS 模式更快,并提供更好的规则插入速率。 |
|
u32 |
driverinit |
控制 FDB 表中大型组(大小 > 1)的数量。
|
|
布尔值 |
runtime |
控制多端口 E-Switch 共享 FDB 模式。 一种实验模式,其中使用单个 E-Switch,并且 NIC 上的所有虚拟端口和物理端口都连接到它。 一个示例是将流量从在 PF0 上创建的 VF 发送到与 PF1 上行链路原生关联的上行链路。 注意:未来的设备,ConnectX-8 及更高版本,最终将默认启用此功能,以允许在单个 E-Switch 环境中的所有 NIC 端口之间进行转发,而双 E-Switch 模式可能会被弃用。 默认:禁用 |
|
布尔值 |
runtime |
在适用情况下,禁用 E-Switch 元数据可根据用例和数据包大小将数据包速率提高多达 20%。 E-Switch 端口元数据状态控制是否在内部用元数据标记数据包。对于多端口 RoCE、代表器之间的故障转移和堆叠设备,必须启用元数据标记。默认情况下,E-Switch 中支持的设备上启用元数据。元数据仅适用于 Switchdev 模式下的 E-Switch,当不使用以下任何用例时,用户可以禁用它:1. HCA 处于双/多端口 RoCE 模式。2. VF/SF 代表器绑定(通常用于实时迁移)3. 堆叠设备 当元数据被禁用时,如果用户尝试启用上述用例,它们将无法初始化。 注意:设置此参数不会立即生效。设置必须在传统模式下进行,并且 E-Switch 端口元数据在启用 Switchdev 模式后生效。 |
|
u32 |
driverinit |
我们将涉及转发的 TC NIC 规则称为“发夹(hairpin)”。发夹队列是 mlx5 硬件特有的实现,用于此类数据包的硬件转发。 控制发夹队列的数量。 |
|
u32 |
driverinit |
控制发夹队列的大小(以数据包为单位)。 |
mlx5
驱动程序支持通过 DEVLINK_CMD_RELOAD
进行重新加载
信息版本¶
mlx5
驱动程序报告以下版本
名称 |
类型 |
描述 |
|
固定 |
用于表示设备的板 ID。 |
|
已存储, 正在运行 |
三位主要.次要.修订固件版本号。 |
健康报告器¶
tx 报告器¶
tx 报告器负责报告和恢复以下三种错误场景:
- tx 超时
报告内核 tx 超时检测。通过搜索丢失的中断来恢复。
- tx 错误完成
报告错误 tx 完成。通过刷新 tx 队列并重置它来恢复。
- tx PTP 端口时间戳 CQ 不健康
报告端口时间戳 CQ 上从未交付的过多 CQE。通过刷新并重新创建所有 PTP 通道来恢复。
tx 报告器还支持按需诊断回调,它提供其发送队列的实时状态信息。
用户命令示例
诊断发送队列状态
$ devlink health diagnose pci/0000:82:00.0 reporter tx
注意
此命令仅在接口启动时才具有有效输出,否则命令输出为空。
显示指示的 tx 错误数量、成功结束的恢复流数量、是否启用自动恢复以及自上次恢复以来的宽限期
$ devlink health show pci/0000:82:00.0 reporter tx
rx 报告器¶
rx 报告器负责报告和恢复以下两种错误场景:
- rx 队列初始化(填充)超时
rx 队列描述符在环初始化时的填充是在 napi 上下文中通过触发中断完成的。如果未能获得最小数量的描述符,将发生超时,并且可以通过轮询 EQ(事件队列)来恢复描述符。
- rx 错误完成(由硬件在中断上下文中报告)
报告 rx 完成错误。通过刷新相关队列并重置它来恢复(如果需要)。
rx 报告器还支持按需诊断回调,它提供其接收队列的实时状态信息。
诊断 rx 队列状态及相应的完成队列
$ devlink health diagnose pci/0000:82:00.0 reporter rx
注意
此命令仅在接口启动时才具有有效输出。否则,命令输出为空。
显示指示的 rx 错误数量、成功结束的恢复流数量、是否启用自动恢复以及自上次恢复以来的宽限期
$ devlink health show pci/0000:82:00.0 reporter rx
固件报告器¶
固件报告器实现了 diagnose 和 dump 回调。它通过触发固件核心转储并将其存储到转储缓冲区中来跟踪固件错误(例如固件综合症)的症状。用户可以随时触发固件报告器诊断命令来检查当前固件状态。
用户命令示例
检查固件健康状态
$ devlink health diagnose pci/0000:82:00.0 reporter fw
读取已存储的固件核心转储或触发新的转储
$ devlink health dump show pci/0000:82:00.0 reporter fw
注意
此命令只能在拥有固件跟踪器所有权的 PF 上运行,在其他 PF 或任何 VF 上运行将返回“操作不允许”。
固件致命错误报告器¶
固件致命错误报告器实现了 dump 和 recover 回调。它通过 CR 空间转储和恢复流程跟踪致命错误指示。CR 空间转储使用 vsc 接口,即使固件命令接口不工作,它也有效,这在大多数固件致命错误中都是如此。恢复功能运行恢复流程,如果需要,会重新加载驱动程序并触发固件重置。固件错误时,健康缓冲区会被转储到 dmesg 中。日志级别根据错误的严重性(在健康缓冲区中给出)确定。
用户命令示例
手动运行固件恢复流程
$ devlink health recover pci/0000:82:00.0 reporter fw_fatal
读取已存储的固件 CR 空间转储或触发新的转储
$ devlink health dump show pci/0000:82:00.1 reporter fw_fatal
注意
此命令只能在 PF 上运行。
vnic 报告器¶
vnic 报告器仅实现了 diagnose 回调。它负责从固件查询 vnic 诊断计数器并实时显示它们。
vnic 计数器说明
- total_error_queues
因异步错误或错误命令而处于错误状态的队列数量。
- send_queue_priority_update_flow
QP/SQ 优先级/SL 更新事件的数量。
- cq_overrun
CQ 因溢出而进入错误状态的次数。
- async_eq_overrun
映射到异步事件的 EQ 被溢出的次数。
- comp_eq_overrun
映射到完成事件的 EQ 被溢出的次数。
- quota_exceeded_command
因超出配额而发出并失败的命令数量。
- invalid_command
因超出配额以外的任何原因而发出并失败的命令数量。
- nic_receive_steering_discard
完成 RX 流转向但因流表不匹配而被丢弃的数据包数量。
- generated_pkt_steering_fail
VNIC 生成的数据包数量,这些数据包在转向流的任何点都遇到了意外的转向失败。
- handled_pkt_steering_fail
VNIC 处理的数据包数量,这些数据包在 VNIC 拥有的转向流的任何点都遇到了意外的转向失败(包括 E-Switch 所有者的 FDB)。
- icm_consumption
vnic 消耗的互连主机内存 (ICM) 量,以 4KB 为粒度。ICM 是软件根据 HCA 请求分配的主机内存,用于存储控制 HCA 操作的数据结构。
用户命令示例
诊断 PF/VF vnic 计数器
$ devlink health diagnose pci/0000:82:00.1 reporter vnic
诊断代表器 vnic 计数器(通过提供代表器的 devlink 端口执行,该端口可通过 devlink port 命令获取)
$ devlink health diagnose pci/0000:82:00.1/65537 reporter vnic
注意
此命令可在所有接口(例如 PF/VF 和代表器端口)上运行。