blkparse 命令
语法
blkparse [选项]
命令选项
$ blkparse
Usage: blkparse
-i <file> | --input=<file> 必填选项,选定 blktrace 的输出文件
[ -a <action field> | --act-mask=<action field> ] 过滤查看哪种 IO 类型
[ -A <action mask> | --set-mask=<action mask> ] 通过 16 位掩码设置过滤哪种磁盘行为
[ -b <traces> | --batch=<traces> ] 标准输入读取
[ -d <file> | --dump-binary=<file> ] 二进制输出文件
[ -D <dir> | --input-directory=<dir> ] blktrace 的输出文件的目录
[ -f <format> | --format=<format> ] 输出的格式,可以自定义输出哪些列
[ -F <spec> | --format-spec=<spec> ] 格式规范,可以自定义
[ -h | --hash-by-name ] 按名字进行 hash
[ -o <file> | --output=<file> ] 输出文件
[ -O | --no-text-output ] 无文本输出
[ -q | --quiet ] 静默输出
[ -s | --per-program-stats ] 每个程序的统计信息
[ -t | --track-ios ] 将告诉您请求排队、调度和完成所需的时间
[ -w <time> | --stopwatch=<time> ] 仅分析给定时间间隔之间的数据(以秒为单位),如果未给定“start”,blkparse 默认开始时间为 0
[ -M | --no-msgs 不将消息输出到二进制文件
[ -v | --verbose ] 详细输出
[ -V | --version ] 输出版本
-a 过滤查看哪种 IO 类型
-A 通过 16 位掩码设置过滤哪种磁盘行为
-b 标准输入读取
-d 二进制输出文件
-D blktrace 的输出文件的目录
-f 输出的格式,可以自定义输出哪些列
-F 格式规范,可以自定义
-h 按进程名字排序而不是 pid
-i 必填选项,选定 blktrace 的输出文件,或者加 - 跟 blktrace 命令行输出
-o 输出文件。如果未给出,则输出为标准输出
-O 无文本输出
-q 静默输出
-s 显示每个程序的 io 统计信息
-t 将告诉您请求排队、调度和完成所需的时间
-w 仅分析给定时间间隔之间的数据(以秒为单位),如果未给定“start”,blkparse 默认开始时间为 0
-M 不将消息输出到二进制文件
-v 详细输出
-V 输出版本
识别以下跟踪:
TRACE | ACTIONS |
---|---|
C | 完成 之前发出的请求已经完成。输出将详细说明该请求的部门和大小,以及成功或失败的情况。 |
D | 发出 之前位于块层队列或 I/O 调度器中的请求已经发送给驱动程序。 |
I | 插入 请求正在发送到 I/O 调度器,添加到内部队列中,稍后由驱动程序服务。此时请求已完全形成。 |
Q | 排队 记录计划在指定位置排队 I/O。此时尚未有实际请求存在。 |
B | 弹回 附加到此 bio 的数据页无法通过硬件访问,必须弹回到较低的内存位置。这会导致 I/O 性能的大幅下降,因为数据必须在内核缓冲区之间复制/传输。通常通过使用更好的硬件(如更好的 I/O 控制器或具有 IOMMU 的平台)来解决此问题。 |
M | 后合并 之前插入的请求在此 I/O 开始的边界上,因此 I/O 调度器可以将它们合并在一起。 |
F | 前合并 与后合并相同,只是此 I/O 在之前插入的请求开始处结束。 |
M | 前或后合并 上述任一合并。 |
G | 获取请求 要发送任何类型的请求到块设备,首先必须分配一个请求容器结构。 |
S | 睡眠 没有可用的请求结构,因此发出请求的方必须等待一个请求结构被释放。 |
P | 插入 当 I/O 被排队到一个先前为空的块设备队列时,Linux 会插入该队列,以便在数据被需要之前预期将来会有更多 I/O 被添加。 |
U | 弹出 当设备中已经排队了一些请求数据时,开始将请求发送给驱动程序。如果超时周期已过(见下文)或队列中已添加了多个请求,这通常会自动发生。 |
T | 由于定时器弹出 如果排队的 I/O 在插入队列后没有被请求,Linux 将在定义的时间段后自动弹出它。 |
X | 拆分 在 RAID 或设备映射器设置中,传入的 I/O 可能跨越一个设备或内部区域,需要将其分割成更小的部分进行服务。这可能表示由于 RAID/dm 设备设置不当而导致的性能问题,但也可能只是正常的边界条件。 |
dm | 在这方面特别糟糕,通常会克隆大量的 I/O。 |
A | 重映射 对于堆叠设备,传入的 I/O 会被重新映射到其下的设备。重映射动作将详细说明到底重映射了什么到什么设备。 |
输出说明
blkparse 的输出可以针对特定用途进行定制,特别是为了简化输出解析,和/或将输出字段限制为用户希望看到的字段。可输出的字段数据包括:
a | Action, a (small) string (1 or 2 characters) -- see table below for more details |
c | CPU id |
C | Command |
d | RWBS field, a (small) string (1-3 characters) -- see section below for more details |
D | 7-character string containing the major and minor numbers of the event's device (separated by a comma). |
e | Error value |
m | Minor number of event's device. |
M | Major number of event's device. |
n | Number of blocks |
N | Number of bytes |
p | Process ID |
P | Display packet data -- series of hexadecimal values |
s | Sequence numbers |
S | Sector number |
t | Time stamp (nanoseconds) |
T | Time stamp (seconds) |
u | Elapsed value in microseconds (-t command line option) |
U | Payload unsigned integer |
注意,用户可以选择指定字段显示宽度,也可以选择左对齐说明符。它们位于字段说明符之前,后跟 %
字符,后跟可选的左对齐说明符(-),后跟宽度(十进制数),然后是字段。
因此,要在左对齐的 12 个字符字段中指定命令: -f "%-12C"
指定每列输出
% blkparse -f "%a %c %C %d %n %p %s %S %t \n" -i myvda
%a
输出列中每个字母的含义
A | IO was remapped to a different device |
B | IO bounced |
C | IO completion |
D | IO issued to driver |
F | IO front merged with request on queue |
G | Get request |
I | IO inserted onto request queue |
M | IO back merged with request on queue |
P | Plug request |
Q | IO handled by request queue code |
S | Sleep request |
T | Unplug due to timeout |
U | Unplug request |
X | Split |
%d
输出列中每个字母的含义- 这是一个小字符串,至少包含一个字符(
R
表示读取,W
表示写入,D
表示块丢弃操作),以及可选的B
(表示屏障操作)或S
(表示同步操作)。
默认输出
标准标题包含下列标题:
"%D %2c %8s %5T.%9t %5p %2a %3d"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: blktrace 命令
下一篇: btt 命令
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论