[dpdk-dev] [PATCH v2] eventdev: fix Rx adapter event flush logic

Mattias Rönnblom mattias.ronnblom at ericsson.com
Thu May 9 21:22:08 CEST 2019


On 2019-05-09 06:50, Nikhil Rao wrote:
> The Rx adapter flushes events only if it has BATCH_SIZE
> events buffered where BATCH_SIZE is set to 32, e.g., if a
> single packet is sent, it is never passed to
> eventdev. Fix this issue by adding an event buffer flush
> either when a Rx queue is found to be empty or the adapter service
> function has processed the max number of packets for an invocation.
> 
> Bugzilla ID: 277
> 
> Fixes: 6b83f5935543 ("eventdev: add event buffer flush in Rx adapter")
> 
> Reported-by: Matias Elo <matias.elo at nokia.com>
> 
> Signed-off-by: Nikhil Rao <nikhil.rao at intel.com>
> ---
>   lib/librte_eventdev/rte_event_eth_rx_adapter.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> v2:
> * added Bugzilla ID
> 
> diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.c b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
> index 8d178be..fd3761b 100644
> --- a/lib/librte_eventdev/rte_event_eth_rx_adapter.c
> +++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
> @@ -872,7 +872,7 @@ static uint16_t rxa_gcd_u16(uint16_t a, uint16_t b)
>   			break;
>   	}
>   
> -	if (buf->count >= BATCH_SIZE)
> +	if (buf->count)
>   		rxa_flush_event_buffer(rx_adapter);
>   
>   	return nb_rx;
> 

After this change, is there any point in having the event_enqueue_buffer 
being a part of the rx_adapter struct? It could be stack allocated. In 
the process, you could eliminate the rte_event copying that goes on and 
the logic around that. Just make mbufs ETH_EVENT_BUFFER_SIZE in size, 
and retry until the NIC queue is empty or you accumulated 
ETH_EVENT_BUFFER_SIZE events. Then you ship it off to the event device.


More information about the dev mailing list