From: Daniel Mrzyglod <danielx.t.mrzyg...@intel.com> Error can be reproduce if we run pmd_perf_autotest with more then one device in such way: RTE>>set_rxtx_sc poll_before_xmit RTE>>pmd_perf_autotest
two threads are working without synchronization and we are unable to say on which port in the index will came packet. Fixes: 002ade70e933 ("app/test: measure cycles per packet in Rx/Tx") Cc: cunming.li...@intel.com Cc: sta...@dpdk.org Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyg...@intel.com> --- test/test/test_pmd_perf.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/test/test/test_pmd_perf.c b/test/test/test_pmd_perf.c index a3e29ed..e4d5ca7 100644 --- a/test/test/test_pmd_perf.c +++ b/test/test/test_pmd_perf.c @@ -566,8 +566,8 @@ poll_burst(void *args) unsigned lcore_id; struct rte_mbuf **pkts_burst; uint64_t diff_tsc, cur_tsc; - uint16_t next[RTE_MAX_ETHPORTS]; struct lcore_conf *conf; + uint32_t idx = 0; uint32_t pkt_per_port = *((uint32_t *)args); unsigned i, portid, nb_rx = 0; uint64_t total; @@ -588,11 +588,6 @@ poll_burst(void *args) if (!pkts_burst) return -1; - for (i = 0; i < conf->nb_ports; i++) { - portid = conf->portlist[i]; - next[portid] = i * pkt_per_port; - } - while (!rte_atomic64_read(&start)) ; @@ -601,7 +596,7 @@ poll_burst(void *args) for (i = 0; i < conf->nb_ports; i++) { portid = conf->portlist[i]; nb_rx = rte_eth_rx_burst(portid, 0, - &pkts_burst[next[portid]], + &pkts_burst[idx], MAX_PKT_BURST); if (unlikely(nb_rx == 0)) { timeout--; @@ -609,7 +604,7 @@ poll_burst(void *args) goto timeout; continue; } - next[portid] += nb_rx; + idx += nb_rx; total -= nb_rx; } } @@ -644,7 +639,7 @@ exec_burst(uint32_t flags, int lcore) conf = &lcore_conf[lcore]; pkt_per_port = MAX_TRAFFIC_BURST; - num = pkt_per_port; + num = pkt_per_port * conf->nb_ports; rte_atomic64_init(&start); @@ -661,11 +656,11 @@ exec_burst(uint32_t flags, int lcore) nb_tx = RTE_MIN(MAX_PKT_BURST, num); for (i = 0; i < conf->nb_ports; i++) { portid = conf->portlist[i]; - rte_eth_tx_burst(portid, 0, + nb_tx = rte_eth_tx_burst(portid, 0, &tx_burst[idx], nb_tx); idx += nb_tx; + num -= nb_tx; } - num -= nb_tx; } sleep(5); -- 2.7.4