Logo

Linux 内核

6.13.0-rc6

快速搜索

目录

  • 开发流程
  • 提交补丁
  • 行为准则
  • 维护者手册
  • 所有开发流程文档
  • 核心 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

字符串

运行时

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

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

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

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

fdb_large_groups

u32

driverinit

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

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

esw_multiport

布尔值

运行时

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

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

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

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

默认值:禁用

esw_port_metadata

布尔值

运行时

在适用的情况下,禁用 eswitch 元数据可以根据用例和数据包大小将数据包速率提高高达 20%。

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

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

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

hairpin_num_queues

u32

driverinit

我们将涉及转发的 TC NIC 规则称为“hairpin”。Hairpin 队列是 mlx5 硬件针对此类数据包的硬件转发的特定实现。

控制 hairpin 队列的数量。

hairpin_queue_size

u32

driverinit

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

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

信息版本¶

mlx5 驱动程序报告以下版本

已实现的 devlink 信息版本¶

名称

类型

描述

fw.psid

固定

用于表示设备的板 ID。

fw.version

已存储,正在运行

三位数 major.minor.subminor 固件版本号。

健康报告器¶

tx 报告器¶

tx 报告器负责报告和恢复以下三种错误场景

  • tx 超时

    报告内核 tx 超时检测。通过搜索丢失的中断来恢复。

  • tx 错误完成

    报告错误 tx 完成。通过刷新 tx 队列并重置它来恢复。

  • tx PTP 端口时间戳 CQ 不健康

    报告在端口 ts 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 队列的初始化(填充)超时

    通过触发 irq 在 napi 上下文中完成环初始化时 rx 队列描述符的填充。如果无法获得最少数量的描述符,则会发生超时,并且可以通过轮询 EQ(事件队列)来恢复描述符。

  • 带有错误的 rx 完成(由 HW 在中断上下文中报告)

    报告 rx 完成错误。通过刷新相关队列并重置它来恢复(如果需要)。

rx 报告器还支持按需诊断回调,在该回调上它提供其接收队列状态的实时信息。

  • 诊断 rx 队列的状态和相应的完成队列

    $ devlink health diagnose pci/0000:82:00.0 reporter rx
    

注意

此命令仅在接口启动时具有有效输出。否则,该命令具有空输出。

  • 显示指示的 rx 错误数、成功结束的恢复流程数、是否启用自动恢复以及上次恢复的平缓期

    $ devlink health show pci/0000:82:00.0 reporter rx
    

fw 报告器¶

fw 报告器实现 diagnose 和 dump 回调。它遵循 fw 错误的症状,例如通过触发 fw 核心转储并将其存储到转储缓冲区中的 fw 综合征。用户可以随时触发 fw 报告器诊断命令以检查当前的 fw 状态。

用户命令示例

  • 检查 fw 健康状态

    $ devlink health diagnose pci/0000:82:00.0 reporter fw
    
  • 如果已存储,则读取 FW 核心转储或触发新的核心转储

    $ devlink health dump show pci/0000:82:00.0 reporter fw
    

注意

此命令只能在拥有 fw 跟踪器所有权的 PF 上运行,在其他 PF 或任何 VF 上运行它将返回“不允许操作”。

fw 致命报告器¶

fw 致命报告器实现 dump 和 recover 回调。它遵循通过 CR 空间转储和恢复流程指示的致命错误。CR 空间转储使用 vsc 接口,即使 FW 命令接口不起作用,该接口也有效,这在大多数 FW 致命错误中都是这种情况。恢复函数运行恢复流程,该流程会重新加载驱动程序,并在需要时触发 fw 重置。在固件错误时,健康缓冲区将转储到 dmesg 中。日志级别派生自错误的严重性(在健康缓冲区中给出)。

用户命令示例

  • 手动运行 fw 恢复流程

    $ devlink health recover pci/0000:82:00.0 reporter fw_fatal
    
  • 如果已存储,则读取 FW CR 空间转储或触发新的转储

    $ devlink health dump show pci/0000:82:00.1 reporter fw_fatal
    

注意

此命令只能在 PF 上运行。

vnic 报告器¶

vnic 报告器仅实现 diagnose 回调。它负责从 fw 查询 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 拥有的流控制流程的任何点,包括 eswitch 所有者的 FDB)遇到意外流控制失败的数据包数。

用户命令示例

  • 诊断 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 提供技术支持 | 页面源代码