From: Stephen Hemminger <stephen@networkplumber.org>
To: Junlong Wang <wang.junlong1@zte.com.cn>
Cc: dev@dpdk.org
Subject: Re: [PATCH v1] net/zxdh: optimize Rx/Tx path performance
Date: Sun, 5 Apr 2026 21:26:08 -0700 [thread overview]
Message-ID: <20260405212608.7c9f9ca5@phoenix.local> (raw)
In-Reply-To: <20260326022828.998541-1-wang.junlong1@zte.com.cn>
On Thu, 26 Mar 2026 10:28:28 +0800
Junlong Wang <wang.junlong1@zte.com.cn> wrote:
> This patch optimizes the ZXDH PMD's receive and transmit path for better
> performance through several improvements:
>
> - Add simple TX/RX burst functions (zxdh_xmit_pkts_simple and
> zxdh_recv_single_pkts) for single-segment packet scenarios.
> - Remove RX software ring (sw_ring) to reduce memory allocation and
> copy.
> - Optimize descriptor management with prefetching and simplified
> cleanup.
> - Reorganize structure fields for better cache locality.
>
> These changes reduce CPU cycles and memory bandwidth consumption,
> resulting in improved packet processing throughput.
>
> Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn>
I saw some things when reviewing but AI found lots more
On Thu, 26 Mar 2026 10:28:28 +0800
Junlong Wang <wang.junlong1@zte.com.cn> wrote:
> This patch optimizes the ZXDH PMD's receive and transmit path for better
> performance through several improvements:
Several issues found in review.
Errors:
1. zxdh_rxtx.c, pkt_padding(): The return value is never checked by
the caller submit_to_backend_simple(). If rte_pktmbuf_prepend()
fails and pkt_padding() returns -1, the descriptor is still
written with the mbuf's iova and data_len, submitting a corrupt
packet to the device. Must check the return value and skip the
packet on failure.
2. zxdh_rxtx.c, zxdh_recv_single_pkts(): When zxdh_init_mbuf() fails
the loop does "break" instead of continuing or freeing the
remaining mbufs. The mbufs at rcv_pkts[i+1] through
rcv_pkts[num-1] were already dequeued from the virtqueue by
zxdh_dequeue_burst_rx_packed() but are never freed, leaking them.
3. zxdh_rxtx.c, refill_desc_unwrap(): Descriptors are written with a
plain store "start_dp[idx].flags = flags" instead of using
zxdh_queue_store_flags_packed(). The original
zxdh_enqueue_recv_refill_packed() uses the store-barrier version
to ensure addr/len are visible before the flags. Without the
barrier, the device could see the available flag before the
descriptor data is committed. The rte_io_wmb() at the end of
refill_que_descs() is after all flags are already written, so
it does not help.
4. zxdh_rxtx.c, zxdh_xmit_pkts_prepare(): The removal of
rte_net_intel_cksum_prepare() means packets requesting checksum
offload will not have their pseudo-headers prepared. If the HW
expects a pseudo-header, transmitted checksums will be incorrect.
5. zxdh_queue.h, zxdh_queue_enable_intr(): This function checks
"if (event_flags_shadow == DISABLE)" then sets it to DISABLE
again. It never actually enables interrupts. Pre-existing bug
but this patch touches the function and should fix it.
6. zxdh_ethdev.c, zxdh_init_queue(): The hdr_mz NULL check logic is
contradictory. Lines 158-162 check "if (hdr_mz == NULL)" and goto
fail_q_alloc, but line 169 then checks "if (hdr_mz)" before
assigning zxdh_net_hdr_mem. If the first check fires, the second
is unreachable. If it doesn't fire, the second is always true.
Pick one guard and use it consistently.
Warnings:
1. zxdh_rxtx.c, zxdh_xmit_pkts_simple(): stats.bytes is never
incremented. The packed path uses zxdh_update_packet_stats() but
the simple path only counts packets and idle. The good_bytes
xstat will always read zero on the simple TX path.
2. zxdh_rxtx.c, zxdh_recv_single_pkts(): Same issue -- stats.bytes
is never incremented, so good_bytes will always be zero on the
single-packet receive path.
3. zxdh_rxtx.c, zxdh_init_mbuf(): rte_pktmbuf_dump(stdout, rxm, 40)
should not be in production code. It writes to stdout
unconditionally on the error path. Use PMD_RX_LOG or remove it.
4. zxdh_ethdev.c, zxdh_dev_free_mbufs(): Changed from
rte_pktmbuf_free() to rte_pktmbuf_free_seg(). If any mbufs in
the TX queue are multi-segment (from the packed path which
handles multi-seg via zxdh_xmit_enqueue_append), only the first
segment will be freed, leaking the rest.
5. This patch is large (~800 lines, 8 files) and combines multiple
independent changes: structure reorganization, new fast-path
functions, sw_ring removal, descriptor management, removal of
rte_net_intel_cksum_prepare, and MTU validation. Splitting into
separate patches would make review and bisection easier.
next prev parent reply other threads:[~2026-04-06 4:26 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-26 2:28 [PATCH v1] net/zxdh: optimize Rx/Tx path performance Junlong Wang
2026-03-26 3:27 ` Stephen Hemminger
2026-04-06 4:26 ` Stephen Hemminger [this message]
2026-04-23 1:18 ` [PATCH v2 0/3] " Junlong Wang
2026-04-23 1:18 ` [PATCH v2 1/3] net/zxdh: optimize queue structure to improve performance Junlong Wang
2026-04-23 18:57 ` Stephen Hemminger
2026-04-23 1:18 ` [PATCH v2 2/3] net/zxdh: optimize Rx recv pkts performance Junlong Wang
2026-04-23 18:54 ` Stephen Hemminger
2026-04-23 23:39 ` Stephen Hemminger
2026-04-23 1:18 ` [PATCH v2 3/3] net/zxdh: optimize Tx xmit " Junlong Wang
2026-04-23 19:23 ` [PATCH v2 0/3] net/zxdh: optimize Rx/Tx path performance Stephen Hemminger
2026-05-09 6:29 ` [PATCH v3 " Junlong Wang
2026-05-09 6:29 ` [PATCH v3 1/3] net/zxdh: optimize queue structure to improve performance Junlong Wang
2026-05-18 2:20 ` Stephen Hemminger
2026-05-09 6:29 ` [PATCH v3 2/3] net/zxdh: optimize Rx recv pkts performance Junlong Wang
2026-05-09 6:29 ` [PATCH v3 3/3] net/zxdh: optimize Tx xmit " Junlong Wang
2026-05-18 2:22 ` Stephen Hemminger
2026-06-06 6:32 ` [PATCH v4 0/4] net/zxdh: optimize Rx/Tx path performance Junlong Wang
2026-06-06 6:32 ` [PATCH v4 1/4] net/zxdh: optimize queue structure to improve performance Junlong Wang
2026-06-06 6:32 ` [PATCH v4 2/4] net/zxdh: optimize Rx recv pkts performance Junlong Wang
2026-06-06 6:32 ` [PATCH v4 3/4] net/zxdh: optimize Tx xmit " Junlong Wang
2026-06-06 6:32 ` [PATCH v4 4/4] net/zxdh: fix queue enable intr issues Junlong Wang
2026-06-07 18:00 ` [PATCH v4 0/4] net/zxdh: optimize Rx/Tx path performance Stephen Hemminger
2026-06-15 1:19 ` [PATCH v5 " Junlong Wang
2026-06-15 1:19 ` [PATCH v5 1/4] net/zxdh: fix queue enable intr issues Junlong Wang
2026-06-15 1:19 ` [PATCH v5 2/4] net/zxdh: optimize queue structure to improve performance Junlong Wang
2026-06-15 1:19 ` [PATCH v5 3/4] net/zxdh: optimize Rx recv pkts performance Junlong Wang
2026-06-15 1:19 ` [PATCH v5 4/4] net/zxdh: optimize Tx xmit " Junlong Wang
2026-06-15 18:38 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260405212608.7c9f9ca5@phoenix.local \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=wang.junlong1@zte.com.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.