rdma-core 是一个开源项目,为长途直接内存访问(RDMA)提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具,旨在简化 RDMA 应用的开发和摆设。
rdma-core 是一个提供 RDMA(Remote Direct Memory Access)功能的焦点库和工具集。它包括了用户态的 RDMA 驱动、库和工具,支持多种 RDMA 协议,如 InfiniBand、RoCE(RDMA over Converged Ethernet)和 iWARP。
基础知识参考博文:
一文带你了解什么是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_core、ib_ipoib、ib_uverbs 等。可以使用以下下令检查:
如果没有看到这些模块,可能需要加载它们:
- 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 源码目录结构:
克隆完堆栈后,源码将位于 rdma-core 目录中。紧张的目录结构如下:
rdma-core/
├── CMakeLists.txt # CMake 构建体系入口文件
├── buildlib/ # 构建相干的辅助脚本
├── documentation/ # 文档
├── libibumad/ # libibumad 库源码
├── libibverbs/ # libibverbs 库源码
├── libmlx5/ # libmlx5 库源码
├── librdmacm/ # librdmacm 库源码
├── providers/ # RDMA 设备提供者的实现
├── tests/ # 测试代码
├── utils/ # 实用工具
└── ... # 其他文件和目录
2.3 编译
执行./build.sh指令,目的是主动化构建 rdma-core 项目。这个脚本通常封装了一系列的下令,用于编译和安装项目,简化了手动执行多个步骤的过程。这将会构建 rdma-core 并生成所需的库文件。
三、rdma-core中README详解
3.1 文档原件
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 的构建体系。快速开始:
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_rxe 或 siw)以及 <TYPE> 为与驱动程序对应的范例(rxe 或 siw)。
- # modprobe <DRIVER> # rdma link add <NAME> type <TYPE> netdev <DEVICE>
复制代码 请留意,您需要一个足够新的 iproute2 版本,以使上述下令正常工作。
您可以使用 ibv_devices 或 rdma 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 文档。运行以下下令以生成:
然后打开 html/index.html 来查看文档。
留意: 当出现以下错误时:
确保您已安装 Doxygen。如果没有,请根据您的操纵体系安装 Doxygen:
- sudo apt-get install doxygen
复制代码
再次执行:
乐成生成了 Doxygen 配置文件 Doxyfile
在终端中,确保您仍旧在 rdma-core 目录下,然后运行以下下令生成文档
当我们打开 index.html 文档后:
4.3 构建体系
rdma-core 使用 CMake 作为其构建体系。您可以查看 CMakeLists.txt 文件,了解项目的构建流程和构建选项。
4.4 焦点库和工具:
4.4.1libibverbs:
该目录包含通用的 RDMA 库,用于与 RDMA 设备进行交互。查看 libibverbs 目录下的源码,了解如何使用 verbs 接口进行 RDMA 操纵。
4.4.2 libibumad:
该库提供管理和诊断 InfiniBand 子网的功能。查看 libibumad 目录下的源码,了解如何管理 InfiniBand 设备。
4.4.3 libmlx5:
该库是 Mellanox 硬件的设备提供者实现。查看 libmlx5 目录,了解具体设备的实现细节。
4.4.4 librdmacm:
该库提供 RDMA 毗连受理功能。查看 librdmacm 目录下的源码,了解如何建立和管理 RDMA 毗连。
4.4.5 providers
包含差别设备提供者的实现(如 mlx5、hns、bnxt 等)。查看该目录以了解差别 RDMA 设备的具体实现。
五、学习示例代码
在 RDMA-Core 的 GitHub 堆栈中,查看示例代码。这些代码通常提供了使用 RDMA 的根本用法和应用场景。运行和修改示例程序,实验理解其工作原理。
5.1 tests目录
tests 这个目录通常包含用于测试 RDMA 功能的示例代码,虽然紧张用于测试,但也可以作为学习和参考的示例。
这些文件大多是与 RDMA 和 Mellanox (现在的 NVIDIA) 的 mlx5 驱动程序相干的测试和基础代码。以下是对这些文件的扼要介绍:
- args_parser.py:用于解析下令行参数的实用工具,资助在运行测试时传入差别的参数。
- base.py:通常是一个基础类或模块,其他模块可能会继承或依赖于它,提供通用的功能或界说。
- base_rdmacm.py:与 RDMA 毗连受理(RDMA Connection Manager)相干的基础功能模块。
- cuda_utils.py:与 CUDA 相干的实用工具,可能涉及到 GPU 相干的 RDMA 操纵。
- efa_base.py:与 EFA (Elastic Fabric Adapter) 相干的基础实现。
- mlx5_base.py:Mellanox mlx5 设备的基础功能实现。
- mlx5_prm_structs.py:界说 mlx5 驱动程序中的数据结构,可能是与硬件通信所需的结构体。
- rdmacm_utils.py:提供 RDMA Connection Manager 的辅助功能。
- run_tests.py:用于运行所有测试的脚本文件。
- 测试文件(如 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:测试流量管理功能。
- utils.py:包含一些通用的辅助函数,以便在多个模块中重用。
- __init__.py:标识这个目录是一个 Python 包,可能会初始化包的某些功能或导入。
这些文件通常用于开发和测试 RDMA 驱动程序,以确保其功能的正确性和性能。如果你想深入了解某个特定文件的功能,可以查看它的源代码,或者查看相干的文档和注释。
5.2 build/bin 包含示例程序
这些代码通常提供了使用 RDMA 的根本用法和应用场景。运行和修改示例程序,实验理解其工作原理。

示例代码是 rdma-core 项目中提供的工具和脚本,用于管理和测试 RDMA(长途直接内存访问)设备和网络。
- bitmap_test: 测试位图操纵的工具。
- check_lft_balance.pl: 检查逻辑转发表(LFT)平衡的 Perl 脚本。
- cmtime: 用于 RDMA 毗连受理(CM)时间测试的工具。
- dump_fts: 转储转发表(FTS)的工具。
- dump_lfts.sh: 转储逻辑转发表(LFT)的 Shell 脚本。
- dump_mfts.sh: 转储多播转发表(MFT)的 Shell 脚本。
- ibacm: InfiniBand 地址转换服务(ACM)工具。
- ibaddr: 显示 InfiniBand 设备的地址信息。
- ibcacheedit: 编辑 InfiniBand 缓存信息的工具。
- ibccconfig: InfiniBand 链路层配置工具。
- ibccquery: 查询 InfiniBand 链路层配置的工具。
- ibfindnodesusing.pl: 查找使用特定端口的节点的 Perl 脚本。
- ibhosts: 显示 InfiniBand 网络中的主机信息。
- ibidsverify.pl: 验证 InfiniBand 设备 ID 的 Perl 脚本。
- iblinkinfo: 显示 InfiniBand 链路信息的工具。
- ibnetdiscover: 发现 InfiniBand 网络拓扑的工具。
- ibnodes: 显示 InfiniBand 网络中的节点信息。
- ibping: 用于 InfiniBand 设备之间 ping 测试的工具。
- ibqueryerrors: 查询 InfiniBand 设备错误信息的工具。
- ibroute: 显示 InfiniBand 路由信息的工具。
- ibrouters: 显示 InfiniBand 网络中的路由器信息。
- ibsendtrap: 发送 InfiniBand 陷阱(trap)的工具。
- ibstat: 显示 InfiniBand 设备状态的工具。
- ibstatus: 显示 InfiniBand 设备详细状态的工具。
- ibswitches: 显示 InfiniBand 网络中的交换机信息。
- ibsysstat: 显示 InfiniBand 体系状态的工具。
- ibtracert: 用于 InfiniBand 网络路径跟踪的工具。
- ibv_asyncwatch: 监视 InfiniBand Verbs 异步变乱的工具。
- ibv_devices: 列出可用 InfiniBand Verbs 设备的工具。
- ibv_devinfo: 显示 InfiniBand Verbs 设备信息的工具。
- ibv_rc_pingpong: 用于 InfiniBand Verbs RC(可靠毗连)模式 ping-pong 测试的工具。
- ibv_srq_pingpong: 用于 InfiniBand Verbs 共享吸收队列(SRQ)模式 ping-pong 测试的工具。
- ibv_uc_pingpong: 用于 InfiniBand Verbs UC(不可靠毗连)模式 ping-pong 测试的工具。
- ibv_ud_pingpong: 用于 InfiniBand Verbs UD(不可靠数据报)模式 ping-pong 测试的工具。
- ibv_xsrq_pingpong: 用于 InfiniBand Verbs 扩展共享吸收队列(XSRQ)模式 ping-pong 测试的工具。
- iwpmd: InfiniBand 工作负载分区管理工具。
- mcm_rereg_test: 多播毗连受理(MCM)重新注册测试工具。
- mckey: 多播密钥管理工具。
- perfquery: 查询 InfiniBand 性能参数的工具。
- rdma_client: RDMA 客户端工具。
- rdma_rename: RDMA 定名空间重定名工具。
- rdma_server: RDMA 服务器工具。
- rdma_xclient: RDMA 扩展客户端工具。
- rdma_xserver: RDMA 扩展服务器工具。
- rcopy: RDMA 长途复制工具。
- riostream: RDMA 流工具。
- rping: RDMA ping 工具。
- rstream: RDMA 流测试工具。
- run_tests.py: 运行测试的 Python 脚本。
- sainfo: SA(服务属性)信息工具。
- smpdump: 转储 SA(服务属性)信息的工具。
- smpquery: 查询 SA(服务属性)信息的工具。
- srp_daemon: SCSI RDMA 协议(SRP)守护进程。
- srdump: 转储 SR(服务请求)信息的工具。
- srt_daemon: SR(服务请求)守护进程。
- srt_server: SR(服务请求)服务器工具。
- srt_test: SR(服务请求)测试工具。
- srt_util: SR(服务请求)实用工具。
- srt_xclient: SR(服务请求)扩展客户端工具。
- srt_xserver: SR(服务请求)扩展服务器工具。
- testleaks: 内存泄漏测试工具。
- ucmatose: UCM(用户模式毗连受理)工具。
- udpong: UDP ping 工具。
- umad_compile_test: UMAD(用户模式管理)编译测试工具。
- umad_reg2: UMAD(用户模式管理)注册工具。
- umad_register2: UMAD(用户模式管理)注册工具。
- umad_sa_mcm_rereg_test: UMAD(用户模式管理)SA(服务属性)MCM(多播毗连受理)重新注册测试工具。
- 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.so, libefa.so, libefa.so.1, libefa.so.1.3.53.0: Elastic Fabric Adapter(EFA)库。
- libhfi1verbs-rdmav34.so: Intel Omni-Path HFI1 驱动库。
- libhns-rdmav34.so, libhns.so, libhns.so.1, libhns.so.1.0.53.0: Huawei HNS(HiSilicon Network Subsystem)库。
- libibmad.so, libibmad.so.5, libibmad.so.5.3.53.0: InfiniBand 管理数据(MAD)库,用于构建和解析 MAD 消息。
- libibnetdisc.so, libibnetdisc.so.5, libibnetdisc.so.5.1.53.0: InfiniBand 网络发现库。
- libibumad.so, libibumad.so.3, libibumad.so.3.2.53.0: 用户模式的管理数据(UMAD)库。
- libibverbs.so, libibverbs.so.1, libibverbs.so.1.14.53.0: InfiniBand Verbs 库,用于 RDMA 设备的低级接口。
- libipathverbs-rdmav34.so: QLogic InfiniPath 驱动库。
- libmana-rdmav34.so, libmana.so, libmana.so.1, libmana.so.1.0.53.0: Microsoft Azure Network Adapter(MANA)库。
- libmlx4-rdmav34.so, libmlx4.so, libmlx4.so.1, libmlx4.so.1.0.53.0: Mellanox ConnectX-3 驱动库。
- libmlx5-rdmav34.so, libmlx5.so, libmlx5.so.1, libmlx5.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.so, librdmacm.so.1, librdmacm.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. 网络管理和监控:
- 使用 libibmad、libibumad 和 libibnetdisc 库进行网络管理和监控。
- 可以编写脚本或程序来查询网络状态、配置网络设备。
3. 驱动开发和优化:
- 使用特定的驱动库(如 libmlx5, libcxgb4, libhns 等)进行驱动开发或优化。
- 可以根据硬件特性调整配置,提拔性能。
这些库的详细使用方法可以参考相应的 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_server 和 rdma_client 工具的参数来调整测试内容和数据量。
6.3 项目扩展
你可以根据需要扩展这个项目,例如:
- 性能测试: 使用 ibv_rc_pingpong、ibv_srq_pingpong 等工具测试 RDMA 网络的性能。
- 监控和诊断: 使用 ibstat、ibstatus、perfquery 等工具监控 RDMA 网络的状态和性能。
- 故障清除: 使用 ibtracert、ibqueryerrors 等工具进行网络故障清除。
通过这种方式,你可以机动运用 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,与开发者互动。
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 上讨论相干问题。
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 技术发展的构造,提供技术资源和尺度。
九、 参考书籍和资源
查找关于 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 开发者和专家互动,获取最新的技术信息和开发动态,提高本身的技能和知识。
十、 实践和反馈
在学习过程中,积极进行实践,编写代码并进行测试。寻求反馈,与他人讨论你的实现和遇到的问题。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |