Redis IO多线程的简要测试结果

redis,io,多线程,简要,测试,结果 · 浏览次数 : 191

小编点评

**IO多线程测试结果摘要** | CPU核心数 | 线程数 | 吞吐量 | |---|---|---| | 2 | 1 | 227.8756 | | 4 | 8 | 455.7512 | | 8 | 16 | 811.5024 | | 12 | 32 | 1623.0048 | | 16 | 64 | 2846.0096 | | 4216 | 1 | 102.0408 | | 4216 | 8 | 204.0816 | | 6150 | 1 | 140.4832 | | 6150 | 8 | 280.9664 | **结论:** 在CPU核心比较多的情况下,8个IO线程的吞吐量能够翻一番。然而,部分命令在4-8线程增加时差异不是特别明显。

正文

Redis IO多线程的简要测试结果


摘要

最近想简单确认一下IO多线程的对吞吐量的提升情况.
正好手头有鲲鹏的机器, 所以想直接进行一下验证
顺便用一下4216 进行一下对比. 

发现 在CPU核心比较多的情况下 8个IO线程吞吐量能够翻一番. 
但是部分命令在4-8线程增加时 差异并不是特别明显. 

silver 4216 低价位的intelCPU比鲲鹏920的 吞吐量要高一些, 单没有搞多少.
纯粹压测, 看不太出来绑核与不绑核的差异. 

测试命令

./redis-benchmark -h 127.0.0.1 -p 6376 -n 100000 -c 8000 -d 256 --threads 1
# 注意我选择 10万个keys 8000个client 简直大小选择 256字节.
# 注意默认大小是 3个字节, 数值会比较好看,我想把简直设置大一些会好一点
 cat 6376_1threads.txt | grep -E "requests per second|====="
通过这个命令进行简要分析出具结果

测试方式

鲲鹏 920 64核心 两路服务器
2.6Ghz 128Core的服务器上面
使用 1 2 4 8  四种线程数量跑四遍

压测过程中使用 top -Hp的方式查看CPU的使用情况:
比如发现某个进程
 13276 root      20   0 2278756   1.2g   3080 R 99.7  0.1   1:01.29 io_thd_1                                                                                                                                                              
 13271 root      20   0 2278756   1.2g   3080 R 99.0  0.1   1:07.60 redis-server 
这是两个线程时的监控情况. 
出现CPU 高时 主要是执行LGANGE的测试.. GET和SET不会到达这么搞的占用. 

如果是四个线程会出现如下的情况:
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                               
 35666 root      20   0 1725812 954204   3052 R 99.9  0.1   0:21.90 io_thd_1                                                                                                                                                              
 35667 root      20   0 1725812 954204   3052 R 99.9  0.1   0:21.89 io_thd_2                                                                                                                                                              
 35668 root      20   0 1725812 954204   3052 R 99.9  0.1   0:21.89 io_thd_3                                                                                                                                                              
 35661 root      20   0 1725812 954204   3052 R 99.7  0.1   0:27.58 redis-server                                                                                                                                                          
 35663 root      20   0 1725812 954204   3052 S  0.0  0.1   0:00.00 bio_close_file                                                                                                                                                        
 35664 root      20   0 1725812 954204   3052 S  0.0  0.1   0:00.00 bio_aof_fsync                                                                                                                                                         
 35665 root      20   0 1725812 954204   3052 S  0.0  0.1   0:00.00 bio_lazy_free                                                                                                                                                         
 35669 root      20   0 1725812 954204   3052 S  0.0  0.1   0:00.25 jemalloc_bg_thd                                                                                                                                                       
 37399 root      20   0 1725812 954204   3052 S  0.0  0.1   0:00.00 jemalloc_bg_thd                                                                                                                                                       
 37401 root      20   0 1725812 954204   3052 S  0.0  0.1   0:00.00 jemalloc_bg_thd                                                                                                                                                       
 37402 root      20   0 1725812 954204   3052 S  0.0  0.1   0:00.00 jemalloc_bg_thd 

测试结果

线程数 PING SET GET INCR LPUSH RPUSH RPOP SADD HSET LRANGE_600 MSET
1 58719 58139 58788 61614 57142 58207 58343 61199 60024 2257 42211
2 75585 90497 74738 90991 74682 75301 75131 92421 90744 4211 53792
4 126582 95328 96246 125470 94339 96432 95693 96339 95510 4559 64432
8 129701 97751 129198 129366 97751 97656 97751 129701 129198 4434 65445

image


对比silver 4216与 6150的绑核处理

线程数 PING SET GET INCR LPUSH SADD HSET LRANGE_600 MSET
鲲鹏920 8线程 129701 97751 129198 129366 97751 129701 129198 4434 65445
4216 8线程 130548 130718 130208 130208 130378 129870 130548 6069 78616
4216 8线程 绑核 130548 129701 130208 130718 130039 129701 130378 6826 78125

image


4216 的绑核处理

server_cpulist 0-8
bio_cpulist 9-10
aof_rewrite_cpulist 12-15
bgsave_cpulist 16-17

与Redis IO多线程的简要测试结果相似的内容:

Redis IO多线程的简要测试结果

Redis IO多线程的简要测试结果 摘要 最近想简单确认一下IO多线程的对吞吐量的提升情况. 正好手头有鲲鹏的机器, 所以想直接进行一下验证 顺便用一下4216 进行一下对比. 发现 在CPU核心比较多的情况下 8个IO线程吞吐量能够翻一番. 但是部分命令在4-8线程增加时 差异并不是特别明显.

[转帖]Redis系列(十六)、Redis6新特性之IO多线程

https://blog.csdn.net/wsdc0521/article/details/106766587 终于,Redis的多线程版本横空出世,大大提高了并发,本篇就带大家来看看什么是IO多线程,和我们理解的多线程有什么区别,与Memcached的多线程又有什么区别。 目录 介绍 为什么Re

(三)Redis 线程与IO模型

1、Redis 单线程 通常说 Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,其他功能,比如持久化、异步删除、集群数据同步等,是由额外的线程执行的,所以严格来说,Redis 并不是单线程。 多线程开发会不可避免的带来并发控制和资源开销的问题,如果没有良好

[转帖]高性能IO模型:为什么单线程Redis能那么快?

https://zhuanlan.zhihu.com/p/596170085 你好,我是蒋德钧。 今天,我们来探讨一个很多人都很关心的问题:“为什么单线程的Redis能那么快?” 首先,我要和你厘清一个事实,我们通常说,Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的

[转帖]Redis 性能优化的 13 条军规!史上最全

https://zhuanlan.zhihu.com/p/118532234 Redis性能优化实战方案 Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O

CPU算力提升与实际性能提升的关系

## 关于SPEC2006CPU和RedisBenchmark的理解 ``` 最近研究过硬件CPU的性能和Redis这样单线程重IO服务 突然想对比一下CPU算力提升占Redis性能提升的比率情况 性能很大程度由CPU决定,但是其他部分的提升也会有一些促进作用. 比如内存带宽,IO调度算法优化等.

Redis单线程

Redis是基于Reactor模式开发的网络事件处理器,这个处理器是单线程的,所 以redis是单线程的。 为什么它是单线程还那么快呢? 主要有以下几个原因: 一、纯内存操作 由于Redis是纯内存操作,相比于磁盘来说,内存就快得多,这个是Redis快的主要 原因。 二、多路复用I/O机制(NIO)

redis7源码分析:redis 多线程模型解析

多线程模式中,在main函数中会执行InitServerLast void InitServerLast() { bioInit(); // 关键一步, 这里启动了多条线程,用于执行命令,redis起名为IO 线程 initThreadedIO(); set_jemalloc_bg_thread(s

[转帖]Redis benchmark

https://redis.io/docs/management/optimization/benchmarks/ Using the redis-benchmark utility on a Redis server Redis includes the redis-benchmark utili

[转帖]Redis CPU profiling

https://redis.io/docs/management/optimization/cpu-profiling/ Performance engineering guide for on-CPU profiling and tracing Filling the performance ch