磁盘压力测试工具(vdbench&fio)

发布时间:2024-11-22 00:10

测试过程包括压力测试、兼容性测试和用户反馈收集 #生活乐趣# #游戏乐趣# #游戏测试#

磁盘压力测试工具(vdbench&fio)

最近有遇到对象挂载为文件系统的需求,为了测试挂载后的读写性能,有了解了一些测试工具。下面给大家分享下我使用的工具vdbench和fio。

1 vdbench

官网文档:https://www.oracle.com/technetwork/server-storage/vdbench-1901683.pdf

①安装 源码下载:http://www.oracle.com/technetwork/server-storage/vdbench-source-download-2104625.html运行文件下载:http://www.oracle.com/technetwork/server-storage/vdbench-downloads-1901681.html

vdbench本身是由Java编写的,因此运行时需要Java环境。

# 安装Java环境 yum install java-1.tar8.0-openjdk -y #解压 unzip vdbench50407.zip # 为vdbench添加执行权限 cd vdbench50407 chmod +x vdbench 12345678

下图中

vdbench为可执行文件r_fs、rw_fs为配置文件output为vdbench的执行结果(日志)
在这里插入图片描述 ②配置及参数说明

data_errors=1,messagescan=no,create_anchors=yes,debug=25 fsd=fsd1,anchor=/root/test/1G-1k-write-para128,depth=2,width=10,files=10,size=1g fwd=fwd1,fsd=fsd1,xfersize=4m,operation=write,fileio=sequential,fileselect=sequential,threads=4 rd=rd1,fwd=fwd*,seekpct=0,fwdrate=max,format=restart,elapsed=3000,interval=1 # anchor=/root/test/1G-1k-write-para128 写入文件地址 # depth=2,width=10,files=10 目录深度为2、宽度为10、每个目录下的文件为10,最终文件数量为10^2*10=1000 # size=1g 文件大小为1g # fwd=fwd1,fsd=fsd1 为此次fwd命名为fwd1 # xfersize=4m 要传输的数据大小。默认设置为4k,我这里设置为4m # operation=write 配置只写操作(operation=read,配置只读) # fileio=sequential,fileselect=sequential 配置顺序写 # threads=4 设置并发数为4 # seekpct=0 配置随机寻道的百分比。可为随机值,为0则为顺序;为100则为随机。 12345678910111213 ③使用

# 进入目录 cd vdbench50407 # 修改配置文件 vim rw_fs 1234

rw_fs配置文件:

data_errors=1,messagescan=no,create_anchors=yes,debug=25 fsd=fsd1,anchor=/root/test/1G-1k-write-para128,depth=2,width=10,files=10,size=1g fwd=fwd1,fsd=fsd1,xfersize=4m,operation=write,fileio=sequential,fileselect=sequential,threads=4 rd=rd1,fwd=fwd*,seekpct=0,fwdrate=max,format=restart,elapsed=3000,interval=1 1234

运行vdbench

# -f指定配置文件 ./vdbench -f rw_fs # 后台运行vdbench,输出日志在nohup.out # nohup ./vdbench -f rw_fs & # jobs #观察后台job是否为running 123456

运行之后vdbench会每隔1s打印读写信息(带宽、读写size等)
在这里插入图片描述

2 fio

官网地址:https://fio.readthedocs.io/en/latest/fio_doc.html

①安装

# 检查本地是否已经安装fio rpm –qa|grep fio # 如果未安装,则执行下面命令安装 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpm yum install libaio-devel yum install libibverbs -y yum install libpmem -y yum install librados2 -y yum install librbd1 rpm -ivh fio-3.7-2.el7.x86_64.rpm # 查看是否安装成功 fio -v 1234567891011121314 ②配置及参数说明

rw=randwrite:定义测试时的读写策略,可选值如下:随机读:randread,随机写:randwrite,顺序读: read,顺序写:write,混合随机读写:randrw0

ioengine=libaio:libaio指的是异步模式,如果是同步就要用sync。定义fio如何下发IO请求,通常有同步IO和异步IO:同步IO一次只能发出一个IO请求, 等待内核完成后才返回。这样对于单个线程IO队列深度总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。异步IO则通常使用libaio这样的方式一次提交一批IO 请求,然后等待一批的完成,减少交互的次 数,会更有效率

direct=1:定义是否使用direct IO,可选值如下:值为0,表示使用buffered IO;值为1,表示使用 direct IO

thread:使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。

numjobs=1:定义测试的并发线程数

iodepth=64:定义测试时的IO队列深度,默认为1。此处定义的队列深度是指每个线程的队列深度。

filename:定义测试文件(设备)的名称。此处选择文件,则代表测试文件系统的性能,例如:- filename=/opt/fiotest/fiotest.txt;此处选择设备名称,则代表测试裸盘的性能,例:-filename=/dev/vdb1
。如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意filename选择指定文件,以避免覆盖文件系统和原有数据。

size=100M:定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试。该参数的值,可以是带单位的数字,比如size=10G,表示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。建议测试数据量为内存两倍大,尽量避免缓存影响。

name=job1:定义测试任务名称。

bs=4k:定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB。

output TestResult.log:日志输出到TestResult.log。

runtime:定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完。

group_reporting:定义测试结果显示模式,group_reporting 表示汇总每个进程的统计信息,而非以不同 job汇总展示信息。

lockmem=1g 只使用1g内存进行测试。

zero_buffers 用0初始化系统buffer。

nrfiles=8 每个进程生成文件的数量。

tips:硬盘读写常用配置

Read=100% Ramdon=100% rw=randread (100%随机读)Read=100% Sequence=100% rw=read (100%顺序读)Write=100% Sequence=100% rw=write (100%顺序写)Write=100% Ramdon=100% rw=randwrite (100%随机写)Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30
(70%顺序读,30%顺序写)
Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30
(70%随机读,30%随机写)

每次测试前执行 echo 3 > /proc/sys/vm/drop_caches 清理缓存。
-ioengine=libaio、-iodepth=32可选/可不选

③使用 1 配置文件方式

# 编写配置文件 vim fio-4k-1G 12

fio-4k-1G配置文件内容:

[global] rw=write size=1000G bs=128K direct=1 ioengine=libaio numjobs=2 iodepth=128 group_reporting=1 [job1-1] nrfiles=1000 directory=/root/test/fio/1G-1k-1 [job1-2] nrfiles=1000 directory=/root/test/fio/1G-1k-2 [job1-3] nrfiles=1000 directory=/root/test/fio/1G-1k-3 [job1-4] nrfiles=1000 directory=/root/test/fio/1G-1k-4

123456789101112131415161718192021

我定义了4个Job

numjobs=2,设置并发数为2rw=write,配置模式为写size=1000G,配置每个Job一共生成1000G文件bs=128K,block size大小为128Knrfiles=1000,每个Job下一共生成1000个文件,1000G/1000=1G,每个文件大小为1Gdirectory=/root/test/fio/1G-1k-1,生成文件地址,目录结构需要自己提前手动创建

# 运行任务:fio + 配置文件名称 fio fio-4k-1G 12 2 命令行方式 1. 顺序写

fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=4M -size=128G -numjobs=1 \ -runtime=600 -group_reporting -filename=/dev/[device] -name=Write_BandWidth_Test 12 2. 随机写

fio -direct=1-iodepth=128 -rw=randwrite -ioengine=libaio -bs=4K -size=128G - numjobs=1 \ -runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Write_IOPS_Test 12 3. 顺序读

fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=4M -size=128G -numjobs=1 \ -runtime=600 -group_reporting -filename=/dev/[device] -name=Read_BandWidth_Test 12 4. 随机读

fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4K -size=128G - numjobs=1 \ -runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Read_IOPS_Test 12 5. 混合随机读写

fio -output=/tmp/100S100W -name=100S100W -filename=/dev/sdb:/dev/sdc:/dev/sdd -ioengine=libaio -direct=1 -blocksize=2M -runtime=300 -rw=randrw -rwmixread=70 -rwmixwrite=30 -iodepth=32 -numjobs=1 1

3 监控磁盘IO、网络带宽

①磁盘IO:iostat -mx 1

iostat –mx 1 #iostat的安装方法:yum install sysstat 12

在这里插入图片描述

②网络带宽:dstat -n

dstat -n 1

在这里插入图片描述

参考:https://blog.csdn.net/zhiboqingyun/article/details/123368887

网址:磁盘压力测试工具(vdbench&fio) https://www.yuejiaxmz.com/news/view/182260

相关内容

FIO – IO压力测试工具
提升磁盘性能的利器:Windows系统磁盘压力测试工具
NTFS 压缩以节约磁盘空间优缺点测试
[性能测试] Benchmarks(压力测试工具汇总)
Linux性能优化(一)——stress压力测试工具
gpu压力测试工具
测试工具之压力测试工具推荐
InfluxDB 压力测试工具:Influx
压力测试+接口测试(工具jmeter)
CPU压力测试工具cpuburn

随便看看