On 1/12/2023 10:53 AM, David Marchand wrote: > 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? >
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.march...@redhat.com> > >