app/testpmd: use per-core variable in flowgen
authorZhihong Wang <wangzhihong.wzh@bytedance.com>
Fri, 13 Aug 2021 08:05:48 +0000 (16:05 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 24 Aug 2021 16:54:18 +0000 (18:54 +0200)
Use per-core variable for flow indexing to solve cache contention in
multi-core scenarios.

Signed-off-by: Zhihong Wang <wangzhihong.wzh@bytedance.com>
Acked-by: Xiaoyun Li <xiaoyun.li@intel.com>
app/test-pmd/flowgen.c

index 229794e..9348618 100644 (file)
@@ -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);
 }