模擬工具&性能測試工具:fio
fio參數說明:
filename=/dev/sdb1:測試文件名稱,通常選擇需要測試的盤的data目錄。
direct=1:是否使用directIO,測試過程繞過OS自帶的buffer,使測試磁盤的結果更真實。(Linux讀寫的時候,內核維護了緩存,數據先寫到緩存,后面再后臺寫到SSD。讀的時候也優先讀緩存里的數據。這樣速度可以加快,但是一旦掉電緩存里的數據就沒了。所以有一種模式叫做DirectIO,跳過緩存,直接讀寫SSD。)
rw=randwrite:測試隨機寫的I/O
rw=randrw:測試隨機寫和讀的I/O
bs=16k:單次io的塊文件大小為16k
bsrange=512-2048 同上,提定數據塊的大小范圍
size=5G:每個線程讀寫的數據量是5GB。
numjobs=1:每個job(任務)開1個線程,這里用了幾,后面每個用-name指定的任務就開幾個線程測試。所以最終線程數=任務數(幾個name=jobx)* numjobs。
name=job1:一個任務的名字,重復了也沒關系。如果fio -name=job1 -name=job2,建立了兩個任務,共享-name=job1之前的參數。-name之后的就是job2任務獨有的參數。
thread:使用pthread_create創建線程,另一種是fork創建進程,進程的開銷比線程要大,一般都采用thread測試。
runtime=1000:測試時間為1000秒,如果不寫則一直將5g文件分4k每次寫完為止。
ioengine=libaio:指定io引擎使用libaio方式。libaio:Linux本地異步I/O。請注意,Linux可能只支持具有非緩沖I/O的排隊行為(設置為“direct=1”或“buffered=0”);rbd:通過librbd直接訪問CEPH Rados。
iodepth=16:隊列的深度為16。在異步模式下,CPU不能一直無限的發命令到SSD。比如SSD執行讀寫如果發生了卡頓,那有可能系統會一直不停的發命令,幾千個,甚至幾萬個,這樣一方面SSD扛不住,另一方面這么多命令會很占內存,系統也要掛掉了。這樣,就帶來一個參數叫做隊列深度。
rwmixwrite=30:在混合讀寫的模式下,寫占30%
group_reporting:關于顯示結果的,匯總每個進程的信息。
lockmem=1g:只使用1g內存進行測試。
zero_buffers:用0初始化系統buffer。
nrfiles=8:每個進程生成文件的數量。
磁盤讀寫常用測試點:
1. Read=100% Ramdon=100% rw=randread (100%隨機讀)
2. Read=100% Sequence=100% rw=read (100%順序讀)
3. Write=100% Sequence=100% rw=write (100%順序寫)
4. Write=100% Ramdon=100% rw=randwrite (100%隨機寫)
5. Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30
(70%順序讀,30%順序寫)
6. Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30
(70%隨機讀,30%隨機寫)
模擬隨機寫入:
fio --name=randwrite --rw=randwrite --bs=4k --size=1G --numjobs=1 --iodepth=1 --randrepeat=0 --ioengine=libaio --direct=1 --filename=/path/to/testfile
模擬順序寫入:
fio --name=seqwrite --rw=write --bs=4k --size=1G --numjobs=1 --iodepth=32 --ioengine=libaio --direct=1 --filename=/path/to/testfile
磁盤觀測工具:blktrace
安裝:
yum install blktrace
掛載debugfs:
# mount –t debugfs debugfs /sys/kernel/debug
觀測并輸出到控制臺:
blktrace -d /dev/sda -o - | blkparse -i -
觀測并寫入到文件然后用btt解析文件:
blktrace -d /dev/sda -o - | blkparse -i - -d disk-trace.bin
btt -i disk-trace.bin -o /tmp/disk-trace
blktrace輸出內容解析:(blktrace(8) - Linux manual page)
如觀測隨機寫入:
如觀測順序寫入:
磁盤觀測工具:biosnoop
安裝:
yum install bcc-tools
觀測并輸出到控制臺:
/usr/share/bcc/tools/biosnoop -Q
如觀測隨機寫入:
如觀測順序寫入:
系統調用跟蹤工具:strace
比如觀測fio進程的io_submit系統調用:
strace -e 'trace=io_submit' `ps aux | grep fio | grep -v 'grep' | awk '{print "-p " $2}' | xargs echo`
如觀測隨機寫入:
如觀測順序寫入:
--end--