Allow user to limit output to one or more CPUs. Really helpful on
systems with a large number of cpus.
Committer testing:
  # perf sched record -a sleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 1.765 MB perf.data (1412 samples) ]
  [root@quaco ~]# perf sched timehist | head
  Samples do not have callchains.
             time    cpu  task name                       wait time  sch delay   run time
                          [tid/pid]                          (msec)     (msec)     (msec)
  --------------- ------  ------------------------------  ---------  ---------  ---------
     66307.802686 [0000]  perf[13086]                         0.000      0.000      0.000
     66307.802700 [0000]  migration/0[12]                     0.000      0.001      0.014
     66307.802766 [0001]  perf[13086]                         0.000      0.000      0.000
     66307.802774 [0001]  migration/1[15]                     0.000      0.001      0.007
     66307.802841 [0002]  perf[13086]                         0.000      0.000      0.000
     66307.802849 [0002]  migration/2[20]                     0.000      0.001      0.008
     66307.802913 [0003]  perf[13086]                         0.000      0.000      0.000
  #
  # perf sched timehist --cpu 2 | head
  Samples do not have callchains.
             time    cpu  task name                       wait time  sch delay   run time
                          [tid/pid]                          (msec)     (msec)     (msec)
  --------------- ------  ------------------------------  ---------  ---------  ---------
     66307.802841 [0002]  perf[13086]                         0.000      0.000      0.000
     66307.802849 [0002]  migration/2[20]                     0.000      0.001      0.008
     66307.964485 [0002]  <idle>                              0.000      0.000    161.635
     66307.964811 [0002]  CPU 0/KVM[3589/3561]                0.000      0.056      0.325
     66307.965477 [0002]  <idle>                              0.325      0.000      0.666
     66307.965553 [0002]  CPU 0/KVM[3589/3561]                0.666      0.024      0.076
     66307.966456 [0002]  <idle>                              0.076      0.000      0.903
  #
Signed-off-by: David Ahern <dsahern@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lore.kernel.org/lkml/20191204173925.66976-1-dsahern@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
		
	
			
		
			
				
	
	
		
			172 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| perf-sched(1)
 | |
| =============
 | |
| 
 | |
| NAME
 | |
| ----
 | |
| perf-sched - Tool to trace/measure scheduler properties (latencies)
 | |
| 
 | |
| SYNOPSIS
 | |
| --------
 | |
| [verse]
 | |
| 'perf sched' {record|latency|map|replay|script|timehist}
 | |
| 
 | |
| DESCRIPTION
 | |
| -----------
 | |
| There are several variants of 'perf sched':
 | |
| 
 | |
|   'perf sched record <command>' to record the scheduling events
 | |
|   of an arbitrary workload.
 | |
| 
 | |
|   'perf sched latency' to report the per task scheduling latencies
 | |
|   and other scheduling properties of the workload.
 | |
| 
 | |
|   'perf sched script' to see a detailed trace of the workload that
 | |
|    was recorded (aliased to 'perf script' for now).
 | |
| 
 | |
|   'perf sched replay' to simulate the workload that was recorded
 | |
|   via perf sched record. (this is done by starting up mockup threads
 | |
|   that mimic the workload based on the events in the trace. These
 | |
|   threads can then replay the timings (CPU runtime and sleep patterns)
 | |
|   of the workload as it occurred when it was recorded - and can repeat
 | |
|   it a number of times, measuring its performance.)
 | |
| 
 | |
|   'perf sched map' to print a textual context-switching outline of
 | |
|   workload captured via perf sched record.  Columns stand for
 | |
|   individual CPUs, and the two-letter shortcuts stand for tasks that
 | |
|   are running on a CPU. A '*' denotes the CPU that had the event, and
 | |
|   a dot signals an idle CPU.
 | |
| 
 | |
|   'perf sched timehist' provides an analysis of scheduling events.
 | |
|     
 | |
|     Example usage:
 | |
|         perf sched record -- sleep 1
 | |
|         perf sched timehist
 | |
|     
 | |
|    By default it shows the individual schedule events, including the wait
 | |
|    time (time between sched-out and next sched-in events for the task), the
 | |
|    task scheduling delay (time between wakeup and actually running) and run
 | |
|    time for the task:
 | |
|     
 | |
|                 time    cpu  task name             wait time  sch delay   run time
 | |
|                              [tid/pid]                (msec)     (msec)     (msec)
 | |
|       -------------- ------  --------------------  ---------  ---------  ---------
 | |
|         79371.874569 [0011]  gcc[31949]                0.014      0.000      1.148
 | |
|         79371.874591 [0010]  gcc[31951]                0.000      0.000      0.024
 | |
|         79371.874603 [0010]  migration/10[59]          3.350      0.004      0.011
 | |
|         79371.874604 [0011]  <idle>                    1.148      0.000      0.035
 | |
|         79371.874723 [0005]  <idle>                    0.016      0.000      1.383
 | |
|         79371.874746 [0005]  gcc[31949]                0.153      0.078      0.022
 | |
|     ...
 | |
|     
 | |
|    Times are in msec.usec.
 | |
| 
 | |
| OPTIONS
 | |
| -------
 | |
| -i::
 | |
| --input=<file>::
 | |
|         Input file name. (default: perf.data unless stdin is a fifo)
 | |
| 
 | |
| -v::
 | |
| --verbose::
 | |
|         Be more verbose. (show symbol address, etc)
 | |
| 
 | |
| -D::
 | |
| --dump-raw-trace=::
 | |
|         Display verbose dump of the sched data.
 | |
| 
 | |
| -f::
 | |
| --force::
 | |
| 	Don't complain, do it.
 | |
| 
 | |
| OPTIONS for 'perf sched map'
 | |
| ----------------------------
 | |
| 
 | |
| --compact::
 | |
| 	Show only CPUs with activity. Helps visualizing on high core
 | |
| 	count systems.
 | |
| 
 | |
| --cpus::
 | |
| 	Show just entries with activities for the given CPUs.
 | |
| 
 | |
| --color-cpus::
 | |
| 	Highlight the given cpus.
 | |
| 
 | |
| --color-pids::
 | |
| 	Highlight the given pids.
 | |
| 
 | |
| OPTIONS for 'perf sched timehist'
 | |
| ---------------------------------
 | |
| -k::
 | |
| --vmlinux=<file>::
 | |
|     vmlinux pathname
 | |
| 
 | |
| --kallsyms=<file>::
 | |
|     kallsyms pathname
 | |
| 
 | |
| -g::
 | |
| --call-graph::
 | |
| 	Display call chains if present (default on).
 | |
| 
 | |
| --max-stack::
 | |
| 	Maximum number of functions to display in backtrace, default 5.
 | |
| 
 | |
| -C=::
 | |
| --cpu=::
 | |
| 	Only show events for the given CPU(s) (comma separated list).
 | |
| 
 | |
| -p=::
 | |
| --pid=::
 | |
| 	Only show events for given process ID (comma separated list).
 | |
| 
 | |
| -t=::
 | |
| --tid=::
 | |
| 	Only show events for given thread ID (comma separated list).
 | |
| 
 | |
| -s::
 | |
| --summary::
 | |
|     Show only a summary of scheduling by thread with min, max, and average
 | |
|     run times (in sec) and relative stddev.
 | |
| 
 | |
| -S::
 | |
| --with-summary::
 | |
|     Show all scheduling events followed by a summary by thread with min,
 | |
|     max, and average run times (in sec) and relative stddev.
 | |
| 
 | |
| --symfs=<directory>::
 | |
|     Look for files with symbols relative to this directory.
 | |
| 
 | |
| -V::
 | |
| --cpu-visual::
 | |
| 	Show visual aid for sched switches by CPU: 'i' marks idle time,
 | |
| 	's' are scheduler events.
 | |
| 
 | |
| -w::
 | |
| --wakeups::
 | |
| 	Show wakeup events.
 | |
| 
 | |
| -M::
 | |
| --migrations::
 | |
| 	Show migration events.
 | |
| 
 | |
| -n::
 | |
| --next::
 | |
| 	Show next task.
 | |
| 
 | |
| -I::
 | |
| --idle-hist::
 | |
| 	Show idle-related events only.
 | |
| 
 | |
| --time::
 | |
| 	Only analyze samples within given time window: <start>,<stop>. Times
 | |
| 	have the format seconds.microseconds. If start is not given (i.e., time
 | |
| 	string is ',x.y') then analysis starts at the beginning of the file. If
 | |
| 	stop time is not given (i.e, time string is 'x.y,') then analysis goes
 | |
| 	to end of file.
 | |
| 
 | |
| --state::
 | |
| 	Show task state when it switched out.
 | |
| 
 | |
| SEE ALSO
 | |
| --------
 | |
| linkperf:perf-record[1]
 |