[commit: nofib] master: collect GC counts (8eb091c)
Simon Marlow
marlowsd at gmail.com
Tue Apr 5 11:21:57 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/nofib
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/8eb091c6db050b502b83a903db92d16800d60b87
>---------------------------------------------------------------
commit 8eb091c6db050b502b83a903db92d16800d60b87
Author: Simon Marlow <marlowsd at gmail.com>
Date: Tue Apr 5 10:07:24 2011 +0100
collect GC counts
>---------------------------------------------------------------
runstdtest/runstdtest.prl | 38 +++++++++++++++++++++++++++-----------
1 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/runstdtest/runstdtest.prl b/runstdtest/runstdtest.prl
index a9b94e6..2e67dc7 100644
--- a/runstdtest/runstdtest.prl
+++ b/runstdtest/runstdtest.prl
@@ -83,6 +83,8 @@ $ToRun = $ARGV[0]; shift(@ARGV);
# avoid picking up same-named thing from somewhere else on $PATH...
$ToRun = "./$ToRun" if -e "./$ToRun";
+$procs = 1; # unless we pick up a -N flag in the arguments
+
arg: while ($_ = $ARGV[0]) {
shift(@ARGV);
@@ -132,6 +134,8 @@ arg: while ($_ = $ARGV[0]) {
next arg };
/^-t(.*)/ && do { $TimeCmd = &grab_arg_arg('-t', $1); next arg; };
+ /^-N(\d+)/ && do { $procs = $1; };
+
# anything else is taken to be a pgm arg
push(@PgmArgs, $_);
}
@@ -326,9 +330,9 @@ if ( $SysSpecificTiming eq '' ) {
# print out what we found
print STDERR "<<$SysSpecificTiming: ";
if ( $Cachegrind ne 'yes') {
- print STDERR "$BytesAlloc bytes, $GCs GCs, $AvgResidency/$MaxResidency avg/max bytes residency ($ResidencySamples samples), $GCWork bytes GC work, ${TotMem}M in use, $InitTime INIT ($InitElapsed elapsed), $MutTime MUT ($MutElapsed elapsed), $GcTime GC ($GcElapsed elapsed), $Gc0Time GC(0) ($Gc0Elapsed elapsed), $Gc1Time GC(1) ($Gc1Elapsed elapsed), $Balance balance$Counters";
+ print STDERR "$BytesAlloc bytes, $GCs GCs ($Gc0Count + $Gc1Count), $AvgResidency/$MaxResidency avg/max bytes residency ($ResidencySamples samples), $GCWork bytes GC work, ${TotMem}M in use, $InitTime INIT ($InitElapsed elapsed), $MutTime MUT ($MutElapsed elapsed), $GcTime GC ($GcElapsed elapsed), $Gc0Time GC(0) ($Gc0Elapsed elapsed), $Gc1Time GC(1) ($Gc1Elapsed elapsed), $Balance balance$Counters";
} else {
- print STDERR "$BytesAlloc bytes, $GCs GCs, $AvgResidency/$MaxResidency avg/max bytes residency ($ResidencySamples samples), $GCWork bytes GC work, ${TotMem}M in use, $InitTime INIT ($InitElapsed elapsed), $MutTime MUT ($MutElapsed elapsed), $GcTime GC ($GcElapsed elapsed), $Gc0Time GC(0) ($Gc0Elapsed elapsed), $Gc1Time GC(1) ($Gc1Elapsed elapsed), $Balance balance, $TotInstrs instructions, $TotReads memory reads, $TotWrites memory writes, $TotMisses L2 cache misses";
+ print STDERR "$BytesAlloc bytes, $GCs GCs ($Gc0Count + $Gc1Count), $AvgResidency/$MaxResidency avg/max bytes residency ($ResidencySamples samples), $GCWork bytes GC work, ${TotMem}M in use, $InitTime INIT ($InitElapsed elapsed), $MutTime MUT ($MutElapsed elapsed), $GcTime GC ($GcElapsed elapsed), $Gc0Time GC(0) ($Gc0Elapsed elapsed), $Gc1Time GC(1) ($Gc1Elapsed elapsed), $Balance balance, $TotInstrs instructions, $TotReads memory reads, $TotWrites memory writes, $TotMisses L2 cache misses";
};
print STDERR " :$SysSpecificTiming>>\n";
@@ -402,19 +406,17 @@ sub process_stats_file {
$BytesAlloc = $1 if /^\s*([0-9,]+) bytes allocated in the heap/;
- if (/^\s*([0-9,]+) bytes copied during GC/) {
+ if (/^\s*([0-9,]+) bytes (copied during GC|globalised)/) {
$tmp = $1;
$tmp =~ s/,//g;
$GCWork += $tmp;
}
-# if ( /^\s*([0-9,]+) bytes maximum residency .* (\d+) sample/ ) {
+# if ( /^\s*([0-9,]+) bytes maximum residency .* (\d+) sample/ ) {
# $MaxResidency = $1; $ResidencySamples = $2;
# }
- $GCs += $1 if /^\s*Generation\s*\d+:\s*([0-9,]+) collections/;
-
- if ( /^\s+([0-9]+)\s+M[Bb] total memory/ ) {
+ if ( /^\s+([0-9]+)\s+M[Bb] total memory/ ) {
$TotMem = $1;
}
@@ -437,11 +439,24 @@ sub process_stats_file {
$GcElapsed = $Gc1Elapsed;
}
- if (/Generation (\d+):\s*\d+ collections,\s*\d+ parallel,\s*(-*\d+\.\d\d)s\s*,\s*(-*\d+\.\d\d)s elapsed/) {
+ if (/Generation (\d+):\s*(\d+) collections,\s*\d+ parallel,\s*(-*\d+\.\d\d)s\s*,\s*(-*\d+\.\d\d)s elapsed/) {
if ($1 == 0) {
- $Gc0Time = $2; $Gc0Elapsed = $3;
+ $GCs += $2 * $procs;
+ $Gc0Count += $2 * $procs;
+ $Gc0Time = $3; $Gc0Elapsed = $4;
} elsif ($1 == 1) {
- $Gc1Time = $2; $Gc1Elapsed = $3;
+ $GCs += $2;
+ $Gc1Count += $2;
+ $Gc1Time = $3; $Gc1Elapsed = $4;
+ }
+ }
+
+ if (/^\s*Gen\s+(\d+)(.\d+)?\s*(\d+) colls,\s*(local|\d+\s*par)\s+(\d+\.\d+)s\s+(\d+\.\d+)s/) {
+ $GCs += $3;
+ if ($1 == 0) {
+ $Gc0Count += $3;
+ } elsif ($1 == 1) {
+ $Gc1Count += $3;
}
}
@@ -449,7 +464,6 @@ sub process_stats_file {
$Balance = $1;
}
-
if ( /CPU GC counters/ ) {
# Counters that follow correspond to GC
$into_gc_counters = 1;
@@ -544,6 +558,8 @@ sub process_stats_file {
$Gc0Elapsed = 0.0 unless defined($Gc0Elapsed);
$Gc1Time = 0.0 unless defined($Gc1Time);
$Gc1Elapsed = 0.0 unless defined($Gc1Elapsed);
+ $Gc0Count = 0 unless defined($Gc0Count);
+ $Gc1Count = 0 unless defined($Gc1Count);
# a bit of tidying
$BytesAlloc =~ s/,//g;
More information about the Cvs-ghc
mailing list