rtla/osnoise: Better report when histogram is empty
authorLuis Claudio R. Goncalves <lgoncalv@redhat.com>
Wed, 12 Jun 2024 10:36:22 +0000 (07:36 -0300)
committerDaniel Bristot de Oliveira <bristot@kernel.org>
Fri, 21 Jun 2024 08:19:53 +0000 (10:19 +0200)
When osnoise hist does not observe any samples above the threshold,
no entries are recorded and the final report shows empty entries
for the usual statistics (count, min, max, avg):

    [~]# osnoise hist -d 5s -T 500
    # RTLA osnoise histogram
    # Time unit is microseconds (us)
    # Duration:   0 00:00:05
    Index
    over:
    count:
    min:
    avg:
    max:

That could lead users to confusing interpretations of the results.

A simple solution is to report 0 for count and the statistics, making it
clear that no noise (above the defined threshold) was observed:

    [~]# osnoise hist -d 5s -T 500
    # RTLA osnoise histogram
    # Time unit is microseconds (us)
    # Duration:   0 00:00:05
    Index
    over: 0
    count: 0
    min: 0
    avg: 0
    max: 0

Link: https://lkml.kernel.org/r/Zml6JmH5cbS7-HfZ@uudg.org
Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: John Kacur <jkacur@redhat.com>
Cc: Clark Williams <williams@redhat.com>
Reviewed-by: John Kacur <jkacur@redhat.com>
Signed-off-by: Luis Claudio R. Goncalves <lgoncalv@redhat.com>
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
tools/tracing/rtla/src/osnoise_hist.c

index 7be17d09f7e8567ef61c28c78c121cecd8bb2198..214e2c93fde0166aa92b76d2e6b0b81fe3b76c1a 100644 (file)
@@ -374,6 +374,7 @@ osnoise_print_stats(struct osnoise_hist_params *params, struct osnoise_tool *too
 {
        struct osnoise_hist_data *data = tool->data;
        struct trace_instance *trace = &tool->trace;
+       int has_samples = 0;
        int bucket, cpu;
        int total;
 
@@ -402,11 +403,25 @@ osnoise_print_stats(struct osnoise_hist_params *params, struct osnoise_tool *too
                        continue;
                }
 
+               /* There are samples above the threshold */
+               has_samples = 1;
                trace_seq_printf(trace->seq, "\n");
                trace_seq_do_printf(trace->seq);
                trace_seq_reset(trace->seq);
        }
 
+       /*
+        * If no samples were recorded, skip calculations, print zeroed statistics
+        * and return.
+        */
+       if (!has_samples) {
+               trace_seq_reset(trace->seq);
+               trace_seq_printf(trace->seq, "over: 0\ncount: 0\nmin: 0\navg: 0\nmax: 0\n");
+               trace_seq_do_printf(trace->seq);
+               trace_seq_reset(trace->seq);
+               return;
+       }
+
        if (!params->no_index)
                trace_seq_printf(trace->seq, "over: ");