Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
loadplay(1)		     General Commands Manual		     loadplay(1)

NAME
     loadplay -- CPU load player

SYNOPSIS
     loadplay -h
     loadplay [-i file] [-o file] command [...]

DESCRIPTION
     The loadplay command replays a load recording created with loadrec(1).  The
     command  can  either  be powerd(8) or powerd++(8), compatibility with other
     tools has not been tested.

   OPTIONS
     The following options are supported:

     -h, --help
	     Show usage and exit.

     -i, --input file
	     Read load recording from file instead of stdin.

     -o, --output file
	     Output statistics to file instead of stdout.

USAGE NOTES
     The loadplay command injects the libloadplay.so into command.  This library
     simulates the load from the input and outputs load statistics.

   OUTPUT
     The first line of output contains column headings, columns are separated by
     a single space.

     The Following columns are present, columns containing  %d	occur  for  each
     core simulated:

     time[s]
	     The simulation progress in 0.001 second resolution.

     cpu.%d.rec.freq[MHz]
	     The recorded clock frequency, sampled at the end of the frame.

     cpu.%d.rec.load[MHz]
	     The recorded load in 0.1 MHz resolution.

     cpu.%d.run.freq[MHz]
	     The  simulated  clock frequency set by the host process, sampled at
	     the end of the frame.

     cpu.%d.run.load[MHz]
	     The simulated load in 0.1 MHz resolution.

   SAMPLING
     There is one sample for each recorded line. The duration of each frame  de-
     pends on the recording, which defaults to 25 ms.  At this sample rate loads
     are  dominated by noise, so a gliding average should be applied to any load
     columns for further use, such as plotting.

IMPLEMENTATION NOTES
     The injected libloadplay.so works by intercepting system function calls and
     substituting the host environment with the recording. To achieve  this  the
     following function calls are intercepted:

     *	 sysctl(3), sysctlnametomib(3), sysctlbyname(3)

     *	 daemon(3)

     *	 geteuid(2)

     *	 pidfile_open(3), pidfile_write(3), pidfile_close(3), pidfile_remove(3),
	 pidfile_fileno(3)

   INITIALISATION
     The  sysctl  family  of  functions is backed by a table that is initialised
     from the header of the load recording. If the  heading  is  incomplete  the
     setup  routines  print  a message on stderr.  All the following intercepted
     function calls will return failure, ensuring that the host process  is  un-
     able to operate and terminates.

     Like powerd++(8) and loadrec(1) loadplay is core agnostic. Meaning that any
     core may have a .freq and .freq_levels sysctl handle. Due to this flexibil-
     ity  load recordings may in part or wholly be fabricated to test artificial
     loads or systems and features that do not yet exist. E.g. it is possible to
     offer a .freq handle for each core or fabricate new .freq_levels.

   SIMULATION
     If setup succeeds a simulation thread is started that reads  the  remaining
     input  lines, simulates the load and updates the kern.cp_times entry in the
     thread safe sysctl table. For each frame a line of output with load statis-
     tics is produced.

     Interaction with the host process happens solely through the sysctl  table.
     The simulation reads the recorded loads and the current core frequencies to
     update  kern.cp_times.   The  host  process reads this data and adjusts the
     clock frequencies, which in turn affects the next frame.

   FINALISATION
     After reading the last line of input the simulation thread sends  a  SIGINT
     to the process to cause it to terminate.

ENVIRONMENT
     LOADPLAY_IN
	     If  set  the  file  named is used for input instead of stdin.  This
	     only affects the input of loadplay, the host  process  is	not  af-
	     fected.

     LOADPLAY_OUT
	     If  set  the file named is used for output instead of stdout.  This
	     only affects the output of loadplay, the host process  is	not  af-
	     fected.

     LD_PRELOAD
	     Used to inject the libloadplay.so into the host process.

     LD_LIBRARY_PATH
	     Is  set  to  the same path loadplay was called through. Remains un-
	     touched if the path does not contain a `/' character.

	     I.e. calling "obj/loadplay" will set "LD_LIBRARY_PATH=obj", calling
	     "loadplay" will not.

	     This behaviour facilitates running test builds of loadplay and  the
	     libloadplay.so without performing an install.

FILES
     /usr/local/lib/libloadplay.so
	     A	library  injected  into  command  via the LD_PRELOAD environment
	     variable.

EXAMPLES
     Play a load recording with loadplay:

	 > loadplay -i loads/freq_tracking.load powerd++
	 time[s] cpu.0.rec.freq[MHz] cpu.0.rec.load[MHz] cpu.0.run.freq[MHz] cpu.0.run.load[MHz] cpu.1.rec.freq[MHz] cpu.1.rec.load[MHz] cpu.1.run.freq[MHz] cpu.1.run.load[MHz] cpu.2.rec.freq[MHz] cpu.2.rec.load[MHz] cpu.2.run.freq[MHz] cpu.2.run.load[MHz] cpu.3.rec.freq[MHz] cpu.3.rec.load[MHz] cpu.3.run.freq[MHz] cpu.3.run.load[MHz]
	 0.025 1700 1700.0 1700 1700.0 1700 0.0 1700 0.0 1700 1700.0 1700 1700.0 1700 850.0 1700 850.0
	 0.050 1700 1700.0 1700 1700.0 1700 1700.0 1700 1700.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.075 1700 566.7 1700 566.6 1700 1700.0 1700 1700.0 1700 0.0 1700 0.0 1700 566.7 1700 566.6
	 0.100 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.125 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.150 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.175 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.200 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.225 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.250 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0
	 0.275 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0 1700 0.0

     Capture load and loadplay output simultaneously into two different files:

	 > loadplay -i loads/freq_tracking.load -o load.csv powerd++ -f > load.out

     Capture and display loadplay output:

	 > loadplay -i loads/freq_tracking.load -o load.csv powerd++ -f | tee load.out
	 power:  online, load:	527 MHz, cpu0.freq: 1700 MHz, wanted: 1405 MHz
	 power:  online, load:	459 MHz, cpu0.freq: 1400 MHz, wanted: 1224 MHz
	 power:  online, load:	502 MHz, cpu0.freq: 1200 MHz, wanted: 1338 MHz
	 power:  online, load:	548 MHz, cpu0.freq: 1300 MHz, wanted: 1461 MHz
	 power:  online, load:	704 MHz, cpu0.freq: 1500 MHz, wanted: 1877 MHz
	 power:  online, load:	750 MHz, cpu0.freq: 1900 MHz, wanted: 2000 MHz
	 power:  online, load:	805 MHz, cpu0.freq: 2000 MHz, wanted: 2146 MHz
	 power:  online, load:	772 MHz, cpu0.freq: 2200 MHz, wanted: 2058 MHz
	 power:  online, load:	574 MHz, cpu0.freq: 2000 MHz, wanted: 1530 MHz
	 power:  online, load:	515 MHz, cpu0.freq: 1500 MHz, wanted: 1373 MHz

SEE ALSO
     loadrec(1), powerd(8), powerd++(8), rtld(1), signal(3), tee(1)

AUTHORS
     Implementation and manual by Dominic Fandrey <kami@freebsd.org>

FreeBSD ports 15.quarterly	   Mar 5, 2020			     loadplay(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=loadplay&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help