On Wed, Jan 11, 2023 at 8:53 PM Thomas Monjalon <tho...@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 <tho...@monjalon.net> > Tested-by: Ferruh Yigit <ferruh.yi...@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.march...@redhat.com> -- David Marchand