From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Tomas Glozar <tglozar@redhat.com>, John Kacur <jkacur@redhat.com>,
Attila Fazekas <afazekas@redhat.com>
Subject: [for-next][PATCH 8/9] rtla/timerlat: Make timerlat_top_cpu->*_count unsigned long long
Date: Fri, 11 Oct 2024 13:30:18 -0400 [thread overview]
Message-ID: <20241011173029.026778216@goodmis.org> (raw)
In-Reply-To: 20241011173010.441043942@goodmis.org
From: Tomas Glozar <tglozar@redhat.com>
Most fields of struct timerlat_top_cpu are unsigned long long, but the
fields {irq,thread,user}_count are int (32-bit signed).
This leads to overflow when tracing on a large number of CPUs for a long
enough time:
$ rtla timerlat top -a20 -c 1-127 -d 12h
...
0 12:00:00 | IRQ Timer Latency (us) | Thread Timer Latency (us)
CPU COUNT | cur min avg max | cur min avg max
1 #43200096 | 0 0 1 2 | 3 2 6 12
...
127 #43200096 | 0 0 1 2 | 3 2 5 11
ALL #119144 e4 | 0 5 4 | 2 28 16
The average latency should be 0-1 for IRQ and 5-6 for thread, but is
reported as 5 and 28, about 4 to 5 times more, due to the count
overflowing when summed over all CPUs: 43200096 * 127 = 5486412192,
however, 1191444898 (= 5486412192 mod MAX_INT) is reported instead, as
seen on the last line of the output, and the averages are thus ~4.6
times higher than they should be (5486412192 / 1191444898 = ~4.6).
Fix the issue by changing {irq,thread,user}_count fields to unsigned
long long, similarly to other fields in struct timerlat_top_cpu and to
the count variable in timerlat_top_print_sum.
Link: https://lore.kernel.org/20241011121015.2868751-1-tglozar@redhat.com
Reported-by: Attila Fazekas <afazekas@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 | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src/timerlat_top.c
index 94a2f5bbaeb7..7fb85c8ee3bc 100644
--- a/tools/tracing/rtla/src/timerlat_top.c
+++ b/tools/tracing/rtla/src/timerlat_top.c
@@ -54,9 +54,9 @@ struct timerlat_top_params {
};
struct timerlat_top_cpu {
- int irq_count;
- int thread_count;
- int user_count;
+ unsigned long long irq_count;
+ unsigned long long thread_count;
+ unsigned long long user_count;
unsigned long long cur_irq;
unsigned long long min_irq;
@@ -280,7 +280,7 @@ static void timerlat_top_print(struct osnoise_tool *top, int cpu)
/*
* Unless trace is being lost, IRQ counter is always the max.
*/
- trace_seq_printf(s, "%3d #%-9d |", cpu, cpu_data->irq_count);
+ trace_seq_printf(s, "%3d #%-9llu |", cpu, cpu_data->irq_count);
if (!cpu_data->irq_count) {
trace_seq_printf(s, "%s %s %s %s |", no_value, no_value, no_value, no_value);
--
2.45.2
next prev parent reply other threads:[~2024-10-11 17:30 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-11 17:30 [for-next][PATCH 0/9] rtla: Updates for 6.13 Steven Rostedt
2024-10-11 17:30 ` [for-next][PATCH 1/9] rtla: use the definition for stdout fd when calling isatty() Steven Rostedt
2024-10-11 17:30 ` [for-next][PATCH 2/9] tools/rv: Correct the grammatical errors in the comments Steven Rostedt
2024-10-11 17:30 ` [for-next][PATCH 3/9] tools/rv: Correct the grammatical errors in the comments[2] Steven Rostedt
2024-10-11 17:30 ` [for-next][PATCH 4/9] rv: Fix a typo Steven Rostedt
2024-10-11 17:30 ` [for-next][PATCH 5/9] rtla: Fix consistency in getopt_long for timerlat_hist Steven Rostedt
2024-10-11 17:30 ` [for-next][PATCH 6/9] tools/rtla: drop __NR_sched_getattr Steven Rostedt
2024-10-11 17:30 ` [for-next][PATCH 7/9] tools/rtla: fix collision with glibc sched_attr/sched_set_attr Steven Rostedt
2024-10-11 17:30 ` Steven Rostedt [this message]
2024-10-11 17:30 ` [for-next][PATCH 9/9] rtla/timerlat: Make timerlat_hist_cpu->*_count unsigned long long Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241011173029.026778216@goodmis.org \
--to=rostedt@goodmis.org \
--cc=afazekas@redhat.com \
--cc=jkacur@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tglozar@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.