parent
							
								
									8a47b2dd97
								
							
						
					
					
						commit
						836d9e27bb
					
				
							
								
								
									
										91
									
								
								src/_perf
								
								
								
								
							
							
						
						
									
										91
									
								
								src/_perf
								
								
								
								
							|  | @ -131,6 +131,20 @@ _perf_sched_subcommand() { | ||||||
|   _describe -t subcmds 'lock subcommand ' subcmds |   _describe -t subcmds 'lock subcommand ' subcmds | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | _perf_script_fields() { | ||||||
|  |   local -a fields=( | ||||||
|  |     "comm" "tid" "pid" "time" "cpu" "event" "trace" "ip" "sym" "dso" | ||||||
|  |     "addr" "symoff" "srcline" "period" "iregs" "uregs" "brstack" | ||||||
|  |     "brstacksym" "flags" "bpf-output" "brstackinsn"  "brstackoff" | ||||||
|  |     "callindent" "insn" "insnlen" "synth" "phys_addr" "metric" | ||||||
|  |     "misc" "srccode" "ipc" | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  |   compset -P '(hw|sw|trace):' | ||||||
|  | 
 | ||||||
|  |   _values -s ',' 'fields' $fields | ||||||
|  | } | ||||||
|  | 
 | ||||||
| _perf() { | _perf() { | ||||||
|   local context curcontext="$curcontext" state line |   local context curcontext="$curcontext" state line | ||||||
|   typeset -A opt_args |   typeset -A opt_args | ||||||
|  | @ -194,7 +208,7 @@ _perf() { | ||||||
|             '(-k --kcore)'{-k,--kcore=}'[add specified kcore file to core]:kcore:_files' \ |             '(-k --kcore)'{-k,--kcore=}'[add specified kcore file to core]:kcore:_files' \ | ||||||
|             '(-r --remove)'{-r,--remove=}'[remove specified file from the cache]: :_files' \ |             '(-r --remove)'{-r,--remove=}'[remove specified file from the cache]: :_files' \ | ||||||
|             '(-p,--purge)'{-p,--purge=}'[purge all cached binaries including older caches which have specified path]: :_files' \ |             '(-p,--purge)'{-p,--purge=}'[purge all cached binaries including older caches which have specified path]: :_files' \ | ||||||
|             '(-P,--purge-all)'{-P,--purge-all}'[puge all cached binaries]' \ |             '(-P,--purge-all)'{-P,--purge-all}'[purge all cached binaries]' \ | ||||||
|             '(-M,--missing)'{-M,--missing=}'[list missing build ids in the cache for the specified file]: :_files' \ |             '(-M,--missing)'{-M,--missing=}'[list missing build ids in the cache for the specified file]: :_files' \ | ||||||
|             '(-u,--update)'{-u,--update=}'[update specified file of the cache]: :_files' \ |             '(-u,--update)'{-u,--update=}'[update specified file of the cache]: :_files' \ | ||||||
|             '(-l,--list)'{-l,--list}'[list all valid binaries from cache]' \ |             '(-l,--list)'{-l,--list}'[list all valid binaries from cache]' \ | ||||||
|  | @ -281,7 +295,7 @@ _perf() { | ||||||
|         ;; |         ;; | ||||||
|         (kallsyms) |         (kallsyms) | ||||||
|           _arguments \ |           _arguments \ | ||||||
|             '(-v --verbose)'{-v,--verbose=}'[increse verbosity level]' \ |             '(-v --verbose)'{-v,--verbose=}'[increase verbosity level]' \ | ||||||
|             && ret=0 |             && ret=0 | ||||||
|         ;; |         ;; | ||||||
|         (kmem) |         (kmem) | ||||||
|  | @ -406,7 +420,7 @@ _perf() { | ||||||
|             '(-j --branch-filter)'{-j,--branch-filter=}'[specify stack sampling filter]:filter:_perf_branch_filter' \ |             '(-j --branch-filter)'{-j,--branch-filter=}'[specify stack sampling filter]:filter:_perf_branch_filter' \ | ||||||
|             '--weight[enable weightened sampling]' \ |             '--weight[enable weightened sampling]' \ | ||||||
|             '--namespaces[record events of type PREF_RECORD_NAMESPACES]' \ |             '--namespaces[record events of type PREF_RECORD_NAMESPACES]' \ | ||||||
|             '--tarnsaction[record transaction flags for transaction related events]' \ |             '--transaction[record transaction flags for transaction related events]' \ | ||||||
|             '(-D --delay)'{-D,--delay=}'[wait msecs before measuring]' \ |             '(-D --delay)'{-D,--delay=}'[wait msecs before measuring]' \ | ||||||
|             '(-I,--intr-regs)'{-I,--intr-regs=}'[capture machine state (registers) at interrupt]:registers:' \ |             '(-I,--intr-regs)'{-I,--intr-regs=}'[capture machine state (registers) at interrupt]:registers:' \ | ||||||
|             '--user-regs=[capture user registers at sample time]:registers:' \ |             '--user-regs=[capture user registers at sample time]:registers:' \ | ||||||
|  | @ -445,7 +459,7 @@ _perf() { | ||||||
|             '(-n --show-nr-samples)'{-n,--show-nr-samples}'[show the number of samples for each symbol]' \ |             '(-n --show-nr-samples)'{-n,--show-nr-samples}'[show the number of samples for each symbol]' \ | ||||||
|             '--show-cpu-utilization[show sample percentage for different cpu modes]' \ |             '--show-cpu-utilization[show sample percentage for different cpu modes]' \ | ||||||
|             '(-T --threads)'{-T,--threads}'[show per-thread event counters]' \ |             '(-T --threads)'{-T,--threads}'[show per-thread event counters]' \ | ||||||
|             '(-c --comms)'{-c,--comms=}'[only condier symbols in these comms]:comms:' \ |             '(-c --comms)'{-c,--comms=}'[only consider symbols in these comms]:comms:' \ | ||||||
|             '--pid=[only show events for given process ID]:pid:_perf_pids' \ |             '--pid=[only show events for given process ID]:pid:_perf_pids' \ | ||||||
|             '--tid=[only show events for given thread ID]:tid:' \ |             '--tid=[only show events for given thread ID]:tid:' \ | ||||||
|             \*{-d,--dsos=}'[only consider symbols in these dsos]:dsos:' \ |             \*{-d,--dsos=}'[only consider symbols in these dsos]:dsos:' \ | ||||||
|  | @ -508,7 +522,7 @@ _perf() { | ||||||
|             '--mmaps[show --tasks output plus mmap information]' \ |             '--mmaps[show --tasks output plus mmap information]' \ | ||||||
|             '--ns[show time stamps in nanoseconds]' \ |             '--ns[show time stamps in nanoseconds]' \ | ||||||
|             '--stat[display overall events statistics without any further processing]' \ |             '--stat[display overall events statistics without any further processing]' \ | ||||||
|             '--tasks[display monitored taks stored in perf data]' \ |             '--tasks[display monitored tasks stored in perf data]' \ | ||||||
|             '--percent-type=[set annotation percent type]:type:(global-period local-period global-hits local-hits)' \ |             '--percent-type=[set annotation percent type]:type:(global-period local-period global-hits local-hits)' \ | ||||||
|             '--time-quantum=[configure time quantum for time sort key]' \ |             '--time-quantum=[configure time quantum for time sort key]' \ | ||||||
|             && ret=0 |             && ret=0 | ||||||
|  | @ -524,12 +538,63 @@ _perf() { | ||||||
|             && ret=0 |             && ret=0 | ||||||
|         ;; |         ;; | ||||||
|         (script) |         (script) | ||||||
|           # TODO not implemented |           # TODO 'perf-script' completion | ||||||
|  |           _arguments \ | ||||||
|  |             '(-D --dump-raw-trace)'{-d,--dump-raw-trace}'[display verbose dump of the trace data]' \ | ||||||
|  |             '(-L --Latency)'{-L,--Latency=}'[show latency attributes]: :' \ | ||||||
|  |             '(-l --list)'{-l,--list=}'[display a list of available trace scripts]: :' \ | ||||||
|  |             '(-s --script)'{-s,--script=}'[process trace data with the given script]: :' \ | ||||||
|  |             '(-g --gen-script)'{-g,--gen-script=}'[generate perf-script starter script for given language]:lang:' \ | ||||||
|  |             '-a[force system-wide collection]' \ | ||||||
|  |             '(-i --input)'{-i,--input=}'[input file name]:file:_files' \ | ||||||
|  |             '(-d --debug-mode)'{-d,--debug-mode}'[do various checks]' \ | ||||||
|  |             \*{-F,--fields=}'[comma separated list of fields to print]:fields:_perf_script_fields' \ | ||||||
|  |             '(-k --vmlinux)'{-k,--vmlinux=}'[vmlinux pathname]:vmlinux:_files' \ | ||||||
|  |             '--kallsyms=[kallsyms pathname]:kallsyms:_files' \ | ||||||
|  |             '(-G --hide-call-graph)'{-G,--hide-call-graph}'[when printing symbols do not display call chain]' \ | ||||||
|  |             '--stop-bt[stop display of callgraph at these symbols]' \ | ||||||
|  |             '(-C --cpu)'{-C,--cpu=}'[only report samples for the list of CPUs provided]:cpus:' \ | ||||||
|  |             '(-c --comms)'{-c,--comms=}'[only display events for these comms]:comms:' \ | ||||||
|  |             '--pid=[only show events for given process ID]:pids:_perf_pids' \ | ||||||
|  |             '--tid=[only show events for given thread ID]:tids:' \ | ||||||
|  |             '(-I --show-info)'{-I,--show-info}'[display extended information about the perf.data file]' \ | ||||||
|  |             '--show-kernel-path[try to resolve the path of kernel.kallsyms]' \ | ||||||
|  |             '--show-task-events[display task related events]' \ | ||||||
|  |             '--show-mmap-events[display mmap related events]' \ | ||||||
|  |             '--show-namespace-events[display namespace events]' \ | ||||||
|  |             '--show-switch-events[display context switch events]' \ | ||||||
|  |             '--show-lost-events[display lost events]' \ | ||||||
|  |             '--show-round-events[display finished round events]' \ | ||||||
|  |             '--show-bpf-events[display bpf events]' \ | ||||||
|  |             '--demangle[demangle symbol names to human readable form]' \ | ||||||
|  |             '--demangle-kernel[demangle kernel symbol names to human readable form]' \ | ||||||
|  |             '--header[show perf.data header]' \ | ||||||
|  |             '--header-only[show only perf.data header]' \ | ||||||
|  |             '--itrace=[options for decoding instruction tracing data]' \ | ||||||
|  |             '--full-source-path[show the full path for source files for srcline output]' \ | ||||||
|  |             '--max-stack=[set the stack depth limit]:number:' \ | ||||||
|  |             '--ns[use 9 decimal places when displaying time]' \ | ||||||
|  |             '(-f --force)'{-f,--force}'[do not ownership validation]' \ | ||||||
|  |             '--time=[only analyze samples within given time window]' \ | ||||||
|  |             '--max-blocks=[set the maximum number of program blocks to print]:number:' \ | ||||||
|  |             '--reltime[print time stamps relative to trace start]' \ | ||||||
|  |             '--per-event-dump[create per event files]' \ | ||||||
|  |             '--inline[the inline stack will be printed]' \ | ||||||
|  |             '--insn-trace[show instruction stream for intel_pt traces]' \ | ||||||
|  |             '--xed[run xed disassembler on output]' \ | ||||||
|  |             '--call-trace[show call stream for intel_pt traces]' \ | ||||||
|  |             '--call-ret-trace[show call and return stream for intel_pt traces]' \ | ||||||
|  |             '--graph-function=[for itrace only show specified functions and their callees for itrace]:functions:' \ | ||||||
|  |             '--switch-on=[only consider events after this event is found]:event:' \ | ||||||
|  |             '--switch-off=[stop considering events after this event is found]' \ | ||||||
|  |             '--show-on-off-events[show the --switch-on/off events too]'  \ | ||||||
|  |             '1:command:(record report)' \ | ||||||
|  |             && ret=0 | ||||||
|         ;; |         ;; | ||||||
|         (stat) |         (stat) | ||||||
|           _arguments \ |           _arguments \ | ||||||
|             \*{-e,--events=}'[select the PMU event]:event:_perf_events' \ |             \*{-e,--events=}'[select the PMU event]:event:_perf_events' \ | ||||||
|             '(-i --no-inherit)'{-i,--no-inherit}'[child tasks do not inherit conters]' \ |             '(-i --no-inherit)'{-i,--no-inherit}'[child tasks do not inherit counters]' \ | ||||||
|             '(-p --pid)'{-p,--pid=}'[stat events on existing process id]:pid:_pids' \ |             '(-p --pid)'{-p,--pid=}'[stat events on existing process id]:pid:_pids' \ | ||||||
|             '(-t --tid)'{-t,--tid=}'[stat events on existing thread id]:tid:' \ |             '(-t --tid)'{-t,--tid=}'[stat events on existing thread id]:tid:' \ | ||||||
|             '(-a --all-cpus)'{-a,--all-cpus}'[system-wide collection from all CPUs]' \ |             '(-a --all-cpus)'{-a,--all-cpus}'[system-wide collection from all CPUs]' \ | ||||||
|  | @ -541,11 +606,11 @@ _perf() { | ||||||
|             '(-A --no-aggr)'{-A,--no-aggr}'[do not aggregate counts across all monitored CPUs]' \ |             '(-A --no-aggr)'{-A,--no-aggr}'[do not aggregate counts across all monitored CPUs]' \ | ||||||
|             '(-n --null)'{-n,--null}'[null run]' \ |             '(-n --null)'{-n,--null}'[null run]' \ | ||||||
|             '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ |             '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ | ||||||
|             '(-x --field-seperator)'{-x,--field-separator=}'[print separator]' \ |             '(-x --field-separator)'{-x,--field-separator=}'[print separator]' \ | ||||||
|             '--table[display time for each run in a table format]' \ |             '--table[display time for each run in a table format]' \ | ||||||
|             '(-G --cgroup)'{-G,--cgroup=}'[monitor only in the container called this name]' \ |             '(-G --cgroup)'{-G,--cgroup=}'[monitor only in the container called this name]' \ | ||||||
|             '(-o --output)'{-o,--output=}'[print the output into this file]:file:_files' \ |             '(-o --output)'{-o,--output=}'[print the output into this file]:file:_files' \ | ||||||
|             '--append[append to the output file desinated with -o option]' \ |             '--append[append to the output file designated with -o option]' \ | ||||||
|             '--log-fd[log output to fd, instead of stderr]' \ |             '--log-fd[log output to fd, instead of stderr]' \ | ||||||
|             '--pre[pre measurement hook]: :_command_names -e' \ |             '--pre[pre measurement hook]: :_command_names -e' \ | ||||||
|             '--post[post measurement hook]: :_command_names -e' \ |             '--post[post measurement hook]: :_command_names -e' \ | ||||||
|  | @ -557,7 +622,7 @@ _perf() { | ||||||
|             '--per-socket[aggregate counts per processor socket for system-wide mode measurements]' \ |             '--per-socket[aggregate counts per processor socket for system-wide mode measurements]' \ | ||||||
|             '--per-die[aggregate counts per processor die for sytem-wide mode measurements]' \ |             '--per-die[aggregate counts per processor die for sytem-wide mode measurements]' \ | ||||||
|             '--per-core[aggregate counts per phisical processor for sytem-wide mode measurements]' \ |             '--per-core[aggregate counts per phisical processor for sytem-wide mode measurements]' \ | ||||||
|             '--per-thread[aggregate counts per mmonitored threads]' \ |             '--per-thread[aggregate counts per monitored threads]' \ | ||||||
|             '(-D --delay)'{-D,--delay=}'[wait msecs before measuring]:msec:' \ |             '(-D --delay)'{-D,--delay=}'[wait msecs before measuring]:msec:' \ | ||||||
|             '(-T --transaction)'{-T,--transaction}'[print statistics of transactional execution]' \ |             '(-T --transaction)'{-T,--transaction}'[print statistics of transactional execution]' \ | ||||||
|             '(-)1:command:_perf_stat_command' \ |             '(-)1:command:_perf_stat_command' \ | ||||||
|  | @ -584,7 +649,7 @@ _perf() { | ||||||
|             '(-f --force)'{-f,--force}'[do not complain, do it]' \ |             '(-f --force)'{-f,--force}'[do not complain, do it]' \ | ||||||
|             '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ |             '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ | ||||||
|             '(-n --proc-num)'{-n,--proc-num=}'[print task info for at least given number of tasks]:number:' \ |             '(-n --proc-num)'{-n,--proc-num=}'[print task info for at least given number of tasks]:number:' \ | ||||||
|             '(-t --topology)'{-t,--topology}'[sort CPUs acording to topology]' \ |             '(-t --topology)'{-t,--topology}'[sort CPUs according to topology]' \ | ||||||
|             '--highlight=[highlight tasks using different color]:nsecs_or_task:' \ |             '--highlight=[highlight tasks using different color]:nsecs_or_task:' \ | ||||||
|             '--io-skip-eagain[do not draw EAGAIN IO events]' \ |             '--io-skip-eagain[do not draw EAGAIN IO events]' \ | ||||||
|             '--io-min-times=[draw small events as if they lasted min-time]:nsecs:' \ |             '--io-min-times=[draw small events as if they lasted min-time]:nsecs:' \ | ||||||
|  | @ -601,7 +666,7 @@ _perf() { | ||||||
|             '(-d --delay)'{-d,--delay=}'[number of seconds to delay between refreshes]' \ |             '(-d --delay)'{-d,--delay=}'[number of seconds to delay between refreshes]' \ | ||||||
|             \*{-e,--event=}'[select the PMU event]:event:_perf_events' \ |             \*{-e,--event=}'[select the PMU event]:event:_perf_events' \ | ||||||
|             '(-E --entries)'{-E,--entries=}'[display thie many functions]' \ |             '(-E --entries)'{-E,--entries=}'[display thie many functions]' \ | ||||||
|             '(-f --count-filter)'{-f,--count-filter=}'[only display fnctions with more events than this]:count:' \ |             '(-f --count-filter)'{-f,--count-filter=}'[only display functions with more events than this]:count:' \ | ||||||
|             '--group[put the counters into a counter group]' \ |             '--group[put the counters into a counter group]' \ | ||||||
|             '(-F --freq)'{-F,--freq=}'[profile at thie frequency]:freq:(max)' \ |             '(-F --freq)'{-F,--freq=}'[profile at thie frequency]:freq:(max)' \ | ||||||
|             '(-i --inherit)'{-i,--inherit}'[child tasks do not inherit counters]' \ |             '(-i --inherit)'{-i,--inherit}'[child tasks do not inherit counters]' \ | ||||||
|  | @ -691,7 +756,7 @@ _perf() { | ||||||
|             '--min-stack=[set the stack depth min limit]:limit:' \ |             '--min-stack=[set the stack depth min limit]:limit:' \ | ||||||
|             '--print-sample[print the PERF_RECORD_SAMPLE PERF_SAMPLE_ info]' \ |             '--print-sample[print the PERF_RECORD_SAMPLE PERF_SAMPLE_ info]' \ | ||||||
|             '--proc-map-timeout=[time out(ms) limit of processing /proc/XXX/mmap]' \ |             '--proc-map-timeout=[time out(ms) limit of processing /proc/XXX/mmap]' \ | ||||||
|             '--sort-evetns[do sorting on batches of events]' \ |             '--sort-events[do sorting on batches of events]' \ | ||||||
|             '--map-dump[dump BPF maps setup by events passed via -e]' \ |             '--map-dump[dump BPF maps setup by events passed via -e]' \ | ||||||
|             '1: :_perf_trace_subcommand' \ |             '1: :_perf_trace_subcommand' \ | ||||||
|             && ret=0 |             && ret=0 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue