网站建设课程设计实训报告,wordpress熊掌号自动推送,网站代备案公司名称,做网站按钮什么是DMA
DMA全称为Direct Memory Access#xff0c;即直接内存访问。意思是外设对内存的读写过程可以不用CPU参与而直接进行。我们先来看一下没有DMA的时候#xff1a; 无DMA控制器时I/O设备和内存间的数据路径
假设I/O设备为一个普通网卡#xff0c;为了从内存拿到需要…什么是DMA
DMA全称为Direct Memory Access即直接内存访问。意思是外设对内存的读写过程可以不用CPU参与而直接进行。我们先来看一下没有DMA的时候 无DMA控制器时I/O设备和内存间的数据路径
假设I/O设备为一个普通网卡为了从内存拿到需要发送的数据然后组装数据包发送到物理链路上网卡需要通过总线告知CPU自己的数据请求。然后CPU将会把内存缓冲区中的数据复制到自己内部的寄存器中再复制到I/O设备的存储空间中。如果数据量比较大那么很长一段时间内CPU都会忙于搬移数据而无法投入到其他工作中去。
CPU的最主要工作是计算而不是进行数据复制这种工作属于白白浪费了它的计算能力。为了给CPU“减负”让它投入到更有意义的工作中去后来人们设计了DMA机制 有DMA控制器时I/O设备和内存间的数据路径
可以看到总线上又挂了一个DMA控制器它是专门用来读写内存的设备。有了它以后当我们的网卡想要从内存中拷贝数据时除了一些必要的控制命令外整个数据复制过程都是由DMA控制器完成的。过程跟CPU复制是一样的只不过这次是把内存中的数据通过总线复制到DMA控制器内部的寄存器中再复制到I/O设备的存储空间中。CPU除了关注一下这个过程的开始和结束以外其他时间可以去做其他事情。
DMA控制器一般是和I/O设备在一起的也就是说一块网卡中既有负责数据收发的模块也有DMA模块。
什么是RDMA
RDMA Remote Direct Memory Access 意为远程直接地址访问通过RDMA本端节点可以“直接”访问远端节点的内存。所谓直接指的是可以像访问本地内存一样绕过传统以太网复杂的TCP/IP网络协议栈读写远端内存而这个过程对端是不感知的而且这个读写过程的大部分工作是由硬件而不是软件完成的。
为了能够直观的理解这一过程请看下面两个图图中箭头仅做示意不表示实际逻辑或物理关系 传统网络中“节点A给节点B发消息”实际上做的是“把节点A内存中的一段数据通过网络链路搬移到节点B的内存中”而这一过程无论是发端还是收段都需要CPU的指挥和控制包括网卡的控制中断的处理报文的封装和解析等等。
上图中左边的节点在内存用户空间中的数据需要经过CPU拷贝到内核空间的缓冲区中然后才可以被网卡访问这期间数据会经过软件实现的TCP/IP协议栈加上各层头部和校验码比如TCP头IP头等。网卡通过DMA拷贝内核中的数据到网卡内部的缓冲区中进行处理后通过物理链路发送给对端。
对端收到数据后会进行相反的过程从网卡内部存储空间将数据通过DMA拷贝到内存内核空间的缓冲区中然后CPU会通过TCP/IP协议栈对其进行解析将数据取出来拷贝到用户空间中。
可以看到即使有了DMA技术上述过程还是对CPU有较强的依赖。
而使用了RDMA技术之后这一过程可以简单的表示成下面的示意图 同样是把本端内存中的一段数据复制到对端内存中在使用了RDMA技术时两端的CPU几乎不用参与数据传输过程只参与控制面。本端的网卡直接从内存的用户空间DMA拷贝数据到内部存储空间然后硬件进行各层报文的组装后通过物理链路发送到对端网卡。对端的RDMA网卡收到数据后剥离各层报文头和校验码通过DMA将数据直接拷贝到用户空间内存中。
RDMA的优势
RDMA主要应用在高性能计算HPC领域和大型数据中心当中并且设备相对普通以太网卡要昂贵不少比如Mellanox公司的Connext-X 5 100Gb PCIe网卡市价在4000元以上。由于使用场景和价格的原因RDMA与普通开发者和消费者的距离较远目前主要是一些大型互联网企业在部署和使用。
RDMA技术为什么可以应用在上述场景中呢这就涉及到它的以下几个特点
0拷贝指的是不需要在用户空间和内核空间中来回复制数据。 由于Linux等操作系统将内存划分为用户空间和内核空间在传统的Socket通信流程中CPU需要多次把数据在内存中来回拷贝。而通过RDMA技术我们可以直接访问远端已经注册的内存区域。356
内核Bypass指的是IO数据流程可以绕过内核即在用户层就可以把数据准备好并通知硬件准备发送和接收。避免了系统调用和上下文切换的开销。 上图原图[1]可以很好的解释“0拷贝”和“内核Bypass”的含义。上下两部分分别是基于Socket的和基于RDMA的一次收-发流程左右分别为两个节点。可以明显的看到Socket流程中在软件中多了一次拷贝动作。而RDMA绕过了内核同时也减少了内存拷贝数据可以直接在用户层和硬件间传递。
CPU卸载指的是可以在远端节点CPU不参与通信的情况下当然要持有访问远端某段内存的“钥匙”才行对内存进行读写这实际上是把报文封装和解析放到硬件中做了。而传统的以太网通信双方CPU都必须参与各层报文的解析如果数据量大且交互频繁对CPU来讲将是一笔不小的开销而这些被占用的CPU计算资源本可以做一些更有价值的工作。 通信领域两大出场率最高的性能指标就是“带宽”和“时延”。简单的说所谓带宽指的是指单位时间内能够传输的数据量而时延指的是数据从本端发出到被对端接收所耗费的时间。因为上述几个特点相比于传统以太网RDMA技术同时做到了更高带宽和更低时延所以其在带宽敏感的场景——比如海量数据的交互时延敏感——比如多个计算节点间的数据同步的场景下得以发挥其作用。
协议
RDMA本身指的是一种技术具体协议层面包含InfinibandIBRDMA over Converged EthernetRoCE和internet Wide Area RDMA ProtocoliWARP。三种协议都符合RDMA标准使用相同的上层接口在不同层次上有一些差别。 上图[2]对于几种常见的RDMA技术的协议层次做了非常清晰的对比
Infiniband
2000年由IBTAInfiniBand Trade Association提出的IB协议是当之无愧的核心其规定了一整套完整的链路层到传输层非传统OSI七层模型的传输层而是位于其之上规范但是其无法兼容现有以太网除了需要支持IB的网卡之外企业如果想部署的话还要重新购买配套的交换设备。
RoCE
RoCE从英文全称就可以看出它是基于以太网链路层的协议v1版本网络层仍然使用了IB规范而v2使用了UDPIP作为网络层使得数据包也可以被路由。RoCE可以被认为是IB的“低成本解决方案”将IB的报文封装成以太网包进行收发。由于RoCE v2可以使用以太网的交换设备所以现在在企业中应用也比较多但是相同场景下相比IB性能要有一些损失。
iWARP
iWARP协议是IETF基于TCP提出的因为TCP是面向连接的可靠协议这使得iWARP在面对有损网络场景可以理解为网络环境中可能经常出现丢包时相比于RoCE v2和IB具有更好的可靠性在大规模组网时也有明显的优势。但是大量的TCP连接会耗费很多的内存资源另外TCP复杂的流控等机制会导致性能问题所以从性能上看iWARP要比UDP的RoCE v2和IB差。
需要注意的是虽然有软件实现的RoCE和iWARP协议但是真正商用时上述几种协议都需要专门的硬件网卡支持。
iWARP本身不是由Infiniband直接发展而来的但是它继承了一些Infiniband技术的设计思想。这三种协议的关系如下图所示 资料直通车Linux内核源码技术学习路线视频教程内核源码 学习直通车Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈 玩家
标准/生态组织
提到IB协议就不得不提到两大组织——IBTA和OFA。
IBTA[3]
成立于1999年负责制定和维护Infiniband协议标准。IBTA独立于各个厂商通过赞助技术活动和推动资源共享来将整个行业整合在一起并且通过线上交流、营销和线下活动等方式积极推广IB和RoCE。
IBTA会对商用的IB和RoCE设备进行协议标准符合性和互操作性测试及认证由很多大型的IT厂商组成的委员会领导其主要成员包括博通HPEIBM英特尔Mellanox和微软等华为也是IBTA的会员。
OFA[4]
成立于2004年的非盈利组织负责开发、测试、认证、支持和分发独立于厂商的开源跨平台infiniband协议栈2010年开始支持RoCE。其对用于支撑RDMA/Kernel bypass应用的OFEDOpenFabrics Enterprise Distribution软件栈负责保证其与主流软硬件的兼容性和易用性。OFED软件栈包括驱动、内核、中间件和API。
上述两个组织是配合关系IBTA主要负责开发、维护和增强Infiniband协议标准OFA负责开发和维护Infiniband协议和上层应用API。
开发社区
Linux社区
Linux内核的RDMA子系统还算比较活跃经常会讨论一些协议细节对框架的修改比较频繁另外包括华为和Mellanox在内的一些厂商也会经常对驱动代码进行修改。
邮件订阅http://vger.kernel.org/vger-lists.html#linux-rdma
代码位于内核drivers/infiniband/目录下包括框架核心代码和各厂商的驱动代码。
代码仓https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git/
RDMA社区
对于上层用户IB提供了一套与Socket套接字类似的接口——libibverbs前文所述三种协议都可以使用。参考着协议、API文档和示例程序很容易就可以写一个Demo出来。本专栏中的RDMA社区专指其用户态社区在github上其仓库的名字为linux-rdma。
主要包含两个子仓库
rdma-core
用户态核心代码API文档以及各个厂商的用户态驱动。
perftest
一个功能强大的用于测试RDMA性能的工具。
代码仓https://github.com/linux-rdma/
UCX[5]
UCX是一个建立在RDMA等技术之上的用于数据处理和高性能计算的通信框架RDMA是其底层核心之一。我们可以将其理解为是位于应用和RDMA API之间的中间件向上层用户又封装了一层更易开发的接口。 笔者对其并不了解太多只知道业界有一些企业在基于UCX开发应用。
代码仓https://github.com/openucx/ucx
硬件厂商
设计和生产IB相关硬件的厂商有不少包括Mellanox、华为、收购了Qlogic的IB技术的Intel博通、Marvell富士通等等这里就不逐个展开了仅简单提一下Mellanox和华为。
Mellanox
IB领域的领头羊协议标准制定、软硬件开发和生态建设都能看到Mellanox的身影其在社区和标准制定上上拥有最大的话语权。目前最新一代的网卡是支持200Gb/s的ConnextX-6系列。
华为
去年初推出的鲲鹏920芯片已经支持100Gb/s的RoCE协议技术上在国内处于领先地位。但是软硬件和影响力方面距离Mellanox还有比较长的路要走相信华为能够早日赶上老大哥的步伐。
用户
微软、IBM和国内的阿里、京东都正在使用RDMA另外还有很多大型IT公司在做初步的开发和测试。在数据中心和高性能计算场景下RDMA代替传统网络是大势所趋。笔者对于市场接触不多所以并不能提供更详细的应用情况。 原文作者Savir