RE: [Intel-wired-lan] [PATCH iwl-next v5 01/13] xdp, libeth: make the xdp_init_buff() micro-optimization generic
From: R, Ramu <hidden>
Date: 2025-09-04 16:45:02
Also in:
bpf, intel-wired-lan, lkml
-----Original Message----- From: Intel-wired-lan <redacted> On Behalf Of Alexander Lobakin Sent: Tuesday, August 26, 2025 9:25 PM To: intel-wired-lan@lists.osuosl.org Cc: Lobakin, Aleksander <aleksander.lobakin@intel.com>; Kubiak, Michal [off-list ref]; Fijalkowski, Maciej [off-list ref]; Nguyen, Anthony L [off-list ref]; Kitszel, Przemyslaw [off-list ref]; Andrew Lunn [off-list ref]; David S. Miller [off-list ref]; Eric Dumazet [off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni [off-list ref]; Alexei Starovoitov [off-list ref]; Daniel Borkmann [off-list ref]; Simon Horman [off-list ref]; NXNE CNSE OSDT ITP Upstreaming [off-list ref]; bpf@vger.kernel.org; netdev@vger.kernel.org; linux-kernel@vger.kernel.org Subject: [Intel-wired-lan] [PATCH iwl-next v5 01/13] xdp, libeth: make the xdp_init_buff() micro-optimization generic Often times the compilers are not able to expand two consecutive 32-bit writes into one 64-bit on the corresponding architectures. This applies to xdp_init_buff() called for every received frame (or at least once per each 64 frames when the frag size is fixed). Move the not-so-pretty hack from libeth_xdp straight to xdp_init_buff(), but using a proper union around ::frame_sz and ::flags. The optimization is limited to LE architectures due to the structure layout. One simple example from idpf with the XDP series applied (Clang 22-git, CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE => -O2): add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-27 (-27) Function old new delta idpf_vport_splitq_napi_poll 5076 5049 -27 The perf difference with XDP_DROP is around +0.8-1% which I see as more than satisfying. Suggested-by: Simon Horman <horms@kernel.org> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> --- include/net/libeth/xdp.h | 11 +---------- include/net/xdp.h | 28 +++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 13 deletions(-)
Tested-by: R,Ramu <redacted>