Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

bpf, cpumap: Move xdp:xdp_cpumap_kthread tracepoint before rcv

cpumap takes RX processing out of softirq and onto a separate kthread.
Since the kthread needs to be scheduled in order to run (versus softirq
which does not), we can theoretically experience extra latency if the
system is under load and the scheduler is being unfair to us.

Moving the tracepoint to before passing the skb list up the stack allows
users to more accurately measure enqueue/dequeue latency introduced by
cpumap via xdp:xdp_cpumap_enqueue and xdp:xdp_cpumap_kthread tracepoints.

f9419f7bd7a5 ("bpf: cpumap add tracepoints") which added the tracepoints
states that the intent behind them was for general observability and for
a feedback loop to see if the queues are being overwhelmed. This change
does not mess with either of those use cases but rather adds a third
one.

Signed-off-by: Daniel Xu <dxu@dxuuu.xyz>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
Link: https://lore.kernel.org/bpf/47615d5b5e302e4bd30220473779e98b492d47cd.1725585718.git.dxu@dxuuu.xyz

authored by

Daniel Xu and committed by
Daniel Borkmann
23dc9867 d41905b3

+4 -2
+4 -2
kernel/bpf/cpumap.c
··· 354 354 355 355 list_add_tail(&skb->list, &list); 356 356 } 357 - netif_receive_skb_list(&list); 358 357 359 - /* Feedback loop via tracepoint */ 358 + /* Feedback loop via tracepoint. 359 + * NB: keep before recv to allow measuring enqueue/dequeue latency. 360 + */ 360 361 trace_xdp_cpumap_kthread(rcpu->map_id, n, kmem_alloc_drops, 361 362 sched, &stats); 362 363 364 + netif_receive_skb_list(&list); 363 365 local_bh_enable(); /* resched point, may call do_softirq() */ 364 366 } 365 367 __set_current_state(TASK_RUNNING);