引言
在服务器应用和云计算等领域,磁盘性能是一个非常重要的系统性能指标,决定了数据传输速度和响应时间[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工具使用
1 基础命令(例) 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执行结果分析 以现网执行结果为例 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执行结果说明
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
– 原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33202.html