From 3bd3e23304a41c2cabab4dd7994af2e2bfcc7dca Mon Sep 17 00:00:00 2001 From: Luis Martins Date: Tue, 24 Mar 2020 11:33:11 +0000 Subject: buildstats*.sh: add accumulate parameter to scripts Add option to accumulate stats values per recipe, allowing to sum related values such as memory (main process + childs). This is specially useful when debugging the performance of the overall bitbake build system. (From OE-Core rev: e6f1aea6260343cb5194f7f8ab70213b705ab441) Signed-off-by: Luis Martins Signed-off-by: Richard Purdie --- scripts/contrib/bb-perf/buildstats-plot.sh | 9 +++++++-- scripts/contrib/bb-perf/buildstats.sh | 23 +++++++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh index 1d22e60d73..f26312f355 100755 --- a/scripts/contrib/bb-perf/buildstats-plot.sh +++ b/scripts/contrib/bb-perf/buildstats-plot.sh @@ -41,6 +41,7 @@ BS_DIR="tmp/buildstats" N=10 TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack" STATS="utime" +ACCUMULATE="" SUM="" OUTDATA_FILE="$PWD/buildstats-plot.out" @@ -59,6 +60,7 @@ Usage: $CMD [-b buildstats_dir] [-t do_task] (see buildstats.sh -h for all options) or any other defined (build)stat separated by colons, i.e. stime:utime (default: "$STATS") + -a Accumulate all stats values for found recipes -S Sum values for a particular stat for found recipes -o Output data file. (default: "$OUTDATA_FILE") @@ -67,7 +69,7 @@ EOM } # Parse and validate arguments -while getopts "b:n:t:s:o:Sh" OPT; do +while getopts "b:n:t:s:o:aSh" OPT; do case $OPT in b) BS_DIR="$OPTARG" @@ -81,6 +83,9 @@ while getopts "b:n:t:s:o:Sh" OPT; do s) STATS="$OPTARG" ;; + a) + ACCUMULATE="-a" + ;; S) SUM="y" ;; @@ -107,7 +112,7 @@ CD=$(dirname $0) # Parse buildstats recipes to produce a single table OUTBUILDSTATS="$PWD/buildstats.log" -$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -t "$TASKS" -H > $OUTBUILDSTATS +$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -t "$TASKS" $ACCUMULATE -H > $OUTBUILDSTATS # Get headers HEADERS=$(cat $OUTBUILDSTATS | sed -n -e '1s/ /-/g' -e '1s/:/ /gp') diff --git a/scripts/contrib/bb-perf/buildstats.sh b/scripts/contrib/bb-perf/buildstats.sh index e9ec2d476a..26bfaca86b 100755 --- a/scripts/contrib/bb-perf/buildstats.sh +++ b/scripts/contrib/bb-perf/buildstats.sh @@ -38,6 +38,7 @@ Child rusage ru_nivcsw" BS_DIR="tmp/buildstats" TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack" STATS="$TIME" +ACCUMULATE="" HEADER="" # No header by default function usage { @@ -56,12 +57,13 @@ Usage: $CMD [-b buildstats_dir] [-t do_task] IO=$IO RUSAGE=$RUSAGE CHILD_RUSAGE=$CHILD_RUSAGE + -a Accumulate all stats values for found recipes -h Display this help message EOM } # Parse and validate arguments -while getopts "b:t:s:Hh" OPT; do +while getopts "b:t:s:aHh" OPT; do case $OPT in b) BS_DIR="$OPTARG" @@ -72,6 +74,9 @@ while getopts "b:t:s:Hh" OPT; do s) STATS="$OPTARG" ;; + a) + ACCUMULATE="y" + ;; H) HEADER="y" ;; @@ -118,7 +123,13 @@ done stats="$(echo "$stats" | sed -e 's/^://1')" # Provide a header if required by the user -[ -n "$HEADER" ] && { echo "task:recipe:$stats"; } +if [ -n "$HEADER" ] ; then + if [ -n "$ACCUMULATE" ]; then + echo "task:recipe:accumulated(${stats//:/;})" + else + echo "task:recipe:$stats" + fi +fi for task in ${TASKS}; do task="do_${task}" @@ -137,6 +148,14 @@ for task in ${TASKS}; do times="${times} ${time}" fi done + if [ -n "$ACCUMULATE" ]; then + IFS=' '; valuesarray=(${times}); IFS=':' + times=0 + for value in "${valuesarray[@]}"; do + [ "$value" == "NA" ] && { echo "ERROR: stat is not present."; usage; exit 1; } + times=$(( $times + $value )) + done + fi echo "${task} ${recipe} ${times}" done done -- cgit v1.2.3-54-g00ecf