磁盘性能测试-FIO工具的使用
点击此处查看最新的网赚项目教程
引言
在服务器应用和云计算等领域,磁盘性能是一个非常重要的系统性能指标,决定了数据传输速度和响应时间[1],作者写这篇文章时正在使用FIO工具进行云平台云服务器磁盘的性能测试工作,故本文将把作者本人在测试过程中学习到的FIO工具的安装、使用方法以及FIO工具执行结果说明分享给大家。
FIO工具介绍
FIO(Flexible I/O Tester)是一个用于测试磁盘、文件系统、块设备和网络设备性能的工具。它可以模拟不同类型的I/O负载,包括随机读写、顺序读写、混合读写、顺序或随机访问等[2],常见的用途是编写和模拟I/O负载匹配的作业文件,也就是说FIO是一个多线程I/O生成工具。FIO还提供了丰富的选项和参数,可以对测试进行高度定制化配置,并且会记录每个测试任务的性能指标(包括IOPS、吞吐量、延迟、CPU占用率等),最后还会生成结果报告,测试结果详细又准确。
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 --name=TESTXX --filename=/dev/vdX --bs=4k --numjobs=1 --iodepth=64 --rw=randwrite --ioengine=libaio --direct=1 --norandommap --group_reporting --runtime=1800 --time_based
参数解释
参数
描述
–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
测试文件的大小
读写注意事项
1、没有写过数据的盘做读操作之前需要进行一遍写操作,否则会存在读空数据的情况[5],测试结果会不准确,其中体现的性能会很高,不能代表存储实际性能。
2、每次测试前建议执行echo 3 > /proc/sys/vm/drop_caches清理缓存。
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工具的使用方法,使用者可以通过测试结果评估系统的磁盘I/O性能,找到瓶颈和优化方向,通过了解FIO的操作方法和测试结果,可以更好地利用该工具,并在实际应用中提高系统性能和效率。
参考文献
1、fio评测硬盘IO性能
2、fio性能测试-环境搭建,功能介绍,测试讲解
3、磁盘性能测试工具-FIO的安装及使用
4、fio性能测试工具
5、fio常见使用方法
6、fio执行结果说明
-END –
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: qs62318888
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网