Repository : ssh://darcs.haskell.org//srv/darcs/nofib On branch : master
http://hackage.haskell.org/trac/ghc/changeset/8eb091c6db050b502b83a903db92d16800d60b87 >--------------------------------------------------------------- commit 8eb091c6db050b502b83a903db92d16800d60b87 Author: Simon Marlow <[email protected]> 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; _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
