利用blktrace分析磁盘I/O

blktrace对于分析block I/O是个非常好的工具,本篇文章记录了如何使用blktrace。

blktrace原理

blktrace是对通用块层(block layer)的I/O跟踪机制,它能抓取详细的I/O请求(request),发送到用户空间。

blktrace主要由3部分组成:

  • 内核部分
  • 记录内核到用户空间的I/O追踪信息的程序
  • 分析、展示I/O追踪信息的程序

主要在block layer实现,抓取的数据通过debugfs来传递。每个被跟踪的设备都有一个在debugfs挂载目录的文件。debugfs挂载目录默认是:/sys/kernel/debug

用官方的一张图来直观的展现:

一个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
  • 被I/O Scheduler依照调度策略发送给driver
  • 被driver提交给硬件,经过HBA、电缆(光纤、网线等)、交换机(SAN或网络)、最后到达存储设备,设备完成I/O请求之后再把结果发回。

blktrace使用

  • 安装blktrace包

    yum install blktrace
  • 追踪指定设备的I/O

    [root@k8s-slave9 longterm_io] # blktrace -d /dev/sde
    ^C=== sde ===
       CPU  0:                   38 events,        2 KiB data
       CPU  1:                    1 events,        1 KiB data
       CPU  2:                  232 events,       11 KiB data
       CPU  3:                    2 events,        1 KiB data
       CPU  4:                   41 events,        2 KiB data
       ...
       Total:                   567 events (dropped 0),       27 KiB data

    -d <dev> 指定具体的设备名

    上面是抓取一段时间后,Ctrl+C中止的。也可以指定时间:-w <seconds>
    blktrace执行完之后,会生产很多文件,每个CPU都会有一个文件,文件名组成:<设备名>.blktrace.<CPU id>,如下:

    [root@k8s-slave9 longterm_io] # ls
    sde.blktrace.0   sde.blktrace.12  sde.blktrace.16  sde.blktrace.2   sde.blktrace.23  sde.blktrace.27  sde.blktrace.30  sde.blktrace.34  sde.blktrace.38  sde.blktrace.6
    ...

    抓取IO信息,完成了第一步,我们要分析这些I/O,就需要下面的工具。

blkparse分析数据

    • 解析IO追踪信息

      blkparse是一个会把不同CPU的I/O trace文件合并,并解析、格式化输出为对用户可读友好IO信息的工具。

      先把上面生成的所有CPU I/O trace文件合并成一个文件:

      [root@k8s-slave9 longterm_io] # blkparse -i sde -d sde.blktrace.bin
      Input file sde.blktrace.0 added
      Input file sde.blktrace.1 added
      Input file sde.blktrace.2 added
      Input file sde.blktrace.3 added
      Input file sde.blktrace.4 added
      ...
      -----------------------------第一个IO开始
        8,64  35        1     0.000000000 28378  A   W 470236984 + 40 <- (8,65) 470234936
         8,64  35        2     0.000000670 28378  Q   W 470236984 + 40 [kworker /u82 :1]
         8,64  35        3     0.000005125 28378  G   W 470236984 + 40 [kworker /u82 :1]
         8,64  35        4     0.000005443 28378  P   N [kworker
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值