NoSQL性能測試工具:memtier_benchmark

memtier_benchmark是Redis Labs推出的一款命令行工具,它能夠產生各種各樣的流量模式,可以對Memcached和Redis實例進行基準測試。這個工具提供了豐富的自定義選項和報表功能,通過命令行界面就能夠輕鬆地使用。這個工具的一些優點如下所述:

  • memtier_benchmark同時支持Redis和Memcached(二進位和文本)協議,因此你可以對這兩種NoSQL系統進行基準測試,甚至可以比較它們在不同場景中的性能。

  • memtier_benchmark能夠啟動多個工作線程(使用-t選項指定數量),每個線程能夠驅動若干個客戶端(使用-c選項指定數量)。多線程使得你能夠更好的利用客戶端主機的硬體資源,即便使用單台主機,你也能夠生成較高的流量負載。

    Advertisements

  • memtier_benchmark能夠迭代運行多次基準測試(使用-x選項指定迭代次數),它會自動生成測試報告,包含最好和最壞的運行結果,以及聚合平均值。

  • memtier_benchmark能夠控制GETSET操作數量的比率(使用--ratio選項),這樣便能針對各種訪問模式進行基準測試。

  • memtier_benchmark能夠控制GETSET操作的訪問模式。每種操作的訪問模式都可以獨立設置,可以是隨機訪問或連續訪問。

  • memtier_benchmark能夠為測試鍵設置相同的過期時間,也可以在指定範圍之內設置不同的過期時間(使用--expiry-range選項)。

一、環境描述

1. 虛擬機配置

  • CPU:單核 2.4GHz

    Advertisements

  • 內存:DDR3 1333 2GB

  • 硬碟:120GB

  • IP地址:192.168.21.136

  • 操作系統:CentOS 6.6 x86_64 Minimal

2. 編譯環境

  • GCC:4.4.7 20120313

  • YUM源:官方Base源

3. memtier_benchmark

  • 版本:1.2.8

  • 安裝方式:GIT下載和編譯安裝(本文內容)

二、安裝步驟

1. 安裝編譯環境和依賴包

在shell中運行以下命令:

## 安裝編譯環境

yum install -y autoconf automake make gcc-c++

## 安裝依賴包

yum install -y pcre-devel zlib-devel libmemcached-devel wget git

2. 編譯安裝libevent

CentOS 6.6預裝的libevent版本較老,必須手動編譯安裝新版本的libevent。在shell中運行以下命令,下載、編譯和安裝libevent-2.0.22:

cd /root/Downloads

wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz

tar xvzf libevent-2.0.22-stable.tar.gz

cd libevent-2.0.22-stable

./configure

make && make install

3. 更新庫文件配置

在shell中運行以下命令,更新libevent庫文件的配置:

echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:\${PKG_CONFIG_PATH}" >> /etc/profile

source /etc/profile

ldconfig /usr/local/lib

4. 編譯安裝memtier_benchmark工具

在shell中運行以下命令,下載、編譯和安裝memtier_benchmark工具,最後加入系統運行路徑:

cd /root/Downloads

git clone https://github.com/RedisLabs/memtier_benchmark.git

cd memtier_benchmark

autoreconf -ivf

./configure --prefix=/usr/local/memtier

make && make install

echo "export PATH=/usr/local/memtier/bin:\${PATH}" >> /etc/profile

source /etc/profile

5. 驗證安裝

在shell中運行以下命令,驗證memtier_benchmark是否安裝成功:

memtier_benchmark --help

三、常用選項

memtier_benchmark是一款用於Memcached/Redis的NoSQL流量生成器和性能基準測試工具,可以在Shell中通過如下方式調用:

memtier_benchmark [options]

1. 連接和通用選項

  • -s--server=ADDR

    伺服器地址(默認值為localhost)。

  • -p--port=PORT

    伺服器埠(默認值為6379)。

  • -S--unix-socket=SOCKET

    UNIX域套接字的名稱(默認值為none)。

  • -P--protocol=PROTOCOL

    使用的協議(默認值為redis)。其他受支持的協議:memcache_text和memcache_binary.

  • -x--run-count=NUMBER

    完整測試的迭代執行次數。

  • -D--debug

    輸出調試信息。

  • --client-stats=FILE

    生成每個客戶端的統計文件。

  • --out-file=FILE

    輸出結果文件的名稱(默認值為stdout)。

  • --show-config

    運行基準測試之前,輸出詳細的配置信息。

  • --hide-histogram

    不輸出詳細的延遲柱狀圖。

  • --help

    輸出幫助信息。

  • --version

    輸出版本信息。

2. 測試選項

  • -n--requests=NUMBER

    每個客戶端發出的請求總數(默認值為10000)。若使用「allkeys」,則基準測試會使用整個測試鍵的範圍。

  • -c--clients=NUMBER

    每個線程驅動的客戶端的數量(默認值為50)。

  • -t--threads=NUMBER

    基準測試使用的線程數量(默認值為4)。

  • --test-time=SECS

    基準測試的持續時間,以秒為單位。

  • --ratio=RATIO

    SET和GET操作的比率(默認值為1:10)。

  • --pipeline=NUMBER

    管道請求的併發數量(默認值為1)。

  • --reconnect-interval=NUM

    執行重新連接之後的請求數量。

  • --multi-key-get=NUM

    使用Redis的MGET命令,這個命令最多可以一次獲取NUM個鍵的值(默認值為0)。

  • -a--authenticate=CREDENTIALS

    登錄Redis伺服器時使用的憑證。根據使用的協議,可以是PASSWORD或USER:PASSWORD。

  • --select-db=DB

    當測試一台Redis伺服器時,選擇它的DB編號。

  • --distinct-client-seed

    每個客戶端都使用一個不同的隨機數種子。

  • --randomize

    基於時間戳的隨機數種子(默認為常數值)。

3. 對象選項

  • -d--data-size=SIZE

    對象數據的大小(默認值為32)。

  • --data-offset=OFFSET

    值的真實大小等於data-size + data-offset。基準測試將會使用Redis的SETRANGE和GETRANGE命令(默認值為0)。

  • -R--random-data

    基準測試將會使用隨機化的測試數據。

  • --data-size-range=RANGE

    基準測試使用的測試數據的大小是隨機的,數據大小在指定的範圍之內(min-max)。

  • --data-size-list=LIST

    根據權重列表設置測試數據的大小(size1:weight1,..sizeN:weightN)。

  • --data-size-pattern=R|S

    當這個選項設置為R時,就需要和--data-size-range選項一起使用,測試數據的大小將會在指定的範圍之內隨機取值。當這個選項設置為S時,定義的測試數據大小將會在測試鍵的範圍之內均勻分佈,請參考--key-maximum選項。默認值為R。

  • --expiry-range=RANGE

    測試鍵的過期時間是一個隨機值,這個隨機值在指定的範圍之內。

4. 導入數據選項

  • --data-import=FILE

    從文件中讀取對象數據。

  • --data-verify

    當基準測試結束時,執行數據驗證過程。

  • --verify-only

    只執行--data-verify選項的數據驗證過程,而不會執行其他測試。

  • --generate-keys

    為導入的對象生成測試鍵。

  • --no-expiry

    忽略導入數據中的過期信息。

5. 測試鍵選項

  • --key-prefix=PREFIX

    測試鍵的前綴(默認值為「memtier-」)。

  • --key-minimum=NUMBER

    測試鍵ID的最小值(默認值為0)。

  • --key-maximum=NUMBER

    測試鍵ID的最大值(默認值為10000000)。

  • --key-pattern=PATTERN

    SET和GET操作的訪問模式(默認值為R:R)。可以取以下值:

    G:高斯分佈;

    R:均勻隨機;

    S:連續訪問;

    P:并行訪問(在連續訪問模式中,每個客戶端都具有測試鍵範圍的一個子集)。

  • --key-stddev

    高斯分佈使用的標準偏差(默認值為測試鍵範圍的1/6)。

  • --key-median

    高斯分佈使用的期望值(默認值為測試鍵範圍的中心值)。

6. 等待選項

  • --wait-ratio=RATIO

    SET和WAIT操作的比率(默認不使用WAIT命令,默認值為1:0)。

  • --num-slaves=RANGE

    等待指定範圍之內的隨機數量的從機作出應答。

  • --wait-timeout=RANGE

    等待指定範圍之內的時間,單位為毫秒(正太分佈的中心值在這個範圍的中間)。

四、偽隨機數據、高斯訪問模式和範圍操作

1. 偽隨機數據

memtier_benchmark基準測試工具能夠生成隨機化的測試數據,而數據大小則取決於已知的大小範圍。首先,將--data-size-pattern選項設置為「S」(連續分配);然後,通過--data-size-range選項指定隨機化的測試數據的大小範圍。以下示例將會產生基準測試的鍵空間,其中的測試數據的大小將會在4位元組至204位元組之間均勻取值:

memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 <additional parameters>

在上文的示例中,我們已經使用--random-data選項來生成隨機數據了;除此之外,我們還使用--key-minimum--key-maximum選項來控制測試鍵ID的取值範圍,總共產生200個測試鍵。第一個測試鍵,memtier-200,將會持有4位元組的數據;下一個測試鍵,將會持有5位元組的數據;以此類推,直到最後一個測試鍵,memtier-400,將會持有204位元組的數據。

2. 高斯訪問模式

memtier_benchmark基準測試工具能夠使用高斯分佈(也叫做正態分佈)來訪問測試數據。在支持高斯訪問模式之前,你可以將基準測試的訪問模式設置為均勻隨機分佈或連續分佈。但是,為了更好的模擬真實用例,你可以使用這個新的選項,確保memtier_benchmark的測試鍵訪問模式符合常見的高斯分佈的鐘型曲線。當使用高斯分佈時,你還可以控制和設置標準偏差和期望值,它們是高斯分佈的關鍵參數。例如,你可以通過以下參數調用這個基準測試工具:

memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 --key-pattern=G:G --key-stddev=10 --key-median=300 <additional parameters>

上述調用方式會將大部分的讀/寫訪問集中在第100個(memtier-300)測試鍵上。

3. 範圍操作

memtier-benchmark基準測試工具支持Redis的SETRANGEGETRANGE命令,可用於代替SETGET命令。這個功能使得你在進行基準測試時,能夠明顯降低網路流量的消耗,同時你仍然可以使用較大的測試數據。例如,你可以將測試鍵的值的大小設置為1MB,但是只會讀取和寫入最後一個位元組,你可以通過以下參數調用這個基準測試工具:

memtier-benchmark --data-offset=1048575 --data-size=1 <additional parameters>

Advertisements

你可能會喜歡