diff options
author | Duncan Coutts <duncan@well-typed.com> | 2012-02-03 12:20:36 +0000 |
---|---|---|
committer | Duncan Coutts <duncan@well-typed.com> | 2012-04-04 19:10:44 +0100 |
commit | f9c2e8543cabd6661eec17d5be31469455a64e05 (patch) | |
tree | 3275bbb0e2bbcd4d8bd003584d478c0ad1e4c107 /rts/RtsProbes.d | |
parent | 4caef1c42dd5b6e4982e7f07162c9a7edc5a1b0b (diff) | |
download | haskell-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.d | 30 |
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 *); }; |