【系统运维】使用FIO进行磁盘性能压测
一、磁盘性能标准
磁盘性能的衡量标准通常有使用率、饱和度、IOPS、吞吐量以及响应时间这五个指标
· 使用率:磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味着磁盘 I/O 存在性能瓶颈。
· 饱和度:磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求。
· IOPS(Input/Output Per Second):磁盘每秒读写次数。IOPS是一些小文件存储、OLTP数据库应用上的关键衡量指标,因为这些应用更关注随机读写性能。比如IOPS为300,代表磁盘每秒可以有300次IO,每次IO花费时间就是1/300=0.0033
· 吞吐量:磁盘每秒读写流量,单位为MB/s。吞吐量是一些需要传输大量连续数据的应用(如视频播放)的关键衡量指标,因为这些应用更关注连续读写性能
· 响应时间:I/O 请求从发出到收到响应的间隔时间。
二、FIO工具介绍
FIO是一个功能强大的磁盘性能测试工具,支持对磁盘进行顺序读写、随机读写等多种模式测试,还可以选择测试线程数、是否裸设备、是否跳过缓存等额外功能。
FIO工具常用选项如下:
--name: 指定测试任务job名
--filename: 指定需要测试的磁盘或者文件名,可以通过冒号指定多个文件,filename=/dev/sda:/data/fio/test_file,如指定的是磁盘,只用写磁盘名就可以,不用写分区号
--rw:读写模式,包括read(顺序读)、write(顺序写)、randread(随机读)、randwrite(随机写)、randrw(混合随机读写)、readwrite(混合顺序读写)
--direct:指定direct模式。默认为True(也可写为1)表示指定O_DIRECT标识符,忽略Buffer缓存,数据直写
--bs: 指定每个I/O块的大小,默认是4K
--size:指定测试文件总大小
--numjobs: 指定测试线程数
--runtime: 指定fio任务执行时间,如果未指定该参数,FIO读写完指定的文件就自动结束
--ioengine: 指定I/O引擎,fio支持很多引擎,默认是sync同步阻塞I/O,建议配置为libaio,即Linux系统的异步I/O
--rwmixread:混合读写比例,如-rwmixread=70代表读比例为70%
--group_reporting: 当指定了numjobs时,输出结果按组显示
--iodepth: 测试队列深度,一般可不配
--time_based:如果在runtime指定的时间还没到时文件读写已经完成,将继续重复直到runtime时间结束
三、FIO测试示例
在使用FIO进行测试时注意事项:
· 一定确保测试磁盘是空闲并没有数据的,禁止在系统分区或存有业务数据的磁盘进行测试,以免损坏系统文件
· 建议直接测试裸数据盘,如/dev/vdb
· 测试文件系统性能时,推荐指定具体文件测试,如/data/test_file
# 4K 随机读
fio --name=randread --filename=/dev/sdb --direct=1 --ioengine=libaio --bs=4K --size=100G --numjobs=16 --rw=randread --runtime=120 --time_based--group_reporting
# 16K 随机读写,其中70%为读
fio --name=randrw --filename=/dev/sdb --direct=1 --ioengine=libaio --bs=16K --size=100G --numjobs=16 --rw=randrw -rwmixread=70 --runtime=120 --time_based --group_reporting
四、FIO测试报告
bw:表示磁盘吞吐量
IOPS:每秒I/O的次数
clat:提交请求和请求完成之间的时间。统计值分别是最小、最大、平均和标准方差
CPU:显示IO负载对CPU的影响
评论