selftests/bpf: Support building selftests in optimized -O2 mode
authorAndrii Nakryiko <andrii@kernel.org>
Fri, 6 Oct 2023 17:57:43 +0000 (10:57 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 6 Oct 2023 18:17:28 +0000 (20:17 +0200)
Add support for building selftests with -O2 level of optimization, which
allows more compiler warnings detection (like lots of potentially
uninitialized usage), but also is useful to have a faster-running test
for some CPU-intensive tests.

One can build optimized versions of libbpf and selftests by running:

  $ make RELEASE=1

There is a measurable speed up of about 10 seconds for me locally,
though it's mostly capped by non-parallelized serial tests. User CPU
time goes down by total 40 seconds, from 1m10s to 0m28s.

Unoptimized build (-O0)
=======================
Summary: 430/3544 PASSED, 25 SKIPPED, 4 FAILED

real    1m59.937s
user    1m10.877s
sys     3m14.880s

Optimized build (-O2)
=====================
Summary: 425/3543 PASSED, 25 SKIPPED, 9 FAILED

real    1m50.540s
user    0m28.406s
sys     3m13.198s

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Alan Maguire <alan.maguire@oracle.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/bpf/20231006175744.3136675-2-andrii@kernel.org
tools/testing/selftests/bpf/Makefile

index 99f66bdf76988d58a47f294c497cfb7f2b5afcbd..4225f975fce3fe6abc4f9abcddceddaa04cc5258 100644 (file)
@@ -27,7 +27,9 @@ endif
 BPF_GCC                ?= $(shell command -v bpf-gcc;)
 SAN_CFLAGS     ?=
 SAN_LDFLAGS    ?= $(SAN_CFLAGS)
-CFLAGS += -g -O0 -rdynamic                                             \
+RELEASE                ?=
+OPT_FLAGS      ?= $(if $(RELEASE),-O2,-O0)
+CFLAGS += -g $(OPT_FLAGS) -rdynamic                                    \
          -Wall -Werror                                                 \
          $(GENFLAGS) $(SAN_CFLAGS)                                     \
          -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR)          \
@@ -243,7 +245,7 @@ $(OUTPUT)/runqslower: $(BPFOBJ) | $(DEFAULT_BPFTOOL) $(RUNQSLOWER_OUTPUT)
                    BPFTOOL_OUTPUT=$(HOST_BUILD_DIR)/bpftool/                  \
                    BPFOBJ_OUTPUT=$(BUILD_DIR)/libbpf                          \
                    BPFOBJ=$(BPFOBJ) BPF_INCLUDE=$(INCLUDE_DIR)                \
-                   EXTRA_CFLAGS='-g -O0 $(SAN_CFLAGS)'                        \
+                   EXTRA_CFLAGS='-g $(OPT_FLAGS) $(SAN_CFLAGS)'               \
                    EXTRA_LDFLAGS='$(SAN_LDFLAGS)' &&                          \
                    cp $(RUNQSLOWER_OUTPUT)runqslower $@
 
@@ -281,7 +283,7 @@ $(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile)    \
                    $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool
        $(Q)$(MAKE) $(submake_extras)  -C $(BPFTOOLDIR)                        \
                    ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)"         \
-                   EXTRA_CFLAGS='-g -O0'                                      \
+                   EXTRA_CFLAGS='-g $(OPT_FLAGS)'                             \
                    OUTPUT=$(HOST_BUILD_DIR)/bpftool/                          \
                    LIBBPF_OUTPUT=$(HOST_BUILD_DIR)/libbpf/                    \
                    LIBBPF_DESTDIR=$(HOST_SCRATCH_DIR)/                        \
@@ -292,7 +294,7 @@ $(CROSS_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile)   \
                    $(BPFOBJ) | $(BUILD_DIR)/bpftool
        $(Q)$(MAKE) $(submake_extras)  -C $(BPFTOOLDIR)                         \
                    ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)                 \
-                   EXTRA_CFLAGS='-g -O0'                                       \
+                   EXTRA_CFLAGS='-g $(OPT_FLAGS)'                              \
                    OUTPUT=$(BUILD_DIR)/bpftool/                                \
                    LIBBPF_OUTPUT=$(BUILD_DIR)/libbpf/                          \
                    LIBBPF_DESTDIR=$(SCRATCH_DIR)/                              \
@@ -315,7 +317,7 @@ $(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile)                 \
           $(APIDIR)/linux/bpf.h                                               \
           | $(BUILD_DIR)/libbpf
        $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
-                   EXTRA_CFLAGS='-g -O0 $(SAN_CFLAGS)'                        \
+                   EXTRA_CFLAGS='-g $(OPT_FLAGS) $(SAN_CFLAGS)'               \
                    EXTRA_LDFLAGS='$(SAN_LDFLAGS)'                             \
                    DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
 
@@ -324,7 +326,7 @@ $(HOST_BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile)                    \
                $(APIDIR)/linux/bpf.h                                          \
                | $(HOST_BUILD_DIR)/libbpf
        $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR)                             \
-                   EXTRA_CFLAGS='-g -O0' ARCH= CROSS_COMPILE=                 \
+                   EXTRA_CFLAGS='-g $(OPT_FLAGS)' ARCH= CROSS_COMPILE=        \
                    OUTPUT=$(HOST_BUILD_DIR)/libbpf/                           \
                    CC="$(HOSTCC)" LD="$(HOSTLD)"                              \
                    DESTDIR=$(HOST_SCRATCH_DIR)/ prefix= all install_headers