X

Profiling the kernel

Guest Author

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:

<username>::::defaultpriv=basic,dtrace_user,dtrace_proc,dtrace_kernel

The correct way to modify user_attr is with the command usermod:

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 -t 10.

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 -F on:

$ 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

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.Captcha