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