From: Filip Janiszewski <contact@filipjaniszewski.com>
To: MAC Lee <mac_leehk@yahoo.com.hk>, users@dpdk.org
Subject: Re: [dpdk-users] 回覆﹕ Packets drop while fetching with rte_eth_rx_burst
Date: Sun, 25 Mar 2018 14:14:58 +0200 [thread overview]
Message-ID: <8702e5e9-444b-70e5-6c5b-bff4fa1da18e@filipjaniszewski.com> (raw)
In-Reply-To: <277260559.2895913.1521977412628@mail.yahoo.com>
Thanks Marco,
I'm running DPDK 18.02. I might understand that the counter is not
implemented yet, but why rte_eth_rx_burst never returns nb_pkts?
According to:
http://dpdk.org/doc/api/rte__ethdev_8h.html#a3e7d76a451b46348686ea97d6367f102
"The rte_eth_rx_burst() function returns the number of packets actually
retrieved, which is the number of rte_mbuf data structures effectively
supplied into the rx_pkts array. A return value equal to nb_pkts
indicates that the RX queue contained at least rx_pkts packets, and this
is likely to signify that other received packets remain in the input queue."
So in case of drops I would expect the rx queue to be full and
rte_eth_rx_burst to return nb_pkts, but this never happen and it seems
that there's plenty of space in the ring, is that correct?
Thanks
Il 03/25/2018 01:30 PM, MAC Lee ha scritto:
> Hi Filip,
> which dpdk version are you using? You can take a look to the source code of dpdk , the rxdrop counter may be not implemented in dpdk. So you always get 0 in rxdrop.
>
> Thanks,
> Marco
> --------------------------------------------
> 18/3/25 (週日),Filip Janiszewski <contact@filipjaniszewski.com> 寫道:
>
> 主旨: [dpdk-users] Packets drop while fetching with rte_eth_rx_burst
> 收件者: users@dpdk.org
> 日期: 2018年3月25日,日,下午6:33
>
> Hi Everybody,
>
> I have a weird drop problem, and to
> understand my question the best way
> is to have a look at this simple (and
> cleaned from all the not relevant
> stuff) snippet:
>
> while( 1 )
> {
> if( config->running ==
> false ) {
> break;
> }
> num_of_pkt =
> rte_eth_rx_burst( config->port_id,
>
>
> config->queue_idx,
>
>
> buffers,
>
>
> MAX_BURST_DEQ_SIZE);
> if( unlikely( num_of_pkt
> == MAX_BURST_DEQ_SIZE ) ) {
>
> rx_ring_full = true; //probably not the best name
> }
>
> if( likely( num_of_pkt
> > 0 ) )
> {
> pk_captured
> += num_of_pkt;
>
>
> num_of_enq_pkt =
> rte_ring_sp_enqueue_bulk(config->incoming_pkts_ring,
>
>
>
> (void*)buffers,
>
>
>
> num_of_pkt,
>
>
>
> &rx_ring_free_space);
> //if
> num_of_enq_pkt == 0 free the mbufs..
> }
> }
>
> This loop is retrieving packets from
> the device and pushing them into a
> queue for further processing by another
> lcore.
>
> When I run a test with a Mellanox card
> sending 20M (20878300) packets at
> 2.5M p/s the loop seems to miss some
> packets and pk_captured is always
> like 19M or similar.
>
> rx_ring_full is never true, which means
> that num_of_pkt is always <
> MAX_BURST_DEQ_SIZE, so according to the
> documentation I shall not have
> drops at HW level. Also, num_of_enq_pkt
> is never 0 which means that all
> the packets are enqueued.
>
> Now, if from that snipped I remove the
> rte_ring_sp_enqueue_bulk call
> (and make sure to release all the
> mbufs) then pk_captured is always
> exactly equal to the amount of packets
> I've send to the NIC.
>
> So it seems (but I cant deal with this
> idea) that
> rte_ring_sp_enqueue_bulk is somehow too
> slow and between one call to
> rte_eth_rx_burst and another some
> packets are dropped due to full ring
> on the NIC, but, why num_of_pkt (from
> rte_eth_rx_burst) is always
> smaller than MAX_BURST_DEQ_SIZE (much
> smaller) as if there was always
> sufficient room for the packets?
>
> Is anybody able to help me understand
> what's happening here?
>
> Note, MAX_BURST_DEQ_SIZE is 512.
>
> Thanks
>
>
--
BR, Filip
+48 666 369 823
next prev parent reply other threads:[~2018-03-25 12:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <277260559.2895913.1521977412628.ref@mail.yahoo.com>
2018-03-25 11:30 ` MAC Lee
2018-03-25 12:14 ` Filip Janiszewski [this message]
2018-03-25 10:33 [dpdk-users] " Filip Janiszewski
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=8702e5e9-444b-70e5-6c5b-bff4fa1da18e@filipjaniszewski.com \
--to=contact@filipjaniszewski.com \
--cc=mac_leehk@yahoo.com.hk \
--cc=users@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).