blob: ba814d5e3c42450318a35677335d31b692365a8a (
plain)
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
120
121
122
123
124
125
126
127
128
129
130
131
|
<?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="topsyssect">
<title>Tracking Most Frequently Used System Calls</title>
<indexterm>
<primary>script examples</primary>
<secondary>monitoring system calls</secondary>
</indexterm>
<indexterm>
<primary>examples of SystemTap scripts</primary>
<secondary>monitoring system calls</secondary>
</indexterm>
<indexterm>
<primary>monitoring system calls</primary>
<secondary>examples of SystemTap scripts</secondary>
</indexterm>
<!--
<indexterm>
<primary>counting function calls</primary>
<secondary>examples of SystemTap scripts</secondary>
</indexterm>
-->
<indexterm>
<primary>system calls, monitoring</primary>
<secondary>examples of SystemTap scripts</secondary>
</indexterm>
<remark>
uses systemtap/testsuite/systemtap.examples/profiling/topsys.stp
</remark>
<para>
<xref linkend="timeouts"/> from <xref linkend="timeoutssect"/> helps you identify which applications
are polling by pointing out which ones used the following system calls most frequently:
</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>
<para>
However, in some systems, a different system call might be responsible for excessive polling. If you suspect
that a polling application might is using a different system call to poll, you need to identify first the top
system calls used by the system. To do this, use <xref linkend="topsys"/>.
</para>
<formalpara id="topsys">
<title>topsys.stp</title>
<para>
<programlisting>
<xi:include parse="text" href="../testsuite/systemtap.examples/profiling/topsys.stp" xmlns:xi="http://www.w3.org/2001/XInclude" />
</programlisting>
</para>
</formalpara>
<para>
<xref linkend="topsys"/> lists the top 20 system calls used by the system per 5-second interval. It also lists
how many times each system call was used during that period. Refer to <xref linkend="topsysoutput"/> for a sample output.
</para>
<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="topsysoutput">
<title><xref linkend="topsys"/> Sample Output</title>
<screen>
--------------------------------------------------------------
SYSCALL COUNT
gettimeofday 1857
read 1821
ioctl 1568
poll 1033
close 638
open 503
select 455
write 391
writev 335
futex 303
recvmsg 251
socket 137
clock_gettime 124
rt_sigprocmask 121
sendto 120
setitimer 106
stat 90
time 81
sigreturn 72
fstat 66
--------------------------------------------------------------
</screen>
</example>
<!--probe kernel.function(@1) { # probe function passed as argument from stdin
called[probefunc()] <<< 1 # add a count efficiently
}
global called
probe end,timer.ms(30000) {
foreach (fn+ in called) # Sort by function name
# (fn in called-) # Sort by call count (in decreasing order)
printf("%s %d\n", fn, @count(called[fn]))
exit()
}-->
</section>
|