比如,我执行了以下命令
root@t-04:/opt/my_filebench# filebench -f /opt/my_filebench/fileserver.f
执行完成时,输出的大体内容如下(因为我当时是根据官方示例将其英文描述翻译成中文并记录了下,此时就将翻译后的内容直接复制过来了,没有再根据自己的实例再逐行解释了):
...
00| 0.175: bigfileset populated: 100000 files, avg. dir. width = 20, avg. dir. depth = 3.8, 0 leafdirs, 12510.457MB total size
...
01| 61.853: Run took 60 seconds...
02| 61.855: Per-Operation Breakdown
03| statfile1 403700ops 6728ops/s 0.0mb/s 0.002ms/op [0.001ms - 2.320ms]
04| deletefile1 403700ops 6728ops/s 0.0mb/s 0.866ms/op [0.021ms - 244.148ms]
05| closefile3 403702ops 6728ops/s 0.0mb/s 0.664ms/op [0.001ms - 10.680ms]
06| readfile1 403705ops 6728ops/s 888.0mb/s 0.041ms/op [0.001ms - 7.077ms]
07| openfile2 403706ops 6728ops/s 0.0mb/s 1.238ms/op [0.005ms - 19.114ms]
08| closefile2 403715ops 6728ops/s 0.0mb/s 0.585ms/op [0.001ms - 13.162ms]
09| appendfilerand1 403723ops 6728ops/s 52.5mb/s 0.605ms/op [0.000ms - 10.248ms]
10| openfile1 403728ops 6728ops/s 0.0mb/s 1.210ms/op [0.007ms - 16.119ms]
11| closefile1 403738ops 6729ops/s 0.0mb/s 0.636ms/op [0.001ms - 13.222ms]
12| wrtfile1 403745ops 6729ops/s 834.3mb/s 0.808ms/op [0.012ms - 16.785ms]
13| createfile1 403748ops 6729ops/s 0.0mb/s 0.754ms/op [0.012ms - 16.790ms]
14| 61.855: IO Summary: 4440910 ops 74010.535 ops/s 6728/13457 rd/wr 1774.9mb/s 0.673ms/op
15| 61.855: Shutting down processes
以下是对以上输出内容的解释(如果觉得不好查看,可以将其复制到某文本编辑器中再查看可能好点),或者你可以直接查看其在github项目官网给出的英文解释:Example of workload with non-I/O flowops and iters= attribute
# 第00行,是将此正在执行的workload的相关定义信息打印出来了,此workload中定义了一个数据集叫bigfileset,它一共包含100000个小文件,平均每个目录下有
#20个文件,平均层级尝试为3.8,此数据集的总大小为12510.457MB。也就是说你被测试的目录至少要留出12510.457MB的空闲空间才能正常执行此workload。最前面的
#数字“0.175”是说从回车到执行此条子命令一共花费了多少时间,后面每行首的数字的意思都是类似
# 第01行,说明真正执行第03~13行这些flowop一共花费了60s(这个是通过此文件最后一行"run 60"定义的)
# 第03行,说明在“61.855”这个时间点,此workload中定义的所有线程中的任务都结束了
# 第03~13行各列代表的意义分别是(以第03行为例说明):
# statfile1:flowop名称
# 403700ops:这个flowop在所有线程中在60s内时间内执行的操作数目
# 6728ops/s:平均每秒执行的操作数目即(403700ops/60s)=6728ops
# 0.0mb/s:平均吞吐率(filebench自己底层计算得来)。
# 0.002ms/op:平均每个flowop的时延
# [0.001ms - 2.320ms]:所有线程中,flowop执行时的最小时延与最大时延
# 第14行,从左到右的数据代表的意义分别是:
# "4440910 ops":在60s内处理的总ops数目
# "74010.535 ops/s":平均每秒处理的ops数目即"(在60s内处理的总ops数目)/60"即(4440910 ops)/60s=74010.535 ops/s
# "6728":总体上读操作吞吐率=(所有读相关操作处理的ops之和/60)即(403705 ops)/60s=6728 ops/s。此处403705来自06 行的403705,因为所有的flowop中只有这一个操作与读有关
# "13457":总体上写操作吞吐率=(所有写相关操作处理的ops之和/60)即(403723 ops + 403745 ops)/60s=13457 ops/s。此处403723、403745分别来自09行、12行,因为所有的flowop中这两个操作与写有关
# "1774.9mb/s":总体吞吐率即"所有读写操作吞吐率之和"。即03-13行: 888.0mb/s + 52.5mb/s + 834.3mb/s = 1774.9mb/s
# "0.673ms/op":总体上每个ops的延迟时间。(0.002 +0.866+0.664+0.041+1.238+0.585+0.605+1.210+0.636+0.808+0.754) / 11 = 0.673ms/op
其中fileserver.f(其实就是完成安装好后filebench给出的fileserver.f示例文件)文件大概内容应该是如下的(针对此类.f文件的语法,官方给出一种语言 Workload Model Language (WML),我也没有完全仔细去学,这两天就大概看了下示例能大概看懂一些常见语法):
set $dir=/tmp
set $nfiles=100000
set $meandirwidth=20
set $filesize=cvar(type=cvar-gamma,parameters=mean:131072;gamma:1.5)
set $nthreads=50
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 createfile name=createfile1,filesetname=bigfileset,fd=1
flowop writewholefile name=wrtfile1,srcfd=1,fd=1,iosize=$iosize
flowop closefile name=closefile1,fd=1
flowop openfile name=openfile1,filesetname=bigfileset,fd=1
flowop appendfilerand name=appendfilerand1,iosize=$meanappendsize,fd=1
flowop closefile name=closefile2,fd=1
flowop openfile name=openfile2,filesetname=bigfileset,fd=1
flowop readwholefile name=readfile1,fd=1,iosize=$iosize
flowop closefile name=closefile3,fd=1
flowop deletefile name=deletefile1,filesetname=bigfileset
flowop statfile name=statfile1,filesetname=bigfileset
}
}
echo "File-server Version 3.0 personality successfully loaded"
run 60