[dpdk-dev] rte_eth_rx_burst only returns up to 32 packets
gaohaifeng.gao at huawei.com
Sat Aug 29 05:32:14 CEST 2015
Please see _rece_raw_pkts_vec function.
Here is part of its comments may explain this question
* vPMD receive routine, now only accept (nb_pkts == RTE_IXGBE_VPMD_RX_BURST)
* in one loop
* - nb_pkts < RTE_IXGBE_VPMD_RX_BURST, just return no packet
* - nb_pkts > RTE_IXGBE_VPMD_RX_BURST, only scan RTE_IXGBE_VPMD_RX_BURST
* numbers of DD bit
The documentation of this method says: Applications implementing a "retrieve as much received packets as possible" policy can check this specific case and keep invoking the rte_eth_rx_burst() <http://dpdk.org/doc/api/rte__ethdev_8h.html#aee7daffe261e67355a78b106627c4c45>function
until a value less than nb_pkts is returned.
But the function returns at most 32 packets regardless of the burst size parameter (nb_pkts). For example when I set the burst size to 256, it only returns 32 packets even though the queue has more packets. This means that I cannot rely on the returned value to know if there are >
256 packets in the queue or not.
Where this number 32 comes from? Is it because "PMD:
ixgbe_set_rx_function(): Vector rx enabled, please make sure RX burst size no less than 32." ?
I use DPDK 2.0.0 and Intel 82599 10 G NIC.
More information about the dev