一年一度的云栖大会近日在杭州如约举行。今年的云栖大会上阿里云发布了第四代神龙架构,其中弹性 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 的核心优势:

高性能

  • 更轻薄的协议栈;

  • 使用 RDMA 进行通信,网络时延更低、CPU 占用更少、吞吐量更高;

  • 高效可靠的远程环形缓冲区直接访问。

透明替换

  • 兼容 socket 接口的 RDMA 可靠流式传输;

  • 自动协议协商和安全回退 TCP 能力;

  • net namespace 和应用维度的协议栈无损透明替换;

  • 底层兼容弹性 RDMA iWARP 和标准 RoCE 网络。

性能表现

基于上面的介绍,我们知道 SMC-R 的一个主要优势在于保证兼容的情况下提供更好的性能,但性能到底如何?我们一起来看看 SMC-R 配合阿里云弹性 RDMA 在几个典型应用场景中的表现吧。

测试环境

  • CPU:Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 104 核

  • 网卡:弹性 RDMA * 1

  • OS:Alibaba Cloud Linux 3

「时延敏感的数据库」 场景

redis

  • 不同 data size 场景下,redis-benchmark 测试 SMC-R 对比 TCP 性能数据

  • 不同 clients 数量场景下,redis-benchmark 测试 SMC-R 对比 TCP 性能数据

在时延敏感的数据查询与处理场景中,SMC-R + 弹性 RDMA 帮助 Redis 在不同 data size 下平均提升约 50% 的 QPS,在不同 clients 数量下平均提升 20% 的 QPS。

「高性能 RPC」场景

1、thrift

  • 不同类型 RPC 接口下使用 TCP 和 SMC-R 所得 QPS 对比

2、netty

  • 不同类型 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)。相信在不久的将来,SMC-R 能够帮助更多的用户无侵入的改造应用,方便快捷的享受 RDMA 带来的网络性能提升。

最后

送上1024程序员节日福利第一弹:经典书籍全场五折+大额优惠券!愿我们不在孤单!经典书籍是智慧的结晶,是与大师的对话!真正坚持看书学习人不多,希望你是其中一个!

如果提示上面优惠码用完,可以用下面的:

累计满200元减50元优惠码:JHKE7G(长按复制)

累计满300元减80元优惠码:JAF2QT(长按复制)

让我们一起庆祝属于我们的节日!

- END -


看完一键三连在看转发,点赞

是对文章最大的赞赏,极客重生感谢你

推荐阅读

Linux Kernel TCP/IP Stack|Linux网络硬核系列

深入理解DPDK程序设计|Linux网络2.0

深入理解Kubernetes容器网络

从TCP到RDMA网络最新技术|扩展技术视野相关推荐

  1. tcp 远程服务器,C#编程学习之使用TcpClient / BeginConnect测试远程服务器tcp端口连接-网络教程与技术 -亦是美网络...

    有时候经常需要对一些服务器的端口进行tcp连接测试,通常使用"telnet IP地址 端口号"的方式即可,不能说这种方式不可取,只是使用起来比较麻烦,本着简单好用的目的,不如我们自 ...

  2. 区块链笔记:技术栈、对等网络、密码技术、账户模型、网络共识、脚本系统、扩展技术

    技术栈 从比较技术化的一个角度来对区块链进行一个阐述 从技术站的组成来来阐述一下区块链,作为一种软件系统的开发人员或者说是技术爱好者,更希望从技术的角度来进行一个理解,到底它包含哪些技术模块?又分别产 ...

  3. RDMA 架构与实践(技术详解(一):RDMA概述)

    RDMA 架构与实践 | https://houmin.cc/posts/454a90d3/ RDMA,即 Remote Direct Memory Access,是一种绕过远程主机 OS kerne ...

  4. [转]数据中心网络虚拟化 隧道技术

    http://www.sdnlab.com/12077.html SDNLAB 如何实现不同租户和应用间的地址空间和数据流量的隔离是实现数据中心网络虚拟化首先需要解决的几个问题之一.所谓地址空间的隔离 ...

  5. 转:Linux网络IO并行化技术概览

    转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...

  6. 网络故障的技术一些东东

    IT 精品杂志 一个互联网的时代,一个知识以几何速度增长的时代,当人们在讨论知识的快速扩展会给人们带来什么的时候,知识的增长的速度不为人类意识的缓慢而依旧快速增加着.我们能做的有什么--,只能是接受, ...

  7. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明: 一.OSI七层网络协议 OSI是Open System I ...

  8. OSI七层网络、TCP/IP五层网络架构、二层/三层网络

    一.OSI七层网络协议 OSI是Open System Interconnect的缩写,意为开放式系统互联. OSI参考模型各个层次的划分遵循下列原则: 1)根据不同层次的抽象分层 2)每层应当有一个 ...

  9. 计算机网络(OSI、TCP/IP、网络协议、常见网络设备工作原理)

    目录 OSI模型 TCP/IP模型 网络协议 IP协议 IP数据报格式 IP数据报分片 IPv4地址 NAT协议 ARP/RARP协议 ARP RARP DHCP协议 ICMP协议 ICMP差错报告报 ...

最新文章

  1. MySQL练习题:常用函数
  2. 计算机及网络的概念,网络的概念是什么意思,以及计算机网络概念的引入
  3. payara 创建 集群_高可用性(HA),会话复制,多VM Payara群集
  4. 信息安全工程师笔记-网络安全主动防御技术与应用
  5. 【推荐】 女人愁嫁时代终于来临
  6. Java 类主动引用和被动引用
  7. Python使用爬山算法寻找序列“最大值”
  8. CSS中背景图片的坐标之使用说明及css中把所有背景图都放在一张图片上减少图片服务器的请求次数问题(转)...
  9. Illustrator 教程,如何在 Illustrator 中使用钢笔工具创建作品?
  10. 一体机or复合机?企业文印设备该怎么选
  11. 运动会管理系统(JAVA,JSP,SERVLET,SQLSERVER)
  12. 2017年全球IDC、光器件、100G及400G数通模块市场预测
  13. react--1.react环境搭建、JSX语法、注释、样式、列表渲染、定义单个组件、eact Props、react State
  14. kali下生成木马的工具
  15. 面向资源受限安全芯片的开放式运行环境设计
  16. c语言何钦铭,C语言 何钦铭
  17. 【CV Transformer 论文笔记】Intriguing Properties of Vision Transformers
  18. 【魅力开源】第3集:聊个轻松点的话题,如何把给员工发生日贺卡这个事变得有人情味点?关于Odoo的自动化邮件系统
  19. js中clearInterval的重新执行/重新开始
  20. k8s对外攻击面总结

热门文章

  1. 对称加密算法 - Java加密与安全
  2. ft232r usb uart驱动 win7_新电脑想装WIN7,技术员让装WIN10,不是忽悠你,是有原因的...
  3. Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改
  4. webflux系列--reactor功能
  5. mysql使用常量列_MySQL 执行计划
  6. 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞与 I/O 多路复用、Java NIO 之间的联系
  7. 200718C语言及C程序概念
  8. 主流or消亡?2016年大数据发展将何去何从
  9. typedef和函数指针定义
  10. Rafy 框架-发布网页版用户手册