DPDK patches and discussions
 help / color / mirror / Atom feed
From: Wisam Jaddo <wisamm@nvidia.com>
To: <arybchenko@solarflare.com>, <thomas@monjalon.net>,
	<akozyrev@nvidia.com>,  <rasland@nvidia.com>, <dev@dpdk.org>
Subject: [dpdk-dev] [PATCH v2 2/7] app/flow-perf: add new option to use unique data on the fly
Date: Wed, 10 Mar 2021 15:45:49 +0200	[thread overview]
Message-ID: <20210310134554.7948-3-wisamm@nvidia.com> (raw)
In-Reply-To: <20210310134554.7948-1-wisamm@nvidia.com>

Current support for unique data is to compile with config.h
var as FIXED_VALUES as 0, and this is only supported on
compilation time, as a result the user may use only single
mode for each compilation.

Starting with this commit the user will have the ability to
use this feature on the fly by using this new option:
--unique-data

Example of unique data usage:
Insert many rules with different encap data for a flows that
have encap action in it.

Signed-off-by: Wisam Jaddo <wisamm@nvidia.com>
---
 app/test-flow-perf/actions_gen.c | 77 +++++++++++++++++---------------
 app/test-flow-perf/actions_gen.h |  3 +-
 app/test-flow-perf/config.h      |  8 +---
 app/test-flow-perf/flow_gen.c    |  4 +-
 app/test-flow-perf/flow_gen.h    |  1 +
 app/test-flow-perf/main.c        | 13 ++++--
 doc/guides/tools/flow-perf.rst   |  5 +++
 7 files changed, 62 insertions(+), 49 deletions(-)

diff --git a/app/test-flow-perf/actions_gen.c b/app/test-flow-perf/actions_gen.c
index 1f5c64fde9..82cddfc676 100644
--- a/app/test-flow-perf/actions_gen.c
+++ b/app/test-flow-perf/actions_gen.c
@@ -30,6 +30,7 @@ struct additional_para {
 	uint64_t encap_data;
 	uint64_t decap_data;
 	uint8_t core_idx;
+	bool unique_data;
 };
 
 /* Storage for struct rte_flow_action_raw_encap including external data. */
@@ -202,14 +203,14 @@ add_count(struct rte_flow_action *actions,
 static void
 add_set_src_mac(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_mac set_macs[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t mac = para.counter;
 	uint16_t i;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		mac = 1;
 
 	/* Mac address to be set is random each time */
@@ -225,14 +226,14 @@ add_set_src_mac(struct rte_flow_action *actions,
 static void
 add_set_dst_mac(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_mac set_macs[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t mac = para.counter;
 	uint16_t i;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		mac = 1;
 
 	/* Mac address to be set is random each time */
@@ -248,13 +249,13 @@ add_set_dst_mac(struct rte_flow_action *actions,
 static void
 add_set_src_ipv4(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_ipv4 set_ipv4[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t ip = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ip = 1;
 
 	/* IPv4 value to be set is random each time */
@@ -267,13 +268,13 @@ add_set_src_ipv4(struct rte_flow_action *actions,
 static void
 add_set_dst_ipv4(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_ipv4 set_ipv4[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t ip = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ip = 1;
 
 	/* IPv4 value to be set is random each time */
@@ -286,14 +287,14 @@ add_set_dst_ipv4(struct rte_flow_action *actions,
 static void
 add_set_src_ipv6(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_ipv6 set_ipv6[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t ipv6 = para.counter;
 	uint8_t i;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ipv6 = 1;
 
 	/* IPv6 value to set is random each time */
@@ -309,14 +310,14 @@ add_set_src_ipv6(struct rte_flow_action *actions,
 static void
 add_set_dst_ipv6(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_ipv6 set_ipv6[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t ipv6 = para.counter;
 	uint8_t i;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ipv6 = 1;
 
 	/* IPv6 value to set is random each time */
@@ -332,13 +333,13 @@ add_set_dst_ipv6(struct rte_flow_action *actions,
 static void
 add_set_src_tp(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_tp set_tp[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t tp = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		tp = 100;
 
 	/* TP src port is random each time */
@@ -353,13 +354,13 @@ add_set_src_tp(struct rte_flow_action *actions,
 static void
 add_set_dst_tp(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_tp set_tp[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t tp = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		tp = 100;
 
 	/* TP src port is random each time */
@@ -375,13 +376,13 @@ add_set_dst_tp(struct rte_flow_action *actions,
 static void
 add_inc_tcp_ack(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t ack_value = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ack_value = 1;
 
 	value[para.core_idx] = RTE_BE32(ack_value);
@@ -393,13 +394,13 @@ add_inc_tcp_ack(struct rte_flow_action *actions,
 static void
 add_dec_tcp_ack(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t ack_value = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ack_value = 1;
 
 	value[para.core_idx] = RTE_BE32(ack_value);
@@ -411,13 +412,13 @@ add_dec_tcp_ack(struct rte_flow_action *actions,
 static void
 add_inc_tcp_seq(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t seq_value = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		seq_value = 1;
 
 	value[para.core_idx] = RTE_BE32(seq_value);
@@ -429,13 +430,13 @@ add_inc_tcp_seq(struct rte_flow_action *actions,
 static void
 add_dec_tcp_seq(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t seq_value = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		seq_value = 1;
 
 	value[para.core_idx] = RTE_BE32(seq_value);
@@ -447,13 +448,13 @@ add_dec_tcp_seq(struct rte_flow_action *actions,
 static void
 add_set_ttl(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_ttl set_ttl[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t ttl_value = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ttl_value = 1;
 
 	/* Set ttl to random value each time */
@@ -476,13 +477,13 @@ add_dec_ttl(struct rte_flow_action *actions,
 static void
 add_set_ipv4_dscp(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_dscp set_dscp[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t dscp_value = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		dscp_value = 1;
 
 	/* Set dscp to random value each time */
@@ -497,13 +498,13 @@ add_set_ipv4_dscp(struct rte_flow_action *actions,
 static void
 add_set_ipv6_dscp(struct rte_flow_action *actions,
 	uint8_t actions_counter,
-	__rte_unused struct additional_para para)
+	struct additional_para para)
 {
 	static struct rte_flow_action_set_dscp set_dscp[RTE_MAX_LCORE] __rte_cache_aligned;
 	uint32_t dscp_value = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		dscp_value = 1;
 
 	/* Set dscp to random value each time */
@@ -577,7 +578,7 @@ add_ipv4_header(uint8_t **header, uint64_t data,
 		return;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ip_dst = 1;
 
 	memset(&ipv4_hdr, 0, sizeof(struct rte_ipv4_hdr));
@@ -643,7 +644,7 @@ add_vxlan_header(uint8_t **header, uint64_t data,
 		return;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		vni_value = 1;
 
 	memset(&vxlan_hdr, 0, sizeof(struct rte_vxlan_hdr));
@@ -666,7 +667,7 @@ add_vxlan_gpe_header(uint8_t **header, uint64_t data,
 		return;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		vni_value = 1;
 
 	memset(&vxlan_gpe_hdr, 0, sizeof(struct rte_vxlan_gpe_hdr));
@@ -707,7 +708,7 @@ add_geneve_header(uint8_t **header, uint64_t data,
 		return;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		vni_value = 1;
 
 	memset(&geneve_hdr, 0, sizeof(struct rte_geneve_hdr));
@@ -730,7 +731,7 @@ add_gtp_header(uint8_t **header, uint64_t data,
 		return;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		teid_value = 1;
 
 	memset(&gtp_hdr, 0, sizeof(struct rte_flow_item_gtp));
@@ -849,7 +850,7 @@ add_vxlan_encap(struct rte_flow_action *actions,
 	uint32_t ip_dst = para.counter;
 
 	/* Fixed value */
-	if (FIXED_VALUES)
+	if (!para.unique_data)
 		ip_dst = 1;
 
 	items[0].spec = &item_eth;
@@ -907,7 +908,8 @@ add_meter(struct rte_flow_action *actions,
 void
 fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
 	uint32_t counter, uint16_t next_table, uint16_t hairpinq,
-	uint64_t encap_data, uint64_t decap_data, uint8_t core_idx)
+	uint64_t encap_data, uint64_t decap_data, uint8_t core_idx,
+	bool unique_data)
 {
 	struct additional_para additional_para_data;
 	uint8_t actions_counter = 0;
@@ -930,6 +932,7 @@ fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
 		.encap_data = encap_data,
 		.decap_data = decap_data,
 		.core_idx = core_idx,
+		.unique_data = unique_data,
 	};
 
 	if (hairpinq != 0) {
diff --git a/app/test-flow-perf/actions_gen.h b/app/test-flow-perf/actions_gen.h
index 77353cfe09..6f2f833496 100644
--- a/app/test-flow-perf/actions_gen.h
+++ b/app/test-flow-perf/actions_gen.h
@@ -19,6 +19,7 @@
 
 void fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
 	uint32_t counter, uint16_t next_table, uint16_t hairpinq,
-	uint64_t encap_data, uint64_t decap_data, uint8_t core_idx);
+	uint64_t encap_data, uint64_t decap_data, uint8_t core_idx,
+	bool unique_data);
 
 #endif /* FLOW_PERF_ACTION_GEN */
diff --git a/app/test-flow-perf/config.h b/app/test-flow-perf/config.h
index 3d4696d61a..a14d4e05e1 100644
--- a/app/test-flow-perf/config.h
+++ b/app/test-flow-perf/config.h
@@ -5,7 +5,7 @@
 #define FLOW_ITEM_MASK(_x) (UINT64_C(1) << _x)
 #define FLOW_ACTION_MASK(_x) (UINT64_C(1) << _x)
 #define FLOW_ATTR_MASK(_x) (UINT64_C(1) << _x)
-#define GET_RSS_HF() (ETH_RSS_IP | ETH_RSS_TCP)
+#define GET_RSS_HF() (ETH_RSS_IP)
 
 /* Configuration */
 #define RXQ_NUM 4
@@ -19,12 +19,6 @@
 #define METER_CIR 1250000
 #define DEFAULT_METER_PROF_ID 100
 
-/* This is used for encap/decap & header modify actions.
- * When it's 1: it means all actions have fixed values.
- * When it's 0: it means all actions will have different values.
- */
-#define FIXED_VALUES 1
-
 /* Items/Actions parameters */
 #define JUMP_ACTION_TABLE 2
 #define VLAN_VALUE 1
diff --git a/app/test-flow-perf/flow_gen.c b/app/test-flow-perf/flow_gen.c
index df4af16de8..8f87fac5f6 100644
--- a/app/test-flow-perf/flow_gen.c
+++ b/app/test-flow-perf/flow_gen.c
@@ -46,6 +46,7 @@ generate_flow(uint16_t port_id,
 	uint64_t encap_data,
 	uint64_t decap_data,
 	uint8_t core_idx,
+	bool unique_data,
 	struct rte_flow_error *error)
 {
 	struct rte_flow_attr attr;
@@ -61,7 +62,8 @@ generate_flow(uint16_t port_id,
 
 	fill_actions(actions, flow_actions,
 		outer_ip_src, next_table, hairpinq,
-		encap_data, decap_data, core_idx);
+		encap_data, decap_data, core_idx,
+		unique_data);
 
 	fill_items(items, flow_items, outer_ip_src, core_idx);
 
diff --git a/app/test-flow-perf/flow_gen.h b/app/test-flow-perf/flow_gen.h
index f1d0999af1..dc887fceae 100644
--- a/app/test-flow-perf/flow_gen.h
+++ b/app/test-flow-perf/flow_gen.h
@@ -35,6 +35,7 @@ generate_flow(uint16_t port_id,
 	uint64_t encap_data,
 	uint64_t decap_data,
 	uint8_t core_idx,
+	bool unique_data,
 	struct rte_flow_error *error);
 
 #endif /* FLOW_PERF_FLOW_GEN */
diff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c
index 8b5a11c15e..4054178273 100644
--- a/app/test-flow-perf/main.c
+++ b/app/test-flow-perf/main.c
@@ -61,6 +61,7 @@ static bool dump_iterations;
 static bool delete_flag;
 static bool dump_socket_mem_flag;
 static bool enable_fwd;
+static bool unique_data;
 
 static struct rte_mempool *mbuf_mp;
 static uint32_t nb_lcores;
@@ -131,6 +132,8 @@ usage(char *progname)
 	printf("  --enable-fwd: To enable packets forwarding"
 		" after insertion\n");
 	printf("  --portmask=N: hexadecimal bitmask of ports used\n");
+	printf("  --unique-data: flag to set using unique data for all"
+		" actions that support data, such as header modify and encap actions\n");
 
 	printf("To set flow attributes:\n");
 	printf("  --ingress: set ingress attribute in flows\n");
@@ -567,6 +570,7 @@ args_parse(int argc, char **argv)
 		{ "deletion-rate",              0, 0, 0 },
 		{ "dump-socket-mem",            0, 0, 0 },
 		{ "enable-fwd",                 0, 0, 0 },
+		{ "unique-data",                0, 0, 0 },
 		{ "portmask",                   1, 0, 0 },
 		{ "cores",                      1, 0, 0 },
 		/* Attributes */
@@ -765,6 +769,9 @@ args_parse(int argc, char **argv)
 			if (strcmp(lgopts[opt_idx].name,
 					"dump-iterations") == 0)
 				dump_iterations = true;
+			if (strcmp(lgopts[opt_idx].name,
+					"unique-data") == 0)
+				unique_data = true;
 			if (strcmp(lgopts[opt_idx].name,
 					"deletion-rate") == 0)
 				delete_flag = true;
@@ -1176,7 +1183,7 @@ insert_flows(int port_id, uint8_t core_id)
 		 */
 		flow = generate_flow(port_id, 0, flow_attrs,
 			global_items, global_actions,
-			flow_group, 0, 0, 0, 0, core_id, &error);
+			flow_group, 0, 0, 0, 0, core_id, unique_data, &error);
 
 		if (flow == NULL) {
 			print_flow_error(error);
@@ -1192,7 +1199,7 @@ insert_flows(int port_id, uint8_t core_id)
 			JUMP_ACTION_TABLE, counter,
 			hairpin_queues_num,
 			encap_data, decap_data,
-			core_id, &error);
+			core_id, unique_data, &error);
 
 		if (force_quit)
 			counter = end_counter;
@@ -1863,6 +1870,7 @@ main(int argc, char **argv)
 	delete_flag = false;
 	dump_socket_mem_flag = false;
 	flow_group = DEFAULT_GROUP;
+	unique_data = false;
 
 	signal(SIGINT, signal_handler);
 	signal(SIGTERM, signal_handler);
@@ -1878,7 +1886,6 @@ main(int argc, char **argv)
 	if (nb_lcores <= 1)
 		rte_exit(EXIT_FAILURE, "This app needs at least two cores\n");
 
-
 	printf(":: Flows Count per port: %d\n\n", rules_count);
 
 	if (has_meter())
diff --git a/doc/guides/tools/flow-perf.rst b/doc/guides/tools/flow-perf.rst
index 017e200222..280bf7e0e0 100644
--- a/doc/guides/tools/flow-perf.rst
+++ b/doc/guides/tools/flow-perf.rst
@@ -100,6 +100,11 @@ The command line options are:
 	Set the number of needed cores to insert/delete rte_flow rules.
 	Default cores count is 1.
 
+*       ``--unique-data``
+        Flag to set using unique data for all actions that support data,
+        Such as header modify and encap actions. Default is using fixed
+        data for any action that support data for all flows.
+
 Attributes:
 
 *	``--ingress``
-- 
2.17.1


  parent reply	other threads:[~2021-03-10 13:46 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-07  9:11 [dpdk-dev] [PATCH 0/5] New flow-perf fixes Wisam Jaddo
2021-03-07  9:11 ` [dpdk-dev] [PATCH 1/5] app/flow-perf: start using more generic wrapper for cycles Wisam Jaddo
2021-03-10 13:45   ` [dpdk-dev] [PATCH v2 0/7] Enhancements and fixes for flow-perf Wisam Jaddo
2021-03-10 13:45     ` [dpdk-dev] [PATCH v2 1/7] app/flow-perf: start using more generic wrapper for cycles Wisam Jaddo
2021-03-10 13:45     ` Wisam Jaddo [this message]
2021-03-10 13:45     ` [dpdk-dev] [PATCH v2 3/7] app/flow-perf: fix naming of CPU used structured data Wisam Jaddo
2021-03-10 13:45     ` [dpdk-dev] [PATCH v2 4/7] app/flow-perf: fix report total stats for masked ports Wisam Jaddo
2021-03-10 13:45     ` [dpdk-dev] [PATCH v2 5/7] app/flow-perf: fix the incremental IPv6 src set Wisam Jaddo
2021-03-10 13:45     ` [dpdk-dev] [PATCH v2 6/7] app/flow-perf: add first flow latency support Wisam Jaddo
2021-03-10 13:48   ` [dpdk-dev] [PATCH v2 0/7] Enhancements and fixes for flow-perf Wisam Jaddo
2021-03-10 13:48     ` [dpdk-dev] [PATCH v2 1/7] app/flow-perf: start using more generic wrapper for cycles Wisam Jaddo
2021-03-10 13:53       ` [dpdk-dev] [PATCH v3 0/7] Enhancements and fixes for flow-perf Wisam Jaddo
2021-03-10 13:53         ` [dpdk-dev] [PATCH v3 1/7] app/flow-perf: start using more generic wrapper for cycles Wisam Jaddo
2021-03-10 13:53         ` [dpdk-dev] [PATCH v3 2/7] app/flow-perf: add new option to use unique data on the fly Wisam Jaddo
2021-03-10 13:53         ` [dpdk-dev] [PATCH v3 3/7] app/flow-perf: fix naming of CPU used structured data Wisam Jaddo
2021-03-10 13:53         ` [dpdk-dev] [PATCH v3 4/7] app/flow-perf: fix report total stats for masked ports Wisam Jaddo
2021-03-10 13:53         ` [dpdk-dev] [PATCH v3 5/7] app/flow-perf: fix the incremental IPv6 src set Wisam Jaddo
2021-03-10 13:53         ` [dpdk-dev] [PATCH v3 6/7] app/flow-perf: add first flow latency support Wisam Jaddo
2021-03-10 13:55       ` [dpdk-dev] [PATCH v3 0/7] Enhancements and fixes for flow-perf Wisam Jaddo
2021-03-10 13:55         ` [dpdk-dev] [PATCH v3 1/7] app/flow-perf: start using more generic wrapper for cycles Wisam Jaddo
2021-03-14  9:54           ` [dpdk-dev] [PATCH v3 0/7] Enhancements and fixes for flow-perf Wisam Jaddo
2021-03-14  9:54             ` [dpdk-dev] [PATCH v4 1/7] app/flow-perf: start using more generic wrapper for cycles Wisam Jaddo
2021-03-14  9:54             ` [dpdk-dev] [PATCH v4 2/7] app/flow-perf: add new option to use unique data on the fly Wisam Jaddo
2021-03-14  9:54             ` [dpdk-dev] [PATCH v4 3/7] app/flow-perf: fix naming of CPU used structured data Wisam Jaddo
2021-03-14  9:54             ` [dpdk-dev] [PATCH v4 4/7] app/flow-perf: fix report total stats for masked ports Wisam Jaddo
2021-03-14  9:54             ` [dpdk-dev] [PATCH v4 5/7] app/flow-perf: fix the incremental IPv6 src set Wisam Jaddo
2021-03-14  9:54             ` [dpdk-dev] [PATCH v4 6/7] app/flow-perf: add first flow latency support Wisam Jaddo
2021-03-14  9:54             ` [dpdk-dev] [PATCH v4 7/7] app/flow-perf: fix setting decap data for decap actions Wisam Jaddo
2021-04-12 14:33             ` [dpdk-dev] [PATCH v3 0/7] Enhancements and fixes for flow-perf Thomas Monjalon
2021-03-10 13:55         ` [dpdk-dev] [PATCH v3 2/7] app/flow-perf: add new option to use unique data on the fly Wisam Jaddo
2021-03-10 13:55         ` [dpdk-dev] [PATCH v3 3/7] app/flow-perf: fix naming of CPU used structured data Wisam Jaddo
2021-03-10 13:55         ` [dpdk-dev] [PATCH v3 4/7] app/flow-perf: fix report total stats for masked ports Wisam Jaddo
2021-03-10 13:55         ` [dpdk-dev] [PATCH v3 5/7] app/flow-perf: fix the incremental IPv6 src set Wisam Jaddo
2021-03-10 13:55         ` [dpdk-dev] [PATCH v3 6/7] app/flow-perf: add first flow latency support Wisam Jaddo
2021-03-10 13:55         ` [dpdk-dev] [PATCH v3 7/7] app/flow-perf: fix setting decap data for decap actions Wisam Jaddo
2021-03-10 21:54         ` [dpdk-dev] [PATCH v3 0/7] Enhancements and fixes for flow-perf Alexander Kozyrev
2021-03-10 13:48     ` [dpdk-dev] [PATCH v2 2/7] app/flow-perf: add new option to use unique data on the fly Wisam Jaddo
2021-03-10 13:48     ` [dpdk-dev] [PATCH v2 3/7] app/flow-perf: fix naming of CPU used structured data Wisam Jaddo
2021-03-10 13:48     ` [dpdk-dev] [PATCH v2 4/7] app/flow-perf: fix report total stats for masked ports Wisam Jaddo
2021-03-10 13:48     ` [dpdk-dev] [PATCH v2 5/7] app/flow-perf: fix the incremental IPv6 src set Wisam Jaddo
2021-03-10 13:48     ` [dpdk-dev] [PATCH v2 6/7] app/flow-perf: add first flow latency support Wisam Jaddo
2021-03-10 13:48     ` [dpdk-dev] [PATCH v2 7/7] app/flow-perf: fix setting decap data for decap actions Wisam Jaddo
2021-03-07  9:11 ` [dpdk-dev] [PATCH 2/5] app/flow-perf: add new option to use unique data on the fly Wisam Jaddo
2021-03-07  9:12 ` [dpdk-dev] [PATCH 3/5] app/flow-perf: fix naming of CPU used structured data Wisam Jaddo
2021-03-07  9:12 ` [dpdk-dev] [PATCH 4/5] app/flow-perf: fix report total stats for masked ports Wisam Jaddo
2021-03-07  9:12 ` [dpdk-dev] [PATCH 5/5] app/flow-perf: fix the incremental IPv6 src set Wisam Jaddo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210310134554.7948-3-wisamm@nvidia.com \
    --to=wisamm@nvidia.com \
    --cc=akozyrev@nvidia.com \
    --cc=arybchenko@solarflare.com \
    --cc=dev@dpdk.org \
    --cc=rasland@nvidia.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).