TipsAndTricks/InvestigatingBuildTime: Difference between revisions
Joshua Lock (talk | contribs) (Placeholder for a Tips&Tricks on buildstats & pybootchartgui) |
No edit summary |
||
Line 1: | Line 1: | ||
== Investigating Build Time == | == Investigating Build Time == | ||
Placeholder. Demonstrate use of buildstats and pybootchartgui | (Placeholder. Demonstrate use of buildstats and pybootchartgui) | ||
The <tt>buildstats</tt> data produce by the class with the same name if included in <tt>USER_CLASSES</tt> variable | |||
provides '''process statistics''' for every task. This data can offer insight of the time spent by the builder (<tt>bitbake</tt>) when | |||
constructing a particular target at process level. This article focus more on profiling than optimization, the former being | |||
the base for the latter. | |||
=== Setup === | |||
$ cd poky | |||
$ git checkout -b morty origin/morty | |||
$ . oe-init-build-env | |||
$ bitbake world | |||
=== Build Machine === | |||
Build time depends on the build machine HW and for this particular article we use a Linux box with the following characteristics: | |||
=== Buildstats === | |||
There are two set of process' stat data: time and IO stats. For the moment, the time stats to be used are the following: | |||
* /proc/[pid]/stat: utime, stime | |||
* /proc/[pid]/stat: cutime, cstime | |||
* python resource module: rusage ru_utime, rusage ru_stime | |||
* python resource module: Child rusage ru_utime, Child rusage ru_stime | |||
and the following IO stats: | |||
* /proc/[pid]/io: IO rchar, IO wchar | |||
* /proc/[pid]/io: IO read_bytes, IO write_bytes | |||
With this separation of buildstats, proceed running the following script (once the <code>bitbake world</code> command has finished) | |||
to plot the top N stat consumers | |||
$ ../scripts/contrib/bb-perf/buildstats-plot.sh -s <BUILDSTATS> -N $N | gnuplot -p | |||
In case we want a more general picture, getting data per task type instead of recipe's task, the script needs <code>-S</code> (for Sum) | |||
argument | |||
$ ../scripts/contrib/bb-perf/buildstats-plot.sh -s <BUILDSTATS> -S | gnuplot -p | |||
=== Results === | |||
$ IMAGE='set terminal png fontscale 1 size 1280,720; set output "IO-write_bytes:IO-read_bytes.png"' | |||
==== utime and stime ==== | |||
Time spent by a certain process can be obtain looking at the <tt>stime<</tt> and <tt>time</tt> corresponding to the amount of time the process | |||
has been scheduled in kernel and user mode. | |||
$ IMAGE='set terminal png fontscale 1 size 1280,720; set output "IO-write_bytes:IO-read_bytes.png"' | |||
$ ../scripts/contrib/bb-perf/buildstats-plot.sh -s 'stime:utime' -N 20 > input.gpl; gnuplot -e "\'$IMAGE\'" input.gpl | |||
$ ../scripts/contrib/bb-perf/buildstats-plot.sh -s 'stime:utime' -S | gnuplot -p |
Revision as of 22:14, 14 November 2016
Investigating Build Time
(Placeholder. Demonstrate use of buildstats and pybootchartgui)
The buildstats data produce by the class with the same name if included in USER_CLASSES variable provides process statistics for every task. This data can offer insight of the time spent by the builder (bitbake) when constructing a particular target at process level. This article focus more on profiling than optimization, the former being the base for the latter.
Setup
$ cd poky $ git checkout -b morty origin/morty $ . oe-init-build-env $ bitbake world
Build Machine
Build time depends on the build machine HW and for this particular article we use a Linux box with the following characteristics:
Buildstats
There are two set of process' stat data: time and IO stats. For the moment, the time stats to be used are the following:
- /proc/[pid]/stat: utime, stime
- /proc/[pid]/stat: cutime, cstime
- python resource module: rusage ru_utime, rusage ru_stime
- python resource module: Child rusage ru_utime, Child rusage ru_stime
and the following IO stats:
- /proc/[pid]/io: IO rchar, IO wchar
- /proc/[pid]/io: IO read_bytes, IO write_bytes
With this separation of buildstats, proceed running the following script (once the bitbake world
command has finished)
to plot the top N stat consumers
$ ../scripts/contrib/bb-perf/buildstats-plot.sh -s <BUILDSTATS> -N $N | gnuplot -p
In case we want a more general picture, getting data per task type instead of recipe's task, the script needs -S
(for Sum)
argument
$ ../scripts/contrib/bb-perf/buildstats-plot.sh -s <BUILDSTATS> -S | gnuplot -p
Results
$ IMAGE='set terminal png fontscale 1 size 1280,720; set output "IO-write_bytes:IO-read_bytes.png"'
utime and stime
Time spent by a certain process can be obtain looking at the stime< and time corresponding to the amount of time the process has been scheduled in kernel and user mode.
$ IMAGE='set terminal png fontscale 1 size 1280,720; set output "IO-write_bytes:IO-read_bytes.png"' $ ../scripts/contrib/bb-perf/buildstats-plot.sh -s 'stime:utime' -N 20 > input.gpl; gnuplot -e "\'$IMAGE\'" input.gpl $ ../scripts/contrib/bb-perf/buildstats-plot.sh -s 'stime:utime' -S | gnuplot -p