Oracle® Solaris 11.2 Dynamic Tracing Guide

Exit Print View

Updated: July 2014
 
 

Examples

Some simple examples of cpc provider usage follow.

user-insts.d

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

kern-cycles.d

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

brendan-l2miss.d

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();
 }

brendan-generic-l2miss.d

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

off_core_event.d

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

l2miss.d

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