這裡主要介紹下自己的操作步驟以及在操作過程中遇到的問題,以對新學者作個借鑒。
假定,一切操作均在root權限下。
1.在實施之前,首先要確保debugfs被掛載到/sys/kernel/debug
默認掛載到的目錄是/dev/kernel/debug,也可以設置自己的目錄,但在blktrace命令中要通過-r參數指定新選擇的路徑。一般情況下,選擇默認即可。
檢查方法:
$ grep debug /proc/mounts
如果debugfs已掛載,應該看到這樣的輸出:
none /sys/kernel/debug debugfs rw 0 0
否則的話,要自己掛載:
$mount -t debugfs none /sys/kernel/debug
這是因為,blktrace要用到debugfs的trace輸出,從它的輸出中進行分析,必須依賴於它。
2.在終端#1,啟動blktrace,准備記錄設備的訪問模式
$blktrace /dev/sdb
在終端#2,運行應用程序。這裡,簡單用dd做測試。
$dd if=/dev/zero of=/dev/sdb bs=4k count=100 oflag=direct
3.回到終端#1,按CTRL+C終止blktrace的運行,由ls命令可看到,在當前目錄下出現了新的文件,它的名字與設備名相關,文件個數與CPU個數相同。
對我來說,只有一個CPU,出現的文件名為sdb.blktrace.0
轉化成二進制文件,作為fio的讀寫日志,即Fio的讀寫的數據來源。
$blkparse sdb -d sdb.bin > /dev/null
操作完成後,在當前目錄下會生成sdb.bin二進制文件。
如果想生成結果文件以查看,可以將/dev/null改為文件名,如file1,則輸出結果會保存到file1中,如
$blkparse sdb -d sdb.bin > file1
4.利用fio重放日志
fio --name=replay --filename=/dev/sdb --direct=1 --read_iolog=sdb.bin
就可以看到結果了。
要注意的,fio要采用最近的版本,否則在重放的時候可能會出現問題。
我原先采用了apt-get方式安裝,默認1.38版本,結果老是報錯,糾結了很久。。。。。。
後來,采用源碼編譯安裝的方式,更換為更高的1.58版本,立馬通過。在編譯過程中,可能會報錯,要注意libaio的庫已安裝,即libaio-dev。通過這兩步,應該就沒什麼問題了。(Ubuntu下不同源好像版本不同,有較高版本的,如果需要,可仔細看下。不過,編譯也很簡單,幾分鐘的事。。。。)
fio 的詳細介紹:請點這裡
fio 的下載地址:請點這裡