> On Tue, Apr 1, 2025 at 8:07 PM Jose E. Marchesi
> <jose.march...@oracle.com> wrote:
>>
>> Hello Piyush.
> Hello Jose,
>
>> Sounds like a quite good background.
> Thank you!
>
>> Have you built GCC from sources?
> Yes, I have. I built GCC while working on LFS and recently rebuilt it,
> running the test suite while going through the "Before you apply"
> section on the GSoC page.
>> > I found "Tooling for Running BPF GCC Tests on a Live Kernel"
>> > interesting and intend to apply for it in GSoC 2025.
>>
>> Thank you for your interest in working in this project in particular.
>> It is an important task, and would greatly help the maintenance of the
>> BPF port in the compiler.
>>
>> The BPF verifier is very picky and rejects a great deal of compiled
>> valid C code.  This basically means that any legit change in the
>> compiler, such as a new optimization or even a bug fix, can potentially
>> make it to generate non-verifiable code.  Thus having a way to detect
>> such regressions is very important.
>>
>> > From my research
>> > on the current BPF development landscape:
>> > - Only the kernel has tests against a live kernel [6], while Clang and
>> > GCC perform compile-time tests.
>>
>> Correct.
>>
>> > - BPF CI [7] mainly tests kernel patches for regressions against the
>> > latest GCC and LLVM snapshots, so it does not help much in catching
>> > regressions in GCC itself.
>>
>> Also correct.  As explained above, compiler changes can make the
>> verifier unhappy.  But so can new selftests added to the kernel that
>> produce unveifiable code.
>>
>> > - Another project, little-vm-helper [8] by Cilium, also uses a
>> > VM-based approach for BPF testing.
>>
>> I wasn't aware of that project.  It may be a good reference, or maybe
>> not, depending.
>>
>> > If there are other BPF testing projects that I should look into,
>> > please let me know.
>>
>> At the past LSFMM conference someone suggested us to look at virtme-ng.
> Thanks! I’ll check it out.
>
>> Daniel Xu, a BPF kernel developer (who I added in CC) also recommended
>> we look at https://github.com/danobi/vmtest, which he wrote.
>
> Yes, I came across Daniel’s work during my research [1][2]. I was
> planning to use vmtest for running the VM like in BPF CI.
>
>> > I have a few questions and would appreciate any guidance from the
>> > community
>> >
>> > 1. Are there specific BPF features or functionalities that cannot be
>> > effectively tested in a VM environment due to virtualization?
>>
>> I don't think so.
>>
>> > 2. Should the new BPF test suite focus only on execution tests for
>> > programs, or can we also include kernel selftests?
>>
>> I would focus on compiler oriented tests, exercising source
>> constructions that have proven to generate unverifiable code.  In
>> contrast the kernel selftests focus on exercising all the supported BPF
>> features in the kernel.
>
>> The main goal of the testing shall be detecting verification
>> regressions.
>
> Understood! Are there any existing collections of such source files
> that have caused verification failures? Are they tracked in Bugzilla
> beyond these issues [3]?

We get reports occassionally and normally we open bugzillas for them,
but not always.

We can compile a list of recent fixes for particular verification
failure so a set of initial tests can be written during the GSOC
project.

Going forward, once the run-time testsuite is in place, each fix shall
be accompanied with the corresponding new test(s).

>> > 3. The GDB simulator currently lacks full support for BPF features.
>> > How do GCC developers typically debug the BPF programs generated by
>> > GCC?
>>
>> We just look at the generated code when there are verification failures
>> and try to determine, from the kernel verifier's output, what led to
>> generating such code.
>>
>> > Would attaching a GDB debugger to the virtual machine[9] serve as an
>> > effective debugging strategy?
>>
>> I don't think that is currently a possibility.  AFAIK you can connect
>> GDB to a running kernel in say qemu, and debug the kernel code.  But I
>> dont think you can debug BPF-jitted code.  It is an intriguing
>> possibility, but I think out of scope of this particular GSOC project.
>> > Additionally, would automating this process provide significant value
>> > to developers?
>>
>> I don't understand.  Automating what exactly?
>
> I meant automating the process of opening a debugger with breakpoints
> when the kernel starts executing eBPF code. But as you mentioned
> earlier, this may not be feasible or would require more work than fits
> within the current GSoC scope.

BPF programs are hooked into the kernel via several mechanisms: kprobes,
etc.  There may be a way to locate these points using GDB.

However, note that the BPF code gets JITted into whatever native native
instructions of the host architecture.  Having a debugger relating the
JITted native instructions to the corresponding source locations would
require the JITter to somehow translate the debug info as well I
guess...  an interesting perspective but definitely out of scope of this
project :)

>
> I also found some ongoing work related to BPF debugging in the kernel
> [4].
>
> Thank you,
> Piyush
>
> [1] http://oldvger.kernel.org/bpfconf2024_material/BPF-CI.pdf
> [2] https://www.youtube.com/watch?v=NT-325hgXjY
> [3]
> https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=SUSPENDED&bug_status=WAITING&bug_status=REOPENED&cf_known_to_fail_type=allwords&cf_known_to_work_type=allwords&order=Importance&query_format=advanced&short_desc=bpf&short_desc_type=allwordssubstr
> [4] 
> https://lore.kernel.org/lkml/am6pr03mb50804a5bf211e94a5df8f66699...@am6pr03mb5080.eurprd03.prod.outlook.com/

Reply via email to