SMC-R 透明加速 TCP 技术,在 Redis 场景下的应用实践 | 干货推荐

简介: SMC-R 作为一套与 TCP/IP 协议平行、向上兼容 socket 接口、底层使用 RDMA 完成共享内存通信的内核协议栈,其设计意图是为 TCP 应用提供透明的 RDMA 服务,同时保留了 TCP/IP 生态系统中的关键功能。

编者按:SMC-R 作为一套与 TCP/IP 协议平行、向上兼容 socket 接口、底层使用 RDMA 完成共享内存通信的内核协议栈,其设计意图是为 TCP 应用提供透明的 RDMA 服务,同时保留了 TCP/IP 生态系统中的关键功能。本文转自浪潮信息操作系统公众号,介绍了在龙蜥操作系统衍生版 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%。


更多 SMC-R 相关文章阅读:

系列解读SMC-R(一):透明无感提升云上 TCP 应用网络性能

系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信

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

性能透明提升 50%!SMC + ERDMA 云上超大规模高性能网络协议栈


—— 完 ——

相关文章
|
监控 NoSQL Java
场景题:百万数据插入Redis有哪些实现方案?
场景题:百万数据插入Redis有哪些实现方案?
281 1
场景题:百万数据插入Redis有哪些实现方案?
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
364 6
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
947 3
|
缓存 NoSQL 架构师
Redis批量查询的四种技巧,应对高并发场景的利器!
在高并发场景下,巧妙地利用缓存批量查询技巧能够显著提高系统性能。 在笔者看来,熟练掌握细粒度的缓存使用是每位架构师必备的技能。因此,在本文中,我们将深入探讨 Redis 中批量查询的一些技巧,希望能够给你带来一些启发。
Redis批量查询的四种技巧,应对高并发场景的利器!
|
存储 NoSQL Java
从扣减库存场景来讲讲redis分布式锁中的那些“坑”
本文从一个简单的库存扣减场景出发,深入分析了高并发下的超卖问题,并逐步优化解决方案。首先通过本地锁解决单机并发问题,但集群环境下失效;接着引入Redis分布式锁,利用SETNX命令实现加锁,但仍存在死锁、锁过期等隐患。文章详细探讨了通过设置唯一标识、续命机制等方法完善锁的可靠性,并最终引出Redisson工具,其内置的锁续命和原子性操作极大简化了分布式锁的实现。最后,作者剖析了Redisson源码,揭示其实现原理,并预告后续关于主从架构下分布式锁的应用与性能优化内容。
565 0
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
676 8
|
移动开发 NoSQL 网络协议
Redis 管道技术
10月更文挑战第21天
186 3
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
590 4
|
JSON 缓存 NoSQL
Redis 在线查看序列化对象技术详解
Redis 在线查看序列化对象技术详解
410 3

热门文章

最新文章