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概念相关推荐

  1. 【RDMA】RDMA技术详解(二):Send Receive操作

    原文:https://blog.csdn.net/qq_21125183/article/details/86525012 英文:https://zcopy.wordpress.com/2010/10 ...

  2. DMA RDMA 技术详解

    DMA 技术是一个 直接内存访问技术. 在传统的linux 内存读写操作都必须经过cpu,读写寻址都是有cpu 完成的, 现在有一中技术 让数据读写完全由网卡自己完成. 这样就必须有硬件支持,及系统必 ...

  3. RDMA技术详解——RDMA常见概念

    Fabric A local-area RDMA network is usually referred to as a fabric. 所谓Fabric,就是支持RDMA的局域网(LAN). CA( ...

  4. 15、Windows驱动开发技术详解笔记(11) 基本概念

    9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...

  5. RDMA技术详解——RDMA核心概念

    1.1 Memory Registration(MR) | 内存注册 RDMA 就是用来对内存进行数据传输.那么怎样才能对内存进行传输,很简单,注册. 因为RDMA硬件对用来做数据传输的内存是有特殊要 ...

  6. RDMA技术详解(一):RDMA概述

    1. DMA和RDMA概念 1.1 DMA DMA(直接内存访问)是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要CPU的参与. 传统内存访问需要通过CPU进行数据copy ...

  7. RDMA技术详解——原理和三种实现方式

    RDMA作为一种host-offload, host-bypass技术,使低延迟.高带宽的直接的内存到内存的数据通信成为了可能.目前支持RDMA的网络协议有: 1.InfiniBand(IB): 从一 ...

  8. RDMA技术详解(二):RDMA Send Receive操作

    1. 前言 RDMA指的是远程直接内存访问,这是一种通过网络在两个应用程序之间搬运缓冲区里的数据的方法.RDMA与传统的网络接口不同,因为它绕过了操作系统.这允许实现了RDMA的程序具有如下特点: 绝 ...

  9. RDMA技术详解(三):理解RDMA Scatter Gather List

    1. 前言 在使用RDMA操作之前,我们需要了解一些RDMA API中的一些需要的值.其中在ibv_send_wr我们需要一个sg_list的数组,sg_list是用来存放ibv_sge元素,那么什么 ...

最新文章

  1. 怎么通过python挣外快_利用Python爬虫轻松挣外快的几个方法(值得收藏)
  2. java 多线程 串行 加锁_java多线程 synchronized 与lock锁 实现线程安全
  3. 这样理解PWM,想不懂都难!
  4. [react] create-react-app创建新运用怎么解决卡的问题?
  5. 如何查看SQL Server2000执行过的SQL语句
  6. Qt实践|HTTPS知识点-SSL socket获取百度首页
  7. leetcode - 739. 每日温度
  8. 爱奇艺深夜就“倒奶视频”致歉:《青你3》成团夜停止录制和直播......
  9. 结构体定义小的放前面_编程C语言进阶篇——自定义数据类型:结构体
  10. JdbcTemplate的主要用法
  11. 干加个偏旁可以变成什么字_字好看的孩子,都是用了这些小学生学写字的方法...
  12. eclipse 远程链接访问hadoop 集群日志信息没有输出的问题l
  13. C# 大华相机图像采集
  14. 面试想不带简历,老罗可以,你不行!
  15. 如何理解阿里月饼事件中各方的表现
  16. python爬取b站_python3 爬取B站视频弹幕
  17. 代码随想录第十七天LeetCode 110、257、404
  18. 【福利帖】7日玩转ESP32
  19. ndnSIM学习(十)——apps之ndn-producer.cpp和ndn-consumer.cpp源码分析
  20. datasets: mnist

热门文章

  1. LaTeX插入GIF的标准方法
  2. 潜力无限的BTF,开启区块链金融新格局
  3. 解决linux下/etc/rc.local开机器不执行的原因
  4. 网易云课堂学习-zk入门
  5. Altium Designer中如何把贴片元器件放在底层?
  6. pip安装及matplotlib安装
  7. 安道拓Adient EDI 830物料需求预测报文详解
  8. 【每天学点管理】—绩效面谈的两个技巧
  9. Linux杂项(001) - ext4magic文件恢复
  10. STM32 CubeMX如何生成微秒(us)级延时