From 08d4d507df0da15aeaa567ea60511caeb9717eea Mon Sep 17 00:00:00 2001 From: Zhihong Wang Date: Fri, 13 Aug 2021 16:05:48 +0800 Subject: [PATCH] app/testpmd: use per-core variable in flowgen Use per-core variable for flow indexing to solve cache contention in multi-core scenarios. Signed-off-by: Zhihong Wang Acked-by: Xiaoyun Li --- app/test-pmd/flowgen.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c index 229794ee9c..9348618d0f 100644 --- a/app/test-pmd/flowgen.c +++ b/app/test-pmd/flowgen.c @@ -53,6 +53,8 @@ static struct rte_ether_addr cfg_ether_dst = #define IP_DEFTTL 64 /* from RFC 1340. */ +RTE_DEFINE_PER_LCORE(int, _next_flow); + /* * Multi-flow generation mode. * @@ -80,7 +82,7 @@ pkt_burst_flow_gen(struct fwd_stream *fs) uint32_t retry; uint64_t tx_offloads; uint64_t start_tsc = 0; - static int next_flow = 0; + int next_flow = RTE_PER_LCORE(_next_flow); get_start_cycles(&start_tsc); @@ -163,7 +165,8 @@ pkt_burst_flow_gen(struct fwd_stream *fs) } pkts_burst[nb_pkt] = pkt; - next_flow = (next_flow + 1) % cfg_n_flows; + if (++next_flow >= (int)cfg_n_flows) + next_flow = 0; } nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_pkt); @@ -193,6 +196,8 @@ pkt_burst_flow_gen(struct fwd_stream *fs) } while (++nb_tx < nb_pkt); } + RTE_PER_LCORE(_next_flow) = next_flow; + get_end_cycles(fs, start_tsc); } -- 2.20.1