summaryrefslogtreecommitdiff
path: root/rts/RtsProbes.d
diff options
context:
space:
mode:
authorDuncan Coutts <duncan@well-typed.com>2012-02-03 12:20:36 +0000
committerDuncan Coutts <duncan@well-typed.com>2012-04-04 19:10:44 +0100
commitf9c2e8543cabd6661eec17d5be31469455a64e05 (patch)
tree3275bbb0e2bbcd4d8bd003584d478c0ad1e4c107 /rts/RtsProbes.d
parent4caef1c42dd5b6e4982e7f07162c9a7edc5a1b0b (diff)
downloadhaskell-f9c2e8543cabd6661eec17d5be31469455a64e05.tar.gz
Add eventlog/trace stuff for capabilities: create/delete/enable/disable
Now that we can adjust the number of capabilities on the fly, we need this reflected in the eventlog. Previously the eventlog had a single startup event that declared a static number of capabilities. Obviously that's no good anymore. For compatability we're keeping the EVENT_STARTUP but adding new EVENT_CAP_CREATE/DELETE. The EVENT_CAP_DELETE is actually just the old EVENT_SHUTDOWN but renamed and extended (using the existing mechanism to extend eventlog events in a compatible way). So we now emit both EVENT_STARTUP and EVENT_CAP_CREATE. One day we will drop EVENT_STARTUP. Since reducing the number of capabilities at runtime does not really delete them, it just disables them, then we also have new events for disable/enable. The old EVENT_SHUTDOWN was in the scheduler class of events. The new EVENT_CAP_* events are in the unconditional class, along with the EVENT_CAPSET_* ones. Knowing when capabilities are created and deleted is crucial to making sense of eventlogs, you always want those events. In any case, they're extremely low volume.
Diffstat (limited to 'rts/RtsProbes.d')
-rw-r--r--rts/RtsProbes.d30
1 files changed, 20 insertions, 10 deletions
diff --git a/rts/RtsProbes.d b/rts/RtsProbes.d
index 1c74619e79..0921c98397 100644
--- a/rts/RtsProbes.d
+++ b/rts/RtsProbes.d
@@ -43,29 +43,33 @@ provider HaskellEvent {
probe stop__thread (EventCapNo, EventThreadID, EventThreadStatus, EventThreadID);
probe thread__runnable (EventCapNo, EventThreadID);
probe migrate__thread (EventCapNo, EventThreadID, EventCapNo);
- probe shutdown (EventCapNo);
probe thread_wakeup (EventCapNo, EventThreadID, EventCapNo);
+ probe create__spark__thread (EventCapNo, EventThreadID);
+ probe thread__label (EventCapNo, EventThreadID, char *);
+
+ /* GC and heap events */
probe gc__start (EventCapNo);
probe gc__end (EventCapNo);
probe request__seq__gc (EventCapNo);
probe request__par__gc (EventCapNo);
- probe create__spark__thread (EventCapNo, EventThreadID);
- probe thread__label (EventCapNo, EventThreadID, char *);
-
- /* 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);
+
+ /* capability events */
+ probe startup (EventCapNo);
+ probe cap__create (EventCapNo);
+ probe cap__delete (EventCapNo);
+ probe cap__enable (EventCapNo);
+ probe cap__disable (EventCapNo);
+
+ /* capset info events */
probe capset__create(EventCapsetID, EventCapsetType);
probe capset__delete(EventCapsetID);
probe capset__assign__cap(EventCapsetID, EventCapNo);
probe capset__remove__cap(EventCapsetID, EventCapNo);
+ /* spark events */
probe spark__counters(EventCapNo,
StgWord, StgWord, StgWord,
StgWord, StgWord, StgWord,
@@ -78,4 +82,10 @@ provider HaskellEvent {
probe spark__steal (EventCapNo, EventCapNo);
probe spark__fizzle (EventCapNo);
probe spark__gc (EventCapNo);
+
+ /* other events */
+/* This one doesn't seem to be used at all at the moment: */
+/* probe log__msg (char *); */
+ /* we don't need EVENT_BLOCK_MARKER with dtrace */
+ probe user__msg (EventCapNo, char *);
};