Formatting wibble
[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 shutdown (EventCapNo);
47   probe thread_wakeup (EventCapNo, EventThreadID, EventCapNo);
48   probe gc__start (EventCapNo);
49   probe gc__end (EventCapNo);
50   probe request__seq__gc (EventCapNo);
51   probe request__par__gc (EventCapNo);
52   probe create__spark__thread (EventCapNo, EventThreadID);
53   probe thread__label (EventCapNo, EventThreadID, char *);
54
55   /* other events */
56 /* This one doesn't seem to be used at all at the moment: */
57 /*  probe log__msg (char *); */
58   probe startup (EventCapNo);
59   /* we don't need EVENT_BLOCK_MARKER with dtrace */
60   probe user__msg (EventCapNo, char *);
61   probe gc__idle (EventCapNo);
62   probe gc__work (EventCapNo);
63   probe gc__done (EventCapNo);
64   probe capset__create(EventCapsetID, EventCapsetType);
65   probe capset__delete(EventCapsetID);
66   probe capset__assign__cap(EventCapsetID, EventCapNo);
67   probe capset__remove__cap(EventCapsetID, EventCapNo);
68
69   probe spark__counters(EventCapNo,
70                         StgWord, StgWord, StgWord,
71                         StgWord, StgWord, StgWord,
72                         StgWord);
73
74   probe spark__create   (EventCapNo);
75   probe spark__dud      (EventCapNo);
76   probe spark__overflow (EventCapNo);
77   probe spark__run      (EventCapNo);
78   probe spark__steal    (EventCapNo, EventCapNo);
79   probe spark__fizzle   (EventCapNo);
80   probe spark__gc       (EventCapNo);
81 };