Filebench 是一个文件系统和存储的benchmark,可生成大量的工作负载。 与典型的基准测试不同,它非常灵活,可允许使用其广泛的工作负载模型语言(WML)指定应用程序的 I/O 行为。 语言(WML)来指定应用程序的 I/O 行为。 用户既可以从头开始描述所需的工作负载,也可以使用用户既可以从头开始描述所需的工作负载,也可以使用 Filebench 提供的工作负载个性(无论修改与否,例如邮件、网络、文件和数据库服务器工作负载)。 Filebench 同样适用于同样适用于微观和宏观基准测试,并且设置工作负载快捷,使用相对简单。
安装
Step 0: 拷贝代码
git clone https://github.com/filebench/filebench.git
Step 1: 自动工具脚本生成
repo 中不包含 Makefile.in 和 configure 文件,因此必须手动生成。为此,请确保已安装 libtoolize 和 automake 工具,并在终端命令行运行以下命令:
libtoolize
aclocal
autoheader
automake --add-missing
autoconf
Step 2: 编译安装
请确保系统中的 yacc 和 lex 可用。
sudo apt-get install flex
sudo apt-get install bison
然后进入filebench目录中进行配置、编译和安装(不要使用超级用户):
./configure
make
sudo make install
filebench使用说明以及工作负载举例
本例子中,假定Filebench的版本为 1.5-alpha1 或更高版本。 Filebench分别介绍工具两种不同的典型负载的工作流程:
- 用户使用工作负载模型语言(WML)描述自定义的工作负载并生成工作负载;
- 使用Filebench预定义的工作负载(在workloads目录下)。
举例 1: 用户自定义工作负载
Step 1:用 WML 语言创建工作负载描述。通常情况下,创建以”.f “为扩展名的工作负载文件中。在本例中,描述了一个非常简单的工作负载,它由两个进程组成,每个进程有三个线程。每个线程不断从许多文件中选择一个文件,读取文件,然后关闭文件。下面是相应的工作负载特性:
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
Filebench 的四个主要实体是 filesets
, processes
, threads
, and flowops
. 在在第一行中定义了fileset文件集包括5个参数,name
是文件集所在目录的命名,entries
表示文件集中文件的数量本例中设置 10,000 个文件, filesize
表示文件集中每个文件的大小,本例中设置 16KiB,prealloc
表示需要预创建文件,path
表示filebench创建文件集的目录(一般为文件系统挂载点根目录), 本例中设置 /tmp 为文件集路径。
在第二第三行中,process
定义了两个相同的进程名字为readerP,每个进程由三个相同的线程thread
组成名字为readerT。Filebench 中的每个线程都在循环中重复其定义的 flowops
(文件系统操作),在这个例子中主要描述了每个线程循环执行的流程在 “testF “文件集中依次打开文件、完全读取文件并关闭文件。 最后一行 run 60
定义了线程执行的时间,以秒为单位。
最后,为了创建复杂的工作负载中,例如,如何定义任意数量的文件集、多个不同的进程和线程不同的进程和线程,使用各种 flowops 和属性等。请参考完整的 WML 词汇表,网址为 https://github.com/filebench/filebench/wiki/Workload-model-language
Step 2: 禁用进程地址空间随机化
启用终端命令行运行以下命令:
sudo bash -c "echo 0 > /proc/sys/kernel/randomize_va_space"
Step 3: Save and run
假设工作负载代码保存在 readfiles.f
文件中,在 readfiles.f
文件所在的目录下,启用终端命令行运行以下命令:
sudo filebench -f varmail
举例 2: 预定义工作负载
Filebench 自带多个预定义的微基准工作负载和宏基准工作负载(例如,网络服务器webserver、文件服务器fileserver、邮件服务器varmail等),这些负载也在 WML 中进行了详细描述。大体上与上述例 1 中的工作负载差别不大,这些负载安装完成后通常位于/usr/local/share/filebench/workloads
目录下。下面介绍集中常用的宏基准工作负载:
- Varmail工作负载模拟邮件服务器,执行许多元数据密集型的系统调用(例如creat和unlink)。为了模拟邮件的发送删除的情景,varmail进行频繁地创建和删除目录下的文件。为了模拟用户收到电子邮件立即保存的情景,varmail在每次创建完文件后,都会调用fsync传入日志,最终将数据持久化到存储设备。
- Fileserver模拟文件服务器是一个数据密集型的工作负载,涉及到大量读写大文件的I/O请求。但是只有少量的元数据更新和fsync请求。
- Webserver是读密集型工作负载。模拟网页服务器,对大量的小文件进行读取。在该工作负载下只有少量更新元数据的I/O。
以Varmail工作负载为例介绍代码流程:
set $dir=/tmp
set $nfiles=1000
set $meandirwidth=1000000
set $filesize=cvar(type=cvar-gamma,parameters=mean:16384;gamma:1.5)
set $nthreads=16
set $iosize=1m
set $meanappendsize=16k
define fileset name=bigfileset,path=$dir,size=$filesize,entries=$nfiles,dirwidth=$meandirwidth,prealloc=80
define process name=filereader,instances=1
{
thread name=filereaderthread,memsize=10m,instances=$nthreads
{
flowop deletefile name=deletefile1,filesetname=bigfileset
flowop createfile name=createfile2,filesetname=bigfileset,fd=1
flowop appendfilerand name=appendfilerand2,iosize=$meanappendsize,fd=1
flowop fsync name=fsyncfile2,fd=1
flowop closefile name=closefile2,fd=1
flowop openfile name=openfile3,filesetname=bigfileset,fd=1
flowop readwholefile name=readfile3,fd=1,iosize=$iosize
flowop appendfilerand name=appendfilerand3,iosize=$meanappendsize,fd=1
flowop fsync name=fsyncfile3,fd=1
flowop closefile name=closefile3,fd=1
flowop openfile name=openfile4,filesetname=bigfileset,fd=1
flowop readwholefile name=readfile4,fd=1,iosize=$iosize
flowop closefile name=closefile4,fd=1
}
}
echo "Varmail Version 3.0 personality successfully loaded"
run 60
在varmail.f
文件中,前面set
部分为设置测试文件集的全局参数。dir
为文件集所在路径(也可理解为文件集进行dir目录下的文件系统性能的测试),可以修改为任何你想测试文件系统所在的挂载点目录下。nfiles
为测试文件集中总文件的数目。meandirwidth
为测试文件集平均每个目录下文件的数量。filesize
为文件大小,cvar用于设置文件大小的分布形式,其中mean:16384
表示文件集中文件平均大小。nthreads
表示总共线程数目。iosize
表示系统I/O请求的平均大小。后续define与自定义中的解释类似,其中prealloc=80表示预处理系数。下面执行过程中分别有nthreads
个线程循环执行flowop的操作,分别是删除文件,创建文件,追加写文件,持久化,关闭文件,打开文件,读取整个文件等。
有关如何扩展 Filebench 工作负载的详细讨论,请访问 https://github.com/filebench/filebench/wiki/Scaling-Filebench-workloads
问题反馈
要询问有关 Filebench 的问题、报告错误或申请新功能,您可以使用 GitHub 的问题跟踪系统。这是用户支持和 Bug 跟踪的中心,网址是 https://github.com/filebench/filebench/issues