Re: [PATCH bpf-next] selftests/bpf: make multi-uprobe tests work in RELEASE=1 mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 29, 2024 at 11:21 AM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:
>
> On Fri, Mar 29, 2024 at 10:37 AM Andrii Nakryiko <andrii@xxxxxxxxxx> wrote:
> >
> > When BPF selftests are built in RELEASE=1 mode with -O2 optimization
> > level, uprobe_multi binary, called from multi-uprobe tests is optimized
> > to the point that all the thousands of target uprobe_multi_func_XXX
> > functions are eliminated, breaking tests.
> >
> > So ensure they are preserved through noinline + asm volatile trick.
> >
> > But, actually, compiling uprobe_multi binary with -O2 takes a really
> > long time, and is quite useless (it's not a benchmark). So in addition
> > to ensuring that uprobe_multi_func_XXX functions are preserved, opt-out
> > of -O2 explicitly in Makefile and stick to -O0. This saves a lot of
> > compilation time.
> >
> > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx>
> > ---
> >  tools/testing/selftests/bpf/Makefile       | 2 +-
> >  tools/testing/selftests/bpf/uprobe_multi.c | 4 +++-
> >  2 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> > index 3b9eb40d6343..b0ac3dd80acf 100644
> > --- a/tools/testing/selftests/bpf/Makefile
> > +++ b/tools/testing/selftests/bpf/Makefile
> > @@ -759,7 +759,7 @@ $(OUTPUT)/veristat: $(OUTPUT)/veristat.o
> >
> >  $(OUTPUT)/uprobe_multi: uprobe_multi.c
> >         $(call msg,BINARY,,$@)
> > -       $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
> > +       $(Q)$(CC) $(CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
> >
> >  EXTRA_CLEAN := $(SCRATCH_DIR) $(HOST_SCRATCH_DIR)                      \
> >         prog_tests/tests.h map_tests/tests.h verifier/tests.h           \
> > diff --git a/tools/testing/selftests/bpf/uprobe_multi.c b/tools/testing/selftests/bpf/uprobe_multi.c
> > index a61ceab60b68..e38228563766 100644
> > --- a/tools/testing/selftests/bpf/uprobe_multi.c
> > +++ b/tools/testing/selftests/bpf/uprobe_multi.c
> > @@ -9,7 +9,9 @@
> >
> >  #define NAME(name, idx) PASTE(name, idx)
> >
> > -#define DEF(name, idx)  int NAME(name, idx)(void) { return 0; }
> > +#define DEF(name, idx) \
> > +       int __attribute__((noinline)) \
> > +       NAME(name, idx)(void) { asm volatile (""); return 0; }
>
> I prefer to use __weak to avoid inlining and compiler optimizations.
> It's less work for compiler as well,
> since noinline doesn't tell compiler to stop analyzing the body
> of the function, while __weak does have such an effect.
> And asm won't be necessary as well.


makes sense, will do __weak, maybe it will make -O0 unnecessary as well





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux