benchtests: Building benchmarks as static executables

Message ID 20210730212204.1832487-1-hjl.tools@gmail.com
State Superseded
Headers
Series benchtests: Building benchmarks as static executables |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

H.J. Lu July 30, 2021, 9:22 p.m. UTC
  Building benchmarks as static executables:
=========================================

To build benchmarks as static executables, on the build system, run:

  $ make STATIC-BENCHTESTS=yes bench-build

You can copy benchmark executables to another machine and run them
without copying the source nor build directories.
---
 benchtests/Makefile | 26 +++++++++++++++++++-------
 benchtests/README   | 10 ++++++++++
 2 files changed, 29 insertions(+), 7 deletions(-)
  

Comments

Carlos O'Donell Aug. 9, 2021, 1:01 p.m. UTC | #1
On 7/30/21 5:22 PM, H.J. Lu via Libc-alpha wrote:
> Building benchmarks as static executables:
> =========================================
> 
> To build benchmarks as static executables, on the build system, run:
> 
>   $ make STATIC-BENCHTESTS=yes bench-build
> 
> You can copy benchmark executables to another machine and run them
> without copying the source nor build directories.

Looking forward to a v2.

Fails to build for i686 with binutils 2.35, the README should mention
architecture and minimum binutils required.

Looks good on x86_64 which has has this feature for longer.

> ---
>  benchtests/Makefile | 26 +++++++++++++++++++-------
>  benchtests/README   | 10 ++++++++++
>  2 files changed, 29 insertions(+), 7 deletions(-)
> 
> diff --git a/benchtests/Makefile b/benchtests/Makefile
> index 1530939a8c..4fcd73131a 100644
> --- a/benchtests/Makefile
> +++ b/benchtests/Makefile
> @@ -110,11 +110,23 @@ else
>  bench-malloc := $(filter malloc-%,${BENCHSET})
>  endif
>  
> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> +ifeq (${STATIC-BENCHTESTS},yes)
> ++link-benchtests = $(+link-static-tests)
> +link-libc-benchtests = $(link-libc-static)
> +libm-benchtests = $(common-objpfx)math/libm.a
> +thread-library-benchtests = $(static-thread-library)
> +else
> +link-libc-benchtests = $(link-libc)
> ++link-benchtests = $(+link-tests)
> +thread-library-benchtests = $(shared-thread-library)
> +libm-benchtests = $(libm)
> +endif
> +
> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>  
>  
>  
> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
>  
>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>  	$(link-extra-libs-tests) \
> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> -	$(+link-tests)
> +	$(+link-benchtests)
>  
>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>  
> diff --git a/benchtests/README b/benchtests/README
> index 44736d7e63..4d83a05b4b 100644
> --- a/benchtests/README
> +++ b/benchtests/README
> @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
>  that require generated code to be executed during the build are skipped when
>  cross-building.
>  
> +Building benchmarks as static executables:
> +=========================================
> +
> +To build benchmarks as static executables, on the build system, run:
> +
> +  $ make STATIC-BENCHTESTS=yes bench-build
> +
> +You can copy benchmark executables to another machine and run them
> +without copying the source nor build directories.
> +
>  Running subsets of benchmarks:
>  ==============================
>  
>
  
H.J. Lu Aug. 9, 2021, 2:18 p.m. UTC | #2
On Mon, Aug 9, 2021 at 6:01 AM Carlos O'Donell <carlos@redhat.com> wrote:
>
> On 7/30/21 5:22 PM, H.J. Lu via Libc-alpha wrote:
> > Building benchmarks as static executables:
> > =========================================
> >
> > To build benchmarks as static executables, on the build system, run:
> >
> >   $ make STATIC-BENCHTESTS=yes bench-build
> >
> > You can copy benchmark executables to another machine and run them
> > without copying the source nor build directories.
>
> Looking forward to a v2.
>
> Fails to build for i686 with binutils 2.35, the README should mention
> architecture and minimum binutils required.

I sent out the v2 patch with

On i686, there is no multiarch memove in libc.a, don't include multiarch
memove in ifunc-impl-list.c in libc.a.

> Looks good on x86_64 which has has this feature for longer.
>
> > ---
> >  benchtests/Makefile | 26 +++++++++++++++++++-------
> >  benchtests/README   | 10 ++++++++++
> >  2 files changed, 29 insertions(+), 7 deletions(-)
> >
> > diff --git a/benchtests/Makefile b/benchtests/Makefile
> > index 1530939a8c..4fcd73131a 100644
> > --- a/benchtests/Makefile
> > +++ b/benchtests/Makefile
> > @@ -110,11 +110,23 @@ else
> >  bench-malloc := $(filter malloc-%,${BENCHSET})
> >  endif
> >
> > -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> > -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> > -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> > -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> > -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> > +ifeq (${STATIC-BENCHTESTS},yes)
> > ++link-benchtests = $(+link-static-tests)
> > +link-libc-benchtests = $(link-libc-static)
> > +libm-benchtests = $(common-objpfx)math/libm.a
> > +thread-library-benchtests = $(static-thread-library)
> > +else
> > +link-libc-benchtests = $(link-libc)
> > ++link-benchtests = $(+link-tests)
> > +thread-library-benchtests = $(shared-thread-library)
> > +libm-benchtests = $(libm)
> > +endif
> > +
> > +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> > +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> > +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
> > +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
> > +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
> >
> >
> >
> > @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
> >
> >  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
> >       $(link-extra-libs-tests) \
> > -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> > +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
> >    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> > -     $(+link-tests)
> > +     $(+link-benchtests)
> >
> >  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
> >
> > diff --git a/benchtests/README b/benchtests/README
> > index 44736d7e63..4d83a05b4b 100644
> > --- a/benchtests/README
> > +++ b/benchtests/README
> > @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
> >  that require generated code to be executed during the build are skipped when
> >  cross-building.
> >
> > +Building benchmarks as static executables:
> > +=========================================
> > +
> > +To build benchmarks as static executables, on the build system, run:
> > +
> > +  $ make STATIC-BENCHTESTS=yes bench-build
> > +
> > +You can copy benchmark executables to another machine and run them
> > +without copying the source nor build directories.
> > +
> >  Running subsets of benchmarks:
> >  ==============================
> >
> >
>
>
> --
> Cheers,
> Carlos.
>

Thanks.
  
Noah Goldstein Aug. 9, 2021, 7:10 p.m. UTC | #3
On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <
libc-alpha@sourceware.org> wrote:

> Building benchmarks as static executables:
> =========================================
>
> To build benchmarks as static executables, on the build system, run:
>
>   $ make STATIC-BENCHTESTS=yes bench-build
>
>
Any chance you could add a -falign option for this?


> You can copy benchmark executables to another machine and run them
> without copying the source nor build directories.
> ---
>  benchtests/Makefile | 26 +++++++++++++++++++-------
>  benchtests/README   | 10 ++++++++++
>  2 files changed, 29 insertions(+), 7 deletions(-)
>
> diff --git a/benchtests/Makefile b/benchtests/Makefile
> index 1530939a8c..4fcd73131a 100644
> --- a/benchtests/Makefile
> +++ b/benchtests/Makefile
> @@ -110,11 +110,23 @@ else
>  bench-malloc := $(filter malloc-%,${BENCHSET})
>  endif
>
> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> +ifeq (${STATIC-BENCHTESTS},yes)
> ++link-benchtests = $(+link-static-tests)
> +link-libc-benchtests = $(link-libc-static)
> +libm-benchtests = $(common-objpfx)math/libm.a
> +thread-library-benchtests = $(static-thread-library)
> +else
> +link-libc-benchtests = $(link-libc)
> ++link-benchtests = $(+link-tests)
> +thread-library-benchtests = $(shared-thread-library)
> +libm-benchtests = $(libm)
> +endif
> +
> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-pthread)):
> $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>
>
>
> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench)
> $(binaries-benchset) \
>
>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>         $(link-extra-libs-tests) \
> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> -       $(+link-tests)
> +       $(+link-benchtests)
>
>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>
> diff --git a/benchtests/README b/benchtests/README
> index 44736d7e63..4d83a05b4b 100644
> --- a/benchtests/README
> +++ b/benchtests/README
> @@ -62,6 +62,16 @@ otherwise the above command may try to build the
> benchmark again.  Benchmarks
>  that require generated code to be executed during the build are skipped
> when
>  cross-building.
>
> +Building benchmarks as static executables:
> +=========================================
> +
> +To build benchmarks as static executables, on the build system, run:
> +
> +  $ make STATIC-BENCHTESTS=yes bench-build
> +
> +You can copy benchmark executables to another machine and run them
> +without copying the source nor build directories.
> +
>  Running subsets of benchmarks:
>  ==============================
>
> --
> 2.31.1
>
>
  
H.J. Lu Aug. 9, 2021, 7:33 p.m. UTC | #4
On Mon, Aug 9, 2021 at 12:10 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
>
>
>
> On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <libc-alpha@sourceware.org> wrote:
>>
>> Building benchmarks as static executables:
>> =========================================
>>
>> To build benchmarks as static executables, on the build system, run:
>>
>>   $ make STATIC-BENCHTESTS=yes bench-build
>>
>
> Any chance you could add a -falign option for this?

To build glibc or build a specific bench test?

>>
>> You can copy benchmark executables to another machine and run them
>> without copying the source nor build directories.
>> ---
>>  benchtests/Makefile | 26 +++++++++++++++++++-------
>>  benchtests/README   | 10 ++++++++++
>>  2 files changed, 29 insertions(+), 7 deletions(-)
>>
>> diff --git a/benchtests/Makefile b/benchtests/Makefile
>> index 1530939a8c..4fcd73131a 100644
>> --- a/benchtests/Makefile
>> +++ b/benchtests/Makefile
>> @@ -110,11 +110,23 @@ else
>>  bench-malloc := $(filter malloc-%,${BENCHSET})
>>  endif
>>
>> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
>> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
>> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
>> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
>> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
>> +ifeq (${STATIC-BENCHTESTS},yes)
>> ++link-benchtests = $(+link-static-tests)
>> +link-libc-benchtests = $(link-libc-static)
>> +libm-benchtests = $(common-objpfx)math/libm.a
>> +thread-library-benchtests = $(static-thread-library)
>> +else
>> +link-libc-benchtests = $(link-libc)
>> ++link-benchtests = $(+link-tests)
>> +thread-library-benchtests = $(shared-thread-library)
>> +libm-benchtests = $(libm)
>> +endif
>> +
>> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
>> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
>> +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
>> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
>> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>>
>>
>>
>> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
>>
>>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>>         $(link-extra-libs-tests) \
>> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
>> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
>> -       $(+link-tests)
>> +       $(+link-benchtests)
>>
>>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>>
>> diff --git a/benchtests/README b/benchtests/README
>> index 44736d7e63..4d83a05b4b 100644
>> --- a/benchtests/README
>> +++ b/benchtests/README
>> @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
>>  that require generated code to be executed during the build are skipped when
>>  cross-building.
>>
>> +Building benchmarks as static executables:
>> +=========================================
>> +
>> +To build benchmarks as static executables, on the build system, run:
>> +
>> +  $ make STATIC-BENCHTESTS=yes bench-build
>> +
>> +You can copy benchmark executables to another machine and run them
>> +without copying the source nor build directories.
>> +
>>  Running subsets of benchmarks:
>>  ==============================
>>
>> --
>> 2.31.1
>>
  
Noah Goldstein Aug. 9, 2021, 8:07 p.m. UTC | #5
On Mon, Aug 9, 2021 at 3:34 PM H.J. Lu <hjl.tools@gmail.com> wrote:

> On Mon, Aug 9, 2021 at 12:10 PM Noah Goldstein <goldstein.w.n@gmail.com>
> wrote:
> >
> >
> >
> > On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <
> libc-alpha@sourceware.org> wrote:
> >>
> >> Building benchmarks as static executables:
> >> =========================================
> >>
> >> To build benchmarks as static executables, on the build system, run:
> >>
> >>   $ make STATIC-BENCHTESTS=yes bench-build
> >>
> >
> > Any chance you could add a -falign option for this?
>
> To build glibc or build a specific bench test?
>

I think the functions being benchmarked are the important ones so
if that's what you mean by a specific bench test then that should be
good. The entire build would be fine as well imho.


>
> >>
> >> You can copy benchmark executables to another machine and run them
> >> without copying the source nor build directories.
> >> ---
> >>  benchtests/Makefile | 26 +++++++++++++++++++-------
> >>  benchtests/README   | 10 ++++++++++
> >>  2 files changed, 29 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/benchtests/Makefile b/benchtests/Makefile
> >> index 1530939a8c..4fcd73131a 100644
> >> --- a/benchtests/Makefile
> >> +++ b/benchtests/Makefile
> >> @@ -110,11 +110,23 @@ else
> >>  bench-malloc := $(filter malloc-%,${BENCHSET})
> >>  endif
> >>
> >> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> >> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> >> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
> >> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
> >> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> >> +ifeq (${STATIC-BENCHTESTS},yes)
> >> ++link-benchtests = $(+link-static-tests)
> >> +link-libc-benchtests = $(link-libc-static)
> >> +libm-benchtests = $(common-objpfx)math/libm.a
> >> +thread-library-benchtests = $(static-thread-library)
> >> +else
> >> +link-libc-benchtests = $(link-libc)
> >> ++link-benchtests = $(+link-tests)
> >> +thread-library-benchtests = $(shared-thread-library)
> >> +libm-benchtests = $(libm)
> >> +endif
> >> +
> >> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> >> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> >> +$(addprefix $(objpfx)bench-,$(bench-pthread)):
> $(thread-library-benchtests)
> >> +$(addprefix $(objpfx)bench-,$(bench-malloc)):
> $(thread-library-benchtests)
> >> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
> >>
> >>
> >>
> >> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type)
> $(binaries-bench) $(binaries-benchset) \
> >>
> >>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
> >>         $(link-extra-libs-tests) \
> >> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> >> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
> >>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> >> -       $(+link-tests)
> >> +       $(+link-benchtests)
> >>
> >>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
> >>
> >> diff --git a/benchtests/README b/benchtests/README
> >> index 44736d7e63..4d83a05b4b 100644
> >> --- a/benchtests/README
> >> +++ b/benchtests/README
> >> @@ -62,6 +62,16 @@ otherwise the above command may try to build the
> benchmark again.  Benchmarks
> >>  that require generated code to be executed during the build are
> skipped when
> >>  cross-building.
> >>
> >> +Building benchmarks as static executables:
> >> +=========================================
> >> +
> >> +To build benchmarks as static executables, on the build system, run:
> >> +
> >> +  $ make STATIC-BENCHTESTS=yes bench-build
> >> +
> >> +You can copy benchmark executables to another machine and run them
> >> +without copying the source nor build directories.
> >> +
> >>  Running subsets of benchmarks:
> >>  ==============================
> >>
> >> --
> >> 2.31.1
> >>
>
>
> --
> H.J.
>
  
H.J. Lu Aug. 9, 2021, 8:29 p.m. UTC | #6
On Mon, Aug 9, 2021 at 1:07 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
>
>
>
> On Mon, Aug 9, 2021 at 3:34 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>>
>> On Mon, Aug 9, 2021 at 12:10 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
>> >
>> >
>> >
>> > On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <libc-alpha@sourceware.org> wrote:
>> >>
>> >> Building benchmarks as static executables:
>> >> =========================================
>> >>
>> >> To build benchmarks as static executables, on the build system, run:
>> >>
>> >>   $ make STATIC-BENCHTESTS=yes bench-build
>> >>
>> >
>> > Any chance you could add a -falign option for this?
>>
>> To build glibc or build a specific bench test?
>
>
> I think the functions being benchmarked are the important ones so
> if that's what you mean by a specific bench test then that should be
> good. The entire build would be fine as well imho.

I do

 $ BUILD_CC="gcc" CC="gcc" CXX="g++" CFLAGS="-O2 -g -ffoobar" .../configure

to pass -ffoobar to glibc build.

>
>>
>>
>> >>
>> >> You can copy benchmark executables to another machine and run them
>> >> without copying the source nor build directories.
>> >> ---
>> >>  benchtests/Makefile | 26 +++++++++++++++++++-------
>> >>  benchtests/README   | 10 ++++++++++
>> >>  2 files changed, 29 insertions(+), 7 deletions(-)
>> >>
>> >> diff --git a/benchtests/Makefile b/benchtests/Makefile
>> >> index 1530939a8c..4fcd73131a 100644
>> >> --- a/benchtests/Makefile
>> >> +++ b/benchtests/Makefile
>> >> @@ -110,11 +110,23 @@ else
>> >>  bench-malloc := $(filter malloc-%,${BENCHSET})
>> >>  endif
>> >>
>> >> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
>> >> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
>> >> -$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
>> >> -$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
>> >> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
>> >> +ifeq (${STATIC-BENCHTESTS},yes)
>> >> ++link-benchtests = $(+link-static-tests)
>> >> +link-libc-benchtests = $(link-libc-static)
>> >> +libm-benchtests = $(common-objpfx)math/libm.a
>> >> +thread-library-benchtests = $(static-thread-library)
>> >> +else
>> >> +link-libc-benchtests = $(link-libc)
>> >> ++link-benchtests = $(+link-tests)
>> >> +thread-library-benchtests = $(shared-thread-library)
>> >> +libm-benchtests = $(libm)
>> >> +endif
>> >> +
>> >> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
>> >> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
>> >> +$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
>> >> +$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
>> >> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
>> >>
>> >>
>> >>
>> >> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
>> >>
>> >>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
>> >>         $(link-extra-libs-tests) \
>> >> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
>> >> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
>> >>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
>> >> -       $(+link-tests)
>> >> +       $(+link-benchtests)
>> >>
>> >>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
>> >>
>> >> diff --git a/benchtests/README b/benchtests/README
>> >> index 44736d7e63..4d83a05b4b 100644
>> >> --- a/benchtests/README
>> >> +++ b/benchtests/README
>> >> @@ -62,6 +62,16 @@ otherwise the above command may try to build the benchmark again.  Benchmarks
>> >>  that require generated code to be executed during the build are skipped when
>> >>  cross-building.
>> >>
>> >> +Building benchmarks as static executables:
>> >> +=========================================
>> >> +
>> >> +To build benchmarks as static executables, on the build system, run:
>> >> +
>> >> +  $ make STATIC-BENCHTESTS=yes bench-build
>> >> +
>> >> +You can copy benchmark executables to another machine and run them
>> >> +without copying the source nor build directories.
>> >> +
>> >>  Running subsets of benchmarks:
>> >>  ==============================
>> >>
>> >> --
>> >> 2.31.1
>> >>
>>
>>
>> --
>> H.J.
  
Noah Goldstein Oct. 4, 2021, 4:02 p.m. UTC | #7
On Mon, Aug 9, 2021, 3:30 PM H.J. Lu <hjl.tools@gmail.com> wrote:

> On Mon, Aug 9, 2021 at 1:07 PM Noah Goldstein <goldstein.w.n@gmail.com>
> wrote:
> >
> >
> >
> > On Mon, Aug 9, 2021 at 3:34 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> >>
> >> On Mon, Aug 9, 2021 at 12:10 PM Noah Goldstein <goldstein.w.n@gmail.com>
> wrote:
> >> >
> >> >
> >> >
> >> > On Fri, Jul 30, 2021 at 5:22 PM H.J. Lu via Libc-alpha <
> libc-alpha@sourceware.org> wrote:
> >> >>
> >> >> Building benchmarks as static executables:
> >> >> =========================================
> >> >>
> >> >> To build benchmarks as static executables, on the build system, run:
> >> >>
> >> >>   $ make STATIC-BENCHTESTS=yes bench-build
> >> >>
> >> >
> >> > Any chance you could add a -falign option for this?
> >>
> >> To build glibc or build a specific bench test?
> >
> >
> > I think the functions being benchmarked are the important ones so
> > if that's what you mean by a specific bench test then that should be
> > good. The entire build would be fine as well imho.
>
> I do
>
>  $ BUILD_CC="gcc" CC="gcc" CXX="g++" CFLAGS="-O2 -g -ffoobar" .../configure
>
> to pass -ffoobar to glibc build.
>

I think this has side affects that can affect benchmarks as changing the
alignment of the loops calling the code can change the performance.

I think ideally we would have 2 alignment options, one for the library
functions and one of the support code so we could keep one constant.

What Ive been doing is giving each library function its own page so that
changing it's cache alignment doesn't have any external side affects.


> >
> >>
> >>
> >> >>
> >> >> You can copy benchmark executables to another machine and run them
> >> >> without copying the source nor build directories.
> >> >> ---
> >> >>  benchtests/Makefile | 26 +++++++++++++++++++-------
> >> >>  benchtests/README   | 10 ++++++++++
> >> >>  2 files changed, 29 insertions(+), 7 deletions(-)
> >> >>
> >> >> diff --git a/benchtests/Makefile b/benchtests/Makefile
> >> >> index 1530939a8c..4fcd73131a 100644
> >> >> --- a/benchtests/Makefile
> >> >> +++ b/benchtests/Makefile
> >> >> @@ -110,11 +110,23 @@ else
> >> >>  bench-malloc := $(filter malloc-%,${BENCHSET})
> >> >>  endif
> >> >>
> >> >> -$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
> >> >> -$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
> >> >> -$(addprefix $(objpfx)bench-,$(bench-pthread)):
> $(shared-thread-library)
> >> >> -$(addprefix $(objpfx)bench-,$(bench-malloc)):
> $(shared-thread-library)
> >> >> -$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
> >> >> +ifeq (${STATIC-BENCHTESTS},yes)
> >> >> ++link-benchtests = $(+link-static-tests)
> >> >> +link-libc-benchtests = $(link-libc-static)
> >> >> +libm-benchtests = $(common-objpfx)math/libm.a
> >> >> +thread-library-benchtests = $(static-thread-library)
> >> >> +else
> >> >> +link-libc-benchtests = $(link-libc)
> >> >> ++link-benchtests = $(+link-tests)
> >> >> +thread-library-benchtests = $(shared-thread-library)
> >> >> +libm-benchtests = $(libm)
> >> >> +endif
> >> >> +
> >> >> +$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
> >> >> +$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
> >> >> +$(addprefix $(objpfx)bench-,$(bench-pthread)):
> $(thread-library-benchtests)
> >> >> +$(addprefix $(objpfx)bench-,$(bench-malloc)):
> $(thread-library-benchtests)
> >> >> +$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
> >> >>
> >> >>
> >> >>
> >> >> @@ -270,9 +282,9 @@ bench-link-targets = $(timing-type)
> $(binaries-bench) $(binaries-benchset) \
> >> >>
> >> >>  $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
> >> >>         $(link-extra-libs-tests) \
> >> >> -  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> >> >> +  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
> >> >>    $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> >> >> -       $(+link-tests)
> >> >> +       $(+link-benchtests)
> >> >>
> >> >>  $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
> >> >>
> >> >> diff --git a/benchtests/README b/benchtests/README
> >> >> index 44736d7e63..4d83a05b4b 100644
> >> >> --- a/benchtests/README
> >> >> +++ b/benchtests/README
> >> >> @@ -62,6 +62,16 @@ otherwise the above command may try to build the
> benchmark again.  Benchmarks
> >> >>  that require generated code to be executed during the build are
> skipped when
> >> >>  cross-building.
> >> >>
> >> >> +Building benchmarks as static executables:
> >> >> +=========================================
> >> >> +
> >> >> +To build benchmarks as static executables, on the build system, run:
> >> >> +
> >> >> +  $ make STATIC-BENCHTESTS=yes bench-build
> >> >> +
> >> >> +You can copy benchmark executables to another machine and run them
> >> >> +without copying the source nor build directories.
> >> >> +
> >> >>  Running subsets of benchmarks:
> >> >>  ==============================
> >> >>
> >> >> --
> >> >> 2.31.1
> >> >>
> >>
> >>
> >> --
> >> H.J.
>
>
>
> --
> H.J.
>
  

Patch

diff --git a/benchtests/Makefile b/benchtests/Makefile
index 1530939a8c..4fcd73131a 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -110,11 +110,23 @@  else
 bench-malloc := $(filter malloc-%,${BENCHSET})
 endif
 
-$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
-$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
-$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
-$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
-$(addprefix $(objpfx)bench-,pthread-locks): $(libm)
+ifeq (${STATIC-BENCHTESTS},yes)
++link-benchtests = $(+link-static-tests)
+link-libc-benchtests = $(link-libc-static)
+libm-benchtests = $(common-objpfx)math/libm.a
+thread-library-benchtests = $(static-thread-library)
+else
+link-libc-benchtests = $(link-libc)
++link-benchtests = $(+link-tests)
+thread-library-benchtests = $(shared-thread-library)
+libm-benchtests = $(libm)
+endif
+
+$(addprefix $(objpfx)bench-,$(bench-math)): $(libm-benchtests)
+$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm-benchtests)
+$(addprefix $(objpfx)bench-,$(bench-pthread)): $(thread-library-benchtests)
+$(addprefix $(objpfx)bench-,$(bench-malloc)): $(thread-library-benchtests)
+$(addprefix $(objpfx)bench-,pthread-locks): $(libm-benchtests)
 
 
 
@@ -270,9 +282,9 @@  bench-link-targets = $(timing-type) $(binaries-bench) $(binaries-benchset) \
 
 $(bench-link-targets): %: %.o $(objpfx)json-lib.o \
 	$(link-extra-libs-tests) \
-  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
+  $(sort $(filter $(common-objpfx)lib%,$(link-libc-benchtests))) \
   $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
-	$(+link-tests)
+	$(+link-benchtests)
 
 $(bench-link-targets): LDFLAGS += $(link-bench-bind-now)
 
diff --git a/benchtests/README b/benchtests/README
index 44736d7e63..4d83a05b4b 100644
--- a/benchtests/README
+++ b/benchtests/README
@@ -62,6 +62,16 @@  otherwise the above command may try to build the benchmark again.  Benchmarks
 that require generated code to be executed during the build are skipped when
 cross-building.
 
+Building benchmarks as static executables:
+=========================================
+
+To build benchmarks as static executables, on the build system, run:
+
+  $ make STATIC-BENCHTESTS=yes bench-build
+
+You can copy benchmark executables to another machine and run them
+without copying the source nor build directories.
+
 Running subsets of benchmarks:
 ==============================