From nobody Wed Nov 27 08:41:43 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC7D41C689D for ; Fri, 11 Oct 2024 17:30:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728667819; cv=none; b=oK87LR1ROgyWOfO5fCpvDTdG2iYX+OqF5uKJPFG+dEuCYp0obTEvFZiQNdhjTJj/5lmUs6Zs/7cSxXi/HzvqZNj3bRHU3ntzNwSgtkiLSz1Nyk7PV9vUvTrVZB7H77uF68X9KTzB7FfkGfXgX6PfvgxsYp2HOyCwBXy5w/FT3j0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728667819; c=relaxed/simple; bh=dk7uh21VkalmBSMSe/A86Rv2sFa4xAMkC5xdLfZJALc=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=MIF9+DWwv82PSR4623taCRyhB6ZClqoS5oxLMCLump8VjaTjLG2hAC+i5GZZjjjr/Uc7qWW8pmbd6LfqAqMYjUL8xcXULHc8emvpWXmuetCYM638w2dOViVERAIQ62IRhCHxnB6p2Bei8clrHFC1togMxKSgyU/UV1CnAnz0pWo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8EB51C4CED6; Fri, 11 Oct 2024 17:30:18 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1szJTB-00000001U1n-0fn2; Fri, 11 Oct 2024 13:30:29 -0400 Message-ID: <20241011173029.026778216@goodmis.org> User-Agent: quilt/0.68 Date: Fri, 11 Oct 2024 13:30:18 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Attila Fazekas Subject: [for-next][PATCH 8/9] rtla/timerlat: Make timerlat_top_cpu->*_count unsigned long long References: <20241011173010.441043942@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tomas Glozar 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 Ti= mer Latency (us) CPU COUNT | cur min avg max | cur mi= n 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 =3D 5486412192, however, 1191444898 (=3D 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 =3D ~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 Signed-off-by: Tomas Glozar Signed-off-by: Steven Rostedt (Google) --- 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 { }; =20 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; =20 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); =20 if (!cpu_data->irq_count) { trace_seq_printf(s, "%s %s %s %s |", no_value, no_value, no_value, no_va= lue); --=20 2.45.2