blktrace是块层IO路径监控和分析工具,使用它可以深入了解IO通路,对监控,性能调优都有很大帮助。
1. 架构
blktrace分内核空间和用户空间两部分实现,内核空间里面主要是给块层IO路径上的关键点添加tracepoint,然后借助于relayfs系统特性将收集到的数据写到buffer去,再从用户空间去收集。
用户空间还实现了几个小工具,blkparse,btt,用来分析收集到的数据.
2. 安装
内核空间部分的代码已经集成到主线代码里面去了,可以看看内核代码 block/blktrace.c文件是不是存在,编译的时候把对应的这个trace选项选择上就可以了。
用户空间需要的工具,在ubuntu9.04上直接
sudo apt-get install blktrace就可以了。安装完成后在/usr/share/doc/blktrace里面有几个pdf文档写的很详细,仔细看看。
3. 实现
主要是看看内核部分里面的代码是怎么实现的
1). 大部分实现代码都在blktrace文件里面。利用tracepoint的特性,注册了一些trace关键点,可以看看Documentation/tracepoint.txt文件。
2). 交互机制利用了relayfs特性,看看Documentation/filesystems/relay.txt.
4. 文档
1). /usr/share/doc/blktrace/btt.pdf,blktrace.pdf是用户手册
5. 一些状态的对应关系
Act Description SetPosition
A IO was remapped to a different device blk-core.c/trace_block_remap
B IO bounced bounce.c/trace_block_bio_bounce
C IO completion blk-core.c/trace_block_rq_complete
D IO issued to driver elevator.c/trace_block_rq_issue
F IO front merged with request on queue blk-core.c/trace_block_bio_frontmerge
G Get request blk-core.c/trace_block_getrq
I IO inserted onto request queue elevator.c/trace_block_rq_insert
M IO back merged with request on queue blk-core.c/trace_block_bio_backmerge
P Plug request blk-core.c/trace_block_plug
Q IO handled by request queue code blk-core.c/trace_block_bio_queue
S Sleep request blk-core.c/trace_block_sleeprq
T Unplug due to timeout blk-core.c/trace_block_unplug_timer
U Unplug request blk-core.c/trace_block_unplug_io
X Split bio.c/trace_block_split