nicky veitch's Weblog nicky veitch's Weblog

Tuesday Apr 19, 2005

I graduated college some time in the dark distant past and started working for Sun Ireland. The group I joined consisted of 2 engineers and an intern. This was the original Performance PIT, benchmarking each build of Solaris using perhaps a dozen benchmarks on a build by build basis. Roll on a number of years and the team has expanded to almost a dozen people with hundreds of benchmarks executed on each build of Solaris, to say nothing of the analysis. Welcome to the wonderful world of the Performance lifestyle.

In the last few months we have moved labs as we increase coverage and prepare to ramp up for testing of open solaris. The new lab (pictured above) provides ample parking for all our machines, although our site facilities may differ on the point.

Having seen the recent release of filebench to source forge by Richard I though I might post a bit about my experiences using the filebench framework. Filebench is a frame work which allows the user emulate an applications interaction with the filesystem aka personalities.

By default filebench has the following predefined personalities

Application personalities

  • Varmail - multi threaded postmark style workload
  • File server - similair to Spec sfs , the nfs benchmark
  • Oltp - a database emulator modelled on Oracle 9i access patterns
  • Web server
  • Web proxy

    Micro-benchmarks

  • Copy files
  • Create files
  • Random read
  • Random write
  • Single stream read
  • Single stream write
  • Multi stream write

    Filebench - getting started

    I have only used Filebench on Solaris (x86/sparc) but I am eagerly waiting to get my hands on the Linux distro. To install on Solaris is the same as adding any other package,

    # pkgadd -d . filebench 
    this installs the package in /opt/filebench. To execute a single personality
    # bin/filebench
    filebench> load webproxy
     1641: 5.761: Usage: set $dir=
     1641: 5.761:        set $filesize=    defaults to 16384
     1641: 5.761:        set $nfiles=     defaults to 1000
     1641: 5.761:        set $nthreads=   defaults to 100
     1641: 5.761:        set $meaniosize= defaults to 16384
     1641: 5.761:        set $meandirwidth= defaults to 1000000
     1641: 5.761: (sets mean dir width and dir depth is calculated as log (width, nfiles)
     1641: 5.761:  dirdepth therefore defaults to dir depth of 1 as in postmark
     1641: 5.761:  set $meandir lower to increase depth beyond 1 if desired)
     1641: 5.761:
     1641: 5.761:        run runtime (e.g. run 60)
    filebench> set $dir=/tmp
    filebench> set $nfiles=100
    filebench> create filesets
     1641: 80.772: Fileset bigfileset: 100 files, avg dir = 1000000.0, avg depth = 0.3, mbytes=1
     1641: 80.772: Creating fileset bigfileset...
     1641: 80.853: Preallocated 86 of 100 of fileset bigfileset in 1 seconds
    filebench> create files
     1641: 90.412: Creating/pre-allocating files
    filebench> create processes
     1641: 97.513: Starting 1 proxycache instances
     1644: 98.519: Starting 100 proxycache threads
    filebench> stats clear
    filebench> sleep 120
     1641: 112.585: Running...
     1641: 233.619: Run took 120 seconds...
    filebench> stats snap
     1641: 271.376: IO Summary:      5986660 ops 36127.5 ops/s, (9507/1901 r/w) 103.7mb/s,    117us cpu/op,   0.1ms latency
    filebench> shutdown processes
     1641: 309.257: Shutting down processes
    filebench> quit