best file system performance analysis tool ?

Larry McVoy lm at bitmover.com
Sun Nov 22 02:40:38 UTC 2009


On Sat, Nov 21, 2009 at 10:20:05PM +0000, Peter Grandi wrote:
> > Hi , Could please redirect me to few of the best file system
> > analysis tool available in open source community. [ ... ]
> 
> Most such tools are not very good, and anyhow it seems really
> difficult for most people who do storage performance testing to
> use them properly, as many "benchmarks" I see are mostly
> meaningless.

Yup, I couldn't agree more.

I dunno if this is helpful or not, but I used to do FS performance work
and wrote a little tool called lmdd (I'm lm :).  It's a lot like dd
except it spits out perf numbers, does randoms, all sorts of stuff.
At some point in the past most of the disk drive people were using
it for testing.

Part of lmbench, get that, compile it, then find bin/lmdd and play
around.  There is a man page in the test suite.  Hang on, here ya go.
Read the source, there are a few more interesting options.

LMDD(8)                             LMBENCH                            LMDD(8)

NAME
       lmdd - move io for performance and debugging tests

SYNOPSIS
       lmdd [ option=value ] ...

DESCRIPTION
       lmdd  copies a specified input file to a specified output with possible
       conversions.  This program is primarily useful for timing I/O since  it
       prints out the timing statistics after completing.

OPTIONS
       if=name        Input  file is taken from name; internal is the default.
                      internal  is  a  special  file  that  acts  like   Sun's
                      /dev/zero,  i.e.,  it provides a buffer of zeros without
                      doing a system call to get them.
                      The following file names are taken to mean the  standard
                      input: -, 0, or stdin.

       of=name        Output file is taken from name; internal is the default.
                      internal is a special file  that  acts  like  /dev/null,
                      without doing a system call to get rid of the data.
                      The  following file names are taken to mean the standard
                      output: -, 1, or stdout.
                      The following file names are taken to mean the  standard
                      error: 2, or stderr.

       bs=n           Input  and  output  block  size  n bytes (default 8192).
                      Note that this is different from dd(1),  it  has  a  512
                      byte  default.    Also  note  that the block size can be
                      followed by 'k' or 'm' to indicate kilo bytes (*1024) or
                      megabytes (*1024*1024), respectively.

       ipat=n         If  n  is  non  zero, expect a known pattern in the file
                      (see opat).  Mismatches will  be  displayed  as  "ERROR:
                      off=%d  want=%x got=%x".  The pattern is a sequence of 4
                      byte integers with the first 0, second  1,  and  so  on.
                      The default is not to check for the pattern.

       opat=n         If n is non zero, generate a known pattern on the output
                      stream.  Used for  debugging  file  system  correctness.
                      The default is not to generate the pattern.

       mismatch=n     If  n  is  non zero, stop at the first mismatched value.
                      Used with ipat.

       skip=n         Skip n input blocks before starting copy.

       fsync=n        If n is non-zero,  call  fsync(2)  on  the  output  file
                      before exiting or printing timing statistics.

       sync=n         If  n is non-zero, call sync(2) before exiting or print-
                      ing timing statistics.

       rand=n         This argument, by default off, turns on random behavior.
                      The  argument  is not a flag, it is a size, that size is
                      used as the upper bound for the seeks.  Also  note  that
                      the block size can be followed by 'k' or 'm' to indicate
                      kilo bytes (*1024) or megabytes (*1024*1024),

       flush=n        If n is non-zero and mmap(2) is available, call msync(2)
                      to invalidate the output file.  This flushes the file to
                      disk so that you don't have unmount/mount.  It is not as
                      good as mount/unmount because it just flushes file pages
                      - it misses the indirect blocks which are still  cached.
                      Not supported on all systems, compile time option.

       rusage=n       If  n  is  non-zero,  print rusage statistics as well as
                      timing statistics.  Not supported on all  systems,  com-
                      pile time option.

       count=n        Copy only n input records.

EXAMPLES
       This  is  the  most common usage, the intent is to measure disk perfor-
       mance.  The disk is a spare partition mounted on /spare.

           # mount /spare
           # lmdd if=internal of=/spare/XXX count=1000 fsync=1
           7.81 MB in 3.78 seconds (2.0676 MB/sec)

           : Flush cache
           # umount /spare
           # mount /spare

           # lmdd if=/spare/XXX of=internal
           7.81 MB in 2.83 seconds (2.7611 MB/sec)

AUTHOR
       Larry McVoy, lm at sun.com

(c)1994 Larry McVoy                 $Date$                             LMDD(8)
-- 
---
Larry McVoy                lm at bitmover.com           http://www.bitkeeper.com




More information about the Ext3-users mailing list