---
title: blktrace工具
description: "blktrace是一个用户态的工具，提供关于I/O子系统时间消耗的详细信息，从中可以分析是I/O调度慢还是硬件响应慢等。配套工具blkparse从blktrace读取原始输出，并产生用户可读的输入和输出操作摘要。btt作为blktrace软件包的一部分而被提供，它分析blktrace输出，并显示该数据用在每个I/O栈区域的时间量，使它更容易在I/O子系统中发现瓶颈。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/tuningtip/kunpengtuning_12_0036.html
sourcePath: /source/zh/perftuning/tuningtip/kunpengtuning_12_0036.html
indexId: e465a2eef2896f0d0c94fb43e66299de3e8b0f67fbda4f0568d68456bf67252a58
---
# blktrace工具

#### 介绍

blktrace是一个用户态的工具，提供关于I/O子系统时间消耗的详细信息，从中可以分析是I/O调度慢还是硬件响应慢等。配套工具blkparse从blktrace读取原始输出，并产生用户可读的输入和输出操作摘要。btt作为blktrace软件包的一部分而被提供，它分析blktrace输出，并显示该数据用在每个I/O栈区域的时间量，使它更容易在I/O子系统中发现瓶颈。


#### 安装方式

以CentOS为例，可以使用以下命令安装：

```
yum -y install blktrace
```


#### 使用方式

1. 使用blktrace命令抓取指定设备的I/O信息，如：
  1 blktrace -w 120 -d /dev/sda

  “-w”后接的参数指定抓取时间，以秒为单位；“-d”后接的参数指定设备。

  命令执行完后会生成一系列以device.blktrace.cpu格式的二进制文件。

2. 使用blkparse命令解析blktrace生成的数据，如：
  1 blkparse -i sda -d blkparse.out

  “-i”后接的参数指定输入文件名，由于blktrace输出的文件名默认都是device.blktrace.cpu格式，所以只需输入前面的“device”即可；“-d”后接的参数指定二进制输出文件。

  这个命令会将分析结果输出到屏幕，并且将分析结果的二进制数据输出到blkparse.out文件中。

3. 使用btt命令查看I/O的整体情况，如：
```
btt -i blkparse.out
```

“-i”后接的参数指定输入文件名。

  - Q2Q：多个发送到块I/O层的请求时间间隔。
  - Q2G：生成I/O请求所消耗的时间，包括remap（可能被DM（Device Mapper）或MD（Multiple Device, Software RAID）remap到其它设备）和split（可能会因为I/O请求与扇区边界未对齐、或者size太大而被分拆(split)成多个物理I/O）的时间。
  - G2I：I/O请求进入I/O Scheduler所消耗的时间，包括merge（可能会因为与其它I/O请求的物理位置相邻而合并成一个I/O）的时间。
  - I2D：I/O请求在I/O Scheduler中等待的时间。
  - D2C：I/O请求在driver和硬件上（I/O请求被driver提交给硬件，经过HBA、电缆（光纤、网线等）、交换机（SAN或网络）、最后到达存储设备，设备完成I/O请求之后再把结果发回）所消耗的时间。
  - Q2C：整个I/O请求所消耗的时间（Q2I + I2D + D2C = Q2C），相当于iostat的await。
正常情况D2C占比90%以上，若I2D占比较高，可以尝试调整I/O调度策略。
