[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <358dc2ec-93e3-893b-d487-2684f7d242a8@redhat.com>
Date: Thu, 20 Mar 2025 15:27:48 -0400 (EDT)
From: John Kacur <jkacur@...hat.com>
To: Tomas Glozar <tglozar@...hat.com>
cc: Steven Rostedt <rostedt@...dmis.org>, linux-trace-kernel@...r.kernel.org,
linux-kernel@...r.kernel.org, Luis Goncalves <lgoncalv@...hat.com>
Subject: Re: [PATCH 2/6] rtla: Unify apply_config between top and hist
On Thu, 20 Mar 2025, Tomas Glozar wrote:
> The functions osnoise_top_apply_config and osnoise_hist_apply_config, as
> well as timerlat_top_apply_config and timerlat_hist_apply_config, are
> mostly the same.
>
> Move common part from them into separate functions osnoise_apply_config
> and timerlat_apply_config.
>
> For rtla-timerlat, also unify params->user_hist and params->user_top
> into one field called params->user_data, and move several fields used
> only by timerlat-top into the top-only section of struct
> timerlat_params.
>
> Signed-off-by: Tomas Glozar <tglozar@...hat.com>
> ---
> tools/tracing/rtla/src/osnoise.c | 79 ++++++++++++++++
> tools/tracing/rtla/src/osnoise.h | 1 +
> tools/tracing/rtla/src/osnoise_hist.c | 66 +-------------
> tools/tracing/rtla/src/osnoise_top.c | 66 +-------------
> tools/tracing/rtla/src/timerlat.c | 109 ++++++++++++++++++++++
> tools/tracing/rtla/src/timerlat.h | 11 +--
> tools/tracing/rtla/src/timerlat_hist.c | 119 ++++---------------------
> tools/tracing/rtla/src/timerlat_top.c | 110 +++--------------------
> 8 files changed, 227 insertions(+), 334 deletions(-)
>
> diff --git a/tools/tracing/rtla/src/osnoise.c b/tools/tracing/rtla/src/osnoise.c
> index 93d485c0e949..1735a36466c4 100644
> --- a/tools/tracing/rtla/src/osnoise.c
> +++ b/tools/tracing/rtla/src/osnoise.c
> @@ -3,6 +3,7 @@
> * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@...nel.org>
> */
>
> +#define _GNU_SOURCE
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <pthread.h>
> @@ -12,6 +13,7 @@
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
> +#include <sched.h>
>
> #include "osnoise.h"
>
> @@ -1114,6 +1116,83 @@ osnoise_report_missed_events(struct osnoise_tool *tool)
> }
> }
>
> +/*
> + * osnoise_apply_config - apply common configs to the initialized tool
> + */
> +int
> +osnoise_apply_config(struct osnoise_tool *tool, struct osnoise_params *params)
> +{
> + int retval;
> +
> + if (!params->sleep_time)
> + params->sleep_time = 1;
> +
> + if (params->cpus) {
> + retval = osnoise_set_cpus(tool->context, params->cpus);
> + if (retval) {
> + err_msg("Failed to apply CPUs config\n");
> + goto out_err;
> + }
> + }
> +
> + if (params->runtime || params->period) {
> + retval = osnoise_set_runtime_period(tool->context,
> + params->runtime,
> + params->period);
> + if (retval) {
> + err_msg("Failed to set runtime and/or period\n");
> + goto out_err;
> + }
> + }
> +
> + if (params->stop_us) {
> + retval = osnoise_set_stop_us(tool->context, params->stop_us);
> + if (retval) {
> + err_msg("Failed to set stop us\n");
> + goto out_err;
> + }
> + }
> +
> + if (params->stop_total_us) {
> + retval = osnoise_set_stop_total_us(tool->context, params->stop_total_us);
> + if (retval) {
> + err_msg("Failed to set stop total us\n");
> + goto out_err;
> + }
> + }
> +
> + if (params->threshold) {
> + retval = osnoise_set_tracing_thresh(tool->context, params->threshold);
> + if (retval) {
> + err_msg("Failed to set tracing_thresh\n");
> + goto out_err;
> + }
> + }
> +
> + if (params->hk_cpus) {
> + retval = sched_setaffinity(getpid(), sizeof(params->hk_cpu_set),
> + ¶ms->hk_cpu_set);
> + if (retval == -1) {
> + err_msg("Failed to set rtla to the house keeping CPUs\n");
> + goto out_err;
> + }
> + } else if (params->cpus) {
> + /*
> + * Even if the user do not set a house-keeping CPU, try to
> + * move rtla to a CPU set different to the one where the user
> + * set the workload to run.
> + *
> + * No need to check results as this is an automatic attempt.
> + */
> + auto_house_keeping(¶ms->monitored_cpus);
> + }
> +
> + return 0;
> +
> +out_err:
> + return -1;
> +}
> +
> static void osnoise_usage(int err)
> {
> int i;
> diff --git a/tools/tracing/rtla/src/osnoise.h b/tools/tracing/rtla/src/osnoise.h
> index f78ffbdc8c8d..ac1c99910744 100644
> --- a/tools/tracing/rtla/src/osnoise.h
> +++ b/tools/tracing/rtla/src/osnoise.h
> @@ -155,6 +155,7 @@ struct osnoise_tool *osnoise_init_tool(char *tool_name);
> struct osnoise_tool *osnoise_init_trace_tool(char *tracer);
> void osnoise_report_missed_events(struct osnoise_tool *tool);
> bool osnoise_trace_is_off(struct osnoise_tool *tool, struct osnoise_tool *record);
> +int osnoise_apply_config(struct osnoise_tool *tool, struct osnoise_params *params);
>
> int osnoise_hist_main(int argc, char *argv[]);
> int osnoise_top_main(int argc, char **argv);
> diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src/osnoise_hist.c
> index 4721f15f77cd..d9d15c8f27c7 100644
> --- a/tools/tracing/rtla/src/osnoise_hist.c
> +++ b/tools/tracing/rtla/src/osnoise_hist.c
> @@ -12,7 +12,6 @@
> #include <errno.h>
> #include <stdio.h>
> #include <time.h>
> -#include <sched.h>
>
> #include "osnoise.h"
>
> @@ -705,68 +704,9 @@ osnoise_hist_apply_config(struct osnoise_tool *tool, struct osnoise_params *para
> {
> int retval;
>
> - if (!params->sleep_time)
> - params->sleep_time = 1;
> -
> - if (params->cpus) {
> - retval = osnoise_set_cpus(tool->context, params->cpus);
> - if (retval) {
> - err_msg("Failed to apply CPUs config\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->runtime || params->period) {
> - retval = osnoise_set_runtime_period(tool->context,
> - params->runtime,
> - params->period);
> - if (retval) {
> - err_msg("Failed to set runtime and/or period\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->stop_us) {
> - retval = osnoise_set_stop_us(tool->context, params->stop_us);
> - if (retval) {
> - err_msg("Failed to set stop us\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->stop_total_us) {
> - retval = osnoise_set_stop_total_us(tool->context, params->stop_total_us);
> - if (retval) {
> - err_msg("Failed to set stop total us\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->threshold) {
> - retval = osnoise_set_tracing_thresh(tool->context, params->threshold);
> - if (retval) {
> - err_msg("Failed to set tracing_thresh\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->hk_cpus) {
> - retval = sched_setaffinity(getpid(), sizeof(params->hk_cpu_set),
> - ¶ms->hk_cpu_set);
> - if (retval == -1) {
> - err_msg("Failed to set rtla to the house keeping CPUs\n");
> - goto out_err;
> - }
> - } else if (params->cpus) {
> - /*
> - * Even if the user do not set a house-keeping CPU, try to
> - * move rtla to a CPU set different to the one where the user
> - * set the workload to run.
> - *
> - * No need to check results as this is an automatic attempt.
> - */
> - auto_house_keeping(¶ms->monitored_cpus);
> - }
> + retval = osnoise_apply_config(tool, params);
> + if (retval)
> + goto out_err;
>
> return 0;
>
> diff --git a/tools/tracing/rtla/src/osnoise_top.c b/tools/tracing/rtla/src/osnoise_top.c
> index 7f393019bbf5..3455ee73e2e6 100644
> --- a/tools/tracing/rtla/src/osnoise_top.c
> +++ b/tools/tracing/rtla/src/osnoise_top.c
> @@ -11,7 +11,6 @@
> #include <unistd.h>
> #include <stdio.h>
> #include <time.h>
> -#include <sched.h>
>
> #include "osnoise.h"
>
> @@ -523,50 +522,9 @@ osnoise_top_apply_config(struct osnoise_tool *tool, struct osnoise_params *param
> {
> int retval;
>
> - if (!params->sleep_time)
> - params->sleep_time = 1;
> -
> - if (params->cpus) {
> - retval = osnoise_set_cpus(tool->context, params->cpus);
> - if (retval) {
> - err_msg("Failed to apply CPUs config\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->runtime || params->period) {
> - retval = osnoise_set_runtime_period(tool->context,
> - params->runtime,
> - params->period);
> - if (retval) {
> - err_msg("Failed to set runtime and/or period\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->stop_us) {
> - retval = osnoise_set_stop_us(tool->context, params->stop_us);
> - if (retval) {
> - err_msg("Failed to set stop us\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->stop_total_us) {
> - retval = osnoise_set_stop_total_us(tool->context, params->stop_total_us);
> - if (retval) {
> - err_msg("Failed to set stop total us\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->threshold) {
> - retval = osnoise_set_tracing_thresh(tool->context, params->threshold);
> - if (retval) {
> - err_msg("Failed to set tracing_thresh\n");
> - goto out_err;
> - }
> - }
> + retval = osnoise_apply_config(tool, params);
> + if (retval)
> + goto out_err;
>
> if (params->mode == MODE_HWNOISE) {
> retval = osnoise_set_irq_disable(tool->context, 1);
> @@ -576,24 +534,6 @@ osnoise_top_apply_config(struct osnoise_tool *tool, struct osnoise_params *param
> }
> }
>
> - if (params->hk_cpus) {
> - retval = sched_setaffinity(getpid(), sizeof(params->hk_cpu_set),
> - ¶ms->hk_cpu_set);
> - if (retval == -1) {
> - err_msg("Failed to set rtla to the house keeping CPUs\n");
> - goto out_err;
> - }
> - } else if (params->cpus) {
> - /*
> - * Even if the user do not set a house-keeping CPU, try to
> - * move rtla to a CPU set different to the one where the user
> - * set the workload to run.
> - *
> - * No need to check results as this is an automatic attempt.
> - */
> - auto_house_keeping(¶ms->monitored_cpus);
> - }
> -
> if (isatty(STDOUT_FILENO) && !params->quiet)
> params->pretty_output = 1;
>
> diff --git a/tools/tracing/rtla/src/timerlat.c b/tools/tracing/rtla/src/timerlat.c
> index 21cdcc5c4a29..448fb1f7d3a6 100644
> --- a/tools/tracing/rtla/src/timerlat.c
> +++ b/tools/tracing/rtla/src/timerlat.c
> @@ -2,6 +2,7 @@
> /*
> * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@...nel.org>
> */
> +#define _GNU_SOURCE
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <pthread.h>
> @@ -11,9 +12,117 @@
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
> +#include <sched.h>
>
> #include "timerlat.h"
>
> +/*
> + * timerlat_apply_config - apply common configs to the initialized tool
> + */
> +int
> +timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *params)
> +{
> + int retval, i;
> +
> + if (!params->sleep_time)
> + params->sleep_time = 1;
> +
> + if (params->cpus) {
> + retval = osnoise_set_cpus(tool->context, params->cpus);
> + if (retval) {
> + err_msg("Failed to apply CPUs config\n");
> + goto out_err;
> + }
> + } else {
> + for (i = 0; i < sysconf(_SC_NPROCESSORS_CONF); i++)
> + CPU_SET(i, ¶ms->monitored_cpus);
> + }
> +
> + if (params->stop_us) {
> + retval = osnoise_set_stop_us(tool->context, params->stop_us);
> + if (retval) {
> + err_msg("Failed to set stop us\n");
> + goto out_err;
> + }
> + }
> +
> + if (params->stop_total_us) {
> + retval = osnoise_set_stop_total_us(tool->context, params->stop_total_us);
> + if (retval) {
> + err_msg("Failed to set stop total us\n");
> + goto out_err;
> + }
> + }
> +
> +
> + if (params->timerlat_period_us) {
> + retval = osnoise_set_timerlat_period_us(tool->context, params->timerlat_period_us);
> + if (retval) {
> + err_msg("Failed to set timerlat period\n");
> + goto out_err;
> + }
> + }
> +
> +
> + if (params->print_stack) {
> + retval = osnoise_set_print_stack(tool->context, params->print_stack);
> + if (retval) {
> + err_msg("Failed to set print stack\n");
> + goto out_err;
> + }
> + }
> +
> + if (params->hk_cpus) {
> + retval = sched_setaffinity(getpid(), sizeof(params->hk_cpu_set),
> + ¶ms->hk_cpu_set);
> + if (retval == -1) {
> + err_msg("Failed to set rtla to the house keeping CPUs\n");
> + goto out_err;
> + }
> + } else if (params->cpus) {
> + /*
> + * Even if the user do not set a house-keeping CPU, try to
> + * move rtla to a CPU set different to the one where the user
> + * set the workload to run.
> + *
> + * No need to check results as this is an automatic attempt.
> + */
> + auto_house_keeping(¶ms->monitored_cpus);
> + }
> +
> + /*
> + * If the user did not specify a type of thread, try user-threads first.
> + * Fall back to kernel threads otherwise.
> + */
> + if (!params->kernel_workload && !params->user_data) {
> + retval = tracefs_file_exists(NULL, "osnoise/per_cpu/cpu0/timerlat_fd");
> + if (retval) {
> + debug_msg("User-space interface detected, setting user-threads\n");
> + params->user_workload = 1;
> + params->user_data = 1;
> + } else {
> + debug_msg("User-space interface not detected, setting kernel-threads\n");
> + params->kernel_workload = 1;
> + }
> + }
> +
> + /*
> + * Set workload according to type of thread if the kernel supports it.
> + * On kernels without support, user threads will have already failed
> + * on missing timerlat_fd, and kernel threads do not need it.
> + */
> + retval = osnoise_set_workload(tool->context, params->kernel_workload);
> + if (retval < -1) {
> + err_msg("Failed to set OSNOISE_WORKLOAD option\n");
> + goto out_err;
> + }
> +
> + return 0;
> +
> +out_err:
> + return -1;
> +}
> +
> static void timerlat_usage(int err)
> {
> int i;
> diff --git a/tools/tracing/rtla/src/timerlat.h b/tools/tracing/rtla/src/timerlat.h
> index cadc613dc82e..73045aef23fa 100644
> --- a/tools/tracing/rtla/src/timerlat.h
> +++ b/tools/tracing/rtla/src/timerlat.h
> @@ -15,17 +15,15 @@ struct timerlat_params {
> int sleep_time;
> int output_divisor;
> int duration;
> - int quiet;
> int set_sched;
> int dma_latency;
> int no_aa;
> - int aa_only;
> int dump_tasks;
> int cgroup;
> int hk_cpus;
> int user_workload;
> int kernel_workload;
> - int pretty_output;
> + int user_data;
> int warmup;
> int buffer_size;
> int deepest_idle_state;
> @@ -35,11 +33,12 @@ struct timerlat_params {
> union {
> struct {
> /* top only */
> - int user_top;
> + int quiet;
> + int aa_only;
> + int pretty_output;
> };
> struct {
> /* hist only */
> - int user_hist;
> char no_irq;
> char no_thread;
> char no_header;
> @@ -52,6 +51,8 @@ struct timerlat_params {
> };
> };
>
> +int timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *params);
> +
> int timerlat_hist_main(int argc, char *argv[]);
> int timerlat_top_main(int argc, char *argv[]);
> int timerlat_main(int argc, char *argv[]);
> diff --git a/tools/tracing/rtla/src/timerlat_hist.c b/tools/tracing/rtla/src/timerlat_hist.c
> index 822c068b4776..9d9efeedc4c2 100644
> --- a/tools/tracing/rtla/src/timerlat_hist.c
> +++ b/tools/tracing/rtla/src/timerlat_hist.c
> @@ -315,7 +315,7 @@ static void timerlat_hist_header(struct osnoise_tool *tool)
> if (!params->no_thread)
> trace_seq_printf(s, " Thr-%03d", cpu);
>
> - if (params->user_hist)
> + if (params->user_data)
> trace_seq_printf(s, " Usr-%03d", cpu);
> }
> trace_seq_printf(s, "\n");
> @@ -371,7 +371,7 @@ timerlat_print_summary(struct timerlat_params *params,
> trace_seq_printf(trace->seq, "%9llu ",
> data->hist[cpu].thread_count);
>
> - if (params->user_hist)
> + if (params->user_data)
> trace_seq_printf(trace->seq, "%9llu ",
> data->hist[cpu].user_count);
> }
> @@ -399,7 +399,7 @@ timerlat_print_summary(struct timerlat_params *params,
> data->hist[cpu].min_thread,
> false);
>
> - if (params->user_hist)
> + if (params->user_data)
> format_summary_value(trace->seq,
> data->hist[cpu].user_count,
> data->hist[cpu].min_user,
> @@ -429,7 +429,7 @@ timerlat_print_summary(struct timerlat_params *params,
> data->hist[cpu].sum_thread,
> true);
>
> - if (params->user_hist)
> + if (params->user_data)
> format_summary_value(trace->seq,
> data->hist[cpu].user_count,
> data->hist[cpu].sum_user,
> @@ -459,7 +459,7 @@ timerlat_print_summary(struct timerlat_params *params,
> data->hist[cpu].max_thread,
> false);
>
> - if (params->user_hist)
> + if (params->user_data)
> format_summary_value(trace->seq,
> data->hist[cpu].user_count,
> data->hist[cpu].max_user,
> @@ -521,7 +521,7 @@ timerlat_print_stats_all(struct timerlat_params *params,
> if (!params->no_thread)
> trace_seq_printf(trace->seq, " Thr");
>
> - if (params->user_hist)
> + if (params->user_data)
> trace_seq_printf(trace->seq, " Usr");
>
> trace_seq_printf(trace->seq, "\n");
> @@ -537,7 +537,7 @@ timerlat_print_stats_all(struct timerlat_params *params,
> trace_seq_printf(trace->seq, "%9llu ",
> sum.thread_count);
>
> - if (params->user_hist)
> + if (params->user_data)
> trace_seq_printf(trace->seq, "%9llu ",
> sum.user_count);
>
> @@ -558,7 +558,7 @@ timerlat_print_stats_all(struct timerlat_params *params,
> sum.min_thread,
> false);
>
> - if (params->user_hist)
> + if (params->user_data)
> format_summary_value(trace->seq,
> sum.user_count,
> sum.min_user,
> @@ -581,7 +581,7 @@ timerlat_print_stats_all(struct timerlat_params *params,
> sum.sum_thread,
> true);
>
> - if (params->user_hist)
> + if (params->user_data)
> format_summary_value(trace->seq,
> sum.user_count,
> sum.sum_user,
> @@ -604,7 +604,7 @@ timerlat_print_stats_all(struct timerlat_params *params,
> sum.max_thread,
> false);
>
> - if (params->user_hist)
> + if (params->user_data)
> format_summary_value(trace->seq,
> sum.user_count,
> sum.max_user,
> @@ -654,7 +654,7 @@ timerlat_print_stats(struct timerlat_params *params, struct osnoise_tool *tool)
> data->hist[cpu].thread[bucket]);
> }
>
> - if (params->user_hist) {
> + if (params->user_data) {
> total += data->hist[cpu].user[bucket];
> trace_seq_printf(trace->seq, "%9d ",
> data->hist[cpu].user[bucket]);
> @@ -690,7 +690,7 @@ timerlat_print_stats(struct timerlat_params *params, struct osnoise_tool *tool)
> trace_seq_printf(trace->seq, "%9d ",
> data->hist[cpu].thread[data->entries]);
>
> - if (params->user_hist)
> + if (params->user_data)
> trace_seq_printf(trace->seq, "%9d ",
> data->hist[cpu].user[data->entries]);
> }
> @@ -965,7 +965,7 @@ static struct timerlat_params
> params->user_workload = 1;
> /* fallback: -u implies in -U */
> case 'U':
> - params->user_hist = 1;
> + params->user_data = 1;
> break;
> case '0': /* no irq */
> params->no_irq = 1;
> @@ -1063,98 +1063,11 @@ static struct timerlat_params
> static int
> timerlat_hist_apply_config(struct osnoise_tool *tool, struct timerlat_params *params)
> {
> - int retval, i;
> -
> - if (!params->sleep_time)
> - params->sleep_time = 1;
> -
> - if (params->cpus) {
> - retval = osnoise_set_cpus(tool->context, params->cpus);
> - if (retval) {
> - err_msg("Failed to apply CPUs config\n");
> - goto out_err;
> - }
> - } else {
> - for (i = 0; i < sysconf(_SC_NPROCESSORS_CONF); i++)
> - CPU_SET(i, ¶ms->monitored_cpus);
> - }
> -
> - if (params->stop_us) {
> - retval = osnoise_set_stop_us(tool->context, params->stop_us);
> - if (retval) {
> - err_msg("Failed to set stop us\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->stop_total_us) {
> - retval = osnoise_set_stop_total_us(tool->context, params->stop_total_us);
> - if (retval) {
> - err_msg("Failed to set stop total us\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->timerlat_period_us) {
> - retval = osnoise_set_timerlat_period_us(tool->context, params->timerlat_period_us);
> - if (retval) {
> - err_msg("Failed to set timerlat period\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->print_stack) {
> - retval = osnoise_set_print_stack(tool->context, params->print_stack);
> - if (retval) {
> - err_msg("Failed to set print stack\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->hk_cpus) {
> - retval = sched_setaffinity(getpid(), sizeof(params->hk_cpu_set),
> - ¶ms->hk_cpu_set);
> - if (retval == -1) {
> - err_msg("Failed to set rtla to the house keeping CPUs\n");
> - goto out_err;
> - }
> - } else if (params->cpus) {
> - /*
> - * Even if the user do not set a house-keeping CPU, try to
> - * move rtla to a CPU set different to the one where the user
> - * set the workload to run.
> - *
> - * No need to check results as this is an automatic attempt.
> - */
> - auto_house_keeping(¶ms->monitored_cpus);
> - }
> -
> - /*
> - * If the user did not specify a type of thread, try user-threads first.
> - * Fall back to kernel threads otherwise.
> - */
> - if (!params->kernel_workload && !params->user_hist) {
> - retval = tracefs_file_exists(NULL, "osnoise/per_cpu/cpu0/timerlat_fd");
> - if (retval) {
> - debug_msg("User-space interface detected, setting user-threads\n");
> - params->user_workload = 1;
> - params->user_hist = 1;
> - } else {
> - debug_msg("User-space interface not detected, setting kernel-threads\n");
> - params->kernel_workload = 1;
> - }
> - }
> + int retval;
>
> - /*
> - * Set workload according to type of thread if the kernel supports it.
> - * On kernels without support, user threads will have already failed
> - * on missing timerlat_fd, and kernel threads do not need it.
> - */
> - retval = osnoise_set_workload(tool->context, params->kernel_workload);
> - if (retval < -1) {
> - err_msg("Failed to set OSNOISE_WORKLOAD option\n");
> + retval = timerlat_apply_config(tool, params);
> + if (retval)
> goto out_err;
> - }
>
> return 0;
>
> diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src/timerlat_top.c
> index c3196a0bb585..79cb6f28967f 100644
> --- a/tools/tracing/rtla/src/timerlat_top.c
> +++ b/tools/tracing/rtla/src/timerlat_top.c
> @@ -266,7 +266,7 @@ static void timerlat_top_header(struct timerlat_params *params, struct osnoise_t
> trace_seq_printf(s, "\033[2;37;40m");
>
> trace_seq_printf(s, " Timer Latency ");
> - if (params->user_top)
> + if (params->user_data)
> trace_seq_printf(s, " ");
>
> if (params->pretty_output)
> @@ -277,7 +277,7 @@ static void timerlat_top_header(struct timerlat_params *params, struct osnoise_t
> params->output_divisor == 1 ? "ns" : "us",
> params->output_divisor == 1 ? "ns" : "us");
>
> - if (params->user_top) {
> + if (params->user_data) {
> trace_seq_printf(s, " | Ret user Timer Latency (%s)",
> params->output_divisor == 1 ? "ns" : "us");
> }
> @@ -287,7 +287,7 @@ static void timerlat_top_header(struct timerlat_params *params, struct osnoise_t
> trace_seq_printf(s, "\033[2;30;47m");
>
> trace_seq_printf(s, "CPU COUNT | cur min avg max | cur min avg max");
> - if (params->user_top)
> + if (params->user_data)
> trace_seq_printf(s, " | cur min avg max");
>
> if (params->pretty_output)
> @@ -338,7 +338,7 @@ static void timerlat_top_print(struct osnoise_tool *top, int cpu)
> trace_seq_printf(s, "%9llu", cpu_data->max_thread);
> }
>
> - if (!params->user_top) {
> + if (!params->user_data) {
> trace_seq_printf(s, "\n");
> return;
> }
> @@ -380,7 +380,7 @@ timerlat_top_print_sum(struct osnoise_tool *top, struct timerlat_top_cpu *summar
> }
>
> trace_seq_printf(s, "%.*s|%.*s|%.*s", 15, split, 40, split, 39, split);
> - if (params->user_top)
> + if (params->user_data)
> trace_seq_printf(s, "-|%.*s", 39, split);
> trace_seq_printf(s, "\n");
>
> @@ -405,7 +405,7 @@ timerlat_top_print_sum(struct osnoise_tool *top, struct timerlat_top_cpu *summar
> trace_seq_printf(s, "%9llu", summary->max_thread);
> }
>
> - if (!params->user_top) {
> + if (!params->user_data) {
> trace_seq_printf(s, "\n");
> return;
> }
> @@ -722,7 +722,7 @@ static struct timerlat_params
> params->user_workload = true;
> /* fallback: -u implies -U */
> case 'U':
> - params->user_top = true;
> + params->user_data = true;
> break;
> case '0': /* trigger */
> if (params->events) {
> @@ -800,100 +800,10 @@ static int
> timerlat_top_apply_config(struct osnoise_tool *top, struct timerlat_params *params)
> {
> int retval;
> - int i;
> -
> - if (!params->sleep_time)
> - params->sleep_time = 1;
> -
> - if (params->cpus) {
> - retval = osnoise_set_cpus(top->context, params->cpus);
> - if (retval) {
> - err_msg("Failed to apply CPUs config\n");
> - goto out_err;
> - }
> - } else {
> - for (i = 0; i < sysconf(_SC_NPROCESSORS_CONF); i++)
> - CPU_SET(i, ¶ms->monitored_cpus);
> - }
> -
> - if (params->stop_us) {
> - retval = osnoise_set_stop_us(top->context, params->stop_us);
> - if (retval) {
> - err_msg("Failed to set stop us\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->stop_total_us) {
> - retval = osnoise_set_stop_total_us(top->context, params->stop_total_us);
> - if (retval) {
> - err_msg("Failed to set stop total us\n");
> - goto out_err;
> - }
> - }
> -
> -
> - if (params->timerlat_period_us) {
> - retval = osnoise_set_timerlat_period_us(top->context, params->timerlat_period_us);
> - if (retval) {
> - err_msg("Failed to set timerlat period\n");
> - goto out_err;
> - }
> - }
>
> -
> - if (params->print_stack) {
> - retval = osnoise_set_print_stack(top->context, params->print_stack);
> - if (retval) {
> - err_msg("Failed to set print stack\n");
> - goto out_err;
> - }
> - }
> -
> - if (params->hk_cpus) {
> - retval = sched_setaffinity(getpid(), sizeof(params->hk_cpu_set),
> - ¶ms->hk_cpu_set);
> - if (retval == -1) {
> - err_msg("Failed to set rtla to the house keeping CPUs\n");
> - goto out_err;
> - }
> - } else if (params->cpus) {
> - /*
> - * Even if the user do not set a house-keeping CPU, try to
> - * move rtla to a CPU set different to the one where the user
> - * set the workload to run.
> - *
> - * No need to check results as this is an automatic attempt.
> - */
> - auto_house_keeping(¶ms->monitored_cpus);
> - }
> -
> - /*
> - * If the user did not specify a type of thread, try user-threads first.
> - * Fall back to kernel threads otherwise.
> - */
> - if (!params->kernel_workload && !params->user_top) {
> - retval = tracefs_file_exists(NULL, "osnoise/per_cpu/cpu0/timerlat_fd");
> - if (retval) {
> - debug_msg("User-space interface detected, setting user-threads\n");
> - params->user_workload = 1;
> - params->user_top = 1;
> - } else {
> - debug_msg("User-space interface not detected, setting kernel-threads\n");
> - params->kernel_workload = 1;
> - }
> - }
> -
> - /*
> - * Set workload according to type of thread if the kernel supports it.
> - * On kernels without support, user threads will have already failed
> - * on missing timerlat_fd, and kernel threads do not need it.
> - */
> - retval = osnoise_set_workload(top->context, params->kernel_workload);
> - if (retval < -1) {
> - err_msg("Failed to set OSNOISE_WORKLOAD option\n");
> + retval = timerlat_apply_config(top, params);
> + if (retval)
> goto out_err;
> - }
>
> if (isatty(STDOUT_FILENO) && !params->quiet)
> params->pretty_output = 1;
> @@ -1142,7 +1052,7 @@ int timerlat_top_main(int argc, char *argv[])
> }
> }
>
> - if (params->cgroup && !params->user_top) {
> + if (params->cgroup && !params->user_data) {
> retval = set_comm_cgroup("timerlat/", params->cgroup_name);
> if (!retval) {
> err_msg("Failed to move threads to cgroup\n");
> --
> 2.48.1
>
>
>
Reviewed-by: John Kacur <jkacur@...hat.com>
Powered by blists - more mailing lists