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 云上超大规模高性能网络协议栈


—— 完 ——

相关文章
|
4月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
340 86
|
4月前
|
存储 缓存 监控
Redis分区的核心原理与应用实践
Redis分区通过将数据分散存储于多个节点,提升系统处理高并发与大规模数据的能力。本文详解分区原理、策略及应用实践,涵盖哈希、范围、一致性哈希等分片方式,分析其适用场景与性能优势,并探讨电商秒杀、物联网等典型用例,为构建高性能、可扩展的Redis集群提供参考。
283 0
|
6月前
|
存储 缓存 NoSQL
Redis 核心知识与项目实践解析
本文围绕 Redis 展开,涵盖其在项目中的应用(热点数据缓存、存储业务数据、实现分布式锁)、基础数据类型(string 等 5 种)、持久化策略(RDB、AOF 及混合持久化)、过期策略(惰性 + 定期删除)、淘汰策略(8 种分类)。 还介绍了集群方案(主从复制、哨兵、Cluster 分片)及主从同步机制,分片集群数据存储的哈希槽算法。对比了 Redis 与 Memcached 的区别,说明了内存用完的情况及与 MySQL 数据一致性的保证方案。 此外,详解了缓存穿透、击穿、雪崩的概念及解决办法,如何保证 Redis 中是热点数据,Redis 分布式锁的实现及问题解决,以及项目中分布式锁
201 1
|
6月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
638 2
|
7月前
|
NoSQL 网络协议 Java
【Azure Redis】Redis服务端的故障转移(Failover)导致客户端应用出现15分钟超时问题的模拟及解决
在使用 Azure Cache for Redis 服务时,因服务端维护可能触发故障转移。Linux 环境下使用 Lettuce SDK 会遇到超时 15 分钟的已知问题。本文介绍如何通过重启 Primary 节点主动复现故障转移,并提供多种解决方案,包括调整 TCP 设置、升级 Lettuce 版本、配置 TCP_USER_TIMEOUT 及使用其他 SDK(如 Jedis)来规避此问题。
284 0
|
8月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
235 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
|
8月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
681 3
|
8月前
|
存储 NoSQL Java
从扣减库存场景来讲讲redis分布式锁中的那些“坑”
本文从一个简单的库存扣减场景出发,深入分析了高并发下的超卖问题,并逐步优化解决方案。首先通过本地锁解决单机并发问题,但集群环境下失效;接着引入Redis分布式锁,利用SETNX命令实现加锁,但仍存在死锁、锁过期等隐患。文章详细探讨了通过设置唯一标识、续命机制等方法完善锁的可靠性,并最终引出Redisson工具,其内置的锁续命和原子性操作极大简化了分布式锁的实现。最后,作者剖析了Redisson源码,揭示其实现原理,并预告后续关于主从架构下分布式锁的应用与性能优化内容。
422 0
|
IDE Linux 开发工具
从旧服务器迁移svn到另一台新服务器中(linux系统)|遇到诸多坑,已解决
从旧服务器迁移svn到另一台新服务器中(linux系统)|遇到诸多坑,已解决
|
数据挖掘 Windows
【服务器数据恢复】服务器迁移数据时数据丢失的数据恢复案例
一台安装Windows操作系统的服务器。工作人员在迁移该服务器中数据时突然无法读取数据,服务器管理界面出现报错。经过检查发现服务器中一个lun的数据丢失。