Logo

Linux 内核

6.16.0-rc4

快速搜索

目录

  • 开发流程
  • 提交补丁
  • 行为准则
  • 维护者手册
  • 所有开发流程文档
  • 核心 API
  • 驱动 API
  • 子系统
    • 核心子系统
    • 人机接口
    • 网络接口
      • 网络
      • NetLabel
      • InfiniBand
      • ISDN
      • MHI
    • 存储接口
    • 其他子系统
  • 锁定
  • 许可规则
  • 编写文档
  • 开发工具
  • 测试指南
  • 开发指南
  • 追踪
  • 故障注入
  • 热补丁
  • Rust
  • 管理
  • 构建系统
  • 报告问题
  • 用户空间工具
  • 用户空间 API
  • 固件
  • 固件和设备树
  • CPU 架构
  • 未分类文档
  • 翻译

本页

  • 显示源文件

mlx5 devlink 支持¶

本文档描述了 mlx5 设备驱动程序所实现的 devlink 功能。

参数¶

已实现的通用参数¶

名称

模式

验证

enable_roce

driverinit

类型: 布尔值

如果设备支持 RoCE 禁用,则 RoCE 启用状态控制设备对 RoCE 功能的支持。否则,控制发生在驱动程序堆栈中。当在驱动程序级别禁用 RoCE 时,仅支持原始以太网 QP。

io_eq_size

driverinit

范围在 64 到 4096 之间。

event_eq_size

driverinit

范围在 64 到 4096 之间。

max_macs

driverinit

范围在 1 到 2^31 之间。仅支持 2 的幂值。

mlx5 驱动程序还实现了以下驱动程序特定参数。

已实现的驱动程序特定参数¶

名称

类型

模式

描述

flow_steering_mode

string

runtime

控制驱动程序的流转向模式

  • dmfs 设备管理流转向。在 DMFS 模式下,硬件转向实体通过固件创建和管理。

  • smfs 软件管理流转向。在 SMFS 模式下,硬件转向实体通过驱动程序创建和管理,无需固件干预。

  • hmfs 硬件管理流转向。在 HMFS 模式下,驱动程序使用工作队列和一种特殊的新型 WQE(工作队列元素)直接向硬件配置转向规则。

与默认 DMFS 模式相比,SMFS 模式更快,并提供更好的规则插入速率。

fdb_large_groups

u32

driverinit

控制 FDB 表中大型组(大小 > 1)的数量。

  • 默认值为 15,范围在 1 到 1024 之间。

esw_multiport

布尔值

runtime

控制多端口 E-Switch 共享 FDB 模式。

一种实验模式,其中使用单个 E-Switch,并且 NIC 上的所有虚拟端口和物理端口都连接到它。

一个示例是将流量从在 PF0 上创建的 VF 发送到与 PF1 上行链路原生关联的上行链路。

注意:未来的设备,ConnectX-8 及更高版本,最终将默认启用此功能,以允许在单个 E-Switch 环境中的所有 NIC 端口之间进行转发,而双 E-Switch 模式可能会被弃用。

默认:禁用

esw_port_metadata

布尔值

runtime

在适用情况下,禁用 E-Switch 元数据可根据用例和数据包大小将数据包速率提高多达 20%。

E-Switch 端口元数据状态控制是否在内部用元数据标记数据包。对于多端口 RoCE、代表器之间的故障转移和堆叠设备,必须启用元数据标记。默认情况下,E-Switch 中支持的设备上启用元数据。元数据仅适用于 Switchdev 模式下的 E-Switch,当不使用以下任何用例时,用户可以禁用它:1. HCA 处于双/多端口 RoCE 模式。2. VF/SF 代表器绑定(通常用于实时迁移)3. 堆叠设备

当元数据被禁用时,如果用户尝试启用上述用例,它们将无法初始化。

注意:设置此参数不会立即生效。设置必须在传统模式下进行,并且 E-Switch 端口元数据在启用 Switchdev 模式后生效。

hairpin_num_queues

u32

driverinit

我们将涉及转发的 TC NIC 规则称为“发夹(hairpin)”。发夹队列是 mlx5 硬件特有的实现,用于此类数据包的硬件转发。

控制发夹队列的数量。

hairpin_queue_size

u32

driverinit

控制发夹队列的大小(以数据包为单位)。

mlx5 驱动程序支持通过 DEVLINK_CMD_RELOAD 进行重新加载

信息版本¶

mlx5 驱动程序报告以下版本

已实现的 devlink 信息版本¶

名称

类型

描述

fw.psid

固定

用于表示设备的板 ID。

fw.version

已存储, 正在运行

三位主要.次要.修订固件版本号。

健康报告器¶

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 和代表器端口)上运行。

©内核开发社区。| 由 Sphinx 5.3.0 & Alabaster 0.7.16 提供技术支持 | 页面源