1 /*******************************************************************************
2 * Copyright (c) 2012, 2015 Ericsson
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
10 * Alexandre Montplaisir - Initial API and implementation
11 ******************************************************************************/
13 package org
.eclipse
.tracecompass
.internal
.lttng2
.kernel
.core
.trace
.layout
;
15 import java
.util
.Collection
;
16 import java
.util
.Collections
;
18 import org
.eclipse
.jdt
.annotation
.NonNull
;
19 import org
.eclipse
.tracecompass
.analysis
.os
.linux
.core
.trace
.IKernelAnalysisEventLayout
;
21 import com
.google
.common
.collect
.ImmutableList
;
24 * This file defines all the known event and field names for LTTng kernel
25 * traces, for versions of lttng-modules up to 2.5.
27 * These should not be externalized, since they need to match exactly what the
28 * tracer outputs. If you want to localize them in a view, you should do a
29 * mapping in the view itself.
31 * @author Alexandre Montplaisir
33 @SuppressWarnings("nls")
34 public class LttngEventLayout
implements IKernelAnalysisEventLayout
{
37 private static final String IRQ_HANDLER_ENTRY
= "irq_handler_entry";
38 private static final String IRQ_HANDLER_EXIT
= "irq_handler_exit";
39 private static final String SOFTIRQ_ENTRY
= "softirq_entry";
40 private static final String SOFTIRQ_EXIT
= "softirq_exit";
41 private static final String SOFTIRQ_RAISE
= "softirq_raise";
42 private static final String HRTIMER_START
= "hrtimer_start";
43 private static final String HRTIMER_CANCEL
= "hrtimer_cancel";
44 private static final String HRTIMER_EXPIRE_ENTRY
= "hrtimer_expire_entry";
45 private static final String HRTIMER_EXPIRE_EXIT
= "hrtimer_expire_exit";
46 private static final String SCHED_SWITCH
= "sched_switch";
47 private static final String SCHED_PI_SETPRIO
= "sched_pi_setprio";
49 private static final String SCHED_TTWU
= "sched_ttwu";
50 private static final String SCHED_WAKEUP
= "sched_wakeup";
51 private static final String SCHED_WAKEUP_NEW
= "sched_wakeup_new";
52 private static final Collection
<String
> SCHED_WAKEUP_EVENTS
=
53 ImmutableList
.of(SCHED_WAKEUP
, SCHED_WAKEUP_NEW
);
55 private static final String SCHED_PROCESS_FORK
= "sched_process_fork";
56 private static final String SCHED_PROCESS_EXIT
= "sched_process_exit";
57 private static final String SCHED_PROCESS_FREE
= "sched_process_free";
58 private static final String SCHED_PROCESS_EXEC
= "sched_process_exec";
59 private static final String STATEDUMP_PROCESS_STATE
= "lttng_statedump_process_state";
61 private static final String SYSCALL_ENTRY_PREFIX
= "sys_";
62 private static final String COMPAT_SYSCALL_ENTRY_PREFIX
= "compat_sys_";
63 private static final String SYSCALL_EXIT_PREFIX
= "exit_syscall";
65 private static final String BLOCK_RQ_INSERT
= "block_rq_insert";
66 private static final String BLOCK_RQ_ISSUE
= "block_rq_issue";
67 private static final String ELV_MERGE_REQUESTS
= "addons_elv_merge_requests";
68 private static final String BLOCK_RQ_COMPLETE
= "block_rq_complete";
69 private static final String LTTNG_STATEDUMP_BLOCK_DEVICE
= "lttng_statedump_block_device";
70 private static final String BLOCK_BIO_FRONTMERGE
= "block_bio_frontmerge";
71 private static final String BLOCK_BIO_BACKMERGE
= "block_bio_backmerge";
74 private static final String IRQ
= "irq";
75 private static final String TID
= "tid";
76 private static final String VEC
= "vec";
77 private static final String PREV_TID
= "prev_tid";
78 private static final String PREV_STATE
= "prev_state";
79 private static final String NEXT_COMM
= "next_comm";
80 private static final String NEXT_TID
= "next_tid";
81 private static final String PARENT_TID
= "parent_tid";
82 private static final String CHILD_COMM
= "child_comm";
83 private static final String CHILD_TID
= "child_tid";
84 private static final String PRIO
= "prio";
85 private static final String PREV_PRIO
= "prev_prio";
86 private static final String NEXT_PRIO
= "next_prio";
87 private static final String NEW_PRIO
= "newprio";
88 private static final String COMM
= "comm";
89 private static final String NAME
= "name";
90 private static final String STATUS
= "status";
91 private static final String PREV_COMM
= "prev_comm";
92 private static final String FILENAME
= "filename";
93 private static final String HRTIMER
= "hrtimer";
94 private static final String HRTIMER_FUNCTION
= "function";
95 private static final String HRTIMER_EXPIRES
= "expires";
96 private static final String HRTIMER_NOW
= "now";
97 private static final String HRTIMER_SOFT_EXPIRES
= "softexpires";
98 private static final String KMEM_ALLOC
= "mm_page_alloc";
99 private static final String KMEM_FREE
= "mm_page_free";
100 private static final String SYSCALL_RET
= "ret";
101 private static final String RWBS
="rwbs";
102 private static final String DISKNAME
="diskname";
103 private static final String BLOCK_DEV
="dev";
104 private static final String SECTOR
="sector";
105 private static final String NR_SECTOR
="nr_sector";
106 private static final String RQ_SECTOR
= "rq_sector";
107 private static final String NEXTRQ_SECTOR
= "nextrq_sector";
109 /* Network events and field names */
110 private static final Collection
<String
> EVENTS_NETWORK_SEND
= Collections
.singleton("net_dev_queue");
111 private static final Collection
<String
> EVENTS_NETWORK_RECEIVE
= Collections
.singleton("netif_receive_skb");
112 private static final String
[] TCP_SEQ_FIELD
= { "transport_fields", "thtype_tcp", "seq" };
113 private static final String
[] TCP_ACK_FIELD
= { "transport_fields", "thtype_tcp", "ack_seq" };
114 private static final String
[] TCP_FLAGS_FIELD
= { "transport_fields", "thtype_tcp", "flags" };
117 private static final Collection
<String
> KVM_ENTRY_EVENTS
= Collections
.singleton("kvm_entry");
118 private static final Collection
<String
> KVM_EXIT_EVENTS
= Collections
.singleton("kvm_exit");
120 /** All instances are the same. Only provide a static instance getter */
121 protected LttngEventLayout() {
124 private static final IKernelAnalysisEventLayout INSTANCE
= new LttngEventLayout();
127 * Get an instance of this event layout
129 * This object is completely immutable, so no need to create additional
130 * instances via the constructor.
132 * @return The instance
134 public static IKernelAnalysisEventLayout
getInstance() {
138 // ------------------------------------------------------------------------
140 // ------------------------------------------------------------------------
143 public String
eventIrqHandlerEntry() {
144 return IRQ_HANDLER_ENTRY
;
148 public String
eventIrqHandlerExit() {
149 return IRQ_HANDLER_EXIT
;
153 public String
eventSoftIrqEntry() {
154 return SOFTIRQ_ENTRY
;
158 public String
eventSoftIrqExit() {
163 public String
eventSoftIrqRaise() {
164 return SOFTIRQ_RAISE
;
168 public String
eventSchedSwitch() {
173 public String
eventSchedPiSetprio() {
174 return SCHED_PI_SETPRIO
;
178 public Collection
<String
> eventsSchedWakeup() {
179 return SCHED_WAKEUP_EVENTS
;
183 public String
eventSchedProcessFork() {
184 return SCHED_PROCESS_FORK
;
188 public String
eventSchedProcessExit() {
189 return SCHED_PROCESS_EXIT
;
193 public String
eventSchedProcessFree() {
194 return SCHED_PROCESS_FREE
;
198 public @NonNull String
eventStatedumpProcessState() {
199 return STATEDUMP_PROCESS_STATE
;
203 public String
eventSyscallEntryPrefix() {
204 return SYSCALL_ENTRY_PREFIX
;
208 public String
eventCompatSyscallEntryPrefix() {
209 return COMPAT_SYSCALL_ENTRY_PREFIX
;
213 public String
eventSyscallExitPrefix() {
214 return SYSCALL_EXIT_PREFIX
;
218 public String
eventCompatSyscallExitPrefix() {
220 * In LTTng < 2.6, the same generic event name is used for both standard
221 * and compat syscalls.
223 return SYSCALL_EXIT_PREFIX
;
230 public String
eventKmemPageAlloc() {
238 public String
eventKmemPageFree() {
242 // ------------------------------------------------------------------------
244 // ------------------------------------------------------------------------
247 public String
fieldIrq() {
252 public String
fieldVec() {
257 public String
fieldTid() {
262 public String
fieldPrevTid() {
267 public String
fieldPrevState() {
272 public String
fieldNextComm() {
277 public String
fieldNextTid() {
282 public String
fieldChildComm() {
287 public String
fieldParentTid() {
292 public String
fieldChildTid() {
297 public String
fieldPrio() {
302 public String
fieldNewPrio() {
307 public String
fieldPrevPrio() {
312 public String
fieldNextPrio() {
317 public String
fieldComm() {
322 public String
fieldName() {
327 public String
fieldStatus() {
332 public String
fieldPrevComm() {
337 public String
fieldFilename() {
342 public String
eventSchedProcessExec() {
343 return SCHED_PROCESS_EXEC
;
347 public String
eventSchedProcessWakeup() {
352 public String
eventSchedProcessWakeupNew() {
353 return SCHED_WAKEUP_NEW
;
357 public String
eventHRTimerStart() {
358 return HRTIMER_START
;
362 public String
eventHRTimerCancel() {
363 return HRTIMER_CANCEL
;
367 public String
eventHRTimerExpireEntry() {
368 return HRTIMER_EXPIRE_ENTRY
;
372 public String
eventHRTimerExpireExit() {
373 return HRTIMER_EXPIRE_EXIT
;
377 * Event indicating the source of the wakeup signal.
379 * @return The name of the event
382 public String
eventSchedProcessTTWU() {
387 public String
fieldHRtimer() {
391 public String
fieldHRtimerFunction() {
392 return HRTIMER_FUNCTION
;
396 public String
fieldHRtimerExpires() {
397 return HRTIMER_EXPIRES
;
401 public String
fieldHRtimerSoftexpires() {
402 return HRTIMER_SOFT_EXPIRES
;
405 public String
fieldHRtimerNow() {
410 public String
fieldSyscallRet() {
414 // ------------------------------------------------------------------------
415 // I/O events and fields
416 // ------------------------------------------------------------------------
419 public String
eventBlockRqInsert() {
420 return BLOCK_RQ_INSERT
;
424 public String
eventBlockRqIssue() {
425 return BLOCK_RQ_ISSUE
;
429 public String
eventBlockRqComplete() {
430 return BLOCK_RQ_COMPLETE
;
434 public String
eventBlockBioFrontmerge() {
435 return BLOCK_BIO_FRONTMERGE
;
439 public String
eventBlockBioBackmerge() {
440 return BLOCK_BIO_BACKMERGE
;
444 public String
eventBlockRqMerge() {
445 return ELV_MERGE_REQUESTS
;
449 public @NonNull String
eventStatedumpBlockDevice() {
450 return LTTNG_STATEDUMP_BLOCK_DEVICE
;
454 public String
fieldBlockDeviceId() {
459 public String
fieldBlockSector() {
464 public String
fieldBlockNrSector() {
469 public String
fieldBlockRwbs() {
474 public String
fieldBlockRqSector() {
479 public String
fieldBlockNextRqSector() {
480 return NEXTRQ_SECTOR
;
484 public String
fieldDiskname() {
489 public Collection
<String
> eventsNetworkSend() {
490 return EVENTS_NETWORK_SEND
;
494 public Collection
<String
> eventsNetworkReceive() {
495 return EVENTS_NETWORK_RECEIVE
;
499 public String
@NonNull [] fieldPathTcpSeq() {
500 return TCP_SEQ_FIELD
;
504 public String
@NonNull [] fieldPathTcpAckSeq() {
505 return TCP_ACK_FIELD
;
509 public String
@NonNull [] fieldPathTcpFlags() {
510 return TCP_FLAGS_FIELD
;
513 // ------------------------------------------------------------------------
514 // VirtualMachine events : kvm entry/exit events
515 // ------------------------------------------------------------------------
518 public @NonNull Collection
<@NonNull String
> eventsKVMEntry() {
519 return KVM_ENTRY_EVENTS
;
523 public @NonNull Collection
<@NonNull String
> eventsKVMExit() {
524 return KVM_EXIT_EVENTS
;