Remote Dictionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
采用TCP以及UDP多播和单播数据报的应用,可以借助VMA卸载CPU上的I/O 负载。数据绕过了系统内核和IP协议栈,直接从应用传递到InfiniBand或以太网的网卡(NIC),从而最大限度地减少了上下文切换、数据缓冲及中断的次数,实现了系统的超低延迟和高吞吐量传输性能。Mellanox VMA可提供高于每秒1000万数据包的环境下提供稳定的性能,并拥有较低的通信延迟——大幅降低UDP应用间延迟和TCP延迟。

VMA 运行在用户态,精简了协议栈 的处理,带来处理时延的大幅降低。在应用层用于上层软件开发不感知VMA,开发 与TCP/IP无差别;对端无需做任何修改即可通信。
测试原理:
使用ipoib和vma加速过后的ipoib连接进行redis的benchmark测试,主要测试项为redis的get、set、incr方法。
pipeline效果为越大越明显 时延加速越明显
pipeline 1
命令:redis-benchmark -h 172.16.0.7 -p 6379 -t set,get,incr -n 1000000 -q -P 1

使用benchmark测试ipoib地址 指定端口为6379 -t为测试set get incr三个方法 每个方法共1000000万次请求 使用一个管道。
pipeline 16
redis-benchmark -h 172.16.0.7 -p 6379 -t set,get,incr -n 1000000 -q -P 16
使用benchmark测试ipoib地址 指定端口为6379 -t为测试set get incr三个方法 每个方法共1000000万次请求 使用十六个管道。


pipeline 1
测试命令:LD_PRELOAD=libvma.so redis-benchmark -h 172.16.0.7 -p 6379 -t set,get,incr -n 1000000 -q -P 1
使用benchmark测试ipoib地址 在命令行前指定连接到vma库文件 指定端口为6379 -t为测试set get incr三个方法 每个方法共1000000万次请求 使用一个管道。

测试结果为
每秒处理22.3万个set请求, p50为0.191 msec
每秒处理21.7万个set请求, p50为0.191 msec
每秒处理22.3万个incr请求, p50为0.191 msec
pipeline 16
测试命令:LD_PRELOAD=libvma.so redis-benchmark -h 172.16.0.7 -p 6379 -t set,get,incr -n 1000000 -q -P 16
使用benchmark测试ipoib地址 在命令行前指定连接到vma库文件 指定端口为6379 -t为测试set get incr三个方法 每个方法共1000000万次请求 使用十六个管道。

每秒处理78.8万个set请求, p50为0.8 msec
每秒处理101万个set请求, p50为0.67 msec
每秒处理100万个incr请求, p50为0.70 msec
在测试结果结果中在pipeline=1的测试中,vma加速提升每秒请求4-5倍,时延3-4倍,pipeline=16的测试中,vma加速提升每秒请求2-3倍,时延2-3倍,提升明显。