All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robin Jarry <rjarry@redhat.com>
To: dev@dpdk.org
Cc: "Bruce Richardson" <bruce.richardson@intel.com>,
	"Jerin Jacob" <jerinj@marvell.com>,
	"Kevin Laatz" <kevin.laatz@intel.com>,
	"Konstantin Ananyev" <konstantin.v.ananyev@yandex.ru>,
	"Mattias Rönnblom" <hofors@lysator.liu.se>,
	"Morten Brørup" <mb@smartsharesystems.com>,
	"Robin Jarry" <rjarry@redhat.com>
Subject: [RFC PATCH 2/4] eal: allow applications to report their cpu utilization
Date: Wed, 23 Nov 2022 11:26:10 +0100	[thread overview]
Message-ID: <20221123102612.1688865-3-rjarry@redhat.com> (raw)
In-Reply-To: <20221123102612.1688865-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 a number between 0 and 100
representing the percentage of busy cycles spent over a fixed period of
time. The period of time is configured when registering the callback.

Cc: Bruce Richardson <bruce.richardson@intel.com>
Cc: Jerin Jacob <jerinj@marvell.com>
Cc: Kevin Laatz <kevin.laatz@intel.com>
Cc: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>
Cc: Mattias Rönnblom <hofors@lysator.liu.se>
Cc: Morten Brørup <mb@smartsharesystems.com>
Signed-off-by: Robin Jarry <rjarry@redhat.com>
---
 lib/eal/common/eal_common_lcore.c | 37 ++++++++++++++++++++++++++++---
 lib/eal/include/rte_lcore.h       | 30 +++++++++++++++++++++++++
 lib/eal/version.map               |  1 +
 3 files changed, 65 insertions(+), 3 deletions(-)

diff --git a/lib/eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c
index 31e3965dc5ad..9a85fd8854df 100644
--- a/lib/eal/common/eal_common_lcore.c
+++ b/lib/eal/common/eal_common_lcore.c
@@ -420,14 +420,36 @@ rte_lcore_iterate(rte_lcore_iterate_cb cb, void *arg)
 	return ret;
 }
 
+static rte_lcore_busy_percent_cb lcore_busy_cb;
+static unsigned int lcore_busy_period;
+
+void
+rte_lcore_register_busy_percent_cb(rte_lcore_busy_percent_cb cb, unsigned int period)
+{
+	lcore_busy_cb = cb;
+	lcore_busy_period = period;
+}
+
+static int
+lcore_busy_percent(unsigned int lcore_id)
+{
+	int percent = -1;
+	if (lcore_busy_cb)
+		percent = lcore_busy_cb(lcore_id);
+	if (percent > 100)
+		percent = 100;
+	return percent;
+}
+
 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];
+	char busy_str[16];
 	const char *role;
 	FILE *f = arg;
-	int ret;
+	int ret, busy;
 
 	switch (cfg->lcore_role[lcore_id]) {
 	case ROLE_RTE:
@@ -446,9 +468,16 @@ lcore_dump_cb(unsigned int lcore_id, void *arg)
 
 	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,
+	busy = lcore_busy_percent(lcore_id);
+	if (busy < 0) {
+		snprintf(busy_str, sizeof(busy_str), "%s", "N/A");
+	} else {
+		snprintf(busy_str, sizeof(busy_str), "%d%% last %d sec",
+			busy, lcore_busy_period);
+	}
+	fprintf(f, "lcore %u, socket %u, role %s, cpuset %s%s, busy %s\n", lcore_id,
 		rte_lcore_to_socket_id(lcore_id), role, cpuset,
-		ret == 0 ? "" : "...");
+		ret == 0 ? "" : "...", busy_str);
 	return 0;
 }
 
@@ -517,6 +546,8 @@ lcore_telemetry_info_cb(unsigned int lcore_id, void *arg)
 	rte_tel_data_add_dict_int(info->d, "socket", rte_lcore_to_socket_id(lcore_id));
 	rte_tel_data_add_dict_string(info->d, "role", role);
 	rte_tel_data_add_dict_string(info->d, "cpuset", cpuset);
+	rte_tel_data_add_dict_int(info->d, "busy_percent", lcore_busy_percent(lcore_id));
+	rte_tel_data_add_dict_int(info->d, "busy_period", lcore_busy_period);
 
 	return 0;
 }
diff --git a/lib/eal/include/rte_lcore.h b/lib/eal/include/rte_lcore.h
index 6938c3fd7b81..b1223eaa12bf 100644
--- a/lib/eal/include/rte_lcore.h
+++ b/lib/eal/include/rte_lcore.h
@@ -328,6 +328,36 @@ typedef int (*rte_lcore_iterate_cb)(unsigned int lcore_id, void *arg);
 int
 rte_lcore_iterate(rte_lcore_iterate_cb cb, void *arg);
 
+/**
+ * Callback to allow applications to report CPU utilization.
+ *
+ * @param lcore_id
+ *   The lcore to consider.
+ * @return
+ *   - A number between 0 and 100 representing the percentage of busy cycles
+ *     over the last period for the given lcore_id.
+ *   - -1 if the information is not available or if any error occurred.
+ */
+typedef int (*rte_lcore_busy_percent_cb)(unsigned int lcore_id);
+
+/**
+ * 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 return a number between 0 and 100 representing
+ * the percentage of busy cycles over the last period for the provided lcore_id.
+ * The implementation details for computing such a ratio is specific to each
+ * application.
+ *
+ * @param cb
+ *   The callback function.
+ * @param period
+ *   The period in seconds over which the percentage of busy cycles will be
+ *   reported by the application.
+ */
+__rte_experimental
+void rte_lcore_register_busy_percent_cb(rte_lcore_busy_percent_cb cb, unsigned int period);
+
 /**
  * List all lcores.
  *
diff --git a/lib/eal/version.map b/lib/eal/version.map
index 7ad12a7dc985..138537ee5835 100644
--- a/lib/eal/version.map
+++ b/lib/eal/version.map
@@ -440,6 +440,7 @@ EXPERIMENTAL {
 	rte_thread_detach;
 	rte_thread_equal;
 	rte_thread_join;
+	rte_lcore_register_busy_percent_cb;
 };
 
 INTERNAL {
-- 
2.38.1


  parent reply	other threads:[~2022-11-23 10:26 UTC|newest]

Thread overview: 136+ 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 ` Robin Jarry [this message]
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 ` [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
  -- strict thread matches above, loose matches on Subject: below --
2022-11-23 10:19 [RFC PATCH 0/4] " Robin Jarry
2022-11-23 10:19 ` [RFC PATCH 2/4] eal: allow applications to report their cpu utilization Robin Jarry
2022-11-23 11:52   ` Morten Brørup
2022-11-23 13:29     ` Robin Jarry
2022-11-23 16:38   ` Stephen Hemminger

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=20221123102612.1688865-3-rjarry@redhat.com \
    --to=rjarry@redhat.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=hofors@lysator.liu.se \
    --cc=jerinj@marvell.com \
    --cc=kevin.laatz@intel.com \
    --cc=konstantin.v.ananyev@yandex.ru \
    --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 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.