【微知】关于 Mellanox BF3 DPU 上 rshim 的深入解析(二)?rshim软件和DPU是走什么通道进行通信的?

背景

本文是rshim 的深入解析第二篇。
对于Mellanox BF系列的DPU(Data Processing Unit,数据处理单元)卡,RShim,全称“Remote Shim”。提供了管理通道用来方便主机对DPU卡进行管理,如重置芯片、从外部启动 ARM、查看寄存器状态进行调试、提供串口访问以及提供 TCP/IP 接口(常用的tmpfifo_net的网络设备也是rshim提供的)。他在硬件上有一个专门的硬件单元。从RShim这个名字来看,设计者期望提供一个能够远程访问的很薄的一个垫片层(Shim),所以看待RShim应该抛开迷雾,关注数据流动,直击功能本质。
本文涉及到rshim的的部分代码机制机理介绍。
跟多参考兄弟篇文章:https://blog.youkuaiyun.com/essencelite/article/details/147670941

代码相关分析

关于rshim设备的黑名单

rshim设备黑名单指定后可以不开启映射rshim文件,具体在配置文件中设置。
支持黑名单模式,在rshim_blocked_dev_names中配置,在pcie扫描后在rshim_pcie_probe阶段,使用rshim_allow_device判断。如果在黑名单之中不创建。
在这里插入图片描述

rshim有配置文件

/etc/rshim.conf
比如指定rshim名字和pcie的映射关系,指定黑名单

rshim的映射3中模式

有uio vfio direct, 一般使用uio方式
在这里插入图片描述

rshim中前后端模式

在这里插入图片描述

rshim支持的寄存器

在这里插入图片描述
寄存器地址:
在这里插入图片描述
在这里插入图片描述

BF3的rshim的PCIe的bar空间的window size

可见大小是512K
另外BF2的是49行的 64K
在这里插入图片描述

rshim使用用户态PCIe库之后如何发起PCIe的TLP读取

直接使用pci_read_byte指定dev句柄以及配置空间的地址

bd->rev_id = pci_read_byte(pci_dev, PCI_REVISION_ID);

rshim中的虚拟控制通道

在这里插入图片描述
在这里插入图片描述
可见各个channel的操作地址是base地址+ channel上移16bit
在这里插入图片描述
在这里插入图片描述

rshim读取PCIe配置空间的方式

使用libpci提供的pci_cap_write,指定dev句柄,以及需要读取的cap地址和访问的地址

# 比如设置Set access width to 64 bits 
pci_cap_write(pci_dev, MSN_GW_CR_64B_BOOT_ADDR, (addr >> 2));

所以rshim访问的本质是通过libpci提供的PCIe TLP报文收发能力,以及在rshim后端提供的MMIO地址进行访问控制,本质是走的TLP报文。
并且访问主体是rshim的backend,访问的几个函数是:
在这里插入图片描述

rshim使能pcie能力需要做的事情

说先rshim开启pcie enable是在启动rshim中期,是rshim初始化后选择PCIe模式,然后PCIe的 probe阶段的初始化前期,用来初始化用户态PCIe操作的相关的准备动作
在这里插入图片描述

rshim使用pcie进行操作,需要对pcie进行一些初始化,具体在rshim_pcie_enable中。
在这里插入图片描述

rshim在进行内存mapping的处理策略

rshim会根据映射的机制来使用不同的策略,比如vfio会使用vfio的标准策略(比如打开"/dev/vfio/vfio",打开group,获取设备信息,然后mmap,pread pwrite配置,中断使能等。

在这里插入图片描述

rshim如何判断是否可以访问DPU的rshim

通过rshim_access_check函数来访问,使用的是read_rshim,channel是:RSHIM_CHANNEL
比如:在这里插入图片描述

rshim是如何判断是否有多个rshim进程attach到DPU上的rshim资源的

在这里插入图片描述

rshim的console串口的一些配置与波特率

串口波特率的设置都在rshim fuse的初始化阶段。
波特率是115200
在这里插入图片描述
在这里插入图片描述
配置不同设备的ucse的用户态驱动fops:
在这里插入图片描述
比如BOOT:
在这里插入图片描述
比如console:
在这里插入图片描述

综述

rshim程序和DPU设备通信支持走PCIe或者USB链路,并且定义了多个虚拟channel,不同channel实现不同功能。假设是PCIe链路,则在用户态映射BAR空间,然后对mapping的地址进行读写。对于对外提供的boot、misc、console、rshim等文件,最终都调用backend的接口,写到不同的channel从而完成rshim的功能。

参考资源链接:[Mellanox VMA Library for Linux: User Manual](https://wenku.youkuaiyun.com/doc/ut60q1bit6?utm_source=wenku_answer2doc_content) 要在Linux系统上配置Mellanox VMA库以使用RDMA技术,首先需要了解RDMAMellanox VMA库的基础知识。RDMA技术允许节点之间直接进行内存访问,从而减少数据传输时的CPU负载延迟。而Mellanox VMA库是一个用户态协议栈开发库,它使得开发者可以利用现有的Socket编程接口,同时享受RDMA带来的高性能网络通信。 根据《Mellanox VMA Library for Linux: User Manual》手册,以下是在Linux系统上配置Mellanox VMA库的步骤: 1. **系统要求**:确保系统安装了支持的Linux发行版,并满足Mellanox VMA库的硬件软件要求。 2. **安装硬件驱动**:在系统上安装Mellanox的ConnectX系列网卡对应的驱动程序,并确保网卡工作正常。 3. **安装Mellanox OFED**:通过Mellanox提供的官方软件包安装OpenFabrics Enterprise Distribution (OFED),这是支持RDMA相关技术的必要软件堆栈。 4. **安装Mellanox VMA库**:下载并安装Mellanox VMA库,这通常会通过包管理器或者从Mellanox官方网站获取安装包来完成。 5. **配置环境变量**:根据手册说明设置环境变量,以便系统能够识别VMA库。 6. **运行测试程序**:执行VMA库提供的示例程序,检查RDMA通信是否正常工作。 通过以上步骤,可以完成Mellanox VMA库的配置,并且验证系统是否已正确设置以利用RDMA技术。该手册还提供了丰富的API介绍性能优化指南,帮助开发者进一步理解如何在应用程序中实现高效的网络通信。 值得注意的是,使用Mellanox VMA库进行RDMA通信可以显著提升网络延迟敏感型应用的性能,特别是对于那些需要高速网络交互的大数据高性能计算场景。 在解决基础配置问题后,若希望深入学习RDMA技术、Mellanox VMA库的高级用法,以及如何在更复杂的网络环境中进行故障排查,推荐继续参阅《Mellanox VMA Library for Linux: User Manual》手册,它提供了全面的技术细节实践案例。 参考资源链接:[Mellanox VMA Library for Linux: User Manual](https://wenku.youkuaiyun.com/doc/ut60q1bit6?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值