Home | History | Annotate | Download | only in tools
      1 #!/usr/bin/perl
      2 
      3 use strict;
      4 
      5 sub compare_proc_interrupts {
      6     my ($run1, $run2) = @_;
      7 
      8     my $printed_header;
      9     foreach my $irq (sort keys %{$run1}) {
     10         if (! $printed_header) {
     11             printf "%-8s ", "IRQ";
     12             foreach my $cpu (sort keys %{$run1->{$irq}}) {
     13                 printf "%-5s ", $cpu;
     14             }
     15             print "\n";
     16             $printed_header = 1;
     17         }
     18         printf "%-8s ", $irq;
     19         foreach my $cpu (sort keys %{$run1->{$irq}}) {
     20             printf "%-5s ", $run2->{$irq}->{$cpu} - $run1->{$irq}->{$cpu};
     21         }
     22         print "\n";
     23     }
     24 }
     25 
     26 
     27 sub parse_proc_interrupts {
     28     my $content = shift;
     29     my @cpus;
     30     my %run;
     31 
     32     foreach my $line (split /\n/, $content) {
     33         $line =~ s/^\s+//;
     34         $line =~ s/\s+$//;
     35 
     36         if (! @cpus) {
     37             @cpus = split /\s+/, $line;
     38         } else {
     39             my @items = split /\s+/, $line;
     40             my $irq = shift @items;
     41             $irq =~ s/:$//;
     42             foreach my $cpu (@cpus) {
     43                 $run{"IRQ$irq"}->{"$cpu"} = shift @items;
     44             }
     45         }
     46     }
     47     return \%run;
     48 }
     49 
     50 my $run1 = parse_proc_interrupts(shift @ARGV);
     51 my $run2 = parse_proc_interrupts(shift @ARGV);
     52 
     53 compare_proc_interrupts($run1, $run2);
     54