[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20260113032939.3705137-1-wei.fang@nxp.com>
Date: Tue, 13 Jan 2026 11:29:28 +0800
From: Wei Fang <wei.fang@....com>
To: shenwei.wang@....com,
xiaoning.wang@....com,
frank.li@....com,
andrew+netdev@...n.ch,
davem@...emloft.net,
edumazet@...gle.com,
kuba@...nel.org,
pabeni@...hat.com,
ast@...nel.org,
daniel@...earbox.net,
hawk@...nel.org,
john.fastabend@...il.com,
sdf@...ichev.me
Cc: netdev@...r.kernel.org,
linux-kernel@...r.kernel.org,
imx@...ts.linux.dev,
bpf@...r.kernel.org
Subject: [PATCH net-next 00/11] net: fec: improve XDP copy mode and add AF_XDP zero-copy support
This patch set optimizes the XDP copy mode logic as follows.
1. Separate the processing of RX XDP frames from fec_enet_rx_queue(),
and adds a separate function fec_enet_rx_queue_xdp() for handling XDP
frames.
2. For TX XDP packets, using the batch sending method to avoid frequent
MMIO writes.
3. Use the switch statement to check the tx_buf type instead of the
if...else... statement, making the cleanup logic of TX BD ring cleared
and more efficient.
We compared the performance of XDP copy mode before and after applying
this patch set, and the results show that the performance has improved.
Before applying this patch set.
root@...93evk:~# ./xdp-bench tx eth0
Summary 396,868 rx/s 0 err,drop/s
Summary 396,024 rx/s 0 err,drop/s
Summary 402,105 rx/s 0 err,drop/s
Summary 402,501 rx/s 0 err,drop/s
root@...93evk:~# ./xdp-bench drop eth0
Summary 684,781 rx/s 0 err/s
Summary 675,746 rx/s 0 err/s
Summary 667,000 rx/s 0 err/s
Summary 667,960 rx/s 0 err/s
root@...93evk:~# ./xdp-bench pass eth0
Summary 208,552 rx/s 0 err,drop/s
Summary 208,654 rx/s 0 err,drop/s
Summary 208,502 rx/s 0 err,drop/s
Summary 208,797 rx/s 0 err,drop/s
root@...93evk:~# ./xdp-bench redirect eth0 eth0
eth0->eth0 311,210 rx/s 0 err,drop/s 311,208 xmit/s
eth0->eth0 310,808 rx/s 0 err,drop/s 310,809 xmit/s
eth0->eth0 311,340 rx/s 0 err,drop/s 311,339 xmit/s
eth0->eth0 312,030 rx/s 0 err,drop/s 312,031 xmit/s
After applying this patch set.
root@...93evk:~# ./xdp-bench tx eth0
Summary 425,778 rx/s 0 err,drop/s
Summary 426,042 rx/s 0 err,drop/s
Summary 427,266 rx/s 0 err,drop/s
Summary 428,805 rx/s 0 err,drop/s
root@...93evk:~# ./xdp-bench drop eth0
Summary 698,351 rx/s 0 err/s
Summary 701,882 rx/s 0 err/s
Summary 694,596 rx/s 0 err/s
Summary 699,832 rx/s 0 err/s
root@...93evk:~# ./xdp-bench pass eth0
Summary 210,348 rx/s 0 err,drop/s
Summary 210,016 rx/s 0 err,drop/s
Summary 209,854 rx/s 0 err,drop/s
Summary 209,973 rx/s 0 err,drop/s
root@...93evk:~# ./xdp-bench redirect eth0 eth0
eth0->eth0 354,407 rx/s 0 err,drop/s 354,401 xmit/s
eth0->eth0 350,381 rx/s 0 err,drop/s 350,389 xmit/s
eth0->eth0 350,966 rx/s 0 err,drop/s 350,959 xmit/s
eth0->eth0 348,488 rx/s 0 err,drop/s 348,488 xmit/s
This patch set also addes the AF_XDP zero-copy support, and we tested
the performance on i.MX93 platform with xdpsock tool. The following is
the performance comparison of copy mode and zero-copy mode. It can be
seen that the performance of zero-copy mode is better than that of copy
mode.
1. MAC swap L2 forwarding
1.1 Zero-copy mode
root@...93evk:~# ./xdpsock -i eth0 -l -z
sock0@...0:0 l2fwd xdp-drv
pps pkts 1.00
rx 414715 415455
tx 414715 415455
1.2 Copy mode
root@...93evk:~# ./xdpsock -i eth0 -l -c
sock0@...0:0 l2fwd xdp-drv
pps pkts 1.00
rx 356396 356609
tx 356396 356609
2. TX only
2.1 Zero-copy mode
root@...93evk:~# ./xdpsock -i eth0 -t -s 64 -z
sock0@...0:0 txonly xdp-drv
pps pkts 1.00
rx 0 0
tx 1119573 1126720
2.2 Copy mode
root@...93evk:~# ./xdpsock -i eth0 -t -s 64 -c
sock0@...0:0 txonly xdp-drv
pps pkts 1.00
rx 0 0
tx 406864 407616
Wei Fang (11):
net: fec: add fec_txq_trigger_xmit() helper
net: fec: add fec_rx_error_check() to check RX errors
net: fec: add rx_shift to indicate the extra bytes padded in front of
RX frame
net: fec: add fec_build_skb() to build a skb
net: fec: add fec_enet_rx_queue_xdp() for XDP path
net: fec: transmit XDP frames in bulk
net: fec: use switch statement to check the type of tx_buf
net: fec: remove the size parameter from fec_enet_create_page_pool()
net: fec: move xdp_rxq_info* APIs out of fec_enet_create_page_pool()
net: fec: add fec_alloc_rxq_buffers_pp() to allocate buffers from page
pool
net: fec: add AF_XDP zero-copy support
drivers/net/ethernet/freescale/fec.h | 14 +-
drivers/net/ethernet/freescale/fec_main.c | 1436 +++++++++++++++------
2 files changed, 1068 insertions(+), 382 deletions(-)
--
2.34.1
Powered by blists - more mailing lists