猜想假设
memcached这种系统的瓶颈在网络,不在计算和存储,而使用多线程,只能优化计算。用了多线程,反而会有上下文切换的代价。
测试概要
测试目标
让 Memcached 分别采用 单线程模型 和 多线程模型, 并对其性能进行对比
测试方法
测试软件
实验组 Memcached 1.2.2 (IO 多路复用 + 单线程)
对照组 Memcached 1.2.2 (IO 多路复用 + 多线程)
Memcached 1.2.2 是 Memcached 众多版本中的一个临界版本,在Memcached 1.2.2 之前的版本采用 “IO 多路复用 + 单线程” 模型, 在Memcached 1.2.2 之后的版本则采用 “IO 多路复用 + 多线程” 模型。
测试工具
memslap 1.0
测试环境
- 软件 Ubuntu 15.10
- 硬件 Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz 4核 2G 内存
测试步骤
搭建
- 编译 memcached
先编译单线程的 memcached 版本。(正常编译,作为实验组)
再编译支持多线程 memcached 的版本(作为对照组), 编译方法如下:
修改configure.ac文件,将下面一行
AC_DEFINE([USE_THREADS],,[Define this if you want to use pthreads])
改为
AC_DEFINE([USE_THREADS],1,[Define this if you want to use pthreads])
执行 sh autogen.sh
, 然后执行 ./configure --enable-threads
,最后执行 make
- 分别运行 实现组和对照组的memcached, 然后对其进行基准测试
命令示例: memcslap --servers=localhost:11211 --concurrency=5000 --execute-number=10 --tcp-nodelay --non-blocking --flush
–concurrency=5000 –execute-number=10 这两个数据多次选型,反复测试。
实验结果
选取典型实验结果数据
- 实验组 (单线程)
- 对照组 (多线程)
实验推导结论
从上面的实验结果看,单线程的性能要比多线程性能略高。
数据量不够大,多线程没用
应该不是这个原因