]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rtla/timerlat_top: Move divisor to update
authorTomas Glozar <tglozar@redhat.com>
Tue, 18 Feb 2025 14:58:57 +0000 (15:58 +0100)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Tue, 4 Mar 2025 17:35:18 +0000 (12:35 -0500)
Unlike timerlat-hist, timerlat-top applies the output divisor used to
set ns/us mode when printing results instead of applying it when
collecting the samples.

Move the application of the divisor from timerlat_top_print into
timerlat_top_update to make it consistent with timerlat-hist.

Cc: John Kacur <jkacur@redhat.com>
Cc: Luis Goncalves <lgoncalv@redhat.com>
Cc: Gabriele Monaco <gmonaco@redhat.com>
Cc: Clark Williams <williams@redhat.com>
Link: https://lore.kernel.org/20250218145859.27762-7-tglozar@redhat.com
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
tools/tracing/rtla/src/timerlat_top.c

index 97eead91deccdf38689ed3dcc1bef5be2dc172bf..a3d9e8f67a4f760643bed3f113c2e9ad79c90c78 100644 (file)
@@ -127,9 +127,13 @@ timerlat_top_update(struct osnoise_tool *tool, int cpu,
                    unsigned long long thread,
                    unsigned long long latency)
 {
+       struct timerlat_params *params = tool->params;
        struct timerlat_top_data *data = tool->data;
        struct timerlat_top_cpu *cpu_data = &data->cpu_data[cpu];
 
+       if (params->output_divisor)
+               latency = latency / params->output_divisor;
+
        if (!thread) {
                cpu_data->irq_count++;
                cpu_data->cur_irq = latency;
@@ -231,12 +235,8 @@ static void timerlat_top_print(struct osnoise_tool *top, int cpu)
        struct timerlat_params *params = top->params;
        struct timerlat_top_data *data = top->data;
        struct timerlat_top_cpu *cpu_data = &data->cpu_data[cpu];
-       int divisor = params->output_divisor;
        struct trace_seq *s = top->trace.seq;
 
-       if (divisor == 0)
-               return;
-
        /*
         * Skip if no data is available: is this cpu offline?
         */
@@ -251,20 +251,20 @@ static void timerlat_top_print(struct osnoise_tool *top, int cpu)
        if (!cpu_data->irq_count) {
                trace_seq_printf(s, "%s %s %s %s |", no_value, no_value, no_value, no_value);
        } else {
-               trace_seq_printf(s, "%9llu ", cpu_data->cur_irq / params->output_divisor);
-               trace_seq_printf(s, "%9llu ", cpu_data->min_irq / params->output_divisor);
-               trace_seq_printf(s, "%9llu ", (cpu_data->sum_irq / cpu_data->irq_count) / divisor);
-               trace_seq_printf(s, "%9llu |", cpu_data->max_irq / divisor);
+               trace_seq_printf(s, "%9llu ", cpu_data->cur_irq);
+               trace_seq_printf(s, "%9llu ", cpu_data->min_irq);
+               trace_seq_printf(s, "%9llu ", cpu_data->sum_irq / cpu_data->irq_count);
+               trace_seq_printf(s, "%9llu |", cpu_data->max_irq);
        }
 
        if (!cpu_data->thread_count) {
                trace_seq_printf(s, "%s %s %s %s", no_value, no_value, no_value, no_value);
        } else {
-               trace_seq_printf(s, "%9llu ", cpu_data->cur_thread / divisor);
-               trace_seq_printf(s, "%9llu ", cpu_data->min_thread / divisor);
+               trace_seq_printf(s, "%9llu ", cpu_data->cur_thread);
+               trace_seq_printf(s, "%9llu ", cpu_data->min_thread);
                trace_seq_printf(s, "%9llu ",
-                               (cpu_data->sum_thread / cpu_data->thread_count) / divisor);
-               trace_seq_printf(s, "%9llu", cpu_data->max_thread / divisor);
+                               cpu_data->sum_thread / cpu_data->thread_count);
+               trace_seq_printf(s, "%9llu", cpu_data->max_thread);
        }
 
        if (!params->user_top) {
@@ -277,11 +277,11 @@ static void timerlat_top_print(struct osnoise_tool *top, int cpu)
        if (!cpu_data->user_count) {
                trace_seq_printf(s, "%s %s %s %s\n", no_value, no_value, no_value, no_value);
        } else {
-               trace_seq_printf(s, "%9llu ", cpu_data->cur_user / divisor);
-               trace_seq_printf(s, "%9llu ", cpu_data->min_user / divisor);
+               trace_seq_printf(s, "%9llu ", cpu_data->cur_user);
+               trace_seq_printf(s, "%9llu ", cpu_data->min_user);
                trace_seq_printf(s, "%9llu ",
-                               (cpu_data->sum_user / cpu_data->user_count) / divisor);
-               trace_seq_printf(s, "%9llu\n", cpu_data->max_user / divisor);
+                               cpu_data->sum_user / cpu_data->user_count);
+               trace_seq_printf(s, "%9llu\n", cpu_data->max_user);
        }
 }
 
@@ -294,13 +294,9 @@ timerlat_top_print_sum(struct osnoise_tool *top, struct timerlat_top_cpu *summar
        const char *split = "----------------------------------------";
        struct timerlat_params *params = top->params;
        unsigned long long count = summary->irq_count;
-       int divisor = params->output_divisor;
        struct trace_seq *s = top->trace.seq;
        int e = 0;
 
-       if (divisor == 0)
-               return;
-
        /*
         * Skip if no data is available: is this cpu offline?
         */
@@ -323,19 +319,19 @@ timerlat_top_print_sum(struct osnoise_tool *top, struct timerlat_top_cpu *summar
                trace_seq_printf(s, "          %s %s %s |", no_value, no_value, no_value);
        } else {
                trace_seq_printf(s, "          ");
-               trace_seq_printf(s, "%9llu ", summary->min_irq / params->output_divisor);
-               trace_seq_printf(s, "%9llu ", (summary->sum_irq / summary->irq_count) / divisor);
-               trace_seq_printf(s, "%9llu |", summary->max_irq / divisor);
+               trace_seq_printf(s, "%9llu ", summary->min_irq);
+               trace_seq_printf(s, "%9llu ", summary->sum_irq / summary->irq_count);
+               trace_seq_printf(s, "%9llu |", summary->max_irq);
        }
 
        if (!summary->thread_count) {
                trace_seq_printf(s, "%s %s %s %s", no_value, no_value, no_value, no_value);
        } else {
                trace_seq_printf(s, "          ");
-               trace_seq_printf(s, "%9llu ", summary->min_thread / divisor);
+               trace_seq_printf(s, "%9llu ", summary->min_thread);
                trace_seq_printf(s, "%9llu ",
-                               (summary->sum_thread / summary->thread_count) / divisor);
-               trace_seq_printf(s, "%9llu", summary->max_thread / divisor);
+                               summary->sum_thread / summary->thread_count);
+               trace_seq_printf(s, "%9llu", summary->max_thread);
        }
 
        if (!params->user_top) {
@@ -349,10 +345,10 @@ timerlat_top_print_sum(struct osnoise_tool *top, struct timerlat_top_cpu *summar
                trace_seq_printf(s, "          %s %s %s |", no_value, no_value, no_value);
        } else {
                trace_seq_printf(s, "          ");
-               trace_seq_printf(s, "%9llu ", summary->min_user / divisor);
+               trace_seq_printf(s, "%9llu ", summary->min_user);
                trace_seq_printf(s, "%9llu ",
-                               (summary->sum_user / summary->user_count) / divisor);
-               trace_seq_printf(s, "%9llu\n", summary->max_user / divisor);
+                               summary->sum_user / summary->user_count);
+               trace_seq_printf(s, "%9llu\n", summary->max_user);
        }
 }