最近遇到需要大量進行儲存系統讀寫的要求,因為包含了samba 硬碟,查了一下發現了dbench 這個測試程式,就試用了一下,它支援本機的測試,也支援samba, iscsi跟nfs 測試:
本測試需安裝 dbench 進行測試,在Linux 主機上使用下列指令取得dbench。
git clone https://github.com/sahlberg/dbench
先安裝要測試網路硬碟所需的library:
sudo apt-get install libiscsi-dev
sudo apt-get install smbclient
sudo apt-get install libsmbclient-dev
sudo apt-get install samba-dev
sudo apt-get install libnfs-dev
在dbench 中使用下列指令編譯,configure 要加的參數來自這個gist ,才能找到samba client library:
./autogen.sh
./configure CFLAGS="-I/usr/include/samba-4.0/"
make
make install
完成編譯dbench,在測試機上,可以使用dbench來進行測試,簡單的如:
./dbench --loadfile=loadfiles/client.txt -t <TIME> <THREAD>
或是想要測試遠端的samba server:
./dbench -B smb --smb-share=//<IP>/<DIR> --smb-user=<USER>%<PASS> --loadfile=loadfiles/smb_1.txt -t <TIME> <THREAD>
各欄位說明如下:
IP | samba IP |
DIR | samba 資料夾名稱 |
USER | samba使用者帳號 |
PASS | samba使用者密碼 |
TIME | 測試時間 |
THREAD | 使用多少 thread 進行測試 |
如果是nfs 或iscsi 的話,應該會需要其他的參數以設定登入,不過手邊沒有nfs 或iscsi 可以測試,只好先跳過。
loadfile 是dbench 的測試檔案,裡面可以描述想要dbench 執行的讀寫動作,例如開檔、寫檔等等,如果寫得好,它應該可以重現一般使用者真實的讀寫狀況,不過我都直接用它在loadfiles 資料夾中預設的檔案,如上面的smb_1.txt。
自己試過在超過50 個thread 的時候,samba很容易出現寫入錯誤,所以保守一點就用50 個thread 就是了,
如果是本機測試的話,就不用這麼保守;不過話說回來一般本機上也不會有這麼多人一起用你的電腦就是了。
執行之後,dbench 就會印出測試的報表:
Operation Count AvgLat MaxLat
--------------------------------------------------
Flush 849 117.384 207.657
Close 9000 0.003 0.117
LockX 40 0.006 0.019
Rename 520 0.078 3.887
ReadX 19240 0.007 1.723
WriteX 6039 0.056 11.209
Unlink 2480 0.058 3.291
UnlockX 40 0.003 0.005
FIND_FIRST 4300 0.035 0.162
SET_FILE_INFORMATION 990 0.090 10.150
QUERY_FILE_INFORMATION 1940 0.002 0.017
QUERY_PATH_INFORMATION 11350 0.013 8.822
QUERY_FS_INFORMATION 2040 0.004 0.048
NTCreateX 12260 0.020 8.160
Throughput 42.255 MB/sec 10 clients 10 procs max_latency=207.669 ms