From: Stephen Hemminger <stephen@networkplumber.org>
To: "Morten Brørup" <mb@smartsharesystems.com>
Cc: Tetsuya Mukawa <mtetsuyah@gmail.com>, dev@dpdk.org
Subject: Re: [PATCH] net/null: Add fast mbuf release TX offload
Date: Thu, 26 Jun 2025 07:05:57 -0700 [thread overview]
Message-ID: <20250626070557.33058157@hermes.local> (raw)
In-Reply-To: <20250624181416.167181-1-mb@smartsharesystems.com>
On Tue, 24 Jun 2025 18:14:16 +0000
Morten Brørup <mb@smartsharesystems.com> wrote:
> Added fast mbuf release, re-using the existing mbuf pool pointer
> in the queue structure.
>
> Signed-off-by: Morten Brørup <mb@smartsharesystems.com>
Makes sense.
> ---
> drivers/net/null/rte_eth_null.c | 30 +++++++++++++++++++++++++++---
> 1 file changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
> index 8a9b74a03b..12c0d8d1ff 100644
> --- a/drivers/net/null/rte_eth_null.c
> +++ b/drivers/net/null/rte_eth_null.c
> @@ -34,6 +34,17 @@ struct pmd_internals;
> struct null_queue {
> struct pmd_internals *internals;
>
> + /**
> + * For RX queue:
> + * Mempool to allocate mbufs from.
> + *
> + * For TX queue:
> + * Mempool to free mbufs to, if fast release of mbufs is enabled.
> + * UINTPTR_MAX if the mempool for fast release of mbufs has not yet been detected.
> + * NULL if fast release of mbufs is not enabled.
> + *
> + * @see RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE
> + */
> struct rte_mempool *mb_pool;
Do all drivers to it this way?
Is it documented in ethdev?
> void *dummy_packet;
>
> @@ -151,7 +162,16 @@ eth_null_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
> for (i = 0; i < nb_bufs; i++)
> bytes += rte_pktmbuf_pkt_len(bufs[i]);
>
> - rte_pktmbuf_free_bulk(bufs, nb_bufs);
> + if (h->mb_pool != NULL) { /* RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE */
> + if (unlikely(h->mb_pool == (void *)UINTPTR_MAX)) {
> + if (unlikely(nb_bufs == 0))
> + return 0; /* Do not dereference uninitialized bufs[0]. */
> + h->mb_pool = bufs[0]->pool;
> + }
> + rte_mbuf_raw_free_bulk(h->mb_pool, bufs, nb_bufs);
> + } else {
> + rte_pktmbuf_free_bulk(bufs, nb_bufs);
> + }
> rte_atomic_fetch_add_explicit(&h->tx_pkts, nb_bufs, rte_memory_order_relaxed);
> rte_atomic_fetch_add_explicit(&h->tx_bytes, bytes, rte_memory_order_relaxed);
>
> @@ -259,7 +279,7 @@ static int
> eth_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
> uint16_t nb_tx_desc __rte_unused,
> unsigned int socket_id __rte_unused,
> - const struct rte_eth_txconf *tx_conf __rte_unused)
> + const struct rte_eth_txconf *tx_conf)
> {
> struct rte_mbuf *dummy_packet;
> struct pmd_internals *internals;
> @@ -284,6 +304,9 @@ eth_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
>
> internals->tx_null_queues[tx_queue_id].internals = internals;
> internals->tx_null_queues[tx_queue_id].dummy_packet = dummy_packet;
> + internals->tx_null_queues[tx_queue_id].mb_pool =
> + tx_conf->offloads & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE ?
> + (void *)UINTPTR_MAX : NULL;
>
> return 0;
> }
> @@ -309,7 +332,8 @@ eth_dev_info(struct rte_eth_dev *dev,
> dev_info->max_rx_queues = RTE_DIM(internals->rx_null_queues);
> dev_info->max_tx_queues = RTE_DIM(internals->tx_null_queues);
> dev_info->min_rx_bufsize = 0;
> - dev_info->tx_offload_capa = RTE_ETH_TX_OFFLOAD_MULTI_SEGS | RTE_ETH_TX_OFFLOAD_MT_LOCKFREE;
> + dev_info->tx_offload_capa = RTE_ETH_TX_OFFLOAD_MULTI_SEGS |
> + RTE_ETH_TX_OFFLOAD_MT_LOCKFREE | RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;
>
> dev_info->reta_size = internals->reta_size;
> dev_info->flow_type_rss_offloads = internals->flow_type_rss_offloads;
next prev parent reply other threads:[~2025-06-26 14:06 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-24 18:14 [PATCH] net/null: Add fast mbuf release TX offload Morten Brørup
2025-06-26 14:05 ` Stephen Hemminger [this message]
2025-06-26 15:44 ` Morten Brørup
2025-06-27 12:07 ` Varghese, Vipin
2025-07-26 4:34 ` Morten Brørup
2025-07-28 8:22 ` Varghese, Vipin
2025-07-26 4:48 ` [PATCH v2] " Morten Brørup
2025-07-26 6:15 ` Ivan Malov
2025-07-28 13:27 ` Morten Brørup
2025-07-28 13:51 ` Ivan Malov
2025-07-28 15:42 ` Konstantin Ananyev
2025-07-28 16:42 ` Morten Brørup
2025-07-30 13:50 ` [PATCH v3] " Morten Brørup
2025-07-30 14:04 ` [PATCH v4] " Morten Brørup
2025-08-04 9:23 ` Varghese, Vipin
2025-08-04 15:39 ` 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=20250626070557.33058157@hermes.local \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=mb@smartsharesystems.com \
--cc=mtetsuyah@gmail.com \
/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.