multilate 是 leverich 在14年的时候,为了分析数据中心高密度混部场景下延迟敏感问题而开发出来的一个 memcached 性能压测工具,原论文可以了解一下:
https://jacob.leverich.org/papers/2014.mutilate.eurosys.slides.pdf
和 mcperf & memslap 等其他压测工具不太一样的是,multilate 非常适合分析长尾延迟问题,比如,multilate 的输出里面,可以非常直观的看到所有请求的平均延迟、最小延迟、最大延迟、10分位、90分位、95分位、99分位,当然,如果你想要更精确的数据,也可以改改代码,支持到99.9分位等等
代码在这里:https://github.com/leverich/mutilate
这是一个使用示例:
$ ./mutilate -s localhost
#type avg min 1st 5th 10th 90th 95th 99th
read 52.4 41.0 43.1 45.2 48.1 55.8 56.6 71.5
update 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
op_q 1.5 1.0 1.0 1.1 1.1 1.9 2.0 2.0
Total QPS = 18416.6 (92083 / 5.0s)
Misses = 0 (0.0%)
RX 22744501 bytes : 4.3 MB/s
TX 3315024 bytes : 0.6 MB/s
其他的用法,比如多线程、多链接、pipeline 等模式的配置和 mcperf 等差别不大
如果要构造长尾延迟的场景,根据排队系统理论:
- 服务窗口处理能力是固定的
- 要有请求在不断的排队
- 在请求处理完成之前,服务窗口总是过载的
把这个场景模拟出来,就能复现长尾延迟的问题
对于如何使用 multilate 来构造长尾场景,leverich 给了一些建议:
- Establish on the order of 100 connections per memcached server thread.
- Don’t exceed more than about 16 connections per mutilate thread.
- Use multiple mutilate agents in order to achieve (1) and (2).
- Do not use more mutilate threads than hardware cores/threads.
- Use -Q to configure the “master” agent to take latency samples at slow, a constant rate.