写点什么

性能提升 57% ,SMC-R 透明加速 TCP 实战解析

  • 2022-05-20
  • 本文字数:1420 字

    阅读完需:约 5 分钟

性能提升 57% ,SMC-R 透明加速 TCP 实战解析

TCP 协议作为当前使用最为广泛的网络协议,场景遍布移动通信、数据中心等。对于数据中心场景,通过弹性 RDMA 实现高性能网络协议 SMC-R,透明替换应用 TCP 协议,实现应用网络透明加速。

为什么需要新的内核网络协议栈?



Linux 内核网络协议栈没有银弹,当前 Linux 网络协议栈是在性能(吞吐、CPU 使用率)、时延和通用性权衡下的实现。


在真实场景中,我们可能需要高性能但是并不通用的用户态协议栈,亦或是通用、更高性能更低时延的方案,但是基于传统以太网卡的方案很难有大幅度的提升,更多是基于硬件的红利,例如 100G/400G 网络。


鉴于此,我们考虑是否可以基于其他高性能网络,提供 TCP 兼容的行为和 socket 接口,提供更优的性能。

基于共享内存的网络通信


在谈跨主机通信之前,我们先把视线放到单机维度,如何在单机维度实现 IPC?下面是几种常见的 IPC 方式:



不出意外,共享内存是最快的 IPC 方式,但是缺少一种 OS 层面的统一实现和接口,多数是在语言的 library 中提供。


这里我们分解一下单机维度的共享内存 IPC 流程:


  1. 发送方写到预先分配好的一块内存区域;

  2. 通知对端,并更新新写入内存的偏移量;

  3. 接收方按照新更新的偏移量读取数据;

  4. 接收方更新读取内存的偏移量。



如果有一种技术,可以实现在两台机器间“搬运”内存,那么我们可以把这种高性能 IPC 方案从单机维度拓展到不同的主机间。很显然,Remote Direct Memory Access RDMA 可以帮助我们高效地搬运内存。


相对于单机的共享内存通信流程,基于 RDMA 的流程:


  • 发送方写到本机预先分配好的一块内存区域;

  • 通过 RDMA 将该内存写入到对端维护的内存区域的相同位置;

  • 通过 RDMA 通知接收方,并更新新写入内存的偏移量;

  • 接收方按照新更新的偏移量读取数据;

  • 接收方通过 RDMA 更新读取内存的偏移量。



基于 RDMA 的共享内存模型,SMC-R 应运而生,SMC-R 缩写即为 Shared Memory Communcation over RDMA。


下面让我们看下 SMC-R 是如何加速 TCP 应用。



SMC-R 是一种混合协议,即通过 TCP 实现建联时信息交互,通过 RDMA 网络实现数据路径高性能数据传输。同时,一旦 RDMA 链路建联失败,可以 fallback 到 TCP,实现兜底 TCP 的能力。除此之外,SMC-R 借助多个 RNIC,可以实现运行时的故障迁移,确保运行时可靠性。



RDMA 本身提供了 verbs 接口供应用使用,SMC-R 基于共享内存的模型,提供了一套完全兼容 TCP socket 的内核接口,可以通过 LD_PRELOAD 基于 eBPF 的规则替换等方式,实现将 TCP socket 透明替换成 SMC socket,进而实现透明替换和加速。


基于 SMC-R 透明替换,我们测试了几种应用场景,其中 Redis 有最高 57% 的性能提升,此时 Redis 无需进行任何改造,即可享受 SMC-R 带来的性能加速。


使用 SMC-R 加速应用


透明替换并加速 TCP 应用,可以使用下面三种方案:


  1. 使用 LD_PRELOAD 的方式,这种方式原理是将动态链接的二进制文件中,关于 socket 创建的 SOCK_STREAM 协议,替换为 AF_SMC 协议,从而实现将 TCP 透明替换 SMC 协议;

  2. 通过 net namespace 级别的 sysctl,可以实现网络命名空间(容器等)纬度的所有 TCP 连接的替换;

  3. 通过 eBPF 规则(例如五元组、进程 ID 等),动态匹配需要替换的连接进行替换。



SMC-R 在龙蜥


在龙蜥社区中,我们也正在持续不断地增强优化 SMC,包括性能、使用场景、稳定性和透明替换。参与龙蜥社区贡献的半年时间内,共为 Linux 上游社区贡献了 60+ 的补丁。



相关链接地址:

1、代码仓库:hpn-cloud-kernel

2、高性能网络 SIG 地址:https://openanolis.cn/sig/high-perf-network

2022-05-20 13:251837

评论 1 条评论

发布
用户头像
2022-05-21 11:48
回复
没有更多了
发现更多内容

零信任安全模型:构建未来数字世界的安全基石

GousterCloud

零信任

我们是如何测试人工智能的(五)案例介绍:ASR 效果测试介绍

测吧(北京)科技有限公司

测试

精通测试规划:打造完备的测试计划与总结报告

测吧(北京)科技有限公司

测试

淘宝商品评论API:连接消费者与商家的桥梁,提升购物体验新途径

技术冰糖葫芦

API 文档

高效管理测试资源:工具化管理测试用例与Bug漏洞

测吧(北京)科技有限公司

测试

2024年智慧厕所解决方案,光明源智能科技是怎么实现的。

光明源智慧厕所

揭秘Linux进程通讯:解决死锁难题的方法论

测吧(北京)科技有限公司

测试

深度探索名企项目开发:揭秘经典开发流程与测试策略

测吧(北京)科技有限公司

测试

性能测试中的唯一标识问题研究

FunTester

我们是如何测试人工智能的(七)包含大模型的企业级智能客服系统拆解与测试方法 – 知识引擎

测试人

人工智能 软件测试 自动化测试 测试开发

今日分享丨单点登录原理及OAuth20授权码协议

inBuilder低代码平台

低代码 单点登录

ERC314协议代币开发及合约开发详解

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

我们是如何测试人工智能的(三)数据构造与性能测试篇

测吧(北京)科技有限公司

测试

Apache IoTDB 入选国家级规划教材《数据库系统概论(第6版)》!

Apache IoTDB

Digital Realty 将人工智能驱动的能效平台扩展至亚太地区

财见

企业架构设计原则之品质均衡性(一)

凌晞

企业架构 架构设计 架构设计原则

我们是如何测试人工智能的(二)数据挖掘篇

测吧(北京)科技有限公司

测试

我们是如何测试人工智能的(六)推荐系统拆解

测吧(北京)科技有限公司

测试

我们是如何测试人工智能的(七)包含大模型的企业级智能客服系统拆解与测试方法 – 知识引擎

测吧(北京)科技有限公司

测试

Rust 解码 Protobuf 数据比 Go 慢五倍?记一次性能调优之旅

Greptime 格睿科技

Go rust 性能 序列化 企业号 4 月 PK 榜

广东智慧公厕管理系统哪家好

光明源智慧厕所

云原生数据库下一站:像 MySQL 一样流行,让更多人受益于新技术的发展

百度Geek说

云计算 云原生数据库

Mistral Large模型现已在Amazon Bedrock上正式可用

财见

ChatGPT全方位解析:如何培养 AI 智能对话技能?

测吧(北京)科技有限公司

测试

探秘Linux进程与线程:多进程与多线程的奥秘及实战场景

测吧(北京)科技有限公司

测试

解析名企测试流程:从项目立项到产品上线的完整指南

测吧(北京)科技有限公司

测试

我们是如何测试人工智能的(四)补充:模型全生命周期流程与测试图

测吧(北京)科技有限公司

测试

建设智慧公厕有什么好处?都有哪些功能?

光明源智慧厕所

我们是如何测试人工智能的(八)包含大模型的企业级智能客服系统拆解与测试方法 – 大模型 RAG

测吧(北京)科技有限公司

测试

精通Linux性能优化:掌握CPU、内存、网络和IO性能调优的技巧与工具

测吧(北京)科技有限公司

测试

浪潮信息发布全球首个单存储16节点SAP HANA集群方案

财见

性能提升 57% ,SMC-R 透明加速 TCP 实战解析_文化 & 方法_龙蜥社区高性能网络SIG_InfoQ精选文章