前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nvidia Mellanox CX4/4lx 适配器程序员参考手册 (PRM)-软件接口-HCA操作-中断-驱动流程-无状态卸载-2016

Nvidia Mellanox CX4/4lx 适配器程序员参考手册 (PRM)-软件接口-HCA操作-中断-驱动流程-无状态卸载-2016

原创
作者头像
ssbandjl
修改2024-02-05 22:57:33
1840
修改2024-02-05 22:57:33
举报
文章被收录于专栏:DPUDPU

简介

PRM是驱动程序开发所需的文档, 从历史上看,它仅在 NDA 下可用, 这对于开源网络来说是一件大事。 开放的 PRM 使独立开发人员可以为 ConnectX-4 适配器创建独立的驱动程序。 该驱动程序适用于该产品系列中的 1G/10G/25G/40G/50G/100G 卡

本文档仅适用于ConnectX®-4 和 ConnectX®-4 Lx, Nvidia有最新版本描述了所有适配器,包括 ConnectX-5/6/Bluefield, 但是适用于拥有有效支持合同的客户。 如果您有, 有效的支持合同,请发送电子邮件至NvidiaNetwork支持团队的邮箱,它将通过票证提供

软件接口

系统和软件通过以下三种方式访问网卡设备

  • PCI配置接口, 通过PCIe接口枚举和配置设备
  • 通过网卡寄存器, 访问BAR0内存,该接口用于初始化设备以及配置基本的设备能力集合(capabilities)
  • 通过UAR(用户访问区域), 绕过内核, 访问网卡设备

HCA配置

DPU初始化阶段, 设备通过命令对列和寄存器进行配置, 此时, 设备能力集(大部分资源已经准备好), 端口能力集, 资源能力集也配置也配置好了

寄存器(UAR/DoorBells门铃和初始化内存段)已经映射到物理内存空间, 他们是通过标准的PCI BAR/LIMIT机制映射

HCA 操作

HCA初始化后, 主机软件通过向WQ提交WR实现数据收发, WR发送给SQ/RQ时, 按照WQE对待, WQE 本质上是控制数据移动的源和目的地的描述符.

针对SQ, WQEs可从本地内存包含gather_list(聚集列表SGL), RQ也是支持SGL

数据提交到SQ后, 发布到 WQ 的工作请求由 HCA 按照发布的顺序执行, 敲响各自的门铃DB, 网卡开始执行对应的操作码, 完成操作

操作完成后, HCA提交一个CQE到CQ, 多个WQs可以用一个完成元素, HCA在CQ中存储了WQE的标识信息

CX4支持16M个CQs

中断

HCA 支持多种生成中断的方式

  1. 在其物理接口上断言引脚
  2. 在主机链路 (PCI) 上模拟中断引脚断言
  3. 生成消息信号中断 (MSI/MSI-X)

使软件能够将中断多路分解为不同的中断。 每个 EQ 都可以配置为在将 EQE 发布到该 EQ 时生成中断。 多个 EQ 可以映射到同一中断向量 (MSI-X),从而保持 EQ 和中断之间的多对一关系

WQS,CQs, EQs与中断的关系图:

异步事件(例如链接状态更改或各种错误)也可能导致发布事件并断言中断。 每个异步事件类型都可以映射到特定的 EQ,并可以选择生成中断。 硬件不会阻止将同步和异步事件映射到相同的 EQ。 用户在配置设备时应根据常识,对异步事件使用不同的 EQ

网络和无状态卸载

网络传输对象-DPU通过以下对象处理收发流量

  • 流表(FlowTable)
  • 发送接口(Transport Interface Send, TIS)
  • 接收接口(Transport Interface Receive , TIR)
  • 发送对列(SQ)
  • 接收队列(RQ)
  • 接收内存池(Receive Memory Pool RMP)
  • 完成队列(CQ)
  • 事件队列(EQ)

下图总结了各种对象以及它们之间的关系。 箭头表示一个对象指向 n 个其他对象,而 n 是在箭头的边缘指定的

注意:SQ和RQ可以指向相同或不同的CQ

由于该图是为了简单起见而显示的,因此必须解释该图之外的多对多关系。 例如,两个TIR可以指向相同或不同的RQ,并且两个完全不同的RQ或SQ(来自相同或其他TIS/TIR)可以指向相同的CQ或相同的RMP

基本的以太网驱动程序流程

  • 加载驱动
    • 用 QUERY_HCA_CAP命令检查支持以太卸载的设备能力集
    • 建立发送传输环(rings)
      • 分配中断, 创建事件队列和完成队列, 一般是每个CPU核独立绑定一个中断/事件队列/完成队列
      • 创建发送接口对象(TIS), 一般是每个发送对象拥有一个优先级
      • 创建发送队列对象, 用于发包和关联TIS, 通常, 每个CPU, 每个优先级, 对应一个发送队列, 这意味着SQ和CQ之间存在多对一的关系
    • 建立接收传输环(rings)
      • 分配中断, 创建事件队列和完成队列, 一般是每个CPU核独立绑定一个中断/事件队列/完成队列
      • 创建接收接口对象(RQ), 用于收包和关联TIR(或者, 在间接使用的情况下的RQT,然后 TIR 指向 RQT,RQT 指向 RQ), 一般每个CPU核一个接收队列
      • 创建接收接口(TIR)对象, 将TIR对象与RQ对象分别关联
    • 流表
      • 配置流表指向相关的 TIR 对象
  • 数据发送路径
    • 提交WR到TX WQ的缓冲区并敲门铃DB
    • 当CQE报告完成后, 以上缓冲区可释放
    • 通过CQ和EQ控制中断和事件
  • 数据接收路径
    • 提交WR到RX WQ的缓冲区并敲门铃DB
    • 产生CQE 指示传入数据包,包括无状态卸载的提示信息
    • 通过CQ和EQ控制中断和事件
  • 移除驱动
    • 移除流表条目
    • 销毁接收环
      • 销毁RQs, RQTs, TIRs
      • 销毁关联的CQs, EQs以及中断
    • 销毁发送环
      • 销毁TIS对象和SQs
      • 销毁关联的CQs, EQs以及中断

无状态卸载

CX4支持以太网的多个无状态卸载。 本节中列出的无状态卸载是指在裸机设备上运行的设备驱动程序的卸载。 无状态卸载包括以下功能:

• Checksum Offload- 校验和卸载

• Large Send Offloads - 大发送包卸载

• Receive Side Scaling - 弹性接收

• Transmit Side Scaling - 弹性发送

• Interrupt Moderation - 中断自适应

• Large Receive Offloads - 大接收包卸载

• VLAN insertion and stripping - VLAN 插入和剥离

• Flow Steering at layers 2, 3 and 4 - 第 2、3 和 4 层的流量控制

• Packet padding (TX) - 发送包填充

以下场景支持填充数据包开始 (RX) 和填充数据包结束 (RX) 的无状态卸载:

• IPv4 and IPv6 packets

• Layer 2: Ethernet

参考

PRM: https://network.nvidia.com/files/doc-2020/ethernet-adapters-programming-manual.pdf (Mellanox CX4/4Lx适配器-程序员参考手册 (PRM)) Mellanox PRM released: https://github.com/snabbco/snabb/issues/938

晓兵(ssbandjl)

博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts

DPU专栏

https://cloud.tencent.com/developer/column/101987

晓兵技术杂谈(系列)

https://cloud.tencent.com/developer/user/5060293/video

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 软件接口
  • HCA配置
  • HCA 操作
  • 中断
  • 网络和无状态卸载
    • 网络传输对象-DPU通过以下对象处理收发流量
    • 基本的以太网驱动程序流程
    • 无状态卸载
    • 参考
    • 晓兵(ssbandjl)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档