fio
- 安裝fio
apt-get install fio
- 可以把fio的輸出數據自動畫圖的插件gnuplot
apt-get install gnuplot
1.輸出bw,lat和iops數據並畫圖
fio安裝完后自帶有一個高級腳本fio_generate_plots能夠根據fio輸出的數據進行畫圖。操作流程如下:
1.1設置fio輸出詳細日志
fio的輸出日志主要包含三種:bw,lat和iops,設置這三種的參數如下:
write_bw_log=rw
write_lat_log=rw
write_iops_log=rw
這里需要強調的一點是,后面接的參數rw,是輸出日志文件名的prefix,如最終會生成的日志文件如下:
rw_iops.log
rw_clat.log
rw_slat.log
rw_lat.log
rw_bw.log
這個參數在后面畫圖的時候也要用到。
for i in clat lat slat bw iops;do mv rbd_$i.1.log rbd_$i.log;done
1.2 畫圖
前提是還需要安裝好gnuplot,然后使用下面的命令即可自動畫圖:
root@ubuntu:/tmp> fio_generate_plots bw
發現沒有,fio_generate_plots接受的唯一參數就是這個日志文件名的prefix。
本例中生成的圖片文件有:
bw-bw.svg
bw-clat.svg
bw-iops.svg
bw-lat.svg
bw-slat.svg
直接 fio 測試命令
隨機讀:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=10 -runtime=1000 -group_reporting -name=mytest
說明:
filename=/dev/sdb1 測試文件名稱,通常選擇需要測試的盤的data目錄。
direct=1 測試過程繞過機器自帶的buffer。使測試結果更真實。
rw=randwrite 測試隨機寫的I/O
rw=randrw 測試隨機寫和讀的I/O
bs=16k 單次io的塊文件大小為16k
bsrange=512-2048 同上,提定數據塊的大小范圍
size=5g 本次的測試文件大小為5g,以每次4k的io進行測試。
numjobs=30 本次的測試線程為30.
runtime=1000 測試時間為1000秒,如果不寫則一直將5g文件分4k每次寫完為止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合讀寫的模式下,寫占30%
group_reporting 關於顯示結果的,匯總每個進程的信息。
此外
lockmem=1g 只使用1g內存進行測試。
zero_buffers 用0初始化系統buffer。
nrfiles=8 每個進程生成文件的數量。
順序讀:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
隨機寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
順序寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
混合隨機讀寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop
GFIO
fio是個非常強大的IO性能測試工具,可以毫不誇張的說,如果你把所有的fio參數都搞明白了,基本上就把IO協議棧的問題搞的差不多明白了,原因在於作者Jens Axboe是linux內核IO部分的maintainer. 但是這個工具有個很大的缺點就是沒有圖形界面,單靠輸出的數字很難看出來IO的趨勢變化,所以急需一個圖形前端.
幸運的是Jens也認識到這個問題,2012年2月15號在google plus上說:
Once complete, this will be a great addition to fio. It can be quite tricky to get a good overview of all the various job controlling options that fio has, presenting them graphically has some advantages over a basic 80-line text cli.
可是Jens是寫linux內核代碼的,對於圖形終端的編程不是很熟悉。 大牛畢竟是大牛,發揚革命不怕苦精神,自己學圖形編程,於是在最近的2.1版本給我們帶來了這個圖形終端。有了這個東西使用起來就方便許多。
我給大家演示下如何編譯,運行這個gfio. 在這之前需要給大家說下fio的server/client模式。 fio一旦進入server模式就會在8765 tcp端口上監聽,等待客戶端來連接。 一旦客戶端連接上來,會發上來比如運行job等任務,服務端把運行結果推送到客戶端。所以這個圖形前端實際上是fio的一個client, 名字叫gfio. 具體參見 README里面的描述。
新版本的支持gfio的fio可以在這里下載 git clone git://git.kernel.dk/fio.git,編譯gfio源碼的時候, 由於它依賴於gtk庫,需要先安裝libgtk2.0開發包,演示開始:
|
$ sudo apt-get -y install libgtk2.0-dev |
$ git clone git://git.kernel.dk/fio.git |
$ cd fio |
$ ./configure --enable-gfio |
... |
gtk 2.18 or higher yes |
... |
$ make fio |
$ make gfio |
$ ./fio -S |
fio: server listening on 0.0.0.0,8765 |
這樣fio就編譯好了,同時進入server模式。 在另外一個終端運行 gfio 就可以看到圖形界面,打開examples/aio-read.fio 這個腳本把玩下(注意這個腳本里面文件的路徑是/data1, 最好改成/tmp之類的),如下圖:
