From: Ciara Power <ciara.power@intel.com>
To: dev@dpdk.org
Cc: Ciara Power <ciara.power@intel.com>,
Bruce Richardson <bruce.richardson@intel.com>
Subject: [dpdk-dev] [RFC 6/6] examples/l3fwd-power: enable use of process-info
Date: Thu, 5 Dec 2019 17:31:28 +0000 [thread overview]
Message-ID: <20191205173128.64543-7-ciara.power@intel.com> (raw)
In-Reply-To: <20191205173128.64543-1-ciara.power@intel.com>
The l3fwd-power example app now registers a stats command with
process_info, and provides a callback function to handle formatting the
power stats.
Using the process-info library in this app replaces the previous method
of making l3fwd-power stats available in the metrics library, for use
with telemetry.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Ciara Power <ciara.power@intel.com>
---
examples/l3fwd-power/main.c | 83 +++++++++++--------------------------
1 file changed, 25 insertions(+), 58 deletions(-)
diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index d049d8a5d..939b3dd88 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -45,7 +45,7 @@
#include <rte_power.h>
#include <rte_spinlock.h>
#include <rte_power_empty_poll.h>
-#include <rte_metrics.h>
+#include <rte_process_info.h>
#include "perf_core.h"
#include "main.h"
@@ -131,7 +131,7 @@
#define EMPTY_POLL_MED_THRESHOLD 350000UL
#define EMPTY_POLL_HGH_THRESHOLD 580000UL
-
+#define NUM_TELSTATS RTE_DIM(telstats_strings)
static uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT;
static uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT;
@@ -154,11 +154,6 @@ volatile bool quit_signal;
static struct ep_params *ep_params;
static struct ep_policy policy;
static long ep_med_edpi, ep_hgh_edpi;
-/* timer to update telemetry every 500ms */
-static struct rte_timer telemetry_timer;
-
-/* stats index returned by metrics lib */
-int telstats_index;
struct telstats_name {
char name[RTE_ETH_XSTATS_NAME_SIZE];
@@ -187,9 +182,6 @@ enum busy_rate {
#define MIN_CYCLES 1500000ULL
#define MAX_CYCLES 22000000ULL
-/* (500ms) */
-#define TELEMETRY_INTERVALS_PER_SEC 2
-
static int parse_ptype; /**< Parse packet type using rx callback, and */
/**< disabled by default */
@@ -2087,17 +2079,21 @@ init_power_library(void)
}
return ret;
}
-static void
-update_telemetry(__attribute__((unused)) struct rte_timer *tim,
- __attribute__((unused)) void *arg)
+
+static int
+handle_app_stats(const char *cmd __rte_unused,
+ const char *params __rte_unused,
+ char *buffer, int buf_len)
{
unsigned int lcore_id = rte_lcore_id();
struct lcore_conf *qconf;
uint64_t app_eps = 0, app_fps = 0, app_br = 0;
- uint64_t values[3] = {0};
- int ret;
+ uint64_t values[NUM_TELSTATS];
+ int ret, used = 0;
+ uint32_t i;
uint64_t count = 0;
+ used = strlcpy(buffer, "{", buf_len);
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
qconf = &lcore_conf[lcore_id];
if (qconf->n_rx_queue == 0)
@@ -2114,32 +2110,21 @@ update_telemetry(__attribute__((unused)) struct rte_timer *tim,
values[0] = app_eps/count;
values[1] = app_fps/count;
values[2] = app_br/count;
- } else {
- values[0] = 0;
- values[1] = 0;
- values[2] = 0;
+ } else
+ memset(values, 0, sizeof(uint64_t) * NUM_TELSTATS);
+
+ for (i = 0; i < NUM_TELSTATS; i++) {
+ ret = snprintf(buffer + used, buf_len - used, "\"%s\":%"PRIu64",",
+ telstats_strings[i].name, values[i]);
+ if (ret + used >= buf_len)
+ break;
+ used += ret;
}
- ret = rte_metrics_update_values(RTE_METRICS_GLOBAL, telstats_index,
- values, RTE_DIM(values));
- if (ret < 0)
- RTE_LOG(WARNING, POWER, "failed to update metrcis\n");
+ buffer[used - 1] = '}';
+ return used;
}
-static void
-telemetry_setup_timer(void)
-{
- int lcore_id = rte_lcore_id();
- uint64_t hz = rte_get_timer_hz();
- uint64_t ticks;
- ticks = hz / TELEMETRY_INTERVALS_PER_SEC;
- rte_timer_reset_sync(&telemetry_timer,
- ticks,
- PERIODICAL,
- lcore_id,
- update_telemetry,
- NULL);
-}
static void
empty_poll_setup_timer(void)
{
@@ -2176,8 +2161,6 @@ launch_timer(unsigned int lcore_id)
if (app_mode == APP_MODE_EMPTY_POLL)
empty_poll_setup_timer();
- else
- telemetry_setup_timer();
cycles_10ms = rte_get_timer_hz() / 100;
@@ -2196,7 +2179,6 @@ launch_timer(unsigned int lcore_id)
return 0;
}
-
int
main(int argc, char **argv)
{
@@ -2212,8 +2194,6 @@ main(int argc, char **argv)
uint32_t dev_rxq_num, dev_txq_num;
uint8_t nb_rx_queue, queue, socketid;
uint16_t portid;
- uint8_t num_telstats = RTE_DIM(telstats_strings);
- const char *ptr_strings[num_telstats];
/* catch SIGINT and restore cpufreq governor to ondemand */
signal(SIGINT, signal_exit_now);
@@ -2507,29 +2487,16 @@ main(int argc, char **argv)
rte_eal_mp_remote_launch(main_empty_poll_loop, NULL,
SKIP_MASTER);
} else {
- unsigned int i;
-
- /* Init metrics library */
- rte_metrics_init(rte_socket_id());
- /** Register stats with metrics library */
- for (i = 0; i < num_telstats; i++)
- ptr_strings[i] = telstats_strings[i].name;
-
- ret = rte_metrics_reg_names(ptr_strings, num_telstats);
- if (ret >= 0)
- telstats_index = ret;
- else
- rte_exit(EXIT_FAILURE, "failed to register metrics names");
-
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
rte_spinlock_init(&stats[lcore_id].telemetry_lock);
}
- rte_timer_init(&telemetry_timer);
+ rte_process_info_register("/l3fwd-power:stats",
+ handle_app_stats);
rte_eal_mp_remote_launch(main_telemetry_loop, NULL,
SKIP_MASTER);
}
- if (app_mode == APP_MODE_EMPTY_POLL || app_mode == APP_MODE_TELEMETRY)
+ if (app_mode == APP_MODE_EMPTY_POLL)
launch_timer(rte_lcore_id());
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
--
2.17.1
next prev parent reply other threads:[~2019-12-05 17:35 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-05 17:31 [dpdk-dev] [RFC 0/6] replace telemetry with process_info Ciara Power
2019-12-05 17:31 ` [dpdk-dev] [RFC 1/6] process-info: introduce process-info library Ciara Power
2019-12-05 17:31 ` [dpdk-dev] [RFC 2/6] eal: integrate " Ciara Power
2019-12-05 17:31 ` [dpdk-dev] [RFC 3/6] usertools: add process-info python script Ciara Power
2019-12-05 17:31 ` [dpdk-dev] [RFC 4/6] ethdev: add callback support for process-info Ciara Power
2019-12-05 17:31 ` [dpdk-dev] [RFC 5/6] rawdev: " Ciara Power
2019-12-05 17:31 ` Ciara Power [this message]
2020-02-05 15:21 ` [dpdk-dev] [RFC 0/6] replace telemetry with process_info David Marchand
2020-02-05 17:12 ` Bruce Richardson
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=20191205173128.64543-7-ciara.power@intel.com \
--to=ciara.power@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
/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).