diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-03-17 16:42:14 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-03-17 16:42:14 +0000 |
commit | 8b18faef8aeaf40150c208272a2fc117611e8ae8 (patch) | |
tree | 2aabc6115dccd0a3e303320515564b5628c8771c /rts/Trace.c | |
parent | f8f4cb3f3a46e0495917a927cefe906531b7b38e (diff) | |
download | haskell-8b18faef8aeaf40150c208272a2fc117611e8ae8.tar.gz |
Add fast event logging
Generate binary log files from the RTS containing a log of runtime
events with timestamps. The log file can be visualised in various
ways, for investigating runtime behaviour and debugging performance
problems. See for example the forthcoming ThreadScope viewer.
New GHC option:
-eventlog (link-time option) Enables event logging.
+RTS -l (runtime option) Generates <prog>.eventlog with
the binary event information.
This replaces some of the tracing machinery we already had in the RTS:
e.g. +RTS -vg for GC tracing (we should do this using the new event
logging instead).
Event logging has almost no runtime cost when it isn't enabled, though
in the future we might add more fine-grained events and this might
change; hence having a link-time option and compiling a separate
version of the RTS for event logging. There's a small runtime cost
for enabling event-logging, for most programs it shouldn't make much
difference.
(Todo: docs)
Diffstat (limited to 'rts/Trace.c')
-rw-r--r-- | rts/Trace.c | 66 |
1 files changed, 7 insertions, 59 deletions
diff --git a/rts/Trace.c b/rts/Trace.c index 06de1c49de..bd32091a12 100644 --- a/rts/Trace.c +++ b/rts/Trace.c @@ -1,11 +1,13 @@ /* ----------------------------------------------------------------------------- * - * (c) The GHC Team 2006 + * (c) The GHC Team 2006-2009 * * Debug and performance tracing * * ---------------------------------------------------------------------------*/ +#ifdef DEBUG + #include "Rts.h" #include "OSThreads.h" #include "Trace.h" @@ -28,33 +30,8 @@ StgWord32 classes_enabled; // not static due to inline funcs static Mutex trace_utx; #endif -#ifdef DEBUG #define DEBUG_FLAG(name, class) \ if (RtsFlags.DebugFlags.name) classes_enabled |= class; -#else -#define DEBUG_FLAG(name, class) \ - /* nothing */ -#endif - -#ifdef PAR -#define PAR_FLAG(name, class) \ - if (RtsFlags.ParFlags.Debug.name) classes_enabled |= class; -#else -#define PAR_FLAG(name, class) \ - /* nothing */ -#endif - -#ifdef GRAN -#define GRAN_FLAG(name, class) \ - if (RtsFlags.GranFlags.Debug.name) classes_enabled |= class; -#else -#define GRAN_FLAG(name, class) \ - /* nothing */ -#endif - -#define TRACE_FLAG(name, class) \ - if (RtsFlags.TraceFlags.name) classes_enabled |= class; - void initTracing (void) { @@ -72,43 +49,12 @@ void initTracing (void) DEBUG_FLAG(stable, DEBUG_stable); DEBUG_FLAG(stm, DEBUG_stm); DEBUG_FLAG(prof, DEBUG_prof); + DEBUG_FLAG(eventlog, DEBUG_eventlog); DEBUG_FLAG(gran, DEBUG_gran); DEBUG_FLAG(par, DEBUG_par); DEBUG_FLAG(linker, DEBUG_linker); DEBUG_FLAG(squeeze, DEBUG_squeeze); DEBUG_FLAG(hpc, DEBUG_hpc); - - PAR_FLAG(verbose, PAR_DEBUG_verbose); - PAR_FLAG(bq, PAR_DEBUG_bq); - PAR_FLAG(schedule, PAR_DEBUG_schedule); - PAR_FLAG(free, PAR_DEBUG_free); - PAR_FLAG(resume, PAR_DEBUG_resume); - PAR_FLAG(weight, PAR_DEBUG_weight); - PAR_FLAG(fetch, PAR_DEBUG_fetch); - PAR_FLAG(fish, PAR_DEBUG_fish); - PAR_FLAG(tables, PAR_DEBUG_tables); - PAR_FLAG(packet, PAR_DEBUG_packet); - PAR_FLAG(pack, PAR_DEBUG_pack); - PAR_FLAG(paranoia, PAR_DEBUG_paranoia); - - GRAN_FLAG(event_trace, GRAN_DEBUG_event_trace); - GRAN_FLAG(event_stats, GRAN_DEBUG_event_stats); - GRAN_FLAG(bq, GRAN_DEBUG_bq); - GRAN_FLAG(pack, GRAN_DEBUG_pack); - GRAN_FLAG(checkSparkQ, GRAN_DEBUG_checkSparkQ); - GRAN_FLAG(thunkStealing, GRAN_DEBUG_thunkStealing); - GRAN_FLAG(randomSteal, GRAN_DEBUG_randomSteal); - GRAN_FLAG(findWork, GRAN_DEBUG_findWork); - GRAN_FLAG(unused, GRAN_DEBUG_unused); - GRAN_FLAG(pri, GRAN_DEBUG_pri); - GRAN_FLAG(checkLight, GRAN_DEBUG_checkLight); - GRAN_FLAG(sortedQ, GRAN_DEBUG_sortedQ); - GRAN_FLAG(blockOnFetch, GRAN_DEBUG_blockOnFetch); - GRAN_FLAG(packBuffer, GRAN_DEBUG_packBuffer); - GRAN_FLAG(blockedOnFetch_sanity, GRAN_DEBUG_BOF_sanity); - - TRACE_FLAG(sched, TRACE_sched); - TRACE_FLAG(gc, TRACE_gc); } static void tracePreface (void) @@ -116,7 +62,7 @@ static void tracePreface (void) #ifdef THREADED_RTS debugBelch("%12lx: ", (unsigned long)osThreadId()); #endif - if (RtsFlags.TraceFlags.timestamp) { + if (RtsFlags.DebugFlags.timestamp) { debugBelch("%9" FMT_Word64 ": ", stat_getElapsedTime()); } } @@ -155,3 +101,5 @@ void traceEnd (void) debugBelch("\n"); RELEASE_LOCK(&trace_utx); } + +#endif |