mirror of
https://github.com/torvalds/linux.git
synced 2026-05-02 05:22:49 -04:00
The rtla osnoise hist tool collects all osnoise:sample_threshold occurrence in a histogram, displaying the results in a user-friendly way. The tool also allows many configurations of the osnoise tracer and the collection of the tracer output. Here is one example of the rtla osnoise hist tool output: ---------- %< ---------- [root@f34 ~]# rtla osnoise hist --bucket-size 10 --entries 100 -c 0-8 -d 1M -r 9000 -P F:1 # RTLA osnoise histogram # Time unit is microseconds (us) # Duration: 0 00:01:00 Index CPU-000 CPU-001 CPU-002 CPU-003 CPU-004 CPU-005 CPU-006 CPU-007 CPU-008 0 430 434 352 455 440 463 467 436 484 10 88 88 92 141 120 100 126 166 100 20 19 7 12 22 8 8 13 13 16 30 6 0 2 0 1 2 2 1 0 50 0 0 0 0 0 0 1 0 0 over: 0 0 0 0 0 0 0 0 0 count: 543 529 458 618 569 573 609 616 600 min: 0 0 0 0 0 0 0 0 0 avg: 0 0 0 0 0 0 0 0 0 max: 30 20 30 20 30 30 50 30 20 ---------- >% ---------- Running - rtla osnoise hist --help provides information about the available options. Link: https://lkml.kernel.org/r/c68060544de89b8b62510ed91c7369f162eb465b.1639158831.git.bristot@kernel.org Cc: Tao Zhou <tao.zhou@linux.dev> Cc: Ingo Molnar <mingo@redhat.com> Cc: Tom Zanussi <zanussi@kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Clark Williams <williams@redhat.com> Cc: John Kacur <jkacur@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Daniel Bristot de Oliveira <bristot@kernel.org> Cc: linux-rt-users@vger.kernel.org Cc: linux-trace-devel@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
92 lines
2.6 KiB
C
92 lines
2.6 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include "trace.h"
|
|
|
|
/*
|
|
* osnoise_context - read, store, write, restore osnoise configs.
|
|
*/
|
|
struct osnoise_context {
|
|
int flags;
|
|
int ref;
|
|
|
|
char *curr_cpus;
|
|
char *orig_cpus;
|
|
|
|
/* 0 as init value */
|
|
unsigned long long orig_runtime_us;
|
|
unsigned long long runtime_us;
|
|
|
|
/* 0 as init value */
|
|
unsigned long long orig_period_us;
|
|
unsigned long long period_us;
|
|
|
|
/* 0 as init value */
|
|
long long orig_timerlat_period_us;
|
|
long long timerlat_period_us;
|
|
|
|
/* -1 as init value because 0 is disabled */
|
|
long long orig_stop_us;
|
|
long long stop_us;
|
|
|
|
/* -1 as init value because 0 is disabled */
|
|
long long orig_stop_total_us;
|
|
long long stop_total_us;
|
|
|
|
/* -1 as init value because 0 is disabled */
|
|
long long orig_print_stack;
|
|
long long print_stack;
|
|
};
|
|
|
|
/*
|
|
* *_INIT_VALs are also invalid values, they are used to
|
|
* communicate errors.
|
|
*/
|
|
#define OSNOISE_OPTION_INIT_VAL (-1)
|
|
#define OSNOISE_TIME_INIT_VAL (0)
|
|
|
|
struct osnoise_context *osnoise_context_alloc(void);
|
|
int osnoise_get_context(struct osnoise_context *context);
|
|
void osnoise_put_context(struct osnoise_context *context);
|
|
|
|
int osnoise_set_cpus(struct osnoise_context *context, char *cpus);
|
|
void osnoise_restore_cpus(struct osnoise_context *context);
|
|
|
|
int osnoise_set_runtime_period(struct osnoise_context *context,
|
|
unsigned long long runtime,
|
|
unsigned long long period);
|
|
void osnoise_restore_runtime_period(struct osnoise_context *context);
|
|
|
|
int osnoise_set_stop_us(struct osnoise_context *context,
|
|
long long stop_us);
|
|
void osnoise_restore_stop_us(struct osnoise_context *context);
|
|
|
|
int osnoise_set_stop_total_us(struct osnoise_context *context,
|
|
long long stop_total_us);
|
|
void osnoise_restore_stop_total_us(struct osnoise_context *context);
|
|
|
|
int osnoise_set_timerlat_period_us(struct osnoise_context *context,
|
|
long long timerlat_period_us);
|
|
void osnoise_restore_timerlat_period_us(struct osnoise_context *context);
|
|
|
|
void osnoise_restore_print_stack(struct osnoise_context *context);
|
|
int osnoise_set_print_stack(struct osnoise_context *context,
|
|
long long print_stack);
|
|
|
|
/*
|
|
* osnoise_tool - osnoise based tool definition.
|
|
*/
|
|
struct osnoise_tool {
|
|
struct trace_instance trace;
|
|
struct osnoise_context *context;
|
|
void *data;
|
|
void *params;
|
|
time_t start_time;
|
|
};
|
|
|
|
void osnoise_destroy_tool(struct osnoise_tool *top);
|
|
struct osnoise_tool *osnoise_init_tool(char *tool_name);
|
|
struct osnoise_tool *osnoise_init_trace_tool(char *tracer);
|
|
|
|
int osnoise_hist_main(int argc, char *argv[]);
|
|
int osnoise_top_main(int argc, char **argv);
|
|
int osnoise_main(int argc, char **argv);
|