在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

性能提升 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:252682

评论 1 条评论

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

从理论走向实践,金五银六Java线程池指南已上线,一次性教给你!

飞飞JAva

Java 线程池

架构师实战营 模块三作业(基于自研集群 + MySQL存储的消息队列系统架构设计文档)

代廉洁

架构实战营

你开25k?我给30k!能让面试官满意的Java面试笔记到底有多强?

Java 程序员 架构 面试

【LeetCode】整数反转Java题解

Albert

算法 LeetCode 5月日更

区块链数字钱包——未来世界的银行卡

CECBC

区块链

模块三作业-消息队列系统架构设计文档

张大彪

几种讨论场景下的原则

sherlockq

道-可道

顿晓

表达 5月日更

五月,开篇

程序员架构进阶

个人提升 28天写作 5月日更 总结思考

测试

bilibili

不爱跳槽的程序员集中在8-17k,揭晓中国开发者的真实现状

Java架构师迁哥

基于腾讯云Serverless部署游戏:合成大西瓜

一颗小树

#Serverless #python #腾讯云

一文入门Golang之文件操作【推荐收藏】

liuzhen007

文件 Go 语言 5月日更

网络攻防学习笔记 Day4

穿过生命散发芬芳

5月日更 网络攻防

原来长大以后,我发现以前面临到的难题并没有不见,只是换了角度出现在生活的另一面。

叶小鍵

ECMAScript 2019(ES10)新特性简介

程序那些事

JavaScript ecmascript nodejs 程序那些事

从分层架构到微服务架构(一)

元闰子

学习 读书笔记 架构

对Spring Cloud+Nginx架构的主要组件不清楚,看这个就好

小Q

Java 学习 架构 面试 微服务

Tomcat 中是怎么处理文件上传的?

AI乔治

Java tomcat 架构 HTTP

架构师实战营 模块三总结

代廉洁

架构实战营

区块链蕴含的变革力量

CECBC

区块链

如何选择Intel 傲腾持久内存的几种工作模式

Steven Xu

内存 存储 内存数据库 Snapshot 高性能服务器

教你写好技术文章

元闰子

技术人 写作技巧

机器学习 Machine Learning- 吴恩达Andrew Ng 第1~5课总结 John 易筋 ARTS 打卡 Week 46

John(易筋)

ARTS 打卡计划

最高学习效率:15.87%

石云升

学习 5月日更

卸载 Navicat!事实已证明,正版客户端,它更牛逼

比伯

Java 编程 架构 互联网 计算机

一张漫画解读:程序员为什么会跑路?

Java架构师迁哥

什么是批判性思考及推理

sherlockq

5分钟快速上手结构化思维方式

鲁米

方法论

教你写好代码注释

元闰子

软件开发 代码注释

第八大洲环游记(二):中东云计算,异口同韵

脑极体

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