blktrace命令 – 分析磁盘IO

Linux命令 统信UOS系统管理员 2个月前 (03-18) 46次浏览 0个评论 扫描二维码

在 Linux 系统上,查看磁盘的负载情况,咱们一般使用 iostat 监控工具。其中很重要的参数就是 await,await 表示单个 I/O 所需的平均时间,但它同时包含了 I/O Scheduler 所消耗的时间和硬件所消耗的时间,所以不能作为硬件性能的指标。那如何才能分辨一个 io 从下发到返回整个时间上,是硬件层耗时多还是在 io 调度上耗时多呢?如何查看 io 在各个时间段所消耗的时间呢?那么,blktrace 在这种场合就能派上用场,因为它能记录 I/O 所经历的各个步骤,从中可以分析是 IO Scheduler 慢还是硬件响应慢,以及各个时间段所用时间。

blktrace 的原理:

一个 I/O 请求进入 block layer 之后,可能会经历下面的过程:

  • Remap: 可能被 DM(Device Mapper)或 MD(Multiple Device, Software RAID) remap 到其它设备
  • Split: 可能会因为 I/O 请求与扇区边界未对齐、或者 size 太大而被分拆(split)成多个物理 I/O
  • Merge: 可能会因为与其它 I/O 请求的物理位置相邻而合并(merge)成一个 I/O
  • 被 IO Scheduler 依照调度策略发送给 driver
  • 被 driver 提交给硬件,经过 HBA、电缆(光纤、网线等)、交换机(SAN 或网络)、最后到达存储设备,设备完成 IO 请求之后再把结果发回。

语法格式:blktrace [参数]

常用参数:

-A hex-mask 设置过滤信息 mask 成十六进制 mask
-a mask 添加 mask 到当前的过滤器
-b size 指定缓存大小 for 提取的结果,默认为 512KB
-d dev 添加一个设备追踪
-k 杀掉正在运行的追踪
-n num-sub 指定缓冲池大小,默认为 4 个子缓冲区
-o file 指定输出文件的名字
-r rel-path 指定的 debugfs 挂载点
-w seconds 设置运行的时间

参考实例

centos7 安装 blktrace(会自动生成 blktrace blkparse btt 3 个工具,其中,blktrace 收集数据,blkparce 分析数据,btt 汇总数据):

[root@xtuos.com ~]# yum install blktrace -y

使用 blktrace 需要挂载 debugfs:

[root@xtuos.com ~]# mount -t debugfs debugfs /sys/kernel/debug

利用 blktrace 查看实时数据的方法,比如要看的硬盘是 sdb:

[root@xtuos.com ~]# blktrace -d /dev/sdb -o – | blkparse -i –

分析磁盘/dev/sdc 的 IO 情况:

[root@xtuos.com ~]# blktrace -d /dev/sdc

生成数据: 应用结束后,手动终止监控,会生成 cpu 数量的文件

[root@xtuos.com ~]# blkparse -i sdc -d sdc.blktrace.bin


统信UOS之家 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:blktrace命令 – 分析磁盘IO
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址