I'd like to take this opportunity to post some general information on what I 
picked up recently while using filebench to generate some workloads for file 
system performance. This will be spread across several replies to this topic.

The filebench binaries (for SPARC and x86), as well as filebench source, are 
available on sourceforge (www.sourceforge.net/projects/filebench). This 
discussion, at least for now, will assume Solaris (either SPARC or x86) for 
discussions on directory and file names - all the other stuff will be OS 
independent. That is, full pathnames referencing the location of filebench 
files and directories assume a Solaris installation. All the other bits, such 
as running filebench, creating profiles, etc, is OS independent.

The filebench package I'm currently using is:

solaris10> pkginfo -l filebench
   PKGINST:  filebench
      NAME:  FileBench
  CATEGORY:  application
      ARCH:  sparc,i386
   VERSION:  20 Jul 05
   BASEDIR:  /opt
    VENDOR:  Richard Mc Dougall
      DESC:  FileBench
    PSTAMP:  1.64.5_s10_x86_sparc_PRERELEASE
  INSTDATE:  Aug 01 2005 14:32
     EMAIL:  [EMAIL PROTECTED]
    STATUS:  completely installed
     FILES:      266 installed pathnames
                   6 linked files
                  28 directories
                  67 executables
                   2 setuid/setgid executables
               33368 blocks used (approx)


First - a couple things to be aware of regarding the state of filebench and 
documentation. Aside from the output of "/opt/filebench/bin/filebench -h" 
(which is actually very usefull - try it!), there are two text files in 
filebench/docs,, README and README.benchpoint. That's pretty much it for 
filebench documentation for right now. As we work on fixing that, we will use 
this forum to share information and help close the documentation gap. We 
enccourage others to share what they have learned, and of course post questions 
and queries here.

The README.benchpoint file may cause some confusion. Benchpoint, so far as I 
can tell, is a generic name used to describe the filebench user environment 
and/or wrapper script (I think...I was not privy to this work, so I may be 
wrong). The important thing to note is that the README.benchpoint file refers 
to directories in the filebench hierarchy that do not exist - specifically, 
benchpoint/config. The current filebench distribution includes a config 
directory under /opt/filebench (/opt/filebench/config), which is where the 
profiles (.prof files) and function files (.func) reside. Also, there is a 
benchpoint script in /opt/filebench/bin, which simply informs the user that 
runbench should be used instead of benchpoint. So I think it's fair to assume 
that we can remove references to benchpoint in filebench, and focus on what the 
current distribution provides, and how to use it.

The top level filebench directory (/opt/filebench on Solaris) will contain 6 
subdirectories.
bin - filebench command binaries.
config - preconfigued profiles (.prof) and function (.func) files, to get 
things started.
docs - README and README.benchpoint. More to follow.
scripts - various system stat gathering scripts, and other scripted components 
of the filebench framework.
workloads - configured flowop (.f) files, designed to simulate specific 
workloads.
xanadu - A framework for post-processing results data, including system 
statistics.

A few additional points need to be made on the workloads and xanadu 
directories...
The .f files in the workloads directory are files written in the 'f' language, 
which is a workload modeling language developed as part of the filebench 
framework. It is designed to allow for taking known attributes of workload, and 
representing them in a descriptive language that is than used to generate a 
load. The syntax, semantics and grammer rules for writing custom .f scripts is 
not yet documented. /opt/filebench/bin/filebench -h will output a summary of 
the 'f' language definition. That, coupled with reading existing .f scripts, is 
sometimes enough to begin creating your own custom workflows. But, we still 
need to get this documented.

The workloads in the workloads directory fall into one of two categories - 
micro and macro. The  micro workloads are those prefixed with filemicro_XXX.f. 
As they name implies, these workloads represent lower-level file IO operations 
that are typically a subset of what a macro workload does. The macro workloads, 
such as oltp.f and varmail.f, use descriptive names to represent they type of 
workload they are designed to generate.

Xanadu is a framework developed in the Performance & Availability Engineering 
(PAE) group at Sun (the group Richard and I work for). It's a very slick set of 
tools designed to grab loads of benchmark-generated output (including the 
output of system stat tools like mpstat(1)), and provide summary tables and 
graphs of the data. Additionally, Xanadu is designed to make it easy to compare 
data from different benchmark runs. We will further explore using Xanadu in the 
next post.

With that, the information below was created by Richard McDougall. It is a 
cut-and-paste from Richard's internal (Sun internal) WEB site, and provides a 
great jumpstart to using filebench.
Installing

The workspace is at /home/rmc/ws/filebench-gate, the gate log is here, and a 
download of a filebench package (Filebench) here.

# zcat 1.28_s10_x86_sparc.tar.Z |tar xvf -
...
# pkgadd -d 1.28_s10_x86_sparc 

The following packages are available:
  1  filebench     FileBench
                   (sparc,i386) 15 Oct 04

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: 1

Processing package instance  from 

## Processing package information.
## Processing system information.
   10 package pathnames are already properly installed.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.

Installing FileBench as 

## Installing part 1 of 1.
/opt/filebench/README
/opt/filebench/README.benchpoint
/opt/filebench/bin/Comm.pl
/opt/filebench/bin/benchpoint
/opt/filebench/bin/i386/fastsu
/opt/filebench/bin/i386/filebench
/opt/filebench/bin/i386/gnuplot
/opt/filebench/bin/sparcv9/fastsu
/opt/filebench/bin/sparcv9/filebench
/opt/filebench/bin/sparcv9/gnuplot
/opt/filebench/runscripts/runem.sh
/opt/filebench/tools/collect_iostat
/opt/filebench/tools/collect_lockstat
/opt/filebench/tools/collect_vmstat
/opt/filebench/tools/filebench_plot
/opt/filebench/tools/filebench_summary
/opt/filebench/workloads/bringover.f
/opt/filebench/workloads/createfiles.f
/opt/filebench/workloads/deletefiles.f
/opt/filebench/workloads/fileserver.f
/opt/filebench/workloads/multistreamread.f
/opt/filebench/workloads/oltp.f
/opt/filebench/workloads/postmark.f
/opt/filebench/workloads/randomread.f
/opt/filebench/workloads/singlestreamread.f
/opt/filebench/workloads/varmail.f
/opt/filebench/workloads/webproxy.f
/opt/filebench/workloads/webserver.f
[ verifying class  ]

Installation of  was successful.

Getting Started Running Filebench

Example varmail run:

The workloads have been encapsulated in workload definition files
and the environment is now quite simple to drive.

There are simple workload personalities, which configure the type
of workload to simulate. An example is a /var/mail directory
simulation (like postmark):

$ /opt/filebench/bin/filebench
filebench> load varmail
 8395: 3.898: Varmail personality successfully loaded
 8395: 3.899: Usage: set $dir=<dir>
 8395: 3.900:        set $filesize=<size>    defaults to 16384
 8395: 3.900:        set $nfiles=<value>     defaults to 1000
 8395: 3.901:        set $dirwidth=<value>   defaults to 20
 8395: 3.901:        set $nthreads=<value>   defaults to 1
 8395: 3.902:        set $meaniosize=<value> defaults to 16384
 8395: 3.902:        run <runtime>
filebench> set $dir=/tmp
filebench> run 10
 8395: 14.886: Fileset mailset: 1000 files, avg dir = 20, avg depth = 2.305865, 
mbytes=15
 8395: 15.301: Preallocated fileset mailset in 1 seconds
 8395: 15.301: Starting 1 filereader instances
 8396: 16.313: Starting 1 filereaderthread threads
 8395: 19.323: Running for 10 seconds...
 8395: 29.333: Stats period = 10s
 8395: 29.347: IO Summary:      21272 iops 2126.0 iops/s, (1063/1063 r/w)  
32.1mb/s,    338us cpu/op,   0.3ms latency
 8395: 29.348: Shutting down processes
filebench> stats dump stats.varmail
filebench> quit

This run did 21272 logical operations per second - e.g. 21272 open,
close, read/write etc...

$ more stats.varmail

Flowop totals:
closefile4                492ops/s   0.0mb/s      0.0ms/op       31us/op-cpu
readfile4                 492ops/s   7.1mb/s      0.6ms/op      171us/op-cpu
openfile4                 492ops/s   0.0mb/s      5.4ms/op      653us/op-cpu
closefile3                492ops/s   0.0mb/s      1.1ms/op      150us/op-cpu
appendfilerand3           492ops/s   7.7mb/s      0.0ms/op       55us/op-cpu
readfile3                 492ops/s   7.2mb/s      0.6ms/op      163us/op-cpu
openfile3                 492ops/s   0.0mb/s      5.1ms/op      623us/op-cpu
closefile2                492ops/s   0.0mb/s      0.9ms/op      136us/op-cpu
appendfilerand2           492ops/s   7.7mb/s      0.1ms/op       67us/op-cpu
createfile2               492ops/s   0.0mb/s      8.9ms/op     1151us/op-cpu
deletefile1               492ops/s   0.0mb/s      8.4ms/op     1007us/op-cpu

IO Summary:        649116 iops   5409.0 iops/s,      983/983 r/w    29.7mb/s,   
  1461uscpu/op


Running multiple workloads automatically

$ mkdir mybench
$ cd mybench
$ cp /opt/filebench/config/filemicro.prof mybench.prof
 or
$ cp /opt/filebench/config/filemacro.prof mybench.prof

$ vi mybench.prof

set your stats dir to where you want the logs to go...

$ /opt/filebench/bin/benchpoint mybench

$ browse the index.html in the stats dir



Application-Emulation Workloads Currently Available in Filebench package

      varmail
      A /var/mail NFS mail server emaulation, following the workload of 
postmark, but multi-threaded. The workload consists of a multi-threaded set of 
open/read/close, open/append/close and deletes in a single directory.
      fileserver
      A file system workload, similar to SPECsfs. This workload performs a 
sequence of creates, deletes, appends, reads, writes and attribute operations 
on the file system. A configurable hierarchical directory structure is used for 
the file set.
      oltp
      A database emulator. This workload performance transactions into a 
filesystem using an I/O model from Oracle 9i. This workload tests for the 
performance of small random reads & writes, and is sensitive to the latency of 
moderate (128k+) synchronous writes as in the log file. It by default lanches 
200 reader processes, 10 processes for asyncrhonous writing, and a log writer. 
The emulation includes use of ISM shared memory as per Oracle, Sybase etc which 
is critical to I/O efficiency (as_lock optimizations).
      dss
      DSS Database (not yet in pkg)
      webserver
      A mix of open/read/close of multiple files in a directory tree, plus a 
file append (to simulate the web log). 100 threads are used by default. 16k is 
appended to the weblog for every 10 reads.
      webproxy
      A mix of create/write/close, open/read/close, delete of multiple files in 
a directory tree, plus a file append (to simulate the proxy log). 100 threads 
are used by default. 16k is appended to the log for every 10 read/writes. 

Micro-benchmark Workloads Currently Available in Filebench package

      copyfiles
      A copy of a large directory tree. This workload creates a hierarchical 
directory tree, then measures the rate at which files can be copied from the 
source tree to a new tree. A single thread is used by default, although this is 
configurable.
      createfiles
      Create a directory tree and fill files. A populate of files of specified 
sizes a directory tree. File sizes are chosen according to a gamma distribution 
of 1.5, with a mean size of 16k.
      randomread
      A multi-threaded read of a single large file, defaulting to 8k reads. A 
single thread is used by default, although configurable by $nthreads.
      randomwrite
      A multi-threaded write of a single large file, defaulting to 8k writes. A 
single thread is used by default, although configurable by $nthreads.
      singlestreamread
      A sequential read of a large file. 1MB reads are used by default.
      singlestreamwrite
      A sequential write of a large file. 1MB writes are used by default.
      A sequential read of 4 large files, each with their own reader thread. 
1MB reads are used by default.
      multistreamwrite
      A sequential write of 4 large files, each with their own writer thread. 
1MB writes are used by default. 

Recommended parameters

      Recommended defaults for small configurations (1 disk):
      For fileserver bringover createfiles deletefiles varmail webproxy 
webserver:
            set $nfiles=50000 For randomread singlestreamread multistreamread 
singlestreamwrite multistreamwrite:
            set $filesize=1g For oltp:
            set $filesize=1g 
      Recommended defaults for large configurations (20+ disks):
      For fileserver bringover createfiles deletefiles varmail webproxy 
webserver:
            set $nfiles=100000 For randomread randomwrite
            set $filesize=5g set $nthreads=256 For singlestreamread 
multistreamread singlestreamwrite multistreamwrite:
            set $filesize=5g For oltp:
            set $filesize=5g 

Workload Model Language Example (Subject to lots of change at the moment)

#!/home/rmc/ws/filebench-rmc/src/filebench/filebench -f

debug 1

define file 
name=bigfile1,path=$datadir1/myrandfile,size=50g,prealloc,reuse,paralloc

define process name=rand-read,instances=1
{
  thread name=rand-thread,memsize=10m,instances=100
  {
    flowop read name=rand-read1,filename=bigfile1,iosize=$iosize,random,directio
    flowop eventlimit name=rand-rate
  }
}


Workload Model Language Spec (Subject to lots of change at the moment)

Usage:
filebench: interpret f script and generate file workload
Options:
   [-h] Display verbose help
   [-p] Disable opening /proc to set uacct to enable truss

'f' language definition:

Variables:
set $var = value
    $var   - regular variables
    ${var} - internal special variables
    $(var) - environment variables


define file name=<name>,path=<pathname>,size=<size>
                        [,paralloc]
                        [,prealloc]
                        [,reuse]

define fileset name=<name>,path=<pathname>,entries=<number>
                        [,dirwidth=[width]
                        [,dirgamma=[100-10000] (Gamma * 1000)
                        [,sizegamma=[100-10000] (Gamma * 1000)
                        [,prealloc=[percent]]

define process name=<name>[,instances=<count>]
{
  thread ...
  thread ...
  thread ...
}


  thread  name=<name>[,instances=<count>]

  {
    flowop ...
    flowop ...
    flowop ...
  }

flowop [aiowrite|write|read] name=<name>, 
                       filename=<fileobjname>,
                        iosize=<size>
                        [,directio]
                        [,dsync]
                        [,iters=<count>]
                        [,random]
                        [,workingset=<size>]

flowop aiowait name=<name>,target=<aiowrite-flowop>

flowop sempost name=<name>,target=<semblock-flowop>,
                        value=<increment-to-post>

flowop semblock name=<name>,value=<decrement-to-receive>,
                        highwater=<inbound-queue-max>

flowop block name=<name>

flowop hog name=<name>,value=<number-of-mem-ops>

flowop wakeup name=<name>,target=<block-flowop>,

flowop eventlimit name=<name>
flowop bwlimit name=<name>

flowop [readfile|writefile] name=<name>, 
                       filename=<fileobjname|filesetname>

Commands:

eventgen rate=<rate>
create [files|processes]
stats [clear|snap]
stats command "shell command $var1,$var2..."
stats directory <directory>
sleep <sleep-value>
quit
This message posted from opensolaris.org
_______________________________________________
perf-discuss mailing list
perf-discuss@opensolaris.org

Reply via email to