Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1838475
  • 博文数量: 333
  • 博客积分: 10791
  • 博客等级: 上将
  • 技术积分: 4314
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 07:39
文章分类

全部博文(333)

文章存档

2015年(1)

2011年(116)

2010年(187)

2009年(25)

2008年(3)

2007年(1)

分类: 服务器与存储

2010-05-12 15:06:42

目录

  • 简介
    • 软件描述
    • 使用方法
    • 特色
  • 细节
    • 网络管理
    • 多线程和并发
    • key value
    • 简单实用的任务调度
    • 多个serverUDPTCP,多重get和二进制协议
  • 用法
    • 多线程和并发
    • 窗口大小
    • 确认
    • 多服务器端和多客户端
    • 运行模式:时间模式、数量模式
    • 定期清理静态数据
    • 多重get
    • UDP TCP
    • Facebook 检测
    • 复制任务
    • 支持多tcp连接
    • 支持二进制协议
  • 配置文件
  • 命令选项


一、简介

1.       软件描述

Memslapmemcached服务器的压力测试工具,它能产生可配置压力,如:线程、并发、连接、运行时间、覆盖、命中率、key的长度、value的长度、get/set比率等。另外,它还支持数据确认、失效时间确认、UDP、二进制协议,facebook检测等操作。

         Memslap管理网络连接的机制与memcached管理事件的机制相同。每个memslap线程绑定到一个cpu内核上,所有线程彼此不进行通信。每个线程有多个socket连接,每个socket连接保存一份其自己的key的长度、value的长度和命令(set/get)。

2.       使用方法

memslap [options]

3.       软件特色

Memslap有如下特点:

      使用互斥libevent管理网络。

      可以使用TCPUDP进行无阻塞传输。

      提高并行量:高效的多线程环境。

       提高时间效率:快速的运算速度。

       Key的长度和value的长度可以配置。

       支持get、多重getset命令,并且命令可以配置。

       支持可控制的命中率和覆盖率。

       支持数据确认和失效时间确认。

       支持定期清理固定数据

       支持多tcp连接

       支持二进制协议

       支持facebook测试(通过TCP进行set,通过UDP进行多重get)和复制测试

二、细节

1.       网络管理

对于memslap来说,TCPUDP都采用无阻塞IO,其网络模型和memcached很相似,所有网络事件的管理如同memcached中的libevent的管理。libevent使memslap管理网络很有效。

2.       多线程和并发

Memslap多线程的实现机制和memcached相似。Memslap创建一个或多个能自我控制的线程,如果系统支持设置cpu环境,那么将每个线程绑定到一个cpu内核上。

另外,每个线程都有一个libevent去管理网络事件、一个或多个自我控制的并发、一个或多个socket连接。即使在一个线程中,所有并发彼此都不会进行通信。

Memslap会创建多个socket连接,每个并发有多个socket连接。么个并发从socket连接池中随机或顺序选择一个socket连接运行。所以,memslap保证每个并发在任何时间都会有一个soket连接。用户可以根据所要的测试用例设定并发的数量和每个并发中的socket连接的数量。

3.       Keyvalue

为提升时间效率和空间利用率,memslap创建一个10M个文字的随机文字表。所有的keyvalue都是从这个表中随机产生的。

4.       简单实用的任务调度

Memslap使用libevent去调度所有并发中的线程,每个并发调度任务基于任务窗口的大小。

5.       多个serverUDPTCP,多重get和二进制协议

由于每个线程是自我控制的,memslap可以将不同的线程分配到不同的memcached服务器上。这是memslap支持多个服务器的方法之一。而唯一的约束条件是服务器的数量不能超过线程的数量。另一个方法是复制任务。

 默认情况下,memslap进行单个get。如果用户设定多重get选项,memslap会收集足够多的get命令,并打包发送。

Memslap支持ascII协议和二进制协议。不过,ascii协议时默认的协议。默认情况下memslap是用tcp协议,虽然也支持udp协议,但是udp协议不可靠,会有丢包和乱序的情况发生。为了解决udp协议的这个缺点,memslap创建一个内存池。

三、用法

用户至少要指定一个服务器端。

1.       Keyvalue的长度和命令

Memslap对命令(set/get)的设置放在配置文件中,key的最短长度是16byte,最大长度是260byteValue最小值是1byte,最大值是1Mbyte

2.       多线程和并发

默认的线程数是1,并发数是16.用户可以使用“--thread”和“--concurrency”来设定线程数和并发数。

3.       窗口大小

一般来说,用户不需要设定窗口大小,窗口的默认大小是10k。用户可以使用“--win_size”或“-w”指定窗口大小。

4.       确认

用户可以使用“—verify=”或者“-v”选项来设置数据的确认。在理论上,memslap支持100%确认。用户可以使用“—exp_verify=”或者“-e”选项来设定失效时间的确认。使用“--verbose”会产生更详细的错误信息。

5.       多服务器、多客户端

Memslap支持多服务器端和多客户端,但是要注意服务器端的数量不能比线程数多。用户可以使用选项“—server=”或者“-s”来指定多服务器端。

6.       运行模式:时间模式、数量模式

默认模式是时间模式,默认时间是10分钟,如果到时,memslap推出。请不要同时使用两种模式。

7.       定期清理静态数据

使用选项“—stat_freq=”或者“-S”来设置时间间隔。

8.       多重get

用户可以使用“--division”选项设置多重get的数量。Memslap的默认值是1,即单一get

9.       UDPTCP

Memslap支持udptcp协议。对tcp来说,memslapsocket连接中断时不会重新连接。如果所有连接都丢失了,memslap会推出。如果用户使用了“--reconnect”选项,那么当socket连接丢失时,它会重新连接

用户可以使用“--udp”选项来启用udp,但是udp是有局限性的:

 Udp不能set超过1400byte的数据

Udp不支持二进制协议

不支持重新连接

10.  Facebook检测

tcp set数据,用udp多重get数据。使用一下选项:“—facebook –division=50”,如果你想创建多个tcp连接,使用选项“—conn_sock=”。

11.  复制任务

若使用该特性,用户必须保证有两个(以上)memcached服务器。用户可以使用“—rep_write=”选项启动该特性

12.  支持多tcp连接

使用选项“—conn_sock=”或者“-n”。这个特性在socket断开后不支持重新连接。

13.  支持二进制协议

使用选项“--binary”或者“-B”启动memslap。这个选项支持除了UDP以外的所有特性。

四、配置文档

下面是配置文档的例子:

#comments should start with '#'

 #key

 #start_len end_len proportion

 #

 #key length range from start_len to end_len

 #start_len must be equal to or greater than 16

 #end_len must be equal to or less than 250

 #start_len must be equal to or greater than end_len

 #memslap will generate keys according to the key range

 #proportion: indicates keys generated from one range accounts for the total

 generated keys 

 #

 #example1: key range 16~100 accounts for 80%

 #          key range 101~200 accounts for 10%

 #          key range 201~250 accounts for 10%

 #          total should be 1 (0.8+0.1+0.1 = 1)

 #

 #          16 100 0.8 

 #          101 200 0.1

 #          201 249 0.1

 #

 #example2: all keys length are 128 bytes

 #

 #          128 128 1

 key

 128 128 1 

 #value

 #start_len end_len proportion

 #

 #value length range from start_len to end_len

 #start_len must be equal to or greater than 1

 #end_len must be equal to or less than 1M

 #start_len must be equal to or greater than end_len

 #memslap will generate values according to the value range

 #proportion: indicates values generated from one range accounts for the

 total generated values 

 #

 #example1: value range 1~1000 accounts for 80%

 #          value range 1001~10000 accounts for 10%

 #          value range 10001~100000 accounts for 10%

 #          total should be 1 (0.8+0.1+0.1 = 1)

 #

 #          1 1000 0.8 

 #          1001 10000 0.1

 #          10001 100000 0.1

 #

 #example2: all value length are 128 bytes

 #

 #          128 128 1

 value

 2048 2048 1

 #cmd

 #cmd_type cmd_proportion

 #

 #currently memslap only supports get and set command.

 #

 #cmd_type

 #set     0

 #get     1

 #

 #example: set command accounts for 50%

 #         get command accounts for 50%

 #         total should be 1 (0.5+0.5 = 1)

 #

 #         cmd

 #         0    0.5

 #         1    0.5

 cmd

 0    0.1

 1.0 0.9

 

 

五、命令选项

-s, --servers=:列出一个或多个所要连接的memcached服务器端。服务器的数量一定要小于线程的数量e.g.: --servers=localhost:1234,localhost:11211

 

-T, --threads=:线程数量,最好等于cpu数量。默认值为8

 

-c, --concurrency=:负载需要虚拟的并发数量,默认值是128

 

-n, --conn_sock=:一个并发的tcp连接数量,默认值是1

 

-x, --execute_number=set/get数量,默认值100w

 

-t, --time=:运行时间,其格式为: s-seconds, m-minutes, h-hours, d-days e.g.: --time=2h.

 

-F, --cfg_cmd=:加载配置文件

.

-w, --win_size=:任务窗口大小,e.g.: --win_size=10k. 默认值为10k

 

-X, --fixed_size=value的大小

 

-v, --verify=:所要确认的数据比例, e.g.: --verify=0.01

-d, --division=:多重get的数量,默认值为1即单个get

 

-S, --stat_freq=:定期清理静态数据的间隔时间, e.g.: --resp_freq=10s.

 

-e, --exp_verify=:失效时间的比例, e.g.: --exp_verify=0.01。默认情况是不设置该选项

 

-o, --overwrite=:对象需要覆盖的比例, e.g.: --overwrite=0.01.默认情况是不进行覆盖。

 

-R, --reconnect:支持重新连接

 

-U, --udp:使用UDP协议,默认是TCP协议

 

-a, --facebook:启动faceb检测

 

-B, --binary:使用二进制协议,默认值是ascii协议

 

-P, --tps=:吞吐量, e.g.: --tps=10k.

 

-p, --rep_write=:前n个服务端可以写数据, e.g.: --rep_write=2.

 

-b, --verbose:错误信息

 

-h, --help:帮助文档


-V, --version:版本信息



原文地址:http://blog.chinaunix.net/u1/45336/showart_2232795.html


请多指正:reesun_huang@gmail.com




阅读(5432) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~