简介
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。
目前主流的第三方IO测试工具有fio、iometer 、 Orion,这三种工具各有千秋,在linux 下也可以使用dd 进行简单的磁盘(文件系统)测试(文末补充)。
fio在Linux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的IO测试软件,可在没有安装oracle数据库的情况下模拟oracle数据库场景的读写。
Multithreaded IO generation tool , FIO 是一个多线程io生成工具,可以生成多种IO模式,用来测试磁盘设备的性能(也包含文件系统:如针对网络文件系统 NFS 的IO测试); Description : fio is an I/O tool that will spawn a number of threads or processes doing : a particular type of io action as specified by the user. fio takes a : number of global parameters, each inherited by the thread unless : otherwise parameters given to them overriding that setting is given. : The typical use of fio is to write a job file matching the io load : one wants to simulate. |
安装
测试磁盘之前,磁盘最好是空的,也就是格式化的,如果磁盘已经有了内容,
需要卸载-格式化-挂载
# 卸载磁盘
umount /mnt/datadir1
# 格式化磁盘
mkfs.ext4 /dev/sdd
# 挂载磁盘
mount -t ext4 /dev/sdd /mnt/datadir1
# 自动挂载,在里面添加该盘
vim /etc/fstab (见下图,可以在该文件下设置挂载)
安装fio
yum install fio
使用简介
从测试角度出发,一般有如下的测试设计:
序号 | 模块 | 用例 | 结果 |
1 | 磁盘IO测试 | 1M顺序写吞吐量 | IOPS=353, BW=353MiB/s (371MB/s)(50.0GiB/144874msec) |
2 | 磁盘IO测试 | 1M顺序读吞吐量 | IOPS=1349, BW=1350MiB/s (1415 MB/s)(50.0GiB/37937msec) |
3 | 磁盘IO测试 | 4K随机写IOPS | IOPS=6057, BW=23.7MiB/s (24.8MB/s)(10.0GiB/432743msec) |
4 | 磁盘IO测试 | 4K随机读IOPS | IOPS=20.0k, BW=81.9MiB/s (85.9MB/s)(10.0GiB/125065msec) |
说明:
- IOPS IOPS(Input/Output Operations Per Second)每秒读写的次数
2. 50.0GiB/144874msec=353MiB/s=371MB/s
MiB/s的意思是每秒中传输2^20 byte的数据,不太常用,一般需要转换成MB/S,MB/s=MiB/s *1.024
测试命令:
fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=50G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Write_BandWidth_Test fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=1024k -size=50G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Read_BandWidth_Test fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Rand_Write_IOPS_Test fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Rand_Read_IOPS_Test |
命令参数说明:
filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
rw=
bs=1024k 单次io的块文件大小为1024k
此外
|
dd简单测试磁盘 (dd 是linux自带的,不用安装,功能没有fio全面,适用于简单的磁盘测试)
[root@docker ~]# dd if=/dev/zero of=test bs=8k count=10000 oflag=direct |
[root@docker ~]# dd if=test of=/dev/null bs=8k count=10000 iflag=direct |
/dev/null,它是空设备,也称为位桶(bit bucket)、回收站、无底洞,可以向它输出任何数据。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
/dev/zero,是一个输入设备,可用它来初始化文件。该设备无穷尽地提供0,可以使用任何需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
if=file 输入文件名,缺省为标准输入。 从file读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)
of=file 输出文件名,缺省为标准输出。 向file写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",
ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes 一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs。如bs=8k 每次读或写的大小,即一个块的大小为8K。
cbs=bytes 一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks 从输入文件开头跳过 blocks 个块后再开始复制。
seek=blocks 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。
count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
本文暂时没有评论,来添加一个吧(●'◡'●)