lttng: override kvm events for LTTng27
[deliverable/tracecompass.git] / lttng / org.eclipse.tracecompass.lttng2.kernel.core / src / org / eclipse / tracecompass / internal / lttng2 / kernel / core / trace / layout / LttngEventLayout.java
1 /*******************************************************************************
2 * Copyright (c) 2012, 2015 Ericsson
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
13 package org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout;
14
15 import java.util.Collection;
16 import java.util.Collections;
17
18 import org.eclipse.jdt.annotation.NonNull;
19 import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
20
21 import com.google.common.collect.ImmutableList;
22 import com.google.common.collect.ImmutableSet;
23
24 /**
25 * This file defines all the known event and field names for LTTng kernel
26 * traces, for versions of lttng-modules up to 2.5.
27 *
28 * These should not be externalized, since they need to match exactly what the
29 * tracer outputs. If you want to localize them in a view, you should do a
30 * mapping in the view itself.
31 *
32 * @author Alexandre Montplaisir
33 */
34 @SuppressWarnings("nls")
35 public class LttngEventLayout implements IKernelAnalysisEventLayout {
36
37 /* Event names */
38 private static final String IRQ_HANDLER_ENTRY = "irq_handler_entry";
39 private static final String IRQ_HANDLER_EXIT = "irq_handler_exit";
40 private static final String SOFTIRQ_ENTRY = "softirq_entry";
41 private static final String SOFTIRQ_EXIT = "softirq_exit";
42 private static final String SOFTIRQ_RAISE = "softirq_raise";
43 private static final String HRTIMER_START = "hrtimer_start";
44 private static final String HRTIMER_CANCEL = "hrtimer_cancel";
45 private static final String HRTIMER_EXPIRE_ENTRY = "hrtimer_expire_entry";
46 private static final String HRTIMER_EXPIRE_EXIT = "hrtimer_expire_exit";
47 private static final String SCHED_SWITCH = "sched_switch";
48 private static final String SCHED_PI_SETPRIO = "sched_pi_setprio";
49
50 private static final String SCHED_TTWU = "sched_ttwu";
51 private static final String SCHED_WAKEUP = "sched_wakeup";
52 private static final String SCHED_WAKEUP_NEW = "sched_wakeup_new";
53 private static final Collection<String> SCHED_WAKEUP_EVENTS =
54 ImmutableList.of(SCHED_WAKEUP, SCHED_WAKEUP_NEW);
55
56 private static final String SCHED_PROCESS_FORK = "sched_process_fork";
57 private static final String SCHED_PROCESS_EXIT = "sched_process_exit";
58 private static final String SCHED_PROCESS_FREE = "sched_process_free";
59 private static final String SCHED_PROCESS_EXEC = "sched_process_exec";
60 private static final String STATEDUMP_PROCESS_STATE = "lttng_statedump_process_state";
61
62 private static final String SYSCALL_ENTRY_PREFIX = "sys_";
63 private static final String COMPAT_SYSCALL_ENTRY_PREFIX = "compat_sys_";
64 private static final String SYSCALL_EXIT_PREFIX = "exit_syscall";
65
66 private static final String BLOCK_RQ_INSERT= "block_rq_insert";
67 private static final String BLOCK_RQ_ISSUE= "block_rq_issue";
68 private static final String ELV_MERGE_REQUESTS= "addons_elv_merge_requests";
69 private static final String BLOCK_RQ_COMPLETE= "block_rq_complete";
70 private static final String LTTNG_STATEDUMP_BLOCK_DEVICE= "lttng_statedump_block_device";
71 private static final String BLOCK_BIO_FRONTMERGE = "block_bio_frontmerge";
72 private static final String BLOCK_BIO_BACKMERGE = "block_bio_backmerge";
73
74 /* Field names */
75 private static final String IRQ = "irq";
76 private static final String TID = "tid";
77 private static final String VEC = "vec";
78 private static final String PREV_TID = "prev_tid";
79 private static final String PREV_STATE = "prev_state";
80 private static final String NEXT_COMM = "next_comm";
81 private static final String NEXT_TID = "next_tid";
82 private static final String PARENT_TID = "parent_tid";
83 private static final String CHILD_COMM = "child_comm";
84 private static final String CHILD_TID = "child_tid";
85 private static final String PRIO = "prio";
86 private static final String PREV_PRIO = "prev_prio";
87 private static final String NEXT_PRIO = "next_prio";
88 private static final String NEW_PRIO = "newprio";
89 private static final String COMM = "comm";
90 private static final String NAME = "name";
91 private static final String STATUS = "status";
92 private static final String PREV_COMM = "prev_comm";
93 private static final String FILENAME = "filename";
94 private static final String HRTIMER = "hrtimer";
95 private static final String HRTIMER_FUNCTION = "function";
96 private static final String HRTIMER_EXPIRES = "expires";
97 private static final String HRTIMER_NOW = "now";
98 private static final String HRTIMER_SOFT_EXPIRES = "softexpires";
99 private static final String KMEM_ALLOC = "mm_page_alloc";
100 private static final String KMEM_FREE = "mm_page_free";
101 private static final String SYSCALL_RET = "ret";
102 private static final String RWBS="rwbs";
103 private static final String DISKNAME="diskname";
104 private static final String BLOCK_DEV="dev";
105 private static final String SECTOR="sector";
106 private static final String NR_SECTOR="nr_sector";
107 private static final String RQ_SECTOR= "rq_sector";
108 private static final String NEXTRQ_SECTOR= "nextrq_sector";
109
110 /* Network events and field names */
111 private static final String EVENT_NETWORK_SEND = "net_dev_queue";
112 private static final String EVENT_NETWORK_RECEIVE = "netif_receive_skb";
113 private static final String[] TCP_SEQ_FIELD = { "transport_fields", "thtype_tcp", "seq" };
114 private static final String[] TCP_ACK_FIELD = { "transport_fields", "thtype_tcp", "ack_seq" };
115 private static final String[] TCP_FLAGS_FIELD = { "transport_fields", "thtype_tcp", "flags" };
116
117 /* KVM events */
118 private static final String KVM_ENTRY = "kvm_entry"; //$NON-NLS-1$
119 private static final String KVM_EXIT = "kvm_exit"; //$NON-NLS-1$
120 private static final Collection<String> KVM_ENTRY_EVENTS = ImmutableSet.of(KVM_ENTRY);
121 private static final Collection<String> KVM_EXIT_EVENTS = ImmutableSet.of(KVM_EXIT);
122
123 /** All instances are the same. Only provide a static instance getter */
124 protected LttngEventLayout() {
125 }
126
127 private static final IKernelAnalysisEventLayout INSTANCE = new LttngEventLayout();
128
129 /**
130 * Get an instance of this event layout
131 *
132 * This object is completely immutable, so no need to create additional
133 * instances via the constructor.
134 *
135 * @return The instance
136 */
137 public static IKernelAnalysisEventLayout getInstance() {
138 return INSTANCE;
139 }
140
141 // ------------------------------------------------------------------------
142 // Event names
143 // ------------------------------------------------------------------------
144
145 @Override
146 public String eventIrqHandlerEntry() {
147 return IRQ_HANDLER_ENTRY;
148 }
149
150 @Override
151 public String eventIrqHandlerExit() {
152 return IRQ_HANDLER_EXIT;
153 }
154
155 @Override
156 public String eventSoftIrqEntry() {
157 return SOFTIRQ_ENTRY;
158 }
159
160 @Override
161 public String eventSoftIrqExit() {
162 return SOFTIRQ_EXIT;
163 }
164
165 @Override
166 public String eventSoftIrqRaise() {
167 return SOFTIRQ_RAISE;
168 }
169
170 @Override
171 public String eventSchedSwitch() {
172 return SCHED_SWITCH;
173 }
174
175 @Override
176 public String eventSchedPiSetprio() {
177 return SCHED_PI_SETPRIO;
178 }
179
180 @Override
181 public Collection<String> eventsSchedWakeup() {
182 return SCHED_WAKEUP_EVENTS;
183 }
184
185 @Override
186 public String eventSchedProcessFork() {
187 return SCHED_PROCESS_FORK;
188 }
189
190 @Override
191 public String eventSchedProcessExit() {
192 return SCHED_PROCESS_EXIT;
193 }
194
195 @Override
196 public String eventSchedProcessFree() {
197 return SCHED_PROCESS_FREE;
198 }
199
200 @Override
201 public @NonNull String eventStatedumpProcessState() {
202 return STATEDUMP_PROCESS_STATE;
203 }
204
205 @Override
206 public String eventSyscallEntryPrefix() {
207 return SYSCALL_ENTRY_PREFIX;
208 }
209
210 @Override
211 public String eventCompatSyscallEntryPrefix() {
212 return COMPAT_SYSCALL_ENTRY_PREFIX;
213 }
214
215 @Override
216 public String eventSyscallExitPrefix() {
217 return SYSCALL_EXIT_PREFIX;
218 }
219
220 @Override
221 public String eventCompatSyscallExitPrefix() {
222 /*
223 * In LTTng < 2.6, the same generic event name is used for both standard
224 * and compat syscalls.
225 */
226 return SYSCALL_EXIT_PREFIX;
227 }
228
229 /**
230 * @since 2.0
231 */
232 @Override
233 public String eventKmemPageAlloc() {
234 return KMEM_ALLOC;
235 }
236
237 /**
238 * @since 2.0
239 */
240 @Override
241 public String eventKmemPageFree() {
242 return KMEM_FREE;
243 }
244
245 // ------------------------------------------------------------------------
246 // Event field names
247 // ------------------------------------------------------------------------
248
249 @Override
250 public String fieldIrq() {
251 return IRQ;
252 }
253
254 @Override
255 public String fieldVec() {
256 return VEC;
257 }
258
259 @Override
260 public String fieldTid() {
261 return TID;
262 }
263
264 @Override
265 public String fieldPrevTid() {
266 return PREV_TID;
267 }
268
269 @Override
270 public String fieldPrevState() {
271 return PREV_STATE;
272 }
273
274 @Override
275 public String fieldNextComm() {
276 return NEXT_COMM;
277 }
278
279 @Override
280 public String fieldNextTid() {
281 return NEXT_TID;
282 }
283
284 @Override
285 public String fieldChildComm() {
286 return CHILD_COMM;
287 }
288
289 @Override
290 public String fieldParentTid() {
291 return PARENT_TID;
292 }
293
294 @Override
295 public String fieldChildTid() {
296 return CHILD_TID;
297 }
298
299 @Override
300 public String fieldPrio() {
301 return PRIO;
302 }
303
304 @Override
305 public String fieldNewPrio() {
306 return NEW_PRIO;
307 }
308
309 @Override
310 public String fieldPrevPrio() {
311 return PREV_PRIO;
312 }
313
314 @Override
315 public String fieldNextPrio() {
316 return NEXT_PRIO;
317 }
318
319 @Override
320 public String fieldComm() {
321 return COMM;
322 }
323
324 @Override
325 public String fieldName() {
326 return NAME;
327 }
328
329 @Override
330 public String fieldStatus() {
331 return STATUS;
332 }
333
334 @Override
335 public String fieldPrevComm() {
336 return PREV_COMM;
337 }
338
339 @Override
340 public String fieldFilename() {
341 return FILENAME;
342 }
343
344 @Override
345 public String eventSchedProcessExec() {
346 return SCHED_PROCESS_EXEC;
347 }
348
349 @Override
350 public String eventSchedProcessWakeup() {
351 return SCHED_WAKEUP;
352 }
353
354 @Override
355 public String eventSchedProcessWakeupNew() {
356 return SCHED_WAKEUP_NEW;
357 }
358
359 @Override
360 public String eventHRTimerStart() {
361 return HRTIMER_START;
362 }
363
364 @Override
365 public String eventHRTimerCancel() {
366 return HRTIMER_CANCEL;
367 }
368
369 @Override
370 public String eventHRTimerExpireEntry() {
371 return HRTIMER_EXPIRE_ENTRY;
372 }
373
374 @Override
375 public String eventHRTimerExpireExit() {
376 return HRTIMER_EXPIRE_EXIT;
377 }
378
379 /**
380 * Event indicating the source of the wakeup signal.
381 *
382 * @return The name of the event
383 * @since 2.0
384 */
385 public String eventSchedProcessTTWU() {
386 return SCHED_TTWU;
387 }
388
389 @Override
390 public String fieldHRtimer() {
391 return HRTIMER;
392 }
393 @Override
394 public String fieldHRtimerFunction() {
395 return HRTIMER_FUNCTION;
396 }
397
398 @Override
399 public String fieldHRtimerExpires() {
400 return HRTIMER_EXPIRES;
401 }
402
403 @Override
404 public String fieldHRtimerSoftexpires() {
405 return HRTIMER_SOFT_EXPIRES;
406 }
407 @Override
408 public String fieldHRtimerNow() {
409 return HRTIMER_NOW;
410 }
411
412 @Override
413 public String fieldSyscallRet() {
414 return SYSCALL_RET;
415 }
416
417 // ------------------------------------------------------------------------
418 // I/O events and fields
419 // ------------------------------------------------------------------------
420
421 @Override
422 public String eventBlockRqInsert() {
423 return BLOCK_RQ_INSERT;
424 }
425
426 @Override
427 public String eventBlockRqIssue() {
428 return BLOCK_RQ_ISSUE;
429 }
430
431 @Override
432 public String eventBlockRqComplete() {
433 return BLOCK_RQ_COMPLETE;
434 }
435
436 @Override
437 public String eventBlockBioFrontmerge() {
438 return BLOCK_BIO_FRONTMERGE;
439 }
440
441 @Override
442 public String eventBlockBioBackmerge() {
443 return BLOCK_BIO_BACKMERGE;
444 }
445
446 @Override
447 public String eventBlockRqMerge() {
448 return ELV_MERGE_REQUESTS;
449 }
450
451 @Override
452 public @NonNull String eventStatedumpBlockDevice() {
453 return LTTNG_STATEDUMP_BLOCK_DEVICE;
454 }
455
456 @Override
457 public String fieldBlockDeviceId() {
458 return BLOCK_DEV;
459 }
460
461 @Override
462 public String fieldBlockSector() {
463 return SECTOR;
464 }
465
466 @Override
467 public String fieldBlockNrSector() {
468 return NR_SECTOR;
469 }
470
471 @Override
472 public String fieldBlockRwbs() {
473 return RWBS;
474 }
475
476 @Override
477 public String fieldBlockRqSector() {
478 return RQ_SECTOR;
479 }
480
481 @Override
482 public String fieldBlockNextRqSector() {
483 return NEXTRQ_SECTOR;
484 }
485
486 @Override
487 public String fieldDiskname() {
488 return DISKNAME;
489 }
490
491 @Override
492 public @NonNull String eventNetworkSend() {
493 return EVENT_NETWORK_SEND;
494 }
495
496 @Override
497 public @NonNull Collection<@NonNull String> eventNetworkReceive() {
498 return Collections.singleton(EVENT_NETWORK_RECEIVE);
499 }
500
501 @Override
502 public String @NonNull [] fieldPathTcpSeq() {
503 return TCP_SEQ_FIELD;
504 }
505
506 @Override
507 public String @NonNull [] fieldPathTcpAckSeq() {
508 return TCP_ACK_FIELD;
509 }
510
511 @Override
512 public String @NonNull [] fieldPathTcpFlags() {
513 return TCP_FLAGS_FIELD;
514 }
515
516 // ------------------------------------------------------------------------
517 // VirtualMachine events : kvm entry/exit events
518 // ------------------------------------------------------------------------
519
520 @Override
521 public @NonNull Collection<@NonNull String> eventsKVMEntry() {
522 return KVM_ENTRY_EVENTS;
523 }
524
525 @Override
526 public @NonNull Collection<@NonNull String> eventsKVMExit() {
527 return KVM_EXIT_EVENTS;
528 }
529 }
This page took 0.044004 seconds and 6 git commands to generate.