linux中btt工具详解

在之前的文章中介绍了如何使用blktrace 以及其工作原理和架构。我们知道blktrace 跟踪块设备的统计信息,每个CPU会有一个文件存储,然后通过blkparse可以将这些文件整合成一个文件来显示。

不过blkparse显示的文件过于庞大,而通过btt分析后会发现监控数据变得更加有意义。
1.示例 监控获得数据
#blktrace -d /dev/sda -o sdatest
合并多个文件
#blkparse -i sdatest -d sdatest.bin
#btt -i sdatest.bin
2.输出简要信息 第一部分平均时间 IO时间主要是分为三个区域:
n? ?插入或合并IO到请求队列的时间,计算从块层到插入,即Q2I(Q2I=Q2G+G2I)
n? ?请求队列到驱动的时间,即是I2D。
n? ?驱动和设备时间,即是D2C.
此外还有还有Q2Q表示IO交到块层的时间。系统等待请求的时间在Q2G中。一般情况下Q2C=Q2I+I2D+D2C,说一般情况因为有些IO会会执行merge。
把大写字母函数的表,再次方便查找:

Act
Description
A
IO was remapped to a different device
B
IO bounced
C
IO completion
D
IO issued to driver
F
IO front merged with request on queue
G
Get request
I
IO inserted onto request queue
M
IO back merged with request on queue
P
Plug request
Q
IO handled by request queue code
S
Sleep request
T
Unplug due to timeout
U
Unplug request
X
Split
显示所有IO的平均时间,如下
==================== All Devices ====================

ALLMINAVGMAXN
--------------- ------------- ------------- ------------- -----------

Q2Q0.0000019460.0916831052.04440823523
Q2G0.0000004140.0000338280.00067467925
G2I0.0000001020.0001448890.00267357725
Q2M0.0000001820.0000008560.0000023714
I2D0.0000004700.0044036460.00512849016
M2D0.0000046140.0037671830.0051235174
D2C0.0001032600.0031533790.04389699520
Q2C0.0001058850.0074468620.04390398020
第二部分设备损耗 第一部分中得到设备的平均延时,第二部分得到各个阶段消耗比例得到定性分析,如下图:
==================== Device Overhead ====================

DEV |Q2GG2IQ2MI2DD2C
---------- | --------- --------- --------- --------- ---------
(8,0) |0.5678%2.4320%0.0023%47.3074%42.3451%
---------- | --------- --------- --------- --------- ---------
Overall |0.5678%2.4320%0.0023%47.3074%42.3451%
第三部分设备合并信息 ==================== Device Merge Information ====================

DEV |#Q#DRatio |BLKminBLKavgBLKmaxTotal
---------- | -------- -------- ------- | -------- -------- -------- --------
(8,0) |25251.0 |1672256016808
Q表示传入的IO请求,D表示合并后发出的请求,此外还能看到平均IO块大小为672。
第四部分磁盘寻道讯息 用于显示连续队列和提交IO之间的扇区距离。NSEEKS表示提交到驱动的IO寻道次数, MEAS表示IO之间距离,MEDIA为0表示向前和向后寻道次数一样,MODE中数值表示块IO中连续的扇区,这部分比较晦涩。
包含Q2Q和D2D两部分,Q2Q是到达的IO请求之间,D2D是驱动中处理的IO.请求
==================== Device Q2Q Seek Information ====================

DEV |NSEEKSMEANMEDIAN | MODE
---------- | --------------- --------------- --------------- | ---------------
(8,0) |245406419.20 | 0(8)
---------- | --------------- --------------- --------------- | ---------------
Overall |NSEEKSMEANMEDIAN | MODE
Average |245406419.20 | 0(8)
==================== Device D2D Seek Information ====================
DEV |NSEEKSMEANMEDIAN | MODE
---------- | --------------- --------------- --------------- | ---------------
(8,0) |255190101.00 | 0(9)
---------- | --------------- --------------- --------------- | ---------------
Overall |NSEEKSMEANMEDIAN | MODE
Average |255190101.00 | 0(9)
第五部分请求队列阻塞信息 队列不是无限的的,必然存在队列阻塞情况,这个就是现实队列阻塞,不能被驱动处理。这里的统计信息就是现实不能被处理的比例,如下图:
==================== Plug Information ====================

DEV |# Plugs # Timer Us| % Time Q Plugged
---------- | ---------- ----------| ----------------
(8,0) |12(0) |0.032358934%

DEV |IOs/UnpIOs/Unp(to)
---------- | --------------------
(8,0) |2.10.0
---------- | --------------------
Overall |IOs/UnpIOs/Unp(to)
Average |2.10.0


第六部分队列中IO调度 有时候需要关注请求在IO调度上花费的时间。
DEV |Avg Reqs @ Q
---------- | -------------
(8,0) |4.4
详细数据 使用--all-data或-A可以显示更详细信息。
可以显示每个设备的在各个阶段的统计数据。
3.活动数据文件 活动数据文件的格式容易被画图和分析,如下:
# Total System
#Total System : q activity
0.0000006240.0
0.0000006240.4
0.0040548420.4
0.0040548420.0
2.0484630770.0
2.0484630770.4
2.1087120440.4
2.1087120440.0
文件中数据是划分成对的,每对包含队列信息和完成信息。



【linux中btt工具详解】

    推荐阅读