analysis: Improve comments for IKernelAnalysis.java
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.core / src / org / eclipse / tracecompass / analysis / os / linux / core / trace / IKernelAnalysisEventLayout.java
CommitLineData
7411cd67 1/*******************************************************************************
ed902a2b 2 * Copyright (c) 2014, 2015 Ericsson
7411cd67
AM
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Alexandre Montplaisir - Initial API and implementation
11 ******************************************************************************/
12
e363eae1 13package org.eclipse.tracecompass.analysis.os.linux.core.trace;
7411cd67
AM
14
15import java.util.Collection;
16
bd0e2f70
AM
17import org.eclipse.jdt.annotation.Nullable;
18
7411cd67
AM
19/**
20 * Interface to define "concepts" present in the Linux kernel (represented by
21 * its tracepoints), that can then be exposed by different tracers under
22 * different names.
23 *
24 * @author Alexandre Montplaisir
b89d8ade 25 * @author Matthew Khouzam - Javadoc
7411cd67 26 */
7411cd67
AM
27public interface IKernelAnalysisEventLayout {
28
29 // ------------------------------------------------------------------------
30 // Common definitions
31 // ------------------------------------------------------------------------
32
b89d8ade
MK
33 /**
34 * The standard layout, very useful for test vectors that are not kernel
35 * based.
36 */
e363eae1
AM
37 IKernelAnalysisEventLayout DEFAULT_LAYOUT = DefaultEventLayout.INSTANCE;
38
7411cd67
AM
39 /**
40 * Whenever a process appears for the first time in a trace, we assume it
41 * starts inside this system call. (The syscall prefix is defined by the
42 * implementer of this interface.)
43 *
44 * TODO Change to a default method with Java 8?
45 */
46 String INITIAL_SYSCALL_NAME = "clone"; //$NON-NLS-1$
47
48 // ------------------------------------------------------------------------
49 // Event names
50 // ------------------------------------------------------------------------
51
b89d8ade
MK
52 /**
53 * The system has just entered an interrupt handler or interrupt service
54 * routine. On some systems, this is known as the first level interrupt
55 * handler.
56 *
57 * @return the event name
58 */
7411cd67 59 String eventIrqHandlerEntry();
b89d8ade
MK
60
61 /**
62 * The system will soon return from an interrupt handler or interrupt
63 * service routine.
64 *
65 * @return the event name
66 */
7411cd67 67 String eventIrqHandlerExit();
b89d8ade
MK
68
69 /**
70 * Whenever a system call is about to return to userspace, or a hardware
71 * interrupt handler exits, any 'software interrupts' which are marked
72 * pending (usually by hardware interrupts) are run. Much of the real
73 * interrupt handling work is done here. The soft IRQ is also known as a
74 * deferred IRQ in windows. An event identifying as this needs to occur as
75 * the system is beginning to process the interrupt.
76 *
77 * @return the event name
78 */
7411cd67 79 String eventSoftIrqEntry();
b89d8ade
MK
80
81 /**
82 * Whenever a system call is about to return to userspace, or a hardware
83 * interrupt handler exits, any 'software interrupts' which are marked
84 * pending (usually by hardware interrupts) are run Much of the real
85 * interrupt handling work is done here. The soft IRQ is also known as a
86 * deferred IRQ in windows. An event identifying as this needs to occur as
87 * the system is returning from the interrupt.
88 *
89 * @return the event name
90 */
7411cd67 91 String eventSoftIrqExit();
b89d8ade
MK
92
93 /**
94 * Whenever a system call is about to return to userspace, or a hardware
95 * interrupt handler exits, any 'software interrupts' which are marked
96 * pending (usually by hardware interrupts) are run Much of the real
97 * interrupt handling work is done here. The soft IRQ is also known as a
98 * deferred IRQ in windows. An event identifying as this needs to occur as
99 * the system is signaling the need to enter the interrupt.
100 *
101 * @return the event name
102 */
7411cd67 103 String eventSoftIrqRaise();
b89d8ade
MK
104
105 /**
106 * The scheduler will call a scheduler switch event when it is removing a
107 * task from a cpu and placing another one in its place. Which task and when
108 * depend on the scheduling strategy and the task priorities. This is a
109 * context switch.
110 *
111 * @return the event name
112 */
7411cd67 113 String eventSchedSwitch();
dbc7991d 114
b89d8ade
MK
115 /**
116 * sched_PI_setprio is a tracepoint called often when the schedulder
117 * priorities for a given task changes.
118 *
119 * @return the event name
120 * @since 1.0
121 */
3bf563da 122 String eventSchedPiSetprio();
dbc7991d 123
b89d8ade
MK
124 /**
125 * Scheduler is waking up a task. this happens before it is executed, and
126 * the data is loaded in memory if needed.
127 *
128 * @return the event names, as there are often several different ways to
129 * wake up
130 */
7411cd67 131 Collection<String> eventsSchedWakeup();
b89d8ade
MK
132
133 /**
134 * Scheduler just forked a process, that means it has duplicated the program
135 * and assigned it a different process ID. This event is often followed by
136 * an {@link #eventSchedProcessExec()}. In windows, this is part of the
137 * "spawn" process.
138 *
139 * @return the event name
140 */
7411cd67 141 String eventSchedProcessFork();
b89d8ade
MK
142
143 /**
144 * The process has finished running and the scheduler takes its TID back.
145 *
146 * @return the event name
147 */
7411cd67 148 String eventSchedProcessExit();
b89d8ade
MK
149
150 /**
151 * The process free tracepoint is called when a process has finished running
152 * and the scheduler retrieves it's process ID.
153 *
154 * @return the event name
155 */
7411cd67 156 String eventSchedProcessFree();
b89d8ade
MK
157
158 /**
159 * Optional event used by some tracers to deliver an initial state.
160 *
161 * @return the event name
162 */
bd0e2f70 163 @Nullable String eventStatedumpProcessState();
b89d8ade
MK
164
165 /**
166 * System call entry prefix, something like "sys_open" or just "sys".
167 *
168 * @return the event name
169 */
7411cd67 170 String eventSyscallEntryPrefix();
b89d8ade
MK
171
172 /**
173 * System call compatibility layer entry prefix, something like
174 * "compat_sys".
175 *
176 * @return the event name
177 */
7411cd67 178 String eventCompatSyscallEntryPrefix();
b89d8ade
MK
179
180 /**
181 * System call exit prefix, something like "sys_exit".
182 *
183 * @return the event name
184 */
acba092b 185 String eventSyscallExitPrefix();
7411cd67 186
b89d8ade
MK
187 /**
188 * The scheduler replaced the current process image with a new one. The
189 * process should also be renamed at this point. In windows, this is part of
190 * the spawn process as well as fork.
191 *
192 * @return the event name
193 *
194 * @since 2.0
195 */
fb3a499b
FG
196 String eventSchedProcessExec();
197
b89d8ade
MK
198 /**
199 * The scheduler calls wakeup on a sleeping process. The process will
200 * probably soon be scheduled in.
201 *
202 * @return the event name
203 *
204 * @since 2.0
205 */
fb3a499b
FG
206 String eventSchedProcessWakeup();
207
b89d8ade
MK
208 /**
209 * The scheduler calls wakeup on a sleeping process. The process will
210 * probably soon be scheduled in. The new wakeup knows who triggered the
211 * wakeup.
212 *
213 * @return the event name
214 *
215 * @since 2.0
216 */
fb3a499b
FG
217 String eventSchedProcessWakeupNew();
218
b89d8ade
MK
219 /**
220 * Entering the high resolution timer expired handler.
221 * <p>
222 * In Linux, High resolution timers are used in the following:
223 * <ul>
224 * <li>nanosleep</li>
225 * <li>itimers</li>
226 * <li>posix timers</li>
227 * </ul>
228 *
229 * @return the event name
230 *
231 * @since 2.0
232 */
fb3a499b
FG
233 String eventHRTimerExpireEntry();
234
b89d8ade
MK
235 /**
236 * Exiting the high resolution timer expired handler.
237 * <p>
238 * In Linux, High resolution timers are used in the following:
239 * <ul>
240 * <li>nanosleep</li>
241 * <li>itimers</li>
242 * <li>posix timers</li>
243 * </ul>
244 *
245 * @return the event name
246 *
247 * @since 2.0
248 */
fb3a499b 249 String eventHRTimerExpireExit();
b89d8ade 250
7411cd67
AM
251 // ------------------------------------------------------------------------
252 // Event field names
253 // ------------------------------------------------------------------------
254
b89d8ade
MK
255 /**
256 * The field with the IRQ number. This is used in irq_handlers (entry and
257 * exit). For soft IRQs see {@link #fieldVec}.
258 *
259 * @return the name of the field with the IRQ number
260 */
7411cd67 261 String fieldIrq();
b89d8ade
MK
262
263 /**
264 * The field with the vector. This is the soft IRQ vector field used in soft
265 * IRQ raise, entry and exit. For hardware IRQs see {@link #fieldIrq}.
266 *
267 * @return the name of the field with the soft IRQ vector name
268 */
7411cd67 269 String fieldVec();
b89d8ade
MK
270
271 /**
272 * The field with the thread ID. This is often used in scheduler calls to
273 * know which thread is being affected. (normally not in switch, but in
274 * priority and wakeup calls).
275 *
276 * @return the name of the field with the thread ID
277 */
7411cd67 278 String fieldTid();
b89d8ade
MK
279
280 /**
281 * The field with the previous thread id. This is used in switching
282 * operations of a scheduler, when a thread is scheduled out for another,
283 * this field shows the thread id being scheduled out.
284 *
285 * @return The name of the field with the ID of the previous thread
286 */
7411cd67 287 String fieldPrevTid();
b89d8ade
MK
288
289 /**
290 * The field with the state of the previous thread. This is used in
291 * switching operations of a scheduler, when a thread is scheduled out for
292 * another, this field shows the state of the thread being scheduled out.
293 *
294 * @return the name of the field of the previous thread's state
295 */
7411cd67 296 String fieldPrevState();
b89d8ade
MK
297
298 /**
299 * The field with the next command to be run. This is used in switching
300 * operations of a scheduler, when a thread is scheduled out for another,
301 * this field shows the command being scheduled in. A command's value is
302 * often a String like "ls" or "hl3.exe".
303 *
304 * @return the name of the field with the next command to be run
305 */
7411cd67 306 String fieldNextComm();
b89d8ade
MK
307
308 /**
309 * The field with the next thread ID. This is used in switching operations
310 * of a scheduler, when a thread is scheduled out for another, this field
311 * shows the thread being scheduled in.
312 *
313 * @return the name of the field with the next thread ID
314 */
7411cd67 315 String fieldNextTid();
b89d8ade
MK
316
317 /**
318 * The field with the child command. This field is used in clone and spawn
319 * activities, to know which executable the clone is running.
320 *
321 * @return the name of the field with the child command
322 */
7411cd67 323 String fieldChildComm();
b89d8ade
MK
324
325 /**
326 * The field with the parent thread ID. This field is used in clone and
327 * spawn activities, to know which thread triggered the clone.
328 *
329 * @return the name of the field with the parent thread ID
330 */
7411cd67 331 String fieldParentTid();
b89d8ade
MK
332
333 /**
334 * The field with the child thread ID. This field is used in clone and spawn
335 * activities, to know which thread is the clone.
336 *
337 * @return the name of the field with the child thread ID
338 */
7411cd67 339 String fieldChildTid();
dbc7991d 340
b89d8ade
MK
341 /**
342 * The field with the command. This is used in scheduling tracepoints that
343 * are not switches, and show the current process name. It is often a string
344 * like "zsh" or "cmd.exe".
345 *
346 * @return the name of the command field
347 * @since 2.0
348 */
fb3a499b
FG
349 String fieldComm();
350
b89d8ade
MK
351 /**
352 * The field with the name. The name field is used in several disjoint
353 * events.
354 * <p>
355 * Examples include:
356 * <ul>
357 * <li>writeback_* - the name of the io device, often "(unknown)"</li>
358 * <li>module_* - the name of the module such as "binfmt_misc"</li>
359 * <li>irq_handler_entry - the field describes the name of the handler such
360 * as "i915"</li>
361 * <ul>
362 *
363 * @return the name of the field with a name
364 * @since 2.0
365 */
fb3a499b
FG
366 String fieldName();
367
b89d8ade
MK
368 /**
369 * The field with the status. Often functions like a return value before we
370 * hit an exit.
371 * <p>
372 * Examples include:
373 * <ul>
374 * <li>ext4* - status</li>
375 * <li>asoc_snd_soc_cache_sync</li>
376 * <li>rpc_*</li>
377 * <li>state dumps</li>
378 * </ul>
379 *
380 * @return The name of the field with a status
381 * @since 2.0
382 */
fb3a499b
FG
383 String fieldStatus();
384
b89d8ade
MK
385 /**
386 * The field with the last command to be run. This is often a string
387 * representing the command of the thread being scheduled out from a
388 * scheduler switch operation.
389 *
390 * @return the name of the field with the last command to be run
391 * @since 2.0
392 */
fb3a499b
FG
393 String fieldPrevComm();
394
b89d8ade
MK
395 /**
396 * The field with the file name field. This is a string used mostly with
397 * file operations. These operations are often wrapped in system calls and
398 * can be:
399 * <ul>
400 * <li>open</li>
401 * <li>change mode</li>
402 * <li>change directory</li>
403 * <li>stat</li>
404 * </ul>
405 * It can also be used in exec commands to see what the command name should
406 * be.
407 * <p>
408 * Please note that file read and write often do not use the file name, they
409 * just use the file handle.
410 *
411 * @return the name of the field with the file name
412 * @since 2.0
413 */
fb3a499b
FG
414 String fieldFilename();
415
b89d8ade
MK
416 /**
417 * The field with the priority. The priority of a given process is used by
418 * most scheduler events. The major exception is the switching operation as
419 * it has two processes so it has a previous and next priority.
420 *
421 * @return the name of the field with the thread or process' priority
422 * @since 1.0
423 */
3bf563da 424 String fieldPrio();
dbc7991d 425
b89d8ade
MK
426 /**
427 * The field with the new priority. This is used in the scheduler's
428 * pi_setprio event event to show the new priority of the thread or process.
429 *
430 * @return the name of the field with the thread or process' new priority
431 * @since 1.0
432 */
3bf563da 433 String fieldNewPrio();
dbc7991d 434
b89d8ade
MK
435 /**
436 * The field with the next priority. This is used in the scheduler's switch
437 * event to show the priority of the next thread or process.
438 *
439 * @return the name of the field with the thread or process' next priority
440 * @since 1.0
441 */
3bf563da 442 String fieldNextPrio();
7411cd67 443}
This page took 0.061861 seconds and 5 git commands to generate.