X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FStats.c;h=20de32a808ca42a3d829fae0af6b7bedb2f02146;hb=d83c0339a26179567eed0a8d65d944008e3637b2;hp=7c8042a66d6d6479d69d70a72bf0a2bcbb2fae99;hpb=4e3542263207ae49963811aeb84927027e7bb61d;p=ghc-hetmet.git diff --git a/rts/Stats.c b/rts/Stats.c index 7c8042a..20de32a 100644 --- a/rts/Stats.c +++ b/rts/Stats.c @@ -6,17 +6,16 @@ * * ---------------------------------------------------------------------------*/ +#include "PosixSource.h" #include "Rts.h" -#include "RtsFlags.h" + #include "RtsUtils.h" -#include "MBlock.h" -#include "Storage.h" #include "Schedule.h" #include "Stats.h" -#include "ParTicky.h" /* ToDo: move into Rts.h */ #include "Profiling.h" #include "GetTime.h" -#include "GC.h" +#include "sm/Storage.h" +#include "sm/GC.h" // gc_alloc_block_sync, whitehole_spin #if USE_PAPI #include "Papi.h" @@ -506,21 +505,11 @@ stat_endHeapCensus(void) -------------------------------------------------------------------------- */ #ifdef DEBUG -#define TICK_VAR(arity) \ - extern StgInt SLOW_CALLS_##arity; \ - extern StgInt RIGHT_ARITY_##arity; \ - extern StgInt TAGGED_PTR_##arity; - #define TICK_VAR_INI(arity) \ StgInt SLOW_CALLS_##arity = 1; \ StgInt RIGHT_ARITY_##arity = 1; \ StgInt TAGGED_PTR_##arity = 0; -extern StgInt TOTAL_CALLS; - -TICK_VAR(1) -TICK_VAR(2) - TICK_VAR_INI(1) TICK_VAR_INI(2) @@ -628,11 +617,11 @@ stat_exit(int alloc) { nat i; Task *task; + statsPrintf(" MUT time (elapsed) GC time (elapsed)\n"); for (i = 0, task = all_tasks; task != NULL; i++, task = task->all_link) { - statsPrintf(" Task %2d %-8s : MUT time: %6.2fs (%6.2fs elapsed)\n" - " GC time: %6.2fs (%6.2fs elapsed)\n\n", + statsPrintf(" Task %2d %-8s : %6.2fs (%6.2fs) %6.2fs (%6.2fs)\n", i, (task->tso == NULL) ? "(worker)" : "(bound)", TICK_TO_DBL(task->mut_time), @@ -642,6 +631,8 @@ stat_exit(int alloc) } } + statsPrintf("\n"); + { nat i; lnat sparks_created = 0; @@ -710,14 +701,12 @@ stat_exit(int alloc) #endif #if defined(THREADED_RTS) && defined(PROF_SPIN) { - nat g, s; + nat g; statsPrintf("gc_alloc_block_sync: %"FMT_Word64"\n", gc_alloc_block_sync.spin); statsPrintf("whitehole_spin: %"FMT_Word64"\n", whitehole_spin); for (g = 0; g < RtsFlags.GcFlags.generations; g++) { - for (s = 0; s < generations[g].n_steps; s++) { - statsPrintf("gen[%d].steps[%d].sync_large_objects: %"FMT_Word64"\n", g, s, generations[g].steps[s].sync_large_objects.spin); - } + statsPrintf("gen[%d].sync_large_objects: %"FMT_Word64"\n", g, generations[g].sync_large_objects.spin); } } #endif @@ -778,17 +767,17 @@ stat_exit(int alloc) void statDescribeGens(void) { - nat g, s, mut, lge; + nat g, mut, lge; lnat live, slop; lnat tot_live, tot_slop; bdescr *bd; - step *step; - + generation *gen; + debugBelch( -"-----------------------------------------------------------------\n" -" Gen Max Mut-list Step Blocks Large Live Slop\n" -" Blocks Bytes Objects \n" -"-----------------------------------------------------------------\n"); +"----------------------------------------------------------\n" +" Gen Max Mut-list Blocks Large Live Slop\n" +" Blocks Bytes Objects \n" +"----------------------------------------------------------\n"); tot_live = 0; tot_slop = 0; @@ -798,27 +787,23 @@ statDescribeGens(void) mut += (bd->free - bd->start) * sizeof(W_); } - debugBelch("%5d %7d %9d", g, generations[g].max_blocks, mut); + gen = &generations[g]; - for (s = 0; s < generations[g].n_steps; s++) { - step = &generations[g].steps[s]; - for (bd = step->large_objects, lge = 0; bd; bd = bd->link) { - lge++; - } - live = step->n_words + countOccupied(step->large_objects); - if (s != 0) { - debugBelch("%23s",""); + debugBelch("%5d %7d %9d", g, gen->max_blocks, mut); + + for (bd = gen->large_objects, lge = 0; bd; bd = bd->link) { + lge++; } - slop = (step->n_blocks + step->n_large_blocks) * BLOCK_SIZE_W - live; - debugBelch("%6d %8d %8d %8ld %8ld\n", s, step->n_blocks, lge, + live = gen->n_words + countOccupied(gen->large_objects); + slop = (gen->n_blocks + gen->n_large_blocks) * BLOCK_SIZE_W - live; + debugBelch("%8d %8d %8ld %8ld\n", gen->n_blocks, lge, live*sizeof(W_), slop*sizeof(W_)); tot_live += live; tot_slop += slop; - } } - debugBelch("-----------------------------------------------------------------\n"); - debugBelch("%48s%8ld %8ld\n","",tot_live*sizeof(W_),tot_slop*sizeof(W_)); - debugBelch("-----------------------------------------------------------------\n"); + debugBelch("----------------------------------------------------------\n"); + debugBelch("%41s%8ld %8ld\n","",tot_live*sizeof(W_),tot_slop*sizeof(W_)); + debugBelch("----------------------------------------------------------\n"); debugBelch("\n"); } @@ -828,7 +813,7 @@ statDescribeGens(void) -------------------------------------------------------------------------- */ extern HsInt64 getAllocations( void ) -{ return (HsInt64)total_allocated * sizeof(W_); } +{ return (HsInt64)GC_tot_alloc * sizeof(W_); } /* ----------------------------------------------------------------------------- Dumping stuff in the stats file, or via the debug message interface