From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: jerinj@marvell.com, skori@marvell.com,
Bruce Richardson <bruce.richardson@intel.com>,
Ciara Power <ciara.power@intel.com>
Subject: [PATCH v4 11/11] trace: enable trace operations via telemetry
Date: Tue, 18 Oct 2022 15:26:54 +0200 [thread overview]
Message-ID: <20221018132654.3760561-12-david.marchand@redhat.com> (raw)
In-Reply-To: <20221018132654.3760561-1-david.marchand@redhat.com>
Register telemetry commands to list and configure trace points and later
save traces for a running DPDK application.
Note: trace point names contain a '.', so the list of valid characters
used in telemetry commands and dictionary keys has been extended.
Example with testpmd running with two net/null ports (startup command
from devtools/test-null.sh):
--> /trace/list,lib.ethdev.*
{"/trace/list": {"lib.ethdev.configure": "Disabled",
"lib.ethdev.rxq.setup": "Disabled",
"lib.ethdev.txq.setup": "Disabled",
"lib.ethdev.start": "Disabled",
"lib.ethdev.stop": "Disabled",
"lib.ethdev.close": "Disabled",
"lib.ethdev.rx.burst": "Disabled",
"lib.ethdev.tx.burst": "Disabled"}}
--> /trace/enable,lib.ethdev.st*
{"/trace/enable": {"Count": 2}}
--> /trace/enable,lib.ethdev.st*
{"/trace/enable": {"Count": 0}}
--> /trace/list,lib.ethdev.*
{"/trace/list": {"lib.ethdev.configure": "Disabled",
"lib.ethdev.rxq.setup": "Disabled",
"lib.ethdev.txq.setup": "Disabled",
"lib.ethdev.start": "Enabled",
"lib.ethdev.stop": "Enabled",
"lib.ethdev.close": "Disabled",
"lib.ethdev.rx.burst": "Disabled",
"lib.ethdev.tx.burst": "Disabled"}}
testpmd> stop
...
testpmd> port stop all
...
testpmd> port start all
...
testpmd> start
...
--> /trace/save
{"/trace/save": {"Status": "OK",
"Path": ".../dpdk-traces/rte-2022-10-12-AM-10-51-48"}}
$ babeltrace .../dpdk-traces/rte-2022-10-12-AM-10-51-48
[10:51:36.229878723] (+?.?????????) lib.ethdev.stop:
{ cpu_id = 0x0, name = "dpdk-testpmd" }, { port_id = 0x0, ret = 0 }
[10:51:36.229880251] (+0.000001528) lib.ethdev.stop:
{ cpu_id = 0x0, name = "dpdk-testpmd" }, { port_id = 0x1, ret = 0 }
[10:51:40.449359774] (+4.219479523) lib.ethdev.start:
{ cpu_id = 0x0, name = "dpdk-testpmd" }, { port_id = 0x0 }
[10:51:40.449377877] (+0.000018103) lib.ethdev.start:
{ cpu_id = 0x0, name = "dpdk-testpmd" }, { port_id = 0x1 }
--> /trace/disable,*
{"/trace/disable": {"Count": 2}}
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
Changes since v1:
- added a note in the documentation,
---
doc/guides/prog_guide/trace_lib.rst | 39 +++++++++++++++
lib/eal/common/eal_common_trace.c | 78 +++++++++++++++++++++++++++++
lib/telemetry/telemetry_data.c | 1 +
3 files changed, 118 insertions(+)
diff --git a/doc/guides/prog_guide/trace_lib.rst b/doc/guides/prog_guide/trace_lib.rst
index 9a8f38073d..b7abf8e640 100644
--- a/doc/guides/prog_guide/trace_lib.rst
+++ b/doc/guides/prog_guide/trace_lib.rst
@@ -233,6 +233,45 @@ This section steps you through the details of generating trace and viewing it.
babeltrace $HOME/dpdk-traces/rte-yyyy-mm-dd-[AP]M-hh-mm-ss/
+Configuring traces on a running DPDK application
+------------------------------------------------
+
+The DPDK trace library can be configured using the Telemetry interface.
+
+Examples::
+
+ --> /trace/list,lib.ethdev.*
+ {"/trace/list": {"lib.ethdev.configure": "Disabled",
+ "lib.ethdev.rxq.setup": "Disabled",
+ "lib.ethdev.txq.setup": "Disabled",
+ "lib.ethdev.start": "Disabled",
+ "lib.ethdev.stop": "Disabled",
+ "lib.ethdev.close": "Disabled",
+ "lib.ethdev.rx.burst": "Disabled",
+ "lib.ethdev.tx.burst": "Disabled"}}
+
+ --> /trace/enable,lib.ethdev.st*
+ {"/trace/enable": {"Count": 2}}
+ --> /trace/enable,lib.ethdev.st*
+ {"/trace/enable": {"Count": 0}}
+
+ --> /trace/list,lib.ethdev.*
+ {"/trace/list": {"lib.ethdev.configure": "Disabled",
+ "lib.ethdev.rxq.setup": "Disabled",
+ "lib.ethdev.txq.setup": "Disabled",
+ "lib.ethdev.start": "Enabled",
+ "lib.ethdev.stop": "Enabled",
+ "lib.ethdev.close": "Disabled",
+ "lib.ethdev.rx.burst": "Disabled",
+ "lib.ethdev.tx.burst": "Disabled"}}
+
+ --> /trace/save
+ {"/trace/save": {"Status": "OK",
+ "Path": ".../dpdk-traces/rte-2022-10-12-AM-10-51-48"}}
+
+For more information on how to use the Telemetry interface, see
+the :doc:`../howto/telemetry`.
+
Implementation details
----------------------
diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c
index 42f2c28c23..3c7c666269 100644
--- a/lib/eal/common/eal_common_trace.c
+++ b/lib/eal/common/eal_common_trace.c
@@ -12,6 +12,7 @@
#include <rte_lcore.h>
#include <rte_per_lcore.h>
#include <rte_string_fns.h>
+#include <rte_telemetry.h>
#include "eal_trace.h"
@@ -528,3 +529,80 @@ __rte_trace_point_register(rte_trace_point_t *handle, const char *name,
return -rte_errno;
}
+
+static int
+trace_telemetry_enable(const char *cmd __rte_unused,
+ const char *params, struct rte_tel_data *d)
+{
+ unsigned int count;
+
+ if (params == NULL || strlen(params) == 0)
+ return -1;
+ rte_tel_data_start_dict(d);
+ count = __atomic_load_n(&trace.status, __ATOMIC_RELAXED);
+ rte_trace_pattern(params, true);
+ rte_tel_data_add_dict_int(d, "Count",
+ __atomic_load_n(&trace.status, __ATOMIC_RELAXED) - count);
+ return 0;
+
+}
+
+static int
+trace_telemetry_disable(const char *cmd __rte_unused,
+ const char *params, struct rte_tel_data *d)
+{
+ unsigned int count;
+
+ if (params == NULL || strlen(params) == 0)
+ return -1;
+ rte_tel_data_start_dict(d);
+ count = __atomic_load_n(&trace.status, __ATOMIC_RELAXED);
+ rte_trace_pattern(params, false);
+ rte_tel_data_add_dict_int(d, "Count",
+ count - __atomic_load_n(&trace.status, __ATOMIC_RELAXED));
+ return 0;
+
+}
+
+static int
+trace_telemetry_list(const char *cmd __rte_unused,
+ const char *params, struct rte_tel_data *d)
+{
+ struct trace_point *tp;
+
+ rte_tel_data_start_dict(d);
+ STAILQ_FOREACH(tp, &tp_list, next) {
+ if (params != NULL && fnmatch(params, tp->name, 0) != 0)
+ continue;
+
+ rte_tel_data_add_dict_string(d, tp->name,
+ rte_trace_point_is_enabled(tp->handle) ? "Enabled" : "Disabled");
+ }
+
+ return 0;
+}
+
+static int
+trace_telemetry_save(const char *cmd __rte_unused,
+ const char *params __rte_unused, struct rte_tel_data *d)
+{
+ struct trace *trace = trace_obj_get();
+
+ rte_tel_data_start_dict(d);
+ rte_tel_data_add_dict_string(d, "Status", rte_trace_save() == 0 ? "OK" : "KO");
+ rte_tel_data_add_dict_string(d, "Path", trace->dir);
+
+ return 0;
+}
+
+RTE_INIT(trace_telemetry)
+{
+ rte_telemetry_register_cmd("/trace/enable", trace_telemetry_enable,
+ "Enable trace points matching the provided pattern. Parameters: string pattern.");
+ rte_telemetry_register_cmd("/trace/disable", trace_telemetry_disable,
+ "Disable trace points matching the provided pattern. Parameters: string pattern.");
+ rte_telemetry_register_cmd("/trace/list", trace_telemetry_list,
+ "List trace points. Parameters: string pattern.");
+ rte_telemetry_register_cmd("/trace/save", trace_telemetry_save,
+ "Save current traces. Takes no parameter.");
+}
diff --git a/lib/telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c
index 34366ecee3..5b319c18fb 100644
--- a/lib/telemetry/telemetry_data.c
+++ b/lib/telemetry/telemetry_data.c
@@ -106,6 +106,7 @@ valid_name(const char *name)
['a' ... 'z'] = 1,
['_'] = 1,
['/'] = 1,
+ ['.'] = 1,
};
while (*name != '\0') {
if ((size_t)*name >= RTE_DIM(allowed) || allowed[(int)*name] == 0)
--
2.37.3
next prev parent reply other threads:[~2022-10-18 13:28 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-21 12:03 [PATCH 0/8] Trace subsystem fixes David Marchand
2022-09-21 12:03 ` [PATCH 1/8] trace: fix mode for new trace point David Marchand
2022-09-21 12:03 ` [PATCH 2/8] trace: fix mode change David Marchand
2022-09-21 12:03 ` [PATCH 3/8] trace: fix leak with regexp David Marchand
2022-09-22 11:00 ` [EXT] " Sunil Kumar Kori
2022-09-23 6:35 ` David Marchand
2022-09-23 7:37 ` Sunil Kumar Kori
2022-09-21 12:03 ` [PATCH 4/8] trace: fix dynamically enabling trace points David Marchand
2022-09-22 11:18 ` [EXT] " Sunil Kumar Kori
2022-09-23 6:36 ` David Marchand
2022-09-21 12:03 ` [PATCH 5/8] trace: fix race in debug dump David Marchand
2022-10-11 14:37 ` Jerin Jacob
2022-09-21 12:03 ` [PATCH 6/8] trace: fix metadata dump David Marchand
2022-09-21 12:03 ` [PATCH 7/8] trace: remove limitation on trace point name David Marchand
2022-10-11 14:49 ` Jerin Jacob
2022-10-12 7:48 ` David Marchand
2022-10-12 9:41 ` Jerin Jacob
2022-09-21 12:03 ` [PATCH 8/8] trace: remove limitation on directory David Marchand
2022-10-11 15:05 ` Jerin Jacob
2022-10-04 9:44 ` [PATCH v2 0/9] Trace subsystem fixes David Marchand
2022-10-04 9:44 ` [PATCH v2 1/9] trace: fix mode for new trace point David Marchand
2022-10-11 14:16 ` Jerin Jacob
2022-10-12 9:05 ` [EXT] " Sunil Kumar Kori
2022-10-04 9:44 ` [PATCH v2 2/9] trace: fix mode change David Marchand
2022-10-11 14:20 ` Jerin Jacob
2022-10-12 9:07 ` [EXT] " Sunil Kumar Kori
2022-10-04 9:44 ` [PATCH v2 3/9] trace: fix leak with regexp David Marchand
2022-10-11 14:21 ` Jerin Jacob
2022-10-12 9:10 ` [EXT] " Sunil Kumar Kori
2022-10-04 9:44 ` [PATCH v2 4/9] trace: rework loop on trace points David Marchand
2022-10-11 14:21 ` Jerin Jacob
2022-10-12 9:13 ` [EXT] " Sunil Kumar Kori
2022-10-04 9:44 ` [PATCH v2 5/9] trace: fix dynamically enabling " David Marchand
2022-10-12 9:23 ` [EXT] " Sunil Kumar Kori
2022-10-12 9:57 ` David Marchand
2022-10-12 10:15 ` Sunil Kumar Kori
2022-10-04 9:44 ` [PATCH v2 6/9] trace: fix race in debug dump David Marchand
2022-10-12 9:25 ` [EXT] " Sunil Kumar Kori
2022-10-04 9:44 ` [PATCH v2 7/9] trace: fix metadata dump David Marchand
2022-10-12 9:28 ` [EXT] " Sunil Kumar Kori
2022-10-04 9:44 ` [PATCH v2 8/9] trace: remove limitation on trace point name David Marchand
2022-10-04 9:44 ` [PATCH v2 9/9] trace: remove limitation on directory David Marchand
2022-10-12 9:32 ` [EXT] " Sunil Kumar Kori
2022-10-12 12:31 ` [PATCH v3 0/9] Trace subsystem fixes David Marchand
2022-10-12 12:31 ` [PATCH v3 1/9] trace: fix mode for new trace point David Marchand
2022-10-12 12:31 ` [PATCH v3 2/9] trace: fix mode change David Marchand
2022-10-12 12:31 ` [PATCH v3 3/9] trace: fix leak with regexp David Marchand
2022-10-12 12:31 ` [PATCH v3 4/9] trace: rework loop on trace points David Marchand
2022-10-12 12:31 ` [PATCH v3 5/9] trace: fix dynamically enabling " David Marchand
2022-10-13 14:53 ` [EXT] " Harman Kalra
2022-10-13 15:51 ` David Marchand
2022-10-13 17:07 ` Harman Kalra
2022-10-13 19:10 ` David Marchand
2022-10-14 4:26 ` Jerin Jacob
2022-10-14 8:19 ` David Marchand
2022-10-14 8:37 ` Jerin Jacob
2022-10-12 12:31 ` [PATCH v3 6/9] trace: fix race in debug dump David Marchand
2022-10-12 12:31 ` [PATCH v3 7/9] trace: fix metadata dump David Marchand
2022-10-12 12:31 ` [PATCH v3 8/9] trace: remove limitation on trace point name David Marchand
2022-10-12 12:31 ` [PATCH v3 9/9] trace: remove limitation on directory David Marchand
2022-10-18 13:26 ` [PATCH v4 00/11] Trace subsystem fixes and more David Marchand
2022-10-18 13:26 ` [PATCH v4 01/11] trace: fix mode for new trace point David Marchand
2022-10-18 13:26 ` [PATCH v4 02/11] trace: fix mode change David Marchand
2022-10-18 13:26 ` [PATCH v4 03/11] trace: fix leak with regexp David Marchand
2022-10-18 13:26 ` [PATCH v4 04/11] trace: rework loop on trace points David Marchand
2022-10-18 13:26 ` [PATCH v4 05/11] trace: fix dynamically enabling " David Marchand
2022-10-18 13:26 ` [PATCH v4 06/11] trace: fix race in debug dump David Marchand
2022-10-18 13:26 ` [PATCH v4 07/11] trace: fix metadata dump David Marchand
2022-10-18 13:26 ` [PATCH v4 08/11] trace: remove limitation on trace point name David Marchand
2022-10-18 13:36 ` Jerin Jacob
2022-10-18 13:26 ` [PATCH v4 09/11] trace: remove limitation on directory David Marchand
2022-10-18 13:26 ` [PATCH v4 10/11] trace: create new directory for each trace dump David Marchand
2022-10-18 13:26 ` David Marchand [this message]
2022-10-20 11:51 ` [PATCH v4 00/11] Trace subsystem fixes and more David Marchand
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=20221018132654.3760561-12-david.marchand@redhat.com \
--to=david.marchand@redhat.com \
--cc=bruce.richardson@intel.com \
--cc=ciara.power@intel.com \
--cc=dev@dpdk.org \
--cc=jerinj@marvell.com \
--cc=skori@marvell.com \
/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).