[dpdk-users] Output packets are lost and reordered when using rte_eth_tx_burst on i40e
Alex _
asb.tyum at gmail.com
Tue Aug 15 13:29:50 CEST 2017
Hi.
Help me please understand the problem.
DPDK ver. 17.05
Scheme:
Generator -> port 0 -> port 1 -> host with tcpdump
How to reproduce:
1. I used l2fwd from examples, with the most significant change:
-#define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */
+#define BURST_TX_DRAIN_US 0xFFFFF /* Use big window in order to
rte_eth_tx_burst begins to work out */
2. Start the generator and observe in tcpdump how on the wire only a few
packets appear and they in different order.
15:53:25.133596 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 23495,
length 64
15:53:25.133597 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23496, length 64 <+++ lost (23499-23496) packets
15:53:26.181602 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23499, length 64 <--- burst send start
15:53:26.181605 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23500, length 64
15:53:26.181606 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23501, length 64
15:53:26.181607 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23502, length 64
15:53:26.181642 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 23498,
length 64
15:53:26.181649 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23503, length 64
15:53:26.181649 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 23499,
length 64 <--- burst end, tx only few packets
15:53:27.229651 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23504, length 64
15:53:27.229654 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23505, length 64
15:53:27.229654 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23506, length 64
15:53:27.229655 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23507, length 64
15:53:27.229699 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23508, length 64
15:53:27.229714 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 23504,
length 64
15:53:27.229720 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 23505,
length 64
15:53:28.277701 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23509, length 64
15:53:28.277704 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23510, length 64
15:53:28.277704 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23511, length 64
15:53:28.277744 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 23509,
length 64
15:53:28.277749 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23512, length 64
15:53:28.277750 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
23513, length 64
15:53:28.277750 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 23510,
length 64
3. DPDK said that all packets were transmitted
Port statistics ====================================
Statistics for port 0 ------------------------------
Packets sent: 0
Packets received: 11658796
Packets dropped: 0
Statistics for port 1 ------------------------------
Packets sent: 104
Packets received: 11831290
Packets dropped: 0
Aggregate statistics ===============================
Total packets sent: 104
Total packets received: 23490099
Total packets dropped: 0
====================================================
P.S
If I set BURST_TX_DRAIN_US to 100 (i.e. one packet must be send to wire per
rte_eth_tx_buffer call), all works fine:
16:14:30.896217 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29814, length 64
16:14:30.924453 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29814,
length 64
16:14:31.096663 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29815, length 64
16:14:31.124895 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29815,
length 64
16:14:31.297013 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29816, length 64
16:14:31.325258 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29816,
length 64
16:14:31.497364 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29817, length 64
16:14:31.526002 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29817,
length 64
16:14:31.698213 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29818, length 64
16:14:31.726446 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29818,
length 64
16:14:31.898655 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29819, length 64
16:14:31.926886 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29819,
length 64
16:14:32.098950 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29820, length 64
16:14:32.127887 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29820,
length 64
16:14:32.299597 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29821, length 64
16:14:32.328037 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29821,
length 64
16:14:32.500245 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29822, length 64
16:14:32.528686 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29822,
length 64
16:14:32.700796 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29823, length 64
16:14:32.729037 IP 8.8.8.8 > x.x.x.x: ICMP echo reply, id 46934, seq 29823,
length 64
16:14:32.901137 IP x.x.x.x > 8.8.8.8: ICMP echo request, id 46934, seq
29824, length 64
No drops, no reordering.
More information about the users
mailing list