blktrace
查看文件系统 superblock
~# dumpe2fs /dev/sdh1
安装 blktrace
~$ sudo yum install blktrace
~$ rpm -ql blktrace
/usr/bin/blkiomon
/usr/bin/blkparse
/usr/bin/blkrawverify
/usr/bin/blktrace
/usr/bin/bno_plot.py
/usr/bin/btrace
/usr/bin/btrecord
/usr/bin/btreplay
/usr/bin/btt
/usr/bin/verify_blkparse
使用 blktrace 收集磁盘 io(每个 cpu 核会生成一个 blktrace 文件)
~# blktrace -d /dev/sdh -o sdh
^C=== sdh ===
CPU 0: 16 events, 1 KiB data
CPU 1: 116 events, 6 KiB data
Total: 132 events (dropped 0), 7 KiB data
使用 blkparse 观察收集的 io 数据
~# blkparse -i sdh
Input file sdh.blktrace.0 added
Input file sdh.blktrace.1 added
8,112 0 1 0.000000000 11886 A R 1048573824 + 8 <- (8,113) 1048571776
8,112 0 2 0.000007462 11886 Q R 1048573824 + 8 [mount]
8,112 0 0 0.000029772 0 m N cfq11886S / alloced
8,112 0 3 0.000030879 11886 G R 1048573824 + 8 [mount]
8,112 0 4 0.000032692 11886 P N [mount]
8,112 0 5 0.000037141 11886 I R 1048573824 + 8 [mount]
8,112 0 0 0.000039781 0 m N cfq11886S / insert_request
...
blkparse 的输出各字段含义如下
major,minor cpu sequence timestamp pid action rwbs offset + size [process_name]
其中 action 各字母的含义如下表
rwbs 字段各字母含义如下:
R -> read
W -> write
D -> block discard
optionally either a 'B' for barrier operations or 'S' for synchronous operations
更多的信息可以参考 man blkparse 手册。
使用 blkparse 将多个 cpu 核对应的 blktrace 文件合并成一个
~# blkparse -i sdh -d sdh.blktrace.bin
使用 btt 分析收集的 io 数据
~# btt -i sdh.blktrace.bin
...
==================== All Devices ====================
ALL MIN AVG MAX N
--------------- ------------- ------------- ------------- -----------
Q2Q 0.000001280 0.033487131 5.072404707 1698
Q2G 0.000000578 0.000003215 0.000168761 1682
G2I 0.000000526 0.000002726 0.000064646 1682
Q2M 0.000000280 0.000001593 0.000003576 17
I2D 0.000003211 0.000021844 0.004247254 1682
M2D 0.000023383 0.000030971 0.000036279 17
D2C 0.000146745 0.001808329 0.005491997 1699
Q2C 0.000160298 0.001836162 0.005503566 1699
...
安装 iowatcher (Ubuntu 在 blktrace 包中,CentOS 7.x 需要单独安装)
~# yum install iowatcher
使用 iowatcher 从 blktrace 收集的 io 数据生成 svg 图片
~# iowatcher -t sdh -o chart.svg
也可以使用合并后的文件
~# iowatcher -t sdh.blktrace.bin -o chart.svg
参考资料
Block I/O Layer Tracing: blktrace
Beyond iostat: Storage performance analysis with blktrace
https://brooker.co.za/blog/2013/07/14/io-performance.html
blktrace分析IO
http://bean-li.github.io/blktrace-to-report/
最后修改于 2019-01-23