X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FStats.c;h=ae3d8431576434ee52c98426e3f2997530e312bb;hb=c9acb4de50dd2b7f7ece5491f60598f0a4815e75;hp=a00b6392b0c8f36c97fe5afe5cfbc2beaca19174;hpb=ae267d04df855051b99218e3712b3f56b8016d56;p=ghc-hetmet.git diff --git a/rts/Stats.c b/rts/Stats.c index a00b639..ae3d843 100644 --- a/rts/Stats.c +++ b/rts/Stats.c @@ -17,8 +17,6 @@ #include "Profiling.h" #include "GetTime.h" #include "GC.h" -#include "GCUtils.h" -#include "Evac.h" #if USE_PAPI #include "Papi.h" @@ -615,11 +613,11 @@ stat_exit(int alloc) } #if defined(THREADED_RTS) - if (RtsFlags.ParFlags.gcThreads > 1) { + if (RtsFlags.ParFlags.parGcEnabled) { statsPrintf("\n Parallel GC work balance: %.2f (%ld / %ld, ideal %d)\n", (double)GC_par_avg_copied / (double)GC_par_max_copied, (lnat)GC_par_avg_copied, (lnat)GC_par_max_copied, - RtsFlags.ParFlags.gcThreads + RtsFlags.ParFlags.nNodes ); } #endif @@ -630,11 +628,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), @@ -643,6 +641,23 @@ stat_exit(int alloc) TICK_TO_DBL(task->gc_etime)); } } + + statsPrintf("\n"); + + { + nat i; + lnat sparks_created = 0; + lnat sparks_converted = 0; + lnat sparks_pruned = 0; + for (i = 0; i < n_capabilities; i++) { + sparks_created += capabilities[i].sparks_created; + sparks_converted += capabilities[i].sparks_converted; + sparks_pruned += capabilities[i].sparks_pruned; + } + + statsPrintf(" SPARKS: %ld (%ld converted, %ld pruned)\n\n", + sparks_created, sparks_converted, sparks_pruned); + } #endif statsPrintf(" INIT time %6.2fs (%6.2fs elapsed)\n", @@ -695,12 +710,45 @@ stat_exit(int alloc) #if USE_PAPI papi_stats_report(); #endif +#if defined(THREADED_RTS) && defined(PROF_SPIN) + { + nat g, s; + + 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); + } + } + } +#endif } if (RtsFlags.GcFlags.giveStats == ONELINE_GC_STATS) { + char *fmt1, *fmt2; + if (RtsFlags.MiscFlags.machineReadable) { + fmt1 = " [(\"bytes allocated\", \"%llu\")\n"; + fmt2 = " ,(\"num_GCs\", \"%d\")\n" + " ,(\"average_bytes_used\", \"%ld\")\n" + " ,(\"max_bytes_used\", \"%ld\")\n" + " ,(\"num_byte_usage_samples\", \"%ld\")\n" + " ,(\"peak_megabytes_allocated\", \"%lu\")\n" + " ,(\"init_cpu_seconds\", \"%.2f\")\n" + " ,(\"init_wall_seconds\", \"%.2f\")\n" + " ,(\"mutator_cpu_seconds\", \"%.2f\")\n" + " ,(\"mutator_wall_seconds\", \"%.2f\")\n" + " ,(\"GC_cpu_seconds\", \"%.2f\")\n" + " ,(\"GC_wall_seconds\", \"%.2f\")\n" + " ]\n"; + } + else { + fmt1 = "<>\n", + statsPrintf(fmt1, GC_tot_alloc*(ullong)sizeof(W_)); + statsPrintf(fmt2, total_collections, ResidencySamples == 0 ? 0 : AvgResidency*sizeof(W_)/ResidencySamples, @@ -712,22 +760,6 @@ stat_exit(int alloc) TICK_TO_DBL(GC_tot_time), TICK_TO_DBL(GCe_tot_time)); } -#if defined(THREADED_RTS) && defined(PROF_SPIN) - { - nat g, s; - - statsPrintf("recordMutableGen_sync: %"FMT_Word64"\n", recordMutableGen_sync.spin); - 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_todo: %"FMT_Word64"\n", g, s, generations[g].steps[s].sync_todo.spin); - statsPrintf("gen[%d].steps[%d].sync_large_objects: %"FMT_Word64"\n", g, s, generations[g].steps[s].sync_large_objects.spin); - } - } - } -#endif - statsFlush(); statsClose(); }