以下内容来自于RHEL 官方文档。以下工具可以用来分析磁盘 IO 和文件系统性能瓶颈。
分析方法见 《性能分析方法-《性能之巅》笔记》,USE 法必须要使用相关性能分析工具。

影响 IO 和文件系统性能的主要因素:

数据写入或读取特征
顺序或随机
buffered 或 Direct IO
数据与底层 geometry 保持一致
块大小
文件系统大小
日志大小和位置
记录访问时间
确保数据可靠性
预抓取数据
预分配磁盘空间
文件碎片
资源争用

vmstat

vmstat 工具报告整个系统的进程、内存、分页、块 I/O、中断和 CPU 活动。它可帮助管理员确定 I/O 子系统是否负责任何性能问题。如果使用 vmstat 进行分析显示,I/O 子系统负责降低性能,管理员可以使用 iostat 工具来确定负责的 I/O 设备。
常用命令:
vmstat 1 每1秒采集一次。

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 14492940  93516 1050928    0    0     0     0    0    2  0  0 100  0  0
 0  0      0 14492940  93516 1050928    0    0     0     0    7   40  0  0 100  0  0
 0  0      0 14492940  93516 1050928    0    0     0     0    4   36  0  0 100  0  0

vmstat 1 -t 每1秒采集一次,并打印时间戳。

# vmstat 1 -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 CST
 0  0      0 14495244  93516 1050928    0    0     0     0    0    2  0  0 100  0  0 2023-08-17 17:14:35
 0  0      0 14495244  93516 1050928    0    0     0     0    4   36  0  0 100  0  0 2023-08-17 17:14:36
 0  0      0 14495244  93516 1050928    0    0     0     0    5   36  0  0 100  0  0 2023-08-17 17:14:37
 0  0      0 14495244  93516 1050928    0    0     0     0   15   76  0  0 100  0  0 2023-08-17 17:14:38
 0  0      0 14495244  93516 1050928    0    0     0     0    5   34  0  0 100  0  0 2023-08-17 17:14:39
 0  0      0 14495244  93516 1050928    0    0     0    24    6   40  0  0 100  0  0 2023-08-17 17:14:40
 0  0      0 14495244  93516 1050928    0    0     0     0    5   38  0  0 100  0  0 2023-08-17 17:14:41

iostat

iostat 报告您系统中的 I/O 设备负载。它由 sysstat 软件包提供。
常用命令:
iostat -dxm 1 每1秒采集一次设备IO信息,并以MB为单位输出。

# iostat -dxm 1
Linux 3.10.0-1160.42.2.el7.x86_64 (c1-121)      08/17/2023      _x86_64_        (2 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.01    0.01    0.06     0.00     0.00    21.77     0.00    2.70    5.06    2.44   0.46   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00   114.22     0.00    0.22    0.22    0.00   0.22   0.00
dm-0              0.00     0.00    0.01    0.07     0.00     0.00    19.87     0.00    2.77    5.94    2.50   0.44   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    50.96     0.00    1.01    1.01    0.00   0.91   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

blktrace

blktrace提供有关 I/O 子系统花费时间的详细信息。
blkparse 读取来自 blktrace 的原始输出,并生成由 blktrace 记录的输入和输出操作的人类可读摘要。
btt 分析 blktrace 输出并显示 I/O 堆栈各个区域所花费的时间,从而更轻松地发现 I/O 子系统中的瓶颈。该实用程序作为 blktrace 软件包的一部分提供。
使用方法:

blktrace /dev/sdb
blkparse -i sdb -d sdb.bin >>sdb.txt
btt -i sdb.bin

bpftrace

BPF Compiler Collection(BCC)是一个库,可帮助创建扩展的 Berkeley Packet Filter(eBPF)程序。eBPF 程序在事件中触发,如磁盘 I/O、TCP 连接和进程创建。BCC 工具安装在 /usr/share/bcc/tools/ 目录中。以下 bcc-tools 可帮助分析性能:

  • biolatency 总结了块设备 I/O(磁盘 I/O)中延迟的问题。这允许研究发行版,包括用于设备缓存命中以及缓存未命中的两种模式,以及延迟延迟。
  • biosnoop 是基本的块 I/O 追踪工具,用于显示每个 I/O 事件以及发出的进程 ID,以及 I/O 延迟。使用这个工具,您可以调查磁盘 I/O 性能问题。
  • biotop 用于内核中的块 i/o 操作。
  • filelife 工具跟踪 stat() 系统调用。
  • fileslower 跟踪文件同步的读写速度比较慢。 filetop 按进程显示文件读取和写入。
  • ext4slowernfsslowerxfsslower 是显示文件系统操作比特定阈值慢的工具,默认值为 10ms。

相关介绍见《bcc-tools Linux运维中的要你命3000