[PATCH] benchtests: Building benchmarks as static executables

Noah Goldstein goldstein.w.n@gmail.com
Mon Oct 4 16:02:54 GMT 2021


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.
>


More information about the Libc-alpha mailing list