Re-enable a flag-consistency check
[ghc.git] / rts / RtsProbes.d
1 /* -----------------------------------------------------------------------------
2  *
3  * (c) The GHC Team, 2009
4  *
5  * User-space dtrace probes for the runtime system.
6  *
7  * ---------------------------------------------------------------------------*/
8
9 #include "HsFFI.h"
10 #include "rts/EventLogFormat.h"
11
12
13 /* -----------------------------------------------------------------------------
14  * Payload datatypes for Haskell events
15  * -----------------------------------------------------------------------------
16  */
17
18 /* We effectively have:
19  *
20  * typedef uint16_t EventTypeNum;
21  * typedef uint64_t EventTimestamp;   // in nanoseconds
22  * typedef uint32_t EventThreadID;
23  * typedef uint16_t EventCapNo;
24  * typedef uint16_t EventPayloadSize; // variable-size events
25  * typedef uint16_t EventThreadStatus;
26  * typedef uint32_t EventCapsetID;
27  * typedef uint16_t EventCapsetType;  // types for EVENT_CAPSET_CREATE
28  */
29
30 /* -----------------------------------------------------------------------------
31  * The HaskellEvent provider captures everything from eventlog for use with
32  * dtrace
33  * -----------------------------------------------------------------------------
34  */
35
36 /* These probes correspond to the events defined in EventLogFormat.h
37  */
38 provider HaskellEvent {
39
40   /* scheduler events */
41   probe create__thread (EventCapNo, EventThreadID);
42   probe run__thread (EventCapNo, EventThreadID);
43   probe stop__thread (EventCapNo, EventThreadID, EventThreadStatus, EventThreadID);
44   probe thread__runnable (EventCapNo, EventThreadID);
45   probe migrate__thread (EventCapNo, EventThreadID, EventCapNo);
46   probe thread_wakeup (EventCapNo, EventThreadID, EventCapNo);
47   probe create__spark__thread (EventCapNo, EventThreadID);
48   probe thread__label (EventCapNo, EventThreadID, char *);
49
50   /* GC and heap events */
51   probe gc__start (EventCapNo);
52   probe gc__end (EventCapNo);
53   probe request__seq__gc (EventCapNo);
54   probe request__par__gc (EventCapNo);
55   probe gc__idle (EventCapNo);
56   probe gc__work (EventCapNo);
57   probe gc__done (EventCapNo);
58   probe gc__global__sync (EventCapNo);
59   probe gc__stats (EventCapsetID, StgWord, StgWord, StgWord, StgWord, StgWord, StgWord, StgWord);
60   probe heap__info (EventCapsetID, StgWord, StgWord, StgWord, StgWord, StgWord);
61   probe heap__allocated (EventCapNo, EventCapsetID, StgWord64);
62   probe heap__size (EventCapsetID, StgWord);
63   probe heap__live (EventCapsetID, StgWord);
64
65   /* capability events */
66   probe startup (EventCapNo);
67   probe cap__create (EventCapNo);
68   probe cap__delete (EventCapNo);
69   probe cap__enable (EventCapNo);
70   probe cap__disable (EventCapNo);
71
72   /* capset info events */
73   probe capset__create(EventCapsetID, EventCapsetType);
74   probe capset__delete(EventCapsetID);
75   probe capset__assign__cap(EventCapsetID, EventCapNo);
76   probe capset__remove__cap(EventCapsetID, EventCapNo);
77
78   /* spark events */
79   probe spark__counters(EventCapNo,
80                         StgWord, StgWord, StgWord,
81                         StgWord, StgWord, StgWord,
82                         StgWord);
83
84   probe spark__create   (EventCapNo);
85   probe spark__dud      (EventCapNo);
86   probe spark__overflow (EventCapNo);
87   probe spark__run      (EventCapNo);
88   probe spark__steal    (EventCapNo, EventCapNo);
89   probe spark__fizzle   (EventCapNo);
90   probe spark__gc       (EventCapNo);
91
92   /* task events */
93   probe task__create(EventTaskId, EventCapNo, EventKernelThreadId);
94   probe task__migrate(EventTaskId, EventCapNo, EventCapNo);
95   probe task__delete(EventTaskId);
96
97   /* other events */
98 /* This one doesn't seem to be used at all at the moment: */
99 /*  probe log__msg (char *); */
100   /* we don't need EVENT_BLOCK_MARKER with dtrace */
101   probe user__msg (EventCapNo, char *);
102   probe user__marker (EventCapNo, char *);
103 };