aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <rostedt@goodmis.org>2010-04-09 11:57:28 -0400
committerSteven Rostedt <rostedt@goodmis.org>2010-04-09 11:57:28 -0400
commit933e3d54c021be56213b1475e5ac4fbebc7b48f1 (patch)
tree224dfeb650b918a23603c8a97f505ba5e7ced321
parentcf3a11c410f0f5453c2140c8737295f70bb33e3b (diff)
kerselshark/doc: Add html documentation on how to use kernelshark
Add documentation on how to use kernelshark. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--Documentation/HTML/images/kshark-cursor-1.pngbin0 -> 61110 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-advance-1.pngbin0 -> 21625 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-del-adv.pngbin0 -> 21730 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-event-adv-list.pngbin0 -> 20674 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-events-sched.pngbin0 -> 19572 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-events.pngbin0 -> 20090 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-list-adv-irq.pngbin0 -> 20789 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-sync-graph-1.pngbin0 -> 71003 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter-task-menu.pngbin0 -> 83758 bytes
-rw-r--r--Documentation/HTML/images/kshark-filter.pngbin0 -> 64849 bytes
-rw-r--r--Documentation/HTML/images/kshark-graph-info-line.pngbin0 -> 2476 bytes
-rw-r--r--Documentation/HTML/images/kshark-graph-plot-area.pngbin0 -> 5210 bytes
-rw-r--r--Documentation/HTML/images/kshark-graph-plot-title.pngbin0 -> 1144 bytes
-rw-r--r--Documentation/HTML/images/kshark-list-adjust.pngbin0 -> 80113 bytes
-rw-r--r--Documentation/HTML/images/kshark-list-enable-filter-1.pngbin0 -> 83642 bytes
-rw-r--r--Documentation/HTML/images/kshark-list-graph-follow-1.pngbin0 -> 82268 bytes
-rw-r--r--Documentation/HTML/images/kshark-list-graph-follow-2.pngbin0 -> 81639 bytes
-rw-r--r--Documentation/HTML/images/kshark-list-info-area.pngbin0 -> 5083 bytes
-rw-r--r--Documentation/HTML/images/kshark-open.pngbin0 -> 58572 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-cpu-1.pngbin0 -> 8385 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-cpu-2.pngbin0 -> 8453 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-cpu-result.pngbin0 -> 59326 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-menu.pngbin0 -> 61670 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-task-measure-preempt.pngbin0 -> 65759 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-task-measure.pngbin0 -> 65673 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-task-result.pngbin0 -> 65607 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-task-select.pngbin0 -> 26263 bytes
-rw-r--r--Documentation/HTML/images/kshark-plot-task-zoom-1.pngbin0 -> 66467 bytes
-rw-r--r--Documentation/HTML/images/kshark-select-a-1.pngbin0 -> 59254 bytes
-rw-r--r--Documentation/HTML/images/kshark-select-b-1.pngbin0 -> 59400 bytes
-rw-r--r--Documentation/HTML/images/kshark-zoom-in-2.pngbin0 -> 63059 bytes
-rw-r--r--Documentation/HTML/images/kshark-zoom-in-3.pngbin0 -> 59020 bytes
-rw-r--r--Documentation/HTML/images/kshark-zoom-in-select.pngbin0 -> 60206 bytes
-rw-r--r--Documentation/HTML/images/kshark-zoom-out-select.pngbin0 -> 62821 bytes
-rw-r--r--Documentation/HTML/index.html631
35 files changed, 631 insertions, 0 deletions
diff --git a/Documentation/HTML/images/kshark-cursor-1.png b/Documentation/HTML/images/kshark-cursor-1.png
new file mode 100644
index 0000000..64d19be
--- /dev/null
+++ b/Documentation/HTML/images/kshark-cursor-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-advance-1.png b/Documentation/HTML/images/kshark-filter-advance-1.png
new file mode 100644
index 0000000..23f6584
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-advance-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-del-adv.png b/Documentation/HTML/images/kshark-filter-del-adv.png
new file mode 100644
index 0000000..88e2376
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-del-adv.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-event-adv-list.png b/Documentation/HTML/images/kshark-filter-event-adv-list.png
new file mode 100644
index 0000000..c2f2d52
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-event-adv-list.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-events-sched.png b/Documentation/HTML/images/kshark-filter-events-sched.png
new file mode 100644
index 0000000..0941317
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-events-sched.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-events.png b/Documentation/HTML/images/kshark-filter-events.png
new file mode 100644
index 0000000..4732f8a
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-events.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-list-adv-irq.png b/Documentation/HTML/images/kshark-filter-list-adv-irq.png
new file mode 100644
index 0000000..0b04031
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-list-adv-irq.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-sync-graph-1.png b/Documentation/HTML/images/kshark-filter-sync-graph-1.png
new file mode 100644
index 0000000..82e5849
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-sync-graph-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter-task-menu.png b/Documentation/HTML/images/kshark-filter-task-menu.png
new file mode 100644
index 0000000..77fb98a
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter-task-menu.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-filter.png b/Documentation/HTML/images/kshark-filter.png
new file mode 100644
index 0000000..0e9a380
--- /dev/null
+++ b/Documentation/HTML/images/kshark-filter.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-graph-info-line.png b/Documentation/HTML/images/kshark-graph-info-line.png
new file mode 100644
index 0000000..4f6be47
--- /dev/null
+++ b/Documentation/HTML/images/kshark-graph-info-line.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-graph-plot-area.png b/Documentation/HTML/images/kshark-graph-plot-area.png
new file mode 100644
index 0000000..84ed90e
--- /dev/null
+++ b/Documentation/HTML/images/kshark-graph-plot-area.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-graph-plot-title.png b/Documentation/HTML/images/kshark-graph-plot-title.png
new file mode 100644
index 0000000..cbb8d2d
--- /dev/null
+++ b/Documentation/HTML/images/kshark-graph-plot-title.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-list-adjust.png b/Documentation/HTML/images/kshark-list-adjust.png
new file mode 100644
index 0000000..aff15c1
--- /dev/null
+++ b/Documentation/HTML/images/kshark-list-adjust.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-list-enable-filter-1.png b/Documentation/HTML/images/kshark-list-enable-filter-1.png
new file mode 100644
index 0000000..8321c92
--- /dev/null
+++ b/Documentation/HTML/images/kshark-list-enable-filter-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-list-graph-follow-1.png b/Documentation/HTML/images/kshark-list-graph-follow-1.png
new file mode 100644
index 0000000..c4f8702
--- /dev/null
+++ b/Documentation/HTML/images/kshark-list-graph-follow-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-list-graph-follow-2.png b/Documentation/HTML/images/kshark-list-graph-follow-2.png
new file mode 100644
index 0000000..451de10
--- /dev/null
+++ b/Documentation/HTML/images/kshark-list-graph-follow-2.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-list-info-area.png b/Documentation/HTML/images/kshark-list-info-area.png
new file mode 100644
index 0000000..394dfdd
--- /dev/null
+++ b/Documentation/HTML/images/kshark-list-info-area.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-open.png b/Documentation/HTML/images/kshark-open.png
new file mode 100644
index 0000000..1b201ce
--- /dev/null
+++ b/Documentation/HTML/images/kshark-open.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-cpu-1.png b/Documentation/HTML/images/kshark-plot-cpu-1.png
new file mode 100644
index 0000000..f49de93
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-cpu-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-cpu-2.png b/Documentation/HTML/images/kshark-plot-cpu-2.png
new file mode 100644
index 0000000..c1ea7d1
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-cpu-2.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-cpu-result.png b/Documentation/HTML/images/kshark-plot-cpu-result.png
new file mode 100644
index 0000000..635ddda
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-cpu-result.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-menu.png b/Documentation/HTML/images/kshark-plot-menu.png
new file mode 100644
index 0000000..a26f052
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-menu.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-task-measure-preempt.png b/Documentation/HTML/images/kshark-plot-task-measure-preempt.png
new file mode 100644
index 0000000..243aef1
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-task-measure-preempt.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-task-measure.png b/Documentation/HTML/images/kshark-plot-task-measure.png
new file mode 100644
index 0000000..d4b7149
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-task-measure.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-task-result.png b/Documentation/HTML/images/kshark-plot-task-result.png
new file mode 100644
index 0000000..12bbf8b
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-task-result.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-task-select.png b/Documentation/HTML/images/kshark-plot-task-select.png
new file mode 100644
index 0000000..be7f365
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-task-select.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-plot-task-zoom-1.png b/Documentation/HTML/images/kshark-plot-task-zoom-1.png
new file mode 100644
index 0000000..716b5c6
--- /dev/null
+++ b/Documentation/HTML/images/kshark-plot-task-zoom-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-select-a-1.png b/Documentation/HTML/images/kshark-select-a-1.png
new file mode 100644
index 0000000..40a6cfa
--- /dev/null
+++ b/Documentation/HTML/images/kshark-select-a-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-select-b-1.png b/Documentation/HTML/images/kshark-select-b-1.png
new file mode 100644
index 0000000..df4df41
--- /dev/null
+++ b/Documentation/HTML/images/kshark-select-b-1.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-zoom-in-2.png b/Documentation/HTML/images/kshark-zoom-in-2.png
new file mode 100644
index 0000000..25235e5
--- /dev/null
+++ b/Documentation/HTML/images/kshark-zoom-in-2.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-zoom-in-3.png b/Documentation/HTML/images/kshark-zoom-in-3.png
new file mode 100644
index 0000000..2c55319
--- /dev/null
+++ b/Documentation/HTML/images/kshark-zoom-in-3.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-zoom-in-select.png b/Documentation/HTML/images/kshark-zoom-in-select.png
new file mode 100644
index 0000000..12c2be7
--- /dev/null
+++ b/Documentation/HTML/images/kshark-zoom-in-select.png
Binary files differ
diff --git a/Documentation/HTML/images/kshark-zoom-out-select.png b/Documentation/HTML/images/kshark-zoom-out-select.png
new file mode 100644
index 0000000..25c7cfe
--- /dev/null
+++ b/Documentation/HTML/images/kshark-zoom-out-select.png
Binary files differ
diff --git a/Documentation/HTML/index.html b/Documentation/HTML/index.html
new file mode 100644
index 0000000..9ab45a1
--- /dev/null
+++ b/Documentation/HTML/index.html
@@ -0,0 +1,631 @@
1<html>
2
3<title>KernelShark</title>
4
5<body>
6
7<h1>KernelShark</h1>
8
9<hr><h1><a name="ToC">Table of Contents</a></h1>
10<p><b><a name="ToC_1" href="#Introduction">Introduction</a></b></br>
11<p><b><a name="ToC_2" href="#graph">The Graph View</a></b></br>
12<menu>
13<li><a name="ToC_2_1" href="#graph-zoom-in">Zooming In</a>
14<li><a name="ToC_2_2" href="#graph-zoom-out">Zooming Out</a>
15<li><a name="ToC_2_3" href="#graph-marker">Graph Markers</a>
16<li><a name="ToC_2_4" href="#graph-cursor">Graph Cursor</a>
17<li><a name="ToC_2_5" href="#graph-plots">Graph Plots</a>
18<menu>
19<li><a name="ToC_2_5_1" href="#graph-plot-task">Process Plots</a>
20<li><a name="ToC_2_5_2" href="#graph-plot-cpu">CPU Plots</a>
21</menu>
22</menu>
23<p><b><a name="ToC_3" href="#list">The List View</a></b></br>
24<menu>
25<li><a name="ToC_3_1" href="#list-select">Selecting an event</a>
26<li><a name="ToC_3_2" href="#list-graph-toggle">Graph follows toggle</a>
27</menu>
28<p><b><a name="ToC_4" href="#filters">Filters</a></b></br>
29<menu>
30<li><a name="ToC_4_1" href="#filter-task">Task Filter (filtering processes)</a>
31<li><a name="ToC_4_2" href="#filter-event">Event Filter</a>
32<menu>
33<li><a name="ToC_4_2_1" href="#filter-adv-event">Advance Event Filter</a>
34</menu>
35</menu>
36
37
38<h1><a name="Introduction">Introduction</a></h1>
39
40<p>
41KernelShark is a front end reader of <b>trace-cmd(1)</b> output. "trace-cmd record"
42and "trace-cmd extract" create a trace.dat (<b>trace-cmd.dat(5)</b>) file.
43<b>kernelshark</b> can read this file and produce a graph and list view of its data.
44</p>
45
46<img src="images/kshark-open.png">
47
48<p>
49The application has two main viewing areas split by a paned divider. The top half
50is a graphical display of the data and the bottom half is a list view of each
51event. Underneath the menu bar is the graph information area:
52</p>
53
54<h4><a name="graph-info-line">Graph Info Area</a></h4>
55
56<img src="images/kshark-graph-info-line.png">
57
58<p>
59The graph information line displays the timestamp of various locations.
60The Pointer: shows the timestamp of where the mouse pointer is. The Cursor: is
61the timestamp of the cursor location. To select a cursor location, double click
62on the graph. Marker A is set with a left mouse click and Marker B is set
63with a with a left mouse click while holding down the shift key.
64</p>
65
66<p>
67The graph is broken into two parts, the plot title section:
68</p>
69
70<h4><a name="graph-plot-title">Plot Title</a></h4>
71
72<img src="images/kshark-graph-plot-title.png">
73
74<p>
75and the plot area:
76</p>
77
78<img src="images/kshark-graph-plot-area.png">
79
80<p>
81The plot area contains the data of the given plot, where plots can be per CPU or
82per process. The top of the plot area shows a time line. The numbers in the time
83line are seconds. The time in the time line is taken from the timestamps within
84the trace.dat file which are architecture dependent. The time usually is the timestamp
85from when the system started.
86</p>
87
88<p>
89Below the graph is the list area.
90</p>
91
92<h4><a name="list-area">List Area</a></h4>
93
94<img src="images/kshark-list-info-area.png">
95
96<p>
97The list area contains the Page of the list. The list can hold a maximum of
981 million entries per page. If the trace data contains more than a million
99entries, then the list will have more than one page.
100</p>
101
102<p>
103The list area also contains a search field to search for elements in the
104list.
105</p>
106
107<h1><a name="graph">The Graph View</a></h1>
108
109<p>
110The graph view of kernelshark shows graphical plots of the data stored in
111the trace.dat file. The data plots are per CPU or per process.
112When there are too many events within the resolution of the graph,
113the plots will appear as a rainbow colored bar. To make more sense out of
114the graphs, you need to zoom into a given location to see the details of
115that time frame more clearly.
116</p>
117
118<h2><a name="graph-zoom-in">Zooming In</a></h2>
119
120<p>
121To zoom in, left mouse click and hold and then drag the mouse right, release
122to zoom. When you click the left mouse button a line will appear and stay
123at that location. When you move the mouse to the right, another line appears
124and will follow the mouse. When you release the mouse button, the area
125between the two lines become the new width of the screen. That is, the graph
126zooms in until the lines match the width of the screen. This allows you to
127zoom into a specific location.
128</p>
129
130<img src="images/kshark-zoom-in-select.png">
131
132<p>
133The area that you selected will now become the new width of the viewable area.
134The smaller the selection, the deeper the zoom. Note, that you must select 10
135pixels to zoom in. Less than 10 pixels will cancel the zoom. You can continue zooming
136in until you get mor details.
137</p>
138
139<img src="images/kshark-zoom-in-3.png">
140
141<p>
142If a plot contains no events within the zoomed in raidus, then the line will be empty,
143as CPU 1 is in the above image. CPU 0 shows two tasks that were running. One task
144is given a pink/red color and the other a green color. The colored box represents
145a task other than idle was running. The small lines that jet out of the box are
146where events occur.
147</p>
148
149<p>
150If you zoom in enough such that a single event has enough room between itself
151and other events, the type of event and the name and PID of the task that was running will appear
152over the event.
153</p>
154
155<h2><a name="graph-zoom-out">Zooming Out</a></h2>
156
157<p>
158To zoom back out, left mouse click and hold and then drag the mouse left.
159This time the width between the two lines will become a single pixel.
160The farther apart the lines are, the farther the zoom out will be.
161Zoom out will stop at the width of the full trace.
162</p>
163
164<img src="images/kshark-zoom-out-select.png">
165
166<p>
167When the mouse is over an event, a tool tip will appear showing the event name,
168the <a href="#latency">latency data</a>, the event info, the timestamp and the process
169name and process ID.
170</p>
171
172<img src="images/kshark-zoom-in-2.png">
173
174<h2><a name="graph-marker">Graph Markers</a></h2>
175
176<p>
177There are two markers that can be placed on the graph as well as a cursor.
178Marker A is set by a left mouse click. When a marker is set, the
179 <a href="#graph-info-line">graph info area</a> will be updated.
180Marker A is represented by a green line:
181</p>
182
183<img src="images/kshark-select-a-1.png">
184
185<p>
186To set Marker B, press and hold the shift key and click the left mouse button.
187Marker B will show up in red.
188</p>
189
190<img src="images/kshark-select-b-1.png">
191
192<p>
193When both the A and B markers are set, the <a href="#graph-info-line">graph info area</a>
194will show the timestamp of where the A and B markers are, as well as the difference
195between the two. All timestamps are in seconds, with a resolution of microseconds.
196</p>
197
198<h2><a name="graph-cursor">Graph Cursor</a></h2>
199
200<p>
201Double clicking on the graph will set the cursor. The cursor is a blue line, and when
202it is set, it will also select the event in the list view that is the closest event at the
203timeline of where the cursor was selected at.
204</p>
205
206<img src="images/kshark-cursor-1.png">
207
208<p>
209The above shows that list item 217448 (sys_exit) was the closest event to where
210the cursor was selected.
211</p>
212
213<p>
214Note that setting the cursor with double click will also set Marker A.
215</p>
216
217<h2><a name="graph-plots">Graph Plots</a></h2>
218
219<p>
220The graph data is represented by plots. The data on the plots is either CPU specific or
221process specific. If it is CPU specific, then the data is the time line of events that
222happened on a given CPU (which CPU is shown in the <a href="#graph-plot-title">plot title area</a>).
223If the plot is process specific, then the time line of events is for the given
224process regardless of what CPU it was on at the time. The process name is also shown
225in the plot title area.
226</p>
227
228<p>
229By default, all the CPUs within the loaded trace.dat file are plotted.
230There's two ways to plot a process. One way is to right mouse click over a
231displayed process in the graph and select the plot option. This will add the
232process plot directly underneath the CPU plot that the process was on where
233the right mouse click took place. The other way is to use the plot menu.
234</p>
235
236<img src="images/kshark-plot-menu.png">
237
238<h3><a name="graph-plot-task">Process Plots</a></h3>
239
240<p>
241Selecting the "Task" menu will bring up a dialog with all the processes (also referred
242to as tasks) that was found in the trace data.
243</p>
244
245<img src="images/kshark-plot-task-select.png">
246
247<p>
248Selecting a process in this dialog will add the task plot to the bottom of the graph
249area. Unselecting a process in this dialog will remove the plot.
250</p>
251
252<img src="images/kshark-plot-task-result.png">
253
254<p>
255The colors in the process plots are different depending on what CPU the process
256was on at the time. The CPU plots change colors as different processes run
257on the CPU, and the process plots change color depending on what CPU the process
258is running on at a time. This makes it easy to see how much a process
259bounces around the CPUs. Zooming in on a process plot also shows some more
260characteristics of the process.
261</p>
262
263<img src="images/kshark-plot-task-zoom-1.png">
264
265<p>
266The hollow green box that is shown in front of some events in the process
267plot represents when the task was woken up from a sleeping state to
268when it actually ran. The hollow red box between some events shows that
269the process was preempted by another process even though that process
270was still runnable.
271</p>
272
273<p>
274Since the hollow green box shows the wake up latency of the task, the
275<a href="#graph-marker">A,B markers</a> can be used to measure that time.
276</p>
277
278<img src="images/kshark-plot-task-measure.png">
279
280<p>
281The above shows that the epiphany-browser with PID 28072 had a 479 microsecond wake up
282latency. The same can be done with the preemption latency.
283</p>
284
285<img src="images/kshark-plot-task-measure-preempt.png">
286
287<h3><a name="graph-plot-cpu">CPU Plots</a></h2>
288
289<p>
290Selecting the CPU plot menu pops up a dialog that shows the available CPUs that
291can be plotted.
292<p>
293
294<img src="images/kshark-plot-cpu-1.png">
295
296<p>
297Removing a selected CPU and hitting "Apply" will remove that CPU plot.
298</p>
299
300<img src="images/kshark-plot-cpu-2.png">
301
302<p>
303
304<img src="images/kshark-plot-cpu-result.png">
305
306<h1><a name="list">The List View</a></h1>
307
308<p>
309The list view is in the bottom half paned window and can be expanded or shortened
310with the paned handle.
311</p>
312
313<img src="images/kshark-list-adjust.png">
314
315<p>
316The top of the list view contains the <a href="#list-area">list area</a> which has the list page, list
317search, and graph follow toggle button. If more than a million events are stored in the
318list, then each set of million will be on a different page.
319</p>
320
321<p>
322The columns of the list are:
323</p>
324
325<ul>
326<li><b>#</b> - the index into the list.
327<li><b>CPU</b> - the CPU that the event occurred on.
328<li><b>Time Stamp</b> - The time stamp of the event. This is in seconds with microsecond
329resolution.
330<li><b>PID</b> - The process ID of the task that was running when the event occurred.
331<li><b><a name="latency">Latency</a></b> - The latency is broken into 5 fields:
332 <ol>
333 <li>Interrupts disabled - 'd' if interrupts are enabled, otherwise '.'
334 <li>Need reschedule - 'N' if the kernel was notified that a schedule is needed, otherwise '.'
335 <li>In IRQ - 'h' if in a hard IRQ (hardware triggerred), 's' if in a soft IRQ
336 (context where the kernel initiated a the irq handler) or if soft IRQs
337 are disabled, 'H' if in a hard IRQ and soft IRQs are disabled or the hard IRQ
338 triggerred while processing a soft IRQ, otherwise '.'
339 <li>Preemption counter - The index of the preemption counter. If it is other
340 than zero, then the kernel will not preempt the running processes, even
341 if a schedule has been requested by some event. If the counter is zero,
342 then '.' is shown.
343 <li>Lock depth - The depth of the big kernel lock being held. The big kernel
344 lock is recusive (same task may acquire it multiple times). On the first
345 acquisition, the depth is zero. This field will be zero or greater, or
346 '.' if the big kernel lock is not held. When the big kernel lock is
347 finally removed from the kernel, this field will go away as well.
348 </ol>
349<li><b>Event</b> - The name of the event.
350<li><b>Info</b> - The data output of a particular event.
351</ul>
352
353<p>
354The list search can find an event based on the contents in a row. Select a column, a
355match criteria and the content to match will find the next row that matches the
356search. The match criteria is one of the following:
357</p>
358
359<ul>
360<li><b>contains</b> - the row cell of the selected column contains the match data. This works with numbers
361as well.
362<li><b>full match</b> - the row cell of the selected column matches exactly the match data.
363<li><b>does not have</b> - the row cell of the selected column does not contain the match data.
364</ul>
365
366<p>
367The search will find the next event that has the matching data within the column.
368</p>
369
370<h2><a name="list-select">Selecting an event</a></h2>
371<p>
372A single click on a row will select the row, but a double click on a row will select
373that row as well as set the graph cursor to the location of that event. If the plot
374that the event is on is not visible then the graph will adjust it vertical view area
375to show the plot with the selected event. This has no effect on
376<a href="#graph-marker">graph markers</a>.
377<p>
378
379<h2><a name="list-graph-toggle">Graph follows toggle</a></h2>
380
381<p>
382When the "graph follows" toggle is set, then even a single click on a row
383will move the graph cursor. With the mouse focus on the list, using the keyboard
384up and down arrow keys will move the selection of the list as well as the graph
385cursor.
386</p>
387
388<img src="images/kshark-list-graph-follow-1.png">
389<p>
390<img src="images/kshark-list-graph-follow-2.png">
391
392<h1><a name="filters">Filters</a></h1>
393
394<p>
395The amount of data that can be stored in a trace.dat file can be enourmous.
396To make any sense out of some traces, it may be required to only display various
397events. The same can be true about processes.
398Kernelshark has filters for tasks as well as for events. The task filter
399affects both the graph and the list, but the graph and list each have a separate
400event filter.
401<p>
402
403<h2><a name="filter-task">Task Filter (filtering processes)</a></h2>
404
405<p>
406The task (process) filter is currently set by a right mouse click over
407an event on either the graph or the list view, and by selecting the option to add or remove the
408task to/from the task filter. The tasks within the task filter are the same for
409both the graph and list, but each can be enabled separately.
410</p>
411
412<p>
413There are two types of task filters:
414</p>
415
416<ul>
417<li>Task Filter - only show tasks that are in this filter
418<li>Hide Tasks - do not display the tasks within this filter
419</ul>
420
421<p>
422If there are any tasks within the Task Filter then only those tasks will be displayed
423when the filter is enabled. Any task within the Hide Tasks filter will not be
424displayed, even if that same task is in the Task Filter.
425</p>
426
427<img src="images/kshark-filter-task-menu.png">
428
429<p>
430When either filter contains a task, the filter can be enabled.
431</p>
432
433<img src="images/kshark-list-enable-filter-1.png">
434
435<h4>The scheduling events</h4>
436
437<p>
438The events "sched_switch", "sched_wakeup", and "sched_wakeup_new" are treated
439differently by the task filter. Because these events deal with two tasks
440(previous and next, waker and wakee), if either of the tasks should be visible
441then that event is visible regardless if the other task should be hidden.
442This may seem confusing when an event that is hidden shows up in the Task column.
443</p>
444
445<h2><a name="filter-event">Event Filter</a></h2>
446
447<p>
448The graph and list view each have their own event filter. The event filters
449are enabled through the Filter menu on the top menu-bar.
450</p>
451
452<img src="images/kshark-filter.png">
453
454<p>
455Selecting either the "list events" or "graph events" will bring up the event
456dialog with the events that are visible selected.
457</p>
458
459<p>
460Note: these do not mean that the events exist in the trace.dat file. They are
461selected if the events are not to be hidden. Events that do not exist in the trace
462and will not be displayed regardless of whether or not they are filtered.
463</p>
464
465<img src="images/kshark-filter-events.png">
466
467<p>
468By clicking on "All" or any of the systems will either deselect all events underneath
469or select all events underneath depending on the previous state of the box being
470selected. By deselecting all events, it makes it easier to enable just a few individual events.
471<p>
472
473<img src="images/kshark-filter-events-sched.png">
474
475<p>
476If it is desired that the graph and list view have the same events filtered, then just
477set up the desired filtering in one and then synchronize the other through
478the filter menu.
479</p>
480
481<img src="images/kshark-filter-sync-graph-1.png">
482
483<ul>
484<li><b>sync graph events with list</b> - will set the graph event filter to be the same
485as what is in the list filter.
486<li><b>sync list events with graph</b> - will set the list event filter to be the same
487as what is in the graph filter.
488</ul>
489
490<h3><a name="filter-adv-event">Advance Event Filter</a></h3>
491
492<p>
493Filtering on events may not be enough. The ability to filter on the content
494of individual events may be needed. In order to accomplish this, the advanced event
495filtering is used. Selecting the "list advanced event" or "graph advanced event"
496from the filter menu will pop up the advanced event filtering dialog.
497The graph and list view each have their own advanced event filter.
498</p>
499
500<img src="images/kshark-filter-advance-1.png">
501
502<p>
503The "Filter:" entry at the bottom of the dialog is where the advanced filter is
504written. Above that is helper buttons to pick events, operations and event fields.
505The syntax of the filter is:
506<p>
507
508<pre>
509 FILTER := EVENTS | EVENTS ':' EXPRESSION
510 EVENTS := EVENTS ',' EVENTS | SYSTEM '/' EVENT | SYSTEM | EVENT
511 SYSTEM := any system name
512 EVENT := any event name
513 EXPRESSION := EXPRESSION BOOL EXPRESSION | '(' EXPRESSION ')' | OPERATION
514 BOOL := '&&' | '||'
515 OPERATION := '!' EXPRESSION | LVALUE CMP RVALUE | LVALUE STRCMP STRVALUE
516 CMP := '&gt;' | '&lt;' | '==' | '&gt;=' | '&lt;=' | '!='
517 STRCMP := '==' | '!=' | '=~' | '!~'
518 RVALUE := integer | FIELD
519 STRVALUE := string (double quoted value) | FIELD
520 LVALUE := FIELD | EXPR
521 EXPR := FIELD OP RVALUE | '(' EXPR ')' | EXPR OP EXPR
522 FIELD := a field name of an event
523 OP := '+' | '-' | '*' | '/' | '&lt;&lt;' | '&gt;&gt;' | '&' | '!'
524</pre>
525
526<p>
527Spaces are ignored. The example used in the dialog figure:
528</p>
529
530<pre>
531 sched/sched_switch : next_prio &lt; 100 && (prev_prio &gt; 100 && prev_pid != 0)
532</pre>
533
534<p>
535The <tt>sched/</tt> is not necessary because without it, the filter will process all events
536named <tt>sched_switch</tt>, and since there is only one event
537that has that name, including the <tt>sched/</tt> is redundant.
538<p>
539
540<p>
541The <tt>next_prio</tt>, <tt>prev_prio</tt> and <tt>prev_pid</tt> are all
542event fields of the <tt>sched_swich</tt> event.
543</p>
544
545<p>
546If just <tt>sched</tt> was used and the <tt>/sched_switch</tt> was omitted, it would
547still be a valid filter, but it would behave differently. By just specifying
548a system, the filter will run on all events within that system. When a field
549is encountered that does not belong to an event, then that compare will be set to false.
550</p>
551
552<pre>
553 sched : prev_pid != 0
554 sched : !(prev_pid == 0)
555</pre>
556
557<p>
558The above two filters are not equivalent. They are for the <tt>sched_switch</tt> event,
559but not for the other events. The first filter will return false for all events
560that do not contain the <tt>prev_pid</tt> field, but the second filter would return
561true for all events that do not contain that field. Again, if the event does
562not contain a field, just that compare will be evaluated to false, not the entire
563expression. This means for events that do not have the <tt>prev_pid</tt> field,
564the above filters would be equivalent to:
565</p>
566
567<pre>
568 sched : FALSE
569 sched : !(FALSE)
570</pre>
571
572<p>
573By letting the filters contain fields that do not belong to an event be valid,
574allows for various tricks where two events can share the same
575filter.
576</p>
577
578<pre>
579 sched_switch, sched_wake.* : next_pid == 1 || pid == 1
580</pre>
581
582<p>
583The schedule events that have <tt>next_pid</tt> and not <tt>pid</tt> as a field
584will just compare the first part of the <tt>||</tt> and those events with
585<tt>pid</tt> but without <tt>next_pid</tt> will be compared against the second
586part of the <tt>||</tt>
587</p>
588
589<p>
590Notice: that event names in the filter can be regular expressions.
591</p>
592
593<p>
594String fields can have regular expressions used in their comparing if
595<tt>=~</tt> or <tt>!~</tt> are used.
596</p>
597
598<pre>
599 sched_switch : next_comm =~ "^events/[23]$"
600</pre>
601
602<p>
603Note: When adding an advanced filter, all non advanced filters
604(added by the event filter dialog box) will be removed, and only the advanced
605filters will stay. But non advanced filters may be added after advanced
606filters have been. The events that have advanced filters will be shadowed
607in the event filter dialog:
608<p>
609
610<img src="images/kshark-filter-event-adv-list.png">
611
612<p>
613Just do not click on the adavanced filter box and hit "Apply" unless you want to remove
614the adavanced filter. Non advanced filters can now be selected without affecting
615the advanced filters.
616</p>
617
618<img src="images/kshark-filter-list-adv-irq.png">
619
620<p>
621When adavanced filters already exist when the advanced filter dialog box pops up,
622they will be listed in the area at the top of the dialog. Although
623one filter may have been written, the list will be per event. A check box
624is to the left of the filter, when checked, the filter will be deleted if
625the "Apply" button is selected.
626</p>
627
628<img src="images/kshark-filter-del-adv.png">
629
630</body>
631</html>