写点什么

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

评论 1 条评论

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

北冥多样性计算融合架构系列解读之 一文读懂华为昇思科学计算

Geek_32c4d0

5G NR 网络类型移动开发小记

阿里巴巴终端技术

ios android 5G 移动开发 移动网络

怒肝半月!Python 学习路线+资源大汇总

程序员鱼皮

Python 人工智能 大数据 算法 数据分析

阿里大牛把算法面试必问的排序、递归、链表、栈、队列、二叉树、动态规划撸完了

编程 程序员 架构 面试 算法

融云 x 微脉:让互联网医疗服务更长远、更连续

融云 RongCloud

通信云 医疗信息化

二级等保测评通过需要多少分?去哪里找等保测评机构?

行云管家

网络安全 等级保护 等保测评 等保2.0

什么样的云管平台才是企业需要的?他们的真正诉求是什么?

行云管家

云计算 云管平台 云资源 云成本

把Github“炸”翻了!的100万字高级面试总结,惨遭多家大厂威胁下架

程序员小呆

Java 程序员 面试 架构师 java面试

Stratifyd创始人汪晓宇:从战略层建立数据驱动型客户体验策略

让GitHub低头!这份阿里内部的10W字Java面试手册到底有多强?

程序员小呆

Java 程序员 面试 架构师 java面试

北冥多样性计算融合架构系列解读之 一文读懂华为MindStudio统一工具链 多样性计算系统下的开发挑战

Geek_32c4d0

算力 多样性计算 北冥

解决外卖配送最后一公里:外卖柜存在哪些问题

石头IT视角

从一盏路灯,看亿万级物联网联接的智能之路

华为云开发者联盟

物联网 IoT 华为云 LiteOS NB- IoT

出神入化!字节技术小组耗时99天打造Java零基础到中高级核心手册

Java 程序员 架构 面试 后端

我用这份10w字的Java面经,暑假在家闭关7749天成功拿下美团offer!

程序员小呆

Java 程序员 面试 架构师 java面试

北冥多样性计算融合架构系列解读之 一文读懂华为多瑙统一调度器

Geek_32c4d0

「ANR」Android SIGQUIT(3) 信号拦截与处理

阿里巴巴终端技术

android 信号量 anr

WICC · 广州开启报名!包揽最「in」社交、泛娱乐、出海话题

融云 RongCloud

开发者 游戏 通信云 社交 泛娱乐

我一口气面试6家大厂,已拿下5家offer,分享经验和Java资料,其实大厂没有你想象中难!

程序员小呆

Java 程序员 面试 架构师 java面试

回顾|鉴释梁宇宁在嵌入式技术大会发表WASM安全性演讲

鉴释

操作系统 嵌入式 Wasm

在Github找的一份面试资料,看了感觉直接啥也不是

程序员小呆

程序员 面试 架构师 java

阿里技术官手码23W字Java面试,在Github上爆火,惨遭多家大厂威胁下架

程序员小呆

Java 程序员 面试 架构师 java面试

1688 商家基于 HarmonyOS 的多屏协同直播技术方案

阿里巴巴终端技术

ios android 客户端开发 HarmonyOS 直播技术

宇宙条一面:十道经典面试题解析

编程 架构 面试 后端 计算机

猛攻一线大厂,Java架构面试点+技术点标准手册完整版来了!

Java 程序员 架构 面试 后端

北冥多样性计算融合架构系列解读之 一文读懂北冥基础使能:毕昇C++编译器及北冥融合加速库

Geek_32c4d0

uni-app技术分享| 用uni-app实现拖动的诀窍

anyRTC开发者

uni-app 音视频 WebRTC 移动开发 视频通话

和12岁小同志搞创客开发:如何驱动LED数码管?

不脱发的程序猿

少儿编程 DIY 创客开发 LED数码管

把Github“炸”翻了!的阿里面试总结,惨遭多家大厂威胁下架!

程序员小呆

Java 程序员 面试 架构师 java面试

区块链底层平台如何实现国密改造?

旺链科技

区块链 国密改造

肝不爆我不停!这套阿里10月最新面试手册(题+视频)爆砍55K+16薪Offer!

Java架构追梦

Java 阿里巴巴 后端 java面试 offer

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