Filebench

什么是Filebench

Filebench是一块文件系统的测试工具,可以模拟服务器的一些操作来测试文件系统的性能
如:copyfiles createfiles randomread randomwrite等

测试指标

1.文件总大小相同 看操作带宽速度
如单个文件大小16k 文件数50000
对比单个文件大小1m 文件数800
总大小 800m
2.文件总数量相同 看响应iops时间
如单个文件大小16k 文件数800
对比单个文件大小1m 文件数800

安装Filebench

使用git获取源码

git clone https://github.com/Workeryuan/filebench.git

安装libtoool

yum install -y libtool   

安装automake

yum install -y automake

安装yacc

yum install -y byacc

安装flex

yum install -y flex

生成autotool脚本、编译和安装

cd filebench
libtoolize
aclocal
autoheader
automake --add-missing
autoconf
./configure
make install

Filebench测试

自定义测试负载

define fileset name="testF",entries=10000,filesize=16k,prealloc,path="/tmp"
define process name="readerP",instances=2 {
 thread name="readerT",instances=3 {
      flowop openfile name="openOP",filesetname="testF"
      flowop readwholefile name="readOP",filesetname="testF"
      flowop closefile name="closeOP"
    }
 }
 run 60
参数解释
define fileset

define fileset
修改文件仿真参数:

name

name=“testF”
文件名称:testF

entries

entries=10000
文件数量10000

filesize

filesize=16k
文件大小16k

prealloc

prealloc
预创建

path

path=“/tmp”
文件路径/tmp

dirwidth

dirwidth =100
文件深度100级

define proces

define proces
定义仿真进程

name

name=“readerP”
进程名称 readerP

instances

instances=2
进程数2

thread name

thread name=“readerT”
线程名readerT

instances

instances=3
线程数3

flowop openfile

flowop openfile
操作打开文件

name

name=“openOP”
任务名称openOP

filesetname

filesetname=“testF”
操作的文件testF

flowop

flowop readwholefile
读取文件

name

name=“readOP”
任务名称readOP

filesetname

filesetname=“testF”
操作的文件testF

flowop closefile

flowop closefile
关闭文件

name

name=“closeOP”
任务名称closeOP

run

run 60
运行时间60s

使用filebench中提供的负载

可以直接使用filebench中提供的负载,并修改相应的工作目录,文件大小等信息.
Filebench带有几个预定义的微观和宏工作负载,工作负载位于workloads/目录中

但不建议直接使用来自workloads/或/ usr / local / share / filebench / workloads /目录的工作负载文件。 主要原因是这些工作负载的大小不正确(例如,按照数据集大小)到特定系统。 例如,webserver工作负载的初始数据集大小仅略大于16MiB,这通常不是您想要测试包含多个千兆字节RAM系统的大小

故我们将这些提供的workload拷贝一份,并修改其以适应我们的测试

模拟webserver测试

先拷贝一份原生的配置文件,配置目录在下载的filebench源码下的workloads中

cp workloads/webserver.f  ~/mywebserver.f
cd ~/

修改mywebserver.f 文件配置,以适应我们的测试
一般修改dir, nfiles, filesize, nthreads等主要参数

set $dir=/mnt/ext4  /* 表示我们的工作目录是/mnt/ext4 */
set $nfiles=10000   /* 表示我们测10000个文件 */
set $meandirwidth=20 /* 目录深度 */
set $filesize=cvar(type=cvar-gamma,parameters=mean:16384;gamma:1.5)
set $nthreads=100 /* 100个线程 */
set $iosize=1m
set $meanappendsize=16k
参数说明
dir

dir
操作的目录

nfiles

nfiles
操作的文件数

meandirwidth

meandirwidth
目录的深度

filesize

filesize
文件的大小

nthreads

nthreads
线程数量

iosize

iosize
操作的io大小(带宽)

meanappendsize

meanappendsize
对文件操作每次操作的大小(平均追加大小)

修改后执行
filebench -f mywebserver.f (需要再上面配置文件末尾加上运行时间(e.g. run 60))

createfile测试

拷贝配置文件

cp /home/wind/testsoft/filebench/workloads/mycreatefiles.f   mycreatefiles.f

修改文件配置

set $dir=/mnt/mm  /* 表示我们的工作目录是/mnt/mm */
set $nfiles=1000000   /* 表示我们测1000000个文件 */
set $meandirwidth=100 /* 目录深度 */
set $filesize=cvar(type=cvar-gamma,parameters=mean:16384;gamma:1.5)
set $nthreads=100 /* 100个线程 */
set $iosize=1m
set $meanappendsize=16k

常用模拟测试配置

在这里插入图片描述

对比测试

对比相同文件大小

iosizeo = 1m
1M带宽

nfiles = 800
filesize = 1m
800个文件文件,1M的文件 2.3ms 总执行大小 800M
执行了800次文件操作 响应时间2.3ms 总操作1.8s 平均执行带宽796mb

nfiles = 50000
filesize = 16k
50000个文件,16k的文件 1.4ms 总执行大小 800M
执行了50000次文件操作 响应时间1.4ms 总操作50s 平均执行带宽156.2mb

对比看平均执行速度,速度越快性能越好

iosize对数据的影响

在这里插入图片描述

修改iosize为2m
发现当带宽大于写入文件大小时的两者数据差别不大

对比相同文件数量

修改nfiles = 50000(对比相同文件数量)
16k文件大小的情况iops响应时间1.2ms
在这里插入图片描述

可以测试相同文件大小的指标 看操作带宽
可以测试相同文件数量的指标 看响应iops时间
基本存储大文件的性能好些

测试结果

在这里插入图片描述

第一列 显示关闭文件次数 写入文件次数 创建文件次数
第二列 显示操作次数
第三列 显示每秒操作次数
第四列 表示每秒带宽
第五列表示 平均每次操作响应时间
第六七列显示 最快响应时间和最慢响应时间

测试时发现有文件没数据
在这里插入图片描述

这是因为这个是压力测试工具,存在写入失败也是正常情况

指标选择

每秒操作次数
平均每次操作响应时间

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐