Hi Eric, On Tue, Feb 27, 2024 at 10:44 AM Eric Dumazet <edumazet@xxxxxxxxxx> wrote: > > Hmm.... > Why napi_busy_loop() does not have a similar problem ? > I just tried and can reproduce similar behavior on sk busy poll. However, the interesting thing is, this can happen if I set a super high polling interval but just send rare packets. In my case I had a 5 sec polling interval (unlikely to be realistic in prod but just for demonstration), then used nc to send a few packets. Here is what bpftrace react: Normal: time sudo bpftrace -e 'kfunc:napi_busy_loop{@=count();} interval:s:1{exit();} kfunc:udp_recvmsg {printf("%ld\n", args->sk->sk_ll_usec);}' Attaching 3 probes... @: 0 real 0m1.527s user 0m0.073s sys 0m0.128s Extra wait when polling: time sudo bpftrace -e 'kfunc:napi_busy_loop{@=count();} interval:s:1{exit();} kfunc:udp_recvmsg {printf("%ld\n", args->sk->sk_ll_usec);}' Attaching 3 probes... 5000000 @: 16 real 0m11.167s user 0m0.070s sys 0m0.120s So the symptoms are the same, bpftrace cannot exit despite having an 1sec timeout. But the execution pattern for these two are probably different: NAPI threads would keep polling by itself, whereas sk poll program might only poll when there is no immediate data. When there are packets, it switches to process packets instead of polling any more. Yan