我的新浪微博:http://weibo.com/freshairbrucewoo。
欢迎大家相互交流,共同提高技术。
随着网络带宽和速度的发展和大数据量数据的迁移的需求,网络带宽增长速度远远高于处理网络流量时所必需的计算节点的能力和对内存带宽的需求,数据中心网络架构已经逐步成为计算和存储技术的发展的瓶颈,迫切需要采用一种更高效的数据通讯架构。
传统的TCP/IP技术在数据包处理过程中,要经过操作系统及其他软件层,需要占用大量的服务器资源和内存总线带宽,所产生严重的延迟来自系统庞大的开销、数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制移动,如图1.1所示,给服务器的CPU和内存造成了沉重负担。特别是面对网络带宽、处理器速度与内存带宽三者的严重"不匹配性",更造成了网络延迟效应的加剧。处理器速度比内存速度快得越多,等待相应数据的延迟就越多。而且,处理每一数据包时,数据必须在系统内存、处理器缓存和网络控制器缓存之间来回移动,因此延迟并不是一次性的,而是会对系统性能持续产生负面影响。
图1.1 主机接收传统以太网数据的典型数据流示意图
这样,以太网的低投入、低运营成本优势就难以体现。为充分发挥万兆位以太网的性能优势,必须解决应用性能问题。系统不能以软件方式持续处理以太网通信;主机CPU资源必须释放专注于应用处理。业界最初的解决方案是采用TCP/IP负荷减轻引擎(TOE)。TOE方案能提供系统性能,但协议处理不强;它能使TCP通信更快速,但还达不到高性能网络应用的要求。解决这类问题的关键,是要消除主机CPU中不必要的频繁数据传输,减少系统间的信息延迟。
RDMA(Remote Direct Memory Access)全名是"远程直接数据存取",RDMA让计算机可以直接存取其它计算机的内存,而不需要经过处理器耗时的传输,如图1.2所示。RDMA是一种使一台计算机可以直接将数据通过网络传送到另一台计算机内存中的特性,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这项技术通过消除外部存储器复制和文本交换操作,因而能腾出总线空间和CPU周期用于改进应用系统性能,从而减少对带宽和处理器开销的需要,显著降低了时延。
图1.2 RDMA数据流传输示意图
RDMA对以太网来说还是"新生事物",但以不同形式存在已有十多年时间,它是Infiniband技术的基础。产业标准API(应用程序接口)使RDMA从技术走向实现成为可能。其中包括用于低时延消息处理、成就高性能计算的MPI(消息通过接口),以及DAPL(直接接入供应库)。后者包括两部分:KDAPL和UDAPL,分别用于内核和用户(应用程序)。Linux支持KDAPL,其它操作系统将来也有可能支持。RDMA在高性能计算环境广为采纳,在商务应用领域很少,但如今大多应用程序都能直接支持操作系统,透过操作系统(如NFS)间接利用RDMA技术的优势是完全可能的。
RDMA是一种网卡技术,采用该技术可以使一台计算机直接将信息放入另一台计算机的内存中。通过最小化处理过程的开销和带宽的需求降低时延。RDMA通过在网卡上将可靠传输协议固化于硬件,以及支持零复制网络技术和内核内存旁路技术这两种途径来达到这一目标。RDMA模型如图2.1所示。
图2.1 RDMA模型演变
零复制网络技术使NIC可以直接与应用内存相互传输数据,从而消除了在应用内存与内核内存之间复制数据的需要。
内核内存旁路技术使应用程序无需执行内核内存调用就可向网卡发送命令。在不需要任何内核内存参与的条件下,RDMA请求从用户空间发送到本地NIC并通过网络发送给远程NIC,这就减少了在处理网络传输流时内核内存空间与用户空间之间环境切换的次数。
当一个应用程序执行RDMA读/写请求时,系统并不执行数据复制动作,这就减少了处理网络通信时在内核空间和用户空间上下文切换的次数。在不需要任何内核内存参与的条件下,RDMA请求从运行在用户空间中的应用中发送到本地 NIC(网卡),然后经过网络传送到远程NIC。请求完成既可以完全在用户空间中处理(通过轮询用户级完成排列),或者在应用一直睡眠到请求完成时的情况下通过内核内存处理。
RDMA操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。RDMA操作用于读写操作的远程虚拟内存地址包含在RDMA消息中传送,远程应用程序要做的只是在其本地网卡中注册相应的内存缓冲区。远程节点的CPU在整个RDMA操作中并不提供服务,因此没有带来任何负载。通过类型值(键值)的使用,一个应用程序能够在远程应用程序对它进行随机访问的情况下保护它的内存。
发布RDMA操作的应用程序必须为它试图访问的远程内存指定正确的类型值,远程应用程序在本地网卡中注册内存时获得这个类型值。发布RDMA的应用程序也必须确定远程内存地址和该内存区域的类型值。远程应用程序会将相关信息通知给发布RDMA的应用程序,这些信息包括起始虚拟地址、内存大小和该内存区域的类型值。在发布RDMA的应用程序能够对该内存区域进行RDMA操作之前,远程应用程序应将这些信息通过发送操作传送给发布RDMA的应用程序。
具备RNIC(RDMA-aware network interface controller)网卡的设备,不论是目标设备还是源设备的主机处理器都不会涉及到数据传输操作,RNIC网卡负责产生RDMA数据包和接收输入的RDMA数据包,从而消除传统操作中多余的内存复制操作。
RDMA协议提供以下4种数据传输操作,除了RDMA读操作不会产生RDMA消息,其他操作都会产生一条RDMA消息。
RDMA Send操作;
Send operation;
Send with invalidate operation;
Send with solicited event;
Send with solicited event and invalidate;
RDMA Write操作;
RDMA Read操作;
Terminate操作。
以太网凭借其低投入、后向兼容、易升级、低运营成本优势在目前网络互连领域内占据统治地位,目前主流以太网速率是100 Mb/s和1000 Mb/s,下一代以太网速率将会升级到10 Gb/s。将RDMA特性增加到以太网中,将会降低主机处理器利用率,增加以太网升级到10 Gb/s的优点,消除由于升级到10 Gb/s而引入巨大开销的弊端,允许数据中心在不影响整体性能的前提下拓展机构,为未来扩展需求提供足够的灵活性。
RDMA over TCP协议将数据直接在两个系统的应用内存之间进行交互,对操作系统内核几乎没有影响,并且不需要临时复制到系统内存的操作,数据流如图4.1所示。
图4.1 RDMA over TCP (Ethernet)数据流示意图
RDMA over TCP协议能够工作在标准的基于TCP/IP协议的网络,如目前在各个数据中心广泛使用的以太网。注意:RDMA over TCP并没有指定物理层信息,能够工作在任何使用TCP/IP协议的网络上层。RDMA over TCP允许很多传输类型来共享相同的物理连接,如网络、I/O、文件系统、块存储和处理器之间的消息通讯。
图4.2 RDMA over TCP (Ethernet)协议栈
图4.2是RDMA over TCP (Ethernet)的协议栈,最上面三层构成iWARP协议族,用来保证高速网络的互操作性。
RDMA层协议负责根据RDMA写操作、RDMA读操作转换成RDMA消息,并将RDMA消息传向Direct Data Placement (DDP)层。DDP层协议负责将过长的RDMA消息分段封装成DDP数据包继续向下转发到Marker-based, Protocol-data-unit-Aligned (MPA)层。MPA层在DDP数据段的固定间隔位置增加一个后向标志、长度以及CRC校验数据,构成MPA数据段。TCP层负责对TCP数据段进行调度,确保发包能够顺利到达目标位置。IP层则在数据包中增加必要的网络路由数据信息。
DDP层的PDU段的长度是固定的,DDP层含有一个成帧机制来分段和组合数据包,将过长的RDMA消息分段封装为DDP消息,处理过程如图4.3所示。
图4.3 DDP层拆分RDMA消息示意图
DDP数据段是DDP协议数据传输的最小数据单元,包含DDP协议头和ULP载荷。DDP协议头包含ULP数据的最终目的地址的位置和相关控制信息。DDP层将ULP数据分段的原因之一就是TCP载荷的最大长度限制。DDP的数据传输模式分为2种:tagged buffer方式和untagged buffer方式。tagged buffer方式一般应用于大数据量传输,例如磁盘I/O、大数据结构等;而untagged buffer方式一般应用于小的控制信息传输,例如:控制消息、I/O状态信息等。
MPA层在DDP层传递下来的DDP消息中,MPA层通过增加MPA协议头、标志数据以及CRC校验数据构成FPDU(framed PDU )数据段,处理过程如图4.4所示。
MPA层便于对端网络适配器设备能够快速定位DDP协议头数据,根据DDP协议头内设置的控制信息将数据直接置入相应的应用内存区域。MPA层具备错序校正能力,通过使能DDP,MPA避免内存复制的开销,减少处理乱序数据包和丢失数据包时对内存的需求。MPA将FPDU数据段传送给TCP层处理。
图4.4 MPA层拆分DDP消息示意图
TCP层将FPDU数据段拆放置在TCP数据段中,确保每个TCP数据段中都包含1个单独的FDPU。MPA接收端重新组装为完整的FPDU,验证数据完整性,将无用的信息段去除,然后将完整的DDP消息发送到DDP层进行处理。DDP 允许DDP数据段中的ULP协议(Upper Layer Protocol)数据,例如应用消息或磁盘I/O数据,不需要经过ULP的处理而直接放置在目的地址的内存中,即使DDP数据段乱序也不影响这种操作。
2001年10月,Adaptec、Broadcom、Cisco、Dell、EMC、HP、IBM、Intel、Microsoft和NetApp公司宣布成立"远程直接内存访问(RDMA)联盟"。RDMA联盟是个独立的开放组织,其制定实施能提供TCP/IP RDMA技术的产品所需的体系结构规范,鼓励其它技术公司积极参与新规范的制定。该联盟将负责为整个RDMA解决方案制定规范,包括RDMA、DDP(直接数据放置)和TCP/IP分帧协议。
RDMA联盟是Internet工程任务组(IETF)的补充,IETF是由网络设计师、运营商、厂商和研究公司组成的大型国际组织。其目的是推动Internet体系结构的发展,并使Internet的运作更加顺畅。RDMA联盟的成员公司和个人都是IETF的积极参与者。另外,IETF还认识到了RDMA在可行网络方案中的重要性,并计划在以后几个月里成立"Internet协议套件RDMA"工作组。RDMA联盟协议规定,联盟将向相应的IETF工作组提交规范草案,供IETF考虑。
TCP/IP RDMA体系结构规范的1.0版本于2002年10月由RDMA联盟成员发布, TCP/IP RDMA的最终规范将由RDMA联盟的业界合作伙伴及相应的业界标准组织派出的代表共同确定。RDMA联盟官方网址:http://www.rdmaconsortium.org。