mcbとは

mcbはmemcahed用ベンチマークソフトです。mcbはmemcachedにコマンドを連続して送信し、実行時間を計測します。
mcbはマルチスレッドプログラムなので、コマンドを並行して送信できます。

使い方

ダウンロード

mcb.cをダウンロードしてください。ライセンスはGPLです。

コンパイル

Linuxの場合:

gcc -Wall -lpthread -lnsl -o mcb mcb.c
Solarisの場合:
cc -Wall -lpthread -lnsl -lsocket -o mcb mcb.c

使い方

usage: mcb -c {set|add|get} [OPTIONS]
                -c command_type {set|add|get}          送信するコマンドを設定。設定できるのはset,add,getのみ
                -a server_address[127.0.0.1]           memcahedが稼働しているサーバのIPアドレス。デフォルトは127.0.0.1
                -p server_port[11211]                  memcahedが稼働しているサーバのport番号。デフォルトは11211
                -T connection Type {TCP|UDP|UNIX_SOCKET}  memcachedとの接続プロトコル。デフォルトはTCP
                -f unix socket path                    UNIXソケットのパス。"-T UNIX_SOCKET"と併用
                -t number_of_thread[1]                 送信するスレッド数。デフォルトは1
                -n number_of_command[1]                スレッド当たりの送信コマンド数。デフォルトは1
                -m max_key[1000]                       送信するコマンドの最大key値。デフォルトは1000
                -l data_length[1024]                     setかaddコマンドで送信する平均データ長。デフォルトは1024バイト
                -v               :verbose
                -s               :single command        各スレッドで、1コマンド毎にQUITしてTCPコネクションを切る。
                                                        デフォルトはOFFで、1セッションですべてのコマンドを送信する。
                                                        旧バージョン(0.9alpha)とは意味が逆になり、デフォルトも逆なので注意。
                -h               :help

10スレッド起動し、各スレッドがコマンドsetを1,000コマンド送信します。よって送信するコマンド総数は10,000です。

# ./mcb -c set -a 192.168.1.100 -p 11211 -t 10 -n 1000 -l 100
condition =>
        connect to 192.168.1.100 TCP port 11211
        command = set
        10 thread run
        send 1000 command a thread, total 10000 command
        data length = 100
result =>
        interval =  0.419934 [sec]
        performance =  23813.263946 [command/sec]
        thread info:
          ave. = 0.230296[sec], min = 0.047713[sec], max = 0.393719[sec]

コマンドの総実行時間は0.419934秒、1秒当たり約23813コマンド実行しています。
スレッドの統計情報は、10スレッド平均で0.230296秒、最短で終了したスレッドは0.047713秒、最長は0.393719秒です。
各スレッドは最初にmemcachedにコネクションを張り、連続してコマンドを送信します。すべてのコマンドの送信が終わるまでコネクションは切断されずに保持されています。もしも各コマンド実行毎にコネクションを切断したい場合は"-s"オプションを設定してください(下記*注意*参照)。

version 1.0rc1からTCPだけでなくUDPとUNIXソケットにも対応しました。
UDPで送信する場合は"-T"オプションに"UDP"を設定してください。また適宜ポート番号も設定してください。

# ./mcb -c set -a 192.168.1.100 -p 11211 -t 10 -n 1000 -l 100 -T UDP

UNIXソケットを使う場合は"-T"オプションに"UNIX_SOCKET"、および"-f"オプションにソケットパスを設定してください。

# ./mcb -c set -t 10 -n 1000 -l 100 -T UNIX_SOCKET -f /tmp/memcached

もしもmcbがうまく動かない場合、memcachedがUNIXソケットで起動しているかどうか、またmemcachedのソケットパスにmcbがアクセスできるかどうか、パーミッションを確認してください。


注意

mcb version 0.9alphaをデフォルトで使用("-s"を*設定しない*)した場合、およびmcb version 0.9 beta以降で"-s"オプションを設定した場合、mcbはmemcachedに対して多量のコネクションを生成し切断します。 よってport番号を使い切ってしまう可能性があり、他のサービスに影響を及ぼす可能性があります。 mcbはテスト用のサーバ上で実行することをお勧めします。

また、もしも可能ならクライアントを動作させるサーバのカーネルパラメータ"tcp_fin_timeout"を一時的に変更して、TIME_WAIT状態を一時的に短縮する方法もあります。これによってport番号が不足することによる影響を多少とも減らすことができます。

# cat /proc/sys/net/ipv4/tcp_fin_timeout
 60
# echo 5 > /proc/sys/net/ipv4/tcp_fin_timeout


Last-modified: 2009-11-04