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概念相关推荐
- 【RDMA】RDMA技术详解(二):Send Receive操作
原文:https://blog.csdn.net/qq_21125183/article/details/86525012 英文:https://zcopy.wordpress.com/2010/10 ...
- DMA RDMA 技术详解
DMA 技术是一个 直接内存访问技术. 在传统的linux 内存读写操作都必须经过cpu,读写寻址都是有cpu 完成的, 现在有一中技术 让数据读写完全由网卡自己完成. 这样就必须有硬件支持,及系统必 ...
- RDMA技术详解——RDMA常见概念
Fabric A local-area RDMA network is usually referred to as a fabric. 所谓Fabric,就是支持RDMA的局域网(LAN). CA( ...
- 15、Windows驱动开发技术详解笔记(11) 基本概念
9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...
- RDMA技术详解——RDMA核心概念
1.1 Memory Registration(MR) | 内存注册 RDMA 就是用来对内存进行数据传输.那么怎样才能对内存进行传输,很简单,注册. 因为RDMA硬件对用来做数据传输的内存是有特殊要 ...
- RDMA技术详解(一):RDMA概述
1. DMA和RDMA概念 1.1 DMA DMA(直接内存访问)是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要CPU的参与. 传统内存访问需要通过CPU进行数据copy ...
- RDMA技术详解——原理和三种实现方式
RDMA作为一种host-offload, host-bypass技术,使低延迟.高带宽的直接的内存到内存的数据通信成为了可能.目前支持RDMA的网络协议有: 1.InfiniBand(IB): 从一 ...
- RDMA技术详解(二):RDMA Send Receive操作
1. 前言 RDMA指的是远程直接内存访问,这是一种通过网络在两个应用程序之间搬运缓冲区里的数据的方法.RDMA与传统的网络接口不同,因为它绕过了操作系统.这允许实现了RDMA的程序具有如下特点: 绝 ...
- RDMA技术详解(三):理解RDMA Scatter Gather List
1. 前言 在使用RDMA操作之前,我们需要了解一些RDMA API中的一些需要的值.其中在ibv_send_wr我们需要一个sg_list的数组,sg_list是用来存放ibv_sge元素,那么什么 ...
最新文章
- 怎么通过python挣外快_利用Python爬虫轻松挣外快的几个方法(值得收藏)
- java 多线程 串行 加锁_java多线程 synchronized 与lock锁 实现线程安全
- 这样理解PWM,想不懂都难!
- [react] create-react-app创建新运用怎么解决卡的问题?
- 如何查看SQL Server2000执行过的SQL语句
- Qt实践|HTTPS知识点-SSL socket获取百度首页
- leetcode - 739. 每日温度
- 爱奇艺深夜就“倒奶视频”致歉:《青你3》成团夜停止录制和直播......
- 结构体定义小的放前面_编程C语言进阶篇——自定义数据类型:结构体
- JdbcTemplate的主要用法
- 干加个偏旁可以变成什么字_字好看的孩子,都是用了这些小学生学写字的方法...
- eclipse 远程链接访问hadoop 集群日志信息没有输出的问题l
- C# 大华相机图像采集
- 面试想不带简历,老罗可以,你不行!
- 如何理解阿里月饼事件中各方的表现
- python爬取b站_python3 爬取B站视频弹幕
- 代码随想录第十七天LeetCode 110、257、404
- 【福利帖】7日玩转ESP32
- ndnSIM学习(十)——apps之ndn-producer.cpp和ndn-consumer.cpp源码分析
- datasets: mnist