10月19日,国内软件定义存储公司XSKY开源了基于Ceph研发近一年的IBRDMA互联支持,并向Ceph社区提交了IBRDMA协议栈代码。基于这部分代码,Mellanox研发部门表示也会参与其中。双方将共同孵化和完善基于AsyncMessenger的网络通信引擎,力图大幅提升IO路径上的网络性能。此外,XSKY还将与部分企业用户合作,基于此进行大规模Ceph集群测试。XSKY自成立以来,一直在Ceph社区积极贡献高性能代码。此次IBRDMA的开源,对加快Ceph高性能化步伐具有重要意义。RDMA(RemoteDirectMemoryAccess)是一种利用硬件Offload能力解决网络传输延迟,提供吞吐量的技术。在高性能计算领域,RDMA被广泛用于网络数据传输和计算交互。RDMA定义了一个称为RDMAVerbs的异步网络编程接口。应用程序主要与动词交互以实现RDMA的优势。Verbs隐藏了底层硬件差异,因此InfiniBand和Ethernet都可以作为Verbs的后端,从而实现RoCE(RDMAoverConvergedEthernet)。在RDMA的世界里,主要有几个协议簇。首先是RDMA下的协议栈,比如iWARP、RoCE、InfinibandHCA、RoCEv2甚至SoftwareRoCE。这些主要是为RDMA提供底层传输真实介质和链路实现。二是RDMA之上的应用协议。在存储领域,包括iSER(iSCSIoverRDMA)、SMB3withSMBDirect、NFS/RDMA、SRP(SCSIoverRDMA),还有现在最火的NVMeoverFabric。HostNetwork现在是NVMeOverFabric领域最流行的。如下图所示,HeadNodeClusterNetwork和StorageNetwork实际上是作为传统存储磁头的交换网络和磁头与存储介质池的网络。前者过??去通常是PCIe或InfiniBand,后者通常是SAS或Infiniband。在Ceph中,这两个也分别对应Ceph的PublicNetwork和ClusterNetwork。目前主流的分布式软件定义存储中,只有华为的FusionStorage公开支持InfiniBand/RDMA。Ceph的Infiniband/RDMA过去虽然在社区中有所提及,但实际上还处于proof-of-concept阶段。最大的原因可能是Ceph的网络接口和指定语义比较复杂,使得XioMessenger(基于AccelIO)一直不能满足Ceph核心对网络层状态的要求,一直没有投入应用。今年在Raleigh举办的CephNextDay,有一个专题讨论XioMessenger不能满足Ceph语义的问题。主要原因是Ceph规定的Messenger语义和Policy过于复杂,使得非TCP/IP堆栈在没有充分测试的情况下很难满足要求。因此,为了解决RDMA进入Ceph的问题,发展了两个方向。首先是降低Ceph核心对网络层状态的要求,减少Messenger需要实现的逻辑。但是这个方向一开始就被开发者否决了,因为减少Messenger的逻辑就意味着在其他地方增加逻辑,改动量太大。第二个方向是基于目前的AsyncMessenger框架(得益于之前DPDK的引入和定义),扩展不同的网络后端,无需关心上层会话逻辑。因此,基于AsyncMessenger的RDMA实现成为Ceph支持RDMA的计划。在最近一次与社区的互动中,这个方向被社区领袖SageWeil认为是正确的做法。10月19日,XSKY正式向Ceph社区提交基于AsyncMessenger的孵化RDMA网络引擎,并开始进入K版本的Pending窗口。使用AsyncMessenger的RDMA网络引擎,最大的优势就是简单和高性能。不同于XioMessenger基于AccelIO的复杂抽象,这个RDMA实现和大多数RDMA应用一样,直接采用原生的Verbs接口,完全集成到Ceph已有的框架中。复杂性大大降低,易用性提高。至此,在一个版本周期内,Ceph将完成整个网络层的重大重构,从启用AsyncMessenger作为默认网络引擎,到发布DPDK+SPDK的网络栈,现在支持RDMA引擎。这使得Ceph允许用户在网络级别选择具有不同要求和性能的网络堆栈。以上三个引擎已经更新并提交给社区一年了。均由XSKY团队发起,与Intel、Samsung、Mellanox等领先硬件厂商共同优化维护。三种网络引擎分别适配用户对不同场景和特点的网络需求。之前Ceph结合DPDK+SPDK的做法,或许代表着未来高速以太网的黄金合作,但最大的遗憾还是需要等待CephBlueStore的成熟和SPDK生态的稳定。然而,RDMA提供了一个合适的折衷方案。在硬件配置较好的情况下,可以快速与现有成熟的CephIO栈集成。RedHat的首席存储科学家??SageWeil在他对这次更新的评论中提到,“这看起来绝对是获得RDMA支持的好方法,因为它不需要像msg/xio那样完全重写信使协议。”我们认为这次将RDMA改成Cephupstream对性能的提升意义重大。虽然不能说这种网络层的提升会立即正确应用到普通企业的生产中,但在社区和领先的硬件厂商的合作下,通过不断优化是可以实现的。期待Ceph性能再创新高不会太久。
