RDMA学习笔记

RDMA WRITE,请求端主动向响应端写入数据

1.请求端APP下发WQE到SQ

2.请求端网卡从SQ中取出WQE,WQE提供本地数据的虚拟地址VA

3.请求端网卡根据VA,转换得到物理地址PA,组装数据包

4.请求端网卡将数据包发送给响应端网卡

5.响应端网卡将VA转换成PA放到指定位置

6.响应端网卡回复ACK

7.请求端网卡收到ACK后生成CQE放入CQ

8.APP取得完成信息

READ:主动读取远端内存数据,远端数据在网卡回复时携带

1.请求端APP下发WQE

2.网卡从SQ中取出WQE,获取相关信息

3.请求端网卡将READ请求发送给响应端网卡

4响应端网卡收到请求后将VA转换为PA,从内存中读取数据

5.响应端网卡回复请求并携带请求端的数据

6.请求端硬件收到数据后将数据放到指定内存区

7.生成CQE放入CQ

8.APP获取完成信息

在RDMA READ 和 WRITE的过程中,全程不需要CPU的参与,但是在READ或WRITE操作之前需要通过其他方式获取权限,例如socket

MR,Memory Region

RDMA软件层在内存中规划一片区域,用于存放和收发数据,这个区域将主机内存和RDMA关联,确保RDMA在进行数据传输时能够正确高效地访问内存区域,这个内存区域就是MR,注册MR 可以使用verbs提供的接口ibv_reg_mr(),在注册这一过程中,内存会创建一个VA和PA之间的映射表,当RDMA网卡需要获取PA时通过查表即可获取PA

在注册MR时会产生两把钥匙L_KEY和R_KEY,分别对应本地和远端,用于保障对内存区域的访问权

注册MR后,为了防止换页导致映射关系发生改变,MR所在的内存会被锁住,直到通信完成主动注销MR

PD,Protection Domain

IB协议中规定:每个节点都至少要有一个PD,每个QP都必须属于一个PD,每个MR也必须属于一个PD

各个PD所容纳的资源彼此隔离,Node 0上两个PD之间QP和MR不能相互访问,Node1的QP不能访问Node0的MR1,

ibv_alloc_pd用于分配一个PD对象,返回PD句柄

代码部分

注册PD:调用ibv_alloc_pd函数分配一个PD对象,该函数会返回一个struct ibv_pd* 类型的指针,指向分配的 PD 对象

struct ibv_pd *ibv_alloc_pd(struct ibv_context *context);

注销PD:ibv_dealloc_pd()函数接受一个struct ibv_pd* 类型的指针作为参数,并释放该 PD 对象

int ibv_dealloc_pd(struct ibv_pd *pd);

注册MR:返回一个指向ibv_mr的指针

struct ibv_mr *ibv_reg_mr(struct ibv_pd *pd, void *addr, 
                          size_t length, int access);

pd:指针,指向与此内存区域相关联的保护域

addr:指针指向要注册的内存区域

length:要注册的MR的大小,单位B

access:描述访问权限

注销MR:

int ibv_dereg_mr(struct ibv_mr *mr);

rdma-example中寻找相关的实例代码

git clone https://github.com/animeshtrivedi/rdma-example
cd rdma-example/src
vi rdma_server.c

在第50行有关于保护域申请的代码,传入客户端连接所在的 RDMA 设备分配一个保护域,如果失败返回相关错误信息

        pd = ibv_alloc_pd(cm_client_id->verbs
                        /* verbs defines a verb's provider,
                         * i.e an RDMA device where the incoming
                         * client connection came */);
        if (!pd) {
                rdma_error("Failed to allocate a protection domain errno: %d\n",
                                -errno);
                return -errno;
        }

当需要进行数据传输时需要注册MR,rdma-example只是简单的通信功能,没有使用这一接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习 RDMA(Remote Direct Memory Access)可以通过以下方法进行: 1. 学习基本概念:了解 RDMA 的基本概念和工作原理,包括 RDMA 网络架构、RDMA 传输协议(如 InfiniBand、RoCE 等)、RDMA 操作模型和数据传输过程等。 2. 阅读文档和规范:查阅相关的 RDMA 文档和规范,包括官方文档、标准规范和协议说明。这些文档可以提供关于 RDMA 的详细信息和技术细节。 3. 参考教材和教程:有一些专门的书籍和教程介绍了 RDMA 技术,包括 RDMA 的原理、设计和实现。可以通过阅读这些教材来深入了解 RDMA。 4. 参加培训和课程:参加相关的培训课程或在线学习平台上的课程,了解 RDMA 的基本原理和应用实践。这些课程通常会提供理论讲解、案例分析和实验演示等。 关于 RDMA 的拥塞算法现状及演进方向,以下是一些常见的拥塞算法和发展趋势: 1. 基于随机早期检测(Random Early Detection, RED)的拥塞控制算法:RED 算法是一种基于随机策略的拥塞控制算法,通过在网络节点上监测队列长度,并根据队列长度的阈值来丢弃或标记数据包,以减少网络拥塞。RED 算法可以应用于 RDMA 网络中,以实现拥塞控制。 2. 基于传输控制协议(Transmission Control Protocol, TCP)的拥塞控制算法:TCP 是一种常见的传输层协议,具有强大的拥塞控制机制。在 RDMA 网络中,可以借鉴 TCP 的拥塞控制算法,如 TCP Vegas、TCP New Reno 等。 3. 基于反馈和控制论的拥塞控制算法:近年来,一些研究提出了基于反馈和控制论的拥塞控制算法,如 Proportional Integral (PI) 控制器、Model Predictive Control (MPC) 等。这些算法可以根据网络状态和性能指标进行动态调整,以实现更精确和高效的拥塞控制。 4. 数据中心拥塞控制算法:随着数据中心规模的增大和应用负载的复杂化,数据中心网络的拥塞控制成为一个重要问题。一些新的拥塞控制算法针对数据中心网络特点进行优化,如 DCTCP、Homa 等。这些算法通过优化拥塞信号传输和调度策略,以提高数据中心网络的性能和吞吐量。 未来 RDMA 拥塞算法的发展方向可能包括以下几个方面: 1. 更精确和动态的拥塞控制:研究人员正在探索更精确和动态的拥塞控制算法,以适应不同网络环境和负载的变化。 2. 机器学习和人工智能在拥塞控制中的应用:机器学习和人工智能技术的发展为拥塞控制提供了新的思路和方法。未来可能会有更多基于机器学习的拥塞控制算法被提出和应用。 3. 跨层次优化:拥塞控制不仅仅局限于传输层,还需要考虑与其他网络层次(如网络拓扑、路由选择等)的协同优化,以实现更高效的拥塞控制。 4. 针对特定应用场景的优化:不同应用场景对网络性能和延迟要求不同,可能需要定制化的拥塞控制算法来满足特定需求。 为了更深入了解 RDMA 的拥塞算法现状和演进方向,建议阅读相关的学术论文、专业期刊和会议论文,以及参考相关的研究报告和技术博客。同时,参与学术会议和研讨会也是了解最新研究动态和交流学习的好途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值