编者按:
本文是《软硬件融合——超大规模云计算架构创新之路》图书内容的节选。云计算系统持续解构,东西向网络流量激增,服务器堆栈延迟问题凸显。要想提升数据中心网络性能,大体上通过如下措施:
(1)网络容量升级,例如整个网络从25gbps升级到100gbps;
(2)轻量协议栈,数据中心网络是局域网络,距离短/延迟敏感,不需要复杂的用于全球互联的tcp/ip协议栈;
(3)网络协议处理硬件加速;
(4)高性能软硬件交互:高效交互协议 + pmd + pf/vf/mq;
(5)拥塞控制:低延迟、高可靠性(低性能抖动)、高网络利用率。
案例:rdma rocev2、aws srd/efa和阿里云hpcc。
1 高速网络接口rdma/rocev2
rdma是一整套高性能网络传输技术的集合,不仅仅是软件和硬件的接口。rdma的软件和硬件接口,并没有形成如同存储nvme那样非常严格的标准。本节通过rdma以及rocev2的相关介绍,使大家对高性能网络传输接口以及协议栈有个整体的认识。
1.1 基本概念
rdma(remote direct memory access,远程直接内存访问)是一种高带宽、低延迟、低cpu消耗的网络互联技术,克服了传统tcp/ip网络的许多困难。rdma技术体现在:
remote(远程):数据在网络中的两个节点之间传输。
direct(直接):不需要内核参与,传输的所有处理都卸载到nic硬件中完成。
memory(内存):数据直接在两个节点的应用程序的虚拟内存间传输;不需要额外的复制和缓存。
access(访问):访问操作有send/receive、read/write等。
如图1,roce(rdma over converaged ethernet)v1是基于现有ethernet网络实现rdma的一项技术。rocev1允许在现有以太网基础上实现rdma技术,实现接近infiniband的性能和延迟指标,但不需要将现有网络基础设施升级成昂贵的infiniband,节约了大量的支出。rocev2基于标准网络的以太网(ethernet phy/mac)、网络层(ip)和传输层(udp)协议,这可以使得rocev2的网络流量可以经过传统的网络路由器路由。
图1 rdma所使用的infiniband、rocev1/v2、iwarp技术对比
1.2 roce分层
rocev2是当前数据中心比较流行的rdma技术,我们以rocev2为例,介绍roce的系统分层。
如图2所示,rocev2自下而上分为:
以太网层:标准的ethernet协议,即网络五层协议物理层和数据链路层。
网络层(ip):即网络五层协议中的网络层。
传输层(udp):即网络五层协议中的传输层(选用udp协议而不是tcp协议)。
ib传输层(transport layer):ib传输层负责数据包的分发、分割、通道复用和传输服务。接收方会确认数据包,然后把确认信息发动到发送方,发送方会根据这些确认信息更新完成队列。
rdma硬件数据引擎层(data engine layer):负责内存队列和rdma硬件之间工作/完成请求的数据传输等。
rdma接口驱动层:负责rdma硬件的配置管理,负责队列和内存的管理,负责工作请求添加到工作队列中,负责完成请求的处理等。
verbs api层:接口驱动的封装。管理连接状态、管理内存和队列访问、提交工作给rdma硬件、从rdma硬件获取工作和事件。
ulp层:ofed ulp(upper layer protocol,上层协议)软件库,提供了各种软件协议的rdma verbs支持,让上层应用可以无缝移植到rdma平台。
应用层:分为两类,rdma原生的应用,基于rdma verbs api开发;另外,ofa提供了可以无缝兼容已有应用的ofed协议栈,让已有的应用可以无缝的使用rdma功能。
图2 rocev2分层
1.3 rdma接口
rdma并没有约束严格的软硬件接口,各家的实现各有不同,只需要支持rdma的队列机制即可。verbs api则是开源的标准的接口,具体的软硬件接口实现需要通过驱动对接到verbs api。
a.rdma工作队列
软件驱动和硬件设备的交互通常基于生产者消费者模型,这样能够实现异步的交互,实现软件和硬件的解耦。rdma接口中驱动和设备的交互也是如此,rdma软硬件共享的队列数据结构称为工作队列(work queue)。
如图3所示,工作队列是软件驱动和硬件rdma交互的共享queue。驱动负责把工作请求(work request)添加到工作队列,成为工作队列中的一项,称为工作队列项(work queue element)。rdma硬件设备会负责wqe在内存和硬件之间的传输,并且通过rdma网络最终把wqe送到接收方的工作队列中去。最后,接收方rdma硬件会反馈确认信息给到发送方rdma硬件,发送方rdma硬件会根据确认信息生成完成队列项(completion queue element)发送到内存的完成队列(completion queue)。
图3 rdma数据传输模型——工作队列
rdma queue类型有:
发送队列(send queue):用于发送数据消息。
接收队列(receive queue):用于接收输入的数据消息。
完成队列(completion queue):完成队列主要是用于实现rdma操作异步的实现。
队列对(queue pair):发送队列和接收队列组成一组队列对。
b.verbs api操作
rdma verbs是提供给应用程序使用的最底层的rdma功能抽象,rocev2中的verbs操作主要有两类:
send/recv。类似于client/server结构,发送操作和接收操作协作完成,在发送方连接之前,接收方必须处于侦听状态;发送方不知道接收方的虚拟内存位置,接收方也不知道发送方的虚拟内存地址。不同的是rdma send/recv因为是直接对内存操作,因此需要提前注册用于传输的内存区域。
write/read。与client/server架构不同,write/read是请求方处于主动,响应方处于被动。请求方执行write/read操作,响应方不需要做任何操作。为了能够操作响应方的内存,请求方需要提前获得响应方的地址和键值。
1.4 rdma总结
计算机网络中的通信延迟主要是指:处理延迟和网络传输延迟。处理延迟开销指的就是消息在发送和接收阶段的处理时间。网络传输延迟指的就是消息在发送和接收之间的网络中传输的时间。在通常的南北向网络流量场景,基本都是远距离传输,网络传输延迟占了绝大部分,因此处理延迟问题并没有凸显。
随着云计算技术的发展,需要频繁的在集群服务器之间传递数据流量,数据中心中的东西向网络流量激增。在数据中心的短距离传输下,网络传输延迟大幅度缩小,处理延迟问题开始凸显。另外,东西向流量本身就是流量大、延迟敏感的应用场景,这要求进一步的优化处理延迟。如图4,rdma不仅仅是一种高效的用于数据传输的软硬件接口,更是一种通过硬件实现网络数据传输加速的软硬件整体解决方案。
图4 rdma传输模型
跟传统的tcp/ip网络技术相比,rdma技术的优势体现在:
更高效的协议栈:infiniband相比传统的tcp/ip网络协议栈更加高效,rocev2使用了udp,相比tcp更高效一些。因为是用于局域网的数据传输,数据的丢包率会低很多,udp有更优的性能。
协议栈硬件卸载:整个rdma协议栈处理完全由硬件完成,进一步提升性能,并且降低cpu资源消耗。
直接内存操作:内存一旦注册,数据就可以直接在内存和内存之间拷贝,不需要经过内核协议栈层的发送接收方各一次的拷贝;
操作系统 bypass:没有了内核协议栈,用户空间驱动直接绕过内核,减少了操作系统模式切换的开销;
异步操作:一次事务操作分为发送request(请求)和接收completion(完成),这样就不会阻塞传输。
2 高性能网络优化
在基础网络、硬件加速以及网络接口都确定的情况下,为了更充分的利用网络容量,达到网络的高性能的同时防止性能抖动,就需要进行网络拥塞控制。
a.网络拥塞控制简介
网络中如果存在太多的数据包,会导致数据包的延迟,并且会因为超时而丢失,从而降低了传输性能,这种情况称为拥塞(congestion) 。高性能网络非常重要的一个方面,就是在充分利用网络容量,提供低延迟网络传输的同时,尽可能的避免网络拥塞。
如图5(a)所示,当主机发送到网络的数据包数量在其承载能力范围之内时,送达的数据包数与发送的数据包数成正比例增长。随着负载接近网络承载能力,偶尔突发的网络流量会导致拥塞崩溃。如图 8.16(b)所示,为加载的数据包和延迟的函数关系,可以看到,当加载的数据包增加到接近承载上限的时候,其延迟时间是急剧上升的。
(a) 实际吞吐率的拥塞崩溃 (b) 延迟成指数上升
图5 网络拥塞导致的吞吐率和延迟问题
说明:拥塞控制和流量控制不是一回事:拥塞控制的目标是确保网络能够承载所有到达的流量,这是一个全局性的问题;相对的,流量控制只与特定的发送方和特定的接收方之间的点到点流量有关,流量控制的目标是确保一个快速的发送方不会持续地以超过接收方接收能力的速率传输数据。
针对拥塞所采取的办法有很多种,根据解决方案效果的从慢到快,介绍如下:
避免拥塞的最基本方法是建立一个与流量匹配的网络,需要根据流量的利用率增长趋势提前升级网络;
充分利用现有网络容量,根据不同时刻的流量模式度身定制路由,这称为流量感知的路由;
增加网络容量需要时间,因此解决拥塞的最直接的办法就是降低负载。比如拒绝新连接的建立,这称为准入控制;
当拥塞即将到来前,网络可以给造成拥塞问题的源端传递反馈信息,要求源端抑制它们的流量;
当一切努力均失败,网络不得不丢弃它无法传递的数据包,这称为负载脱落。
拥塞控制算法的目标是:
更加易于避免拥塞,即找到一种优化的带宽分配方法。一个优化的带宽分配方法能带来更好的性能,因为它能充分利用所有的可用带宽却能避免拥塞;
并且,此带宽分配算法对于所有传输是公平的,既能保证大流量数据流的快速传输,又能保证小流量数据流的及时传输;
最后,拥塞控制算法能够快速收敛到公平高效的带宽分配。
b.阿里云hpcc,rdma拥塞控制优化
在过去的十年中,数据中心网络的端口带宽已从1 gbps增长到100 gbps,并且这种增长还在持续。越来越多的应用程序要求更低的延迟和更高的带宽,在数据中心,有两个重要的趋势驱动着对高性能网络的需求:
第一个趋势是新的数据中心架构。例如资源解构和异构计算:在资源解构中,cpu需要与gpu、内存和磁盘等远程资源进行高速网络互联;在cpu和加速器解构的异构计算环境中,不同的计算芯片也需要(通过网络)高速互连,并且延迟越小越好。
第二个趋势是新的应用程序。例如运行于高速io介质(如nvme)上的存储,以及在gpu和asic之类的加速计算设备上进行大规模机器学习训练。这些应用程序会定期的传输大量数据,其存储和计算速度非常快,性能的瓶颈通常是网络传输。
传统的基于软件的网络堆栈不再能够满足关键的延迟和带宽要求,将网络堆栈卸载到硬件中是高速网络中的必然方向。在数据中心中的部署rocev2,通过rdma进行网络传输,是当前主要的硬件卸载解决方案。不幸的是,大规模的rdma网络在平衡低延迟、高带宽利用率和高稳定性方面面临根本的挑战。经典的rdma拥塞机制,例如dcqcn和timely算法,具有一些局限性:
收敛缓慢。对于粗粒度的反馈,例如ecn(explicit congestion notification,显式拥塞通知)或rtt(round-trip time,传输往返时间),拥塞方案无法确切知道增加或降低发送速率的程度,使用启发式方法推测速率更新,迭代收敛到稳定的速率。
不可避免的数据包排队。dcqcn利用ecn标记来判断拥塞风险,timely使用rtt增加来检测拥塞。两个算法都是在队列建立后,发送方才开始降低流量,这些堆积的队列会大大增加网络延迟。
复杂的参数调整。例如,dcqcn有15个参数可以调整,操作员在日常rdma网络维护中要面对复杂且耗时的参数调整,这会大大增加配置错误的风险,这些错误配置会导致不稳定或性能下降。
hpcc(high precision congestion control,高精度拥塞控制)背后的关键思想是利用int(in-network telemetry,网络内遥测)提供的精确的链路负载信息来计算准确的流量更新,hpcc在大多数情况下仅需要一个速率更新步骤。hpcc发送方可以快速提高流量以实现高利用率,或者降低流量以避免拥塞;hpcc发送者可以快速调整流量,以使每个链接的输入速率略低于链接的容量,保持高链接利用率;由于发送速率是根据交换机直接测量的结果精确计算得出的,hpcc仅需要3个独立参数即可调整公平性和效率。
如图6,hpcc实现为由发送者驱动的拥塞控制框架。接收方确认发送方发送的每个数据包。数据包从发送方传输到接收方的过程中,路径上的每个交换机都利用int功能插入一些元数据,这些数据报告了数据包出口的当前负载。当接收方收到数据包后,它将所有的元数据复制到ack消息中。发送方根据ack信息决定如何调整流量。
图6 hpcc框架示意图
图7为基于fpga可编程nic上的hpcc实现,nic提供了一个fpga芯片,并且用了基础的pcie以及mac模块,pcie连接到主机内存,mac模块连接到以太网。hpcc模块位于pcie和mac之间,实现发送方和接收方的角色。拥塞控制(cc)模块实现了发送方拥塞控制算法,它接收rx方向返回的ack信息,根据这些信息调整发送窗口和速率,并且更新新的发送窗口和速率到流量调度器。
图7 支持hpcc的fpga nic实现
通过测试平台实验和大规模仿真,与dcqcn、timely等方案相比,hpcc对可用带宽和拥塞的反应更快,并保持接近零的队列。在32台服务器测试平台中,在50%的流量负载下hpcc在中位数保持队列大小为零,当负载达到99%的情况下,队列大小为22.9kb(仅需要7.3µs的排队延迟)。与dcqcn相比,它使99%负载情况下的延迟减少了95%,而不会牺牲吞吐量。在320台服务器的测试中,即使dcqcn和timely方案频繁发生pfc(priority flow control,基于优先级的流量控制)风暴的情况下,hpcc也不会触发pfc暂停。
c.aws的srd和efa
efa(elastic fabric adapter,弹性互联适配器)是aws ec2实例的一种网络接口,efa性能改进主要通过三项关键技术:
应用程序绕过操作系统内核直接与硬件对话,这提高了应用程序性能的稳定性;
持续开发和调整ena和设备驱动程序以适应新的高带宽实例类型;
新的以云为中心的可靠性协议层,称为srd(scalable reliable datagram,可扩展可靠数据报)。
如图8,efa定制的操作系统旁路硬件接口增强了实例间通信的性能。借助efa,使用消息传递接口(mpi)的高性能计算(hpc)应用程序和使用nvidia集体通信库(nccl)的机器学习(ml)应用程序可以扩展到数千个cpu或gpu,并且,将获得本地hpc集群的应用程序性能以及aws云的按需弹性和灵活性。
图8 基于efa的hpc网络协议栈
srd是专为aws设计的可靠的、高性能的、低延迟的网络传输。这是数据中心网络数据传输的一次重大改进,已实现为aws第三代nitro芯片的一个重要功能。srd受infiniband可靠数据报的启发,与此同时,考虑到大规模的云计算场景下的工作负载,srd也经过了很多的修改和改进。srd利用了云计算的资源和特点(例如aws的复杂多路径主干网络)来支持新的传输策略,为其在紧耦合的工作负载中发挥价值。srd的主要功能包括:
乱序交付:取消按顺序传递消息的约束,消除了行首阻塞,aws在efa用户空间软件堆栈中实现了数据包重排序处理引擎。
等价多路径路由(ecmp):两个efa实例之间可能有数百条路径,使用大型多路径网络的一致性流哈希的属性,以及srd对网络状况的快速反应能力,找到消息的最有效路径。数据包喷涂(packet spraying)可防止拥塞热点,并可以从网络故障中快速而无感地恢复。
快速的丢包响应:srd对丢包的响应比任何高层级的协议都快得多。偶尔的数据包丢失是正常网络操作的一部分,这不是异常情况。
可扩展的传输卸载:使用srd,与其他可靠协议(如infiniband可靠连接ibrc)不同,一个进程可以创建并使用一个队列对与任何数量的对等方进行通信。
表1为srd和tcp、infiniband网络的功能特征对比:
表1 tcp、infiniband以及srd的特征比较
tcp infiniband srd
基于流 基于消息 基于消息
顺序 顺序 乱序
单路径 单(ish)路径 负载均衡的ecmp喷涂
很长的重传超时(>50ms) 静态的用户配置超时
(对数规模) 动态估算的超时
(µs的精度)
基于丢包率的拥塞控制 半静态的速率限制
(支持的速率有约束的设置) 动态速率限制
低效的软件栈 受规模约束的传输卸载 可扩展的传输卸载
(相同数量的队列对,与集群大小无关)
如图9所示,efa非常明显的提高了带宽利用率(接近于线速100 gbps),同时还明显的减少单数据包延迟,并且基于srd的链接失效的处理,其性能抖动也变得非常的小。
(a) efa的带宽性能对比 (b) efa的延迟性能对比
(c) srd与tcp的性能抖动对比
图9 efa/srd的hpc性能
研旭YXSPACE系列产品的功能特点及应用范围
什么是RFID
CSAIL推出了一篇文章统计了今年计算机领域18个值得注意的新闻
气隙/气隙磁通量在电机中起到什么作用?
ARDUINO蜘蛛机器人DIY图解
RDMA RoCEv2、AWS SRD/EFA和阿里云HPCC
美媒放风对华芯片限制有松动,台积电三星可能得到“豁免”
DS1820单总线(1-wire)数字温度传感器
modbus转MQTT支持TCP以太网通讯接入阿里华为云
Encrypted Boot image泄漏讨论
U65133电源管理芯片主要特点
曝iPhone12天线为苹果自主设计 信号或成最大槽点
企业要开启工业4.0之旅,这七项有关数字化的关键步骤可借鉴
高压工频变压器型电源电路图分析
专业医疗器械工业设计的市场会较往年有更加巨大的市场份额
怎样使用SDN优化业务连续性?
照明行业相关输美产品税率变化
云杰通信推出全新企业SD-WAN智能网组
校企合作“芯”篇章丨芯盾时代入选北京工业大学创新创业实训基地
SpaceX 星际飞船原型 SN10 顺利完成首次发动机静态点火测试