nhfsstone

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
NHFSSTONE(8)							 NHFSSTONE(8)



NAME
       nhfsstone - Network File System benchmark program

SYNOPSIS
       nhfsstone  [ -v ] [[ -t secs ] | [ -c calls ]] [ -l load ] [ -p nprocs
       ] [ -m mixfile ] [ dir ]...

DESCRIPTION
       nhfsstone (pronounced n-f-s-stone, the "h" is silent) is used on a NFS
       client  to  generate  an	 artificial load with a particular mix of NFS
       operations. It reports the average response time of the server in mil-
       liseconds  per  call  and  the  load in calls per second.  The program
       adjusts its calling patterns based on the client’s kernel NFS  statis-
       tics and the elapsed time.  Load can be generated over a given time or
       number of NFS calls.

       Because it uses the kernel NFS statistics  to  monitor  its  progress,
       nhfsstone  cannot  be  used  to	measure	 the  performance  of non-NFS
       filesystems.

       The nhfsstone program uses  file	 and  directory	 manipulation  in  an
       attempt	to generate particular NFS operations in response to particu-
       lar system calls.  To do this it uses several tricks that are based on
       a  knowledge  of	 the  implementation of the NFS client side reference
       port.  For example, it uses long file names to circumvent  the  kernel
       name  lookup  cache  so	that  a	 stat(2) system call generates an NFS
       lookup operation.

       The mix of NFS operations can be set with a mix	file,  which  is  the
       output  of  the	nfsstat(8C) command (see the "-m" option below).  The
       percentages taken from the mix file are calculated based on the number
       of  NFS	calls,	not on the percentages printed by nfsstat. Operations
       with 0% in the mix will never get called	 by  nhfsstone.	  In  a	 real
       server  load  mix, even though the percentage of call for a particular
       NFS operation may be zero, the number of calls is often nonzero.	 Nhf-
       sstone  makes  the assumption that the number of calls to these 0 per-
       cent operations will have an insignificant effect on server  response.

       Normally nhfsstone should be given a list of two or more test directo-
       ries to use (default is to  use	the  current  directory).   The	 test
       directories  used  should be located on different disks and partitions
       on the server to realistically simulate typical	server	loads.	 Each
       nhfsstone process looks for a directory <dir>/testdir<n> (where <n> is
       a number from 0 to nprocs - 1).	If a process directory	name  already
       exists,	it  is	checked for the correct set of test files.  Otherwise
       the directory is created and populated.

OPTIONS
       -v	   Verbose output.

       -t secs	   Sets calls based on the given running  time	(in  seconds)
		   and the load.

       -c calls	   Total number of NFS calls to generate (default is 5000).

       -l load	   Load	 to generate in NFS calls per second (default is 30).

       -p nprocs   Number of load generating sub-processes to  fork  (default
		   is  7).  This can be used to maximize the amount of load a
		   single machine can generate.	 On a  small  client  machine
		   (slow CPU or small amount of memory) fewer processes might
		   be used to avoid swapping.

       -m mixfile  Mix of NFS operations to generate.  The format of  mixfile
		   is  the  same as the output of the nfsstat(8C) program.  A
		   mix file can be created on a server by typing "nfsstat  -s
		   >  mixfile".	  The  default mix of operations is: null 0%,
		   getattr 13%, setattr 1%, root 0%, lookup 34%, readlink 8%,
		   read	 22%,  wrcache	0%,  write 15%, create 2%, remove 1%,
		   rename 0%, link 0%, symlink 0%, mkdir 0%, rmdir 0%,	read-
		   dir 3%, fsstat 1%.

USING NHFSSTONE
       As  with	 all  benchmarks, nhfsstone can only provide numbers that are
       useful if experiments that use it are set up carefully.	Since  it  is
       measuring  servers,  it	should be run on a client that will not limit
       the generation of NFS requests.	This means it should have a fast CPU,
       a  good ethernet interface and the machine should not be used for any-
       thing else during testing.  A Sun-3/50 can generate about 60 NFS calls
       per second before it runs out of CPU.

       Nhfsstone assumes that all NFS calls generated on the client are going
       to a single server, and that all of the NFS load on that server is due
       to  this	 client.   To  make this assumption hold, both the client and
       server should be as quiescent as possible during tests.

       If the network is heavily utilized the delays due  to  collisions  may
       hide  any  changes  in server performance.  High error rates on either
       the client or server can also cause delays due to  retransmissions  of
       lost  or	 damaged  packets.  netstat(8C) -i can be used to measure the
       error and collision rates on the client and server.

       To best simulate the effects of NFS clients on the  server,  the	 test
       directories  should  be set up so that they are on at least two of the
       disk partitions that the server exports and the partitions  should  be
       as  far	apart  as possible. The dkinfo(8) command can be used to find
       the physical geometry of disk on BSD based  systems.   NFS  operations
       tend  to	 randomize  access the whole disk so putting all of the nhfs-
       stone test directories on a single partition or on two partitions that
       are close together will not show realistic results.

       On all tests it is a good idea to run the tests repeatedly and compare
       results.	 The number of calls can be increased (with  the  -c  option)
       until  the  variance in milliseconds per call is acceptably small.  If
       increasing the number of calls does not help there  may	be  something
       wrong  with  the	 experimental  setup.  One common problem is too much
       memory on the client test machine. With too much memory, nhfsstone  is
       not able to defeat the client caches and the NFS operations do not end
       up going to the server at all. If you suspect that there is a  caching
       problem you can use the -p option to increase the number of processes.

       The numbers generated by nhfsstone are most useful for  comparison  if
       the  test  setup	 on  the client machine is the same between different
       server configurations.  Changing	 nhfsstone  parameters	between	 runs
       will produce numbers that can not be meaningfully compared.  For exam-
       ple, changing the number of generator processes may  affect  the	 mea-
       sured  response	time  due to context switching or other delays on the
       client machine, while changing the mix of NFS operations	 will  change
       the  whole nature of the experiment.  Other changes to the client con-
       figuration may also effect the comparability of results.	 While	nhfs-
       stone  tries to compensate for differences in client configurations by
       sampling the actual NFS statistics and adjusting both the load and mix
       of  operations,	some  changes are not reflected in either the load or
       the mix. For example, installing a faster CPU  or  mounting  different
       NFS  filesystems	 may effect the response time without changing either
       the load or the mix.

       To do a comparison of different server configurations,  first  set  up
       the  client  test directories and do nhfsstone runs at different loads
       to be sure that the variability is reasonably low. Second,  run	nhfs-
       stone  at  different  loads  of	interest and save the results. Third,
       change the server configuration (for example, add more memory, replace
       a  disk controller, etc.). Finally, run the same nhfsstone loads again
       and compare the results.

SEE ALSO
       The nhfsstone.c source file has comments that describe in  detail  the
       operation of of the program.

ERROR MESSAGES
       illegal calls value
	      The calls argument following the -c flag on the command line is
	      not a positive number.

       illegal load value
	      The load argument following the -l flag on the command line  is
	      not a positive number.

       illegal time value
	      The  time argument following the -t flag on the command line is
	      not a positive number.

       bad mix file
	      The mixfile file argument following the -m flag on the  command
	      line could not be accessed.

       can’t find current directory
	      The  parent  process  couldn’t find the pathname of the current
	      directory.  This usually indicates a permission problem.

       can’t fork
	      The parent couldn’t fork	the  child  processes.	This  usually
	      results from lack of resources, such as memory or swap space.

       can’t open log file
       can’t stat log
       can’t truncate log
       can’t write sync file
       can’t write log
       can’t read log
	      A	 problem occurred during the creation, truncation, reading or
	      writing of the synchronization log  file.	 The  parent  process
	      creates  the  log	 file  in /tmp and uses it to synchronize and
	      communicate with its children.

       can’t open test directory
       can’t create test directory
       can’t cd to test directory
       wrong permissions on test dir
       can’t stat testfile
       wrong permissions on testfile
       can’t create rename file
       can’t create subdir
	      A child process had problems creating or checking the  contents
	      of  its  test  directory.	 This  is usually due to a permission
	      problem (for example the test directory was created by  a	 dif-
	      ferent user) or a full filesystem.

       bad mix format: unexpected EOF after ’nfs:’
       bad mix format: can’t find ’calls’ value
       bad mix format: unexpected EOF after ’calls’
       bad mix format: can’t find %d op values
       bad mix format: unexpected EOF
	      A	 problem  occurred  while  parsing the mix file. The expected
	      format of the file is the same as the output of the nfsstat(8C)
	      command when run with the "-s" option.

       op failed:
	      One  of  the internal pseudo-NFS operations failed. The name of
	      the operation, e.g. read, write, lookup, will be printed	along
	      with an indication of the nature of the failure.

       select failed
	      The select system call returned an unexpected error.

BUGS
       Running nhfsstone on a non-NFS filesystem can cause the program to run
       forever because it uses the kernel NFS statistics  to  determine	 when
       enough calls have been made.

       Nhfsstone  uses	many  file  descriptors. The kernel on the client may
       have to be reconfigured to increase the number of available file table
       entries.

       Shell  scripts  that  used  nhfsstone  will  have  to catch and ignore
       SIGUSR1 (see signal(3)).	 This signal is used to synchronize the	 test
       processes.  If  the signal is not caught the shell that is running the
       script will be killed.

FILES
       /vmunix		   system namelist
       /dev/kmem	   kernel virtual memory
       ./testdir*	   per process test directory
       /tmp/nhfsstone%d	   process synchronization log file



				4 October 1989			 NHFSSTONE(8)