From: Jiri Olsa <olsajiri@gmail.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Jiri Olsa <olsajiri@gmail.com>,
Andrii Nakryiko <andrii@kernel.org>,
bpf@vger.kernel.org, linux-mm@kvack.org,
akpm@linux-foundation.org, adobriyan@gmail.com,
shakeel.butt@linux.dev, hannes@cmpxchg.org, ak@linux.intel.com,
osandov@osandov.com, song@kernel.org
Subject: Re: [PATCH v2 bpf-next 10/10] selftests/bpf: add build ID tests
Date: Tue, 30 Jul 2024 22:18:09 +0200 [thread overview]
Message-ID: <ZqlKgdb59gPL6Z3D@krava> (raw)
In-Reply-To: <CAEf4BzZtu_LWu82z9RFDf00a77uJuEpqYtuJWqz2zvm8jG3UWA@mail.gmail.com>
On Tue, Jul 30, 2024 at 01:03:17PM -0700, Andrii Nakryiko wrote:
> On Sun, Jul 28, 2024 at 12:38 PM Jiri Olsa <olsajiri@gmail.com> wrote:
> >
> > On Fri, Jul 26, 2024 at 05:37:55PM -0700, Andrii Nakryiko wrote:
> > > On Fri, Jul 26, 2024 at 5:27 AM Jiri Olsa <olsajiri@gmail.com> wrote:
> > > >
> > > > On Thu, Jul 25, 2024 at 01:03:55PM -0700, Andrii Nakryiko wrote:
> > > > > On Thu, Jul 25, 2024 at 5:12 AM Jiri Olsa <olsajiri@gmail.com> wrote:
> > > > > >
> > > > > > On Wed, Jul 24, 2024 at 03:52:10PM -0700, Andrii Nakryiko wrote:
> > > > > > > Add a new set of tests validating behavior of capturing stack traces
> > > > > > > with build ID. We extend uprobe_multi target binary with ability to
> > > > > > > trigger uprobe (so that we can capture stack traces from it), but also
> > > > > > > we allow to force build ID data to be either resident or non-resident in
> > > > > > > memory (see also a comment about quirks of MADV_PAGEOUT).
> > > > > > >
> > > > > > > That way we can validate that in non-sleepable context we won't get
> > > > > > > build ID (as expected), but with sleepable uprobes we will get that
> > > > > > > build ID regardless of it being physically present in memory.
> > > > > > >
> > > > > > > Also, we add a small add-on linker script which reorders
> > > > > > > .note.gnu.build-id section and puts it after (big) .text section,
> > > > > > > putting build ID data outside of the very first page of ELF file. This
> > > > > > > will test all the relaxations we did in build ID parsing logic in kernel
> > > > > > > thanks to freader abstraction.
> > > > > > >
> > > > > > > Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
> > > > > >
> > > > > > one of my bpf selftests runs showed:
> > > > > >
> > > > > > test_build_id:PASS:parse_build_id 0 nsec
> > > > > > subtest_nofault:PASS:skel_open 0 nsec
> > > > > > subtest_nofault:PASS:link 0 nsec
> > > > > > subtest_nofault:PASS:trigger_uprobe 0 nsec
> > > > > > subtest_nofault:PASS:res 0 nsec
> > > > > > subtest_nofault:FAIL:build_id_status unexpected build_id_status: actual 1 != expected 2
> > > > > > #42/1 build_id/nofault-paged-out:FAIL
> > > > > > #42/2 build_id/nofault-paged-in:OK
> > > > > > #42/3 build_id/sleepable:OK
> > > > > > #42 build_id:FAIL
> > > > > >
> > > > > > I could never reproduce again.. but I wonder the the page could sneak
> > > > > > in before the bpf program is hit and the buildid will get parsed?
> > > > > >
> > > > >
> > > > > Yes, and I just realized that I forgot to mark this test as serial. If
> > > > > there is parallel test that also runs uprobe_multi and that causes
> > > > > build_id page to be paged in into page cache, then this might succeed.
> > > > > So I need to mark the test itself serial.
> > > > >
> > > > > Another issue which I was debugging (and fixed) yesterday was that if
> > > > > the memory passed for MADV_PAGEOUT is not yet memory mapped into the
> > > > > current process, then it won't be really removed from the page cache.
> > > > > I avoid that by first paging it in, and then MADV_PAGEOUT.
> > > >
> > > > ok, I triggered that in serial run, so I probably hit this one
> > > >
> > >
> > > you did it with v2 of the patch set? I had this bug in v1, but v2
> > > should be fine, as far as I understand (due to unconditional
> > > madvise(addr, page_sz, MADV_POPULATE_READ); before madvise(addr,
> > > page_sz, MADV_PAGEOUT)). At least I haven't been able to reproduce
> > > that anymore and BPF CI is now happy as well.
> >
> > yes, it's with v2 and I can still see that.. but only for the first run of
> > the test after reboot.. so far I have no clue.. I can see the successful
> > page-out madvise (still not sure how much is that telling about the page
> > being paged out), and then the build id code sees the page just fine
> >
> > attaching my .config in case
> >
>
> I wasn't able to repro this, sorry. It works very reliably for me with
> your or my config. Given it also seems to work reliably in BPF CI, I'm
> still inclined to add this tests, I think it's good to have that
> coverage.
>
> I'll monitor, and if it becomes flaky, we'll need to reassess this, of course.
np, I'll try to spend some more time on it
jirka
next prev parent reply other threads:[~2024-07-30 20:18 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-24 22:52 [PATCH v2 bpf-next 00/10] Harden and extend ELF build ID parsing logic Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 01/10] lib/buildid: add single page-based file reader abstraction Andrii Nakryiko
2024-07-25 12:03 ` Jiri Olsa
2024-07-25 19:58 ` Andrii Nakryiko
2024-07-26 12:31 ` Jiri Olsa
2024-07-25 22:43 ` Andi Kleen
2024-07-27 0:26 ` Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 02/10] lib/buildid: take into account e_phoff when fetching program headers Andrii Nakryiko
2024-07-25 12:03 ` Jiri Olsa
2024-07-25 19:59 ` Andrii Nakryiko
2024-07-25 22:45 ` Andi Kleen
2024-07-27 0:30 ` Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 03/10] lib/buildid: remove single-page limit for PHDR search Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 04/10] lib/buildid: rename build_id_parse() into build_id_parse_nofault() Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 05/10] lib/buildid: implement sleepable build_id_parse() API Andrii Nakryiko
2024-07-25 22:46 ` Andi Kleen
2024-07-27 0:36 ` Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 06/10] lib/buildid: don't limit .note.gnu.build-id to the first page in ELF Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 07/10] lib/buildid: harden build ID parsing logic some more Andrii Nakryiko
2024-07-29 16:15 ` Jann Horn
2024-07-29 16:57 ` Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 08/10] bpf: decouple stack_map_get_build_id_offset() from perf_callchain_entry Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 09/10] bpf: wire up sleepable bpf_get_stack() and bpf_get_task_stack() helpers Andrii Nakryiko
2024-07-24 22:52 ` [PATCH v2 bpf-next 10/10] selftests/bpf: add build ID tests Andrii Nakryiko
2024-07-25 12:04 ` Jiri Olsa
2024-07-25 20:01 ` Andrii Nakryiko
2024-07-25 12:12 ` Jiri Olsa
2024-07-25 20:03 ` Andrii Nakryiko
2024-07-26 12:27 ` Jiri Olsa
2024-07-27 0:37 ` Andrii Nakryiko
2024-07-28 19:38 ` Jiri Olsa
2024-07-30 20:03 ` Andrii Nakryiko
2024-07-30 20:18 ` Jiri Olsa [this message]
2025-09-10 6:09 ` Saket Kumar Bhaskar
2025-09-10 14:18 ` Andrii Nakryiko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZqlKgdb59gPL6Z3D@krava \
--to=olsajiri@gmail.com \
--cc=adobriyan@gmail.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=andrii.nakryiko@gmail.com \
--cc=andrii@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=hannes@cmpxchg.org \
--cc=linux-mm@kvack.org \
--cc=osandov@osandov.com \
--cc=shakeel.butt@linux.dev \
--cc=song@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.