# # Subroutines which derive information from # ghc garbage collection stats -- %gcstat # sub max_residency { local(%gcstats) = @_; local($i, $max) = (-1, 0); if ($gcstats{"collector"} eq "APPEL") { die "APPEL stats: average residency not possible\n" ; } while(++$i < $gcstats{"gc_no"}) { $max = $gcstats{"live_$i"} > $max ? $gcstats{"live_$i"} : $max; } $max; } sub avg_residency { local(%gcstats) = @_; local($i, $j, $total); if ($gcstats{"collector"} eq "APPEL") { die "APPEL stats: average residency not possible\n" ; } if ($gcstats{"gc_no"} == 0) { return(0); }; $i = 0; $j = 0; $total = $gcstats{"live_$i"} * $gcstats{"mut_user_$i"} / 2; while(++$i < $gcstats{"gc_no"}) { $total += ($gcstats{"live_$i"} + $gcstats{"live_$j"}) * $gcstats{"mut_user_$i"} / 2; $j = $i; }; $total += $gcstats{"live_$j"} * $gcstats{"mut_user_$i"} / 2; int($total / $gcstats{"mut_user_total"}); } 1;