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";
74 elsif ($cumulcount!=0) {
75 printf "%-25s %-10Lu %-10Lu %-10Lu",
76 $name, $diff, ($diff/$tdiff), $cumulcount;
80 if (($unit eq "[cycles]") && ($mhz != 1)) {
86 printf "%-8s %10Lu %12.2f %10Lu", $unit, $min, ($sum/$cumulcount), $max;
87 if (defined($sumsquare)) {
88 my $s = $sumsquare - (($sum_orig*$sum_orig)/$cumulcount);
90 my $cnt = ($cumulcount >= 2) ? $cumulcount : 2 ;
91 my $stddev = sqrt($s/($cnt - 1));
92 if (($unit eq "[usecs]") && ($mhz != 1)) {
93 $stddev = $stddev/$mhz;
95 printf " %10.2f", $stddev;
103 if ($cumulcount!=0) {
104 printf "%-25s $cumulcount\n", $name
109 if (defined($sumsquare)) {
113 %namehash->{$name} = $cumulcount;