目录
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)。