From 68f96c0c889b55bf62eee98e859cb686f8850188 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Wed, 12 Nov 2008 10:21:01 -0800 Subject: tracing/fastboot: fix perlcritic warning Impact: cleanup Fix the following warning from the perl syntax checking tool perlcritic. This tool is a lint like tool that checks for perl best practices. Loop iterator is not lexical at line 113, column 1. See page 108 of PBP. (Severity: 5) Signed-off-by: Stephen Hemminger Signed-off-by: Ingo Molnar --- scripts/bootgraph.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts/bootgraph.pl') diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index d2c61efc216..a8635a10fef 100644 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl @@ -109,8 +109,8 @@ my $stylecounter = 0; my %rows; my $rowscount = 1; my @initcalls = sort { $start{$a} <=> $start{$b} } keys(%start); -my $key; -foreach $key (@initcalls) { + +foreach my $key (@initcalls) { my $duration = $end{$key} - $start{$key}; if ($duration >= $threshold) { -- cgit v1.2.3-70-g09d2 From d1aaf8cf8afe70a8c2235a565885291fe290c57c Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Thu, 13 Nov 2008 08:33:00 -0800 Subject: tracing/fastboot: put error message on stderr Since this scripts output is usually redirected, put error messages on standard error and exit with error code if no data is found. Signed-off-by: Stephen Hemminger Acked-by: Arjan van de Ven Signed-off-by: Ingo Molnar --- scripts/bootgraph.pl | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'scripts/bootgraph.pl') diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index a8635a10fef..f0af9aa9b24 100644 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl @@ -78,11 +78,13 @@ while (<>) { } if ($count == 0) { - print "No data found in the dmesg. Make sure that 'printk.time=1' and\n"; - print "'initcall_debug' are passed on the kernel command line.\n\n"; - print "Usage: \n"; - print " dmesg | perl scripts/bootgraph.pl > output.svg\n\n"; - exit; + print STDERR < output.svg +END + exit 1; } print " \n"; -- cgit v1.2.3-70-g09d2 From 40c8c85a47552bd792b0ad49ddcc45ec18369134 Mon Sep 17 00:00:00 2001 From: Arjan van de Ven Date: Sun, 4 Jan 2009 07:16:38 -0800 Subject: bootchart: improve output based on Dave Jones' feedback Dave Jones, in his blog, had some feedback about the bootchart script: Primarily his complaint was that shorter delays weren't visualized. The reason for that was that too small delays will have their labels mixed up in the graph in an unreadable mess. This patch has a fix for this; for one, it makes the output wider, so more will fit. The second part is that smaller delays are now shown with a much smaller font for the label; while this isn't per se readable at a 1:1 zoom, at least you can zoom in with most SVG viewing applications and see what it is you are looking at. Signed-off-by: Arjan van de Ven Signed-off-by: Sam Ravnborg --- scripts/bootgraph.pl | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'scripts/bootgraph.pl') diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index f0af9aa9b24..0a498e33b30 100644 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl @@ -88,7 +88,7 @@ END } print " \n"; -print "\n"; +print "\n"; my @styles; @@ -105,8 +105,9 @@ $styles[9] = "fill:rgb(255,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0 $styles[10] = "fill:rgb(255,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; $styles[11] = "fill:rgb(128,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -my $mult = 950.0 / ($maxtime - $firsttime); -my $threshold = ($maxtime - $firsttime) / 60.0; +my $mult = 1950.0 / ($maxtime - $firsttime); +my $threshold2 = ($maxtime - $firsttime) / 120.0; +my $threshold = $threshold2/10; my $stylecounter = 0; my %rows; my $rowscount = 1; @@ -116,7 +117,7 @@ foreach my $key (@initcalls) { my $duration = $end{$key} - $start{$key}; if ($duration >= $threshold) { - my ($s, $s2, $e, $w, $y, $y2, $style); + my ($s, $s2, $s3, $e, $w, $y, $y2, $style); my $pid = $pids{$key}; if (!defined($rows{$pid})) { @@ -125,6 +126,7 @@ foreach my $key (@initcalls) { } $s = ($start{$key} - $firsttime) * $mult; $s2 = $s + 6; + $s3 = $s + 1; $e = ($end{$key} - $firsttime) * $mult; $w = $e - $s; @@ -138,7 +140,11 @@ foreach my $key (@initcalls) { }; print "\n"; - print "$key\n"; + if ($duration >= $threshold2) { + print "$key\n"; + } else { + print "$key\n"; + } } } -- cgit v1.2.3-70-g09d2 From d3f8ddea444b3b5324d74144177a50557cd1f137 Mon Sep 17 00:00:00 2001 From: Arjan van de Ven Date: Sat, 10 Jan 2009 10:03:05 -0800 Subject: bootgraph: make the bootgraph script show async waiting time It is useful for diagnosing boot performance to see where async function calls are waiting on serialization... this patch adds this functionality to the bootgraph.pl script. The waiting time is shown as a half transparent, gray bar through the block that is waiting. Signed-off-by: Arjan van de Ven Signed-off-by: Linus Torvalds --- scripts/bootgraph.pl | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) (limited to 'scripts/bootgraph.pl') diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index 0a498e33b30..b0246307aac 100644 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl @@ -41,11 +41,13 @@ use strict; my %start; my %end; +my %type; my $done = 0; my $maxtime = 0; my $firsttime = 100; my $count = 0; my %pids; +my %pidctr; while (<>) { my $line = $_; @@ -53,6 +55,7 @@ while (<>) { my $func = $2; if ($done == 0) { $start{$func} = $1; + $type{$func} = 0; if ($1 < $firsttime) { $firsttime = $1; } @@ -63,12 +66,40 @@ while (<>) { $count = $count + 1; } + if ($line =~ /([0-9\.]+)\] async_waiting @ ([0-9]+)/) { + my $pid = $2; + my $func; + if (!defined($pidctr{$pid})) { + $func = "wait_" . $pid . "_1"; + $pidctr{$pid} = 1; + } else { + $pidctr{$pid} = $pidctr{$pid} + 1; + $func = "wait_" . $pid . "_" . $pidctr{$pid}; + } + if ($done == 0) { + $start{$func} = $1; + $type{$func} = 1; + if ($1 < $firsttime) { + $firsttime = $1; + } + } + $pids{$func} = $pid; + $count = $count + 1; + } + if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_]+)\+.*returned/) { if ($done == 0) { $end{$2} = $1; $maxtime = $1; } } + + if ($line =~ /([0-9\.]+)\] async_continuing @ ([0-9]+)/) { + my $pid = $2; + my $func = "wait_" . $pid . "_" . $pidctr{$pid}; + $end{$func} = $1; + $maxtime = $1; + } if ($line =~ /Write protecting the/) { $done = 1; } @@ -105,6 +136,8 @@ $styles[9] = "fill:rgb(255,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0 $styles[10] = "fill:rgb(255,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; $styles[11] = "fill:rgb(128,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; +my $style_wait = "fill:rgb(128,128,128);fill-opacity:0.5;stroke-width:0;stroke:rgb(0,0,0)"; + my $mult = 1950.0 / ($maxtime - $firsttime); my $threshold2 = ($maxtime - $firsttime) / 120.0; my $threshold = $threshold2/10; @@ -139,11 +172,16 @@ foreach my $key (@initcalls) { $stylecounter = 0; }; - print "\n"; - if ($duration >= $threshold2) { - print "$key\n"; + if ($type{$key} == 1) { + $y = $y + 15; + print "\n"; } else { - print "$key\n"; + print "\n"; + if ($duration >= $threshold2) { + print "$key\n"; + } else { + print "$key\n"; + } } } } -- cgit v1.2.3-70-g09d2