磁盘性能测试-FIO工具的使用

admin 2023年12月21日07:42:02评论39 views字数 4678阅读15分35秒阅读模式

引言

在服务器应用和云计算等领域,磁盘性能是一个非常重要的系统性能指标,决定了数据传输速度和响应时间[1],作者写这篇文章时正在使用FIO工具进行云平台云服务器磁盘的性能测试工作,故本文将把作者本人在测试过程中学习到的FIO工具的安装、使用方法以及FIO工具执行结果说明分享给大家。

磁盘性能测试-FIO工具的使用

FIO工具介绍

FIO(Flexible I/O Tester)是一个用于测试磁盘、文件系统、块设备和网络设备性能的工具。它可以模拟不同类型的I/O负载,包括随机读写、顺序读写、混合读写、顺序或随机访问等[2],常见的用途是编写和模拟I/O负载匹配的作业文件,也就是说FIO是一个多线程I/O生成工具。FIO还提供了丰富的选项和参数,可以对测试进行高度定制化配置,并且会记录每个测试任务的性能指标(包括IOPS、吞吐量、延迟、CPU占用率等),最后还会生成结果报告,测试结果详细又准确。

磁盘性能测试-FIO工具的使用

FIO工具安装

FIO是一个开源软件,可在Linux、Windows等多种平台上运行。安装方式可分为离线安装和在线安装两种,本次介绍Linux操作系统离线安装的方法[3]

1、下载并安装相应操作系统的libaio开发包

2、下载FIO安装包,下载后上传至服务器

3、执行命令解压安装包:tar -xzf fio-X.XX.tar.gz

4、进入解压目录:cd fio-X.XX/

5、执行配置环境命令:./configure

6、执行编译命令:make

7、执行安装命令:make install

然后就可以使用FIO命令啦。

磁盘性能测试-FIO工具的使用

FIO工具使用

1

基础命令(例)

fio --name=TESTXX --filename=/dev/vdX  --bs=4k  --numjobs=1 --iodepth=64 --rw=randwrite --ioengine=libaio --direct=1 --norandommap --group_reporting --runtime=1800 --time_based

2

参数解释

参数

描述

--name

标识整个测试任务的名称

--filename

测试的磁盘文件名

--bs

单次写入的IO的块文件大小

--numjobs

定义测试的并发线程数

--iodepth

每个线程的队列深度

--rw

定义测试时的读写策略,可选的参数:write顺序写;read顺序读;readwrite顺序混合读写;randwrite随机写;randread随机读;randrw随机混合读写

--ioengine

采用的文件读写方式,可选参数:

sync:采用read、write,使用fseek定位读写位置。

psync:采用pread、pwrite进行文件读写操作

vsync:采用readv(2) or writev(2)进行文件读写操作

libaio:Linux异步读写IO

posixaio:glibc POSIX异步IO读写

--direct

测试是否采用直接IO方式进行读写,如果采用直接IO,则取值direct=1;否则取值direct=0。采用直接IO写测试,会使得测试结果更加真实[4]

--norandommap

在进行随机I/O时,FIO将覆盖文件的每个块。若给出此参数,则将选择新的偏移量而不查看I/O历史记录

--group_reporting

显示结果

--runtime

测试任务运行时间,单位为s

--time_based

如果设置的job已被完全读写或写完,也会执行完runtime规定的时间,它是通过循环执行相同的负载来实现的,加上这个参数可以防止job提前结束

--size

测试文件的大小

3

读写注意事项

1、没有写过数据的盘做读操作之前需要进行一遍写操作,否则会存在读空数据的情况[5],测试结果会不准确,其中体现的性能会很高,不能代表存储实际性能。

2、每次测试前建议执行echo 3 > /proc/sys/vm/drop_caches清理缓存。

FIO执行结果分析

以现网执行结果为例

磁盘性能测试-FIO工具的使用

1、Jobs: 1 (f=1): [w(1)][100.0%][w=197MiB/s][w=50.4k IOPS][eta 00m:00s]

当前运行和执行I/O的线程数为1,当前打开的文件数(f=)为1。

第一组括号中的字符表示每个线程的当前状态,示例中为W,表示写。当为R时,表示顺序读;r表示随机读;w表示随机写;M表示混合顺序读/写;m表示混合随机读/写。

第二组括号显示当前估计完成百分比,因为已经命令已经执行完,所以是100%。

第三组括号分别显示读取和写入I/O速率,由于当前执行写测试,故只显示写入的I/O速率。

第四组括号以带宽和IOPS表示第三组括号的内容。

最后一组括号显示预估的作业剩余运行时间。

2、write: IOPS=41.1k, BW=160MiB/s (168MB/s)(282GiB/1800002msec); 0 zone resets

写入测试结果,IOPS是每秒执行的平均I/O,BW是平均带宽速率,最后括号内的值是执行的总I/O和该线程的运行时长。

3、slat (nsec): min=1461, max=498016, avg=4173.78, stdev=2610.17

slat是submit latency的缩写,表示I/O的提交延时(同步I/O时不显示此项),单位是纳秒(ns),结果展示最小、最大、平均和标准偏差。

4、clat (μsec): min=286, max=1157.8k, avg=1553.71, stdev=8662.21

clat是complete latency的缩写,与slat的名称类似,表示从提交到完成I/O的时间,单位是微秒(μs)。

5、lat (μsec): min=390, max=1157.8k, avg=1557.88, stdev=8662.23

lat是latency的缩写,表示总延迟。与slat和clat的名称类似,表示从fio创建I/O单元到完成I/O操作的时间,单位是微秒(μs)。

6、clat percentiles (μsec):

| 1.00th=[529], 5.00th=[635], 10.00th=[709], 20.00th=[816],

| 30.00th=[914], 40.00th=[1004], 50.00th=[1090], 60.00th=[1205],

| 70.00th=[1336], 80.00th=[1500], 90.00th=[1795], 95.00th=[2147],

| 99.00th=[3720], 99.50th=[5735], 99.90th=[152044], 99.95th=[217056],

| 99.99th=[312476]

clat percentiles表示I/O完成延时百分位的数值,单位是微秒(μs)。

7、bw(KiB/s):min=504,max=235760,per=100%,avg=164324.11,stdev=45964.06,samples=3599

bw表示对采集到样本的带宽统计,单位是(KiB/s),结果展示最小、最大、该线程在其组中接收总带宽的百分比、平均、标准偏差及本次测试采样数。

8、iops : min=126, max=58940, avg=41080.99, stdev=11491.01, samples=3599

iops表示对采集到样本每秒的输入/输出操作的统计,结果展示最小、最大、平均、标准偏差及本次测试采样数。

9、lat (μsec) : 500=0.47%, 750=12.96%, 1000=26.45%

lat (msec) : 2=53.67%, 4=5.57%, 10=0.57%, 20=0.07%, 50=0.06%

lat (msec) : 100=0.04%, 250=0.11%, 500=0.02%, 750=0.01%, 1000=0.01%

lat (msec) : 2000=0.01%

I/O完成延迟的分布,是从I/O离开fio到完成的时间。本例中,500=0.47%表示0.47%的I/O在500μs以下完成,750=12.96% 意味着12.96%的I/O需要750到500μs完成,以此类推。

10、cpu : usr=4.50%, sys=17.58%, ctx=18177571, majf=0, minf=12

CPU利用率,用户(usr)和系统(sys)的占比,ctx指该线程上下文切换次数,majf指主要页面错误数,minf指次要页面错误数。CPU利用率取的是平均值,上下文切换次数和错误数则是相加求和后的结果。

11、IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%

在作业生命周期内I/O深度的分布。数字被划分为2的幂,每个条目覆盖从该值到低于下一个条目的深度。

12、submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%

一个提交调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中提交了0~4个I/O。

13、complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%

一个完成调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中完成了0~4个I/O。

14、issued rwts: total=0,73923277,0,0 short=0,0,0,0 dropped=0,0,0,0

发出的读/写/修改请求的数量,以及其中短请求和丢弃的数量。

15、latency : target=0, window=0, percentile=100.00%, depth=64

打印满足指定延迟目标所需的I/O深度。

16、Run status group 0 (all jobs):

WRITE: bw=160MiB/s (168MB/s), 160MiB/s-160MiB/s (168MB/s-168MB/s), io=282GiB (303GB), run=1800002-1800002msec

bw表示此组中线程的聚合带宽,然后是此组中所有线程的最小和最大带宽。io表示该组中所有线程执行的I/O,格式与bw相同,run表示此组中线程的最短和最长运行时间。

17、Disk stats (read/write):

vdb: ios=40/73917700, merge=0/0, ticks=103/112920852, in_queue=26848192, util=100.00%

最后,打印磁盘统计信息。每个参数都会输出读和写的值,读的值在前,写的值在后。ios表示所有组执行的I/O数。merge表示I/O计划程序执行的合并数。ticks表示磁盘忙的滴答数。in_queue表示在磁盘队列中花费的总时间[6]。util表示磁盘利用率,值越大意味着磁盘越繁忙,100%意味着磁盘一直处于繁忙状态。

磁盘性能测试-FIO工具的使用

总结

本文主要讲解在磁盘性能测试中FIO工具的使用方法,使用者可以通过测试结果评估系统的磁盘I/O性能,找到瓶颈和优化方向,通过了解FIO的操作方法和测试结果,可以更好地利用该工具,并在实际应用中提高系统性能和效率。

磁盘性能测试-FIO工具的使用

参考文献

1、fio评测硬盘IO性能

2、fio性能测试-环境搭建,功能介绍,测试讲解

3、磁盘性能测试工具-FIO的安装及使用

4、fio性能测试工具

5、fio常见使用方法

6、fio执行结果说明

磁盘性能测试-FIO工具的使用
磁盘性能测试-FIO工具的使用

- END -

原文始发于微信公众号(EBCloud):磁盘性能测试-FIO工具的使用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月21日07:42:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   磁盘性能测试-FIO工具的使用http://cn-sec.com/archives/2320635.html

发表评论

匿名网友 填写信息