7 print STDERR "Usage: $pname <stats_file> [<interval>]\n";
15 if (($#ARGV < 0) || ($#ARGV > 1)) {
18 $statspath = $ARGV[0];
34 my $itc_freq; # On Itanium systems use this
35 if (open(CPUINFO, "/proc/cpuinfo")==0) {
39 if (/^cpu MHz\s+:\s*([\d\.]+)/) { $cpu_freq=$1; }
40 elsif (/^itc MHz\s+:\s*([\d\.]+)/) { $itc_freq=$1; }
42 if (defined($itc_freq)) { $mhz = $itc_freq; }
43 elsif (defined($cpu_freq)) { $mhz = $cpu_freq; }
48 print "Processor counters run at $mhz MHz\n";
52 open(STATS, $statspath) || die "Cannot open $statspath: $!\n";
55 ($name, $cumulcount, $samples, $unit, $min, $max, $sum, $sumsquare)
58 $prevcount = %namehash->{$name};
59 if (defined($prevcount)) {
60 $diff = $cumulcount - $prevcount;
61 if ($name eq "snapshot_time") {
63 # printf "%-25s prev=$prevcount, cumul=$cumulcount diff=$diff, tdiff=$tdiff\n", $name;
64 printf "$statspath @ $cumulcount\n";
65 printf "%-25s %-10s %-10s %-10s", "Name", "Cur.Count", "Cur.Rate", "#Events";
67 printf "%-8s %10s %12s %10s", "Unit", "min", "avg", "max";
70 printf "%10s", "stddev";
75 elsif ($cumulcount!=0) {
76 printf "%-25s %-10lu %-10lu %-10lu",
77 $name, $diff, ($diff/$tdiff), $cumulcount;
81 if (($unit eq "[cycles]") && ($mhz != 1)) {
87 printf "%-8s %10lu %12.2f %10lu", $unit, $min, ($sum/$cumulcount), $max;
88 if (defined($sumsquare)) {
89 my $s = $sumsquare - (($sum_orig*$sum_orig)/$cumulcount);
91 my $cnt = ($cumulcount >= 2) ? $cumulcount : 2 ;
92 my $stddev = sqrt($s/($cnt - 1));
93 if (($unit eq "[usecs]") && ($mhz != 1)) {
94 $stddev = $stddev/$mhz;
96 printf " %10.2f", $stddev;
105 if ($cumulcount!=0) {
106 printf "%-25s $cumulcount\n", $name
111 if (defined($sumsquare)) {
115 %namehash->{$name} = $cumulcount;