1. 基本概念
blktrace是一個針對Linux內核中塊設備I/O層的跟蹤工具,用來收集磁盤IO信息中當IO進行到塊設備層(block層,因此叫blk trace)時的詳細信息(如IO請求提交,入隊,合併,完成等等一些列的信息)。經過使用這個工具,使用者能夠獲取I/O請求隊列的各類詳細的狀況,包括進行讀寫的進程名稱、進程號、執行時間、讀寫的物理塊號、塊大小等等,是一個Linux下分析I/O相關內容的很好的工具。
blkparse是配合blktrace使用的分析工具。在Unix類系統設計中,有個理念叫一切皆文件。所以,咱們會發現不少系統性能信息其實來自於/proc/中的文件。這個目錄實際上是虛擬文件系統,cgroup也是相似的東西。這是一個頗有意思的方式讓Linux內核空間和用戶空間進行通訊。blktrace則是使用了另外一個虛擬文件系統,/sys/kernel/debug 。它經過這個文件於內核進行交互,並獲取信息。app
2. 實現原理
blktrace的採集位置是block層,也稱爲塊設備層。在io調度層上面。cgroup中blkio.throttle.*等限制也是在這個層(也有圖是把塊設備層畫在io調度層上一層)。圖中的pdflush就是操做系統page cache回寫的線程。 函數
blktrace測試的時候,會分配物理機上邏輯cpu個數個線程,而且每個線程綁定一個邏輯cpu來收集數據。而後,它會在/sys/kernel/debug(debugfs)中產生和每一個線程對應的文件,而後調用ioctl函數,產生系統調用和內核交互。內核就會往文件中寫入數據。工具
3. 使用方法
sudo mount -t debugfs debugfs /sys/kernel/debug
sudo blktrace /dev/sdb
blkparse sdb -d sdb.bin >/dev/null
btt -A -i sdb.bin性能
4. 字段說明
A
映射值對應設備 IO was remapped to a different device
B
IO反彈,因爲32位地址長度限制,因此須要copy數據到低位內存,這會有性能損耗。IO bounced
C
IO完成 IO completion
D
將IO發送給驅動 IO issued to driver
F
IO請求,前合併 IO front merged with request on queue
G
獲取 請求 Get request
I
IO插入請求隊列 IO inserted onto request queue
M
IO請求,後合併 IO back merged with request on queue
P
插上塊設備隊列(隊列插入機制) Plug request
Q
io被請求隊列處理代碼接管。 IO handled by request queue code
S
等待發送請求。 Sleep request
T
因爲超時而拔出設備隊列 Unplug due to timeout
U
拔出設備隊列 Unplug request
X
開始新的扇區 Split
測試