diff options
| author | Grant Likely <grant.likely@secretlab.ca> | 2010-05-25 00:38:26 -0600 | 
|---|---|---|
| committer | Grant Likely <grant.likely@secretlab.ca> | 2010-05-25 00:38:26 -0600 | 
| commit | b1e50ebcf24668e57f058deb48b0704b5391ed0f (patch) | |
| tree | 17e1b69b249d0738317b732186340c9dd053f1a1 /tools/perf/scripts/perl | |
| parent | 0c2a2ae32793e3500a15a449612485f5d17dd431 (diff) | |
| parent | 7e125f7b9cbfce4101191b8076d606c517a73066 (diff) | |
Merge remote branch 'origin' into secretlab/next-spi
Diffstat (limited to 'tools/perf/scripts/perl')
19 files changed, 310 insertions, 45 deletions
| diff --git a/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Util.pm b/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Util.pm index f869c48dc9b..d94b40c8ac8 100644 --- a/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Util.pm +++ b/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Util.pm @@ -15,6 +15,7 @@ our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );  our @EXPORT = qw(  avg nsecs nsecs_secs nsecs_nsecs nsecs_usecs print_nsecs +clear_term  );  our $VERSION = '0.01'; @@ -55,6 +56,11 @@ sub nsecs_str {      return $str;  } +sub clear_term +{ +    print "\x1b[H\x1b[2J"; +} +  1;  __END__  =head1 NAME diff --git a/tools/perf/scripts/perl/bin/check-perf-trace-record b/tools/perf/scripts/perl/bin/check-perf-trace-record index e6cb1474f8e..423ad6aed05 100644 --- a/tools/perf/scripts/perl/bin/check-perf-trace-record +++ b/tools/perf/scripts/perl/bin/check-perf-trace-record @@ -1,2 +1,2 @@  #!/bin/bash -perf record -c 1 -f -a -M -R -e kmem:kmalloc -e irq:softirq_entry -e kmem:kfree +perf record -a -e kmem:kmalloc -e irq:softirq_entry -e kmem:kfree diff --git a/tools/perf/scripts/perl/bin/failed-syscalls-record b/tools/perf/scripts/perl/bin/failed-syscalls-record index f8885d389e6..eb5846bcb56 100644 --- a/tools/perf/scripts/perl/bin/failed-syscalls-record +++ b/tools/perf/scripts/perl/bin/failed-syscalls-record @@ -1,2 +1,2 @@  #!/bin/bash -perf record -c 1 -f -a -M -R -e raw_syscalls:sys_exit +perf record -a -e raw_syscalls:sys_exit $@ diff --git a/tools/perf/scripts/perl/bin/failed-syscalls-report b/tools/perf/scripts/perl/bin/failed-syscalls-report index 8bfc660e505..e3a5e55d54f 100644 --- a/tools/perf/scripts/perl/bin/failed-syscalls-report +++ b/tools/perf/scripts/perl/bin/failed-syscalls-report @@ -1,4 +1,10 @@  #!/bin/bash  # description: system-wide failed syscalls  # args: [comm] -perf trace -s ~/libexec/perf-core/scripts/perl/failed-syscalls.pl $1 +if [ $# -gt 0 ] ; then +    if ! expr match "$1" "-" > /dev/null ; then +	comm=$1 +	shift +    fi +fi +perf trace $@ -s ~/libexec/perf-core/scripts/perl/failed-syscalls.pl $comm diff --git a/tools/perf/scripts/perl/bin/rw-by-file-record b/tools/perf/scripts/perl/bin/rw-by-file-record index b25056ebf96..5bfaae5a6cb 100644 --- a/tools/perf/scripts/perl/bin/rw-by-file-record +++ b/tools/perf/scripts/perl/bin/rw-by-file-record @@ -1,2 +1,3 @@  #!/bin/bash -perf record -c 1 -f -a -M -R -e syscalls:sys_enter_read -e syscalls:sys_enter_write +perf record -a -e syscalls:sys_enter_read -e syscalls:sys_enter_write $@ + diff --git a/tools/perf/scripts/perl/bin/rw-by-file-report b/tools/perf/scripts/perl/bin/rw-by-file-report index eddb9ccce6a..d83070b7eeb 100644 --- a/tools/perf/scripts/perl/bin/rw-by-file-report +++ b/tools/perf/scripts/perl/bin/rw-by-file-report @@ -1,7 +1,13 @@  #!/bin/bash  # description: r/w activity for a program, by file  # args: <comm> -perf trace -s ~/libexec/perf-core/scripts/perl/rw-by-file.pl $1 +if [ $# -lt 1 ] ; then +    echo "usage: rw-by-file <comm>" +    exit +fi +comm=$1 +shift +perf trace $@ -s ~/libexec/perf-core/scripts/perl/rw-by-file.pl $comm diff --git a/tools/perf/scripts/perl/bin/rw-by-pid-record b/tools/perf/scripts/perl/bin/rw-by-pid-record index 8903979c5b6..6e0b2f7755a 100644 --- a/tools/perf/scripts/perl/bin/rw-by-pid-record +++ b/tools/perf/scripts/perl/bin/rw-by-pid-record @@ -1,2 +1,2 @@  #!/bin/bash -perf record -c 1 -f -a -M -R -e syscalls:sys_enter_read -e syscalls:sys_exit_read -e syscalls:sys_enter_write -e syscalls:sys_exit_write +perf record -a -e syscalls:sys_enter_read -e syscalls:sys_exit_read -e syscalls:sys_enter_write -e syscalls:sys_exit_write $@ diff --git a/tools/perf/scripts/perl/bin/rw-by-pid-report b/tools/perf/scripts/perl/bin/rw-by-pid-report index 7f44c25cc85..7ef46983f62 100644 --- a/tools/perf/scripts/perl/bin/rw-by-pid-report +++ b/tools/perf/scripts/perl/bin/rw-by-pid-report @@ -1,6 +1,6 @@  #!/bin/bash  # description: system-wide r/w activity -perf trace -s ~/libexec/perf-core/scripts/perl/rw-by-pid.pl +perf trace $@ -s ~/libexec/perf-core/scripts/perl/rw-by-pid.pl diff --git a/tools/perf/scripts/perl/bin/rwtop-record b/tools/perf/scripts/perl/bin/rwtop-record new file mode 100644 index 00000000000..6e0b2f7755a --- /dev/null +++ b/tools/perf/scripts/perl/bin/rwtop-record @@ -0,0 +1,2 @@ +#!/bin/bash +perf record -a -e syscalls:sys_enter_read -e syscalls:sys_exit_read -e syscalls:sys_enter_write -e syscalls:sys_exit_write $@ diff --git a/tools/perf/scripts/perl/bin/rwtop-report b/tools/perf/scripts/perl/bin/rwtop-report new file mode 100644 index 00000000000..93e698cd3f3 --- /dev/null +++ b/tools/perf/scripts/perl/bin/rwtop-report @@ -0,0 +1,23 @@ +#!/bin/bash +# description: system-wide r/w top +# args: [interval] +n_args=0 +for i in "$@" +do +    if expr match "$i" "-" > /dev/null ; then +	break +    fi +    n_args=$(( $n_args + 1 )) +done +if [ "$n_args" -gt 1 ] ; then +    echo "usage: rwtop-report [interval]" +    exit +fi +if [ "$n_args" -gt 0 ] ; then +    interval=$1 +    shift +fi +perf trace $@ -s ~/libexec/perf-core/scripts/perl/rwtop.pl $interval + + + diff --git a/tools/perf/scripts/perl/bin/wakeup-latency-record b/tools/perf/scripts/perl/bin/wakeup-latency-record index 6abedda911a..9f2acaaae9f 100644 --- a/tools/perf/scripts/perl/bin/wakeup-latency-record +++ b/tools/perf/scripts/perl/bin/wakeup-latency-record @@ -1,5 +1,5 @@  #!/bin/bash -perf record -c 1 -f -a -M -R -e sched:sched_switch -e sched:sched_wakeup +perf record -a -e sched:sched_switch -e sched:sched_wakeup $@ diff --git a/tools/perf/scripts/perl/bin/wakeup-latency-report b/tools/perf/scripts/perl/bin/wakeup-latency-report index fce3adcb324..a0d898f9ca1 100644 --- a/tools/perf/scripts/perl/bin/wakeup-latency-report +++ b/tools/perf/scripts/perl/bin/wakeup-latency-report @@ -1,6 +1,6 @@  #!/bin/bash  # description: system-wide min/max/avg wakeup latency -perf trace -s ~/libexec/perf-core/scripts/perl/wakeup-latency.pl +perf trace $@ -s ~/libexec/perf-core/scripts/perl/wakeup-latency.pl diff --git a/tools/perf/scripts/perl/bin/workqueue-stats-record b/tools/perf/scripts/perl/bin/workqueue-stats-record index fce6637b19b..85301f2471f 100644 --- a/tools/perf/scripts/perl/bin/workqueue-stats-record +++ b/tools/perf/scripts/perl/bin/workqueue-stats-record @@ -1,2 +1,2 @@  #!/bin/bash -perf record -c 1 -f -a -M -R -e workqueue:workqueue_creation -e workqueue:workqueue_destruction -e workqueue:workqueue_execution -e workqueue:workqueue_insertion +perf record -a -e workqueue:workqueue_creation -e workqueue:workqueue_destruction -e workqueue:workqueue_execution -e workqueue:workqueue_insertion $@ diff --git a/tools/perf/scripts/perl/bin/workqueue-stats-report b/tools/perf/scripts/perl/bin/workqueue-stats-report index 71cfbd182fb..35081132ef9 100644 --- a/tools/perf/scripts/perl/bin/workqueue-stats-report +++ b/tools/perf/scripts/perl/bin/workqueue-stats-report @@ -1,6 +1,6 @@  #!/bin/bash  # description: workqueue stats (ins/exe/create/destroy) -perf trace -s ~/libexec/perf-core/scripts/perl/workqueue-stats.pl +perf trace $@ -s ~/libexec/perf-core/scripts/perl/workqueue-stats.pl diff --git a/tools/perf/scripts/perl/failed-syscalls.pl b/tools/perf/scripts/perl/failed-syscalls.pl index c18e7e27a84..94bc25a347e 100644 --- a/tools/perf/scripts/perl/failed-syscalls.pl +++ b/tools/perf/scripts/perl/failed-syscalls.pl @@ -11,6 +11,8 @@ use Perf::Trace::Core;  use Perf::Trace::Context;  use Perf::Trace::Util; +my $for_comm = shift; +  my %failed_syscalls;  sub raw_syscalls::sys_exit @@ -33,6 +35,8 @@ sub trace_end      foreach my $comm (sort {$failed_syscalls{$b} <=> $failed_syscalls{$a}}  		      keys %failed_syscalls) { -	    printf("%-20s  %10s\n", $comm, $failed_syscalls{$comm}); +	next if ($for_comm && $comm ne $for_comm); + +	printf("%-20s  %10s\n", $comm, $failed_syscalls{$comm});      }  } diff --git a/tools/perf/scripts/perl/rw-by-pid.pl b/tools/perf/scripts/perl/rw-by-pid.pl index da601fae1a0..9db23c9daf5 100644 --- a/tools/perf/scripts/perl/rw-by-pid.pl +++ b/tools/perf/scripts/perl/rw-by-pid.pl @@ -79,12 +79,12 @@ sub trace_end      printf("%6s  %-20s  %10s  %10s  %10s\n", "------", "--------------------",  	   "-----------", "----------", "----------"); -    foreach my $pid (sort {$reads{$b}{bytes_read} <=> -			       $reads{$a}{bytes_read}} keys %reads) { -	my $comm = $reads{$pid}{comm}; -	my $total_reads = $reads{$pid}{total_reads}; -	my $bytes_requested = $reads{$pid}{bytes_requested}; -	my $bytes_read = $reads{$pid}{bytes_read}; +    foreach my $pid (sort { ($reads{$b}{bytes_read} || 0) <=> +				($reads{$a}{bytes_read} || 0) } keys %reads) { +	my $comm = $reads{$pid}{comm} || ""; +	my $total_reads = $reads{$pid}{total_reads} || 0; +	my $bytes_requested = $reads{$pid}{bytes_requested} || 0; +	my $bytes_read = $reads{$pid}{bytes_read} || 0;  	printf("%6s  %-20s  %10s  %10s  %10s\n", $pid, $comm,  	       $total_reads, $bytes_requested, $bytes_read); @@ -96,16 +96,23 @@ sub trace_end      printf("%6s  %20s  %6s  %10s\n", "------", "--------------------",  	   "------", "----------"); -    foreach my $pid (keys %reads) { -	my $comm = $reads{$pid}{comm}; -	foreach my $err (sort {$reads{$b}{comm} cmp $reads{$a}{comm}} -			 keys %{$reads{$pid}{errors}}) { -	    my $errors = $reads{$pid}{errors}{$err}; +    my @errcounts = (); -	    printf("%6d  %-20s  %6d  %10s\n", $pid, $comm, $err, $errors); +    foreach my $pid (keys %reads) { +	foreach my $error (keys %{$reads{$pid}{errors}}) { +	    my $comm = $reads{$pid}{comm} || ""; +	    my $errcount = $reads{$pid}{errors}{$error} || 0; +	    push @errcounts, [$pid, $comm, $error, $errcount];  	}      } +    @errcounts = sort { $b->[3] <=> $a->[3] } @errcounts; + +    for my $i (0 .. $#errcounts) { +	printf("%6d  %-20s  %6d  %10s\n", $errcounts[$i][0], +	       $errcounts[$i][1], $errcounts[$i][2], $errcounts[$i][3]); +    } +      printf("\nwrite counts by pid:\n\n");      printf("%6s  %20s  %10s  %10s\n", "pid", "comm", @@ -113,11 +120,11 @@ sub trace_end      printf("%6s  %-20s  %10s  %10s\n", "------", "--------------------",  	   "-----------", "----------"); -    foreach my $pid (sort {$writes{$b}{bytes_written} <=> -			       $writes{$a}{bytes_written}} keys %writes) { -	my $comm = $writes{$pid}{comm}; -	my $total_writes = $writes{$pid}{total_writes}; -	my $bytes_written = $writes{$pid}{bytes_written}; +    foreach my $pid (sort { ($writes{$b}{bytes_written} || 0) <=> +			($writes{$a}{bytes_written} || 0)} keys %writes) { +	my $comm = $writes{$pid}{comm} || ""; +	my $total_writes = $writes{$pid}{total_writes} || 0; +	my $bytes_written = $writes{$pid}{bytes_written} || 0;  	printf("%6s  %-20s  %10s  %10s\n", $pid, $comm,  	       $total_writes, $bytes_written); @@ -129,16 +136,23 @@ sub trace_end      printf("%6s  %20s  %6s  %10s\n", "------", "--------------------",  	   "------", "----------"); -    foreach my $pid (keys %writes) { -	my $comm = $writes{$pid}{comm}; -	foreach my $err (sort {$writes{$b}{comm} cmp $writes{$a}{comm}} -			 keys %{$writes{$pid}{errors}}) { -	    my $errors = $writes{$pid}{errors}{$err}; +    @errcounts = (); -	    printf("%6d  %-20s  %6d  %10s\n", $pid, $comm, $err, $errors); +    foreach my $pid (keys %writes) { +	foreach my $error (keys %{$writes{$pid}{errors}}) { +	    my $comm = $writes{$pid}{comm} || ""; +	    my $errcount = $writes{$pid}{errors}{$error} || 0; +	    push @errcounts, [$pid, $comm, $error, $errcount];  	}      } +    @errcounts = sort { $b->[3] <=> $a->[3] } @errcounts; + +    for my $i (0 .. $#errcounts) { +	printf("%6d  %-20s  %6d  %10s\n", $errcounts[$i][0], +	       $errcounts[$i][1], $errcounts[$i][2], $errcounts[$i][3]); +    } +      print_unhandled();  } diff --git a/tools/perf/scripts/perl/rwtop.pl b/tools/perf/scripts/perl/rwtop.pl new file mode 100644 index 00000000000..4bb3ecd3347 --- /dev/null +++ b/tools/perf/scripts/perl/rwtop.pl @@ -0,0 +1,199 @@ +#!/usr/bin/perl -w +# (c) 2010, Tom Zanussi <tzanussi@gmail.com> +# Licensed under the terms of the GNU GPL License version 2 + +# read/write top +# +# Periodically displays system-wide r/w call activity, broken down by +# pid.  If an [interval] arg is specified, the display will be +# refreshed every [interval] seconds.  The default interval is 3 +# seconds. + +use 5.010000; +use strict; +use warnings; + +use lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib"; +use lib "./Perf-Trace-Util/lib"; +use Perf::Trace::Core; +use Perf::Trace::Util; + +my $default_interval = 3; +my $nlines = 20; +my $print_thread; +my $print_pending = 0; + +my %reads; +my %writes; + +my $interval = shift; +if (!$interval) { +    $interval = $default_interval; +} + +sub syscalls::sys_exit_read +{ +    my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, +	$common_pid, $common_comm, +	$nr, $ret) = @_; + +    print_check(); + +    if ($ret > 0) { +	$reads{$common_pid}{bytes_read} += $ret; +    } else { +	if (!defined ($reads{$common_pid}{bytes_read})) { +	    $reads{$common_pid}{bytes_read} = 0; +	} +	$reads{$common_pid}{errors}{$ret}++; +    } +} + +sub syscalls::sys_enter_read +{ +    my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, +	$common_pid, $common_comm, +	$nr, $fd, $buf, $count) = @_; + +    print_check(); + +    $reads{$common_pid}{bytes_requested} += $count; +    $reads{$common_pid}{total_reads}++; +    $reads{$common_pid}{comm} = $common_comm; +} + +sub syscalls::sys_exit_write +{ +    my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, +	$common_pid, $common_comm, +	$nr, $ret) = @_; + +    print_check(); + +    if ($ret <= 0) { +	$writes{$common_pid}{errors}{$ret}++; +    } +} + +sub syscalls::sys_enter_write +{ +    my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, +	$common_pid, $common_comm, +	$nr, $fd, $buf, $count) = @_; + +    print_check(); + +    $writes{$common_pid}{bytes_written} += $count; +    $writes{$common_pid}{total_writes}++; +    $writes{$common_pid}{comm} = $common_comm; +} + +sub trace_begin +{ +    $SIG{ALRM} = \&set_print_pending; +    alarm 1; +} + +sub trace_end +{ +    print_unhandled(); +    print_totals(); +} + +sub print_check() +{ +    if ($print_pending == 1) { +	$print_pending = 0; +	print_totals(); +    } +} + +sub set_print_pending() +{ +    $print_pending = 1; +    alarm $interval; +} + +sub print_totals +{ +    my $count; + +    $count = 0; + +    clear_term(); + +    printf("\nread counts by pid:\n\n"); + +    printf("%6s  %20s  %10s  %10s  %10s\n", "pid", "comm", +	   "# reads", "bytes_req", "bytes_read"); +    printf("%6s  %-20s  %10s  %10s  %10s\n", "------", "--------------------", +	   "----------", "----------", "----------"); + +    foreach my $pid (sort { ($reads{$b}{bytes_read} || 0) <=> +			       ($reads{$a}{bytes_read} || 0) } keys %reads) { +	my $comm = $reads{$pid}{comm} || ""; +	my $total_reads = $reads{$pid}{total_reads} || 0; +	my $bytes_requested = $reads{$pid}{bytes_requested} || 0; +	my $bytes_read = $reads{$pid}{bytes_read} || 0; + +	printf("%6s  %-20s  %10s  %10s  %10s\n", $pid, $comm, +	       $total_reads, $bytes_requested, $bytes_read); + +	if (++$count == $nlines) { +	    last; +	} +    } + +    $count = 0; + +    printf("\nwrite counts by pid:\n\n"); + +    printf("%6s  %20s  %10s  %13s\n", "pid", "comm", +	   "# writes", "bytes_written"); +    printf("%6s  %-20s  %10s  %13s\n", "------", "--------------------", +	   "----------", "-------------"); + +    foreach my $pid (sort { ($writes{$b}{bytes_written} || 0) <=> +			($writes{$a}{bytes_written} || 0)} keys %writes) { +	my $comm = $writes{$pid}{comm} || ""; +	my $total_writes = $writes{$pid}{total_writes} || 0; +	my $bytes_written = $writes{$pid}{bytes_written} || 0; + +	printf("%6s  %-20s  %10s  %13s\n", $pid, $comm, +	       $total_writes, $bytes_written); + +	if (++$count == $nlines) { +	    last; +	} +    } + +    %reads = (); +    %writes = (); +} + +my %unhandled; + +sub print_unhandled +{ +    if ((scalar keys %unhandled) == 0) { +	return; +    } + +    print "\nunhandled events:\n\n"; + +    printf("%-40s  %10s\n", "event", "count"); +    printf("%-40s  %10s\n", "----------------------------------------", +	   "-----------"); + +    foreach my $event_name (keys %unhandled) { +	printf("%-40s  %10d\n", $event_name, $unhandled{$event_name}); +    } +} + +sub trace_unhandled +{ +    my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, +	$common_pid, $common_comm) = @_; + +    $unhandled{$event_name}++; +} diff --git a/tools/perf/scripts/perl/wakeup-latency.pl b/tools/perf/scripts/perl/wakeup-latency.pl index ed58ef284e2..d9143dcec6c 100644 --- a/tools/perf/scripts/perl/wakeup-latency.pl +++ b/tools/perf/scripts/perl/wakeup-latency.pl @@ -22,8 +22,8 @@ my %last_wakeup;  my $max_wakeup_latency;  my $min_wakeup_latency; -my $total_wakeup_latency; -my $total_wakeups; +my $total_wakeup_latency = 0; +my $total_wakeups = 0;  sub sched::sched_switch  { @@ -67,8 +67,12 @@ sub trace_end  {      printf("wakeup_latency stats:\n\n");      print "total_wakeups: $total_wakeups\n"; -    printf("avg_wakeup_latency (ns): %u\n", -	   avg($total_wakeup_latency, $total_wakeups)); +    if ($total_wakeups) { +	printf("avg_wakeup_latency (ns): %u\n", +	       avg($total_wakeup_latency, $total_wakeups)); +    } else { +	printf("avg_wakeup_latency (ns): N/A\n"); +    }      printf("min_wakeup_latency (ns): %u\n", $min_wakeup_latency);      printf("max_wakeup_latency (ns): %u\n", $max_wakeup_latency); diff --git a/tools/perf/scripts/perl/workqueue-stats.pl b/tools/perf/scripts/perl/workqueue-stats.pl index 511302c8a49..b84b12699b7 100644 --- a/tools/perf/scripts/perl/workqueue-stats.pl +++ b/tools/perf/scripts/perl/workqueue-stats.pl @@ -71,9 +71,9 @@ sub trace_end      printf("%3s %6s %6s\t%-20s\n", "---", "---", "----", "----");      foreach my $pidhash (@cpus) {  	while ((my $pid, my $wqhash) = each %$pidhash) { -	    my $ins = $$wqhash{'inserted'}; -	    my $exe = $$wqhash{'executed'}; -	    my $comm = $$wqhash{'comm'}; +	    my $ins = $$wqhash{'inserted'} || 0; +	    my $exe = $$wqhash{'executed'} || 0; +	    my $comm = $$wqhash{'comm'} || "";  	    if ($ins || $exe) {  		printf("%3u %6u %6u\t%-20s\n", $cpu, $ins, $exe, $comm);  	    } @@ -87,9 +87,9 @@ sub trace_end      printf("%3s %6s %6s\t%-20s\n", "---", "-------", "---------", "----");      foreach my $pidhash (@cpus) {  	while ((my $pid, my $wqhash) = each %$pidhash) { -	    my $created = $$wqhash{'created'}; -	    my $destroyed = $$wqhash{'destroyed'}; -	    my $comm = $$wqhash{'comm'}; +	    my $created = $$wqhash{'created'} || 0; +	    my $destroyed = $$wqhash{'destroyed'} || 0; +	    my $comm = $$wqhash{'comm'} || "";  	    if ($created || $destroyed) {  		printf("%3u %6u %6u\t%-20s\n", $cpu, $created, $destroyed,  		       $comm); | 
