From 7c9e356de1114ab3e31f2d6d03e83672076dd533 Mon Sep 17 00:00:00 2001 From: Douglas Wilson Date: Tue, 11 Jul 2017 11:54:09 -0400 Subject: Fix Work Balance computation in RTS stats An additional stat is tracked per gc: par_balanced_copied This is the the number of bytes copied by each gc thread under the balanced lmit, which is simply (copied_bytes / num_gc_threads). The stat is added to all the appropriate GC structures, so is visible in the eventlog and in GHC.Stats. A note is added explaining how work balance is computed. Remove some end of line whitespace Test Plan: ./validate experiment with the program attached to the ticket examine code changes carefully Reviewers: simonmar, austin, hvr, bgamari, erikd Reviewed By: simonmar Subscribers: Phyx, rwbarton, thomie GHC Trac Issues: #13830 Differential Revision: https://phabricator.haskell.org/D3658 --- rts/Trace.h | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'rts/Trace.h') diff --git a/rts/Trace.h b/rts/Trace.h index 2058ac2e05..624d459420 100644 --- a/rts/Trace.h +++ b/rts/Trace.h @@ -151,7 +151,8 @@ void traceEventGcStats_ (Capability *cap, W_ fragmentation, uint32_t par_n_threads, W_ par_max_copied, - W_ par_tot_copied); + W_ par_tot_copied, + W_ par_balanced_copied); /* * Record a spark event @@ -302,7 +303,8 @@ void traceHeapProfSampleCostCentre(StgWord8 profile_id, #define traceGcEventAtT(cap, ts, tag) /* nothing */ #define traceEventGcStats_(cap, heap_capset, gen, \ copied, slop, fragmentation, \ - par_n_threads, par_max_copied, par_tot_copied) /* nothing */ + par_n_threads, par_max_copied, \ + par_tot_copied, par_balanced_copied) /* nothing */ #define traceHeapEvent(cap, tag, heap_capset, info1) /* nothing */ #define traceEventHeapInfo_(heap_capset, gens, \ maxHeapSize, allocAreaSize, \ @@ -395,11 +397,13 @@ void dtraceUserMarkerWrapper(Capability *cap, char *msg); copies, slop, fragmentation, \ par_n_threads, \ par_max_copied, \ - par_tot_copied) \ + par_tot_copied, \ + par_balanced_copied) HASKELLEVENT_GC_STATS(heap_capset, gens, \ copies, slop, fragmentation, \ par_n_threads, \ par_max_copied, \ + par_balanced_copied, \ par_tot_copied) #define dtraceHeapInfo(heap_capset, gens, \ maxHeapSize, allocAreaSize, \ @@ -470,7 +474,8 @@ void dtraceUserMarkerWrapper(Capability *cap, char *msg); copies, slop, fragmentation, \ par_n_threads, \ par_max_copied, \ - par_tot_copied) /* nothing */ + par_tot_copied, \ + par_balanced_copied) /* nothing */ #define dtraceHeapInfo(heap_capset, gens, \ maxHeapSize, allocAreaSize, \ mblockSize, blockSize) /* nothing */ @@ -663,16 +668,19 @@ INLINE_HEADER void traceEventGcStats(Capability *cap STG_UNUSED, W_ fragmentation STG_UNUSED, uint32_t par_n_threads STG_UNUSED, W_ par_max_copied STG_UNUSED, - W_ par_tot_copied STG_UNUSED) + W_ par_tot_copied STG_UNUSED, + W_ par_balanced_copied STG_UNUSED) { if (RTS_UNLIKELY(TRACE_gc)) { traceEventGcStats_(cap, heap_capset, gen, copied, slop, fragmentation, - par_n_threads, par_max_copied, par_tot_copied); + par_n_threads, par_max_copied, + par_tot_copied, par_balanced_copied); } dtraceEventGcStats(heap_capset, gen, copied, slop, fragmentation, - par_n_threads, par_max_copied, par_tot_copied); + par_n_threads, par_max_copied, + par_tot_copied, par_balanced_copied); } INLINE_HEADER void traceEventHeapInfo(CapsetID heap_capset STG_UNUSED, -- cgit v1.2.1