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	library	"libloadplay.so" into command.
       This library simulates the load from the	input and outputs load statis-
       tics.

   OUTPUT
       The  first  line	 of output contains column headings, columns are sepa-
       rated 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
       depends 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	inter-
       cepted  function	 calls	will  return  failure,	ensuring that the host
       process is unable 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
       flexibility 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 remain-
       ing 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 statistics is produced.

       Interaction with	the host process happens solely	through	the sysctl ta-
       ble.  The simulation reads the recorded loads and the current core fre-
       quencies	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 affected.

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

       LD_LIBRARY_PATH
	       Is set to the same path loadplay	was  called  through.  Remains
	       untouched 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 library "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 14.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+14.3.quarterly>

home | help