RDMA 是什么?RDMA 出现的背景?RDMA 如何工作?RDMA 的优点!
文章目录
这里是我自己写的 一个关于 “RMDA、IB卡、IB驱动包下载、Ubuntu16.04安装IB驱动、RDMA测试” 等的一个学习目录;可以更方便的进行学习及文章的查找:
学习目录:RMDA、IB卡、IB驱动包下载、Ubuntu16.04安装IB驱动、ib_read/write_bw测试
1、RDMA 是什么?
RDMA —— 是一种技术: “远程直接内存访问” 技术。两台计算机之间数据传输直接通过内存访问;无需双方的操作系统、处理器、协议栈介入。
2、RDMA 出现的背景?
先了解一下 传统的 网络通信:
传统的网络通信, 数据需要通过用户空间发送到远程机器的用户空间。
传统的网络通信的工作流程:
这个仅仅是我自己的理解,如果哪里有不对的地方麻烦您联系我,我改正,非常感谢!
传统网络通信存在的问题:
传统网络通信中,是通过 内核 发送消息的;这种方式造成的问题 —— 导致了很低的性能和很低的灵活性,网络延迟!
性能低: —— 由于使用内核发送消息,这种方式存在的很高的 数据移动 和 数据复制的开销;
灵活性低: —— 所有通信协议通过内核传递,这很难去支持 新的网络协议 及 发送/接收 端口。
网络延迟: —— 数据在 系统缓存、内存缓存、NIC缓存 之间来回进行复制移动,给服务器的CPU和内存带来了沉重的负担,尤其是网络带宽。造成了网络延迟!
所以 RDMA 出现了:
因为传统网络通信会造成网络延迟,so 为了解决网络传输中服务器端数据处理的延迟,RDMA 就诞生了 !
RDMA 工作过程?
1)、当一个应用执行RDMA 读或写请求时,不执行任何数据复制.在不需要任何内核内存参与的条件下,RDMA 请求直接从运行在用户空间中的应用中发送到本地NIC( 网卡)。
2)、NIC 读取缓冲的内容,并通过网络传送到远程NIC。
在网络上传输的RDMA 信息.包含目标虚拟地址、内存钥匙和数据本身.请求完成既可以完全在用户空间中处理(通过轮询用户级完成排列)
,或者在应用一直睡眠到请求完成时的情况下通过内核内存处理.RDMA 操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
3)、目标NIC 确认内存钥匙,直接将数据写入应用缓存中.用于操作的远程虚拟内存地址包含在RDMA 信息中。
RDMA 的优点:
1)、zero-copy(零复制): 网卡可以直接与应用内存相互传输数据(不需要应用内存与内核之间复制数据)减少了延迟!
2)、CPU开销低: 因为传输数据的时候不需要 CPU 参与 !
3)、高带宽
关于其他的一些使用或者如何实现 RDMA,请点击文章上方的目录进行查询!我是一个刚接触的小白,很多地方写的不正确,要是您有什么建议或需要修改的地方请联系我,万分感谢!!!