blktrace分析block layer性能

本文介绍了Linux下的blktrace工具,该工具用于跟踪块设备I/O层的活动,收集磁盘I/O信息,包括进程名称、执行时间等。同时,介绍了配套使用的blkparse分析工具。文章还解释了blktrace的工作原理及其在系统性能分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 基本概念
  blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息)。通过使用这个工具,使用者可以获取I/O请求队列的各种详细的情况,包括进行读写的进程名称、进程号、执行时间、读写的物理块号、块大小等等,是一个Linux下分析I/O相关内容的很好的工具。
  blkparse是配合blktrace使用的分析工具。在Unix类系统设计中,有个理念叫一切皆文件。因此,我们会发现很多系统性能信息其实来自于/proc/中的文件。这个目录其实是虚拟文件系统,cgroup也是类似的东西。这是一个很有意思的方式让Linux内核空间和用户空间进行通信。blktrace则是使用了另一个虚拟文件系统,/sys/kernel/debug 。它通过这个文件于内核进行交互,并获取信息。

2. 实现原理
  blktrace的采集位置是block层,也称为块设备层。在io调度层上面。cgroup中blkio.throttle.*等限制也是在这个层(也有图是把块设备层画在io调度层上一层)。图中的pdflush就是操作系统page cache回写的线程。 输入图片说明

  blktrace测试的时候,会分配物理机上逻辑cpu个数个线程,并且每一个线程绑定一个逻辑cpu来收集数据。然后,它会在/sys/kernel/debug(debugfs)中产生和每个线程对应的文件,然后调用ioctl函数,产生系统调用和内核交互。内核就会往文件中写入数据。

3. 使用方法
  sudo mount -t debugfs debugfs /sys/kernel/debug
  sudo blktrace /dev/sdb
  blkparse sdb -d sdb.bin >/dev/null
  btt -A -i sdb.bin

4. 字段说明
A
映射值对应设备 IO was remapped to a different device
B
IO反弹,由于32位地址长度限制,所以需要copy数据到低位内存,这会有性能损耗。IO bounced
C
IO完成 IO completion
D
将IO发送给驱动 IO issued to driver
F
IO请求,前合并 IO front merged with request on queue
G
获取 请求 Get request
I
IO插入请求队列 IO inserted onto request queue
M
IO请求,后合并 IO back merged with request on queue
P
插上块设备队列(队列插入机制) Plug request
Q
io被请求队列处理代码接管。 IO handled by request queue code
S
等待发送请求。 Sleep request
T
由于超时而拔出设备队列 Unplug due to timeout
U
拔出设备队列 Unplug request
X
开始新的扇区 Split
输入图片说明

转载于:https://my.oschina.net/u/3011935/blog/956632

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值