On Mon, Oct 7, 2019 at 11:18 PM Sridhar Samudrala <sridhar.samudrala@xxxxxxxxx> wrote: > + > +u32 bpf_direct_xsk(const struct bpf_prog *prog, struct xdp_buff *xdp) > +{ > + struct xdp_sock *xsk; > + > + xsk = xdp_get_xsk_from_qid(xdp->rxq->dev, xdp->rxq->queue_index); > + if (xsk) { > + struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info); > + > + ri->xsk = xsk; > + return XDP_REDIRECT; > + } > + > + return XDP_PASS; > +} > +EXPORT_SYMBOL(bpf_direct_xsk); So you're saying there is a: """ xdpsock rxdrop 1 core (both app and queue's irq pinned to the same core) default : taskset -c 1 ./xdpsock -i enp66s0f0 -r -q 1 direct-xsk :taskset -c 1 ./xdpsock -i enp66s0f0 -r -q 1 6.1x improvement in drop rate """ 6.1x gain running above C code vs exactly equivalent BPF code? How is that possible?