diff options
Diffstat (limited to 'meta-moblin/packages/linux/linux-moblin-2.6.27/0039-Add-a-script-to-visualize-the-kernel-boot-process.patch')
-rw-r--r-- | meta-moblin/packages/linux/linux-moblin-2.6.27/0039-Add-a-script-to-visualize-the-kernel-boot-process.patch | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/meta-moblin/packages/linux/linux-moblin-2.6.27/0039-Add-a-script-to-visualize-the-kernel-boot-process.patch b/meta-moblin/packages/linux/linux-moblin-2.6.27/0039-Add-a-script-to-visualize-the-kernel-boot-process.patch deleted file mode 100644 index 6bcaab108..000000000 --- a/meta-moblin/packages/linux/linux-moblin-2.6.27/0039-Add-a-script-to-visualize-the-kernel-boot-process.patch +++ /dev/null @@ -1,177 +0,0 @@ -From 77e9695b9d5c9ce761dedc193045d9cb64b8e245 Mon Sep 17 00:00:00 2001 -From: Arjan van de Ven <arjan@linux.intel.com> -Date: Sat, 13 Sep 2008 09:36:06 -0700 -Subject: [PATCH] Add a script to visualize the kernel boot process / time - -When optimizing the kernel boot time, it's very valuable to visualize -what is going on at which time. In addition, with the fastboot asynchronous -initcall level, it's very valuable to see which initcall gets run where -and when. - -This patch adds a script to turn a dmesg into a SVG graph (that can be -shown with tools such as InkScape, Gimp or Firefox) and a small change -to the initcall code to print the PID of the thread calling the initcall -(so that the script can work out the parallelism). - -Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> ---- - init/main.c | 1 - scripts/bootgraph.pl | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 139 insertions(+) - create mode 100644 scripts/bootgraph.pl - -Index: linux-2.6.27/init/main.c -=================================================================== ---- linux-2.6.27.orig/init/main.c 2008-10-14 17:02:46.000000000 +0200 -+++ linux-2.6.27/init/main.c 2008-10-14 17:05:23.000000000 +0200 -@@ -709,6 +709,7 @@ int do_one_initcall(initcall_t fn) - - if (initcall_debug) { - printk("calling %pF\n", fn); -+ printk(" @ %i\n", task_pid_nr(current)); - t0 = ktime_get(); - } - -Index: linux-2.6.27/scripts/bootgraph.pl -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.27/scripts/bootgraph.pl 2008-10-14 17:03:34.000000000 +0200 -@@ -0,0 +1,138 @@ -+#!/usr/bin/perl -+ -+# Copyright 2008, Intel Corporation -+# -+# This file is part of the Linux kernel -+# -+# This program file is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License as published by the -+# Free Software Foundation; version 2 of the License. -+# -+# This program is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with this program in a file named COPYING; if not, write to the -+# Free Software Foundation, Inc., -+# 51 Franklin Street, Fifth Floor, -+# Boston, MA 02110-1301 USA -+# -+# Authors: -+# Arjan van de Ven <arjan@linux.intel.com> -+ -+ -+# -+# This script turns a dmesg output into a SVG graphic that shows which -+# functions take how much time. You can view SVG graphics with various -+# programs, including Inkscape, The Gimp and Firefox. -+# -+# -+# For this script to work, the kernel needs to be compiled with the -+# CONFIG_PRINTK_TIME configuration option enabled, and with -+# "initcall_debug" passed on the kernel command line. -+# -+# usage: -+# dmesg | perl scripts/bootgraph.pl > output.svg -+# -+ -+my @rows; -+my %start, %end, %row; -+my $done = 0; -+my $rowcount = 0; -+my $maxtime = 0; -+my $count = 0; -+while (<>) { -+ my $line = $_; -+ if ($line =~ /([0-9\.]+)\] calling ([a-zA-Z\_]+)\+/) { -+ my $func = $2; -+ if ($done == 0) { -+ $start{$func} = $1; -+ } -+ $row{$func} = 1; -+ if ($line =~ /\@ ([0-9]+)/) { -+ my $pid = $1; -+ if (!defined($rows[$pid])) { -+ $rowcount = $rowcount + 1; -+ $rows[$pid] = $rowcount; -+ } -+ $row{$func} = $rows[$pid]; -+ } -+ $count = $count + 1; -+ } -+ -+ if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z\_]+)\+.*returned/) { -+ if ($done == 0) { -+ $end{$2} = $1; -+ $maxtime = $1; -+ } -+ } -+ if ($line =~ /Write protecting the/) { -+ $done = 1; -+ } -+} -+ -+if ($count == 0) { -+ print "No data found in the dmesg. Make sure CONFIG_PRINTK_TIME is enabled and\n"; -+ print "that initcall_debug is passed on the kernel command line.\n\n"; -+ print "Usage: \n"; -+ print " dmesg | perl scripts/bootgraph.pl > output.svg\n\n"; -+ exit; -+} -+ -+print "<?xml version=\"1.0\" standalone=\"no\"?> \n"; -+print "<svg width=\"1000\" height=\"100%\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n"; -+ -+my @styles; -+ -+$styles[0] = "fill:rgb(0,0,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[1] = "fill:rgb(0,255,0);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[2] = "fill:rgb(255,0,20);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[3] = "fill:rgb(255,255,20);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[4] = "fill:rgb(255,0,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[5] = "fill:rgb(0,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[6] = "fill:rgb(0,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[7] = "fill:rgb(0,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[8] = "fill:rgb(255,0,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; -+$styles[9] = "fill:rgb(255,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,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; -+my $threshold = 0.0500 / $maxtime; -+my $stylecounter = 0; -+while (($key,$value) = each %start) { -+ my $duration = $end{$key} - $start{$key}; -+ -+ if ($duration >= $threshold) { -+ my $s, $s2, $e, $y; -+ $s = $value * $mult; -+ $s2 = $s + 6; -+ $e = $end{$key} * $mult; -+ $w = $e - $s; -+ -+ $y = $row{$key} * 150; -+ $y2 = $y + 4; -+ -+ $style = $styles[$stylecounter]; -+ $stylecounter = $stylecounter + 1; -+ if ($stylecounter > 11) { -+ $stylecounter = 0; -+ }; -+ -+ print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"145\" style=\"$style\"/>\n"; -+ print "<text transform=\"translate($s2,$y2) rotate(90)\">$key</text>\n"; -+ } -+} -+ -+ -+# print the time line on top -+my $time = 0.0; -+while ($time < $maxtime) { -+ my $s2 = $time * $mult; -+ print "<text transform=\"translate($s2,89) rotate(90)\">$time</text>\n"; -+ $time = $time + 0.1; -+} -+ -+print "</svg>\n"; |