[dpdk-dev] [PATCH v5 26/33] eal/trace: add trace mode configuration parameter
jerinj at marvell.com
jerinj at marvell.com
Mon Apr 13 17:01:09 CEST 2020
From: Sunil Kumar Kori <skori at marvell.com>
Trace library exposes --trace-mode eal parameter to configure
event record mode when ring buffers are full.
Signed-off-by: Sunil Kumar Kori <skori at marvell.com>
---
doc/guides/linux_gsg/eal_args.include.rst | 12 ++++++
lib/librte_eal/common/eal_common_options.c | 17 ++++++++
.../common/eal_common_trace_utils.c | 40 +++++++++++++++++++
lib/librte_eal/common/eal_options.h | 2 +
lib/librte_eal/common/eal_trace.h | 1 +
5 files changed, 72 insertions(+)
diff --git a/doc/guides/linux_gsg/eal_args.include.rst b/doc/guides/linux_gsg/eal_args.include.rst
index b921c83b8..361c7cf67 100644
--- a/doc/guides/linux_gsg/eal_args.include.rst
+++ b/doc/guides/linux_gsg/eal_args.include.rst
@@ -176,6 +176,18 @@ Debugging options
By default, size of trace output file is ``1MB`` and parameter
must be specified once only.
+* ``--trace-mode=<o[verwrite] | d[iscard] >``
+
+ Specify the mode of update of trace output file. Either update on a file
+ can be wrapped or discarded when file size reaches its maximum limit.
+ For example:
+
+ To ``discard`` update on trace output file::
+
+ --trace-mode=d or --trace-mode=discard
+
+ Default mode is ``overwrite`` and parameter must be specified once only.
+
Other options
~~~~~~~~~~~~~
diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
index aea743e6f..6999cabc4 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -71,6 +71,7 @@ eal_long_options[] = {
{OPT_TRACE, 1, NULL, OPT_TRACE_NUM },
{OPT_TRACE_DIR, 1, NULL, OPT_TRACE_DIR_NUM },
{OPT_TRACE_BUF_SIZE, 1, NULL, OPT_TRACE_BUF_SIZE_NUM },
+ {OPT_TRACE_MODE, 1, NULL, OPT_TRACE_MODE_NUM },
{OPT_MASTER_LCORE, 1, NULL, OPT_MASTER_LCORE_NUM },
{OPT_MBUF_POOL_OPS_NAME, 1, NULL, OPT_MBUF_POOL_OPS_NAME_NUM},
{OPT_NO_HPET, 0, NULL, OPT_NO_HPET_NUM },
@@ -1450,6 +1451,15 @@ eal_parse_common_option(int opt, const char *optarg,
break;
}
+ case OPT_TRACE_MODE_NUM: {
+ if (eal_trace_mode_args_save(optarg) < 0) {
+ RTE_LOG(ERR, EAL, "invalid parameters for --"
+ OPT_TRACE_MODE "\n");
+ return -1;
+ }
+ break;
+ }
+
case OPT_LCORES_NUM:
if (eal_parse_lcores(optarg) < 0) {
RTE_LOG(ERR, EAL, "invalid parameter for --"
@@ -1741,6 +1751,13 @@ eal_common_usage(void)
" 'KBytes' and 'MBytes' respectively.\n"
" Default is 1MB and parameter must be\n"
" specified once only.\n"
+ " --"OPT_TRACE_MODE"=<o[verwrite] | d[iscard]>\n"
+ " Specify the mode of update of trace\n"
+ " output file. Either update on a file can\n"
+ " be wrapped or discarded when file size\n"
+ " reaches its maximum limit.\n"
+ " Default mode is 'overwrite' and parameter\n"
+ " must be specified once only.\n"
" -v Display version information on startup\n"
" -h, --help This help\n"
" --"OPT_IN_MEMORY" Operate entirely in memory. This will\n"
diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c
index b4ac79c95..5b2906677 100644
--- a/lib/librte_eal/common/eal_common_trace_utils.c
+++ b/lib/librte_eal/common/eal_common_trace_utils.c
@@ -223,6 +223,46 @@ trace_bufsz_args_apply(void)
trace->buff_len = 1024 * 1024; /* 1MB */
}
+int
+eal_trace_mode_args_save(const char *optarg)
+{
+ struct trace *trace = trace_obj_get();
+ size_t len = strlen(optarg);
+ unsigned long tmp;
+ char *pattern;
+
+ if (optarg == NULL) {
+ trace_err("no optarg is passed");
+ return -EINVAL;
+ }
+
+ if (len == 0) {
+ trace_err("value is not provided with option");
+ return -EINVAL;
+ }
+
+ pattern = (char *)calloc(1, len + 2);
+ if (pattern == NULL) {
+ trace_err("fail to allocate memory");
+ return -ENOMEM;
+ }
+
+ sprintf(pattern, "%s*", optarg);
+
+ if (fnmatch(pattern, "overwrite", 0) == 0)
+ tmp = RTE_TRACE_MODE_OVERWRITE;
+ else if (fnmatch(pattern, "discard", 0) == 0)
+ tmp = RTE_TRACE_MODE_DISCARD;
+ else {
+ free(pattern);
+ return -EINVAL;
+ }
+
+ trace->mode = tmp;
+ free(pattern);
+ return 0;
+}
+
int
eal_trace_dir_args_save(char const *optarg)
{
diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h
index 3e9a54f3a..90ead1b7c 100644
--- a/lib/librte_eal/common/eal_options.h
+++ b/lib/librte_eal/common/eal_options.h
@@ -39,6 +39,8 @@ enum {
OPT_TRACE_DIR_NUM,
#define OPT_TRACE_BUF_SIZE "trace-bufsz"
OPT_TRACE_BUF_SIZE_NUM,
+#define OPT_TRACE_MODE "trace-mode"
+ OPT_TRACE_MODE_NUM,
#define OPT_MASTER_LCORE "master-lcore"
OPT_MASTER_LCORE_NUM,
#define OPT_MBUF_POOL_OPS_NAME "mbuf-pool-ops-name"
diff --git a/lib/librte_eal/common/eal_trace.h b/lib/librte_eal/common/eal_trace.h
index 890d1d1ee..25401ad84 100644
--- a/lib/librte_eal/common/eal_trace.h
+++ b/lib/librte_eal/common/eal_trace.h
@@ -115,6 +115,7 @@ void eal_trace_fini(void);
int eal_trace_args_save(const char *optarg);
void eal_trace_args_free(void);
int eal_trace_dir_args_save(const char *optarg);
+int eal_trace_mode_args_save(const char *optarg);
int eal_trace_bufsz_args_save(const char *optarg);
#endif /* __EAL_TRACE_H */
--
2.25.1
More information about the dev
mailing list