使用memtier_benchmark;每一把钥匙都错过了

时间:2016-02-05 08:32:49

标签: redis

我的未命中/秒已填充且没有命中。

数据包含的密钥范围为1到300 K,存储的数据是字符串类型

memtier_benchmark -s xx.xxx.xxx.xxx -p xxxxx -P redis -t 1 -n 1 --ratio 0:1 -c 1 -x 2 --key-pattern S:S --authenticate=xxxxxxx --key-prefix= 

3 个答案:

答案 0 :(得分:0)

您的比率为0 set add 1 get。将其更改为1:1或类似的内容

答案 1 :(得分:0)

在尝试只读基准测试之前,您需要填充内存缓存。

要填充它,您可以运行只写工作负载以至少写入一次所有键。

答案 2 :(得分:0)

在这方面,

memtier_benchmark的文档非常少。如果您在首次运行时立即使用它,它将不会模拟任何缓存命中,对于设计用于测试缓存性能的工具而言,这是毫无用处的。

这里的2个关键参数是:

--key-pattern=[SET:GET]
--ratio=[SET:GET]

--key-pattern定义分配给设置的键的名称和请求的键的名称。例如,如果您使用S:S,则意味着软件将第一个密钥设置为memtier-0,然后立即请求memtier-1,然后设置memtier-1,然后请求{{ 1}}(算吧...)。这就是为什么您会获得100%的错过结果的原因。

如果设置memtier-2,则表示软件将在Set和Get中随机设置密钥名中的数字。根据设置的客户端和线程数,这通常会导致未命中率> 90%。如果您以90%的未命中率运行高速缓存,则是否应该完全运行高速缓存存在疑问,因此,这再次毫无用处。

要模拟现实世界中的缓存应执行的操作,您要使未命中率小于50%。为此,您需要扩展Gets over Sets的数量。 memtier_benchmark的默认值为R:R,但再次使用1:10作为默认值的第一次运行(或者如果您针对冷缓存持续运行),您仍然会获得很高的错过率。如果您继续对不断填充的同一缓存重复进行测试,则应该会看到未命中率下降,但是同样,如果您在临时环境中进行测试,则可能无法依靠。

为了在第一次运行时获得较低的未命中率,我使用:

--key-pattern=S:S

这将导致未命中率<50%。这和我能够模拟的一样好。我的实际缓存的未命中率小于5%。我仍在尝试找出一种使用memtier_benchmark进行测试的方法。

此外,使用--key-pattern=S:R --ratio=1:20 摆脱烦人的测试结果转储。

编辑:

要获得完全100%的命中率/ 0%的未命中率,请执行以下操作:

从冷的,空的缓存开始

运行使用--hide-histogram参数的测试,以使测试中仅包含-ratio=,且键值范围非常狭窄:

Sets

现在,再次运行测试,这次,改变比例,以便仅包含--hide-histogram --key-pattern=S:S --key-minimum=1 --key-maximum=50 --ratio=1:0

Gets

然后您可以通过重新运行两个零件并扩展--hide-histogram --key-pattern=S:S --key-minimum=1 --key-maximum=50 --ratio=0:1 值来调整命中率/未命中率