# # cat prctl-perf.c #include void loop_events_disabled() { volatile int x; int i; for (i = 0; i < 1000000000; i++) x = i; return; } void loop_events_enabled() { volatile int x; int i; for (i = 0; i < 1000000000; i++) x = i; return; } int main(int argc, char **argv) { prctl(PR_TASK_PERF_EVENTS_ENABLE); loop_events_enabled(); prctl(PR_TASK_PERF_EVENTS_DISABLE); loop_events_disabled(); } # gcc -g prctl-perf.c -o prctl-perf # # perf record /home/acme/c/prctl-perf [ perf record: Woken up 3 times to write data ] [ perf record: Captured and wrote 0.562 MB perf.data (14295 samples) ] # perf report --stdio --no-header --percent-limit 1 # To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 0 # # Samples: 14K of event 'cycles' # Event count (approx.): 15897534555 # # Overhead Command Shared Object Symbol # ........ .......... ................ ................................... # 49.80% prctl-perf prctl-perf [.] loop_events_enabled 49.73% prctl-perf prctl-perf [.] loop_events_disabled # # (Tip: Create an archive with symtabs to analyse on other machine: perf archive) # # # perf probe -x /home/acme/c/prctl-perf loop_events_enabled Added new event: probe_prctl:loop_events_enabled (on loop_events_enabled in /home/acme/c/prctl-perf) You can now use it in all perf tools, such as: perf record -e probe_prctl:loop_events_enabled -aR sleep 1 # perf probe -x /home/acme/c/prctl-perf loop_events_disabled Added new event: probe_prctl:loop_events_disabled (on loop_events_disabled in /home/acme/c/prctl-perf) You can now use it in all perf tools, such as: perf record -e probe_prctl:loop_events_disabled -aR sleep 1 # perf probe -l probe_prctl:loop_events_disabled (on loop_events_disabled@/home/acme/c/prctl-perf.c in /home/acme/c/prctl-perf) probe_prctl:loop_events_enabled (on loop_events_enabled@/home/acme/c/prctl-perf.c in /home/acme/c/prctl-perf) # # perf record -e cycles,probe_prctl:* /home/acme/c/prctl-perf [ perf record: Woken up 3 times to write data ] [ perf record: Captured and wrote 0.678 MB perf.data (14394 samples) ] # perf evlist cycles probe_prctl:loop_events_disabled probe_prctl:loop_events_enabled # Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events # perf report --stdio --no-header --percent-limit 1 --switch-on probe_prctl:loop_events_enabled --switch-off probe_prctl:loop_events_disabled # To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 0 # # Samples: 7K of event 'cycles' # Event count (approx.): 7909562953 # # Overhead Command Shared Object Symbol # ........ .......... ................ ....................... # 99.99% prctl-perf prctl-perf [.] loop_events_enabled # perf report --stdio --no-header --percent-limit 1 # To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 0 # # Samples: 14K of event 'cycles' # Event count (approx.): 15898142470 # # Overhead Command Shared Object Symbol # ........ .......... ................ .................................. # 50.25% prctl-perf prctl-perf [.] loop_events_disabled 49.74% prctl-perf prctl-perf [.] loop_events_enabled # Samples: 1 of event 'probe_prctl:loop_events_disabled' # Event count (approx.): 1 # # Overhead Command Shared Object Symbol # ........ .......... ............. ........................ # 100.00% prctl-perf prctl-perf [.] loop_events_disabled # Samples: 1 of event 'probe_prctl:loop_events_enabled' # Event count (approx.): 1 # # Overhead Command Shared Object Symbol # ........ .......... ............. ....................... # 100.00% prctl-perf prctl-perf [.] loop_events_enabled #