From nobody Tue Feb 10 22:15:48 2026 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 EA9BB26AA99 for ; Thu, 6 Mar 2025 18:18:24 +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=1741285105; cv=none; b=SgjnX6yZ4HsnaC4ALIwzdcbM/5e99rpEnpZ3UqOdVPkf6Buv7N9kJHIUTkXcjlhWnPvvYDZnqS8cXWdvIndCpE8L+qPmqWAb0DIoU+CFyt+G6/Vyu7FcpnqHDnvkyCg3hCMV0Api2RqN9wNE6nM6e1RMTyRG/jj1uLIC7JAvFxQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741285105; c=relaxed/simple; bh=Rw6Z1zX/mW/v2FDBY1/DP0sxiF95fJOj3jZf3szi18Q=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=R6m558ujgzLV5KvUP7qjDgecR2bnHsT91C1Si9dwJaEtgxA4UuYQjmWOIuuuI9wEvUbLp/eA4D21TBzteMRdPWeWUvfzRUUOX7jgH4yIGy/uzadI6c6609FRis0uQhXb1CyI+PdsSLU/l7k9uKIBJvFB2RkOqkBeEm1VV1DrRms= 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 C7853C4CEE0; Thu, 6 Mar 2025 18:18:24 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1tqFne-00000000PI7-1w8f; Thu, 06 Mar 2025 13:18:26 -0500 Message-ID: <20250306181826.317093224@goodmis.org> User-Agent: quilt/0.68 Date: Thu, 06 Mar 2025 13:18:07 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves , Gabriele Monaco , Clark Williams Subject: [for-next][PATCH 06/10] rtla/timerlat_top: Move divisor to update References: <20250306181801.485766945@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 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 Cc: Luis Goncalves Cc: Gabriele Monaco Cc: Clark Williams Link: https://lore.kernel.org/20250218145859.27762-7-tglozar@redhat.com Signed-off-by: Tomas Glozar Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/src/timerlat_top.c | 54 +++++++++++++-------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src= /timerlat_top.c index 97eead91decc..a3d9e8f67a4f 100644 --- a/tools/tracing/rtla/src/timerlat_top.c +++ b/tools/tracing/rtla/src/timerlat_top.c @@ -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 =3D tool->params; struct timerlat_top_data *data =3D tool->data; struct timerlat_top_cpu *cpu_data =3D &data->cpu_data[cpu]; =20 + if (params->output_divisor) + latency =3D latency / params->output_divisor; + if (!thread) { cpu_data->irq_count++; cpu_data->cur_irq =3D latency; @@ -231,12 +235,8 @@ static void timerlat_top_print(struct osnoise_tool *to= p, int cpu) struct timerlat_params *params =3D top->params; struct timerlat_top_data *data =3D top->data; struct timerlat_top_cpu *cpu_data =3D &data->cpu_data[cpu]; - int divisor =3D params->output_divisor; struct trace_seq *s =3D top->trace.seq; =20 - if (divisor =3D=3D 0) - return; - /* * Skip if no data is available: is this cpu offline? */ @@ -251,20 +251,20 @@ static void timerlat_top_print(struct osnoise_tool *t= op, int cpu) if (!cpu_data->irq_count) { trace_seq_printf(s, "%s %s %s %s |", no_value, no_value, no_value, no_va= lue); } 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); } =20 if (!cpu_data->thread_count) { trace_seq_printf(s, "%s %s %s %s", no_value, no_value, no_value, no_valu= e); } 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); } =20 if (!params->user_top) { @@ -277,11 +277,11 @@ static void timerlat_top_print(struct osnoise_tool *t= op, int cpu) if (!cpu_data->user_count) { trace_seq_printf(s, "%s %s %s %s\n", no_value, no_value, no_value, no_va= lue); } 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); } } =20 @@ -294,13 +294,9 @@ timerlat_top_print_sum(struct osnoise_tool *top, struc= t timerlat_top_cpu *summar const char *split =3D "----------------------------------------"; struct timerlat_params *params =3D top->params; unsigned long long count =3D summary->irq_count; - int divisor =3D params->output_divisor; struct trace_seq *s =3D top->trace.seq; int e =3D 0; =20 - if (divisor =3D=3D 0) - return; - /* * Skip if no data is available: is this cpu offline? */ @@ -323,19 +319,19 @@ timerlat_top_print_sum(struct osnoise_tool *top, stru= ct 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); } =20 if (!summary->thread_count) { trace_seq_printf(s, "%s %s %s %s", no_value, no_value, no_value, no_valu= e); } 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); } =20 if (!params->user_top) { @@ -349,10 +345,10 @@ timerlat_top_print_sum(struct osnoise_tool *top, stru= ct 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); } } =20 --=20 2.47.2