简介:SMC-R 是如何减速 TCP 利用?
编者按:TCP 协定作为以后应用最为宽泛的网络协议,场景遍布挪动通信、数据中心等。对于数据中心场景,通过弹性 RDMA 实现高性能网络协议 SMC-R,通明替换利用 TCP 协定,实现利用网络通明减速。本文整顿自龙蜥大讲堂第 15 期,视频精彩回放已上传至龙蜥官网,欢送查看!
为什么须要新的内核网络协议栈?
Linux 内核网络协议栈没有银弹,以后 Linux 网络协议栈是在性能(吞吐、CPU 使用率)、时延和通用性衡量下的实现。在实在场景中,咱们可能须要高性能然而并不通用的用户态协定栈,亦或是通用、更高性能更低时延的计划,然而基于传统以太网卡的计划很难有大幅度的晋升,更多是基于硬件的红利,例如 100G/400G 网络。鉴于此,咱们思考是否能够基于其余高性能网络,提供 TCP 兼容的行为和 socket 接口,提供更优的性能。
基于共享内存的网络通信
在谈跨主机通信之前,咱们先把眼帘放到单机维度,如何在单机维度实现 IPC?上面是几种常见的 IPC 形式:
不出意外,共享内存是最快的 IPC 形式,然而短少一种 OS 层面的对立实现和接口,少数是在语言的 library 中提供。
这里咱们合成一下单机维度的共享内存 IPC 流程:
- 发送方写到事后调配好的一块内存区域;
- 告诉对端,并更新新写入内存的偏移量;
- 接管方依照新更新的偏移量读取数据;
- 接管方更新读取内存的偏移量。
如果有一种技术,能够实现在两台机器间“搬运”内存,那么咱们能够把这种高性能 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 利用,能够应用上面三种计划:
- 应用 LD_PRELOAD 的形式,这种形式原理是将动静链接的二进制文件中,对于 socket 创立的 SOCK_STREAM 协定,替换为 AF_SMC 协定,从而实现将 TCP 通明替换 SMC 协定;
- 通过 net namespace 级别的 sysctl,能够实现网络命名空间(容器等)纬度的所有 TCP 连贯的替换;
- 通过 eBPF 规定(例如五元组、过程 ID 等),动静匹配须要替换的连贯进行替换。
SMC-R 在龙蜥
在龙蜥社区中,咱们也正在继续一直地加强优化 SMC,包含性能、应用场景、稳定性和通明替换。参加龙蜥社区奉献的半年工夫内,共为 Linux 上游社区奉献了 60+ 的补丁。
本次分享只是抛砖引玉,前期更多精彩技术分享还请继续关注龙蜥公众号不迷路。欢送大家在龙蜥社区交换和分享,相干材料能够从上面的链接中获取。
相干链接地址:
1、代码仓库:hpn-cloud-kernel
2、高性能网络 SIG 地址:https://openanolis.cn/sig/hig…
原文链接
本文为阿里云原创内容,未经容许不得转载。