准备环境:
因为找不到可用的1000M网络机器,使用一根直通线将两台笔记本连起来组成1000M Ethernet网。没错,是直通线现在网卡都能自适应交叉线、直通线,速度不受影响,用了一段时间机器也没出问题。
服务端:T420 i5-2520M(2.5G)/8G ubuntu 11.10
客户端:Acer i5-2430M(2.4G)/4G mint 11
redis版本:2.6.9
测试脚本:./redis-benchmark -h xx -p xx -t set -q -r 1000 -l -d 20
长度 | 速度/sec | 带宽(MByte/s) 发送+接收 | CPU | CPU Detail |
20Byte | 17w | 24M+12M | 98.00% | Cpu0 : 21.0%us, 40.7%sy, 0.0%ni, 4.3%id, 0.0%wa, 0.0%hi, 34.0%si, 0.0%st |
100Byte | 17w | 37M+12M | 97.00% | Cpu0 : 20.3%us, 37.9%sy, 0.0%ni, 7.0%id, 0.0%wa, 0.0%hi, 34.9%si, 0.0%st |
512Byte | 12w | 76M+9M | 87.00% | Cpu0 : 20.9%us, 33.2%sy, 0.0%ni, 25.6%id, 0.0%wa, 0.0%hi, 20.3%si, 0.0%st |
1K | 9w | 94M+8M | 81.00% | Cpu0 : 19.9%us, 30.2%sy, 0.0%ni, 34.2%id, 0.0%wa, 0.0%hi, 15.6%si, 0.0%st |
2K | 5w | 105M+6M | 77.00% | Cpu0 : 18.0%us, 32.0%sy, 0.0%ni, 34.7%id, 0.0%wa, 0.0%hi, 15.3%si, 0.0%st |
5K | 2.2w | 119M+3.2M | 77.00% | Cpu0 : 22.5%us, 32.8%sy, 0.0%ni, 32.8%id, 0.0%wa, 0.0%hi, 11.9%si, 0.0%st |
10K | 1.1w | 119M+1.7M | 70.00% | Cpu0 : 18.2%us, 29.8%sy, 0.0%ni, 42.7%id, 0.0%wa, 0.0%hi, 9.3%si, 0.0%st |
20K | 0.57w | 120M+1M | 58.00% | Cpu0 : 17.8%us, 26.4%sy, 0.0%ni, 46.2%id, 0.0%wa, 0.0%hi, 9.6%si, 0.0%st |
value 在1K以上时,1000M网卡轻松的被跑慢,而且redis-server cpu连一个核心都没占用到,可见redis高效,redis的服务也不需要太高配置,瓶颈在网卡速度。
整理看redis的us都在20%左右,用户层代码资源占用比例都很小。
value 如果很小时可能看起来有些浪费,那多开几个redis-server 看看,value :20byte:
2个redis实例时:
长度 | 速度/sec | 带宽(MByte/s) 发送+接收 | CPU | CPU Detail |
20Byte | 10w+10w | 26M+14M | 98%+98% | Cpu0 : 18.9%us, 20.5%sy, 0.0%ni, 0.3%id, 0.0%wa, 0.0%hi, 60.3%si, 0.0%st Cpu1 : 41.2%us, 56.5%sy, 0.0%ni, 2.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st |
3个redis实例时:
长度 | 速度/sec | 带宽(MByte/s) 发送+接收 | CPU | CPU Detail |
20Byte | 7w*3 | 26M+14M | 67%*3 | Cpu0 : 20.6%us, 19.9%sy, 0.0%ni, 0.7%id, 0.0%wa, 0.0%hi, 58.8%si, 0.0%st Cpu1 : 37.9%us, 54.2%sy, 0.0%ni, 8.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 5.7%us, 4.7%sy, 0.0%ni, 88.0%id, 1.7%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 5.6%us, 2.6%sy, 0.0%ni, 91.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st |
小包的时候网卡中断处理是瓶颈,大包时网卡速度又是瓶颈,故redis单线程处理除了无线程安全考虑外,就是一个线程处理毫无压力,多了没用不着。
小的value可以使用pipleline方式,tcp开启nagle算法,通过tcp合包的方式估计能够提高处理能力。
看起来三个实例都在同一个核心是跑,CPU0 CPU1 是同一个物理核心超线程。软中断占用60%,软中断在固定CPU成为瓶颈,下次分散下软中断到其他cpu再测试看效果。
---------------
补充,上面是用笔记本测试结果,和生产机器还是有不小差距的,仅供参考; 我另外一篇文章有记录生产环境服务器测试结果。