本文主要是介绍RDMA技术详解——DMA和RDMA概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.1 DMA
DMA(Direct Memory Access,直接内存访问)是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要CPU的参与。如下图所示
红线部分为传统内存访问,需要通过CPU进行数据copy来移动数据,通过CPU将内存中的Buffer1移动到Buffer2中。在DMA模式:可以同DMA Engine之间通过硬件将数据从Buffer1移动到Buffer2,而不需要操作系统CPU的参与,大大降低了CPU Copy的开销。
1.2 RDMA
RDMA是一种概念,在两个或者多个计算机进行通讯的时候使用DMA, 从一个主机的内存直接访问另一个主机的内存。
RDMA是一种host-offload, host-bypass技术,允许应用程序(包括存储)在它们的内存空间之间直接做数据传输。具有RDMA引擎的以太网卡(RNIC)–而不是host–负责管理源和目标之间的可靠连接。使用RNIC的应用程序之间使用专注的QP和CQ进行通讯:
1、每一个应用程序可以有很多QP和CQ
2、每一个QP包括一个SQ和RQ
3、每一个CQ可以跟多个SQ或者RQ相关联
如上图,在传统模式下,两台服务器上的应用之间传输数据,过程是这样的:
- 首先要把数据从应用缓存拷贝到Kernel中的TCP协议栈缓存;
- 然后再拷贝到驱动层;
- 最后拷贝到网卡缓存。
多次内存拷贝需要CPU多次介入,导致处理延时大,达到数十微秒。同时整个过程中CPU过多参与,大量消耗CPU性能,影响正常的数据计算。
在RDMA 模式下,应用数据可以绕过Kernel协议栈直接向网卡写数据,带来的显著好处有:
- 处理延时由数十微秒降低到1微秒内;
- 整个过程几乎不需要CPU参与,节省性能;
- 传输带宽更高。
这篇关于RDMA技术详解——DMA和RDMA概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!