[v6,1/7] examples/ipsec-secgw: add stats interval argument

Message ID 20211101125815.3219304-2-radu.nicolau@intel.com (mailing list archive)
State Accepted, archived
Delegated to: akhil goyal
Headers
Series IPsec Sec GW new features |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-testing warning apply patch failure

Commit Message

Radu Nicolau Nov. 1, 2021, 12:58 p.m. UTC
  Add -t for stats screen update interval, disabled by default.

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Anoob Joseph <anoobj@marvell.com>
---
 doc/guides/sample_app_ug/ipsec_secgw.rst |  5 ++++
 examples/ipsec-secgw/ipsec-secgw.c       | 29 ++++++++++++++++--------
 examples/ipsec-secgw/ipsec-secgw.h       | 17 --------------
 3 files changed, 25 insertions(+), 26 deletions(-)
  

Comments

Akhil Goyal Nov. 3, 2021, 9:23 a.m. UTC | #1
> -#if (STATS_INTERVAL > 0)
>  struct ipsec_core_statistics {
>  	uint64_t tx;
>  	uint64_t rx;
> @@ -94,7 +90,6 @@ struct ipsec_core_statistics {
>  } __rte_cache_aligned;
> 
>  struct ipsec_core_statistics core_statistics[RTE_MAX_LCORE];
> -#endif /* STATS_INTERVAL */
Did you check compilation with this patchset? Even CI is reporting compilation issues.
core_statistics need to be declared in .c file.
  
Radu Nicolau Nov. 3, 2021, 10:51 a.m. UTC | #2
On 11/3/2021 9:23 AM, Akhil Goyal wrote:
>> -#if (STATS_INTERVAL > 0)
>>   struct ipsec_core_statistics {
>>   	uint64_t tx;
>>   	uint64_t rx;
>> @@ -94,7 +90,6 @@ struct ipsec_core_statistics {
>>   } __rte_cache_aligned;
>>
>>   struct ipsec_core_statistics core_statistics[RTE_MAX_LCORE];
>> -#endif /* STATS_INTERVAL */
> Did you check compilation with this patchset? Even CI is reporting compilation issues.
> core_statistics need to be declared in .c file.

Hi Akhil, I did check on my local dev system and it passed, but I can 
see the problem.

But the issue was not introduced by this patchset, it was only made 
apparent by removing the #ifdef. It was introduced by this patch:

commit 1329602b6c8f20949ebaefb7aa55f7dca6d1b4f4
Author: Anoob Joseph <anoobj@marvell.com>
Date:   Wed May 13 23:15:19 2020 +0530

     examples/ipsec-secgw: add per-core packet statistics

I will send a fix shortly.
  
Akhil Goyal Nov. 3, 2021, 1:20 p.m. UTC | #3
> On 11/3/2021 9:23 AM, Akhil Goyal wrote:
> >> -#if (STATS_INTERVAL > 0)
> >>   struct ipsec_core_statistics {
> >>   	uint64_t tx;
> >>   	uint64_t rx;
> >> @@ -94,7 +90,6 @@ struct ipsec_core_statistics {
> >>   } __rte_cache_aligned;
> >>
> >>   struct ipsec_core_statistics core_statistics[RTE_MAX_LCORE];
> >> -#endif /* STATS_INTERVAL */
> > Did you check compilation with this patchset? Even CI is reporting
> compilation issues.
> > core_statistics need to be declared in .c file.
> 
> Hi Akhil, I did check on my local dev system and it passed, but I can
> see the problem.
> 
> But the issue was not introduced by this patchset, it was only made
> apparent by removing the #ifdef. It was introduced by this patch:
> 
Yes the issue was not visible as it was compiled off, but since your patch
Removed ifdefs, the compilation will be broken. Not sure how it passed your
Dev environment.


> commit 1329602b6c8f20949ebaefb7aa55f7dca6d1b4f4
> Author: Anoob Joseph <anoobj@marvell.com>
> Date:   Wed May 13 23:15:19 2020 +0530
> 
>      examples/ipsec-secgw: add per-core packet statistics
> 
> I will send a fix shortly.
  

Patch

diff --git a/doc/guides/sample_app_ug/ipsec_secgw.rst b/doc/guides/sample_app_ug/ipsec_secgw.rst
index 782574dd39..282926924f 100644
--- a/doc/guides/sample_app_ug/ipsec_secgw.rst
+++ b/doc/guides/sample_app_ug/ipsec_secgw.rst
@@ -127,6 +127,7 @@  The application has a number of command line options::
                         -p PORTMASK -P -u PORTMASK -j FRAMESIZE
                         -l -w REPLAY_WINDOW_SIZE -e -a
                         -c SAD_CACHE_SIZE
+                        -t STATISTICS_INTERVAL
                         -s NUMBER_OF_MBUFS_IN_PACKET_POOL
                         -f CONFIG_FILE_PATH
                         --config (port,queue,lcore)[,(port,queue,lcore)]
@@ -176,6 +177,10 @@  Where:
     Zero value disables cache.
     Default value: 128.
 
+*   ``-t``: specifies the statistics screen update interval in seconds. If set
+    to zero or omitted statistics screen is disabled.
+    Default value: 0.
+
 *   ``-s``: sets number of mbufs in packet pool, if not provided number of mbufs
     will be calculated based on number of cores, eth ports and crypto queues.
 
diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c
index 4bdf99b62b..d9a6838459 100644
--- a/examples/ipsec-secgw/ipsec-secgw.c
+++ b/examples/ipsec-secgw/ipsec-secgw.c
@@ -179,6 +179,7 @@  static uint32_t frag_tbl_sz;
 static uint32_t frame_buf_size = RTE_MBUF_DEFAULT_BUF_SIZE;
 static uint32_t mtu_size = RTE_ETHER_MTU;
 static uint64_t frag_ttl_ns = MAX_FRAG_TTL_NS;
+static uint32_t stats_interval;
 
 /* application wide librte_ipsec/SA parameters */
 struct app_sa_prm app_sa_prm = {
@@ -289,7 +290,6 @@  adjust_ipv6_pktlen(struct rte_mbuf *m, const struct rte_ipv6_hdr *iph,
 	}
 }
 
-#if (STATS_INTERVAL > 0)
 
 /* Print out statistics on packet distribution */
 static void
@@ -349,9 +349,8 @@  print_stats_cb(__rte_unused void *param)
 		   total_packets_dropped);
 	printf("\n====================================================\n");
 
-	rte_eal_alarm_set(STATS_INTERVAL * US_PER_S, print_stats_cb, NULL);
+	rte_eal_alarm_set(stats_interval * US_PER_S, print_stats_cb, NULL);
 }
-#endif /* STATS_INTERVAL */
 
 static inline void
 prepare_one_packet(struct rte_mbuf *pkt, struct ipsec_traffic *t)
@@ -1394,6 +1393,7 @@  print_usage(const char *prgname)
 		" [-e]"
 		" [-a]"
 		" [-c]"
+		" [-t STATS_INTERVAL]"
 		" [-s NUMBER_OF_MBUFS_IN_PKT_POOL]"
 		" -f CONFIG_FILE"
 		" --config (port,queue,lcore)[,(port,queue,lcore)]"
@@ -1418,6 +1418,8 @@  print_usage(const char *prgname)
 		"  -a enables SA SQN atomic behaviour\n"
 		"  -c specifies inbound SAD cache size,\n"
 		"     zero value disables the cache (default value: 128)\n"
+		"  -t specifies statistics screen update interval,\n"
+		"     zero disables statistics screen (default value: 0)\n"
 		"  -s number of mbufs in packet pool, if not specified number\n"
 		"     of mbufs will be calculated based on number of cores,\n"
 		"     ports and crypto queues\n"
@@ -1627,7 +1629,7 @@  parse_args(int32_t argc, char **argv, struct eh_conf *eh_conf)
 
 	argvopt = argv;
 
-	while ((opt = getopt_long(argc, argvopt, "aelp:Pu:f:j:w:c:s:",
+	while ((opt = getopt_long(argc, argvopt, "aelp:Pu:f:j:w:c:t:s:",
 				lgopts, &option_index)) != EOF) {
 
 		switch (opt) {
@@ -1708,6 +1710,15 @@  parse_args(int32_t argc, char **argv, struct eh_conf *eh_conf)
 			}
 			app_sa_prm.cache_sz = ret;
 			break;
+		case 't':
+			ret = parse_decimal(optarg);
+			if (ret < 0) {
+				printf("Invalid interval value: %s\n", optarg);
+				print_usage(prgname);
+				return -1;
+			}
+			stats_interval = ret;
+			break;
 		case CMD_LINE_OPT_CONFIG_NUM:
 			ret = parse_config(optarg);
 			if (ret) {
@@ -3003,11 +3014,11 @@  main(int32_t argc, char **argv)
 
 	check_all_ports_link_status(enabled_port_mask);
 
-#if (STATS_INTERVAL > 0)
-	rte_eal_alarm_set(STATS_INTERVAL * US_PER_S, print_stats_cb, NULL);
-#else
-	RTE_LOG(INFO, IPSEC, "Stats display disabled\n");
-#endif /* STATS_INTERVAL */
+	if (stats_interval > 0)
+		rte_eal_alarm_set(stats_interval * US_PER_S,
+				print_stats_cb, NULL);
+	else
+		RTE_LOG(INFO, IPSEC, "Stats display disabled\n");
 
 	/* launch per-lcore init on every lcore */
 	rte_eal_mp_remote_launch(ipsec_launch_one_lcore, eh_conf, CALL_MAIN);
diff --git a/examples/ipsec-secgw/ipsec-secgw.h b/examples/ipsec-secgw/ipsec-secgw.h
index 96e22de45e..04b4644370 100644
--- a/examples/ipsec-secgw/ipsec-secgw.h
+++ b/examples/ipsec-secgw/ipsec-secgw.h
@@ -6,9 +6,6 @@ 
 
 #include <stdbool.h>
 
-#ifndef STATS_INTERVAL
-#define STATS_INTERVAL 0
-#endif
 
 #define NB_SOCKETS 4
 
@@ -83,7 +80,6 @@  struct ethaddr_info {
 	uint64_t src, dst;
 };
 
-#if (STATS_INTERVAL > 0)
 struct ipsec_core_statistics {
 	uint64_t tx;
 	uint64_t rx;
@@ -94,7 +90,6 @@  struct ipsec_core_statistics {
 } __rte_cache_aligned;
 
 struct ipsec_core_statistics core_statistics[RTE_MAX_LCORE];
-#endif /* STATS_INTERVAL */
 
 extern struct ethaddr_info ethaddr_tbl[RTE_MAX_ETHPORTS];
 
@@ -115,38 +110,26 @@  is_unprotected_port(uint16_t port_id)
 static inline void
 core_stats_update_rx(int n)
 {
-#if (STATS_INTERVAL > 0)
 	int lcore_id = rte_lcore_id();
 	core_statistics[lcore_id].rx += n;
 	core_statistics[lcore_id].rx_call++;
 	if (n == MAX_PKT_BURST)
 		core_statistics[lcore_id].burst_rx += n;
-#else
-	RTE_SET_USED(n);
-#endif /* STATS_INTERVAL */
 }
 
 static inline void
 core_stats_update_tx(int n)
 {
-#if (STATS_INTERVAL > 0)
 	int lcore_id = rte_lcore_id();
 	core_statistics[lcore_id].tx += n;
 	core_statistics[lcore_id].tx_call++;
-#else
-	RTE_SET_USED(n);
-#endif /* STATS_INTERVAL */
 }
 
 static inline void
 core_stats_update_drop(int n)
 {
-#if (STATS_INTERVAL > 0)
 	int lcore_id = rte_lcore_id();
 	core_statistics[lcore_id].dropped += n;
-#else
-	RTE_SET_USED(n);
-#endif /* STATS_INTERVAL */
 }
 
 /* helper routine to free bulk of packets */