1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
<?xml version='1.0'?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
]>
<section id="timeoutssect">
<title>Monitoring Polling Applications</title>
<indexterm>
<primary>script examples</primary>
<secondary>monitoring polling applications</secondary>
</indexterm>
<indexterm>
<primary>examples of SystemTap scripts</primary>
<secondary>monitoring polling applications</secondary>
</indexterm>
<indexterm>
<primary>monitoring polling applications</primary>
<secondary>examples of SystemTap scripts</secondary>
</indexterm>
<!--
<indexterm>
<primary>counting function calls</primary>
<secondary>examples of SystemTap scripts</secondary>
</indexterm>
-->
<indexterm>
<primary>polling applications, monitoring</primary>
<secondary>examples of SystemTap scripts</secondary>
</indexterm>
<remark>
uses systemtap/testsuite/systemtap.examples/profiling/timeout.stp
</remark>
<para>
This section describes how to identify and monitor which applications are polling. Doing so allows you to track
unnecessary or excessive polling, which can help you pinpoint areas for improvement in terms of CPU usage
and power savings.
</para>
<formalpara id="timeouts">
<title>timeout.stp</title>
<para>
<programlisting><xi:include parse="text" href="../testsuite/systemtap.examples/profiling/timeout.stp" xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
</para>
</formalpara>
<para>
<xref linkend="timeouts"/> tracks how many times each
of the following system calls completed
due to time expiring rather than due to an actual event
occurring:
</para>
<itemizedlist>
<listitem><para><command>poll</command></para></listitem>
<listitem><para><command>select</command></para></listitem>
<listitem><para><command>epoll</command></para></listitem>
<listitem><para><command>itimer</command></para></listitem>
<listitem><para><command>futex</command></para></listitem>
<listitem><para><command>nanosleep</command></para></listitem>
<listitem><para><command>signal</command></para></listitem>
</itemizedlist>
<indexterm>
<primary>script examples</primary>
<secondary>timer.s(), sample usage</secondary>
</indexterm>
<indexterm>
<primary>examples of SystemTap scripts</primary>
<secondary>timer.s(), sample usage</secondary>
</indexterm>
<indexterm>
<primary>timer.s(), sample usage</primary>
<secondary>examples of SystemTap scripts</secondary>
</indexterm>
<example id="timeoutsoutput">
<title><xref linkend="timeouts"/> Sample Output</title>
<screen> uid | poll select epoll itimer futex nanosle signal| process
28937 | 148793 0 0 4727 37288 0 0| firefox
22945 | 0 56949 0 1 0 0 0| scim-bridge
0 | 0 0 0 36414 0 0 0| swapper
4275 | 23140 0 0 1 0 0 0| mixer_applet2
4191 | 0 14405 0 0 0 0 0| scim-launcher
22941 | 7908 1 0 62 0 0 0| gnome-terminal
4261 | 0 0 0 2 0 7622 0| escd
3695 | 0 0 0 0 0 7622 0| gdm-binary
3483 | 0 7206 0 0 0 0 0| dhcdbd
4189 | 6916 0 0 2 0 0 0| scim-panel-gtk
1863 | 5767 0 0 0 0 0 0| iscsid
2562 | 0 2881 0 1 0 1438 0| pcscd
4257 | 4255 0 0 1 0 0 0| gnome-power-man
4278 | 3876 0 0 60 0 0 0| multiload-apple
4083 | 0 1331 0 1728 0 0 0| Xorg
3921 | 1603 0 0 0 0 0 0| gam_server
4248 | 1591 0 0 0 0 0 0| nm-applet
3165 | 0 1441 0 0 0 0 0| xterm
29548 | 0 1440 0 0 0 0 0| httpd
1862 | 0 0 0 0 0 1438 0| iscsid</screen>
</example>
<para>
You can increase the sample time by editing the second probe (<command>timer.s(1)</command>).
The output of <xref linkend="timeouts"/> contains the name and UID of the top 20 polling applications,
along with how many times each application performed each polling system call (over time).
<xref linkend="timeoutsoutput"/> contains an excerpt of the script.
In this particular example firefox is doing an excessive amount of
polling due to a plugin module.
</para>
</section>
|