注:一年一度的云栖大会近日在杭州如约举行。今年的云栖大会上阿里云发布了第四代神龙架构,其中弹性 RDMA 加速能力尤其值得关注。基于弹性 RDMA,阿里云操作系统 Alibaba Cloud Linux 3 和龙蜥社区操作系统 Anolis OS 在网络方面基于社区 SMC-R 优化形成兼容 socket 的 RDMA 产品方案,旨在帮助云上应用无修改的享受 RDMA 带来的性能提升。本文将为您阐述 SMC-R 的产生背景、原理架构以及部分性能数据。
近些年,随着云计算的飞速发展,特别是阿里云神龙、AWS Nitro 等硬件虚拟化方案的出现,云上的虚拟化网络性能有了质的飞跃。相比于云网络的欣欣向荣,CPU 的性能提升却似“挤牙膏”一般有些力不从心。因此,将部分原本由 CPU 承担的工作卸载到后端硬件的解决思路成为了云计算领域研究的一个“热点”。远程内存直接访问 (Remote Direct Memory Access, RDMA) 这项追求极致性能,曾经主要应用在高性能计算、高频交易等特定场景中的技术也因此进入了云厂商的数据中心。
从 TCP 到 RDMA
RDMA 作为一种旁路内核的远程内存直接访问技术,被广泛应用于数据密集型和计算密集型场景中,是高性能计算、机器学习、数据中心、海量存储等领域的重要解决方案。RDMA 在阿里巴巴已大规模稳定运行多年,支撑了阿里云 ESSD、PolarDB 等核心业务,并在双十一等重大场景得到充分验证。RDMA 具有零拷贝、协议栈卸载的特点。RDMA 将协议栈的实现下沉至 RDMA 网卡 (RNIC),绕过内核直接访问远程内存中的数据。由于不经过系统内核协议栈,RDMA 与传统 TCP/IP 实现相比不仅节省了协议处理和数据拷贝所需的 CPU 资源,同时也提高了网络吞吐量、降低了网络通信时延。在过去,RDMA 只能在一些数据中心网络中通过网卡和交换机紧密配合使用,部署复杂度高。但如今,阿里云弹性 RDMA 将复杂的 RDMA 技术带到云上,使普通的 ECS 用户也能使用高性能的 RDMA 传输,无需关心底层复杂的网卡、交换机等物理网络环境配置,使其成为一种亲民、普惠的技术。从 verbs 到 socket
不过,虽然 RDMA 性能优异,但是由于 RDMA 使用的 IB verbs 接口和常用的 POSIX socket 接口存在巨大的差异,普通应用要使用 RDMA 将面临着大量的业务改造,高效的将 RDMA 应用于现有业务存在较高的技术门槛。所以,历史上存在一些将 RDMA 的 IB verbs 语义封装成 socket 接口的尝试,典型如 rsocket、libvma。其中,libvma 通过 LD_PRELOAD 拦截 socket 接口,转而使用用户态 verbs 完成数据传输。但这些方案存在一些缺陷:由于转换发生在用户态,一方面缺少内核统一资源管理,另一方面在兼容性上也存在一些问题。从资源管理和兼容的角度上看,在内核中实现 socket 接口相比于用户态来说有着天然的优势。在 Alibaba Cloud Linux 3 和 Anolis OS 中,我们提供并优化了基于 RDMA 的共享内存通信 (Shared Memory Communications over RDMA, SMC-R) 技术,这是一次基于内核 RDMA 实现 TCP 应用兼容的尝试。原生的 SMC-R 支持标准 RoCE 网络,我们对其进行了扩展,首次实现对 iWARP 的支持,可以完美的支持阿里云自研的弹性 RDMA,从而实现云上应用零修改的享受 RDMA 带来的性能红利。兼备 socket 和 RDMA 的内核实现:SMC-R
用一句话来描述,SMC-R 是一套与 TCP/IP 平行的向上兼容 TCP socket 接口,底层使用 RDMA RC 进行数据传输的协议族。SMC-R 工作于内核空间,处于 socket 层和内核 RDMA 的 IB verbs 层之间。SMC-R 像是一个能力卓越的翻译兼管家,它接收用户传达的 socket 指令,转而使用 RDMA 的 IB verbs 接口管理 RDMA 资源,完成底层基于 RDMA 的数据传输。所以,用户只需将原有 socket 接口使用的协议族从 AF_INET(6) 修改为 AF_SMC 即可完成从 TCP 协议栈到 SMC-R 协议栈的转变。但这还不够,我们希望在零修改的前提下完成协议替换。为此,Alibaba Cloud Linux 3 和 Anolis OS 在 socket 层增加协议族替换相关的 sysctl 和白名单,提供了 net namespace 和单个应用维度下的 TCP 至 SMC-R 协议栈透明替换能力,使应用不需要任何修改即可让数据在 RDMA 链路这条高速公路上飞驰起来。然而,仅本地一厢情愿的使用 SMC-R 可不行,远端节点同样得具备 SMC-R 能力才能让高速公路有始有终。因此,SMC-R 具备自动协商和安全回退 TCP 的能力。SMC-R 建立 RDMA 链路时,首先会与通信对端建立 TCP 连接,双方在握手过程中通过特殊的 TCP 选项表明自身支持 SMC-R。协商成功后,SMC-R 将为用户态应用申请必要的 RDMA 资源,将接收数据缓冲区注册为可被远程节点直接访问的远程内存缓冲区 (Remote Memory Buffer, RMB),并将对应的访问密钥以及缓冲区起始地址封装成远程访问令牌 (RToken) 告知远程节点,作为其访问 RMB 的重要验证信息。特殊情况下,若在协商过程中发现收发两端其一不具备 RDMA 传输条件时,将触发安全回退机制。SMC-R 会使用协商过程中建立的 TCP 连接完成后续的数据传输,保证网络的可靠稳定。数据传输的高速公路建立起来后,交通规则也要安排妥当。顾名思义,SMC-R 是一种通过 RDMA 实现共享内存的通信方式,其将环形 RMB 作为共享内存,配合数据游标实现高效的数据传输。SMC-R 使用 RDMA WRITE 单边操作的方式将网络应用传递至内核的数据直接、高效地写入远程节点环形 RMB 中。同时使用 RDMA SEND/RECV 双边操作的方式交互连接数据管理 (Connection Data Control, CDC) 消息,用于更新、同步 RMB 中的数据游标 (Cursor)。针对一侧 RMB,读者更新消费者游标 (Consumer Cursor),标识即将读取的下一字节地址。为避免数据丢失,写者不会将数据写入超过消费者游标的 RMB 空间中。相似的,写者更新生产者游标 (Producer Cursor),标识即将写入的下一字节地址。为确保数据的正确性,读者不会读取超过生产者游标的 RMB 空间中的内容。就这样,两个数据游标在环形 RMB 上你追我赶,贯穿网络数据传输的始终,确保传输的安全与可靠。最后,数据在高速公路上飞驰难免会遇到差错,为了保证一切都在掌控之中,Alibaba Cloud Linux 3 和 Anolis OS 为 SMC-R 提供了一系列监控诊断接口和工具,包括控制透明替换的 sysctl、查询 SMC-R socket 状态的 proc 文件、获取 SMC-R 各维度信息的 smc-tools 工具集等,以保障网络的可监控性和易运维性。通过上述架构概述和理论分析,SMC-R 展现了其兼容 socket 接口,透明替换 TCP,使用 RDMA 完成底层数据传输的能力。基于这些,我们终于可以总结出 SMC-R 的核心优势:性能表现
基于上面的介绍,我们知道 SMC-R 的一个主要优势在于保证兼容的情况下提供更好的性能,但性能到底如何?我们一起来看看 SMC-R 配合阿里云弹性 RDMA 在几个典型应用场景中的表现吧。在时延敏感的数据查询与处理场景中,SMC-R + 弹性 RDMA 帮助 Redis 在不同 data size 下平均提升约 50% 的 QPS,在不同 clients 数量下平均提升 20% 的 QPS。- 不同类型 RPC 接口下使用 TCP 和 SMC-R 所得 QPS 对比
在高性能 RPC 场景中,不同类型接口下 SMC-R + 弹性 RDMA 帮助 thrift 平均提升约 30% 的 QPS;netty 平均提升约 12% 的 QPS。通过上述实验数据,我们清晰的看到 SMC-R 在时延敏感型数据查询、高性能 RPC 场景下具备不俗的性能表现。其实除了上述实验场景外,SMC-R 还可以应用于集群大规模数据交互、高吞吐大文件传输等其他场景。当然,SMC-R 也不是万能的,RDMA 的一些缺陷在 SMC-R 中同样存在。特别是在建连性能上,由于 RDMA 需要与硬件交互,其建连性能远不如 TCP,所以在大量短连接的场景下,SMC-R 的表现不如 TCP;SMC-R 需要为每个连接预先分配内存,在连接数非常多的情况下,内存占用也会比 TCP 更高。另外,SMC-R 作为一种数据中心内部使用的通信方式,并不适合对公网暴露。未来,我们希望继续优化 SMC-R,普惠云上应用。为此,我们将在龙蜥社区高性能网络 SIG (OpenAnolis: https://openanolis.cn/sig/high-perf-network) 上开源代码并持续改进。同时,我们将 SMC-R 相关文档发布于 Alibaba Cloud Linux 3 官网上(https://help.aliyun.com/document_detail/327118.htm),并欢迎大家加入 Alibaba Cloud Linux OS 开发者&用户群(群号:34077273),一同推进云上操作系统的进步。相信在不久的将来,SMC-R 能够帮助更多的用户无侵入的改造应用,方便快捷的享受 RDMA 带来的网络性能提升。
1.Inclavare Containers:云原生机密计算的未来
2.netinfo:揭开网络抖动面纱的神器
3.ASE 2021最新论文解读:Serverless Java 运行时探索|龙蜥技术
4.InfoQ专访阿里云马涛:一款兼容CentOS生态的双内核开源操作系统长什么样?