DPDK patches and discussions
 help / color / mirror / Atom feed
* [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).