runsisi's

technical notes

blktrace

2019-01-23 runsisi#debug

查看文件系统 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 各字母的含义如下表

io

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

https://www.mimuw.edu.pl/~lichota/09-10/Optymalizacja-open-source/Materialy/10%20-%20Dysk/gelato_ICE06apr_blktrace_brunelle_hp.pdf

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/