RoCE(RDMA over Converged Ethe.NET)协议是一种能在以太网上进行RDMA(远程内存直接访问)的集群网络通信协议,它大大降低了以太网通信的延迟,提高了带宽的利用率,相比传统的TCP/IP协议的性能有了很大提升 。本文将聊一聊我对于将RoCE应用到HPC上这件事的看法 。HPC网络的发展与RoCE的诞生在早年的高性能计算(HPC)系统中,往往会采用一些定制的网络解决方案,例如:Myrinet、Quadrics、InfiniBand,而不是以太网 。这些网络可以摆脱以太网方案在设计上的限制,可以提供更高的带宽、更低的延迟、更好的拥塞控制、以及一些特有的功能 。
IBTA在2010年发布了RoCE(RDMA over Converged Ethernet)协议技术标准,随后又在2014年发布了RoCEv2协议技术标准,同时带宽上也有大幅提升 。以太网性能的大幅提升,使越来越多的人想要选择能兼容传统以太网的高性能网络解决方案 。这也打破了top500上使用以太网的HPC集群数量越来越少的趋势,使以太网现在仍然占有top500的半壁江山 。
虽然现在Myrinet、Quadrics已经消亡,但InfiniBand仍然占据着高性能网络中重要的一席之地,另外Cray自研系列网络,天河自研系列网络,Tofu D系列网络也有着其重要的地位 。
文章插图
RoCE协议介绍RoCE协议是一种能在以太网上进行RDMA(远程内存直接访问)的集群网络通信协议 。它将收/发包的工作卸载(offload)到了网卡上,不需要像TCP/IP协议一样使系统进入内核态,减少了拷贝、封包解包等等的开销 。这样大大降低了以太网通信的延迟,减少了通讯时对CPU资源的占用,缓解了网络中的拥塞,让带宽得到更有效的利用 。
RoCE协议有两个版本:RoCE v1和RoCE v2 。其中RoCE v1是链路层协议,所以使用RoCEv1协议通信的双方必须在同一个二层网络内;而RoCE v2是网络层协议,因此RoCE v2协议的包可以被三层路由,具有更好的可扩展性 。
RoCE v1协议RoCE协议保留了IB与应用程序的接口、传输层和网络层,将IB网的链路层和物理层替换为以太网的链路层和网络层 。在RoCE数据包链路层数据帧中,Ethertype字段值被IEEE定义为了0x8915,来表明这是一个RoCE数据包 。但是由于RoCE协议没有继承以太网的网络层,在RoCE数据包中并没有IP字段,因此RoCE数据包不能被三层路由,数据包的传输只能被局限在一个二层网络中路由 。
文章插图
RoCEv2协议RoCE v2协议对RoCE协议进行了一些改进 。RoCEv2协议将RoCE协议保留的IB网络层部分替换为了以太网网络层和使用UDP协议的传输层,并且利用以太网网络层IP数据报中的DSCP和ECN字段实现了拥塞控制的功能 。因此RoCE v2协议的包可以被路由,具有更好的可扩展性 。由于RoCE v2协议现在已经全面取代存在缺陷的RoCE协议,人们在提到RoCE协议时一般也指的是RoCE v2协议,故本文中接下来提到的所有RoCE协议,除非特别声明为第一代RoCE,均指代RoCE v2协议 。
无损网络与RoCE拥塞控制机制在使用RoCE协议的网络中,必须要实现RoCE流量的无损传输 。因为在进行RDMA通信时,数据包必须无丢包地、按顺序地到达,如果出现丢包或者包乱序到达的情况,则必须要进行go-back-N重传,并且期望收到的数据包后面的数据包不会被缓存 。
RoCE协议的拥塞控制共有两个阶段:使用DCQCN(Datacenter Quantized Congestion Notification)进行减速的阶段和使用PFC(Priority Flow Control)暂停传输的阶段(虽然严格来说只有前者是拥塞控制策略,后者其实是流量控制策略,但是我习惯把它们看成拥塞控制的两个阶段,后文中也这会这么写) 。
当在网络中存在多对一通信的情况时,这时网络中往往就会出现拥塞,其具体表现是交换机某一个端口的待发送缓冲区消息的总大小迅速增长 。如果情况得不到控制,将会导致缓冲区被填满,从而导致丢包 。因此,在第一个阶段,当交换机检测到某个端口的待发送缓冲区消息的总大小达到一定的阈值时,就会将RoCE数据包中IP层的ECN字段进行标记 。当接收方接收到这个数据包,发现ECN字段已经被交换机标记了,就会返回一个CNP(Congestion Notification Packet)包给发送方,提醒发送方降低发送速度 。
需要特别注意的是,对于ECN字段的标记并不是达到一个阈值就全部标记,而是存在两个Kmin和Kmax,如图2所示,当拥塞队列长度小于Kmin时,不进行标记 。当队列长度位于Kmin和Kmax之间时,队列越长,标记概率越大 。当队列长度大于Kmax时,则全部标记 。而接收方不会每收到一个ECN包就返回一个CNP包,而是在每一个时间间隔内,如果收到了带有ECN标记的数据包,就会返回一个CNP包 。这样,发送方就可以根据收到的CNP包的数量来调节自己的发送速度 。
推荐阅读
- 点击率怎么算出展现量 网站的点击率是怎么计算的?
- 一文详解计算机网络IP地址和子网掩码
- 病假工资如何计算? 请病假有工资吗
- 1到20的平方根公式表?平方计算公式是什么?
- 周易吉凶算法告诉你 周易测算手机号
- 如何区分绿地率跟绿化率 绿化率计算公式
- 圆与扇形的周长与面积计算 扇形的周长
- 黎美人心计2 美人心计2
- 为你介绍国债逆回购的操作方法 国债逆回购收益计算
- 电脑维修方法与技巧 电脑维修教