On Mon, Apr 15, 2024 at 11:26:44AM +0100, Alan Maguire wrote: > On 12/04/2024 22:16, Arnaldo Carvalho de Melo wrote: > > From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> > > > > $ time tests/reproducible_build.sh vmlinux > > Parallel reproducible DWARF Loading/Serial BTF encoding: Ok > > > > real 1m13.844s > > user 3m3.601s > > sys 0m9.049s > > $ > > > > If the number of threads started by pahole is different than what was > > requests via its -j command line option, it will fail as well as if the > > output of 'bpftool btf dump' differs from the BTF encoded totally > > serially to one of the detached BTF encoded using reproducible DWARF > > loading/BTF encoding. > > > > Cc: Alan Maguire <alan.maguire@xxxxxxxxxx> > > Cc: Kui-Feng Lee <kuifeng@xxxxxx> > > Cc: Thomas Weißschuh <linux@xxxxxxxxxxxxxx> > > Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> > > --- > > tests/reproducible_build.sh | 56 +++++++++++++++++++++++++++++++++++++ > > 1 file changed, 56 insertions(+) > > create mode 100755 tests/reproducible_build.sh > > > > great to have a test for this! a few small things below but > for the series > > Reviewed-by: Alan Maguire <alan.maguire@xxxxxxxxxx> > Tested-by: Alan Maguire <alan.maguire@xxxxxxxxxx> > > > diff --git a/tests/reproducible_build.sh b/tests/reproducible_build.sh > > new file mode 100755 > > index 0000000000000000..9c72d548c2a21136 > > --- /dev/null > > +++ b/tests/reproducible_build.sh > > @@ -0,0 +1,56 @@ > > +#!/bin/bash > > +# SPDX-License-Identifier: GPL-2.0-only > > +# > > +# Test if BTF generated serially matches reproducible parallel DWARF loading + serial BTF encoding > > +# Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> (C) 2024- > > + > > +vmlinux=$1 > > nit: might be worth having a usage check/error for the vmlinux binary here. > > > +outdir=$(mktemp -d /tmp/reproducible_build.sh.XXXXXX) > > + > > +echo -n "Parallel reproducible DWARF Loading/Serial BTF encoding: " > > + > > +test -n "$VERBOSE" && printf "\nserial encoding...\n" > > + > > +pahole --btf_encode_detached=$outdir/vmlinux.btf.serial $vmlinux > > suggestion here; what about adding --btf_features=all as this would mean > we'd be encoding all the standard kernel features? we'd need to do the > same below in the thread loop. without that we're missing out on a few > features that the kernel builds use in BTF encoding, and we probably > want to ensure that we're testing as close to a real kernel BTF encoding > scenario as possible. ⬢[acme@toolbox pahole]$ time tests/reproducible_build.sh vmlinux Parallel reproducible DWARF Loading/Serial BTF encoding: Ok real 1m24.903s user 3m8.143s sys 0m47.329s ⬢[acme@toolbox pahole]$ ⬢[acme@toolbox pahole]$ time VERBOSE=1 tests/reproducible_build.sh vmlinux Parallel reproducible DWARF Loading/Serial BTF encoding: serial encoding... 1 threads encoding 1 threads started diff from serial encoding: ----------------------------- 2 threads encoding 2 threads started diff from serial encoding: ----------------------------- 3 threads encoding 3 threads started ^X^C diff --git a/tests/reproducible_build.sh b/tests/reproducible_build.sh index b821e28e7ce7bf8c..8cc36fe4c75e8b75 100755 --- a/tests/reproducible_build.sh +++ b/tests/reproducible_build.sh @@ -22,14 +22,14 @@ echo -n "Parallel reproducible DWARF Loading/Serial BTF encoding: " test -n "$VERBOSE" && printf "\nserial encoding...\n" -pahole --btf_encode_detached=$outdir/vmlinux.btf.serial $vmlinux +pahole --btf_features=all --btf_encode_detached=$outdir/vmlinux.btf.serial $vmlinux bpftool btf dump file $outdir/vmlinux.btf.serial > $outdir/bpftool.output.vmlinux.btf.serial nr_proc=$(getconf _NPROCESSORS_ONLN) for threads in $(seq $nr_proc) ; do test -n "$VERBOSE" && echo $threads threads encoding - pahole -j$threads --reproducible_build --btf_encode_detached=$outdir/vmlinux.btf.parallel.reproducible $vmlinux & + pahole -j$threads --reproducible_build --btf_features=all --btf_encode_detached=$outdir/vmlinux.btf.parallel.reproducible $vmlinux & pahole=$! # HACK: Wait a bit for pahole to start its threads sleep 0.3s