【实践】SMC-R透明加速TCP技术,在Redis场景下的应用实践

本文在浪潮信息云峦服务器操作系统KeyarchOS环境下,使用SMC-R透明加速TCP技术在Redis场景下进行了应用验证。

一. 背景

当前 Linux 网络协议栈是在性能(吞吐、CPU 使用率)、时延和通用性权衡下的实现。在真实场景中,常常需要高性能但是并不通用的用户态协议栈,亦或是通用、更高性能更低时延的方案,但是基于传统以太网卡的方案很难有大幅度的提升,更多是基于硬件的红利,例如 100G/400G 网络。

在大规模数据中心内部,如何为跨服务器之间的数据传输,提供高性能、低延迟的通信,从而加速数据中心内不同服务器之间的数据共享、数据备份、容灾等;在分布式存储系统中,如何为节点之间的数据传输,提供高带宽、低延迟的存储访问,加速数据的读写操作,提高存储系统的性能等;这些都成为新型网络协议栈的应用场景。

二. 简介

共享内存通信(Shared Memory Communication,SMC)是一种兼容 socket 层,利用共享内存操作实现高性能通信的内核网络协议栈。当共享内存通信基于远程内存直接访问(Remote Direct Memory Access,RDMA)技术实现时,称为 SMC over RDMA(SMC-R)。

SMC-R 兼容 socket 接口的特点使得 TCP 应用程序无需任何改造即可运行在 SMC协议栈上,底层使用的RDMA网络使SMC拥有相较于TCP更好的网络性能。SMC协议栈通过 TCP 连接自主发现对侧SMC能力,协商成功后使用SMC协议栈承载应用数据流量,协商失败则安全回退至TCP/IP协议栈,保证数据正常传输。

三. 协议透明替换

使用 SMC-R 协议有两种方法。

其一,是在应用程序中显式创建 AF_SMC 族的 socket;

其二,是利用 LD_PRELOAD 或 ULP + eBPF 的方式透明的将应用程序中的 AF_INET 族 socket 替换为 AF_SMC 族socket。我们默认使用 SMC-R 通信的节点已经加载了SMC 内核模块,并通过这种方法将应用程序运行在 SMC-R 协议上。

对于第二种方法:

使用 LD_PRELOAD 实现协议栈透明替换,在运行TCP应用程序时预加载一个动态库,在动态库中实现自定义 socket() 函数,将 TCP应用程序创建的 AF_INET 类型 socket 转换为 AF_SMC 类型的 socket,再调用标准 socket 创建流程,从而将 TCP 应用流量引入 SMC-R 协议栈。开源用户态工具集smc-tools中的 smc_run 指令即实现上述功能。

四. SMC-R在高性能数据查询和处理中的应用

SMC-R 作为一套与 TCP/IP 协议平行、向上兼容 socket 接口、底层使用 RDMA 完成共享内存通信的内核协议栈,其设计意图是为 TCP 应用提供透明的 RDMA 服务,同时保留了 TCP/IP 生态系统中的关键功能。基于此,本文针对redis数据库应用场景,在无需对redis进行任何改造的情况下,测试使用SMC-R前后吞吐性能对比,结果如下:

测试结果:redis-banchmarh测试中,SET方法在使用TCP协议下,无论线程数或数据包大小场景下均比较稳定,在使用SMC协议下,提升幅度较大,达到40%以上,在线程数8、数据包大小64情况下提升60%。GET方法测试结果与SET方法相近,性能提升趋势也基本一致。

五. 总结

基于SMC-R的高性能、透明替换等优势,适用于网络通信占比高的场景,在Redis等高性能数据查询与处理的场景,SMC-R为应用提供无侵入式透明替换TCP协议栈的能力,无需应用二次开发和适配,即可为应用提升QPS(Queries Per Second),在Redis应用场景下(64字节、8线程)可提升至60%。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值