FIO工具简介
针对磁盘的压力性能测试工具有很多,简单的测试可以通过dd命令实现,而比较专业和强大的磁盘IO测试工具,当然首推FIO了。这里针对FIO工具使用做个简单的介绍。介绍前,首先说明下两个概念,顺序读写和随机读写。
随机读取:写入是根据磁盘数据分布进行随机读写,可能数据的读、写并不在连续的磁盘空间上,因此磁头寻址时间长、负荷大,每段数据都有地址码,通过地址码进行数据段读取。
顺序读取:写入是根据磁盘数据分布进行连续读写,由于数据分布连续,寻址时间短,中间没有地址码。
通常机械硬盘主要是看顺序读写性能,SSD主要看随机读写性能。
Fio工具的介绍网上有很多,都是可以通用的
fio是一种I / O工具,用于基准测试和压力/硬件验证。它支持19种不同类型的I / O引擎(sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio等)
I / O优先级(适用于较新的Linux内核) ,评估I / O,分叉或线程作业等等。它可以在块设备和文件上工作。fio以简单易懂的文本格式接受职位描述。包含几个示例作业文件。fio显示各种I / O性能信息,包括完整的IO延迟和百分位数。Fio在许多地方广泛使用,用于基准测试,QA和验证目的。它支持Linux,FreeBSD,NetBSD,OpenBSD,OS X,OpenSolaris,AIX,HP-UX,Android和Windows等操作系统。
实验部分
准备一块盘来测试,或者你要测试的盘,最好是数据盘而不是系统盘
防止大量的写操作对系统盘造成损坏,导致系统盘崩溃
如果你是使用vm虚拟机的话可以直接添加一块来测试,我就是如此
我将盘挂载在了/mnt目录下
然后下载压测命令
yum install fio -y
下载好后就开始来分析命令的用法
参数 | 解析 |
---|---|
directory=/root/mnt | 被测文件挂载的目录,多个目录使用:符号分割 |
filename=/dev/sdb | 被测文件名,多个文件则使用:符号分割 |
direct=1 | 使用非缓存I/O,使测试磁盘的结果更真实,默认为False,可以用0和1表示 |
rw=read | 测试顺序读(100%顺序读) |
rw=write | 测试顺序写(100%顺序写) |
rw=randread | 测试随机读(100%随机读) |
rw=randwrite | 测试随机写(100%随机写) |
rw=randrw | 测试随机读写(读写各占50%) |
rw=rw, rwmixread=70 | 测试顺序读写(写占比为70%) |
rw=randrw, rwmixwrite=30 | 在混合读写的模式下,写占30% |
rw=trim/randtrim/trimwrite | 磁盘修剪,需要磁盘支持此功能,可根据读写一样进行配置 |
bs=4k | 单次I/O的块大小,默认4k |
bs=4k,8K | 单次以4k块大小读取,以8k写入和修剪 |
bs=16k,32K, | 单次以16k读取,以32k大小写入,以默认大小4k修剪 |
bsrange=8k-1M | 同上,指定数据块的大小范围 |
size=1G | 每个线程读写的数据量为1GB |
thread=1 | 使用pthread_create创建线程,默认使用fork创建 |
numjobs=2 | 克隆此次测试的线程/进程数量,可用于设置更多执行相同操作的线程/进程 |
group_reporting | 每个线程的测试结果汇总后输出 |
allow_mounted_write=1 | 允许写入操作,某些平台可能即使有此参数也无法写入 |
runtime=100 | 测试时间,若测试提取完成则提前结束并输出结果,若到达时间后测试尚未完成则会强制结束并输出结果 |
ramp_time=10 | 在测试开始前先执行10秒,可以理解为忽略前10秒的测试结果,有助于得到更稳定的测试数据 |
ioengine=libaio|sync|自定义 | 指定io引擎,可自定义,官方也提供了多种方式 |
iodepth=2 | 队列深度为2,默认为1 |
name=fioTest | 定义本次测试任务名称 |
output=testRestult | 输出测试结果到指定文件中 |
lockmem=1G | 只使用1G内存进行测试,模拟较少内存时使用 |
stonewall | 等待上一个测试任务结束,再启动此当前任务 |
然后现在开始进行测试
这条命令是测试磁盘文件/dev/sdb随机写入操作,使用同步I/O引擎sync,测试配置为使用非缓存I/O,1个线程,I/O深度为1,汇总输出一份报告,允许写入磁盘,块大小为4k,测试文件2G,运行时间60秒,本次测试命名为test-fio
fio -filename=/dev/sdb -ioengine=sync -direct=1 -thread=1 -iodepth=1 -group_reporting -rw=randwrite -allow_mounted_write=1 -bs=4k -size=3G -runtime=60 -name=test-fio
可以看到IPOS和吞吐量,这是随机写入的
控制随机读写的比例为7:3
fio -filename=/dev/sdb -ioengine=sync -direct=1 -thread=1 -iodepth=1 -group_reporting -rw=randrw -rwmixwrite=30 -allow_mounted_write=1 -bs=4k -size=3G -runtime=60 -name=test-fio
然后再看看随机读写的
可以看到总的IOPS和吞吐量基本差不多
还可以用iostat -x 命令实时观察磁盘的压测情况,1是每秒输出持续使用情况,安装命令:
yun install sysstat -y
这样使用fio命令就测试出来我们磁盘的IOPS和吞吐量了
希望对大家有帮助