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): 应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值