From: Zoltan Kiss <zoltan.kiss@linaro.org>
To: Andriy Berestovskyy <aber@semihalf.com>, dev@dpdk.org
Subject: Re: Free up completed TX buffers
Date: Mon, 01 Jun 2015 18:51:04 +0100 [thread overview]
Message-ID: <556C9B88.9080409@linaro.org> (raw)
In-Reply-To: <CAOysbxpKv291e6V41=3CQSRP59cij9AZXV=wF-WiUm6awsgqQw@mail.gmail.com>
On 01/06/15 09:50, Andriy Berestovskyy wrote:
> Hi Zoltan,
>
> On Fri, May 29, 2015 at 7:00 PM, Zoltan Kiss <zoltan.kiss@linaro.org> wrote:
>> The easy way is just to increase your buffer pool's size to make
>> sure that doesn't happen.
>
> Go for it!
I went for it, my question is whether is it a good and worthwhile idea
to give the applications a last resort option for rainy days? It's a
problem which probably won't occur very often, but when it does, I think
it can take painfully long until you figure out what's wrong.
>
>> But there is no bulletproof way to calculate such
>> a number
>
> Yeah, there are many places for mbufs to stay :( I would try:
>
> Mempool size = sum(numbers of all TX descriptors)
> + sum(rx_free_thresh)
> + (mempool cache size * (number of lcores - 1))
> + (burst size * number of lcores)
It heavily depends on what your application does, and I think it's easy
to make a mistake in these calculations.
>
>> I'm thinking about a foolproof way, which is exposing functions like
>> ixgbe_tx_free_bufs from the PMDs, so the application can call it as a last
>> resort to avoid deadlock.
>
> Have a look at rte_eth_dev_tx_queue_stop()/start(). Some NICs (i.e.
> ixgbe) do reset the queue and free all the mbufs.
That's a bit drastic, I just want to flush the finished TX buffers, even
if tx_free_thresh were not reached.
An easy option would be to use rte_eth_tx_burst(..., nb_pkts=0), I'm
already using this to enforce TX completion if it's really needed. It
checks for tx_free_thresh, like this:
/* Check if the descriptor ring needs to be cleaned. */
if ((txq->nb_tx_desc - txq->nb_tx_free) > txq->tx_free_thresh)
i40e_xmit_cleanup(txq);
My idea is to extend this condition and add " || nb_pkts == 0", so you
can force cleanup. But there might be others who uses this same way to
do manual TX completion, and they expect that it only happens when
tx_free_thresh is reached.
>
> Regards,
> Andriy
>
prev parent reply other threads:[~2015-06-01 17:51 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-29 17:00 Free up completed TX buffers Zoltan Kiss
2015-06-01 8:50 ` Andriy Berestovskyy
2015-06-01 17:51 ` Zoltan Kiss [this message]
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=556C9B88.9080409@linaro.org \
--to=zoltan.kiss@linaro.org \
--cc=aber@semihalf.com \
--cc=dev@dpdk.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).