/* ----------------------------------------------------------------------------- * * (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); };