追踪IO时延

Alibaba Cloud Linux对IO时延分析工具iostat的原始数据来源/proc/diskstats接口进行了优化,新增了对设备侧的读、写及特殊IO(discard)等耗时的统计。此外,Alibaba Cloud Linux 2系统还提供了一个便于追踪IO时延的工具bcc。本文将介绍Alibaba Cloud Linux 2系统优化后的/proc/diskstats接口和bcc工具。

/proc/diskstats接口说明

/proc/diskstats接口在Alibaba Cloud Linux 2中可查询磁盘IO信息、设备侧的读耗时、设备侧的写耗时及设备侧discard耗时。

查询/proc/diskstats接口。

cat /proc/diskstats

返回结果示例如下。

254       0 vda 6328 3156 565378 2223 1610 424 25160 4366 0 1358 5332 0 0 0 0 2205 3347 0

返回结果中,最后三个域为Alibaba Cloud Linux 2新增域,域说明如下。

域说明

描述

第1个域

完成的总读取次数。

第2个域

合并的读取次数。

第3个域

读取的扇区数。

第4个域

所有读取操作耗时,单位ms。

第5个域

完成的总写入次数。

第6个域

合并的写入次数。

第7个域

写入的扇区数。

第8个域

写入的总耗时,单位ms。

第9个域

当前正在进行的I/O数量。

第10个域

花费在I/O上的耗时,单位ms。

第11个域

加权的I/O耗时,单位ms。

第12个域

完成的总discard次数。

第13个域

合并的discard次数。

第14个域

discard的总扇区数。

第15个域

所有discard总耗时,单位为ms。

第16个域

设备侧的读耗时,单位为ms。

第17个域

设备侧的写耗时,单位为ms。

第18个域

设备侧的discard耗时,单位为ms。

安装使用bcc工具

Alibaba Cloud Linux 2提供了一种便捷的工具bcc,以帮助用户追踪IO延迟。

  1. 执行以下命令,安装bcc工具。

    yum install -y bcc-tools
  2. 您可以通过以下两种命令查看bcc工具的说明。

    • 通过以下命令获取bcc工具说明。

      /usr/share/bcc/tools/alibiolatency -h

      工具说明如下。

      usage: alibiolatency [-h] [-d DEVICE] [-i [DIS_INTERVAL]]
                           [-t [AVG_THRESHOLD_TIME]] [-T [THRESHOLD_TIME]] [-r]
      
      Summarize block device I/O latency
      
      optional arguments:
        -h, --help            show this help message and exit
        -d DEVICE, --device DEVICE
                              inspect specified device
        -i [DIS_INTERVAL], --dis_interval [DIS_INTERVAL]
                              specify display interval
        -t [AVG_THRESHOLD_TIME], --avg_threshold_time [AVG_THRESHOLD_TIME]
                              display only when average request process time is
                              greater than this value
        -T [THRESHOLD_TIME], --threshold_time [THRESHOLD_TIME]
                              dump request life cycle when single request process
                              time is greater than this value
        -r, --dump_raw        dump every io request life cycle
      
      examples:
          ./alibiolatency          # summarize block I/O latency(default display interval is 2s)
          ./alibiolatency -d sda3  # inspect specified device /dev/sda3
          ./alibiolatency -i 2     # specify display interval, 2s
          ./alibiolatency -t 10    # display only when average request process time is greater than 10ms
          ./alibiolatency -T 20    # dump request life cycle when single request process time is greater than 20ms
          ./alibiolatency -r       # dump every io request life cycle
    • 通过man命令获取bcc工具说明。

      man bcc-alibiolatency