All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robin Jarry <rjarry@redhat.com>
To: dev@dpdk.org
Cc: Robin Jarry <rjarry@redhat.com>, Kevin Laatz <kevin.laatz@intel.com>
Subject: [PATCH v9 5/5] eal: add lcore usage telemetry endpoint
Date: Tue,  7 Feb 2023 20:37:31 +0100	[thread overview]
Message-ID: <20230207193731.1242505-6-rjarry@redhat.com> (raw)
In-Reply-To: <20221123102612.1688865-1-rjarry@redhat.com>

Allow fetching CPU cycles usage for all lcores with a single request.
This endpoint is intended for repeated and frequent invocations by
external monitoring systems and therefore returns condensed data.

It consists of a single dictionary with three keys: "lcore_ids",
"total_cycles" and "busy_cycles" that are mapped to three arrays of
integer values. Each array has the same number of values, one per lcore,
in the same order.

Example:

 --> /eal/lcore/usage
 {
   "/eal/lcore/usage": {
     "lcore_ids": [
       4,
       5
     ],
     "total_cycles": [
       23846845590,
       23900558914
     ],
     "busy_cycles": [
       21043446682,
       21448837316
     ]
   }
 }

Signed-off-by: Robin Jarry <rjarry@redhat.com>
Reviewed-by: Kevin Laatz <kevin.laatz@intel.com>
---

Notes:
    v8 -> v9: Updated with 64 bits integer telemetry functions

 doc/guides/rel_notes/release_23_03.rst |  5 ++-
 lib/eal/common/eal_common_lcore.c      | 60 ++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 2 deletions(-)

diff --git a/doc/guides/rel_notes/release_23_03.rst b/doc/guides/rel_notes/release_23_03.rst
index 17d38d5ea264..4f2878846829 100644
--- a/doc/guides/rel_notes/release_23_03.rst
+++ b/doc/guides/rel_notes/release_23_03.rst
@@ -57,8 +57,9 @@ New Features
 
 * **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()``.
+  * The ``/eal/lcore/list``, ``/eal/lcore/usage`` 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.
 
diff --git a/lib/eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c
index fcda7c50119a..088adb14b4b6 100644
--- a/lib/eal/common/eal_common_lcore.c
+++ b/lib/eal/common/eal_common_lcore.c
@@ -569,6 +569,63 @@ handle_lcore_info(const char *cmd __rte_unused, const char *params, struct rte_t
 	return rte_lcore_iterate(lcore_telemetry_info_cb, &info);
 }
 
+struct lcore_telemetry_usage {
+	struct rte_tel_data *lcore_ids;
+	struct rte_tel_data *total_cycles;
+	struct rte_tel_data *busy_cycles;
+};
+
+static int
+lcore_telemetry_usage_cb(unsigned int lcore_id, void *arg)
+{
+	struct lcore_telemetry_usage *u = arg;
+	struct rte_lcore_usage usage;
+	rte_lcore_usage_cb usage_cb;
+
+	/* 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. */
+	usage_cb = lcore_usage_cb;
+	if (usage_cb != NULL && usage_cb(lcore_id, &usage) == 0) {
+		rte_tel_data_add_array_uint(u->lcore_ids, lcore_id);
+		rte_tel_data_add_array_uint(u->total_cycles, usage.total_cycles);
+		rte_tel_data_add_array_uint(u->busy_cycles, usage.busy_cycles);
+	}
+
+	return 0;
+}
+
+static int
+handle_lcore_usage(const char *cmd __rte_unused,
+		const char *params __rte_unused,
+		struct rte_tel_data *d)
+{
+	struct lcore_telemetry_usage usage;
+	struct rte_tel_data *lcore_ids = rte_tel_data_alloc();
+	struct rte_tel_data *total_cycles = rte_tel_data_alloc();
+	struct rte_tel_data *busy_cycles = rte_tel_data_alloc();
+
+	if (!lcore_ids || !total_cycles || !busy_cycles) {
+		rte_tel_data_free(lcore_ids);
+		rte_tel_data_free(total_cycles);
+		rte_tel_data_free(busy_cycles);
+		return -ENOMEM;
+	}
+
+	rte_tel_data_start_dict(d);
+	rte_tel_data_start_array(lcore_ids, RTE_TEL_UINT_VAL);
+	rte_tel_data_start_array(total_cycles, RTE_TEL_UINT_VAL);
+	rte_tel_data_start_array(busy_cycles, RTE_TEL_UINT_VAL);
+	rte_tel_data_add_dict_container(d, "lcore_ids", lcore_ids, 0);
+	rte_tel_data_add_dict_container(d, "total_cycles", total_cycles, 0);
+	rte_tel_data_add_dict_container(d, "busy_cycles", busy_cycles, 0);
+	usage.lcore_ids = lcore_ids;
+	usage.total_cycles = total_cycles;
+	usage.busy_cycles = busy_cycles;
+
+	return rte_lcore_iterate(lcore_telemetry_usage_cb, &usage);
+}
+
 RTE_INIT(lcore_telemetry)
 {
 	rte_telemetry_register_cmd(
@@ -577,5 +634,8 @@ RTE_INIT(lcore_telemetry)
 	rte_telemetry_register_cmd(
 		"/eal/lcore/info", handle_lcore_info,
 		"Returns lcore info. Parameters: int lcore_id");
+	rte_telemetry_register_cmd(
+		"/eal/lcore/usage", handle_lcore_usage,
+		"Returns lcore cycles usage. Takes no parameters");
 }
 #endif /* !RTE_EXEC_ENV_WINDOWS */
-- 
2.39.1


  parent reply	other threads:[~2023-02-07 19:38 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   ` [PATCH v8 2/5] eal: report applications lcore usage Robin Jarry
2023-02-06  4:00     ` 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 ` Robin Jarry [this message]
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=20230207193731.1242505-6-rjarry@redhat.com \
    --to=rjarry@redhat.com \
    --cc=dev@dpdk.org \
    --cc=kevin.laatz@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.