From: Robin Jarry <rjarry@redhat.com>
To: dev@dpdk.org
Cc: "Robin Jarry" <rjarry@redhat.com>,
"Morten Brørup" <mb@smartsharesystems.com>,
"Kevin Laatz" <kevin.laatz@intel.com>
Subject: [PATCH v8 2/5] eal: report applications lcore usage
Date: Thu, 2 Feb 2023 14:43:25 +0100 [thread overview]
Message-ID: <20230202134329.539625-3-rjarry@redhat.com> (raw)
In-Reply-To: <20230202134329.539625-1-rjarry@redhat.com>
Allow applications to register a callback that will be invoked in
rte_lcore_dump() and when requesting lcore info in the telemetry API.
The callback is expected to return the number of TSC cycles that have
passed since application start and the number of these cycles that were
spent doing busy work.
Signed-off-by: Robin Jarry <rjarry@redhat.com>
Acked-by: Morten Brørup <mb@smartsharesystems.com>
Reviewed-by: Kevin Laatz <kevin.laatz@intel.com>
---
Notes:
v7 -> v8: no change
doc/guides/rel_notes/release_23_03.rst | 7 ++++
lib/eal/common/eal_common_lcore.c | 48 ++++++++++++++++++++++++--
lib/eal/include/rte_lcore.h | 35 +++++++++++++++++++
lib/eal/version.map | 1 +
4 files changed, 89 insertions(+), 2 deletions(-)
diff --git a/doc/guides/rel_notes/release_23_03.rst b/doc/guides/rel_notes/release_23_03.rst
index 73f5d94e143d..f407dc3df7a8 100644
--- a/doc/guides/rel_notes/release_23_03.rst
+++ b/doc/guides/rel_notes/release_23_03.rst
@@ -78,6 +78,13 @@ New Features
``rte_event_dev_config::nb_single_link_event_port_queues`` parameter
required for eth_rx, eth_tx, crypto and timer eventdev adapters.
+* **Added support for reporting lcore usage in applications.**
+
+ * The ``/eal/lcore/list`` and ``/eal/lcore/info`` telemetry endpoints have
+ been added to provide information similar to ``rte_lcore_dump()``.
+ * Applications can register a callback at startup via
+ ``rte_lcore_register_usage_cb()`` to provide lcore usage information.
+
Removed Items
-------------
diff --git a/lib/eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c
index f53fc17b4d04..bbb734098b42 100644
--- a/lib/eal/common/eal_common_lcore.c
+++ b/lib/eal/common/eal_common_lcore.c
@@ -2,6 +2,7 @@
* Copyright(c) 2010-2014 Intel Corporation
*/
+#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
@@ -437,20 +438,49 @@ lcore_role_str(enum rte_lcore_role_t role)
}
}
+static rte_lcore_usage_cb lcore_usage_cb;
+
+void
+rte_lcore_register_usage_cb(rte_lcore_usage_cb cb)
+{
+ lcore_usage_cb = cb;
+}
+
static int
lcore_dump_cb(unsigned int lcore_id, void *arg)
{
struct rte_config *cfg = rte_eal_get_configuration();
char cpuset[RTE_CPU_AFFINITY_STR_LEN];
+ struct rte_lcore_usage usage;
+ rte_lcore_usage_cb usage_cb;
+ char *usage_str = NULL;
FILE *f = arg;
int ret;
+ /* The callback may not set all the fields in the structure, so clear it here. */
+ memset(&usage, 0, sizeof(usage));
+ /*
+ * Guard against concurrent modification of lcore_usage_cb.
+ * rte_lcore_register_usage_cb() should only be called once at application init
+ * but nothing prevents and application to reset the callback to NULL.
+ */
+ usage_cb = lcore_usage_cb;
+ if (usage_cb != NULL && usage_cb(lcore_id, &usage) == 0) {
+ if (asprintf(&usage_str, ", busy cycles %"PRIu64"/%"PRIu64,
+ usage.busy_cycles, usage.total_cycles) < 0) {
+ return -ENOMEM;
+ }
+ }
ret = eal_thread_dump_affinity(&lcore_config[lcore_id].cpuset, cpuset,
sizeof(cpuset));
- fprintf(f, "lcore %u, socket %u, role %s, cpuset %s%s\n", lcore_id,
+ fprintf(f, "lcore %u, socket %u, role %s, cpuset %s%s%s\n", lcore_id,
rte_lcore_to_socket_id(lcore_id),
lcore_role_str(cfg->lcore_role[lcore_id]),
- cpuset, ret == 0 ? "" : "...");
+ cpuset, ret == 0 ? "" : "...",
+ usage_str ? usage_str : "");
+
+ free(usage_str);
+
return 0;
}
@@ -489,7 +519,9 @@ lcore_telemetry_info_cb(unsigned int lcore_id, void *arg)
{
struct rte_config *cfg = rte_eal_get_configuration();
struct lcore_telemetry_info *info = arg;
+ struct rte_lcore_usage usage;
struct rte_tel_data *cpuset;
+ rte_lcore_usage_cb usage_cb;
unsigned int cpu;
if (info->lcore_id != lcore_id)
@@ -508,6 +540,18 @@ lcore_telemetry_info_cb(unsigned int lcore_id, void *arg)
rte_tel_data_add_array_int(cpuset, cpu);
}
rte_tel_data_add_dict_container(info->d, "cpuset", cpuset, 0);
+ /* The callback may not set all the fields in the structure, so clear it here. */
+ memset(&usage, 0, sizeof(usage));
+ /*
+ * Guard against concurrent modification of lcore_usage_cb.
+ * rte_lcore_register_usage_cb() should only be called once at application init
+ * but nothing prevents and application to reset the callback to NULL.
+ */
+ usage_cb = lcore_usage_cb;
+ if (usage_cb != NULL && usage_cb(lcore_id, &usage) == 0) {
+ rte_tel_data_add_dict_u64(info->d, "total_cycles", usage.total_cycles);
+ rte_tel_data_add_dict_u64(info->d, "busy_cycles", usage.busy_cycles);
+ }
return 0;
}
diff --git a/lib/eal/include/rte_lcore.h b/lib/eal/include/rte_lcore.h
index 9c7865052100..b1c8afb05d28 100644
--- a/lib/eal/include/rte_lcore.h
+++ b/lib/eal/include/rte_lcore.h
@@ -328,6 +328,41 @@ typedef int (*rte_lcore_iterate_cb)(unsigned int lcore_id, void *arg);
int
rte_lcore_iterate(rte_lcore_iterate_cb cb, void *arg);
+/**
+ * lcore usage statistics.
+ */
+struct rte_lcore_usage {
+ /** The total amount of time since application start, in TSC cycles. */
+ uint64_t total_cycles;
+ /** The amount of busy time since application start, in TSC cycles. */
+ uint64_t busy_cycles;
+};
+
+/**
+ * Callback to allow applications to report lcore usage.
+ *
+ * @param [in] lcore_id
+ * The lcore to consider.
+ * @param [out] usage
+ * Counters representing this lcore usage. This can never be NULL.
+ * @return
+ * - 0 if fields in usage were updated successfully. The fields that the
+ * application does not support must not be modified.
+ * - a negative value if the information is not available or if any error occurred.
+ */
+typedef int (*rte_lcore_usage_cb)(unsigned int lcore_id, struct rte_lcore_usage *usage);
+
+/**
+ * Register a callback from an application to be called in rte_lcore_dump() and
+ * the /eal/lcore/info telemetry endpoint handler. Applications are expected to
+ * report lcore usage statistics via this callback.
+ *
+ * @param cb
+ * The callback function.
+ */
+__rte_experimental
+void rte_lcore_register_usage_cb(rte_lcore_usage_cb cb);
+
/**
* List all lcores.
*
diff --git a/lib/eal/version.map b/lib/eal/version.map
index 6523102157e2..1f70caac7b9c 100644
--- a/lib/eal/version.map
+++ b/lib/eal/version.map
@@ -442,6 +442,7 @@ EXPERIMENTAL {
# added in 23.03
rte_thread_set_name;
+ rte_lcore_register_usage_cb;
};
INTERNAL {
--
2.39.1
next prev parent reply other threads:[~2023-02-02 13:44 UTC|newest]
Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-23 10:26 [RFC PATCH 0/4] lcore telemetry improvements Robin Jarry
2022-11-23 10:26 ` [RFC PATCH 1/4] eal: add lcore info in telemetry Robin Jarry
2022-11-23 16:44 ` Stephen Hemminger
2022-11-23 23:15 ` Robin Jarry
2022-11-23 10:26 ` [RFC PATCH 2/4] eal: allow applications to report their cpu utilization Robin Jarry
2022-11-23 10:26 ` [RFC PATCH 3/4] testpmd: add show lcores command Robin Jarry
2022-11-23 10:26 ` [RFC PATCH 4/4] testpmd: report lcore usage Robin Jarry
2022-11-28 8:59 ` [PATCH v2 0/4] lcore telemetry improvements Robin Jarry
2022-11-28 8:59 ` [PATCH v2 1/4] eal: add lcore info in telemetry Robin Jarry
2022-11-28 8:59 ` [PATCH v2 2/4] eal: allow applications to report their cpu cycles utilization Robin Jarry
2022-11-28 10:52 ` Morten Brørup
2022-11-29 8:19 ` Robin Jarry
2022-11-28 8:59 ` [PATCH v2 3/4] testpmd: add dump_lcores command Robin Jarry
2022-11-28 8:59 ` [PATCH v2 4/4] testpmd: report lcore usage Robin Jarry
2022-11-29 15:33 ` [PATCH v3 0/4] lcore telemetry improvements Robin Jarry
2022-11-29 15:33 ` [PATCH v3 1/4] eal: add lcore info in telemetry Robin Jarry
2022-11-29 15:33 ` [PATCH v3 2/4] eal: allow applications to report their cpu cycles usage Robin Jarry
2022-11-29 16:10 ` Mattias Rönnblom
2022-12-07 11:00 ` Robin Jarry
2022-12-07 11:21 ` Morten Brørup
2022-11-29 15:33 ` [PATCH v3 3/4] testpmd: add dump_lcores command Robin Jarry
2022-11-29 15:33 ` [PATCH v3 4/4] testpmd: report lcore usage Robin Jarry
2022-11-29 16:14 ` [PATCH v3 0/4] lcore telemetry improvements Mattias Rönnblom
2022-12-07 16:21 ` [PATCH " Robin Jarry
2022-12-07 16:21 ` [PATCH 1/4] eal: add lcore info in telemetry Robin Jarry
2022-12-07 16:21 ` [PATCH 2/4] eal: allow applications to report their cpu usage Robin Jarry
2022-12-13 15:49 ` Robin Jarry
2022-12-13 16:39 ` Morten Brørup
2022-12-13 17:45 ` Tyler Retzlaff
2022-12-07 16:21 ` [PATCH 3/4] testpmd: add dump_lcores command Robin Jarry
2022-12-07 16:21 ` [PATCH 4/4] testpmd: report lcore usage Robin Jarry
2022-12-16 10:21 ` [PATCH v5 0/4] lcore telemetry improvements Robin Jarry
2022-12-16 10:21 ` [PATCH v5 1/4] eal: add lcore info in telemetry Robin Jarry
2023-01-18 9:42 ` Kevin Laatz
2023-01-18 10:21 ` Morten Brørup
2023-01-18 11:03 ` Kevin Laatz
2023-01-18 11:35 ` Morten Brørup
2023-01-18 14:45 ` Robin Jarry
2023-01-18 16:01 ` Kevin Laatz
2023-01-18 16:17 ` Robin Jarry
2022-12-16 10:21 ` [PATCH v5 2/4] eal: allow applications to report their cpu usage Robin Jarry
2022-12-16 10:47 ` Morten Brørup
2023-01-04 10:13 ` Robin Jarry
2023-01-04 10:28 ` Morten Brørup
2022-12-22 12:41 ` Konstantin Ananyev
2023-01-04 10:10 ` Robin Jarry
2023-01-04 10:53 ` Konstantin Ananyev
2023-01-18 16:46 ` Robin Jarry
2023-02-06 20:07 ` Konstantin Ananyev
2023-02-06 20:29 ` Robin Jarry
2023-02-06 20:34 ` Konstantin Ananyev
2023-02-06 20:39 ` Robin Jarry
2023-02-06 20:44 ` Konstantin Ananyev
2023-02-06 20:55 ` Robin Jarry
2023-02-07 13:12 ` Konstantin Ananyev
2023-01-04 10:15 ` Robin Jarry
2022-12-16 10:21 ` [PATCH v5 3/4] testpmd: add dump_lcores command Robin Jarry
2022-12-22 12:43 ` Konstantin Ananyev
2022-12-16 10:21 ` [PATCH v5 4/4] testpmd: report lcore usage Robin Jarry
2022-12-22 12:44 ` Konstantin Ananyev
2023-01-18 9:13 ` [PATCH v5 0/4] lcore telemetry improvements Robin Jarry
2023-01-19 15:06 ` [PATCH v6 0/5] " Robin Jarry
2023-01-19 15:06 ` [PATCH v6 1/5] eal: add lcore info in telemetry Robin Jarry
2023-01-19 19:42 ` Kevin Laatz
2023-01-26 11:19 ` David Marchand
2023-01-19 15:06 ` [PATCH v6 2/5] eal: allow applications to report their cpu usage Robin Jarry
2023-01-19 19:42 ` Kevin Laatz
2023-01-26 11:22 ` David Marchand
2023-01-19 15:06 ` [PATCH v6 3/5] testpmd: add dump_lcores command Robin Jarry
2023-01-19 19:42 ` Kevin Laatz
2023-01-26 11:22 ` David Marchand
2023-01-19 15:06 ` [PATCH v6 4/5] testpmd: report lcore usage Robin Jarry
2023-01-19 19:42 ` Kevin Laatz
2023-01-19 15:06 ` [PATCH v6 5/5] telemetry: add /eal/lcore/usage endpoint Robin Jarry
2023-01-19 16:21 ` Morten Brørup
2023-01-19 16:34 ` Robin Jarry
2023-01-19 16:45 ` Morten Brørup
2023-01-19 19:42 ` Kevin Laatz
2023-02-02 13:43 ` [PATCH v8 0/5] lcore telemetry improvements Robin Jarry
2023-02-02 13:43 ` [PATCH v8 1/5] eal: add lcore info in telemetry Robin Jarry
2023-02-06 3:50 ` fengchengwen
2023-02-06 8:22 ` Robin Jarry
2023-02-06 11:22 ` fengchengwen
2023-02-06 11:46 ` Robin Jarry
2023-02-06 12:08 ` fengchengwen
2023-02-02 13:43 ` Robin Jarry [this message]
2023-02-06 4:00 ` [PATCH v8 2/5] eal: report applications lcore usage fengchengwen
2023-02-06 7:36 ` Morten Brørup
2023-02-06 8:21 ` Robin Jarry
2023-02-06 11:18 ` fengchengwen
2023-02-06 8:48 ` David Marchand
2023-02-06 9:03 ` Robin Jarry
2023-02-02 13:43 ` [PATCH v8 3/5] app/testpmd: add dump command for lcores Robin Jarry
2023-02-06 3:34 ` fengchengwen
2023-02-02 13:43 ` [PATCH v8 4/5] app/testpmd: report lcore usage Robin Jarry
2023-02-06 3:31 ` fengchengwen
2023-02-06 8:58 ` David Marchand
2023-02-06 9:08 ` Robin Jarry
2023-02-06 15:06 ` David Marchand
2023-02-02 13:43 ` [PATCH v8 5/5] eal: add lcore usage telemetry endpoint Robin Jarry
2023-02-02 14:00 ` Morten Brørup
2023-02-06 3:27 ` fengchengwen
2023-02-06 8:24 ` Robin Jarry
2023-02-06 11:32 ` fengchengwen
2023-02-05 23:11 ` [PATCH v8 0/5] lcore telemetry improvements Thomas Monjalon
2023-02-07 19:37 ` [PATCH v9 " Robin Jarry
2023-02-07 19:37 ` [PATCH v9 1/5] eal: add lcore info in telemetry Robin Jarry
2023-02-08 2:24 ` lihuisong (C)
2023-02-08 17:04 ` Robin Jarry
2023-02-09 2:18 ` lihuisong (C)
2023-02-09 8:31 ` David Marchand
2023-02-09 8:38 ` David Marchand
2023-02-07 19:37 ` [PATCH v9 2/5] eal: report applications lcore usage Robin Jarry
2023-02-07 19:37 ` [PATCH v9 3/5] app/testpmd: add dump command for lcores Robin Jarry
2023-02-07 19:37 ` [PATCH v9 4/5] app/testpmd: report lcore usage Robin Jarry
2023-02-08 2:59 ` lihuisong (C)
2023-02-07 19:37 ` [PATCH v9 5/5] eal: add lcore usage telemetry endpoint Robin Jarry
2023-02-08 8:45 ` [RESEND PATCH v9 0/5] lcore telemetry improvements Robin Jarry
2023-02-08 8:45 ` [RESEND PATCH v9 1/5] eal: add lcore info in telemetry Robin Jarry
2023-02-08 8:45 ` [RESEND PATCH v9 2/5] eal: report applications lcore usage Robin Jarry
2023-02-08 8:45 ` [RESEND PATCH v9 3/5] app/testpmd: add dump command for lcores Robin Jarry
2023-02-08 8:45 ` [RESEND PATCH v9 4/5] app/testpmd: report lcore usage Robin Jarry
2023-02-09 8:43 ` David Marchand
2023-02-08 8:45 ` [RESEND PATCH v9 5/5] eal: add lcore usage telemetry endpoint Robin Jarry
2023-02-09 8:44 ` [RESEND PATCH v9 0/5] lcore telemetry improvements David Marchand
2023-02-09 9:43 ` [PATCH v10 " Robin Jarry
2023-02-09 9:43 ` [PATCH v10 1/5] eal: add lcore info in telemetry Robin Jarry
2023-02-09 9:43 ` [PATCH v10 2/5] eal: report applications lcore usage Robin Jarry
2023-02-09 9:43 ` [PATCH v10 3/5] app/testpmd: add dump command for lcores Robin Jarry
2023-02-09 9:43 ` [PATCH v10 4/5] app/testpmd: report lcore usage Robin Jarry
2023-02-09 9:43 ` [PATCH v10 5/5] eal: add lcore usage telemetry endpoint Robin Jarry
2023-02-10 13:27 ` [PATCH v10 0/5] lcore telemetry improvements 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=20230202134329.539625-3-rjarry@redhat.com \
--to=rjarry@redhat.com \
--cc=dev@dpdk.org \
--cc=kevin.laatz@intel.com \
--cc=mb@smartsharesystems.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).