On 6/6/25 7:57 AM, Pavel Begunkov wrote: > This series adds io_uring BPF struct_ops, which allows processing > events and submitting requests from BPF without returning to user. > There is only one callback for now, it's called from the io_uring > CQ waiting loop when there is an event to be processed. It also > has access to waiting parameters like batching and timeouts. > > It's tested with a program that queues a nop request, waits for > its completion and then queues another request, repeating it N > times. The baseline to compare with is traditional io_uring > application doing same without BPF and using 2 requests links, > with the same total number of requests. > > # ./link 0 100000000 > type 2-LINK, requests to run 100000000 > sec 20, total (ms) 20374 > # ./link 1 100000000 > type BPF, requests to run 100000000 > sec 13, total (ms) 13700 > > The BPF version works ~50% faster on a mitigated kernel, while it's > not even a completely fair comparison as links are restrictive and > can't always be used. Without links the speedup reaches ~80%. Nifty! Great to see the BPF side taking shape, I can think of many cool things we could do with that. Out of curiosity, tested this on my usual arm64 vm on the laptop: axboe@m2max-kvm ~/g/l/examples-bpf (bpf) [1]> ./link 0 100000000 type 2-LINK, requests to run 100000000 sec 13, total (ms) 13868 axboe@m2max-kvm ~/g/l/examples-bpf (bpf)> sudo ./link 1 100000000 type BPF, requests to run 100000000 sec 4, total (ms) 4929 No mitigations or anything configured in this kernel. I'll take a closer look at the patches. -- Jens Axboe