前言: 什么是RDMA? 简单来说,RDMA就是指不通过操作系统(OS)内核以及TCP/IP协议栈在网络上传输数据,因此延迟(latency)非常低,CPU消耗非常少。 下面给出一篇简单介绍RDMA的文章之中英文对照翻译。

Introduction to Remote Direct Memory Access (RDMA) | RDMA概述

1. What is RDMA? | 什么是RDMA

Direct memory access (DMA) is an ability of a device to access host memory directly, without the intervention of the CPU(s).

RDMA (Remote DMA) is the ability of accessing (i.e. reading from or writing to) memory on a remote machine without interrupting the processing of the CPU(s) on that system.

DMA(直接内存访问)指的是设备有能力直接访问主机内存,而不需要CPU的干预。

RDMA(远程直接内存访问)则指的是直接访问(读取或写入)远程主机内存的能力,不需要远程主机系统的CPU参与。

扩展 1: What is RDMA? (截图来源)

2. So? why is this so good? | 为嘛这么好呢

Using RDMA has the following major advantages:

  • Zero-copy - applications can perform data transfer without the network software stack involvement and data is being send received directly to the buffers without being copied between the network layers.
  • Kernel bypass - applications can perform data transfer directly from userspace without the need to perform context switches.
  • No CPU involvement - applications can access remote memory without consuming any CPU in the remote machine. The remote memory machine will be read without any intervention of remote process (or processor). The caches in the remote CPU(s) won't be filled with the accessed memory content.
  • Message based transactions - the data is handled as discrete messages and not as a stream, which eliminates the need of the application to separate the stream into different messages/transactions.
  • Scatter/gather entries support - RDMA supports natively working with multiple scatter/gather entries i.e. reading multiple memory buffers and sending them as one stream or getting one stream and writing it to multiple memory buffers.

使用RDMA的优势所在:

  • 零拷贝 - 应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。
  • 内核旁路 - 应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。
  • 不需要CPU干预 - 应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充。
  • 消息基于事务 - 数据被处理为离散消息而不是流,消除了应用程序将流切割为不同消息/事务的需求。
  • 支持分散/聚合 - RDMA原生态支持分散/聚合。也就是说,读取多个内存缓冲区然后作为一个流发出去或者接收一个流然后写入到多个内存缓冲区里去。

扩展2: RDMA - How does it Work

3. Where can I find RDMA? | 哪里需要用到RDMA

You can find RDMA in industries that need at least one the following:

  • Low latency - For example: HPC, financial services, web 2.0
  • High Bandwidth - For example: HPC, medical appliances, storage and backup systems, cloud computing
  • Small CPU footprint  - For example: HPC, cloud computing

And in many-many more other industries...

在业界,RDMA在下列场景中使用:

  • 低延迟 - 例如: HPC, 金融服务,web 2.0
  • 高带宽 - 例如: HPC, 医疗服务,存储与备份系统,云计算
  • CPU占用小 - 例如: HPC, 云计算

还有很多的其他行业...

4. Which network protocols support RDMA? | 支持RDMA的网络协议有哪些

Today, there are several network protocols which support RDMA:

  • InfiniBand (IB) - a new generation network protocol which supports RDMA natively from the beginning. Since this is a new network technology, it requires NICs and switches which supports this technology.
  • RDMA Over Converged Ethernet (RoCE) - a network protocol which allows performing RDMA over Ethernet network. Its lower network headers are Ethernet headers and its upper network headers (including the data) are InfiniBand headers. This allows using RDMA over standard Ethernet infrastructure (switches). Only the NICs should be special and support RoCE.
  • Internet Wide Area RDMA Protocol (iWARP) - a network protocol which allows performing RDMA over TCP. There are features that exist in IB and RoCE and aren't supported in iWARP. This allows using RDMA over standard Ethernet infrastructure (switches). Only the NICs should be special and support iWARP (if CPU offloads are used) otherwise, all iWARP stacks can be implemented in SW and loosing most of the RDMA performance advantages.

时至今日,支持RDMA的网络协议不止一个:

  • IB - 从诞生之日起就支持RDMA的新一代网络协议。IB是一种新的网络技术,需要网卡和交换机都支持才行。
  • RoCE - 允许在以太网网络中执行RDMA操作的网络协议(注:开始叫做IBoE, 后改为RoCE)。RoCE的较低的网络包头是以太网包头,较高的网络包头(包括数据)是IB包头。在标准的以太网基础设施(交换机)上就能跑RDMA,唯一特殊的地方就是网卡(NIC)必须支持RoCE。
  • iWARP - 运行在TCP上执行RDMA操作的网络协议(即是RDMA over TCP)。IB和RoCE都支持的功能,iWARP并不支持。在标准的以太网基础设施(交换机)上就能跑RDMA,唯一特殊的地方就是网卡(NIC)必须支持iWARP(如果使用CPU offloads)。否则,所有的iWARP栈可以在软件上实现,那么就会失去大部分的RDMA性能优势。

5. Does it mean that I need to learn several programming APIs? | 需要学习好几种不同的编程API吗

No. Luckily, the same API (i.e. verbs) can be used for all the above-mentioned RDMA enabled network protocols. In *nix it is libibverbs and kernel verbs and in Windows it is Network Direct (ND).

不用。幸运的是,同一套API(也就是verbs)能够用于上面的支持RDMA的所有网络协议。在*nix平台,API是libibverbs和kernel verbs, 在Windows上则是ND。

6. Are those network protocols interoperable? | 网络协议可以互操作吗

Since those are different network protocols, their packets are completely different and they cannot send/receive messages directly without any router/gateway between them. However, the same code can support all of them. Since all those network protocols support libibverbs, the same binary can be used without even the need to recompile the source code.

不同的网络协议的数据包格式是完全不相同的。在不同的网络协议之间,如果没有路由器/网关,那么彼此之间不可能收发数据。然后,同一套代码能够支持所有网络协议,因为那些网络协议都支持libibverbs。甚至不需要编译源代码就可以使用同一个二进制文件。

7. Do I need to download special packages to use RDMA or is it part of the Operating System? | 用RDMA需要装额外的包吗 or RDMA是OS的一部分吗

For several Operating Systems, RDMA support is embedded within the kernel. For example, Linux which supports RDMA natively and all major Linux distributions support it. Other Operating Systems may need to download a package (such as OFED) to add RDMA support to it.

在不止一个操作系统上,RDMA支持被内嵌在OS内核中。例如,Linux原生态地支持RDMA, 所有主要的Linux发布版本都支持。其他操作系统,可能需要下载一个包(例如OFED),然后增加对RDMA的支持。

推荐阅读:

  1. InfiniBand的版本演进、基础观念、传量传速
  2. RDMA : https://en.wikipedia.org/wiki/Remote_direct_memory_access
  3. IB : https://en.wikipedia.org/wiki/InfiniBand
  4. iSER : https://en.wikipedia.org/wiki/ISCSI_Extensions_for_RDMA
  5. iWARP : https://en.wikipedia.org/wiki/IWARP
  6. RoCE : https://en.wikipedia.org/wiki/RDMA_over_Converged_Ethernet
  7. SDP : https://en.wikipedia.org/wiki/Sockets_Direct_Protocol
  8. SRP : https://en.wikipedia.org/wiki/SCSI_RDMA_Protocol
  9. A Critique of RDMA (对RDMA的批评)

[中英对照]Introduction to Remote Direct Memory Access (RDMA) | RDMA概述的更多相关文章

  1. [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理

    [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理   Introduction to DPDK: ...

  2. Remote Direct Memory Access (RDMA)

    RDMA有三类实现方式,包括RoCE,iWARP和InfiniBand.RDMA的基础是Virtual Interface Architechure (VIA). 参考文档: https://en.w ...

  3. [中英对照]How PCI Works | PCI工作原理

    How PCI Works | PCI工作原理 Your computer's components work together through a bus. Learn about the PCI ...

  4. 【论文翻译】NIN层论文中英对照翻译--(Network In Network)

    [论文翻译]NIN层论文中英对照翻译--(Network In Network) [开始时间]2018.09.27 [完成时间]2018.10.03 [论文翻译]NIN层论文中英对照翻译--(Netw ...

  5. [中英对照]User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序

    如对Linux用户态驱动程序开发有兴趣,请阅读本文,否则请飘过. User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序 ...

  6. eclipse菜单解释及中英对照《二》

    上篇文章主要介绍了eclipse中每个大的标题下的中英文及其用法. 感谢http://blog.csdn.net/li_jinjian2005/article/details/2831641这个博主. ...

  7. eclipse菜单解释及中英对照

    在使用Eclipse作为开发工具的时候,建议使用英文版本的(直接百度从官网下就行,这里不详细描述,如果有问题,咱们私聊).虽然中文版本的对于和我一样对英文是小白的看起来特别爽,但是公司大多是英文版本的 ...

  8. [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)

      这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...

  9. webstorm快捷键 webstorm keymap内置快捷键英文翻译、中英对照说明

    20160114参考网络上的快捷键,整理自己常用的: 查找/代替shift+shift 快速搜索所有文件,简便ctrl+shift+N 通过文件名快速查找工程内的文件(必记)ctrl+shift+al ...

随机推荐

  1. 谁说他们版本不兼容——hadoop1.2.1+hbase0.94.11+nutch2.2.1+el

    一.背景 最近由于项目和论文的需要,需要搭建一个垂直搜索的环境,查阅了很多资料,决定使用Apache的一套解决方案hadoop+hbase+nutch+es.这几样神器的作用就不多作介绍了,自行参考各 ...

  2. spark任务提交到yarn上命令总结

    spark任务提交到yarn上命令总结 1. 使用spark-submit提交任务 集群模式执行 SparkPi 任务,指定资源使用,指定eventLog目录 spark-submit --class ...

  3. jQuery-关于Ajax请求async属性的说明及总结

    在jquery的ajax中如果希望实现同步或者异步,我们可以设置async(默认true,表示异步请求),下面举例说明两种请求方式的区别. 1.后台代码 public JsonResult GetDa ...

  4. [JAVA]java复制文件的4种方式

    尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...

  5. C#语言各个版本特性(二)

    二.排序Product 1.按名称对产品进行排序,以特定顺序显示一个列表的最简单方式就是先将列表排序,再遍历并显示其中的项. C#1.1 使用IComparer对ArrayList进行排序 produ ...

  6. django drf JWT

    建议使用djangorestframework-jwt或者djangorestframework_simplejwt,文档为 https://github.com/GetBlimp/django-re ...

  7. django系列3.4-- request对象和response对象(未完待续)

    一.request对象 详细信息可以查阅django官方文档 共有五种请求相关的常用值 request.path_info 返回用户访问的url不包括域名 request.method 请求中使用的H ...

  8. Application Loader上传app,一直卡在“正在通过 App Store 进行鉴定”

    1.问题现象描述 上传iOS应用,卡在 Authenticating with the iTunes Store 2.解决办法 2.1 打开终端输入代码即可 cd ~ mv .itmstranspor ...

  9. java学习笔记—标准连接池的实现(27)

    javax.sql.DataSource. Java.sql.* DataSource 接口由驱动程序供应商实现.共有三种类型的实现: 基本实现 - 生成标准的 Connection 对象 – 一个D ...

  10. 深入了解java虚拟机(JVM) 第十一章 类的加载

    一.类加载机制概述 虚拟机把描述类的数据从class文件加载到内存并对数据进行效验,解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制. 二.类加载的机制 类加载的过程 ...