Expose all EventLog events as DTrace probes
[ghc-hetmet.git] / rts / RtsProbes.d
diff --git a/rts/RtsProbes.d b/rts/RtsProbes.d
new file mode 100644 (file)
index 0000000..87a34c8
--- /dev/null
@@ -0,0 +1,62 @@
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 2009
+ *
+ * User-space dtrace probes for the runtime system.
+ *
+ * ---------------------------------------------------------------------------*/
+
+#include "HsFFI.h"
+#include "rts/EventLogFormat.h"
+
+
+// -----------------------------------------------------------------------------
+// Payload datatypes for Haskell events
+// -----------------------------------------------------------------------------
+
+// We effectively have:
+//
+// typedef uint16_t EventTypeNum;
+// typedef uint64_t EventTimestamp;   // in nanoseconds
+// typedef uint32_t EventThreadID;
+// typedef uint16_t EventCapNo;
+// typedef uint16_t EventPayloadSize; // variable-size events
+// typedef uint16_t EventThreadStatus;
+
+
+// -----------------------------------------------------------------------------
+// The HaskellEvent provider captures everything from eventlog for use with
+// dtrace
+// -----------------------------------------------------------------------------
+
+// These probes correspond to the events defined in EventLogFormat.h
+//
+provider HaskellEvent {
+
+  // scheduler events
+  probe create__thread (EventCapNo, EventThreadID);
+  probe run__thread (EventCapNo, EventThreadID);
+  probe stop__thread (EventCapNo, EventThreadID, EventThreadStatus);
+  probe thread__runnable (EventCapNo, EventThreadID);
+  probe migrate__thread (EventCapNo, EventThreadID, EventCapNo);
+  probe run__spark (EventCapNo, EventThreadID);
+  probe steal__spark (EventCapNo, EventThreadID, EventCapNo);
+  probe shutdown (EventCapNo);
+  probe thread_wakeup (EventCapNo, EventThreadID, EventCapNo);
+  probe gc__start (EventCapNo);
+  probe gc__end (EventCapNo);
+  probe request__seq__gc (EventCapNo);
+  probe request__par__gc (EventCapNo);
+  probe create__spark__thread (EventCapNo, EventThreadID);
+
+  // other events
+//This one doesn't seem to be used at all at the moment:
+//  probe log__msg (char *);
+  probe startup (EventCapNo);
+  // we don't need EVENT_BLOCK_MARKER with dtrace
+  probe user__msg (EventCapNo, char *);
+  probe gc__idle (EventCapNo);
+  probe gc__work (EventCapNo);
+  probe gc__done (EventCapNo);
+
+};