* [PATCH] devtools: parallelize ABI check @ 2023-01-07 13:39 Thomas Monjalon 2023-01-09 9:34 ` [PATCH v2] " Thomas Monjalon ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Thomas Monjalon @ 2023-01-07 13:39 UTC (permalink / raw) Cc: dev, David Marchand Generation and comparison of ABI dumps are done on multiple cores thanks to xargs -P0. It can accelerate this long step by 5 in my tests. xargs reports a global error if one of the process has an error. Running a shell function with xargs requires to export it with -f. Signed-off-by: Thomas Monjalon <thomas@monjalon.net> --- devtools/check-abi.sh | 33 ++++++++++++++++++++------------- devtools/gen-abi.sh | 5 +++-- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh index c583eae2fd..e2fa49217d 100755 --- a/devtools/check-abi.sh +++ b/devtools/check-abi.sh @@ -34,19 +34,10 @@ else ABIDIFF_OPTIONS="$ABIDIFF_OPTIONS --headers-dir2 $incdir2" fi -error= -for dump in $(find $refdir -name "*.dump"); do - name=$(basename $dump) - dump2=$(find $newdir -name $name) - if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then - echo "Error: cannot find $name in $newdir" >&2 - error=1 - continue - fi - abidiff $ABIDIFF_OPTIONS $dump $dump2 || { +run_diff() { # <dump1> <dump2> + abidiff $ABIDIFF_OPTIONS $1 $2 || { abiret=$? - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 - error=1 + echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $1 $2'" >&2 echo if [ $(($abiret & 3)) -ne 0 ]; then echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 @@ -58,7 +49,23 @@ for dump in $(find $refdir -name "*.dump"); do echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 fi echo + return $abiret } -done +} +export -f run_diff + +error= +for dump in $(find $refdir -name "*.dump"); do + name=$(basename $dump) + dump2=$(find $newdir -name $name) + if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then + echo "Error: cannot find $name in $newdir" >&2 + error=1 + continue + fi + echo $dump $dump2 +done | +xargs -n2 -P0 sh -c 'run_diff $0 $1' || +error=1 [ -z "$error" ] || [ -n "$warnonly" ] diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh index f15a3b9aaf..61f7510ea1 100755 --- a/devtools/gen-abi.sh +++ b/devtools/gen-abi.sh @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do fi libname=$(basename $f) - abidw --out-file $dumpdir/${libname%.so*}.dump $f -done + echo $dumpdir/${libname%.so*}.dump $f +done | +xargs -n2 -P0 abidw --out-file -- 2.39.0 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2] devtools: parallelize ABI check 2023-01-07 13:39 [PATCH] devtools: parallelize ABI check Thomas Monjalon @ 2023-01-09 9:34 ` Thomas Monjalon 2023-01-10 11:08 ` Ferruh Yigit 2023-01-11 13:16 ` [PATCH v3] " Thomas Monjalon 2023-01-11 19:53 ` [PATCH v4] " Thomas Monjalon 2 siblings, 1 reply; 13+ messages in thread From: Thomas Monjalon @ 2023-01-09 9:34 UTC (permalink / raw) To: David Marchand; +Cc: dev Generation and comparison of ABI dumps are done on multiple cores thanks to xargs -P0. It can accelerate this long step by 5 in my tests. xargs reports a global error if one of the process has an error. Running a shell function with xargs requires to export it with -f, and that is a specific capability of bash. Signed-off-by: Thomas Monjalon <thomas@monjalon.net> --- v2: - find dump2 inside the function - force bash because of export -f --- devtools/check-abi.sh | 20 +++++++++++++------- devtools/gen-abi.sh | 5 +++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh index c583eae2fd..4409f65ccd 100755 --- a/devtools/check-abi.sh +++ b/devtools/check-abi.sh @@ -1,4 +1,4 @@ -#!/bin/sh -e +#!/bin/bash -e # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2019 Red Hat, Inc. @@ -34,19 +34,18 @@ else ABIDIFF_OPTIONS="$ABIDIFF_OPTIONS --headers-dir2 $incdir2" fi -error= -for dump in $(find $refdir -name "*.dump"); do +run_diff() { # <dump1> <dir2> + dump=$1 + newdir=$2 name=$(basename $dump) dump2=$(find $newdir -name $name) if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then echo "Error: cannot find $name in $newdir" >&2 - error=1 - continue + return 1 fi abidiff $ABIDIFF_OPTIONS $dump $dump2 || { abiret=$? echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 - error=1 echo if [ $(($abiret & 3)) -ne 0 ]; then echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 @@ -58,7 +57,14 @@ for dump in $(find $refdir -name "*.dump"); do echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 fi echo + return 1 } -done +} +export -f run_diff + +error= +find $refdir -name "*.dump" | +xargs -n1 -P0 sh -c 'run_diff $0 '$newdir || +error=1 [ -z "$error" ] || [ -n "$warnonly" ] diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh index f15a3b9aaf..61f7510ea1 100755 --- a/devtools/gen-abi.sh +++ b/devtools/gen-abi.sh @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do fi libname=$(basename $f) - abidw --out-file $dumpdir/${libname%.so*}.dump $f -done + echo $dumpdir/${libname%.so*}.dump $f +done | +xargs -n2 -P0 abidw --out-file -- 2.39.0 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] devtools: parallelize ABI check 2023-01-09 9:34 ` [PATCH v2] " Thomas Monjalon @ 2023-01-10 11:08 ` Ferruh Yigit 0 siblings, 0 replies; 13+ messages in thread From: Ferruh Yigit @ 2023-01-10 11:08 UTC (permalink / raw) To: Thomas Monjalon, David Marchand; +Cc: dev On 1/9/2023 9:34 AM, Thomas Monjalon wrote: > Generation and comparison of ABI dumps are done on multiple cores > thanks to xargs -P0. > It can accelerate this long step by 5 in my tests. > > xargs reports a global error if one of the process has an error. > > Running a shell function with xargs requires to export it with -f, > and that is a specific capability of bash. > > Signed-off-by: Thomas Monjalon <thomas@monjalon.net> > --- > v2: > - find dump2 inside the function > - force bash because of export -f It reduces script runtime ~2mins in my test. Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v3] devtools: parallelize ABI check 2023-01-07 13:39 [PATCH] devtools: parallelize ABI check Thomas Monjalon 2023-01-09 9:34 ` [PATCH v2] " Thomas Monjalon @ 2023-01-11 13:16 ` Thomas Monjalon 2023-01-11 14:10 ` Bruce Richardson 2023-01-11 14:11 ` David Marchand 2023-01-11 19:53 ` [PATCH v4] " Thomas Monjalon 2 siblings, 2 replies; 13+ messages in thread From: Thomas Monjalon @ 2023-01-11 13:16 UTC (permalink / raw) To: David Marchand; +Cc: dev, Ferruh Yigit Generation and comparison of ABI dumps are done on multiple cores thanks to xargs -P0. It can accelerate this long step by 5 in my tests. xargs reports a global error if one of the process has an error. Running a shell function with xargs requires to export it with -f, and that is a specific capability of bash. Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> --- v2: - find dump2 inside the function - force bash because of export -f v3: - revert to POSIX sh - use POSIX eval instead of export -f (issues on Ubuntu) --- devtools/check-abi.sh | 21 +++++++++++++-------- devtools/gen-abi.sh | 5 +++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh index c583eae2fd..d58c867c60 100755 --- a/devtools/check-abi.sh +++ b/devtools/check-abi.sh @@ -34,19 +34,18 @@ else ABIDIFF_OPTIONS="$ABIDIFF_OPTIONS --headers-dir2 $incdir2" fi -error= -for dump in $(find $refdir -name "*.dump"); do +export diff_func='run_diff() { + dump=$1 + newdir=$2 name=$(basename $dump) dump2=$(find $newdir -name $name) if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then echo "Error: cannot find $name in $newdir" >&2 - error=1 - continue - fi + return 1 + fi; abidiff $ABIDIFF_OPTIONS $dump $dump2 || { abiret=$? - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 - error=1 + echo "Error: ABI issue reported for abidiff $ABIDIFF_OPTIONS $dump $dump2" >&2 echo if [ $(($abiret & 3)) -ne 0 ]; then echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 @@ -58,7 +57,13 @@ for dump in $(find $refdir -name "*.dump"); do echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 fi echo + return 1 } -done +}' + +error= +find $refdir -name "*.dump" | +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0 '$newdir || +error=1 [ -z "$error" ] || [ -n "$warnonly" ] diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh index f15a3b9aaf..61f7510ea1 100755 --- a/devtools/gen-abi.sh +++ b/devtools/gen-abi.sh @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do fi libname=$(basename $f) - abidw --out-file $dumpdir/${libname%.so*}.dump $f -done + echo $dumpdir/${libname%.so*}.dump $f +done | +xargs -n2 -P0 abidw --out-file -- 2.39.0 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v3] devtools: parallelize ABI check 2023-01-11 13:16 ` [PATCH v3] " Thomas Monjalon @ 2023-01-11 14:10 ` Bruce Richardson 2023-01-11 14:11 ` David Marchand 1 sibling, 0 replies; 13+ messages in thread From: Bruce Richardson @ 2023-01-11 14:10 UTC (permalink / raw) To: Thomas Monjalon; +Cc: David Marchand, dev, Ferruh Yigit On Wed, Jan 11, 2023 at 02:16:52PM +0100, Thomas Monjalon wrote: > Generation and comparison of ABI dumps are done on multiple cores > thanks to xargs -P0. > It can accelerate this long step by 5 in my tests. > > xargs reports a global error if one of the process has an error. > > Running a shell function with xargs requires to export it with -f, > and that is a specific capability of bash. > Commit-log needs update based on changes in v3. > Signed-off-by: Thomas Monjalon <thomas@monjalon.net> > Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> > --- > v2: > - find dump2 inside the function > - force bash because of export -f > v3: > - revert to POSIX sh > - use POSIX eval instead of export -f (issues on Ubuntu) > --- > devtools/check-abi.sh | 21 +++++++++++++-------- > devtools/gen-abi.sh | 5 +++-- > 2 files changed, 16 insertions(+), 10 deletions(-) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v3] devtools: parallelize ABI check 2023-01-11 13:16 ` [PATCH v3] " Thomas Monjalon 2023-01-11 14:10 ` Bruce Richardson @ 2023-01-11 14:11 ` David Marchand 2023-01-11 17:04 ` Thomas Monjalon 1 sibling, 1 reply; 13+ messages in thread From: David Marchand @ 2023-01-11 14:11 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev, Ferruh Yigit On Wed, Jan 11, 2023 at 2:16 PM Thomas Monjalon <thomas@monjalon.net> wrote: > > Generation and comparison of ABI dumps are done on multiple cores > thanks to xargs -P0. > It can accelerate this long step by 5 in my tests. > > xargs reports a global error if one of the process has an error. > > Running a shell function with xargs requires to export it with -f, > and that is a specific capability of bash. > > Signed-off-by: Thomas Monjalon <thomas@monjalon.net> > Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> > --- > v2: > - find dump2 inside the function > - force bash because of export -f > v3: > - revert to POSIX sh > - use POSIX eval instead of export -f (issues on Ubuntu) > --- > devtools/check-abi.sh | 21 +++++++++++++-------- > devtools/gen-abi.sh | 5 +++-- > 2 files changed, 16 insertions(+), 10 deletions(-) > > diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh > index c583eae2fd..d58c867c60 100755 > --- a/devtools/check-abi.sh > +++ b/devtools/check-abi.sh > @@ -34,19 +34,18 @@ else > ABIDIFF_OPTIONS="$ABIDIFF_OPTIONS --headers-dir2 $incdir2" > fi > > -error= > -for dump in $(find $refdir -name "*.dump"); do > +export diff_func='run_diff() { > + dump=$1 > + newdir=$2 > name=$(basename $dump) > dump2=$(find $newdir -name $name) > if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then > echo "Error: cannot find $name in $newdir" >&2 > - error=1 > - continue > - fi > + return 1 > + fi; > abidiff $ABIDIFF_OPTIONS $dump $dump2 || { > abiret=$? > - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 > - error=1 > + echo "Error: ABI issue reported for abidiff $ABIDIFF_OPTIONS $dump $dump2" >&2 > echo > if [ $(($abiret & 3)) -ne 0 ]; then > echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 > @@ -58,7 +57,13 @@ for dump in $(find $refdir -name "*.dump"); do > echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 > fi > echo > + return 1 > } > -done > +}' > + > +error= > +find $refdir -name "*.dump" | > +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0 '$newdir || > +error=1 Do we need to pass $newdir ? Like, for example, ABIDIFF_OPTIONS seems inherited, right? Otherwise this trick looks to work. -- David Marchand ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v3] devtools: parallelize ABI check 2023-01-11 14:11 ` David Marchand @ 2023-01-11 17:04 ` Thomas Monjalon 0 siblings, 0 replies; 13+ messages in thread From: Thomas Monjalon @ 2023-01-11 17:04 UTC (permalink / raw) To: David Marchand; +Cc: dev, Ferruh Yigit 11/01/2023 15:11, David Marchand: > On Wed, Jan 11, 2023 at 2:16 PM Thomas Monjalon <thomas@monjalon.net> wrote: > > +find $refdir -name "*.dump" | > > +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0 '$newdir || > > +error=1 > > Do we need to pass $newdir ? > Like, for example, ABIDIFF_OPTIONS seems inherited, right? Actually ABIDIFF_OPTIONS was empty when calling the function. I'll pass it as well. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v4] devtools: parallelize ABI check 2023-01-07 13:39 [PATCH] devtools: parallelize ABI check Thomas Monjalon 2023-01-09 9:34 ` [PATCH v2] " Thomas Monjalon 2023-01-11 13:16 ` [PATCH v3] " Thomas Monjalon @ 2023-01-11 19:53 ` Thomas Monjalon 2023-01-12 10:53 ` David Marchand 2023-01-18 14:29 ` David Marchand 2 siblings, 2 replies; 13+ messages in thread From: Thomas Monjalon @ 2023-01-11 19:53 UTC (permalink / raw) To: David Marchand; +Cc: dev, bruce.richardson, Ferruh Yigit Generation and comparison of ABI dumps are done on multiple cores thanks to xargs -P0. It can accelerate this long step by 5 in my tests. xargs reports a global error if one of the process has an error. Running a shell function with xargs requires to export it. POSIX shell does not support function export except using an "eval trick". Required variables are also exported. Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> --- v2: - find dump2 inside the function - force bash because of export -f v3: - revert to POSIX sh - use POSIX eval instead of export -f (issues on Ubuntu) v4: - export all required variables - remove useless stdout echo calls --- devtools/check-abi.sh | 23 +++++++++++++---------- devtools/gen-abi.sh | 5 +++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh index c583eae2fd..31eceb42e6 100755 --- a/devtools/check-abi.sh +++ b/devtools/check-abi.sh @@ -34,20 +34,18 @@ else ABIDIFF_OPTIONS="$ABIDIFF_OPTIONS --headers-dir2 $incdir2" fi -error= -for dump in $(find $refdir -name "*.dump"); do +export newdir ABIDIFF_OPTIONS +export diff_func='run_diff() { + dump=$1 name=$(basename $dump) dump2=$(find $newdir -name $name) if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then echo "Error: cannot find $name in $newdir" >&2 - error=1 - continue - fi + return 1 + fi; abidiff $ABIDIFF_OPTIONS $dump $dump2 || { abiret=$? - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 - error=1 - echo + echo "Error: ABI issue reported for abidiff $ABIDIFF_OPTIONS $dump $dump2" >&2 if [ $(($abiret & 3)) -ne 0 ]; then echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 fi @@ -57,8 +55,13 @@ for dump in $(find $refdir -name "*.dump"); do if [ $(($abiret & 8)) -ne 0 ]; then echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 fi - echo + return 1 } -done +}' + +error= +find $refdir -name "*.dump" | +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0' || +error=1 [ -z "$error" ] || [ -n "$warnonly" ] diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh index f15a3b9aaf..61f7510ea1 100755 --- a/devtools/gen-abi.sh +++ b/devtools/gen-abi.sh @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do fi libname=$(basename $f) - abidw --out-file $dumpdir/${libname%.so*}.dump $f -done + echo $dumpdir/${libname%.so*}.dump $f +done | +xargs -n2 -P0 abidw --out-file -- 2.39.0 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4] devtools: parallelize ABI check 2023-01-11 19:53 ` [PATCH v4] " Thomas Monjalon @ 2023-01-12 10:53 ` David Marchand 2023-01-12 14:14 ` Ferruh Yigit 2023-01-18 14:29 ` David Marchand 1 sibling, 1 reply; 13+ messages in thread From: David Marchand @ 2023-01-12 10:53 UTC (permalink / raw) To: Thomas Monjalon, Ferruh Yigit; +Cc: dev, bruce.richardson On Wed, Jan 11, 2023 at 8:53 PM Thomas Monjalon <thomas@monjalon.net> wrote: > > Generation and comparison of ABI dumps are done on multiple cores > thanks to xargs -P0. > It can accelerate this long step by 5 in my tests. > > xargs reports a global error if one of the process has an error. > > Running a shell function with xargs requires to export it. > POSIX shell does not support function export except using an "eval trick". > Required variables are also exported. > > Signed-off-by: Thomas Monjalon <thomas@monjalon.net> > Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> > diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh > index c583eae2fd..31eceb42e6 100755 > --- a/devtools/check-abi.sh > +++ b/devtools/check-abi.sh > @@ -34,20 +34,18 @@ else > ABIDIFF_OPTIONS="$ABIDIFF_OPTIONS --headers-dir2 $incdir2" > fi > > -error= > -for dump in $(find $refdir -name "*.dump"); do > +export newdir ABIDIFF_OPTIONS > +export diff_func='run_diff() { > + dump=$1 > name=$(basename $dump) > dump2=$(find $newdir -name $name) > if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then > echo "Error: cannot find $name in $newdir" >&2 > - error=1 > - continue > - fi > + return 1 > + fi; No need for ; here. This can be fixed when applying (I tested both your patch and with this small fix). > abidiff $ABIDIFF_OPTIONS $dump $dump2 || { > abiret=$? > - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 > - error=1 > - echo > + echo "Error: ABI issue reported for abidiff $ABIDIFF_OPTIONS $dump $dump2" >&2 > if [ $(($abiret & 3)) -ne 0 ]; then > echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 > fi > @@ -57,8 +55,13 @@ for dump in $(find $refdir -name "*.dump"); do > if [ $(($abiret & 8)) -ne 0 ]; then > echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 > fi > - echo > + return 1 > } > -done > +}' > + > +error= > +find $refdir -name "*.dump" | > +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0' || > +error=1 > > [ -z "$error" ] || [ -n "$warnonly" ] For the record, on my system, calling this script is ~5 times faster: - before real 0m5,447s user 0m4,497s sys 0m0,937s - after real 0m1,202s user 0m10,784s sys 0m2,027s > diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh > index f15a3b9aaf..61f7510ea1 100755 > --- a/devtools/gen-abi.sh > +++ b/devtools/gen-abi.sh > @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do > fi > > libname=$(basename $f) > - abidw --out-file $dumpdir/${libname%.so*}.dump $f > -done > + echo $dumpdir/${libname%.so*}.dump $f > +done | > +xargs -n2 -P0 abidw --out-file > -- > 2.39.0 > - before real 0m8,237s user 0m7,704s sys 0m0,504s - after real 0m2,517s user 0m14,145s sys 0m0,766s Ferruh, I am seeing quite different numbers for running those scripts (clearly not of the minute order). I switched to testing/building in tmpfs some time ago. It requires a good amount of memory (I empirically allocated 40G), but maybe worth a try for you? In any case, this patch lgtm. Acked-by: David Marchand <david.marchand@redhat.com> -- David Marchand ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4] devtools: parallelize ABI check 2023-01-12 10:53 ` David Marchand @ 2023-01-12 14:14 ` Ferruh Yigit 2023-01-18 10:45 ` David Marchand 0 siblings, 1 reply; 13+ messages in thread From: Ferruh Yigit @ 2023-01-12 14:14 UTC (permalink / raw) To: David Marchand, Thomas Monjalon; +Cc: dev, bruce.richardson On 1/12/2023 10:53 AM, David Marchand wrote: > On Wed, Jan 11, 2023 at 8:53 PM Thomas Monjalon <thomas@monjalon.net> wrote: >> >> Generation and comparison of ABI dumps are done on multiple cores >> thanks to xargs -P0. >> It can accelerate this long step by 5 in my tests. >> >> xargs reports a global error if one of the process has an error. >> >> Running a shell function with xargs requires to export it. >> POSIX shell does not support function export except using an "eval trick". >> Required variables are also exported. >> >> Signed-off-by: Thomas Monjalon <thomas@monjalon.net> >> Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> >> diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh >> index c583eae2fd..31eceb42e6 100755 >> --- a/devtools/check-abi.sh >> +++ b/devtools/check-abi.sh >> @@ -34,20 +34,18 @@ else >> ABIDIFF_OPTIONS="$ABIDIFF_OPTIONS --headers-dir2 $incdir2" >> fi >> >> -error= >> -for dump in $(find $refdir -name "*.dump"); do >> +export newdir ABIDIFF_OPTIONS >> +export diff_func='run_diff() { >> + dump=$1 >> name=$(basename $dump) >> dump2=$(find $newdir -name $name) >> if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then >> echo "Error: cannot find $name in $newdir" >&2 >> - error=1 >> - continue >> - fi >> + return 1 >> + fi; > > No need for ; here. > This can be fixed when applying (I tested both your patch and with > this small fix). > > >> abidiff $ABIDIFF_OPTIONS $dump $dump2 || { >> abiret=$? >> - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 >> - error=1 >> - echo >> + echo "Error: ABI issue reported for abidiff $ABIDIFF_OPTIONS $dump $dump2" >&2 >> if [ $(($abiret & 3)) -ne 0 ]; then >> echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 >> fi >> @@ -57,8 +55,13 @@ for dump in $(find $refdir -name "*.dump"); do >> if [ $(($abiret & 8)) -ne 0 ]; then >> echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 >> fi >> - echo >> + return 1 >> } >> -done >> +}' >> + >> +error= >> +find $refdir -name "*.dump" | >> +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0' || >> +error=1 >> >> [ -z "$error" ] || [ -n "$warnonly" ] > > For the record, on my system, calling this script is ~5 times faster: > - before > real 0m5,447s > user 0m4,497s > sys 0m0,937s > > - after > real 0m1,202s > user 0m10,784s > sys 0m2,027s > > >> diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh >> index f15a3b9aaf..61f7510ea1 100755 >> --- a/devtools/gen-abi.sh >> +++ b/devtools/gen-abi.sh >> @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do >> fi >> >> libname=$(basename $f) >> - abidw --out-file $dumpdir/${libname%.so*}.dump $f >> -done >> + echo $dumpdir/${libname%.so*}.dump $f >> +done | >> +xargs -n2 -P0 abidw --out-file >> -- >> 2.39.0 >> > > - before > real 0m8,237s > user 0m7,704s > sys 0m0,504s > > - after > real 0m2,517s > user 0m14,145s > sys 0m0,766s > > > Ferruh, I am seeing quite different numbers for running those scripts > (clearly not of the minute order). > I switched to testing/building in tmpfs some time ago. > It requires a good amount of memory (I empirically allocated 40G), but > maybe worth a try for you? > I run 'test-meson-builds.sh' script directly and yes I am getting different numbers although there is still improvement, not in scale with what you are getting, with v4 I have following: - before real 10m3.248s user 39m8.664s sys 14m52.870s - after real 7m49.086s user 39m59.507s sys 15m0.598s What I am running exactly is: time DPDK_ABI_REF_VERSION=v22.11.1 DPDK_ABI_REF_DIR=/tmp/dpdk-abiref DPDK_ABI_REF_SRC=.../dpdk-stable/ ./devtools/test-meson-builds.sh > > In any case, this patch lgtm. > Acked-by: David Marchand <david.marchand@redhat.com> > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4] devtools: parallelize ABI check 2023-01-12 14:14 ` Ferruh Yigit @ 2023-01-18 10:45 ` David Marchand 2023-01-18 11:43 ` Ferruh Yigit 0 siblings, 1 reply; 13+ messages in thread From: David Marchand @ 2023-01-18 10:45 UTC (permalink / raw) To: Ferruh Yigit; +Cc: Thomas Monjalon, dev, bruce.richardson On Thu, Jan 12, 2023 at 3:15 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: > >> abidiff $ABIDIFF_OPTIONS $dump $dump2 || { > >> abiret=$? > >> - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 > >> - error=1 > >> - echo > >> + echo "Error: ABI issue reported for abidiff $ABIDIFF_OPTIONS $dump $dump2" >&2 > >> if [ $(($abiret & 3)) -ne 0 ]; then > >> echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 > >> fi > >> @@ -57,8 +55,13 @@ for dump in $(find $refdir -name "*.dump"); do > >> if [ $(($abiret & 8)) -ne 0 ]; then > >> echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 > >> fi > >> - echo > >> + return 1 > >> } > >> -done > >> +}' > >> + > >> +error= > >> +find $refdir -name "*.dump" | > >> +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0' || > >> +error=1 > >> > >> [ -z "$error" ] || [ -n "$warnonly" ] > > > > For the record, on my system, calling this script is ~5 times faster: > > - before > > real 0m5,447s > > user 0m4,497s > > sys 0m0,937s > > > > - after > > real 0m1,202s > > user 0m10,784s > > sys 0m2,027s > > > > > >> diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh > >> index f15a3b9aaf..61f7510ea1 100755 > >> --- a/devtools/gen-abi.sh > >> +++ b/devtools/gen-abi.sh > >> @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do > >> fi > >> > >> libname=$(basename $f) > >> - abidw --out-file $dumpdir/${libname%.so*}.dump $f > >> -done > >> + echo $dumpdir/${libname%.so*}.dump $f > >> +done | > >> +xargs -n2 -P0 abidw --out-file > >> -- > >> 2.39.0 > >> > > > > - before > > real 0m8,237s > > user 0m7,704s > > sys 0m0,504s > > > > - after > > real 0m2,517s > > user 0m14,145s > > sys 0m0,766s > > > > > > Ferruh, I am seeing quite different numbers for running those scripts > > (clearly not of the minute order). > > I switched to testing/building in tmpfs some time ago. > > It requires a good amount of memory (I empirically allocated 40G), but > > maybe worth a try for you? > > > > I run 'test-meson-builds.sh' script directly and yes I am getting > different numbers although there is still improvement, not in scale with > what you are getting, with v4 I have following: > > - before > real 10m3.248s > user 39m8.664s > sys 14m52.870s > > - after > real 7m49.086s > user 39m59.507s > sys 15m0.598s Well, yes, I did not realise which apples you were looking at :-). The change looks good in any case. -- David Marchand ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4] devtools: parallelize ABI check 2023-01-18 10:45 ` David Marchand @ 2023-01-18 11:43 ` Ferruh Yigit 0 siblings, 0 replies; 13+ messages in thread From: Ferruh Yigit @ 2023-01-18 11:43 UTC (permalink / raw) To: David Marchand; +Cc: Thomas Monjalon, dev, bruce.richardson On 1/18/2023 10:45 AM, David Marchand wrote: > On Thu, Jan 12, 2023 at 3:15 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: >>>> abidiff $ABIDIFF_OPTIONS $dump $dump2 || { >>>> abiret=$? >>>> - echo "Error: ABI issue reported for 'abidiff $ABIDIFF_OPTIONS $dump $dump2'" >&2 >>>> - error=1 >>>> - echo >>>> + echo "Error: ABI issue reported for abidiff $ABIDIFF_OPTIONS $dump $dump2" >&2 >>>> if [ $(($abiret & 3)) -ne 0 ]; then >>>> echo "ABIDIFF_ERROR|ABIDIFF_USAGE_ERROR, this could be a script or environment issue." >&2 >>>> fi >>>> @@ -57,8 +55,13 @@ for dump in $(find $refdir -name "*.dump"); do >>>> if [ $(($abiret & 8)) -ne 0 ]; then >>>> echo "ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI." >&2 >>>> fi >>>> - echo >>>> + return 1 >>>> } >>>> -done >>>> +}' >>>> + >>>> +error= >>>> +find $refdir -name "*.dump" | >>>> +xargs -n1 -P0 sh -c 'eval "$diff_func"; run_diff $0' || >>>> +error=1 >>>> >>>> [ -z "$error" ] || [ -n "$warnonly" ] >>> >>> For the record, on my system, calling this script is ~5 times faster: >>> - before >>> real 0m5,447s >>> user 0m4,497s >>> sys 0m0,937s >>> >>> - after >>> real 0m1,202s >>> user 0m10,784s >>> sys 0m2,027s >>> >>> >>>> diff --git a/devtools/gen-abi.sh b/devtools/gen-abi.sh >>>> index f15a3b9aaf..61f7510ea1 100755 >>>> --- a/devtools/gen-abi.sh >>>> +++ b/devtools/gen-abi.sh >>>> @@ -22,5 +22,6 @@ for f in $(find $installdir -name "*.so.*"); do >>>> fi >>>> >>>> libname=$(basename $f) >>>> - abidw --out-file $dumpdir/${libname%.so*}.dump $f >>>> -done >>>> + echo $dumpdir/${libname%.so*}.dump $f >>>> +done | >>>> +xargs -n2 -P0 abidw --out-file >>>> -- >>>> 2.39.0 >>>> >>> >>> - before >>> real 0m8,237s >>> user 0m7,704s >>> sys 0m0,504s >>> >>> - after >>> real 0m2,517s >>> user 0m14,145s >>> sys 0m0,766s >>> >>> >>> Ferruh, I am seeing quite different numbers for running those scripts >>> (clearly not of the minute order). >>> I switched to testing/building in tmpfs some time ago. >>> It requires a good amount of memory (I empirically allocated 40G), but >>> maybe worth a try for you? >>> >> >> I run 'test-meson-builds.sh' script directly and yes I am getting >> different numbers although there is still improvement, not in scale with >> what you are getting, with v4 I have following: >> >> - before >> real 10m3.248s >> user 39m8.664s >> sys 14m52.870s >> >> - after >> real 7m49.086s >> user 39m59.507s >> sys 15m0.598s > > Well, yes, I did not realise which apples you were looking at :-). > The change looks good in any case. > Ack ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4] devtools: parallelize ABI check 2023-01-11 19:53 ` [PATCH v4] " Thomas Monjalon 2023-01-12 10:53 ` David Marchand @ 2023-01-18 14:29 ` David Marchand 1 sibling, 0 replies; 13+ messages in thread From: David Marchand @ 2023-01-18 14:29 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev, bruce.richardson, Ferruh Yigit On Wed, Jan 11, 2023 at 8:53 PM Thomas Monjalon <thomas@monjalon.net> wrote: > > Generation and comparison of ABI dumps are done on multiple cores > thanks to xargs -P0. > It can accelerate this long step by 5 in my tests. > > xargs reports a global error if one of the process has an error. > > Running a shell function with xargs requires to export it. > POSIX shell does not support function export except using an "eval trick". > Required variables are also exported. > > Signed-off-by: Thomas Monjalon <thomas@monjalon.net> > Tested-by: Ferruh Yigit <ferruh.yigit@amd.com> Reviewed-by: David Marchand <david.marchand@redhat.com> Applied, thanks. -- David Marchand ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-01-18 14:29 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-01-07 13:39 [PATCH] devtools: parallelize ABI check Thomas Monjalon 2023-01-09 9:34 ` [PATCH v2] " Thomas Monjalon 2023-01-10 11:08 ` Ferruh Yigit 2023-01-11 13:16 ` [PATCH v3] " Thomas Monjalon 2023-01-11 14:10 ` Bruce Richardson 2023-01-11 14:11 ` David Marchand 2023-01-11 17:04 ` Thomas Monjalon 2023-01-11 19:53 ` [PATCH v4] " Thomas Monjalon 2023-01-12 10:53 ` David Marchand 2023-01-12 14:14 ` Ferruh Yigit 2023-01-18 10:45 ` David Marchand 2023-01-18 11:43 ` Ferruh Yigit 2023-01-18 14:29 ` David Marchand
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).