Add new eventlog events for various heap and GC statistics
[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__stats (CapsetID, StgWord, StgWord, StgWord, StgWord, StgWord, StgWord, StgWord);
59   probe heap__info (CapsetID, StgWord, StgWord, StgWord, StgWord, StgWord);
60   probe heap__allocated (EventCapNo, CapsetID, StgWord64);
61   probe heap__size (CapsetID, StgWord);
62   probe heap__live (CapsetID, StgWord);
63
64   /* capability events */
65   probe startup (EventCapNo);
66   probe cap__create (EventCapNo);
67   probe cap__delete (EventCapNo);
68   probe cap__enable (EventCapNo);
69   probe cap__disable (EventCapNo);
70
71   /* capset info events */
72   probe capset__create(EventCapsetID, EventCapsetType);
73   probe capset__delete(EventCapsetID);
74   probe capset__assign__cap(EventCapsetID, EventCapNo);
75   probe capset__remove__cap(EventCapsetID, EventCapNo);
76
77   /* spark events */
78   probe spark__counters(EventCapNo,
79                         StgWord, StgWord, StgWord,
80                         StgWord, StgWord, StgWord,
81                         StgWord);
82
83   probe spark__create   (EventCapNo);
84   probe spark__dud      (EventCapNo);
85   probe spark__overflow (EventCapNo);
86   probe spark__run      (EventCapNo);
87   probe spark__steal    (EventCapNo, EventCapNo);
88   probe spark__fizzle   (EventCapNo);
89   probe spark__gc       (EventCapNo);
90
91   /* other events */
92 /* This one doesn't seem to be used at all at the moment: */
93 /*  probe log__msg (char *); */
94   /* we don't need EVENT_BLOCK_MARKER with dtrace */
95   probe user__msg (EventCapNo, char *);
96 };