【RDMA】rdma-core驱动源码包|ibverbs|rdmacm

2023-12-31 21:20

本文主要是介绍【RDMA】rdma-core驱动源码包|ibverbs|rdmacm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

源码包

编译

用法

驱动包内的例子

其他


源码包

mellanox的rdma驱动源码包形式如下:

MLNX_OFED_LINUX-5.8-1.1.2.1-rhel9.0-ext/src/MLNX_OFED_SRC-5.8-1.1.2.1/SRPMS

rdma-core-58mlnx43-1.58112.src.rpm

rpm -ivh  rdma-core-58mlnx43-1.58112.src.rpm 安装完成后

源码解压到:/root/rpmbuild/SOURCES/

RDMA Core Userspace Libraries and Daemons

这是 Linux 内核驱动程序的用户空间组件,属于/infiniband 子系统。具体包含以下设备节点的用户空间库:

libibverbs RDMA 内核驱动程序的用户空间组件包含在 providers/ 目录下。支持以下内核 RDMA 驱动程序:

此外,还提供了以下额外的服务守护进程:

 

编译

Building

进入驱动包目录,执行:

$ bash build.sh

输出在:build/bin build/lib

 

build/bin 目录包含示例程序,build/lib 目录包含共享库。构建配置是“原地”运行所有程序的,因此无法安装。

注意:目前不易从构建目录运行插件,插件仅从系统路径加载

编译之前环境可能需要安装一些依赖,如:

CentOS 7:

$ yum install epel-release

$ yum install cmake3 ninja-build pandoc

详情见README.md

用法

驱动包内的例子

驱动包例子的源码在驱动包的excample内

 rdma_xclient.c 和 rdma_client.c 的区别

rdma_xclient.c  客户端只发,接收端只收

rdma_client.c    双边相互收发

使用 RDMA verbs API,较为底层,需要手动管理连接和操作;使用 RDMA CM API,更高层,封装了一些操作,使得代码更简洁易读。

rdma_xserver和rdma_xclient

用法:

usage: rdma_xserver

        [-p port_number]

        [-c communication type]

            r - RC: reliable-connected (default)

            x - XRC: extended-reliable-connected

usage: rdma_xclient

        [-s server]

        [-p port_number]

        [-c communication type]

            r - RC: reliable-connected (default)

            x - XRC: extended-reliable-connected

服务端:

rdma_xserver -p 8888

客户端:

rdma_xclient -s 10.252.8.1 -p 8888

rdma_server和rdma_client

usage: rdma_server

        [-s server_address]

        [-p port_number]

usage: rdma_xclient

        [-s server]

        [-p port_number]

        [-c communication type]

            r - RC: reliable-connected (default)

            x - XRC: extended-reliable-connected

服务端:

rdma_server -s 10.252.8.1 -p 8888

客户端:

rdma_client -s 10.252.8.1 -p 8888

其他

在编译出来的bin下还有:

[root@localhost bin]# ls

check_lft_balance.pl  ibaddr               iblinkinfo     ibrouters   ibv_asyncwatch    ibv_xsrq_pingpong  rdma_server   sminfo      udpong

cmtime                ibcacheedit          ibnetdiscover  ibsendtrap  ibv_devices       mckey              rdma_xclient  smpdump     umad_compile_test

dump_fts              ibccconfig           ibnodes        ibstat      ibv_devinfo       mcm_rereg_test     rdma_xserver  smpquery    umad_reg2

dump_lfts.sh          ibccquery            ibping         ibstatus    ibv_rc_pingpong   perfquery          riostream     srp_daemon  umad_register2

dump_mfts.sh          ibfindnodesusing.pl  ibportstate    ibswitches  ibv_srq_pingpong  rcopy              rping         testleaks   umad_sa_mcm_rereg_test

ibacm                 ibhosts              ibqueryerrors  ibsysstat   ibv_uc_pingpong   rdma_client        rstream       ucmatose    vendstat

ib_acme               ibidsverify.pl       ibroute        ibtracert   ibv_ud_pingpong   rdma_rename        saquery       udaddy

他们的用法可以使用:man xxx 查询 如:man rdma_client

udaddy  “udp”的测试

如果系统上没有安装doc手册,则可以访问: Index of /linux/man-pages/man1     在页面搜索相关的命令,查看其用法

cmtime

确定客户端和服务器应用程序之间的RDMA CM连接建立和拆除中各个“步骤”的最小和最大时间定时的“步骤”包括:

创建id、绑定地址、解析地址、解析路由、创建qp、连接、断开连接和销毁。

例子:

服务端

cmtime -p 888

客户端:

cmtime -p 888 -s 10.252.8.1

-s server_address 服务器系统监听连接的网络名称或IP地址。所使用的名称或地址必须经过RDMA设备路由。客户端需

指定。

-b bind_address

要绑定到的本地网络地址。

-c connections

客户端与服务器之间建立的连接数。(默认100)

-p port_number

服务器的端口号。

-r retries

解析地址或路由时的重试次数。(默认2)

-t timeout_ms

解析地址或路由时的超时时间,以毫秒(ms)为单位。(默认2000 - 2秒)

ucmatose

使用librdmacm在两个节点之间建立一组可靠的RDMA连接,可选择在节点之间传输数据,然后断开连接。

 

用法:

ucmatose [-s server_address] [-b bind_address]
                 [-f address_format] [-P port_space]
                 [-c connections] [-C message_count] [-S message_size] [-a ack_timeout]
      
ucmatose -s server_address [-b bind_address]
                 [-f address_format] [-P port_space]
                 [-c connections] [-C message_count] [-S message_size] [-t tos] [-a ack_timeout]

例子:

服务端:

ucmatose -b 10.252.8.1

客户端:

ucmatose  -s 10.252.8.1

ucmatose -b 10.252.64.25 -c 10

ucmatose -s 10.252.64.25 -c 10

rping

建立可靠的RDMA连接,使用librdmacm在两个节点之间。可选择在节点之间执行RDMA传输,然后断开连接。

mckey

使用librdmacm在节点之间建立一组RDMA多播通信路径,可选择将数据包传输给接收节点,然后拆除通信。

 

 

ib_acme ib_acme是用于IB ACM的测试和配置utility

ibv_rc_pingpong 通过可靠连接(RC)传输,在InfiniBand上运行一个简单的乒乓测试。

\ibv_uc_pingpong\ibv_ud_pingpong

ibv_srq_pingpong 通过可靠的连接(RC)传输,使用多个队列对(QPs)和一个共享的接收队列(SRQ),运行一个简单的InfiniBand ping-pong测试。

ibv_xsrq_pingpong:InfiniBand上通过扩展可靠连接(XRC)传输服务运行一个简单的乒乓测试,使用共享接收队列(SRQ)。

riostream

使用RDMA协议(rsocket)进行流式传输,以连接和交换客户端和服务器应用程序之间的数据。

rstream

使用基于RDMA的流协议(rsocket)来连接客户端和服务器应用程序之间的数据交换。

udpong

使用不可靠的数据报流通过RDMA协议(rsocket)在客户端和服务器应用程序之间建立连接并交换数据。

RDMA的工具:

ibv_asyncwatch  将转发到用户空间的 RDMA 设备的异步事件显示出来。

ibv_asyncwatch -d mlx5_bond_0

vendstat

使用特定厂商的 MAD(管理数据包)来访问超出 IB 规范的厂商特定功能。目前,支持 Mellanox InfiniSwitch-III(IS3)和 InfiniSwitch-IV(IS4)。

  • srp_daemon(ib_srp.ko)
  • iwpmd(针对 iwarp 内核提供程序)
  • ibacm(用于 InfiniBand 通信管理助手)
  • efa.ko
  • iw_cxgb4.ko
  • hfi1.ko
  • hns-roce.ko
  • i40iw.ko
  • ib_qib.ko
  • mlx4_ib.ko
  • mlx5_ib.ko
  • ib_mthca.ko
  • ocrdma.ko
  • qedr.ko
  • rdma_rxe.ko
  • siw.ko
  • vmw_pvrdma.ko
  • /dev/infiniband/uverbsX(libibverbs)
  • /dev/infiniband/rdma_cm(librdmacm)
  • /dev/infiniband/umadX(libibumad)

这篇关于【RDMA】rdma-core驱动源码包|ibverbs|rdmacm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/557163

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

red5-server源码

red5-server源码:https://github.com/Red5/red5-server