RDMA(远程直接内存访问)原理架构图文详解+与传统通信模式对比

阅读指南: 本文较长,请细心阅读,其中3.1节可以跳过不读。对RDMA概念有所了解的,可以直接从3.2节开始阅读。

1 传统通信模式

使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket。无论编写客户端程序还是服务端程序,系统都要为每个TCP连接都要创建一个socket句柄。这样导致了每次传输通信,都要经过OS和协议栈的管理,因此不管是Socket同步通信还是异步通信,都会存在CPU占用过高的现象。

1.1传统网络通信过程

  1. 数据发送方需要讲数据从用户应用空间Buffer复制到内核空间的Socket Buffer中
  2. 然后Kernel空间中添加数据包头,进行数据封装。通过一系列多层网络协议的数据包处理工作
  3. 数据被Push到NIC网卡中的Buffer进行网络传输
  4. 消息接受方接受从远程机器发送的数据包后,要将数据包从NIC buffer中复制数据到Socket Buffer
  5. 然后经过一些列的多层网络协议进行数据包的解析工作
  6. 解析后的数据被复制到相应位置的用户应用空间Buffer
  7. 这个时候再进行系统上下文切换,用户应用程序才被调用

可以看出传统的通信模式会导致重复的数据拷贝、上下文切换、CPU处理
在这里插入图片描述

2 RDMA基本原理与优势

2.1 基本原理

RDMA是一种新的直接内存访问技术,RDMA让计算机可以直接存取其他计算机的内存,而不需要经过处理器的处理。RDMA将数据从一个系统快速移动到远程系统的内存中,而不对操作系统造成任何影响。

RDMA:
Remote:数据通过网络与远程机器间进行数据传输

Direct:没有内核的参与,有关发送传输的所有内容都卸载到网卡上

Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制

Access:send、receive、read、write、atomic操作


传统的TCP/IP通信,发送和接收数据的过程中,都是在源端应用层数据从上向下逐层拷贝封装,目的端从下向上拷贝和解封装,所以比较慢,而且需要CPU参与的次数很多。RDMA通信过程中,发送和接收,读/写操作中,都是RNIC直接和参与数据传输的已经注册过的内存区域直接进行数据传输,速度快,不需要CPU参与,RDMA网卡接替了CPU的工作,节省下来的资源可以进行其它运算和服务。
在这里插入图片描述
更直观的对比图图:
在这里插入图片描述

可以看到传统的方法需要经过用户态->内核->硬件。
而RDMA直接是只经过用户态,数据的存取是通过RDMA硬件直接操作内存的。

使用RDMA的优势如下:

  • 零拷贝(Zero-copy): 应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。
  • 内核旁路(Kernel byp
<think>好的,用户让我介绍一下如何画一个RDMA的框架原理图。首先,我需要确认自己对RDMA的理解是否正确,然后再思考如何用图示来表达它的框架原理RDMA,即远程直接内存访问,是一种技术,允许计算机直接从另一台计算机的内存中读取或写入数据,而无需操作系统的介入,这样可以减少延迟和CPU开销。通常用于高性能计算和数据中心。 接下来,用户想要一个框架原理图,可能需要展示RDMA的关键组成部分以及数据流动的方式。我需要回忆RDMA的基本架构,包括网卡(RNIC)、队列对(QP)、完成队列(CQ)、内存区域(MR)等概念。同时,可能涉及到的协议如InfiniBand、RoCE或iWARP,这些是否需要体现在框架图中? 然后,考虑用户可能的背景。他们可能是学生、工程师或研究人员,对网络或高性能计算感兴趣。用户可能希望原理图能够清晰展示RDMA的工作流程,以及各组件之间的关系。是否需要分层次来展示,比如硬件层、驱动层、应用层? 还需要考虑如何用中文解释这些概念,并确保图示的各个部分准确无误。比如,队列对(QP)包括发送队列和接收队列,完成队列用于通知操作完成,内存区域是注册的内存块,确保安全访问。另外,RDMA操作的类型,如SEND、WRITE、READ,是否需要标注在图中? 可能用户没有详细说明需要哪种类型的原理图,是逻辑架构还是物理连接图。根据常见的框架图,逻辑架构可能更合适,展示各软件和硬件组件之间的交互。例如,应用层调用API,通过动词接口(Verbs)RNIC通信,RNIC处理数据传输,绕过CPU和操作系统。 还要注意是否需要对比传统网络通信RDMA的区别,比如零拷贝、内核旁路等特性,这些是否需要在图中以某种形式表现。比如,传统路径经过内核协议栈,而RDMA直接通过RNIC访问内存,减少数据拷贝次数。 最后,总结出RDMA框架的主要组成部分,并用文字描述如何绘制这个示意图,可能需要分步骤说明每个部分的位置和功能,确保用户能够根据描述重现图表。同时,检查是否有遗漏的关键点,比如错误处理、内存注册的重要性,或者不同RDMA实现协议的区别是否需要提及。 可能的误区是过于复杂化图表,或者遗漏了关键组件。需要平衡简洁性和全面性,让读者一目了然,同时涵盖核心要素。此外,使用正确的术语和符合中文习惯的表达方式,确保用户理解。</think>以下是**RDMA远程直接内存访问)框架原理图**的绘制要点及分步解析,帮助您理解其核心机制: --- ### **一、RDMA框架核心组件** 绘制原理图时需体现以下关键模块: 1. **RNIC(RDMA网卡)** - 硬件核心,负责协议封装、数据传输内存直接访问 - 标注支持协议:`InfiniBand`、`RoCE`、`iWARP` 2. **队列对(QP, Queue Pair)** - 每个通信端点包含一个QP,分为: - **发送队列(SQ)**:存储待发送的操作请求 - **接收队列(RQ)**:存储待接收的数据缓冲区信息 - 示例结构: ```plaintext QP = SQ + RQ |-> Work Request (WR) 操作类型:SEND/WRITE/READ ``` 3. **完成队列(CQ, Completion Queue)** - 用于通知操作完成状态 - 通过`轮询(Polling)`或`事件(Event)`机制获取结果 4. **内存区域(MR, Memory Region)** - 应用程序注册的受保护内存块 - 需标注`虚拟地址→物理地址→RNIC访问权限`的映射关系 --- ### **二、RDMA数据传输流程** 原理图中需体现**零拷贝**和**内核旁路**特性: 1. **传统网络通信路径**(对比用虚线表示) $$ \text{应用数据} \rightarrow \text{内核缓冲区} \rightarrow \text{协议栈处理} \rightarrow \text{网卡} $$ 2. **RDMA直接路径**(实线加粗表示) $$ \text{应用内存} \xrightarrow{\text{直接访问}} \text{RNIC} \rightarrow \text{网络} $$ --- ### **三、示意图绘制步骤** 1. **绘制两端主机** - 标注为`Host A`和`Host B`,通过RNIC连接 2. **主机内部结构** - **应用层**:标注应用程序和API(如`libibverbs`) - **内存区域**:用方框表示已注册的MR,标注虚拟/物理地址 - **队列结构**:绘制QP(SQ/RQ)和CQ的关联关系 3. **数据流箭头** - 从Host A的SQ指向Host B的RQ - 完成通知从CQ返回应用层 4. **关键特性标注** - 在图中空白处添加说明: - 零拷贝(Zero-Copy) - 内核旁路(Kernel Bypass) - 传输协议(如RoCE v2) --- ### **四、简化示例图** ``` +-------------------+ RNIC +-------------------+ | Host A |<----(Direct Memory Access)--->| Host B | | | | | | +-------------+ | | +-------------+ | | | Application | | | | Application | | | +------|------+ | | +------|------+ | | | Verbs API | | Verbs API | +------v------+ | | +------v------+ | | | QP (SQ/RQ) | | | | QP (SQ/RQ) | | | +------|------+ | | +------|------+ | | | | | | | | +------v------+ | | +------v------+ | | | Memory (MR) | | | | Memory (MR) | | | +-------------+ | | +-------------+ | +-------------------+ +-------------------+ ``` --- ### **五、技术优势标注** 在图中补充说明: - **低延迟**:绕过操作系统和协议栈 - **高吞吐**:支持大规模并行数据传输 - **CPU卸载**:由RNIC直接处理数据传输 如果需要更详细的协议分层图(如RoCE基于UDP/IP的封装),可进一步扩展网络协议栈部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值