diff options
Diffstat (limited to 'rts/Stats.h')
-rw-r--r-- | rts/Stats.h | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/rts/Stats.h b/rts/Stats.h index 5d9cf04fa7..fbcca110e9 100644 --- a/rts/Stats.h +++ b/rts/Stats.h @@ -9,6 +9,8 @@ #pragma once #include "GetTime.h" +#include "sm/GC.h" +#include "Sparks.h" #include "BeginPrivate.h" @@ -30,7 +32,10 @@ void stat_startGCSync(struct gc_thread_ *_gct); void stat_startGC(Capability *cap, struct gc_thread_ *_gct); void stat_endGC (Capability *cap, struct gc_thread_ *_gct, W_ live, W_ copied, W_ slop, uint32_t gen, uint32_t n_gc_threads, - W_ par_max_copied, W_ par_balanced_copied); + W_ par_max_copied, W_ par_balanced_copied, + W_ gc_spin_spin, W_ gc_spin_yield, W_ mut_spin_spin, + W_ mut_spin_yield, W_ any_work, W_ no_work, + W_ scav_find_work); #if defined(PROFILING) void stat_startRP(void); @@ -63,4 +68,49 @@ void statDescribeGens( void ); Time stat_getElapsedGCTime(void); Time stat_getElapsedTime(void); +typedef struct GenerationSummaryStats_ { + uint32_t collections; + uint32_t par_collections; + Time cpu_ns; + Time elapsed_ns; + Time max_pause_ns; + Time avg_pause_ns; +#if defined(THREADED_RTS) && defined(PROF_SPIN) + uint64_t sync_spin; + uint64_t sync_yield; +#endif +} GenerationSummaryStats; + +typedef struct RTSSummaryStats_ { + // These profiling times could potentially be in RTSStats. However, I'm not + // confident enough to do this now, since there is some logic depending on + // global state that I do not understand. (Or if I do understand it, it's + // wrong) + Time rp_cpu_ns; + Time rp_elapsed_ns; + Time hc_cpu_ns; + Time hc_elapsed_ns; + + Time exit_cpu_ns; + Time exit_elapsed_ns; + +#if defined(THREADED_RTS) + uint32_t bound_task_count; + uint64_t sparks_count; + SparkCounters sparks; + double work_balance; +#else // THREADED_RTS + double gc_cpu_percent; + double gc_elapsed_percent; +#endif + uint64_t fragmentation_bytes; + uint64_t average_bytes_used; // This is not shown in the '+RTS -s' report + uint64_t alloc_rate; + double productivity_cpu_percent; + double productivity_elapsed_percent; + + // one for each generation, 0 first + GenerationSummaryStats* gc_summary_stats; +} RTSSummaryStats; + #include "EndPrivate.h" |