summaryrefslogtreecommitdiff
path: root/includes
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 /includes
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 'includes')
-rw-r--r--includes/RtsAPI.h4
-rw-r--r--includes/rts/EventLogFormat.h11
2 files changed, 10 insertions, 5 deletions
diff --git a/includes/RtsAPI.h b/includes/RtsAPI.h
index f1c04fa360..1ed5fb06f0 100644
--- a/includes/RtsAPI.h
+++ b/includes/RtsAPI.h
@@ -135,6 +135,8 @@ typedef struct GCDetails_ {
uint64_t copied_bytes;
// In parallel GC, the max amount of data copied by any one thread
uint64_t par_max_copied_bytes;
+ // In parallel GC, the amount of balanced data copied by all threads
+ uint64_t par_balanced_copied_bytes;
// The time elapsed during synchronisation before GC
Time sync_elapsed_ns;
// The CPU time used during GC itself
@@ -176,6 +178,8 @@ typedef struct _RTSStats {
uint64_t par_copied_bytes;
// Sum of par_max_copied_bytes across all parallel GCs
uint64_t cumulative_par_max_copied_bytes;
+ // Sum of par_balanced_copied_byes across all parallel GCs.
+ uint64_t cumulative_par_balanced_copied_bytes;
// -----------------------------------
// Cumulative stats about time use
diff --git a/includes/rts/EventLogFormat.h b/includes/rts/EventLogFormat.h
index b63f842008..f839be04a1 100644
--- a/includes/rts/EventLogFormat.h
+++ b/includes/rts/EventLogFormat.h
@@ -3,16 +3,16 @@
* (c) The GHC Team, 2008-2009
*
* Event log format
- *
+ *
* The log format is designed to be extensible: old tools should be
* able to parse (but not necessarily understand all of) new versions
* of the format, and new tools will be able to understand old log
* files.
- *
+ *
* Each event has a specific format. If you add new events, give them
* new numbers: we never re-use old event numbers.
*
- * - The format is endian-independent: all values are represented in
+ * - The format is endian-independent: all values are represented in
* bigendian order.
*
* - The format is extensible:
@@ -51,7 +51,7 @@
* Word8* -- extra info (for future extensions)
* EVENT_ET_END
*
- * Event :
+ * Event :
* Word16 -- event_type
* Word64 -- time (nanosecs)
* [Word16] -- length of the rest (for variable-sized events only)
@@ -154,7 +154,8 @@
#define EVENT_GC_STATS_GHC 53 /* (heap_capset, generation,
copied_bytes, slop_bytes, frag_bytes,
par_n_threads,
- par_max_copied, par_tot_copied) */
+ par_max_copied,
+ par_tot_copied, par_balanced_copied) */
#define EVENT_GC_GLOBAL_SYNC 54 /* () */
#define EVENT_TASK_CREATE 55 /* (taskID, cap, tid) */
#define EVENT_TASK_MIGRATE 56 /* (taskID, cap, new_cap) */