性能调试时常用命令

本文介绍了使用fio进行磁盘性能测试,包括不同的IO引擎设置,如rbd和libaio,以及各种读写模式。同时,利用blktrace和iostat等工具对磁盘I/O进行观测和分析,包括读写速度、等待时间和利用率等关键指标。此外,还提到了pidstat用于监测进程的IO活动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO下发

[global]
ioengine=rbd # orlibaio 选择的i/o引擎,即使用什么方式的系统调用
name=test
iodepth=64
direct=1
numjobs=1
bs=16k
rw=randrw
rwmixread=30
pool=.data.rbd
randrepeat=0 # 保证完全随机的I/O
time_based # 增加这个选项后面的runtim才会生效
runtime=60  # 保证进程运行60秒,如果写/读完成了size的大小,那么重复读/写,直到完成
size=100G

group_reporting

[1]
rbdname=rbd1

[global]
ioengine=libaio # 选择的i/o引擎,即使用什么方式的系统调用
direct=1 # direct选项,表示不经过文件系统
norandommap=1  # 覆盖size内的每一个磁盘block,保证写入均匀
randrepeat=0 # 保证完全随机的I/O
time_based # 增加这个选项后面的runtim才会生效
runtime=60  # 保证进程运行60秒,如果写/读完成了size的大小,那么重复读/写,直到完成
size=1G # 一个文件大小是1G
directory=./fio # 指定fio压测的文件目录,一般会在该目录内生成numjobs个size大小的文件

group_reporting # 最终会将压测结果形成可读的报告

[read4k-rand] # 压测随机读
bs=4k
rw=randread
numjobs=1
iodepth=1

[write4k-rand] # 压测随机写
bs=4k
rw=randwrite
numjobs=1
iodepth=1

[mixread50-rand] # 压测1:1 随机读写
bs=4k
rw=randrw
rwmixread=50
numjobs=1
iodepth=1

[mixread90-rand] # 压测9:1 随机读写
bs=4k
rw=randrw
rwmixread=50
numjobs=1
iodepth=1

将以上文件存为 xxx.fio , 使用命令 fio xxx.fio

结果类似如下
在这里插入图片描述

分析性能命令

设备耗时

# 以下命令默认在root权限下执行

# -a read, 表示只抓读请求,也可以-a write。默认是读写都抓
# -d 指定设备,最后会在当前目录生成cpu逻辑核数个文件,类似nvme0n1.blktrace.55
# -w 指定抓取时间
blktrace -a read -d /dev/nvme0n1 -w 180 

# 解析所有nvme0n1开头的数据到一个文件nvme0n1.blktrace.bin
blkparse -i nvme0n1 -d nvme0n1.blktrace.bin

# 生成报表
btt -i nvme0n1.blktrace.bin -o bttout
vim bttout.svg

磁盘I/O 观测

iostat 

# iostat -x -k -d 1
Linux 5.10.38-21.hl06.el7.x86_64 (node126)      02/18/2023      _x86_64_        (80 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           3.34     2.98   96.21   88.72  2569.37  4018.36    71.25     0.05    0.29    0.41    0.16   0.28   5.14
nvme4n1           3.47     2.63   83.55   86.22  2507.79  3979.70    76.43     0.05    0.32    0.48    0.16   0.28   4.72
nvme1n1           0.02     0.16    0.40    0.64     6.12    22.73    55.39     0.00    0.33    0.37    0.31   0.31   0.03
nvme3n1           0.00     0.00    0.00    0.01     0.03     0.06    17.31     0.00    0.05    0.15    0.03   0.22   0.00
nvme5n1           0.00     0.00    0.00    0.01     0.03     0.06    17.43     0.00    0.05    0.16    0.03   0.22   0.00
nvme2n1           3.51     3.06   97.12   84.17  2657.51  4029.93    73.78     0.06    0.31    0.43    0.17   0.28   5.01
sda               0.34     4.78    6.19  127.53  1400.08 10143.72   172.66     0.10    0.74    4.13    0.58   0.32   4.26
sdb               0.00     0.00    0.00    0.00     0.07     0.00    95.23     0.00    0.41    0.41    0.03   0.31   0.00
dm-0              0.00     0.00    3.75  108.53   202.29  3712.04    69.73     0.06    0.56    3.26    0.46   0.27   2.99
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    48.43     0.00    0.44    0.44    0.12   0.38   0.00
dm-2              0.00     0.00    0.88   14.51  1197.78  6565.68  1009.50     0.00    0.14    7.34   24.86   1.00   1.54
dm-3              0.00     0.00    0.00    0.00     0.00     0.00    43.89     0.00    0.25    0.25    0.00   0.30   0.00



r/s: 每秒发送给磁盘的读请求数。合并后的请求数

w/s: 每秒发送给磁盘的写请求数。同上也是合并后的

rKB/s 每秒从磁盘读取的数据量

wKB/s:每秒向磁盘写入的数据量

rrpm/s:每秒合并的读请求数

wrpm/s:每秒合并的写请求数

await: 读/写 请求处理完成的等待时间

r_wait:读请求处理完成等待时间,也包括队列中的等待时间和设备实际处理的时间,单位是ms

w_wait:写请求处理完成等待时间,也包括队列中的等待时间和设备实际处理的时间,单位是ms

avgqu-sz:平均请求队列长度

avgrq-sz: 平均读请求块(sector)大小,一个sector是512B

svctm:处理I/O请求所需的平均时间(不包括等待时间),单位ms。

该指标不被推荐作为参考,后续该指标会在新版本的 iostat中移除

%utill: 磁盘处理I/O时间的百分比。
100% 并不一定是磁盘I/O瓶颈。

进程IO检测

pidstat -d 1
    UID 用户ID
	PID 进程ID
	kB_rd/s 进程每秒读取的数据大小
	kB_wd/s 进程每秒发出的数据大小
	kB_ccwr/s 进程每秒取消的写请求数据大小
	Command 进程名称
	
pidstat -w -p pid #显示进程id为pid的上下文切换情况
	Cswch/s:每秒主动任务上下文切换数量
    Nvcswch/s:每秒被动任务上下文切换数量

pidstat -r -p pid #内存使用情况统计

iotop 追踪多个正在处理读写的进程,需要root权限

strace -p $pid/$tid -f 查看进程/线程系统调用情况

lsof -p pid 追踪一个具体进程打开的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值