如何使用rdma-core来实现RDMA操作

rdma-core 是一个开源项目,为远程直接内存访问(RDMA)提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具,旨在简化 RDMA 应用的开发和部署。

基础知识参考博文:

一文带你了解什么是RDMA

RDMA 高性能架构基本原理与设计方案

 RDMA之RoCE & Soft-RoCE_software roce

目录:

目录:

一、什么是rdma-core?

1.1 主要组成部分

1.2 功能特点

二、安装和使用

2.1 下载安装

2.2 编译

三、rdma-core中README详解

3.1 文档原件

3.2 原文解读

3.2.1 RDMA Core 用户空间库和守护进程

3.2.2 在 CentOS 7 和 Amazon Linux 2 上构建

四、RDMA-Core 库的功能和 API

4.1 官方文档

4.2 API 文档

五、学习示例代码

 5.1 tests目录

5.2 build/bin 包含示例程序

5.3 build/lib 包含共享库

六、进行实践项目

6.1 项目目标

6.2 项目步骤

1. 环境准备

2. 编写 RDMA 服务器

3. 编写 RDMA 客户端

4. 运行项目

5. 测试和验证

6.3 项目扩展

七、 深入学习性能调优

八、 参与社区

8.1 RDMA Mailing Lists

8.2 Stack Overflow

8.3 GitHub

8.4 Reddit(可能需要VPN)

8.5 OpenFabrics Alliance (OFA)

8.5 Linux Kernel Mailing List (LKML)

8.6 RDMAmojo

8.7 RDMA Consortium 

九、 参考书籍和资源

十、 实践和反馈


一、什么是rdma-core?

rdma-core 是 RDMA 应用开发的重要基础,提供了丰富的 API 和工具,支持多种 RDMA 设备和协议。它的高性能和低延迟特性使其成为现代数据中心和高性能计算环境中的关键技术。通过 rdma-core,开发者可以方便地构建高效的 RDMA 应用程序。

1.1 主要组成部分

1. 库和 API:rdma-core 提供了多种 API,用于管理 RDMA 设备和执行 RDMA 操作。这些 API 支持用户空间应用程序与 RDMA 硬件之间的直接交互。

2. 工具:包含多个命令行工具,用于检测和管理 RDMA 设备。例如,ibv_devinfo 可用于查询 RDMA 设备的信息,ib_write_bw 和 ib_read_lat 等工具用于性能测试和基准测试。

3. 示例代码:rdma-core 提供了一些示例应用程序,帮助开发者理解如何使用 RDMA API 进行数据传输和连接管理。

1.2 功能特点

1. 高性能: RDMA 允许数据在网络中的两个主机之间直接传输,而无需经过操作系统内核,从而显著降低延迟和 CPU 占用率。

2. 多种传输协议支持: 包括 InfiniBand、RoCE(RDMA over Converged Ethernet)和 iWARP 等。

3. 灵活性: 为开发者提供了灵活的接口,支持多种 RDMA 操作,如写、读、发送和接收等。

4. 多种设备支持: 支持多种 RDMA 硬件设备,使其能够在不同的网络环境中使用。

二、安装和使用

2.1 下载安装

在大多数 Linux 发行版中,可以使用包管理工具安装 rdma-core。例如,在 Ubuntu 上,可以使用以下命令:

sudo apt-get install rdma-core

InfiniBand 驱动程序,如果你使用的是 InfiniBand 硬件,请确保系统中已加载了相关的内核模块,例如 ib_coreib_ipoibib_uverbs 等。可以使用以下命令检查: 

lsmod | grep ib_

如果没有看到这些模块,可能需要加载它们:

sudo modprobe ib_core
sudo modprobe ib_ipoib
sudo modprobe ib_uverbs

 

也可以从源代码编译安装:

git clone https://github.com/linux-rdma/rdma-core.git
cd rdma-core

2.2 编译

执行./build.sh指令,目的是自动化构建 rdma-core 项目。这个脚本通常封装了一系列的命令,用于编译和安装项目,简化了手动执行多个步骤的过程。这将会构建 rdma-core 并生成所需的库文件。

./build.sh

将自己编写的 RDMA 程序放入构建目录,假设你的程序名为 client.c,将其复制到构建后的 lib 目录,使用 gcc 编译 client.c,确保链接到 libibverbs 库。可以使用以下命令:

cp ../../client.c ./
gcc client.c -o client -g -L. -Wl,-rpath=./ -libverbs
  • -o client 指定输出的可执行文件名为 client
  • -g 选项用于生成调试信息。
  • -L. 指定当前目录为库文件搜索路径。
  • -Wl,-rpath=./ 设置运行时库搜索路径为当前目录。

三、rdma-core中README详解

3.1 文档原件

[![Build Status](https://dev.azure.com/ucfconsort/rdma-core/_apis/build/status/linux-rdma.rdma-core?branchName=master)](https://dev.azure.com/ucfconsort/rdma-core/_build/latest?definitionId=2&branchName=master)# RDMA Core Userspace Libraries and DaemonsThis is the userspace components for the Linux Kernel's drivers/infiniband
subsystem. Specifically this contains the userspace libraries for the
following device nodes:- /dev/infiniband/uverbsX (libibverbs)- /dev/infiniband/rdma_cm (librdmacm)- /dev/infiniband/umadX (libibumad)The userspace component of the libibverbs RDMA kernel drivers are included
under the providers/ directory. Support for the following Kernel RDMA drivers
is included:- bnxt_re.ko- efa.ko- erdma.ko- iw_cxgb4.ko- hfi1.ko- hns-roce.ko- irdma.ko- ib_qib.ko- mana_ib.ko- mlx4_ib.ko- mlx5_ib.ko- ib_mthca.ko- ocrdma.ko- qedr.ko- rdma_rxe.ko- siw.ko- vmw_pvrdma.koAdditional service daemons are provided for:- srp_daemon (ib_srp.ko)- iwpmd (for iwarp kernel providers)- ibacm (for InfiniBand communication management assistant)# BuildingThis project uses a cmake based build system. Quick start:```sh
$ bash build.sh
```*build/bin* will contain the sample programs and *build/lib* will contain the
shared libraries. The build is configured to run all the programs 'in-place'
and cannot be installed.### Debian Derived```sh
$ apt-get install build-essential cmake gcc libudev-dev libnl-3-dev libnl-route-3-dev ninja-build pkg-config valgrind python3-dev cython3 python3-docutils pandoc
```Supported releases:* Debian 9 (stretch) or newer
* Ubuntu 16.04 LTS (xenial) or newer### Fedora, CentOS 8```sh
$ dnf builddep redhat/rdma-core.spec
```NOTE: Fedora Core uses the name 'ninja-build' for the 'ninja' command.### openSUSE```sh
$ zypper install cmake gcc libnl3-devel libudev-devel ninja pkg-config valgrind-devel python3-devel python3-Cython python3-docutils pandoc
```## Building on CentOS 7, Amazon Linux 2Install required packages:```sh
$ yum install cmake gcc libnl3-devel libudev-devel make pkgconfig valgrind-devel
```Developers on CentOS 7 or Amazon Linux 2 are suggested to install more modern
tooling for the best experience.CentOS 7:```sh
$ yum install epel-release
$ yum install cmake3 ninja-build pandoc
```Amazon Linux 2:```sh
$ amazon-linux-extras install epel
$ yum install cmake3 ninja-build pandoc
```NOTE: EPEL uses the name 'ninja-build' for the 'ninja' command, and 'cmake3'
for the 'cmake' command.# UsageTo set up software RDMA on an existing interface with either of the available
drivers, use the following commands, substituting `<DRIVER>` with the name of
the driver of your choice (`rdma_rxe` or `siw`) and `<TYPE>` with the type
corresponding to the driver (`rxe` or `siw`).```
# modprobe <DRIVER>
# rdma link add <NAME> type <TYPE> netdev <DEVICE>
```Please note that you need version of `iproute2` recent enough is required for the
command above to work.You can use either `ibv_devices` or `rdma link` to verify that the device was
successfully added.# Reporting bugsBugs should be reported to the <linux-rdma@vger.kernel.org> mailing list
In your bug report, please include:* Information about your system:- Linux distribution and version- Linux kernel and version- InfiniBand hardware and firmware version- ... any other relevant information* How to reproduce the bug.* If the bug is a crash, the exact output printed out when the crashoccurred, including any kernel messages produced.# Submitting patchesSee [Contributing to rdma-core](Documentation/contributing.md).# Stable branchesStable versions are released regularly with backported fixes (see Documentation/stable.md)
The current minimum version still maintained is 'v30.X'

3.2 原文解读

以下是对提供的 RDMA-Core 项目说明的中文翻译和讲解

3.2.1 RDMA Core 用户空间库和守护进程

这是 Linux 内核中 drivers/infiniband 子系统的用户空间组件。具体而言,这包含了以下设备节点的用户空间库:

  • /dev/infiniband/uverbsX(libibverbs)
  • /dev/infiniband/rdma_cm(librdmacm)
  • /dev/infiniband/umadX(libibumad)

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

  • bnxt_re.ko
  • efa.ko
  • erdma.ko
  • iw_cxgb4.ko
  • hfi1.ko
  • hns-roce.ko
  • irdma.ko
  • ib_qib.ko
  • mana_ib.ko
  • mlx4_ib.ko
  • mlx5_ib.ko
  • ib_mthca.ko
  • ocrdma.ko
  • qedr.ko
  • rdma_rxe.ko
  • siw.ko
  • vmw_pvrdma.ko

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

  • srp_daemon(ib_srp.ko)
  • iwpmd(用于 iwarp 内核提供程序)
  • ibacm(用于 InfiniBand 通信管理助手)

1. 构建

该项目使用基于 CMake 的构建系统。快速开始:

$ bash build.sh

build/bin 将包含示例程序,build/lib 将包含共享库。构建配置为“就地”运行所有程序,无法安装。

2. Debian 系列

$ apt-get install build-essential cmake gcc libudev-dev libnl-3-dev libnl-route-3-dev ninja-build pkg-config valgrind python3-dev cython3 python3-docutils pandoc

支持的版本:

  • Debian 9(stretch)或更新版本
  • Ubuntu 16.04 LTS(xenial)或更新版本

3. Fedora、CentOS 8

$ dnf builddep redhat/rdma-core.spec

注意:Fedora Core 使用名称 'ninja-build' 作为 'ninja' 命令。

4. openSUSE

$ zypper install cmake gcc libnl3-devel libudev-devel ninja pkg-config valgrind-devel python3-devel python3-Cython python3-docutils pandoc

3.2.2 在 CentOS 7 和 Amazon Linux 2 上构建

1. 安装所需软件包:

$ yum install cmake gcc libnl3-devel libudev-devel make pkgconfig valgrind-devel

建议 CentOS 7 或 Amazon Linux 2 开发者安装更现代的工具,以获得最佳体验。

CentOS 7:

$ yum install epel-release $ yum install cmake3 ninja-build pandoc

Amazon Linux 2:

$ amazon-linux-extras install epel $ yum install cmake3 ninja-build pandoc

注意:EPEL 使用名称 'ninja-build' 作为 'ninja' 命令,并且 'cmake3' 作为 'cmake' 命令。

2. 使用:

要在现有接口上设置软件 RDMA,使用以下命令,替换 <DRIVER> 为所选驱动程序的名称(rdma_rxesiw)以及 <TYPE> 为与驱动程序对应的类型(rxesiw)。

# modprobe <DRIVER> # rdma link add <NAME> type <TYPE> netdev <DEVICE>

请注意,您需要一个足够新的 iproute2 版本,以使上述命令正常工作。

您可以使用 ibv_devicesrdma link 来验证设备是否成功添加。

3. 报告错误:

错误应报告给 linux-rdma@vger.kernel.org 邮件列表。请在您的错误报告中包含:

  • 有关您的系统的信息:

    • Linux 发行版和版本
    • Linux 内核和版本
    • InfiniBand 硬件和固件版本
    • 其他任何相关信息
  • 如何重现该错误。

  • 如果错误导致崩溃,请提供崩溃发生时打印的确切输出,包括任何产生的内核消息。

4. 提交补丁:

请参阅 [Contributing to rdma-core](Documentation/contributing.md) 。

5. 稳定分支

稳定版本定期发布,并包含回溯修复(请参见 Documentation/stable.md)。当前仍在维护的最低版本为 'v30.X'。

四、RDMA-Core 库的功能和 API

4.1 官方文档

Documentation 目录:在仓库中的 Documentation 目录下,您可以找到更详细的文档,包括 API 文档和使用指南。

以下是您列出的 RDMA-Core 项目中的文档文件的简要介绍: 

1. azure-pipelines.md:该文件通常包含有关如何在 Azure Pipelines 环境中构建和测试 RDMA-Core 项目的指南和配置说明。

2. contributing.md:此文档提供有关如何为 RDMA-Core 项目贡献代码或文档的指南,包括提交补丁、报告错误和参与开发过程的规则和建议。

3. ibsrpdm.md:该文件涉及到 IB-SRP (InfiniBand SCSI RDMA Protocol) 的实现和使用说明,具体内容可以包含配置、操作和使用 IB-SRP 的示例。

4. librdmacm.md:该文档描述 `librdmacm` 库的功能和 API,提供有关如何使用该库进行 RDMA 连接管理的详细信息,包括函数说明和使用示例。

5. release.md:该文件包含关于发布 RDMA-Core 项目的信息,通常包括版本发布的计划、版本历史、更新日志等。

6. stable.md:该文档提供有关项目稳定版本的信息,包括当前维护的稳定版本、更新策略和长期支持版本的信息。

7. testing.md:此文档描述 RDMA-Core 的测试策略和实践,包括如何编写和运行测试,确保代码质量和功能正确性的方法。

8. versioning.md:该文件解释项目的版本控制策略,包括版本号的格式、如何管理和发布版本更新的规则。

9. CMakeLists.txt:这是 CMake 构建系统的配置文件,定义了构建项目所需的源文件、库依赖和构建选项。

10. ibacm.md:该文档介绍 `ibacm`(InfiniBand Communication Manager)的功能和使用方法,包括如何配置和使用该守护进程进行 InfiniBand 连接管理。

11. libibverbs.md:此文档详细说明 `libibverbs` 库的功能和 API,提供了使用该库进行 RDMA 操作的详细指南和示例。

12. pyverbs.md:该文件可能介绍了 `pyverbs`,这是一个 Python 绑定库,允许在 Python 中使用 RDMA 功能,文档可能包含安装方法和 API 说明。

13. rxe.md:该文档介绍 RXE(RDMA over Ethernet)的实现,描述如何在 Ethernet 网络上使用 RDMA,包括配置和使用说明。

14. tag_matching.md:该文件可能涉及标签匹配的实现或使用说明,具体内容可以包括 RDMA 连接中如何使用标签来管理和匹配请求。

15. udev.md:此文档描述如何使用 `udev` 设备管理器来处理 RDMA 设备的创建设定,可能包含规则和配置示例。

通过这些文档,开发者可以更好地理解和使用 RDMA-Core 项目中的各个组件和功能。如果需要深入了解某个特定文档的内容,可以直接查看相关的 Markdown 文件。

4.2 API 文档

Doxygen 文档:RDMA-Core 通常会使用 Doxygen 生成 API 文档。如果在本地构建 RDMA-Core,可以在构建目录中找到生成的 HTML 格式的 API 文档。运行以下命令以生成:

doxygen Doxyfile

然后打开 html/index.html 来查看文档。

注意: 当出现以下错误时:

确保您已安装 Doxygen。如果没有,请根据您的操作系统安装 Doxygen:

sudo apt-get install doxygen

再次执行:

doxygen -g Doxyfile

成功生成了 Doxygen 配置文件 Doxyfile

在终端中,确保您仍然在 rdma-core 目录下,然后运行以下命令生成文档

doxygen Doxyfile

当我们打开 index.html 文档后:

五、学习示例代码

在 RDMA-Core 的 GitHub 仓库中,查看示例代码。这些代码通常提供了使用 RDMA 的基本用法和应用场景。运行和修改示例程序,尝试理解其工作原理。

 5.1 tests目录

tests 这个目录通常包含用于测试 RDMA 功能的示例代码,虽然主要用于测试,但也可以作为学习和参考的示例。

这些文件大多是与 RDMA 和 Mellanox (现在的 NVIDIA) 的 mlx5 驱动程序相关的测试和基础代码。以下是对这些文件的简要介绍:

  1. args_parser.py可能用于解析命令行参数的实用工具,帮助在运行测试时传入不同的参数。

  2. base.py:通常是一个基础类或模块,其他模块可能会继承或依赖于它,提供通用的功能或定义。

  3. base_rdmacm.py:与 RDMA 连接管理(RDMA Connection Manager)相关的基础功能模块。

  4. cuda_utils.py:与 CUDA 相关的实用工具,可能涉及到 GPU 相关的 RDMA 操作。

  5. efa_base.py:与 EFA (Elastic Fabric Adapter) 相关的基础实现。

  6. mlx5_base.py:Mellanox mlx5 设备的基础功能实现。

  7. mlx5_prm_structs.py:定义 mlx5 驱动程序中的数据结构,可能是与硬件通信所需的结构体。

  8. rdmacm_utils.py:提供 RDMA Connection Manager 的辅助功能。

  9. run_tests.py:用于运行所有测试的脚本文件。

  10. 测试文件(如 test_cq.py, test_qp.py, test_mlx5_*.py等):这些文件通常是单元测试或集成测试,测试不同功能模块的正确性,包括:

    • test_cq.py:测试完成队列 (Completion Queue) 的功能。
    • test_qp.py:测试队列对 (Queue Pair) 的功能。
    • test_mlx5_devx.py:测试 mlx5 设备的 DevX 接口。
    • test_cuda_dmabuf.py:测试 CUDA 直接内存缓冲区的功能。
    • test_flow.py:测试流量管理功能。
  11. utils.py:包含一些通用的辅助函数,以便在多个模块中重用。

  12. __init__.py:标识这个目录是一个 Python 包,可能会初始化包的某些功能或导入。

这些文件通常用于开发和测试 RDMA 驱动程序,以确保其功能的正确性和性能。如果你想深入了解某个特定文件的功能,可以查看它的源代码,或者查看相关的文档和注释。

5.2 build/bin 包含示例程序

这些代码通常提供了使用 RDMA 的基本用法和应用场景。运行和修改示例程序,尝试理解其工作原理。

示例代码是 rdma-core 项目中提供的工具和脚本,用于管理和测试 RDMA(远程直接内存访问)设备和网络。

  1. bitmap_test: 测试位图操作的工具。
  2. check_lft_balance.pl: 检查逻辑转发表(LFT)平衡的 Perl 脚本。
  3. cmtime: 用于 RDMA 连接管理(CM)时间测试的工具。
  4. dump_fts: 转储转发表(FTS)的工具。
  5. dump_lfts.sh: 转储逻辑转发表(LFT)的 Shell 脚本。
  6. dump_mfts.sh: 转储多播转发表(MFT)的 Shell 脚本。
  7. ibacm: InfiniBand 地址转换服务(ACM)工具。
  8. ibaddr: 显示 InfiniBand 设备的地址信息。
  9. ibcacheedit: 编辑 InfiniBand 缓存信息的工具。
  10. ibccconfig: InfiniBand 链路层配置工具。
  11. ibccquery: 查询 InfiniBand 链路层配置的工具。
  12. ibfindnodesusing.pl: 查找使用特定端口的节点的 Perl 脚本。
  13. ibhosts: 显示 InfiniBand 网络中的主机信息。
  14. ibidsverify.pl: 验证 InfiniBand 设备 ID 的 Perl 脚本。
  15. iblinkinfo: 显示 InfiniBand 链路信息的工具。
  16. ibnetdiscover: 发现 InfiniBand 网络拓扑的工具。
  17. ibnodes: 显示 InfiniBand 网络中的节点信息。
  18. ibping: 用于 InfiniBand 设备之间 ping 测试的工具。
  19. ibqueryerrors: 查询 InfiniBand 设备错误信息的工具。
  20. ibroute: 显示 InfiniBand 路由信息的工具。
  21. ibrouters: 显示 InfiniBand 网络中的路由器信息。
  22. ibsendtrap: 发送 InfiniBand 陷阱(trap)的工具。
  23. ibstat: 显示 InfiniBand 设备状态的工具。
  24. ibstatus: 显示 InfiniBand 设备详细状态的工具。
  25. ibswitches: 显示 InfiniBand 网络中的交换机信息。
  26. ibsysstat: 显示 InfiniBand 系统状态的工具。
  27. ibtracert: 用于 InfiniBand 网络路径跟踪的工具。
  28. ibv_asyncwatch: 监视 InfiniBand Verbs 异步事件的工具。
  29. ibv_devices: 列出可用 InfiniBand Verbs 设备的工具。
  30. ibv_devinfo: 显示 InfiniBand Verbs 设备信息的工具。
  31. ibv_rc_pingpong: 用于 InfiniBand Verbs RC(可靠连接)模式 ping-pong 测试的工具。
  32. ibv_srq_pingpong: 用于 InfiniBand Verbs 共享接收队列(SRQ)模式 ping-pong 测试的工具。
  33. ibv_uc_pingpong: 用于 InfiniBand Verbs UC(不可靠连接)模式 ping-pong 测试的工具。
  34. ibv_ud_pingpong: 用于 InfiniBand Verbs UD(不可靠数据报)模式 ping-pong 测试的工具。
  35. ibv_xsrq_pingpong: 用于 InfiniBand Verbs 扩展共享接收队列(XSRQ)模式 ping-pong 测试的工具。
  36. iwpmd: InfiniBand 工作负载分区管理工具。
  37. mcm_rereg_test: 多播连接管理(MCM)重新注册测试工具。
  38. mckey: 多播密钥管理工具。
  39. perfquery: 查询 InfiniBand 性能参数的工具。
  40. rdma_client: RDMA 客户端工具。
  41. rdma_rename: RDMA 命名空间重命名工具。
  42. rdma_server: RDMA 服务器工具。
  43. rdma_xclient: RDMA 扩展客户端工具。
  44. rdma_xserver: RDMA 扩展服务器工具。
  45. rcopy: RDMA 远程复制工具。
  46. riostream: RDMA 流工具。
  47. rping: RDMA ping 工具。
  48. rstream: RDMA 流测试工具。
  49. run_tests.py: 运行测试的 Python 脚本。
  50. sainfo: SA(服务属性)信息工具。
  51. smpdump: 转储 SA(服务属性)信息的工具。
  52. smpquery: 查询 SA(服务属性)信息的工具。
  53. srp_daemon: SCSI RDMA 协议(SRP)守护进程。
  54. srdump: 转储 SR(服务请求)信息的工具。
  55. srt_daemon: SR(服务请求)守护进程。
  56. srt_server: SR(服务请求)服务器工具。
  57. srt_test: SR(服务请求)测试工具。
  58. srt_util: SR(服务请求)实用工具。
  59. srt_xclient: SR(服务请求)扩展客户端工具。
  60. srt_xserver: SR(服务请求)扩展服务器工具。
  61. testleaks: 内存泄漏测试工具。
  62. ucmatose: UCM(用户模式连接管理)工具。
  63. udpong: UDP ping 工具。
  64. umad_compile_test: UMAD(用户模式管理)编译测试工具。
  65. umad_reg2: UMAD(用户模式管理)注册工具。
  66. umad_register2: UMAD(用户模式管理)注册工具。
  67. umad_sa_mcm_rereg_test: UMAD(用户模式管理)SA(服务属性)MCM(多播连接管理)重新注册测试工具。
  68. vendstat: 供应商状态工具。

这些工具和脚本涵盖了 InfiniBand 和 RDMA 网络的配置、管理、测试和故障排除等多个方面。你可以根据具体需求选择合适的工具来使用。

5.3 build/lib 包含共享库

这些库文件是与 rdma-core 及其相关组件一起安装的,用于支持远程直接内存访问(RDMA)和 InfiniBand(IB)等高性能网络的操作。

  • libibacmp.so: InfiniBand Address/Path Record Cache Manager Protocol(IB ACM)库。用于地址和路径记录缓存管理。
  • libbnxt_re-rdmav34.so: Broadcom NetXtreme RDMA over Converged Ethernet (RoCE) 驱动库。
  • libcxgb4-rdmav34.so: Chelsio Communications T4/T5/T6 RDMA 驱动库。
  • libefa-rdmav34.solibefa.solibefa.so.1libefa.so.1.3.53.0: Elastic Fabric Adapter(EFA)库。
  • libhfi1verbs-rdmav34.so: Intel Omni-Path HFI1 驱动库。
  • libhns-rdmav34.solibhns.solibhns.so.1libhns.so.1.0.53.0: Huawei HNS(HiSilicon Network Subsystem)库。
  • libibmad.solibibmad.so.5libibmad.so.5.3.53.0: InfiniBand 管理数据(MAD)库,用于构建和解析 MAD 消息。
  • libibnetdisc.solibibnetdisc.so.5libibnetdisc.so.5.1.53.0: InfiniBand 网络发现库。
  • libibumad.solibibumad.so.3libibumad.so.3.2.53.0: 用户模式的管理数据(UMAD)库。
  • libibverbs.solibibverbs.so.1libibverbs.so.1.14.53.0: InfiniBand Verbs 库,用于 RDMA 设备的低级接口。
  • libipathverbs-rdmav34.so: QLogic InfiniPath 驱动库。
  • libmana-rdmav34.solibmana.solibmana.so.1libmana.so.1.0.53.0: Microsoft Azure Network Adapter(MANA)库。
  • libmlx4-rdmav34.solibmlx4.solibmlx4.so.1libmlx4.so.1.0.53.0: Mellanox ConnectX-3 驱动库。
  • libmlx5-rdmav34.solibmlx5.solibmlx5.so.1libmlx5.so.1.24.53.0: Mellanox ConnectX-4/5 驱动库。
  • libmthca-rdmav34.so: Mellanox InfiniBand HCAs 驱动库。
  • libocrdma-rdmav34.so: Emulex OneConnect RDMA 驱动库。
  • libqedr-rdmav34.so: QLogic QED 驱动库。
  • librdmacm.solibrdmacm.so.1librdmacm.so.1.3.53.0: RDMA 连接管理库,用于建立 RDMA 连接。
  • librspreload.so: 用于 RDMA 的预加载库。
  • librxe-rdmav34.so: Soft RoCE 驱动库。
  • libsiw-rdmav34.so: Software iWARP 驱动库。
  • libvmw_pvrdma-rdmav34.so: VMware Paravirtual RDMA 驱动库。
  • pkgconfig: 包含库的 pkg-config 文件,这些文件提供了编译和链接时所需的配置信息。

如何使用这些库 :

这些库提供了多种功能,用于开发和管理 RDMA 和 InfiniBand 网络应用。你可以根据项目需求选择特定的库进行开发,例如:

1. 开发 RDMA 应用:

  • 使用 libibverbs 和 librdmacm 库开发高性能 RDMA 应用。
  • 示例程序可以使用这些库来建立 RDMA 连接、发送和接收数据。

2. 网络管理和监控

  • 使用 libibmadlibibumad 和 libibnetdisc 库进行网络管理和监控。
  • 可以编写脚本或程序来查询网络状态、配置网络设备。

3. 驱动开发和优化

  • 使用特定的驱动库(如 libmlx5libcxgb4libhns 等)进行驱动开发或优化。
  • 可以根据硬件特性调整配置,提升性能。

这些库的详细使用方法可以参考相应的 man 手册页或库的文档。通过灵活运用这些库,你可以构建功能强大的 RDMA 和 InfiniBand 网络应用程序。 

六、进行实践项目

创建自己的 RDMA 应用程序。可以开始编写一个简单的客户端-服务器模型,通过 RDMA 进行数据传输。尝试实现更复杂的功能,例如数据一致性、错误处理和性能优化。

后续会将实践小项目博客链接放到此处,感兴趣的大佬也可以自己尝试的做一些,在此先提供一部分思路:

6.1 项目目标

构建一个简单的 RDMA 客户端-服务器应用,客户端向服务器发送数据并接收响应。

6.2 项目步骤

1. 环境准备

确保你已经安装了必要的依赖项,包括 rdma-core 工具和库。

2. 编写 RDMA 服务器

使用 rdma_server 工具作为 RDMA 服务器。你可以编写一个简单的脚本来启动服务器。

将以上内容保存为 rdma_server.sh 并赋予执行权限:

3. 编写 RDMA 客户端

使用 rdma_client 工具作为 RDMA 客户端。你可以编写一个简单的脚本来连接到服务器并发送数据。

将以上内容保存为 rdma_client.sh 并赋予执行权限:

4. 运行项目

首先启动 RDMA 服务器:

然后在另一台机器或另一个终端窗口启动 RDMA 客户端:

其中,<SERVER_IP> 是服务器的 IP 地址,<SERVER_PORT> 是 RDMA 服务器监听的端口。

5. 测试和验证

通过客户端发送数据到服务器,并观察服务器的响应。你可以通过修改 rdma_serverrdma_client 工具的参数来调整测试内容和数据量。

6.3 项目扩展

你可以根据需要扩展这个项目,例如:

  1. 性能测试: 使用 ibv_rc_pingpongibv_srq_pingpong 等工具测试 RDMA 网络的性能。

  2. 监控和诊断: 使用 ibstatibstatusperfquery 等工具监控 RDMA 网络的状态和性能。

  3. 故障排除: 使用 ibtracertibqueryerrors 等工具进行网络故障排除。

通过这种方式,你可以灵活运用 rdma-core 项目中的工具和脚本,构建并扩展你的 RDMA 网络应用和测试项目。

七、 深入学习性能调优

学习 RDMA 的性能特性,如何优化 RDMA 应用程序以获得更好的性能。了解 RDMA 的调试和监控工具。

后续会将此教程以博客形式补充到此处,有想法的大佬也可以自己调试一下

八、 参与社区

加入 RDMA 相关的社区和论坛,参与讨论,向其他开发者学习。关注 RDMA 的最新动态、开发和最佳实践。

8.1 RDMA Mailing Lists

Linux-rdma Mailing List: 这是讨论 Linux 上 RDMA 开发和问题的主要邮件列表。你可以订阅并参与讨论。

  • 订阅地址: Linux RDMA and InfiniBand Development

OpenFabrics Alliance Mailing List: OpenFabrics 软件的主要讨论列表。 

  • 订阅地址: lists.openfabrics.org Mailing Lists

8.2 Stack Overflow

在 Stack Overflow 上,你可以找到许多关于 RDMA 的问题和回答。使用关键词如 "RDMA", "InfiniBand", "ibverbs" 等进行搜索。

  • 链接: https://stackoverflow.com

8.3 GitHub

GitHub 上有许多与 RDMA 相关的开源项目。你可以查看项目的 issue 和 pull request,与开发者互动。

  • 链接: https://github.com

8.4 Reddit(可能需要VPN)

Reddit 上的 r/networking 和 r/linuxadmin 等子版块有时候会有 RDMA 相关的讨论

  • 链接: https://www.reddit.com/r/networking/
  • 链接: https://www.reddit.com/r/linuxadmin/

8.5 OpenFabrics Alliance (OFA)

OFA 是一个推动 RDMA 标准和技术发展的组织。其官网上有许多资源和信息。

  • 链接: https://www.openfabrics.org

8.5 Linux Kernel Mailing List (LKML)

RDMA 和 InfiniBand 的开发者也经常在 Linux Kernel Mailing List 上讨论相关问题。

  • 订阅地址: https://lkml.org

8.6 RDMAmojo

RDMAmojo 是一个专注于 RDMA 技术的博客和社区,提供许多关于 RDMA 的教程和资讯。

  • 链接: RDMAmojo - RDMAmojo - blog on RDMA technology and programming by Dotan Barak RDMAmojo

8.7 RDMA Consortium 

RDMA Consortium 是一个致力于促进 RDMA 技术发展的组织,提供技术资源和标准。

  • 链接: Home

九、 参考书籍和资源

查找关于 RDMA、网络编程和高性能计算的书籍,深入学习相关理论和实践。

在线课程:寻找网络编程或高性能计算相关的在线课程,许多平台上都有相关资源。

文档和书籍:

  • 《Infiniband Network Architecture》: 这是一本关于 InfiniBand 技术的深入书籍。
  • 《RDMA Aware Networks Programming User Manual》: Mellanox 提供的 RDMA 编程手册,涵盖了 RDMA 编程的基础知识和高级主题。

会议和研讨会

OFA Workshop: 每年举办的 OpenFabrics Alliance 工作坊,汇集了 RDMA 领域的专家和从业者,分享最新的研究和开发进展。

  • 链接: https://www.openfabrics.org/index.php/ofa-workshop.html

在线课程和教程:

  • Coursera 和 Udemy 等平台上有一些关于高性能计算和网络编程的课程,可能包含 RDMA 相关内容。

通过参与这些社区和论坛,你可以与全球的 RDMA 开发者和专家互动,获取最新的技术信息和开发动态,提高自己的技能和知识。 

十、 实践和反馈

在学习过程中,积极进行实践,编写代码并进行测试。寻求反馈,与他人讨论你的实现和遇到的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Langchain--如何使用大模型 2.0

【&#x1f34a;易编橙终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 Langch…

【已解决】嵌入式linux mobaxterm unable to open connection to comx 串口正常连接,但终端无法输入

1.点击Session重新选择串口&#xff0c;注意看看串口是不是连接到虚拟机&#xff0c;导致串口被占用。 2.选择PC机与开发板连接的串口&#xff0c;不知道的话可以打开设备管理器看看&#xff0c;选择正确的波特率&#xff0c;一般是115200。 3.关键一步&#xff1a;选择后别急…

【计算机网络原理】网络层IP协议的总结和数据链路层以太网协议的总结.

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

MobaXterm tmux 配置妥当

一、事出有因 缘由&#xff1a;接上篇文章&#xff0c;用Docker搭建pwn环境后&#xff0c;用之前学过的多窗口tmux进行调试程序&#xff0c;但是鼠标滚动的效果不按预期上下翻屏。全网搜索很难找到有效解决办法&#xff0c;最后还是找到了一篇英文文章&#xff0c;解决了&…

正点原子imx6ull-mini-Linux设备树下的LED驱动实验(4)

1&#xff1a;修改设备树文件 在根节点“/”下创建一个名为“alphaled”的子节点&#xff0c;打开 imx6ull-alientek-emmc.dts 文件&#xff0c; 在根节点“/”最后面输入如下所示内容 alphaled {#address-cells <1>;#size-cells <1>;compatible "atkalp…

25.惰性队列

介绍 消费者由于各种原因而致使长时间不能消费消息造成堆积。比如有一百万条消息发送到mq中&#xff0c;消费者这时宕机了不能消费消息&#xff0c;造成了消息堆积。惰性队列就有必要了。 正常情况下&#xff0c;消息保存在内存中。消费者从内存中读取消息消费&#xff0c;速…

游戏制作中没想明白的事情

当一个备忘录&#xff0c;有的是还没有时间去深入研究&#xff0c;或者没有从头了解 什么是建模绑定&#xff1f;为什么人物建模&#xff0c;初始化都是双手打开的&#xff1f;平着放武器&#xff0c;但运行的时候武器会自动竖起来&#xff0c;这是怎么做到的&#xff1f; 思…

KamaCoder 100. 岛屿的最大面积 + Leetcode 695. Max Area of Island

题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均…

XYCTF2024 WP

Pwn&#xff1a; hello_world(签到)&#xff1a; 这里的printf没有格式化字符串漏洞&#xff0c;但是我们依旧可以填充栈来利用printf泄露栈上信息 根据我们能填充的字节数来看&#xff0c;我们无法泄露出libc_start_main128的地址&#xff0c;但是可以泄露libc_start_call_m…

一款免费且功能强大的硬件检测工具,绿色小巧免安装!

HWiNFO是一款免费功能强大且广泛使用的硬件信息检测和监控工具&#xff0c;适用于Windows系统。它能够提供详细的硬件信息&#xff0c;包括CPU、主板、内存、硬盘、显卡等组件的详细规格和性能数据。此外&#xff0c;HWiNFO还支持实时监控硬件状态&#xff0c;如温度、电压和风…

【React Hooks原理 - useTransition】

概述 在上一篇中我们介绍了useDeferredValue的基本原理&#xff0c;本文主要介绍一下useTransition这个Hook&#xff0c;之所以在这里提到useDeferredValue&#xff0c;是因为这两个Hook都是在React18引入的进行渲染优化的Hooks&#xff0c;在某些功能上是重叠的&#xff0c;主…

面试面到自闭,字节软件测试岗五轮面试,四个小时灵魂拷问...

准备过程 我自己是本科毕业后在老东家干了两年多&#xff0c;老东家算是一家”小公司”(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身)&#xff0c;毕业这两年多我也没有在大厂待过&#xff0c;因此找坑的时候是非常非常虚的。迫于心慌&#xff0c;我好好思考了一阵来…

Android 性能优化(二):LeakCanary【用于分析代码是否存在内存泄漏】程序无响应

目录 1&#xff09;内存相关的五种常见问题 2&#xff09;内存溢出和内存泄漏 3&#xff09;LeakCanary是什么? 4&#xff09;LeakCanary如何使用&#xff0c;如何分析&#xff1f; 5&#xff09;LeakCanary监测的内容 提问&#xff1a;程序有时候很卡&#xff0c;经常会出现…

前端开发:Vue2.0桌面组件库-Element

引入Element的步骤&#xff1a; 1.在vscode终端中执行命令&#xff08;需要联网&#xff09; 下载成功 2.在main.js中导入element.ui组件库。 同上&#xff0c;自定义的组件需要先在根组件中引入。 3.访问官网&#xff0c;复制调整代码

变阻器的主要特性和参数有哪些?

变阻器的主要特性和参数有很多&#xff0c;下面将详细介绍几个重要的特性和参数&#xff1a; 1. 电阻范围&#xff1a;滑动变阻器的电阻范围是指其最大电阻值和最小电阻值之间的范围&#xff0c;这个范围通常由制造商指定&#xff0c;用户在选择变阻器时需要根据实际需求选择合…

基于 SSM 的汽车租赁系统

基于 SSM 的电器网上订购系统 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Spring、JSP、MyBatis 工具&#xff1a;MyEclipse/IDEA、Tomcat 引言 汽车租赁是在约定时间内&#xff0c;租赁经营人将租赁汽车&#xff08;包括载货汽车和载客汽车&#x…

AFSim 仿真系统--子系统几何考虑

子系统几何考虑 概述 由于WSF试图表示以多种方式运行的子系统&#xff08;传感器&#xff0c;武器或通信&#xff09;&#xff0c;因此它提供的定义属性的机制&#xff0c;如几何限制&#xff0c;可能相当令人生畏。本文档提供了关于这些机制如何运作以及如何定义行为类似于真实…

Axure RP:打造动态交互的大屏可视化设计利器

Axure大屏可视化是指使用Axure RP这款原型设计工具来创建具有视觉冲击力和数据展示功能的大屏幕界面。Axure以其强大的交互设计和丰富的组件库&#xff0c;成为了实现大屏可视化的重要工具之一。以下是对Axure大屏可视化的详细阐述&#xff1a; 一、Axure在大屏可视化中的优势 …

ctfshow web入门 中期测评 web503--web516(无web511--web514)

web503 看了之前的文件的发现都没办法利用了 这个页面的源码发现了 layui.use([layer, form], function(){var layer layui.layer,form layui.form;form.on(submit(admin_settings), function(data){$.ajax({url:api/admin_settings.php,dataType:"json",type:po…