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
Signed-off-by: Luis Claudio R. Goncalves <[email protected]>
---
tools/tracing/rtla/src/osnoise_hist.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src/osnoise_hist.c
index 7be17d09f7e85..214e2c93fde01 100644
--- a/tools/tracing/rtla/src/osnoise_hist.c
+++ b/tools/tracing/rtla/src/osnoise_hist.c
@@ -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: ");
On Wed, 12 Jun 2024, Luis Claudio R. Goncalves wrote:
> 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
>
>
> Signed-off-by: Luis Claudio R. Goncalves <[email protected]>
> ---
> tools/tracing/rtla/src/osnoise_hist.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src/osnoise_hist.c
> index 7be17d09f7e85..214e2c93fde01 100644
> --- a/tools/tracing/rtla/src/osnoise_hist.c
> +++ b/tools/tracing/rtla/src/osnoise_hist.c
> @@ -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 */
IMHO The comment isn't needed because the variable had_samples is
descriptive, but it's not a big deal either
> + 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: ");
>
>
>
>
Reviewed-by: John Kacur <[email protected]>