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 |
==================== 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工具详解】
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理