Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf script: Extend misc field decoding with switch out event type

Append 'p' sign to 'S' tag designating the type of context switch out event so
'Sp' means preemption context switch. Documentation is extended to cover
new presentation changes.

$ perf script --show-switch-events -F +misc -I -i perf.data:

hdparm 4073 [004] U 762.198265: 380194 cycles:ppp: 7faf727f5a23 strchr (/usr/lib64/ld-2.26.so)
hdparm 4073 [004] K 762.198366: 441572 cycles:ppp: ffffffffb9218435 alloc_set_pte (/lib/modules/4.16.0-rc6+/build/vmlinux)
hdparm 4073 [004] S 762.198391: PERF_RECORD_SWITCH_CPU_WIDE OUT next pid/tid: 0/0
swapper 0 [004] 762.198392: PERF_RECORD_SWITCH_CPU_WIDE IN prev pid/tid: 4073/4073
swapper 0 [004] Sp 762.198477: PERF_RECORD_SWITCH_CPU_WIDE OUT preempt next pid/tid: 4073/4073
hdparm 4073 [004] 762.198478: PERF_RECORD_SWITCH_CPU_WIDE IN prev pid/tid: 0/0
swapper 0 [007] K 762.198514: 2303073 cycles:ppp: ffffffffb98b0c66 intel_idle (/lib/modules/4.16.0-rc6+/build/vmlinux)
swapper 0 [007] Sp 762.198561: PERF_RECORD_SWITCH_CPU_WIDE OUT preempt next pid/tid: 1134/1134
kworker/u16:18 1134 [007] 762.198562: PERF_RECORD_SWITCH_CPU_WIDE IN prev pid/tid: 0/0
kworker/u16:18 1134 [007] S 762.198567: PERF_RECORD_SWITCH_CPU_WIDE OUT next pid/tid: 0/0

Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/5fc65ce7-8ca5-53ae-8858-8ddd27290575@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Alexey Budankov and committed by
Arnaldo Carvalho de Melo
bf30cc18 b3f35b5d

+13 -9
+9 -8
tools/perf/Documentation/perf-script.txt
··· 228 228 For sample events it's possible to display misc field with -F +misc option, 229 229 following letters are displayed for each bit: 230 230 231 - PERF_RECORD_MISC_KERNEL K 232 - PERF_RECORD_MISC_USER U 233 - PERF_RECORD_MISC_HYPERVISOR H 234 - PERF_RECORD_MISC_GUEST_KERNEL G 235 - PERF_RECORD_MISC_GUEST_USER g 236 - PERF_RECORD_MISC_MMAP_DATA* M 237 - PERF_RECORD_MISC_COMM_EXEC E 238 - PERF_RECORD_MISC_SWITCH_OUT S 231 + PERF_RECORD_MISC_KERNEL K 232 + PERF_RECORD_MISC_USER U 233 + PERF_RECORD_MISC_HYPERVISOR H 234 + PERF_RECORD_MISC_GUEST_KERNEL G 235 + PERF_RECORD_MISC_GUEST_USER g 236 + PERF_RECORD_MISC_MMAP_DATA* M 237 + PERF_RECORD_MISC_COMM_EXEC E 238 + PERF_RECORD_MISC_SWITCH_OUT S 239 + PERF_RECORD_MISC_SWITCH_OUT_PREEMPT Sp 239 240 240 241 $ perf script -F +misc ... 241 242 sched-messaging 1414 K 28690.636582: 4590 cycles ...
+4 -1
tools/perf/builtin-script.c
··· 657 657 break; 658 658 case PERF_RECORD_SWITCH: 659 659 case PERF_RECORD_SWITCH_CPU_WIDE: 660 - if (has(SWITCH_OUT)) 660 + if (has(SWITCH_OUT)) { 661 661 ret += fprintf(fp, "S"); 662 + if (sample->misc & PERF_RECORD_MISC_SWITCH_OUT_PREEMPT) 663 + ret += fprintf(fp, "p"); 664 + } 662 665 default: 663 666 break; 664 667 }