276. Sample Application Tests: Packet Ordering¶
This document provides test plan for benchmarking of the Packet Ordering sample application. This is a simple example app featuring packet processing using Data Plane Development Kit (DPDK) based on a sliding window using a sequence number for the packet and a reorder queue.
This app makes use of the librte_reorder library, it requires at least 3 lcores for RX, Workers (1 or more) and TX threads. Communication between RX-Workers and Workers-TX is done by using rings. The flow of mbufs is the following:
- RX thread gets mbufs from driver, set sequence number and enqueue them in ring.
- Workers dequeue mbufs from ring, do some ‘work’ and enqueue mbufs in ring.
- TX dequeue mbufs from ring, inserts them in reorder buffer, drains mbufs from reorder and sends them to the driver.
Command Usage:
./dpdk-packet_ordering [EAL options] -- [-p PORTMASK] [--insight-worker]
-p PORTMASK : hexadecimal bitmask of ports to configure
--insight-worker : print per core stats
For example:
./dpdk-packet_ordering -l 30-35 -- -p 0x1 --insight-worker
RX thread stats:
- Pkts rxd: 17026944
- Pkts enqd to workers ring: 17026944
Worker thread stats on core [31]:
- Pkts deqd from workers ring: 4486598
- Pkts enqd to tx ring: 4486598
- Pkts enq to tx failed: 0
Worker thread stats on core [32]:
- Pkts deqd from workers ring: 4014658
- Pkts enqd to tx ring: 4014658
- Pkts enq to tx failed: 0
Worker thread stats on core [33]:
- Pkts deqd from workers ring: 4694356
- Pkts enqd to tx ring: 4694356
- Pkts enq to tx failed: 0
Worker thread stats on core [34]:
- Pkts deqd from workers ring: 3831332
- Pkts enqd to tx ring: 3831332
- Pkts enq to tx failed: 0
Worker thread stats:
- Pkts deqd from workers ring: 17026944
- Pkts enqd to tx ring: 17026944
- Pkts enq to tx failed: 0
TX stats:
- Pkts deqd from tx ring: 17026944
- Ro Pkts transmitted: 17026944
- Ro Pkts tx failed: 0
- Pkts transmitted w/o reorder: 0
- Pkts tx failed w/o reorder: 0
Port 0 stats:
- Pkts in: 17026944
- Pkts out: 17026944
- In Errs: 0
- Out Errs: 0
- Mbuf Errs: 0
276.1. Prerequisites¶
1x Intel® Ethernet Port (710 series, 82599, E810 series etc)
276.2. Test Case: Packet ordering at different rates¶
The test case will send packets from the external traffic generator through the sample application which will forward them back to the source port. Each packet will have a sequential number which could be used to judge if a packet is in the right order. It’s fine to increase packet type, IP dst addr, etc to generate sequential numbers. Different traffic rates will be tested. The rate will go from 10% to 100% with 10% steps.
The results will be presented as a table with the following values:
Reordering: indicate if reorder the traffic.
Mask: used CPU core mask.
Rate: transmission rate.
Sent: number of frames sent from the traffic generator.
Received: number of frames received back.
Captured: number of frames captured.
Reordered ratio: ratio between out of order packets and total sent packets.
Reordering | Mask | Rate | Sent | Received | Captured | Reorder ratio |
---|---|---|---|---|---|---|
Yes | 0xaa | 10 | ||||
Yes | 0xf | 10 | ||||
No | 0xaa | 10 | ||||
No | 0xf | 10 |
Run the app with below sample command:
./x86_64-native-linuxapp-gcc/examples/dpdk-packet_ordering -c coremask -- -p portmask
276.3. Test Case: keep the packet ordering¶
This is a basic functional test without high speed flows. Send a series of packet for scapy, and check the packets forwarded out from the app is ordering.
Run the sample with below command:
./x86_64-native-linuxapp-gcc/examples/dpdk-packet_ordering -c coremask -- -p portmask
Send 1000 packets with the same 5-tuple traffic from Scapy
Observe the packets received and check the packets order.