Unexpected behavior when using mbuf pool with external buffers

Gábor LENCSE lencse at hit.bme.hu
Wed Dec 22 13:28:31 CET 2021


Dear Michal,

12/22/2021 10:56 AM keltezéssel, Michał Niciejewski írta:
>     auto tx_num = rte_eth_tx_burst(1, queue, mbufs.data(), rx_num);

I suspect that the frame is sometimes simply not transmitted at high rates.

The rte_eth_tx_burst() function reports the number of actually 
transmitted frames. I usually send a frame using the following loop:

while ( !rte_eth_tx_burst(eth_id, 0, &pkt_mbuf, 1) )
   ;

> Did anyone have similar issues or know what could cause such behavior?

I met a somewhat similar issue, when I implemented the first version of 
siitperf: https://github.com/lencsegabor/siitperf

Then I was not aware of RFC 4814 yet, so I always transmitted the very 
same frame for throughput measurements, but I used a counter to be able 
to uniquely identify the test frames for packet delay variation 
measurement. I wanted to use the frame as a template and I modified its 
counter (and checksum) field after sending.  I have found that even if 
the rte_eth_tx_burst() function reported that the frame was sent, it was 
still in the buffer and I have rewritten its counter. (The receiver 
reported no frame with counter value 0, and 2 frames with the highest 
value of the counter.)
To circumvent the problem, I used an array of frames and I modified 
always the next element (modulo array size).

Best regards,

Gábor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/users/attachments/20211222/a95f7d57/attachment.htm>


More information about the users mailing list