One of the incredibly useful features in Studio is the ability to profile the kernel. The tool to do this is er_kernel. It's based around dtrace, so you either need to run it with escalated privileges, or you need to edit
/etc/user_attr to add something like:
usermod -K defaultpriv=basic,dtrace_user,dtrace_proc,dtrace_kernel <username>
There's two ways to run er_kernel. The default mode is to just profile the kernel:
$ er_kernel sleep 10 .... Creating experiment database ktest.1.er (Process ID: 7399) ... .... $ er_print -limit 10 -func ktest.1.er Functions sorted by metric: Exclusive Kernel CPU Time Excl. Incl. Name Kernel Kernel CPU sec. CPU sec. 19.242 19.242 <Total> 14.869 14.869 <l_PID_7398> 0.687 0.949 default_mutex_lock_delay 0.263 0.263 mutex_enter 0.202 0.202 <java_PID_248> 0.162 0.162 gettick 0.141 0.141 hv_ldc_tx_set_qtail ...
The we passed the command
sleep 10 to
er_kernel, this causes it to profile for 10 seconds. It might be better form to use the equivalent command line option
In the profile we can see a couple of user processes together with some kernel activity. The other way to run er_kernel is to profile the kernel and user processes. We enable this mode with the command line option
$ er_kernel -F on sleep 10 ... Creating experiment database ktest.2.er (Process ID: 7630) ... ... $ er_print -limit 5 -func ktest.2.er Functions sorted by metric: Exclusive Total CPU Time Excl. Incl. Excl. Incl. Name Total Total Kernel Kernel CPU sec. CPU sec. CPU sec. CPU sec. 15.384 15.384 16.333 16.333 <Total> 15.061 15.061 0. 0. main 0.061 0.061 0. 0. ioctl 0.051 0.141 0. 0. dt_consume_cpu 0.040 0.040 0. 0. __nanosleep ...
In this case we can see all the userland activity as well as kernel activity. The
-F option is very flexible, instead of just profiling everything, we can use
-F =<regexp>syntax to specify either a PID or process name to profile:
$ er_kernel -F =7398