summaryrefslogtreecommitdiff
path: root/rts/Trace.h
diff options
context:
space:
mode:
authorDouglas Wilson <douglas.wilson@gmail.com>2017-07-11 11:54:09 -0400
committerBen Gamari <ben@smart-cactus.org>2017-07-11 13:41:54 -0400
commit7c9e356de1114ab3e31f2d6d03e83672076dd533 (patch)
tree5a89a142a31a53486e41c75673024548ce4c39ce /rts/Trace.h
parent905dc8bc74bebf5370eb9237cc8756cd9fe871ae (diff)
downloadhaskell-7c9e356de1114ab3e31f2d6d03e83672076dd533.tar.gz
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
Diffstat (limited to 'rts/Trace.h')
-rw-r--r--rts/Trace.h22
1 files changed, 15 insertions, 7 deletions
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,