Some simple examples of cpc provider usage follow.
The simple script displays instructions executed by applications on an AMD platform
cpc:::FR_retired_x86_instr_w_excp_intr-user-10000 { @[execname] = count(); } # ./user-insts.d dtrace: script './user-insts.d' matched 1 probe ^C [chop] init 138 dtrace 175 nis_cachemgr 179 automountd 183 intrd 235 run-mozilla.sh 306 thunderbird 316 Xorg 453 thunderbird-bin 2370 sshd 8114
The following example shows a kernel profiled by cycle usage on an AMD platform.
cpc:::BU_cpu_clk_unhalted-kernel-10000 { @[func(arg0)] = count(); } # ./kern-cycles.d dtrace: script './kern-cycles.d' matched 1 probe ^C [chop] genunix`vpm_sync_pages 478948 genunix`vpm_unmap_pages 496626 genunix`vpm_map_pages 640785 unix`mutex_delay_default 916703 unix`hat_kpm_page2va 988880 tmpfs`rdtmp 991252 unix`hat_page_setattr 1077717 unix`page_try_reclaim_lock 1213379 genunix`free_vpmap 1914810 genunix`get_vpmap 2417896 unix`page_lookup_create 3992197 unix`mutex_enter 5595647 unix`do_copy_fault_nta 27803554
In this example we are looking at user-mode L2 cache misses and the functions that generated them on an AMD platform. The predicate ensures that we only sample function names when the probe was fired by the 'brendan' executable.
cpc:::BU_fill_req_missed_L2-all-0x7-10000 /execname == "brendan"/ { @[ufunc(arg1)] = count(); } ./brendan-l2miss.d dtrace: script './brendan-l2miss.d' matched 1 probe CPU ID FUNCTION:NAME ^C brendan`func_gamma 930 brendan`func_beta 1578 brendan`func_alpha 2945
You can have the same result with the following probe name format.
cpc:::BU_fill_req_missed_L2-all-umask_0x7-10000 / execname == "brendan" / { @[ufunc(arg1)] = count(); }
Here we use the same example as about but we use the much simpler generic event PAPI_l2_dcm to indicate our interest in L2 data cache misses instead of the platform event.
cpc:::PAPI_l2_dcm-all-10000 /execname == "brendan"/ { @[ufunc(arg1)] = count(); } # ./breandan-generic-l2miss.d dtrace: script './brendan-generic-l2miss.d' matched 1 probe ^C brendan`func_gamma 1681 brendan`func_beta 2521 brendan`func_alpha 5068
The following example probes offcore event on an Intel platform:
cpc:::off_core_response_0-all-msr_offcore_0x3001-10000 { @[execname] = count(); } # ./off_core_event.d dtrace: script './off_core_event.d' matched 1 probe ^C fmd 3 fsflush 36 sched 175
Multiple attributes are allowed using '-' between attributes.
The following example sets two attributes to probe L2 miss event in an AMD platform.
cpc:::BU_fill_req_missed_L2-all-umask_0x7-cmask_0x0-10000 { @[execname] = count(); } # ./l2miss.d dtrace: script './l2miss.d' matched 1 probe automountd 1 dtrace 1 fmd 1 in.routed 1 netcfgd 1 nscd 1 sendmail 1 utmpd 1 kcfd 2 syslogd 2 uname 2 file 3 ls 3 sshd 4 zfs 9 bash 10 ksh93 10 ssh 22 fsflush 34 sched 68 beadm 146