From: Ferruh Yigit <ferruh.yigit@amd.com>
To: Long Li <longli@microsoft.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [Patch v2] net/mana: use rte_pktmbuf_alloc_bulk for allocating RX WQEs
Date: Tue, 30 Jan 2024 22:34:06 +0000 [thread overview]
Message-ID: <b1423042-03aa-41bf-af78-094f7022b019@amd.com> (raw)
In-Reply-To: <PH7PR21MB3263E4153A1FB73098D4A9BDCE7D2@PH7PR21MB3263.namprd21.prod.outlook.com>
On 1/30/2024 9:30 PM, Long Li wrote:
>> Can you please quantify the performance improvement (as percentage), this
>> clarifies the impact of the modification.
>
> I didn't see any meaningful performance improvements in benchmarks. However, this should improve CPU cycles and reduce potential locking conflicts in real-world applications.
>
> Using batch allocation was one of the review comments during initial driver submission, suggested by Stephen Hemminger. I promised to fix it at that time. Sorry it took a while to submit this patch.
>
That is OK, using bulk alloc is reasonable approach, only can you please
document the impact (performance increase) in the commit log.
>>
>> <...>
>>
>>> @@ -121,19 +115,32 @@ mana_alloc_and_post_rx_wqe(struct mana_rxq
>> *rxq)
>>> * Post work requests for a Rx queue.
>>> */
>>> static int
>>> -mana_alloc_and_post_rx_wqes(struct mana_rxq *rxq)
>>> +mana_alloc_and_post_rx_wqes(struct mana_rxq *rxq, uint32_t count)
>>> {
>>> int ret;
>>> uint32_t i;
>>> + struct rte_mbuf **mbufs;
>>> +
>>> + mbufs = rte_calloc_socket("mana_rx_mbufs", count, sizeof(struct
>> rte_mbuf *),
>>> + 0, rxq->mp->socket_id);
>>> + if (!mbufs)
>>> + return -ENOMEM;
>>>
>>
>> 'mbufs' is temporarily storage for allocated mbuf pointers, why not allocate if from
>> stack instead, can be faster and easier to manage:
>> "struct rte_mbuf *mbufs[count]"
>>
>>
>>> +
>>> + ret = rte_pktmbuf_alloc_bulk(rxq->mp, mbufs, count);
>>> + if (ret) {
>>> + DP_LOG(ERR, "failed to allocate mbufs for RX");
>>> + rxq->stats.nombuf += count;
>>> + goto fail;
>>> + }
>>>
>>> #ifdef RTE_ARCH_32
>>> rxq->wqe_cnt_to_short_db = 0;
>>> #endif
>>> - for (i = 0; i < rxq->num_desc; i++) {
>>> - ret = mana_alloc_and_post_rx_wqe(rxq);
>>> + for (i = 0; i < count; i++) {
>>> + ret = mana_post_rx_wqe(rxq, mbufs[i]);
>>> if (ret) {
>>> DP_LOG(ERR, "failed to post RX ret = %d", ret);
>>> - return ret;
>>> + goto fail;
>>>
>>
>> This may leak memory. There are allocated mbufs, if exit from loop here and free
>> 'mubfs' variable, how remaining mubfs will be freed?
>
> Mbufs are always freed after fail:
>
> fail:
> rte_free(mbufs);
>
Nope, I am not talking about the 'mbufs' variable, I am talking about
mbuf pointers stored in the 'mbufs' array which are allocated by
'rte_pktmbuf_alloc_bulk()'.
next prev parent reply other threads:[~2024-01-30 22:34 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-25 2:42 [PATCH] net/mana: use rte_pktmbuf_alloc_bulk for allocating RX WQEs longli
2024-01-26 0:29 ` Stephen Hemminger
2024-01-26 1:13 ` Long Li
2024-01-30 1:13 ` [Patch v2] " longli
2024-01-30 10:19 ` Ferruh Yigit
2024-01-30 16:43 ` Stephen Hemminger
2024-01-30 18:05 ` Tyler Retzlaff
2024-01-30 22:42 ` Ferruh Yigit
2024-02-01 3:55 ` Long Li
2024-02-01 10:52 ` Ferruh Yigit
2024-02-02 1:21 ` Long Li
2024-02-01 16:33 ` Tyler Retzlaff
2024-02-02 1:22 ` Long Li
2024-01-30 21:30 ` Long Li
2024-01-30 22:34 ` Ferruh Yigit [this message]
2024-01-30 22:36 ` Long Li
2024-02-01 3:45 ` [Patch v3] " longli
2024-02-01 16:16 ` Tyler Retzlaff
2024-02-01 19:41 ` Long Li
2024-02-02 1:19 ` [Patch v4] net/mana: use rte_pktmbuf_alloc_bulk for allocating RX mbufs longli
2024-02-02 16:24 ` Stephen Hemminger
2024-02-06 18:06 ` Ferruh Yigit
2024-02-07 4:50 ` Long Li
2024-02-09 0:02 ` [Patch v5] net/mana: use rte_pktmbuf_alloc_bulk for allocating RX WQEs longli
2024-02-09 17:46 ` Ferruh Yigit
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=b1423042-03aa-41bf-af78-094f7022b019@amd.com \
--to=ferruh.yigit@amd.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=longli@microsoft.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.