Filebench 使用手册
介绍
Filebench 是一个文件系统和存储基准,可以生成各种各样的工作负载。与典型的基准测试不同,它非常灵活,允许使用其广泛的工作负载模型语言(WML) 指定应用程序的 I/O 行为。用户可以从头开始描述所需的工作负载,也可以使用 Filebench 附带的工作负载特性(例如,邮件、Web、文件和数据库服务器工作负载)(无论是否修改)。Filebench 同样适用于微观和宏观基准测试,设置快速且相对易于使用。
快速入门指南
为了快速向 Filebench 介绍新用户,我们使用两个示例来演示两种不同的典型 Filebench 工作流程: 1)在 [WML](工作负载模型语言)中描述用户定义的工作负载并生成工作负载;2) 生成预定义的 Filebench 工作负载之一。在这两种情况下,首先需要安装 Filebench。它就像下载发行版 tarball、解压它,然后运行传统configure的make、、和sudo make install命令一样简单。如果您想从 git 存储库中的源代码构建 Filebench,这会有点复杂,您可以在 [此处](Building Filebench) 阅读更多相关信息。
本指南中的描述假定您使用Filebench 1.5-alpha1或更高版本。
示例 1:用户定义的工作负载
第一步是用 WML 语言创建工作负载的描述(所谓的工作负载个性)。通常,工作负载特征存储在带有.f扩展名的文件中。在这个例子中,我们描述了一个非常简单的工作负载,它由两个进程组成,每个进程有三个线程。每个线程不断地从多个文件中挑选一个文件,读取它,然后关闭该文件。这是相应的工作负载个性:
01 define fileset name="testF",entries=10000,filesize=16k,prealloc,path="/tmp"
02
03 define process name="readerP",instances=2 {
04 thread name="readerT",instances=3 {
05 flowop openfile name="openOP",filesetname="testF"
06 flowop readwholefile name="readOP",filesetname="testF"
07 flowop closefile name="closeOP"
08 }
09 }
10
11 run 60
Filebench中的四个主要实体是文件集、由线程组成的进程和流程。在第一行中,我们定义了一个文件集,其中包含 10,000 个目录中每个大小为 16KiB 的文件。Filebench 被指示在执行实际工作负载之前 _prealloc_ate 文件集中的所有文件。/tmp
在第三行和第四行中,我们定义了两个相同的进程,每个进程由三个相同的线程组成。Filebench 中的每个线程都会循环重复其中定义的流程(操作)。第 05-07 行描述了构成线程的流程:在“testF”文件集中打开一个文件,完全读取该文件,然后关闭它。最后,在第 11 行中,我们指示运行工作负载 60 秒。
在更复杂的工作负载中,可以定义任意数量的文件集、多个不同的进程和线程、使用各种流程和属性等等。请参阅 [完整的 WML 词汇表](工作负载模型语言)以了解详细信息,并参阅功能页面以获取所有功能的简短摘要。
假设个性保存在readfiles.f文件中,然后可以通过运行filebench -f readfiles.f命令生成相应的工作负载。
示例 2:预定义的工作负载
Filebench 带有几个预定义的微和宏工作负载(例如,网络服务器、文件服务器、邮件服务器),它们也在 WML 中进行了描述,与上面示例 1中的工作负载没有什么不同。在源代码树中,工作负载位于workloads/目录中,并且通常在安装/usr/local/share/filebench/workloads/期间安装make install(尽管这可能因安装而异)。
我们不建议直接使用来自workloads/或/usr/local/share/filebench/workloads/目录的工作负载文件。主要原因是这些工作负载的大小(例如,就数据集大小而言)不适合特定系统。例如,网络服务器工作负载的初始数据集大小仅略大于 16MiB,这通常不是您想要测试包含数 GB RAM 的系统的大小。
因此,将网络服务器工作负载复制到任何其他目录:
cp /usr/local/share/filebench/workloads/webserver.f mywebserver.f
entries然后通过将文件数(文件集的属性)设置为适当的值来编辑复制的文件以增加数据集大小。最后,运行工作负载:
filebench -f mywebserver.f