Enable two-step allocator on FreeBSD
[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 #if defined(__APPLE__) && __MACH__
10 # if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9
11 #  define USE_INTTYPES_H_FOR_RTS_PROBES_D
12 # endif
13 #endif
14
15 #if defined(__FreeBSD__)
16 /* we need this otherwise dtrace complains about redeclared int types
17  * TODO: find a better way to do this
18  */
19 #define _INTTYPES_H_
20 #endif
21
22 #include "HsFFI.h"
23 #include "rts/EventLogFormat.h"
24
25
26 /* -----------------------------------------------------------------------------
27  * Payload datatypes for Haskell events
28  * -----------------------------------------------------------------------------
29  */
30
31 /* We effectively have:
32  *
33  * typedef uint16_t EventTypeNum;
34  * typedef uint64_t EventTimestamp;   // in nanoseconds
35  * typedef uint32_t EventThreadID;
36  * typedef uint16_t EventCapNo;
37  * typedef uint16_t EventPayloadSize; // variable-size events
38  * typedef uint16_t EventThreadStatus;
39  * typedef uint32_t EventCapsetID;
40  * typedef uint16_t EventCapsetType;  // types for EVENT_CAPSET_CREATE
41  */
42
43 /* -----------------------------------------------------------------------------
44  * The HaskellEvent provider captures everything from eventlog for use with
45  * dtrace
46  * -----------------------------------------------------------------------------
47  */
48
49 /* These probes correspond to the events defined in EventLogFormat.h
50  */
51 provider HaskellEvent {
52
53   /* scheduler events */
54   probe create__thread (EventCapNo, EventThreadID);
55   probe run__thread (EventCapNo, EventThreadID);
56   probe stop__thread (EventCapNo, EventThreadID, EventThreadStatus, EventThreadID);
57   probe thread__runnable (EventCapNo, EventThreadID);
58   probe migrate__thread (EventCapNo, EventThreadID, EventCapNo);
59   probe thread_wakeup (EventCapNo, EventThreadID, EventCapNo);
60   probe create__spark__thread (EventCapNo, EventThreadID);
61   probe thread__label (EventCapNo, EventThreadID, char *);
62
63   /* GC and heap events */
64   probe gc__start (EventCapNo);
65   probe gc__end (EventCapNo);
66   probe request__seq__gc (EventCapNo);
67   probe request__par__gc (EventCapNo);
68   probe gc__idle (EventCapNo);
69   probe gc__work (EventCapNo);
70   probe gc__done (EventCapNo);
71   probe gc__global__sync (EventCapNo);
72   probe gc__stats (EventCapsetID, StgWord, StgWord, StgWord, StgWord, StgWord, StgWord, StgWord, StgWord);
73   probe heap__info (EventCapsetID, StgWord, StgWord, StgWord, StgWord, StgWord);
74   probe heap__allocated (EventCapNo, EventCapsetID, StgWord64);
75   probe heap__size (EventCapsetID, StgWord);
76   probe heap__live (EventCapsetID, StgWord);
77
78   /* capability events */
79   probe startup (EventCapNo);
80   probe cap__create (EventCapNo);
81   probe cap__delete (EventCapNo);
82   probe cap__enable (EventCapNo);
83   probe cap__disable (EventCapNo);
84
85   /* capset info events */
86   probe capset__create(EventCapsetID, EventCapsetType);
87   probe capset__delete(EventCapsetID);
88   probe capset__assign__cap(EventCapsetID, EventCapNo);
89   probe capset__remove__cap(EventCapsetID, EventCapNo);
90
91   /* spark events */
92   probe spark__counters(EventCapNo,
93                         StgWord, StgWord, StgWord,
94                         StgWord, StgWord, StgWord,
95                         StgWord);
96
97   probe spark__create   (EventCapNo);
98   probe spark__dud      (EventCapNo);
99   probe spark__overflow (EventCapNo);
100   probe spark__run      (EventCapNo);
101   probe spark__steal    (EventCapNo, EventCapNo);
102   probe spark__fizzle   (EventCapNo);
103   probe spark__gc       (EventCapNo);
104
105   /* task events */
106   probe task__create(EventTaskId, EventCapNo, EventKernelThreadId);
107   probe task__migrate(EventTaskId, EventCapNo, EventCapNo);
108   probe task__delete(EventTaskId);
109
110   /* other events */
111 /* This one doesn't seem to be used at all at the moment: */
112 /*  probe log__msg (char *); */
113   /* we don't need EVENT_BLOCK_MARKER with dtrace */
114   probe user__msg (EventCapNo, char *);
115   probe user__marker (EventCapNo, char *);
116 };