All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] improvements to buildstats scripts
@ 2020-03-24 11:33 luis.martins
  2020-03-24 11:33 ` [PATCH 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: luis.martins @ 2020-03-24 11:33 UTC (permalink / raw)
  To: openembedded-core

This patches add some new functionalities to the buildstats
scripts to allow easier debugging of the bitbake performance.
Some new features like accumulating the stats values allow
to compare the total amount of memory used by a single task
(main process + child processes) and other features allow
convenient analysis of task performance per recipe.

Luis Martins (5):
  buildstats-plot.sh: fix invoking buildstats.sh
  buildstats-plot.sh: filter by task
  buildstats*.sh: add accumulate parameter to scripts
  buildstats*.sh: add recipe parameter to scripts
  buildstats*.sh: fix spacing indentation in the files

 scripts/contrib/bb-perf/buildstats-plot.sh |  74 ++++++-----
 scripts/contrib/bb-perf/buildstats.sh      | 139 ++++++++++++---------
 2 files changed, 127 insertions(+), 86 deletions(-)

-- 
2.25.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/5] buildstats-plot.sh: fix invoking buildstats.sh
  2020-03-24 11:33 [PATCH 0/5] improvements to buildstats scripts luis.martins
@ 2020-03-24 11:33 ` Luis Martins
  2020-03-24 11:33 ` [PATCH 2/5] buildstats-plot.sh: filter by task Luis Martins
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 11:33 UTC (permalink / raw)
  To: openembedded-core

Fix the internal call to buildstats.sh by also providing
the buildstats folder location in the system, which might
differ from the default location.

Upstream-Status: Pending

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index 898834e5ac..089621c9f8 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -101,7 +101,7 @@ CD=$(dirname $0)
 
 # Parse buildstats recipes to produce a single table
 OUTBUILDSTATS="$PWD/buildstats.log"
-$CD/buildstats.sh -H -s "$STATS" -H > $OUTBUILDSTATS
+$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -H > $OUTBUILDSTATS
 
 # Get headers
 HEADERS=$(cat $OUTBUILDSTATS | sed -n -e '1s/ /-/g' -e '1s/:/ /gp')
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/5] buildstats-plot.sh: filter by task
  2020-03-24 11:33 [PATCH 0/5] improvements to buildstats scripts luis.martins
  2020-03-24 11:33 ` [PATCH 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
@ 2020-03-24 11:33 ` Luis Martins
  2020-03-24 11:33 ` [PATCH 3/5] buildstats*.sh: add accumulate parameter to scripts Luis Martins
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 11:33 UTC (permalink / raw)
  To: openembedded-core

Extend buildstats-plot.sh script to also accept the name
of the tasks as parameter.
This value will be passed directly to buildstats.sh is
already provides this option.

Upstream-Status: Pending

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index 089621c9f8..1d22e60d73 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -39,6 +39,7 @@ set -o errexit
 
 BS_DIR="tmp/buildstats"
 N=10
+TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack"
 STATS="utime"
 SUM=""
 OUTDATA_FILE="$PWD/buildstats-plot.out"
@@ -51,6 +52,8 @@ Usage: $CMD [-b buildstats_dir] [-t do_task]
                 (default: "$BS_DIR")
   -n N          Top N recipes to display. Ignored if -S is present
                 (default: "$N")
+  -t tasks      The tasks to be computed
+                (default: "$TASKS")
   -s stats      The stats to be matched. If more that one stat, units
                 should be the same because data is plot as histogram.
                 (see buildstats.sh -h for all options) or any other defined
@@ -64,7 +67,7 @@ EOM
 }
 
 # Parse and validate arguments
-while getopts "b:n:s:o:Sh" OPT; do
+while getopts "b:n:t:s:o:Sh" OPT; do
 	case $OPT in
 	b)
 		BS_DIR="$OPTARG"
@@ -72,6 +75,9 @@ while getopts "b:n:s:o:Sh" OPT; do
 	n)
 		N="$OPTARG"
 		;;
+    t)
+        TASKS="$OPTARG"
+        ;;
 	s)
 	        STATS="$OPTARG"
 	        ;;
@@ -101,7 +107,7 @@ CD=$(dirname $0)
 
 # Parse buildstats recipes to produce a single table
 OUTBUILDSTATS="$PWD/buildstats.log"
-$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -H > $OUTBUILDSTATS
+$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -t "$TASKS" -H > $OUTBUILDSTATS
 
 # Get headers
 HEADERS=$(cat $OUTBUILDSTATS | sed -n -e '1s/ /-/g' -e '1s/:/ /gp')
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/5] buildstats*.sh: add accumulate parameter to scripts
  2020-03-24 11:33 [PATCH 0/5] improvements to buildstats scripts luis.martins
  2020-03-24 11:33 ` [PATCH 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
  2020-03-24 11:33 ` [PATCH 2/5] buildstats-plot.sh: filter by task Luis Martins
@ 2020-03-24 11:33 ` Luis Martins
  2020-03-24 11:33 ` [PATCH 4/5] buildstats*.sh: add recipe " Luis Martins
  2020-03-24 11:33 ` [PATCH 5/5] buildstats*.sh: fix spacing indentation in the files Luis Martins
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 11:33 UTC (permalink / raw)
  To: openembedded-core

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.

Upstream-Status: Pending

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh |  9 +++++++--
 scripts/contrib/bb-perf/buildstats.sh      | 23 ++++++++++++++++++++--
 2 files changed, 28 insertions(+), 4 deletions(-)

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
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/5] buildstats*.sh: add recipe parameter to scripts
  2020-03-24 11:33 [PATCH 0/5] improvements to buildstats scripts luis.martins
                   ` (2 preceding siblings ...)
  2020-03-24 11:33 ` [PATCH 3/5] buildstats*.sh: add accumulate parameter to scripts Luis Martins
@ 2020-03-24 11:33 ` Luis Martins
  2020-03-24 11:33 ` [PATCH 5/5] buildstats*.sh: fix spacing indentation in the files Luis Martins
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 11:33 UTC (permalink / raw)
  To: openembedded-core

Add option to filter the stats results for a single recipe, allowing
to easilly visuality the task resource consumption per recipe.
This is specially useful when debugging the performance of
the overall bitbake build system.

Upstream-Status: Pending

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh | 9 +++++++--
 scripts/contrib/bb-perf/buildstats.sh      | 9 +++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index f26312f355..320c4910a1 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -39,6 +39,7 @@ set -o errexit
 
 BS_DIR="tmp/buildstats"
 N=10
+RECIPE=""
 TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack"
 STATS="utime"
 ACCUMULATE=""
@@ -53,6 +54,7 @@ Usage: $CMD [-b buildstats_dir] [-t do_task]
                 (default: "$BS_DIR")
   -n N          Top N recipes to display. Ignored if -S is present
                 (default: "$N")
+  -r recipe     The recipe mask to be searched
   -t tasks      The tasks to be computed
                 (default: "$TASKS")
   -s stats      The stats to be matched. If more that one stat, units
@@ -69,7 +71,7 @@ EOM
 }
 
 # Parse and validate arguments
-while getopts "b:n:t:s:o:aSh" OPT; do
+while getopts "b:n:r:t:s:o:aSh" OPT; do
 	case $OPT in
 	b)
 		BS_DIR="$OPTARG"
@@ -77,6 +79,9 @@ while getopts "b:n:t:s:o:aSh" OPT; do
 	n)
 		N="$OPTARG"
 		;;
+    r)
+        RECIPE="-r $OPTARG"
+        ;;
     t)
         TASKS="$OPTARG"
         ;;
@@ -112,7 +117,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" $ACCUMULATE -H > $OUTBUILDSTATS
+$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -t "$TASKS" $RECIPE $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 26bfaca86b..2f017efeb8 100755
--- a/scripts/contrib/bb-perf/buildstats.sh
+++ b/scripts/contrib/bb-perf/buildstats.sh
@@ -36,6 +36,7 @@ Child rusage ru_majflt:Child rusage ru_inblock:Child rusage ru_oublock:Child rus
 Child rusage ru_nivcsw"
 
 BS_DIR="tmp/buildstats"
+RECIPE=""
 TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack"
 STATS="$TIME"
 ACCUMULATE=""
@@ -47,6 +48,7 @@ cat <<EOM
 Usage: $CMD [-b buildstats_dir] [-t do_task]
   -b buildstats The path where the folder resides
                 (default: "$BS_DIR")
+  -r recipe     The recipe to be computed
   -t tasks      The tasks to be computed
                 (default: "$TASKS")
   -s stats      The stats to be matched. Options: TIME, IO, RUSAGE, CHILD_RUSAGE
@@ -63,11 +65,14 @@ EOM
 }
 
 # Parse and validate arguments
-while getopts "b:t:s:aHh" OPT; do
+while getopts "b:r:t:s:aHh" OPT; do
 	case $OPT in
 	b)
 		BS_DIR="$OPTARG"
 		;;
+	r)
+		RECIPE="$OPTARG"
+		;;
 	t)
 		TASKS="$OPTARG"
 		;;
@@ -133,7 +138,7 @@ fi
 
 for task in ${TASKS}; do
     task="do_${task}"
-    for file in $(find ${BS_DIR} -type f -name ${task} | awk 'BEGIN{ ORS=""; OFS=":" } { print $0,"" }'); do
+    for file in $(find ${BS_DIR} -type f -path *${RECIPE}*/${task} | awk 'BEGIN{ ORS=""; OFS=":" } { print $0,"" }'); do
         recipe="$(basename $(dirname $file))"
 	times=""
 	for stat in ${stats}; do
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 5/5] buildstats*.sh: fix spacing indentation in the files
  2020-03-24 11:33 [PATCH 0/5] improvements to buildstats scripts luis.martins
                   ` (3 preceding siblings ...)
  2020-03-24 11:33 ` [PATCH 4/5] buildstats*.sh: add recipe " Luis Martins
@ 2020-03-24 11:33 ` Luis Martins
  2020-03-24 14:44   ` [PATCH v2 0/5] improvements to buildstats scripts Luis Martins
  4 siblings, 1 reply; 12+ messages in thread
From: Luis Martins @ 2020-03-24 11:33 UTC (permalink / raw)
  To: openembedded-core

Fix indentation in buildstats.sh and buildstats-plot.sh
to convert every line to 4 spaces indentation.

Upstream-Status: Pending

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh |  56 ++++-----
 scripts/contrib/bb-perf/buildstats.sh      | 131 +++++++++++----------
 2 files changed, 94 insertions(+), 93 deletions(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index 320c4910a1..80fd30960c 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -72,40 +72,40 @@ EOM
 
 # Parse and validate arguments
 while getopts "b:n:r:t:s:o:aSh" OPT; do
-	case $OPT in
-	b)
-		BS_DIR="$OPTARG"
-		;;
-	n)
-		N="$OPTARG"
-		;;
+    case $OPT in
+    b)
+        BS_DIR="$OPTARG"
+        ;;
+    n)
+        N="$OPTARG"
+        ;;
     r)
         RECIPE="-r $OPTARG"
         ;;
     t)
         TASKS="$OPTARG"
         ;;
-	s)
-	        STATS="$OPTARG"
-	        ;;
-	a)
+    s)
+        STATS="$OPTARG"
+        ;;
+    a)
         ACCUMULATE="-a"
         ;;
-	S)
-	        SUM="y"
-	        ;;
-	o)
-	        OUTDATA_FILE="$OPTARG"
-	        ;;
-	h)
-		usage
-		exit 0
-		;;
-	*)
-		usage
-		exit 1
-		;;
-	esac
+    S)
+        SUM="y"
+        ;;
+    o)
+        OUTDATA_FILE="$OPTARG"
+        ;;
+    h)
+        usage
+        exit 0
+        ;;
+    *)
+        usage
+        exit 1
+        ;;
+    esac
 done
 
 # Get number of stats
@@ -141,8 +141,8 @@ else
     declare -a sumargs
     j=0
     for i in `seq $nstats`; do
-	sumargs[j]=sum; j=$(( $j + 1 ))
-	sumargs[j]=`expr 3 + $i - 1`;  j=$(( $j + 1 ))
+        sumargs[j]=sum; j=$(( $j + 1 ))
+        sumargs[j]=`expr 3 + $i - 1`;  j=$(( $j + 1 ))
     done
 
     # Do the processing with datamash
diff --git a/scripts/contrib/bb-perf/buildstats.sh b/scripts/contrib/bb-perf/buildstats.sh
index 2f017efeb8..e45cfc146d 100755
--- a/scripts/contrib/bb-perf/buildstats.sh
+++ b/scripts/contrib/bb-perf/buildstats.sh
@@ -66,62 +66,63 @@ EOM
 
 # Parse and validate arguments
 while getopts "b:r:t:s:aHh" OPT; do
-	case $OPT in
-	b)
-		BS_DIR="$OPTARG"
-		;;
-	r)
-		RECIPE="$OPTARG"
-		;;
-	t)
-		TASKS="$OPTARG"
-		;;
-	s)
-		STATS="$OPTARG"
-		;;
-	a)
+    case $OPT in
+    b)
+        BS_DIR="$OPTARG"
+        ;;
+    r)
+        RECIPE="$OPTARG"
+        ;;
+    t)
+        TASKS="$OPTARG"
+        ;;
+    s)
+        STATS="$OPTARG"
+        ;;
+    a)
         ACCUMULATE="y"
         ;;
-	H)
-	        HEADER="y"
-	        ;;
-	h)
-		usage
-		exit 0
-		;;
-	*)
-		usage
-		exit 1
-		;;
-	esac
+    H)
+        HEADER="y"
+        ;;
+    h)
+        usage
+        exit 0
+        ;;
+    *)
+        usage
+        exit 1
+        ;;
+    esac
 done
 
 # Ensure the buildstats folder exists
 if [ ! -d "$BS_DIR" ]; then
-	echo "ERROR: $BS_DIR does not exist"
-	usage
-	exit 1
+    echo "ERROR: $BS_DIR does not exist"
+    usage
+    exit 1
 fi
 
 stats=""
 IFS=":"
 for stat in ${STATS}; do
-	case $stat in
-	    TIME)
-		stats="${stats}:${TIME}"
-		;;
-	    IO)
-		stats="${stats}:${IO}"
-		;;
-	    RUSAGE)
-		stats="${stats}:${RUSAGE}"
-		;;
-	    CHILD_RUSAGE)
-		stats="${stats}:${CHILD_RUSAGE}"
-		;;
-	    *)
-		stats="${STATS}"
-	esac
+    case $stat in
+        TIME)
+            stats="${stats}:${TIME}"
+            ;;
+        IO)
+            stats="${stats}:${IO}"
+            ;;
+        RUSAGE)
+            stats="${stats}:${RUSAGE}"
+            ;;
+        CHILD_RUSAGE)
+            stats="${stats}:${CHILD_RUSAGE}"
+            ;;
+        *)
+            stats="${STATS}"
+            ;;
+    esac
 done
 
 # remove possible colon at the beginning
@@ -140,27 +141,27 @@ for task in ${TASKS}; do
     task="do_${task}"
     for file in $(find ${BS_DIR} -type f -path *${RECIPE}*/${task} | awk 'BEGIN{ ORS=""; OFS=":" } { print $0,"" }'); do
         recipe="$(basename $(dirname $file))"
-	times=""
-	for stat in ${stats}; do
-	    [ -z "$stat" ] && { echo "empty stats"; }
-	    time=$(sed -n -e "s/^\($stat\): \\(.*\\)/\\2/p" $file)
-	    # in case the stat is not present, set the value as NA
-	    [ -z "$time" ] && { time="NA"; }
-	    # Append it to times
-	    if [ -z "$times" ]; then
-		times="${time}"
-	    else
-		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 ))
+        times=""
+        for stat in ${stats}; do
+            [ -z "$stat" ] && { echo "empty stats"; }
+            time=$(sed -n -e "s/^\($stat\): \\(.*\\)/\\2/p" $file)
+            # in case the stat is not present, set the value as NA
+            [ -z "$time" ] && { time="NA"; }
+            # Append it to times
+            if [ -z "$times" ]; then
+                times="${time}"
+            else
+                times="${times} ${time}"
+            fi
         done
-    fi
+        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
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 0/5] improvements to buildstats scripts
  2020-03-24 11:33 ` [PATCH 5/5] buildstats*.sh: fix spacing indentation in the files Luis Martins
@ 2020-03-24 14:44   ` Luis Martins
  2020-03-24 14:44     ` [PATCH v2 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
                       ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 14:44 UTC (permalink / raw)
  To: openembedded-core

This patches add some new functionalities to the buildstats
scripts to allow easier debugging of the bitbake performance.
Some new features like accumulating the stats values allow
to compare the total amount of memory used by a single task
(main process + child processes) and other features allow
convenient analysis of task performance per recipe.

changes from v1
* removed unecessary "Upstream-Status: Pending" line

Luis Martins (5):
  buildstats-plot.sh: fix invoking buildstats.sh
  buildstats-plot.sh: filter by task
  buildstats*.sh: add accumulate parameter to scripts
  buildstats*.sh: add recipe parameter to scripts
  buildstats*.sh: fix spacing indentation in the files

 scripts/contrib/bb-perf/buildstats-plot.sh |  74 ++++++-----
 scripts/contrib/bb-perf/buildstats.sh      | 139 ++++++++++++---------
 2 files changed, 127 insertions(+), 86 deletions(-)

-- 
2.25.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/5] buildstats-plot.sh: fix invoking buildstats.sh
  2020-03-24 14:44   ` [PATCH v2 0/5] improvements to buildstats scripts Luis Martins
@ 2020-03-24 14:44     ` Luis Martins
  2020-03-24 14:44     ` [PATCH v2 2/5] buildstats-plot.sh: filter by task Luis Martins
                       ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 14:44 UTC (permalink / raw)
  To: openembedded-core

Fix the internal call to buildstats.sh by also providing
the buildstats folder location in the system, which might
differ from the default location.

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index 898834e5ac..089621c9f8 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -101,7 +101,7 @@ CD=$(dirname $0)
 
 # Parse buildstats recipes to produce a single table
 OUTBUILDSTATS="$PWD/buildstats.log"
-$CD/buildstats.sh -H -s "$STATS" -H > $OUTBUILDSTATS
+$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -H > $OUTBUILDSTATS
 
 # Get headers
 HEADERS=$(cat $OUTBUILDSTATS | sed -n -e '1s/ /-/g' -e '1s/:/ /gp')
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 2/5] buildstats-plot.sh: filter by task
  2020-03-24 14:44   ` [PATCH v2 0/5] improvements to buildstats scripts Luis Martins
  2020-03-24 14:44     ` [PATCH v2 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
@ 2020-03-24 14:44     ` Luis Martins
  2020-03-24 14:44     ` [PATCH v2 3/5] buildstats*.sh: add accumulate parameter to scripts Luis Martins
                       ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 14:44 UTC (permalink / raw)
  To: openembedded-core

Extend buildstats-plot.sh script to also accept the name
of the tasks as parameter.
This value will be passed directly to buildstats.sh is
already provides this option.

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index 089621c9f8..1d22e60d73 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -39,6 +39,7 @@ set -o errexit
 
 BS_DIR="tmp/buildstats"
 N=10
+TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack"
 STATS="utime"
 SUM=""
 OUTDATA_FILE="$PWD/buildstats-plot.out"
@@ -51,6 +52,8 @@ Usage: $CMD [-b buildstats_dir] [-t do_task]
                 (default: "$BS_DIR")
   -n N          Top N recipes to display. Ignored if -S is present
                 (default: "$N")
+  -t tasks      The tasks to be computed
+                (default: "$TASKS")
   -s stats      The stats to be matched. If more that one stat, units
                 should be the same because data is plot as histogram.
                 (see buildstats.sh -h for all options) or any other defined
@@ -64,7 +67,7 @@ EOM
 }
 
 # Parse and validate arguments
-while getopts "b:n:s:o:Sh" OPT; do
+while getopts "b:n:t:s:o:Sh" OPT; do
 	case $OPT in
 	b)
 		BS_DIR="$OPTARG"
@@ -72,6 +75,9 @@ while getopts "b:n:s:o:Sh" OPT; do
 	n)
 		N="$OPTARG"
 		;;
+    t)
+        TASKS="$OPTARG"
+        ;;
 	s)
 	        STATS="$OPTARG"
 	        ;;
@@ -101,7 +107,7 @@ CD=$(dirname $0)
 
 # Parse buildstats recipes to produce a single table
 OUTBUILDSTATS="$PWD/buildstats.log"
-$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -H > $OUTBUILDSTATS
+$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -t "$TASKS" -H > $OUTBUILDSTATS
 
 # Get headers
 HEADERS=$(cat $OUTBUILDSTATS | sed -n -e '1s/ /-/g' -e '1s/:/ /gp')
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 3/5] buildstats*.sh: add accumulate parameter to scripts
  2020-03-24 14:44   ` [PATCH v2 0/5] improvements to buildstats scripts Luis Martins
  2020-03-24 14:44     ` [PATCH v2 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
  2020-03-24 14:44     ` [PATCH v2 2/5] buildstats-plot.sh: filter by task Luis Martins
@ 2020-03-24 14:44     ` Luis Martins
  2020-03-24 14:44     ` [PATCH v2 4/5] buildstats*.sh: add recipe " Luis Martins
  2020-03-24 14:44     ` [PATCH v2 5/5] buildstats*.sh: fix spacing indentation in the files Luis Martins
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 14:44 UTC (permalink / raw)
  To: openembedded-core

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.

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh |  9 +++++++--
 scripts/contrib/bb-perf/buildstats.sh      | 23 ++++++++++++++++++++--
 2 files changed, 28 insertions(+), 4 deletions(-)

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
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 4/5] buildstats*.sh: add recipe parameter to scripts
  2020-03-24 14:44   ` [PATCH v2 0/5] improvements to buildstats scripts Luis Martins
                       ` (2 preceding siblings ...)
  2020-03-24 14:44     ` [PATCH v2 3/5] buildstats*.sh: add accumulate parameter to scripts Luis Martins
@ 2020-03-24 14:44     ` Luis Martins
  2020-03-24 14:44     ` [PATCH v2 5/5] buildstats*.sh: fix spacing indentation in the files Luis Martins
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 14:44 UTC (permalink / raw)
  To: openembedded-core

Add option to filter the stats results for a single recipe, allowing
to easilly visuality the task resource consumption per recipe.
This is specially useful when debugging the performance of
the overall bitbake build system.

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh | 9 +++++++--
 scripts/contrib/bb-perf/buildstats.sh      | 9 +++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index f26312f355..320c4910a1 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -39,6 +39,7 @@ set -o errexit
 
 BS_DIR="tmp/buildstats"
 N=10
+RECIPE=""
 TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack"
 STATS="utime"
 ACCUMULATE=""
@@ -53,6 +54,7 @@ Usage: $CMD [-b buildstats_dir] [-t do_task]
                 (default: "$BS_DIR")
   -n N          Top N recipes to display. Ignored if -S is present
                 (default: "$N")
+  -r recipe     The recipe mask to be searched
   -t tasks      The tasks to be computed
                 (default: "$TASKS")
   -s stats      The stats to be matched. If more that one stat, units
@@ -69,7 +71,7 @@ EOM
 }
 
 # Parse and validate arguments
-while getopts "b:n:t:s:o:aSh" OPT; do
+while getopts "b:n:r:t:s:o:aSh" OPT; do
 	case $OPT in
 	b)
 		BS_DIR="$OPTARG"
@@ -77,6 +79,9 @@ while getopts "b:n:t:s:o:aSh" OPT; do
 	n)
 		N="$OPTARG"
 		;;
+    r)
+        RECIPE="-r $OPTARG"
+        ;;
     t)
         TASKS="$OPTARG"
         ;;
@@ -112,7 +117,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" $ACCUMULATE -H > $OUTBUILDSTATS
+$CD/buildstats.sh -b "$BS_DIR" -s "$STATS" -t "$TASKS" $RECIPE $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 26bfaca86b..2f017efeb8 100755
--- a/scripts/contrib/bb-perf/buildstats.sh
+++ b/scripts/contrib/bb-perf/buildstats.sh
@@ -36,6 +36,7 @@ Child rusage ru_majflt:Child rusage ru_inblock:Child rusage ru_oublock:Child rus
 Child rusage ru_nivcsw"
 
 BS_DIR="tmp/buildstats"
+RECIPE=""
 TASKS="compile:configure:fetch:install:patch:populate_lic:populate_sysroot:unpack"
 STATS="$TIME"
 ACCUMULATE=""
@@ -47,6 +48,7 @@ cat <<EOM
 Usage: $CMD [-b buildstats_dir] [-t do_task]
   -b buildstats The path where the folder resides
                 (default: "$BS_DIR")
+  -r recipe     The recipe to be computed
   -t tasks      The tasks to be computed
                 (default: "$TASKS")
   -s stats      The stats to be matched. Options: TIME, IO, RUSAGE, CHILD_RUSAGE
@@ -63,11 +65,14 @@ EOM
 }
 
 # Parse and validate arguments
-while getopts "b:t:s:aHh" OPT; do
+while getopts "b:r:t:s:aHh" OPT; do
 	case $OPT in
 	b)
 		BS_DIR="$OPTARG"
 		;;
+	r)
+		RECIPE="$OPTARG"
+		;;
 	t)
 		TASKS="$OPTARG"
 		;;
@@ -133,7 +138,7 @@ fi
 
 for task in ${TASKS}; do
     task="do_${task}"
-    for file in $(find ${BS_DIR} -type f -name ${task} | awk 'BEGIN{ ORS=""; OFS=":" } { print $0,"" }'); do
+    for file in $(find ${BS_DIR} -type f -path *${RECIPE}*/${task} | awk 'BEGIN{ ORS=""; OFS=":" } { print $0,"" }'); do
         recipe="$(basename $(dirname $file))"
 	times=""
 	for stat in ${stats}; do
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 5/5] buildstats*.sh: fix spacing indentation in the files
  2020-03-24 14:44   ` [PATCH v2 0/5] improvements to buildstats scripts Luis Martins
                       ` (3 preceding siblings ...)
  2020-03-24 14:44     ` [PATCH v2 4/5] buildstats*.sh: add recipe " Luis Martins
@ 2020-03-24 14:44     ` Luis Martins
  4 siblings, 0 replies; 12+ messages in thread
From: Luis Martins @ 2020-03-24 14:44 UTC (permalink / raw)
  To: openembedded-core

Fix indentation in buildstats.sh and buildstats-plot.sh
to convert every line to 4 spaces indentation.

Signed-off-by: Luis Martins <luis.martins@criticaltechworks.com>
---
 scripts/contrib/bb-perf/buildstats-plot.sh |  56 ++++-----
 scripts/contrib/bb-perf/buildstats.sh      | 131 +++++++++++----------
 2 files changed, 94 insertions(+), 93 deletions(-)

diff --git a/scripts/contrib/bb-perf/buildstats-plot.sh b/scripts/contrib/bb-perf/buildstats-plot.sh
index 320c4910a1..80fd30960c 100755
--- a/scripts/contrib/bb-perf/buildstats-plot.sh
+++ b/scripts/contrib/bb-perf/buildstats-plot.sh
@@ -72,40 +72,40 @@ EOM
 
 # Parse and validate arguments
 while getopts "b:n:r:t:s:o:aSh" OPT; do
-	case $OPT in
-	b)
-		BS_DIR="$OPTARG"
-		;;
-	n)
-		N="$OPTARG"
-		;;
+    case $OPT in
+    b)
+        BS_DIR="$OPTARG"
+        ;;
+    n)
+        N="$OPTARG"
+        ;;
     r)
         RECIPE="-r $OPTARG"
         ;;
     t)
         TASKS="$OPTARG"
         ;;
-	s)
-	        STATS="$OPTARG"
-	        ;;
-	a)
+    s)
+        STATS="$OPTARG"
+        ;;
+    a)
         ACCUMULATE="-a"
         ;;
-	S)
-	        SUM="y"
-	        ;;
-	o)
-	        OUTDATA_FILE="$OPTARG"
-	        ;;
-	h)
-		usage
-		exit 0
-		;;
-	*)
-		usage
-		exit 1
-		;;
-	esac
+    S)
+        SUM="y"
+        ;;
+    o)
+        OUTDATA_FILE="$OPTARG"
+        ;;
+    h)
+        usage
+        exit 0
+        ;;
+    *)
+        usage
+        exit 1
+        ;;
+    esac
 done
 
 # Get number of stats
@@ -141,8 +141,8 @@ else
     declare -a sumargs
     j=0
     for i in `seq $nstats`; do
-	sumargs[j]=sum; j=$(( $j + 1 ))
-	sumargs[j]=`expr 3 + $i - 1`;  j=$(( $j + 1 ))
+        sumargs[j]=sum; j=$(( $j + 1 ))
+        sumargs[j]=`expr 3 + $i - 1`;  j=$(( $j + 1 ))
     done
 
     # Do the processing with datamash
diff --git a/scripts/contrib/bb-perf/buildstats.sh b/scripts/contrib/bb-perf/buildstats.sh
index 2f017efeb8..e45cfc146d 100755
--- a/scripts/contrib/bb-perf/buildstats.sh
+++ b/scripts/contrib/bb-perf/buildstats.sh
@@ -66,62 +66,63 @@ EOM
 
 # Parse and validate arguments
 while getopts "b:r:t:s:aHh" OPT; do
-	case $OPT in
-	b)
-		BS_DIR="$OPTARG"
-		;;
-	r)
-		RECIPE="$OPTARG"
-		;;
-	t)
-		TASKS="$OPTARG"
-		;;
-	s)
-		STATS="$OPTARG"
-		;;
-	a)
+    case $OPT in
+    b)
+        BS_DIR="$OPTARG"
+        ;;
+    r)
+        RECIPE="$OPTARG"
+        ;;
+    t)
+        TASKS="$OPTARG"
+        ;;
+    s)
+        STATS="$OPTARG"
+        ;;
+    a)
         ACCUMULATE="y"
         ;;
-	H)
-	        HEADER="y"
-	        ;;
-	h)
-		usage
-		exit 0
-		;;
-	*)
-		usage
-		exit 1
-		;;
-	esac
+    H)
+        HEADER="y"
+        ;;
+    h)
+        usage
+        exit 0
+        ;;
+    *)
+        usage
+        exit 1
+        ;;
+    esac
 done
 
 # Ensure the buildstats folder exists
 if [ ! -d "$BS_DIR" ]; then
-	echo "ERROR: $BS_DIR does not exist"
-	usage
-	exit 1
+    echo "ERROR: $BS_DIR does not exist"
+    usage
+    exit 1
 fi
 
 stats=""
 IFS=":"
 for stat in ${STATS}; do
-	case $stat in
-	    TIME)
-		stats="${stats}:${TIME}"
-		;;
-	    IO)
-		stats="${stats}:${IO}"
-		;;
-	    RUSAGE)
-		stats="${stats}:${RUSAGE}"
-		;;
-	    CHILD_RUSAGE)
-		stats="${stats}:${CHILD_RUSAGE}"
-		;;
-	    *)
-		stats="${STATS}"
-	esac
+    case $stat in
+        TIME)
+            stats="${stats}:${TIME}"
+            ;;
+        IO)
+            stats="${stats}:${IO}"
+            ;;
+        RUSAGE)
+            stats="${stats}:${RUSAGE}"
+            ;;
+        CHILD_RUSAGE)
+            stats="${stats}:${CHILD_RUSAGE}"
+            ;;
+        *)
+            stats="${STATS}"
+            ;;
+    esac
 done
 
 # remove possible colon at the beginning
@@ -140,27 +141,27 @@ for task in ${TASKS}; do
     task="do_${task}"
     for file in $(find ${BS_DIR} -type f -path *${RECIPE}*/${task} | awk 'BEGIN{ ORS=""; OFS=":" } { print $0,"" }'); do
         recipe="$(basename $(dirname $file))"
-	times=""
-	for stat in ${stats}; do
-	    [ -z "$stat" ] && { echo "empty stats"; }
-	    time=$(sed -n -e "s/^\($stat\): \\(.*\\)/\\2/p" $file)
-	    # in case the stat is not present, set the value as NA
-	    [ -z "$time" ] && { time="NA"; }
-	    # Append it to times
-	    if [ -z "$times" ]; then
-		times="${time}"
-	    else
-		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 ))
+        times=""
+        for stat in ${stats}; do
+            [ -z "$stat" ] && { echo "empty stats"; }
+            time=$(sed -n -e "s/^\($stat\): \\(.*\\)/\\2/p" $file)
+            # in case the stat is not present, set the value as NA
+            [ -z "$time" ] && { time="NA"; }
+            # Append it to times
+            if [ -z "$times" ]; then
+                times="${time}"
+            else
+                times="${times} ${time}"
+            fi
         done
-    fi
+        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
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-03-24 14:44 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-24 11:33 [PATCH 0/5] improvements to buildstats scripts luis.martins
2020-03-24 11:33 ` [PATCH 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
2020-03-24 11:33 ` [PATCH 2/5] buildstats-plot.sh: filter by task Luis Martins
2020-03-24 11:33 ` [PATCH 3/5] buildstats*.sh: add accumulate parameter to scripts Luis Martins
2020-03-24 11:33 ` [PATCH 4/5] buildstats*.sh: add recipe " Luis Martins
2020-03-24 11:33 ` [PATCH 5/5] buildstats*.sh: fix spacing indentation in the files Luis Martins
2020-03-24 14:44   ` [PATCH v2 0/5] improvements to buildstats scripts Luis Martins
2020-03-24 14:44     ` [PATCH v2 1/5] buildstats-plot.sh: fix invoking buildstats.sh Luis Martins
2020-03-24 14:44     ` [PATCH v2 2/5] buildstats-plot.sh: filter by task Luis Martins
2020-03-24 14:44     ` [PATCH v2 3/5] buildstats*.sh: add accumulate parameter to scripts Luis Martins
2020-03-24 14:44     ` [PATCH v2 4/5] buildstats*.sh: add recipe " Luis Martins
2020-03-24 14:44     ` [PATCH v2 5/5] buildstats*.sh: fix spacing indentation in the files Luis Martins

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.