Skip to content

Commit

Permalink
test: avoid hang if queues are full and Tx fails
Browse files Browse the repository at this point in the history
[ upstream commit 36edf3c ]

Current pmd_perf_autotest() in continuous mode tries
to enqueue MAX_TRAFFIC_BURST completely before starting
the test. Some drivers cannot accept complete
MAX_TRAFFIC_BURST even though rx+tx desc count can fit it.
This patch changes behaviour to stop enqueuing after few
retries.

Fixes: 002ade7 ("app/test: measure cycles per packet in Rx/Tx")

Signed-off-by: Rakesh Kudurumalla <rkudurumalla@marvell.com>
  • Loading branch information
Rakesh Kudurumalla authored and kevintraynor committed Jun 8, 2022
1 parent 034b700 commit 242c017
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions app/test/test_pmd_perf.c
Expand Up @@ -454,13 +454,16 @@ main_loop(__rte_unused void *args)
#define PACKET_SIZE 64
#define FRAME_GAP 12
#define MAC_PREAMBLE 8
#define MAX_RETRY_COUNT 5
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned lcore_id;
unsigned i, portid, nb_rx = 0, nb_tx = 0;
struct lcore_conf *conf;
int pkt_per_port;
uint64_t diff_tsc;
uint64_t packets_per_second, total_packets;
int retry_cnt = 0;
int free_pkt = 0;

lcore_id = rte_lcore_id();
conf = &lcore_conf[lcore_id];
Expand All @@ -478,10 +481,19 @@ main_loop(__rte_unused void *args)
nb_tx = RTE_MIN(MAX_PKT_BURST, num);
nb_tx = rte_eth_tx_burst(portid, 0,
&tx_burst[idx], nb_tx);
if (nb_tx == 0)
retry_cnt++;
num -= nb_tx;
idx += nb_tx;
if (retry_cnt == MAX_RETRY_COUNT) {
retry_cnt = 0;
break;
}
}
}
for (free_pkt = idx; free_pkt < (MAX_TRAFFIC_BURST * conf->nb_ports);
free_pkt++)
rte_pktmbuf_free(tx_burst[free_pkt]);
printf("Total packets inject to prime ports = %u\n", idx);

packets_per_second = (link_mbps * 1000 * 1000) /
Expand Down

0 comments on commit 242c017

Please sign in to comment.