【RDMA项目】如何使用rdma-core进行调用开发一个实战项目

【RDMA项目】如何使用rdma-core进行调用开发一个实战项目_第1张图片

RDMA (Remote Direct Memory Access) 是一种网络协议,可以在计算节点之间实现高效的内存数据传输,而无需CPU的干预。rdma-core 是 RDMA 的一个用户空间库,提供了一些简单易用的接口来使用 RDMA 功能。

开发了一套高级 RDMA(远程直接内存访问)连接和数据传输系统,使用 rdma-core 库(包括 rdma_cm 和 ibverbs)编写,适用于高性能计算和实时数据处理。该项目分为服务器和客户端两部分,能够在实际网络环境中实现 RDMA 连接和数据传输。通过零拷贝技术和高效的网络编程,系统显著提高了数据传输速度和减少了延迟。项目成功验证了 RDMA 在高性能和低延迟场景中的应用价值,为需要高效数据传输的应用场景提供了可靠的解决方案。

在这个项目中,rdma_cm(RDMA Connection Manager)用于管理RDMA连接的创建、绑定、监听、接受和断开。rdma_cm 提供了一套API,使得RDMA编程变得更为简便,抽象了底层复杂的连接管理过程。

在这个项目中,ibverbs(Infiniband Verbs API)用于管理低级别的Infiniband操作,如保护域、内存区域、完成队列和队列对(QP)的分配和管理。​​​​​​​

基础知识参考博文:

一文带你了解什么是RDMA

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

 RDMA之RoCE & Soft-RoCE_software roce

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

教你在虚拟机上把普通网卡配置成softroce设备来运行rdma-core中的示例程序-CSDN博客

目录:

目录:

一、环境准备:

 1.1 安装依赖

1.2 安装 rdma-core

1.3 支持RDMA的机器

二、使用 RDMA(主要用于测试RDMA 环境配置是否正确)

2.1 编写 RDMA 程序

2.2 编译和运行程序

三、进一步的 RDMA-core 操作示例

3.1 服务器代码

3.1.1 初始化和准备工作

3.1.2 设置和监听

3.1.3 接受连接

3.1.4 资源分配和QP创建

3.1.5 内存注册和接收操作

3.1.6 轮询和处理完成队列

3.1.7 清理资源

3.1.8 主函数

3.2 客户端代码

3.2.1 初始化和准备工作

3.2.2 创建和解析连接

3.2.3 路由解析

3.2.4 资源分配和QP创建

3.2.5 内存注册与连接

3.2.6 数据发送

3.2.7 清理资源

3.2.8  主函数:

3.3 编译和运行

 3.5 结果

四、rdma-core 实现更复杂的 RDMA 连接和数据传输操作

4.1 RDMA 操作基础

4.2 设备发现与上下文创建

4.1.1 变量定义

4.1.2 获取设备列表 :

4.1.3 选择设备:

4.1.4 获取设备上下文

4.1.5 打印设备名称并且清理资源

4.1.6 编译运行:

4.1.7 示例输出:

4.3 内存注册与队列对创建

4.3.1 获取InfiniBand设备列表并打开设备:(此过程就是4.2介绍的过程)

4.3.2 创建保护域(Protection Domain,PD):

4.3.3 注册内存区域:

4.3.4 创建完成队列(Completion Queue,CQ): 

4.3.5  设置队列对属性并创建队列对:

4.3.6 清理资源:

4.3.7 演示效果

4.4 建立 RDMA 连接

 1. 服务器端代码(与3.1代码略有不同)

2. 客户端代码(与3.2代码相同)

4.5 编译和运行

 4.6 结果

五、验证RDMA 在高性能和低延迟场景中的应用价值

5.1 性能测试方法

5.1.2 延迟测试:

5.2.3 零拷贝效应:

5.2.4 资源使用率分析:

5.2  实验设计

5.2.1  测试环境搭建:

你可能感兴趣的:(物联网嵌入式开发项目,深耕Linux系统下的应用开发,github,RDMA-core,rdma,服务器,客户端,内存访问,网络)