diff options
author | Xavier Simonart <xavier.simonart@intel.com> | 2018-01-14 18:13:09 +0100 |
---|---|---|
committer | Xavier Simonart <xavier.simonart@intel.com> | 2018-01-16 16:53:26 +0100 |
commit | ab933e9fd74d5a4e20eeb30e3fab3977e98b8743 (patch) | |
tree | 81bd77c978e4308cf51f78391397be7be6998af3 /VNFs/DPPD-PROX/stats_parser.c | |
parent | deab1ee8197298bd7cf30d259a28206841d59383 (diff) |
Integrate irq mode into PROX (support display and command line)
irq mode can be used to show how a core is interrupted by other tasks.
This mode does not handle packets. It only loops reading tsc.
When the difference between two consecutive calls to rdtsc() is high
then it means the core was interrupted.
This task implementes the display, so that we can see a histogram of
interrupts as well as the maximum, per core.
Command line is also supported, through "show irq buckets" (too show
the intervals of each buckets, in micrcoseconds), and the stats
command line (showing the number of items in each buckets and the max)..
Change-Id: I153cc3deaa7b86ae2776ea44e46ef9ecfd116992
Signed-off-by: Xavier Simonart <xavier.simonart@intel.com>
Diffstat (limited to 'VNFs/DPPD-PROX/stats_parser.c')
-rw-r--r-- | VNFs/DPPD-PROX/stats_parser.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/VNFs/DPPD-PROX/stats_parser.c b/VNFs/DPPD-PROX/stats_parser.c index aa9d6741..37e1781b 100644 --- a/VNFs/DPPD-PROX/stats_parser.c +++ b/VNFs/DPPD-PROX/stats_parser.c @@ -30,6 +30,7 @@ #include "stats_latency.h" #include "stats_global.h" #include "stats_prio_task.h" +#include "stats_irq.h" struct stats_path_str { const char *str; @@ -108,6 +109,26 @@ static uint64_t sp_task_rx_prio(int argc, const char *argv[]) return stats_get_prio_task_stats_sample_by_core_task(c, t, 1)->rx_prio[atoi(argv[2])]; } +static uint64_t sp_task_max_irq(int argc, const char *argv[]) +{ + struct task_stats_sample *last; + uint32_t c, t; + + if (args_to_core_task(argv[0], argv[1], &c, &t)) + return -1; + return get_max_irq_stats_by_core_task(c, t); +} + +static uint64_t sp_task_irq(int argc, const char *argv[]) +{ + struct task_stats_sample *last; + uint32_t c, t; + + if (args_to_core_task(argv[0], argv[1], &c, &t)) + return -1; + return get_irq_stats_by_core_task(c, t, atoi(argv[2])); +} + static uint64_t sp_task_drop_discard(int argc, const char *argv[]) { struct task_stats_sample *last; @@ -767,6 +788,8 @@ struct stats_path_str stats_paths[] = { {"task.core(#).task(#).tsc", sp_task_tsc}, {"task.core(#).task(#).drop.tx_fail_prio(#)", sp_task_drop_tx_fail_prio}, {"task.core(#).task(#).rx_prio(#)", sp_task_rx_prio}, + {"task.core(#).task(#).max_irq", sp_task_max_irq}, + {"task.core(#).task(#).irq(#)", sp_task_irq}, {"port(#).no_mbufs", sp_port_no_mbufs}, {"port(#).ierrors", sp_port_ierrors}, |