From nobody Thu Dec 18 04:50:49 2025 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 949201F30C0 for ; Wed, 26 Mar 2025 14:55:17 +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=1743000917; cv=none; b=sD56GoEW1oEgib0ll3prCqteF9ZScxkaJzMKfKrQbLIjUOUPtb2ALsHqdCKQAQ8U0TVXB8VWjeQJAz7WwaVX75BIRz3zjvP4mdp103v0nPMVQUiDVaSRysu/u61eJNsLmKAHqn6WAcMzfpUyhfGXvLIJspbHQdSMvnvTmsnEeMU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000917; c=relaxed/simple; bh=gjToE7QgykzKawNsxmG3DcShp7PPTJxWmW+vtXnpAyw=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=Hxlf7X5RSB/Z28OwTh5fH+LET1aUdOWI8tQm8weghDcnvQDOn55jykRrGNZ7KLx4YLjaGTEeHUmwYNfhuHCF+DO4Z+KFP8yzA82Xgv2psLQQ9W6zF+jDGh1xSYr3/qlSmYY7TGBu03tAFJOdqRRazHVaIiM57cDfMrf90WTl2BU= 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 44503C4CEEB; Wed, 26 Mar 2025 14:55:17 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAl-00000002kCd-3yhK; Wed, 26 Mar 2025 10:56:03 -0400 Message-ID: <20250326145603.801808440@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:50 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves , Venkat Rao Bagalkote , Quentin Monnet Subject: [for-next][PATCH 1/9] tools/build: Use SYSTEM_BPFTOOL for system bpftool References: <20250326145549.978154551@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 The feature test for system bpftool uses BPFTOOL as the variable to set its path, defaulting to just "bpftool" if not set by the user. This conflicts with selftests and a few other utilities, which expect BPFTOOL to be set to the in-tree bpftool path by default. For example, bpftool selftests fail to build: $ make -C tools/testing/selftests/bpf/ make: Entering directory '/home/tglozar/dev/linux/tools/testing/selftests/b= pf' make: *** No rule to make target 'bpftool', needed by '/home/tglozar/dev/li= nux/tools/testing/selftests/bpf/tools/include/vmlinux.h'. Stop. make: Leaving directory '/home/tglozar/dev/linux/tools/testing/selftests/bp= f' Fix the problem by renaming the variable used for system bpftool from BPFTOOL to SYSTEM_BPFTOOL, so that the new usage does not conflict with the existing one of BPFTOOL. Cc: John Kacur Cc: Luis Goncalves Link: https://lore.kernel.org/20250326004018.248357-1-tglozar@redhat.com Fixes: 8a635c3856dd ("tools/build: Add bpftool-skeletons feature test") Closes: https://lore.kernel.org/linux-kernel/5df6968a-2e5f-468e-b457-fc2015= 35dd4c@linux.ibm.com/ Reported-by: Venkat Rao Bagalkote Tested-by: Venkat Rao Bagalkote Suggested-by: Quentin Monnet Acked-by: Quentin Monnet Signed-off-by: Tomas Glozar Signed-off-by: Steven Rostedt (Google) --- tools/build/feature/Makefile | 2 +- tools/scripts/Makefile.include | 2 +- tools/tracing/rtla/Makefile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 4f9c1d950f5d..b8b5fb183dd4 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -419,7 +419,7 @@ $(OUTPUT)test-libpfm4.bin: $(BUILD) -lpfm =20 $(OUTPUT)test-bpftool-skeletons.bin: - $(BPFTOOL) version | grep '^features:.*skeletons' \ + $(SYSTEM_BPFTOOL) version | grep '^features:.*skeletons' \ > $(@:.bin=3D.make.output) 2>&1 ############################### =20 diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include index 71bbe52721b3..34a33c1ad96c 100644 --- a/tools/scripts/Makefile.include +++ b/tools/scripts/Makefile.include @@ -92,7 +92,7 @@ LLVM_OBJCOPY ?=3D llvm-objcopy LLVM_STRIP ?=3D llvm-strip =20 # Some tools require bpftool -BPFTOOL ?=3D bpftool +SYSTEM_BPFTOOL ?=3D bpftool =20 ifeq ($(CC_NO_CLANG), 1) EXTRA_WARNINGS +=3D -Wstrict-aliasing=3D3 diff --git a/tools/tracing/rtla/Makefile b/tools/tracing/rtla/Makefile index 557af322be61..3dc050317b9d 100644 --- a/tools/tracing/rtla/Makefile +++ b/tools/tracing/rtla/Makefile @@ -78,7 +78,7 @@ src/timerlat.bpf.o: src/timerlat.bpf.c $(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@ =20 src/timerlat.skel.h: src/timerlat.bpf.o - $(QUIET_GENSKEL)$(BPFTOOL) gen skeleton $< > $@ + $(QUIET_GENSKEL)$(SYSTEM_BPFTOOL) gen skeleton $< > $@ else src/timerlat.skel.h: $(Q)echo '/* BPF skeleton is disabled */' > src/timerlat.skel.h --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 9488C1F2C3B for ; Wed, 26 Mar 2025 14:55:17 +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=1743000917; cv=none; b=Nox2HnZt93MNugtmTArDECIitduKsWmIuhMRoz8MDa40vP92Zw3P/pMRi7QHwGRfUT6rZTEtLJscIEMaMNnxEuxVUurQLLo4a6IDyT8pdQwWAeeM7lsTkibPz+HwJwNcrcWEzjc3Nys5uqVtDaSOI1H6bw3upigrczuq+w2IdPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000917; c=relaxed/simple; bh=AORDiZMilQMwkA+4E1LTKXvwzeeC1Tm13E5d4IPLRXk=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=GmudShyUVlRbzXYXxjjPnt+knd3LmQklGx2/1Bd3o+yf6SClUIO/6zijUKO5vDfO62q5pFW0Yl4lYz8OcPQW424a6K+d01jmOAPmxwqOaIsvBK2ANrrWq4yrELxFd4j6FaioGfFxOpdkMgGnnHqMk+jhhXJ8aq6b3xYMKPSt5So= 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 3F8F1C4CEE8; Wed, 26 Mar 2025 14:55:17 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAm-00000002kD7-0Uxv; Wed, 26 Mar 2025 10:56:04 -0400 Message-ID: <20250326145603.969401580@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:51 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves , Costa Shulyupin Subject: [for-next][PATCH 2/9] rtla: Fix segfault in save_trace_to_file call References: <20250326145549.978154551@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 Running rtla with exit on threshold, but without saving trace leads to a segmenetation fault: $ rtla timerlat hist -T 10 ... Max timerlat IRQ latency from idle: 4.29 us in cpu 0 Segmentation fault This is caused by null pointer deference in the call of save_trace_to_file, which attempts to dereference an uninitialized osnoise_tool variable: save_trace_to_file(record->trace.inst, params->trace_output); ^ this is uninitialized if params->trace_output is not set Fix this by not attempting to dereference "record" if it is NULL and passing NULL instead. As a safety measure, the first field is also checked for NULL inside save_trace_to_file. Cc: John Kacur Cc: Luis Goncalves Cc: Costa Shulyupin Link: https://lore.kernel.org/20250313141034.299117-1-tglozar@redhat.com Fixes: dc4d4e7c72d1 ("rtla: Refactor save_trace_to_file") Signed-off-by: Tomas Glozar Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/src/osnoise_hist.c | 3 ++- tools/tracing/rtla/src/osnoise_top.c | 3 ++- tools/tracing/rtla/src/timerlat_hist.c | 3 ++- tools/tracing/rtla/src/timerlat_top.c | 3 ++- tools/tracing/rtla/src/trace.c | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src= /osnoise_hist.c index 7c6ef67ef3e6..f4c9051c33c4 100644 --- a/tools/tracing/rtla/src/osnoise_hist.c +++ b/tools/tracing/rtla/src/osnoise_hist.c @@ -983,7 +983,8 @@ int osnoise_hist_main(int argc, char *argv[]) =20 if (osnoise_trace_is_off(tool, record)) { printf("rtla osnoise hit stop tracing\n"); - save_trace_to_file(record->trace.inst, params->trace_output); + save_trace_to_file(record ? record->trace.inst : NULL, + params->trace_output); } =20 out_hist: diff --git a/tools/tracing/rtla/src/osnoise_top.c b/tools/tracing/rtla/src/= osnoise_top.c index 0eeefbbbf317..dacec2f99017 100644 --- a/tools/tracing/rtla/src/osnoise_top.c +++ b/tools/tracing/rtla/src/osnoise_top.c @@ -813,7 +813,8 @@ int osnoise_top_main(int argc, char **argv) =20 if (osnoise_trace_is_off(tool, record)) { printf("osnoise hit stop tracing\n"); - save_trace_to_file(record->trace.inst, params->trace_output); + save_trace_to_file(record ? record->trace.inst : NULL, + params->trace_output); } =20 out_top: diff --git a/tools/tracing/rtla/src/timerlat_hist.c b/tools/tracing/rtla/sr= c/timerlat_hist.c index 93d0c9e45020..822c068b4776 100644 --- a/tools/tracing/rtla/src/timerlat_hist.c +++ b/tools/tracing/rtla/src/timerlat_hist.c @@ -1473,7 +1473,8 @@ int timerlat_hist_main(int argc, char *argv[]) if (!params->no_aa) timerlat_auto_analysis(params->stop_us, params->stop_total_us); =20 - save_trace_to_file(record->trace.inst, params->trace_output); + save_trace_to_file(record ? record->trace.inst : NULL, + params->trace_output); } =20 out_hist: diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src= /timerlat_top.c index 3894ac37d81c..c3196a0bb585 100644 --- a/tools/tracing/rtla/src/timerlat_top.c +++ b/tools/tracing/rtla/src/timerlat_top.c @@ -1295,7 +1295,8 @@ int timerlat_top_main(int argc, char *argv[]) if (!params->no_aa) timerlat_auto_analysis(params->stop_us, params->stop_total_us); =20 - save_trace_to_file(record->trace.inst, params->trace_output); + save_trace_to_file(record ? record->trace.inst : NULL, + params->trace_output); } else if (params->aa_only) { /* * If the trace did not stop with --aa-only, at least print the diff --git a/tools/tracing/rtla/src/trace.c b/tools/tracing/rtla/src/trace.c index 74ed2f6208ba..69cbc48d53d3 100644 --- a/tools/tracing/rtla/src/trace.c +++ b/tools/tracing/rtla/src/trace.c @@ -75,7 +75,7 @@ int save_trace_to_file(struct tracefs_instance *inst, con= st char *filename) int out_fd, in_fd; int retval =3D -1; =20 - if (!filename) + if (!inst || !filename) return 0; =20 in_fd =3D tracefs_instance_file_open(inst, file, O_RDONLY); --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 C46911F3BA4 for ; Wed, 26 Mar 2025 14:55:17 +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=1743000917; cv=none; b=R2g6OYqldkDEK6cOfSil6binEo6YIvQ6VrNu85thH/d8yYkayn7muljiKmZS+QXVisDRPD2qz6jvq933VT83LkNCmQilXRtRnaD/kJuDe33qFylfLsqL1Rdl8pAgNT9e6aeG9r8Oljapd07u34Vj9TpZyV8ka2Q9Flg89EQOwqs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000917; c=relaxed/simple; bh=IaqyKWPwwjeWngeDaXAYsAb/BKumclTNuSAL5upMQ2M=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=nuUFMXuCr/8NWyky27tC9tlwKaUyyp73pMc2YvTAKHKTJBO/9Hz1pYIvoBPBFJoFJjCON4UgcDG5RDkaM8TEqbqe+UsAQUZkjOI0BjY9dzqplIvq2jo7OjNrEoNTe7M3kV0gucqBLwzmTPJYR1qx8qw6bRrwDaH7IlB9G0JJbyQ= 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 69D29C4CEE9; Wed, 26 Mar 2025 14:55:17 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAm-00000002kDb-1DGH; Wed, 26 Mar 2025 10:56:04 -0400 Message-ID: <20250326145604.138550459@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:52 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves Subject: [for-next][PATCH 3/9] rtla/osnoise: Unify params struct References: <20250326145549.978154551@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 Instead of having separate structs osnoise_top_params and osnoise_hist_params, use one struct osnoise_params for both. This allows code using the structs to be shared between osnoise-top and osnoise-hist. Cc: Luis Goncalves Link: https://lore.kernel.org/20250320092500.101385-2-tglozar@redhat.com Signed-off-by: Tomas Glozar Reviewed-by: John Kacur Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/src/osnoise.c | 1 - tools/tracing/rtla/src/osnoise.h | 47 +++++++++++++++++++++++ tools/tracing/rtla/src/osnoise_hist.c | 52 ++++++-------------------- tools/tracing/rtla/src/osnoise_top.c | 54 +++++---------------------- tools/tracing/rtla/src/timerlat.h | 1 - 5 files changed, 68 insertions(+), 87 deletions(-) diff --git a/tools/tracing/rtla/src/osnoise.c b/tools/tracing/rtla/src/osno= ise.c index 85f398b89597..93d485c0e949 100644 --- a/tools/tracing/rtla/src/osnoise.c +++ b/tools/tracing/rtla/src/osnoise.c @@ -14,7 +14,6 @@ #include =20 #include "osnoise.h" -#include "utils.h" =20 /* * osnoise_get_cpus - return the original "osnoise/cpus" content diff --git a/tools/tracing/rtla/src/osnoise.h b/tools/tracing/rtla/src/osno= ise.h index 056c8b113dee..f78ffbdc8c8d 100644 --- a/tools/tracing/rtla/src/osnoise.h +++ b/tools/tracing/rtla/src/osnoise.h @@ -1,8 +1,55 @@ // SPDX-License-Identifier: GPL-2.0 #pragma once =20 +#include "utils.h" #include "trace.h" =20 +enum osnoise_mode { + MODE_OSNOISE =3D 0, + MODE_HWNOISE +}; + +struct osnoise_params { + /* Common params */ + char *cpus; + cpu_set_t monitored_cpus; + char *trace_output; + char *cgroup_name; + unsigned long long runtime; + unsigned long long period; + long long threshold; + long long stop_us; + long long stop_total_us; + int sleep_time; + int duration; + int set_sched; + int cgroup; + int hk_cpus; + cpu_set_t hk_cpu_set; + struct sched_attr sched_param; + struct trace_events *events; + int warmup; + int buffer_size; + union { + struct { + /* top only */ + int quiet; + int pretty_output; + enum osnoise_mode mode; + }; + struct { + /* hist only */ + int output_divisor; + char no_header; + char no_summary; + char no_index; + char with_zeros; + int bucket_size; + int entries; + }; + }; +}; + /* * osnoise_context - read, store, write, restore osnoise configs. */ diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src= /osnoise_hist.c index f4c9051c33c4..4721f15f77cd 100644 --- a/tools/tracing/rtla/src/osnoise_hist.c +++ b/tools/tracing/rtla/src/osnoise_hist.c @@ -14,38 +14,8 @@ #include #include =20 -#include "utils.h" #include "osnoise.h" =20 -struct osnoise_hist_params { - char *cpus; - cpu_set_t monitored_cpus; - char *trace_output; - char *cgroup_name; - unsigned long long runtime; - unsigned long long period; - long long threshold; - long long stop_us; - long long stop_total_us; - int sleep_time; - int duration; - int set_sched; - int output_divisor; - int cgroup; - int hk_cpus; - cpu_set_t hk_cpu_set; - struct sched_attr sched_param; - struct trace_events *events; - char no_header; - char no_summary; - char no_index; - char with_zeros; - int bucket_size; - int entries; - int warmup; - int buffer_size; -}; - struct osnoise_hist_cpu { int *samples; int count; @@ -126,7 +96,7 @@ static struct osnoise_hist_data static void osnoise_hist_update_multiple(struct osnoise_tool *tool, int cp= u, unsigned long long duration, int count) { - struct osnoise_hist_params *params =3D tool->params; + struct osnoise_params *params =3D tool->params; struct osnoise_hist_data *data =3D tool->data; unsigned long long total_duration; int entries =3D data->entries; @@ -168,7 +138,7 @@ static void osnoise_destroy_trace_hist(struct osnoise_t= ool *tool) */ static int osnoise_init_trace_hist(struct osnoise_tool *tool) { - struct osnoise_hist_params *params =3D tool->params; + struct osnoise_params *params =3D tool->params; struct osnoise_hist_data *data =3D tool->data; int bucket_size; char buff[128]; @@ -253,7 +223,7 @@ static void osnoise_read_trace_hist(struct osnoise_tool= *tool) */ static void osnoise_hist_header(struct osnoise_tool *tool) { - struct osnoise_hist_params *params =3D tool->params; + struct osnoise_params *params =3D tool->params; struct osnoise_hist_data *data =3D tool->data; struct trace_seq *s =3D tool->trace.seq; char duration[26]; @@ -292,7 +262,7 @@ static void osnoise_hist_header(struct osnoise_tool *to= ol) * osnoise_print_summary - print the summary of the hist data to the output */ static void -osnoise_print_summary(struct osnoise_hist_params *params, +osnoise_print_summary(struct osnoise_params *params, struct trace_instance *trace, struct osnoise_hist_data *data) { @@ -370,7 +340,7 @@ osnoise_print_summary(struct osnoise_hist_params *param= s, * osnoise_print_stats - print data for all CPUs */ static void -osnoise_print_stats(struct osnoise_hist_params *params, struct osnoise_too= l *tool) +osnoise_print_stats(struct osnoise_params *params, struct osnoise_tool *to= ol) { struct osnoise_hist_data *data =3D tool->data; struct trace_instance *trace =3D &tool->trace; @@ -508,10 +478,10 @@ static void osnoise_hist_usage(char *usage) /* * osnoise_hist_parse_args - allocs, parse and fill the cmd line parameters */ -static struct osnoise_hist_params +static struct osnoise_params *osnoise_hist_parse_args(int argc, char *argv[]) { - struct osnoise_hist_params *params; + struct osnoise_params *params; struct trace_events *tevent; int retval; int c; @@ -731,7 +701,7 @@ static struct osnoise_hist_params * osnoise_hist_apply_config - apply the hist configs to the initialized t= ool */ static int -osnoise_hist_apply_config(struct osnoise_tool *tool, struct osnoise_hist_p= arams *params) +osnoise_hist_apply_config(struct osnoise_tool *tool, struct osnoise_params= *params) { int retval; =20 @@ -808,7 +778,7 @@ osnoise_hist_apply_config(struct osnoise_tool *tool, st= ruct osnoise_hist_params * osnoise_init_hist - initialize a osnoise hist tool with parameters */ static struct osnoise_tool -*osnoise_init_hist(struct osnoise_hist_params *params) +*osnoise_init_hist(struct osnoise_params *params) { struct osnoise_tool *tool; int nr_cpus; @@ -842,7 +812,7 @@ static void stop_hist(int sig) * osnoise_hist_set_signals - handles the signal to stop the tool */ static void -osnoise_hist_set_signals(struct osnoise_hist_params *params) +osnoise_hist_set_signals(struct osnoise_params *params) { signal(SIGINT, stop_hist); if (params->duration) { @@ -853,7 +823,7 @@ osnoise_hist_set_signals(struct osnoise_hist_params *pa= rams) =20 int osnoise_hist_main(int argc, char *argv[]) { - struct osnoise_hist_params *params; + struct osnoise_params *params; struct osnoise_tool *record =3D NULL; struct osnoise_tool *tool =3D NULL; struct trace_instance *trace; diff --git a/tools/tracing/rtla/src/osnoise_top.c b/tools/tracing/rtla/src/= osnoise_top.c index dacec2f99017..7f393019bbf5 100644 --- a/tools/tracing/rtla/src/osnoise_top.c +++ b/tools/tracing/rtla/src/osnoise_top.c @@ -14,40 +14,6 @@ #include =20 #include "osnoise.h" -#include "utils.h" - -enum osnoise_mode { - MODE_OSNOISE =3D 0, - MODE_HWNOISE -}; - -/* - * osnoise top parameters - */ -struct osnoise_top_params { - char *cpus; - cpu_set_t monitored_cpus; - char *trace_output; - char *cgroup_name; - unsigned long long runtime; - unsigned long long period; - long long threshold; - long long stop_us; - long long stop_total_us; - int sleep_time; - int duration; - int quiet; - int set_sched; - int cgroup; - int hk_cpus; - int warmup; - int buffer_size; - int pretty_output; - cpu_set_t hk_cpu_set; - struct sched_attr sched_param; - struct trace_events *events; - enum osnoise_mode mode; -}; =20 struct osnoise_top_cpu { unsigned long long sum_runtime; @@ -158,7 +124,7 @@ osnoise_top_handler(struct trace_seq *s, struct tep_rec= ord *record, */ static void osnoise_top_header(struct osnoise_tool *top) { - struct osnoise_top_params *params =3D top->params; + struct osnoise_params *params =3D top->params; struct trace_seq *s =3D top->trace.seq; char duration[26]; =20 @@ -218,7 +184,7 @@ static void clear_terminal(struct trace_seq *seq) */ static void osnoise_top_print(struct osnoise_tool *tool, int cpu) { - struct osnoise_top_params *params =3D tool->params; + struct osnoise_params *params =3D tool->params; struct trace_seq *s =3D tool->trace.seq; struct osnoise_top_cpu *cpu_data; struct osnoise_top_data *data; @@ -258,7 +224,7 @@ static void osnoise_top_print(struct osnoise_tool *tool= , int cpu) * osnoise_print_stats - print data for all cpus */ static void -osnoise_print_stats(struct osnoise_top_params *params, struct osnoise_tool= *top) +osnoise_print_stats(struct osnoise_params *params, struct osnoise_tool *to= p) { struct trace_instance *trace =3D &top->trace; static int nr_cpus =3D -1; @@ -286,7 +252,7 @@ osnoise_print_stats(struct osnoise_top_params *params, = struct osnoise_tool *top) /* * osnoise_top_usage - prints osnoise top usage message */ -static void osnoise_top_usage(struct osnoise_top_params *params, char *usa= ge) +static void osnoise_top_usage(struct osnoise_params *params, char *usage) { int i; =20 @@ -354,9 +320,9 @@ static void osnoise_top_usage(struct osnoise_top_params= *params, char *usage) /* * osnoise_top_parse_args - allocs, parse and fill the cmd line parameters */ -struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv) +struct osnoise_params *osnoise_top_parse_args(int argc, char **argv) { - struct osnoise_top_params *params; + struct osnoise_params *params; struct trace_events *tevent; int retval; int c; @@ -553,7 +519,7 @@ struct osnoise_top_params *osnoise_top_parse_args(int a= rgc, char **argv) * osnoise_top_apply_config - apply the top configs to the initialized tool */ static int -osnoise_top_apply_config(struct osnoise_tool *tool, struct osnoise_top_par= ams *params) +osnoise_top_apply_config(struct osnoise_tool *tool, struct osnoise_params = *params) { int retval; =20 @@ -640,7 +606,7 @@ osnoise_top_apply_config(struct osnoise_tool *tool, str= uct osnoise_top_params *p /* * osnoise_init_top - initialize a osnoise top tool with parameters */ -struct osnoise_tool *osnoise_init_top(struct osnoise_top_params *params) +struct osnoise_tool *osnoise_init_top(struct osnoise_params *params) { struct osnoise_tool *tool; int nr_cpus; @@ -674,7 +640,7 @@ static void stop_top(int sig) /* * osnoise_top_set_signals - handles the signal to stop the tool */ -static void osnoise_top_set_signals(struct osnoise_top_params *params) +static void osnoise_top_set_signals(struct osnoise_params *params) { signal(SIGINT, stop_top); if (params->duration) { @@ -685,7 +651,7 @@ static void osnoise_top_set_signals(struct osnoise_top_= params *params) =20 int osnoise_top_main(int argc, char **argv) { - struct osnoise_top_params *params; + struct osnoise_params *params; struct osnoise_tool *record =3D NULL; struct osnoise_tool *tool =3D NULL; struct trace_instance *trace; diff --git a/tools/tracing/rtla/src/timerlat.h b/tools/tracing/rtla/src/tim= erlat.h index e452d385cb0f..cadc613dc82e 100644 --- a/tools/tracing/rtla/src/timerlat.h +++ b/tools/tracing/rtla/src/timerlat.h @@ -1,5 +1,4 @@ // SPDX-License-Identifier: GPL-2.0 -#include "utils.h" #include "osnoise.h" =20 struct timerlat_params { --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 0479A1F3FD0 for ; Wed, 26 Mar 2025 14:55: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=1743000918; cv=none; b=XjWLRHjqacVX6h9i2oqQXPkMmrHdeEm5KgQuJP+0WLlkv6z0F6QwHdBPFVqzkH2v476QMFQQPO81QgYGYSfuuM+e1IKITI0HSzUc2F2n+jDJ8r2EMH4Ww4aBsHHOArVjHVUz2QmC7mp6YBbvkCn9fpZiagwEmHqYk+DW5f9GuV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000918; c=relaxed/simple; bh=H6sL1mzwy2TdYofBteYn+cMuI0IEfK9GZ5u1SeqVN/8=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=ZphcpUFsQbL8ymU2lkacQbNWYVW2S9H1PjN+nbnoGfoE5VjpaUUQJVsxRhkcu2s8t/OnIRx1viWDJNy12nd3ewYcXx8Dr4gKBBp6re4YPgERuYkBWp6MX2B/q2IJIPhY9qjAv6j6NVHqt5RKawFNCzg43ZFkYg7Kqs81+VRGCBs= 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 B8063C4CEE8; Wed, 26 Mar 2025 14:55:17 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAm-00000002kE5-1wRV; Wed, 26 Mar 2025 10:56:04 -0400 Message-ID: <20250326145604.311802792@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:53 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves Subject: [for-next][PATCH 4/9] rtla: Unify apply_config between top and hist References: <20250326145549.978154551@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 The functions osnoise_top_apply_config and osnoise_hist_apply_config, as well as timerlat_top_apply_config and timerlat_hist_apply_config, are mostly the same. Move common part from them into separate functions osnoise_apply_config and timerlat_apply_config. For rtla-timerlat, also unify params->user_hist and params->user_top into one field called params->user_data, and move several fields used only by timerlat-top into the top-only section of struct timerlat_params. Cc: Luis Goncalves Link: https://lore.kernel.org/20250320092500.101385-3-tglozar@redhat.com Signed-off-by: Tomas Glozar Reviewed-by: John Kacur Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/src/osnoise.c | 79 ++++++++++++++++ tools/tracing/rtla/src/osnoise.h | 1 + tools/tracing/rtla/src/osnoise_hist.c | 66 +------------- tools/tracing/rtla/src/osnoise_top.c | 66 +------------- tools/tracing/rtla/src/timerlat.c | 109 ++++++++++++++++++++++ tools/tracing/rtla/src/timerlat.h | 11 +-- tools/tracing/rtla/src/timerlat_hist.c | 119 ++++--------------------- tools/tracing/rtla/src/timerlat_top.c | 110 +++-------------------- 8 files changed, 227 insertions(+), 334 deletions(-) diff --git a/tools/tracing/rtla/src/osnoise.c b/tools/tracing/rtla/src/osno= ise.c index 93d485c0e949..1735a36466c4 100644 --- a/tools/tracing/rtla/src/osnoise.c +++ b/tools/tracing/rtla/src/osnoise.c @@ -3,6 +3,7 @@ * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira */ =20 +#define _GNU_SOURCE #include #include #include @@ -12,6 +13,7 @@ #include #include #include +#include =20 #include "osnoise.h" =20 @@ -1114,6 +1116,83 @@ osnoise_report_missed_events(struct osnoise_tool *to= ol) } } =20 +/* + * osnoise_apply_config - apply common configs to the initialized tool + */ +int +osnoise_apply_config(struct osnoise_tool *tool, struct osnoise_params *par= ams) +{ + int retval; + + if (!params->sleep_time) + params->sleep_time =3D 1; + + if (params->cpus) { + retval =3D osnoise_set_cpus(tool->context, params->cpus); + if (retval) { + err_msg("Failed to apply CPUs config\n"); + goto out_err; + } + } + + if (params->runtime || params->period) { + retval =3D osnoise_set_runtime_period(tool->context, + params->runtime, + params->period); + if (retval) { + err_msg("Failed to set runtime and/or period\n"); + goto out_err; + } + } + + if (params->stop_us) { + retval =3D osnoise_set_stop_us(tool->context, params->stop_us); + if (retval) { + err_msg("Failed to set stop us\n"); + goto out_err; + } + } + + if (params->stop_total_us) { + retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_u= s); + if (retval) { + err_msg("Failed to set stop total us\n"); + goto out_err; + } + } + + if (params->threshold) { + retval =3D osnoise_set_tracing_thresh(tool->context, params->threshold); + if (retval) { + err_msg("Failed to set tracing_thresh\n"); + goto out_err; + } + } + + if (params->hk_cpus) { + retval =3D sched_setaffinity(getpid(), sizeof(params->hk_cpu_set), + ¶ms->hk_cpu_set); + if (retval =3D=3D -1) { + err_msg("Failed to set rtla to the house keeping CPUs\n"); + goto out_err; + } + } else if (params->cpus) { + /* + * Even if the user do not set a house-keeping CPU, try to + * move rtla to a CPU set different to the one where the user + * set the workload to run. + * + * No need to check results as this is an automatic attempt. + */ + auto_house_keeping(¶ms->monitored_cpus); + } + + return 0; + +out_err: + return -1; +} + static void osnoise_usage(int err) { int i; diff --git a/tools/tracing/rtla/src/osnoise.h b/tools/tracing/rtla/src/osno= ise.h index f78ffbdc8c8d..ac1c99910744 100644 --- a/tools/tracing/rtla/src/osnoise.h +++ b/tools/tracing/rtla/src/osnoise.h @@ -155,6 +155,7 @@ struct osnoise_tool *osnoise_init_tool(char *tool_name); struct osnoise_tool *osnoise_init_trace_tool(char *tracer); void osnoise_report_missed_events(struct osnoise_tool *tool); bool osnoise_trace_is_off(struct osnoise_tool *tool, struct osnoise_tool *= record); +int osnoise_apply_config(struct osnoise_tool *tool, struct osnoise_params = *params); =20 int osnoise_hist_main(int argc, char *argv[]); int osnoise_top_main(int argc, char **argv); diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src= /osnoise_hist.c index 4721f15f77cd..d9d15c8f27c7 100644 --- a/tools/tracing/rtla/src/osnoise_hist.c +++ b/tools/tracing/rtla/src/osnoise_hist.c @@ -12,7 +12,6 @@ #include #include #include -#include =20 #include "osnoise.h" =20 @@ -705,68 +704,9 @@ osnoise_hist_apply_config(struct osnoise_tool *tool, s= truct osnoise_params *para { int retval; =20 - if (!params->sleep_time) - params->sleep_time =3D 1; - - if (params->cpus) { - retval =3D osnoise_set_cpus(tool->context, params->cpus); - if (retval) { - err_msg("Failed to apply CPUs config\n"); - goto out_err; - } - } - - if (params->runtime || params->period) { - retval =3D osnoise_set_runtime_period(tool->context, - params->runtime, - params->period); - if (retval) { - err_msg("Failed to set runtime and/or period\n"); - goto out_err; - } - } - - if (params->stop_us) { - retval =3D osnoise_set_stop_us(tool->context, params->stop_us); - if (retval) { - err_msg("Failed to set stop us\n"); - goto out_err; - } - } - - if (params->stop_total_us) { - retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_u= s); - if (retval) { - err_msg("Failed to set stop total us\n"); - goto out_err; - } - } - - if (params->threshold) { - retval =3D osnoise_set_tracing_thresh(tool->context, params->threshold); - if (retval) { - err_msg("Failed to set tracing_thresh\n"); - goto out_err; - } - } - - if (params->hk_cpus) { - retval =3D sched_setaffinity(getpid(), sizeof(params->hk_cpu_set), - ¶ms->hk_cpu_set); - if (retval =3D=3D -1) { - err_msg("Failed to set rtla to the house keeping CPUs\n"); - goto out_err; - } - } else if (params->cpus) { - /* - * Even if the user do not set a house-keeping CPU, try to - * move rtla to a CPU set different to the one where the user - * set the workload to run. - * - * No need to check results as this is an automatic attempt. - */ - auto_house_keeping(¶ms->monitored_cpus); - } + retval =3D osnoise_apply_config(tool, params); + if (retval) + goto out_err; =20 return 0; =20 diff --git a/tools/tracing/rtla/src/osnoise_top.c b/tools/tracing/rtla/src/= osnoise_top.c index 7f393019bbf5..3455ee73e2e6 100644 --- a/tools/tracing/rtla/src/osnoise_top.c +++ b/tools/tracing/rtla/src/osnoise_top.c @@ -11,7 +11,6 @@ #include #include #include -#include =20 #include "osnoise.h" =20 @@ -523,50 +522,9 @@ osnoise_top_apply_config(struct osnoise_tool *tool, st= ruct osnoise_params *param { int retval; =20 - if (!params->sleep_time) - params->sleep_time =3D 1; - - if (params->cpus) { - retval =3D osnoise_set_cpus(tool->context, params->cpus); - if (retval) { - err_msg("Failed to apply CPUs config\n"); - goto out_err; - } - } - - if (params->runtime || params->period) { - retval =3D osnoise_set_runtime_period(tool->context, - params->runtime, - params->period); - if (retval) { - err_msg("Failed to set runtime and/or period\n"); - goto out_err; - } - } - - if (params->stop_us) { - retval =3D osnoise_set_stop_us(tool->context, params->stop_us); - if (retval) { - err_msg("Failed to set stop us\n"); - goto out_err; - } - } - - if (params->stop_total_us) { - retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_u= s); - if (retval) { - err_msg("Failed to set stop total us\n"); - goto out_err; - } - } - - if (params->threshold) { - retval =3D osnoise_set_tracing_thresh(tool->context, params->threshold); - if (retval) { - err_msg("Failed to set tracing_thresh\n"); - goto out_err; - } - } + retval =3D osnoise_apply_config(tool, params); + if (retval) + goto out_err; =20 if (params->mode =3D=3D MODE_HWNOISE) { retval =3D osnoise_set_irq_disable(tool->context, 1); @@ -576,24 +534,6 @@ osnoise_top_apply_config(struct osnoise_tool *tool, st= ruct osnoise_params *param } } =20 - if (params->hk_cpus) { - retval =3D sched_setaffinity(getpid(), sizeof(params->hk_cpu_set), - ¶ms->hk_cpu_set); - if (retval =3D=3D -1) { - err_msg("Failed to set rtla to the house keeping CPUs\n"); - goto out_err; - } - } else if (params->cpus) { - /* - * Even if the user do not set a house-keeping CPU, try to - * move rtla to a CPU set different to the one where the user - * set the workload to run. - * - * No need to check results as this is an automatic attempt. - */ - auto_house_keeping(¶ms->monitored_cpus); - } - if (isatty(STDOUT_FILENO) && !params->quiet) params->pretty_output =3D 1; =20 diff --git a/tools/tracing/rtla/src/timerlat.c b/tools/tracing/rtla/src/tim= erlat.c index 21cdcc5c4a29..448fb1f7d3a6 100644 --- a/tools/tracing/rtla/src/timerlat.c +++ b/tools/tracing/rtla/src/timerlat.c @@ -2,6 +2,7 @@ /* * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira */ +#define _GNU_SOURCE #include #include #include @@ -11,9 +12,117 @@ #include #include #include +#include =20 #include "timerlat.h" =20 +/* + * timerlat_apply_config - apply common configs to the initialized tool + */ +int +timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *p= arams) +{ + int retval, i; + + if (!params->sleep_time) + params->sleep_time =3D 1; + + if (params->cpus) { + retval =3D osnoise_set_cpus(tool->context, params->cpus); + if (retval) { + err_msg("Failed to apply CPUs config\n"); + goto out_err; + } + } else { + for (i =3D 0; i < sysconf(_SC_NPROCESSORS_CONF); i++) + CPU_SET(i, ¶ms->monitored_cpus); + } + + if (params->stop_us) { + retval =3D osnoise_set_stop_us(tool->context, params->stop_us); + if (retval) { + err_msg("Failed to set stop us\n"); + goto out_err; + } + } + + if (params->stop_total_us) { + retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_u= s); + if (retval) { + err_msg("Failed to set stop total us\n"); + goto out_err; + } + } + + + if (params->timerlat_period_us) { + retval =3D osnoise_set_timerlat_period_us(tool->context, params->timerla= t_period_us); + if (retval) { + err_msg("Failed to set timerlat period\n"); + goto out_err; + } + } + + + if (params->print_stack) { + retval =3D osnoise_set_print_stack(tool->context, params->print_stack); + if (retval) { + err_msg("Failed to set print stack\n"); + goto out_err; + } + } + + if (params->hk_cpus) { + retval =3D sched_setaffinity(getpid(), sizeof(params->hk_cpu_set), + ¶ms->hk_cpu_set); + if (retval =3D=3D -1) { + err_msg("Failed to set rtla to the house keeping CPUs\n"); + goto out_err; + } + } else if (params->cpus) { + /* + * Even if the user do not set a house-keeping CPU, try to + * move rtla to a CPU set different to the one where the user + * set the workload to run. + * + * No need to check results as this is an automatic attempt. + */ + auto_house_keeping(¶ms->monitored_cpus); + } + + /* + * If the user did not specify a type of thread, try user-threads first. + * Fall back to kernel threads otherwise. + */ + if (!params->kernel_workload && !params->user_data) { + retval =3D tracefs_file_exists(NULL, "osnoise/per_cpu/cpu0/timerlat_fd"); + if (retval) { + debug_msg("User-space interface detected, setting user-threads\n"); + params->user_workload =3D 1; + params->user_data =3D 1; + } else { + debug_msg("User-space interface not detected, setting kernel-threads\n"= ); + params->kernel_workload =3D 1; + } + } + + /* + * Set workload according to type of thread if the kernel supports it. + * On kernels without support, user threads will have already failed + * on missing timerlat_fd, and kernel threads do not need it. + */ + retval =3D osnoise_set_workload(tool->context, params->kernel_workload); + if (retval < -1) { + err_msg("Failed to set OSNOISE_WORKLOAD option\n"); + goto out_err; + } + + return 0; + +out_err: + return -1; +} + static void timerlat_usage(int err) { int i; diff --git a/tools/tracing/rtla/src/timerlat.h b/tools/tracing/rtla/src/tim= erlat.h index cadc613dc82e..73045aef23fa 100644 --- a/tools/tracing/rtla/src/timerlat.h +++ b/tools/tracing/rtla/src/timerlat.h @@ -15,17 +15,15 @@ struct timerlat_params { int sleep_time; int output_divisor; int duration; - int quiet; int set_sched; int dma_latency; int no_aa; - int aa_only; int dump_tasks; int cgroup; int hk_cpus; int user_workload; int kernel_workload; - int pretty_output; + int user_data; int warmup; int buffer_size; int deepest_idle_state; @@ -35,11 +33,12 @@ struct timerlat_params { union { struct { /* top only */ - int user_top; + int quiet; + int aa_only; + int pretty_output; }; struct { /* hist only */ - int user_hist; char no_irq; char no_thread; char no_header; @@ -52,6 +51,8 @@ struct timerlat_params { }; }; =20 +int timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_param= s *params); + int timerlat_hist_main(int argc, char *argv[]); int timerlat_top_main(int argc, char *argv[]); int timerlat_main(int argc, char *argv[]); diff --git a/tools/tracing/rtla/src/timerlat_hist.c b/tools/tracing/rtla/sr= c/timerlat_hist.c index 822c068b4776..9d9efeedc4c2 100644 --- a/tools/tracing/rtla/src/timerlat_hist.c +++ b/tools/tracing/rtla/src/timerlat_hist.c @@ -315,7 +315,7 @@ static void timerlat_hist_header(struct osnoise_tool *t= ool) if (!params->no_thread) trace_seq_printf(s, " Thr-%03d", cpu); =20 - if (params->user_hist) + if (params->user_data) trace_seq_printf(s, " Usr-%03d", cpu); } trace_seq_printf(s, "\n"); @@ -371,7 +371,7 @@ timerlat_print_summary(struct timerlat_params *params, trace_seq_printf(trace->seq, "%9llu ", data->hist[cpu].thread_count); =20 - if (params->user_hist) + if (params->user_data) trace_seq_printf(trace->seq, "%9llu ", data->hist[cpu].user_count); } @@ -399,7 +399,7 @@ timerlat_print_summary(struct timerlat_params *params, data->hist[cpu].min_thread, false); =20 - if (params->user_hist) + if (params->user_data) format_summary_value(trace->seq, data->hist[cpu].user_count, data->hist[cpu].min_user, @@ -429,7 +429,7 @@ timerlat_print_summary(struct timerlat_params *params, data->hist[cpu].sum_thread, true); =20 - if (params->user_hist) + if (params->user_data) format_summary_value(trace->seq, data->hist[cpu].user_count, data->hist[cpu].sum_user, @@ -459,7 +459,7 @@ timerlat_print_summary(struct timerlat_params *params, data->hist[cpu].max_thread, false); =20 - if (params->user_hist) + if (params->user_data) format_summary_value(trace->seq, data->hist[cpu].user_count, data->hist[cpu].max_user, @@ -521,7 +521,7 @@ timerlat_print_stats_all(struct timerlat_params *params, if (!params->no_thread) trace_seq_printf(trace->seq, " Thr"); =20 - if (params->user_hist) + if (params->user_data) trace_seq_printf(trace->seq, " Usr"); =20 trace_seq_printf(trace->seq, "\n"); @@ -537,7 +537,7 @@ timerlat_print_stats_all(struct timerlat_params *params, trace_seq_printf(trace->seq, "%9llu ", sum.thread_count); =20 - if (params->user_hist) + if (params->user_data) trace_seq_printf(trace->seq, "%9llu ", sum.user_count); =20 @@ -558,7 +558,7 @@ timerlat_print_stats_all(struct timerlat_params *params, sum.min_thread, false); =20 - if (params->user_hist) + if (params->user_data) format_summary_value(trace->seq, sum.user_count, sum.min_user, @@ -581,7 +581,7 @@ timerlat_print_stats_all(struct timerlat_params *params, sum.sum_thread, true); =20 - if (params->user_hist) + if (params->user_data) format_summary_value(trace->seq, sum.user_count, sum.sum_user, @@ -604,7 +604,7 @@ timerlat_print_stats_all(struct timerlat_params *params, sum.max_thread, false); =20 - if (params->user_hist) + if (params->user_data) format_summary_value(trace->seq, sum.user_count, sum.max_user, @@ -654,7 +654,7 @@ timerlat_print_stats(struct timerlat_params *params, st= ruct osnoise_tool *tool) data->hist[cpu].thread[bucket]); } =20 - if (params->user_hist) { + if (params->user_data) { total +=3D data->hist[cpu].user[bucket]; trace_seq_printf(trace->seq, "%9d ", data->hist[cpu].user[bucket]); @@ -690,7 +690,7 @@ timerlat_print_stats(struct timerlat_params *params, st= ruct osnoise_tool *tool) trace_seq_printf(trace->seq, "%9d ", data->hist[cpu].thread[data->entries]); =20 - if (params->user_hist) + if (params->user_data) trace_seq_printf(trace->seq, "%9d ", data->hist[cpu].user[data->entries]); } @@ -965,7 +965,7 @@ static struct timerlat_params params->user_workload =3D 1; /* fallback: -u implies in -U */ case 'U': - params->user_hist =3D 1; + params->user_data =3D 1; break; case '0': /* no irq */ params->no_irq =3D 1; @@ -1063,98 +1063,11 @@ static struct timerlat_params static int timerlat_hist_apply_config(struct osnoise_tool *tool, struct timerlat_para= ms *params) { - int retval, i; - - if (!params->sleep_time) - params->sleep_time =3D 1; - - if (params->cpus) { - retval =3D osnoise_set_cpus(tool->context, params->cpus); - if (retval) { - err_msg("Failed to apply CPUs config\n"); - goto out_err; - } - } else { - for (i =3D 0; i < sysconf(_SC_NPROCESSORS_CONF); i++) - CPU_SET(i, ¶ms->monitored_cpus); - } - - if (params->stop_us) { - retval =3D osnoise_set_stop_us(tool->context, params->stop_us); - if (retval) { - err_msg("Failed to set stop us\n"); - goto out_err; - } - } - - if (params->stop_total_us) { - retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_u= s); - if (retval) { - err_msg("Failed to set stop total us\n"); - goto out_err; - } - } - - if (params->timerlat_period_us) { - retval =3D osnoise_set_timerlat_period_us(tool->context, params->timerla= t_period_us); - if (retval) { - err_msg("Failed to set timerlat period\n"); - goto out_err; - } - } - - if (params->print_stack) { - retval =3D osnoise_set_print_stack(tool->context, params->print_stack); - if (retval) { - err_msg("Failed to set print stack\n"); - goto out_err; - } - } - - if (params->hk_cpus) { - retval =3D sched_setaffinity(getpid(), sizeof(params->hk_cpu_set), - ¶ms->hk_cpu_set); - if (retval =3D=3D -1) { - err_msg("Failed to set rtla to the house keeping CPUs\n"); - goto out_err; - } - } else if (params->cpus) { - /* - * Even if the user do not set a house-keeping CPU, try to - * move rtla to a CPU set different to the one where the user - * set the workload to run. - * - * No need to check results as this is an automatic attempt. - */ - auto_house_keeping(¶ms->monitored_cpus); - } - - /* - * If the user did not specify a type of thread, try user-threads first. - * Fall back to kernel threads otherwise. - */ - if (!params->kernel_workload && !params->user_hist) { - retval =3D tracefs_file_exists(NULL, "osnoise/per_cpu/cpu0/timerlat_fd"); - if (retval) { - debug_msg("User-space interface detected, setting user-threads\n"); - params->user_workload =3D 1; - params->user_hist =3D 1; - } else { - debug_msg("User-space interface not detected, setting kernel-threads\n"= ); - params->kernel_workload =3D 1; - } - } + int retval; =20 - /* - * Set workload according to type of thread if the kernel supports it. - * On kernels without support, user threads will have already failed - * on missing timerlat_fd, and kernel threads do not need it. - */ - retval =3D osnoise_set_workload(tool->context, params->kernel_workload); - if (retval < -1) { - err_msg("Failed to set OSNOISE_WORKLOAD option\n"); + retval =3D timerlat_apply_config(tool, params); + if (retval) goto out_err; - } =20 return 0; =20 diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src= /timerlat_top.c index c3196a0bb585..79cb6f28967f 100644 --- a/tools/tracing/rtla/src/timerlat_top.c +++ b/tools/tracing/rtla/src/timerlat_top.c @@ -266,7 +266,7 @@ static void timerlat_top_header(struct timerlat_params = *params, struct osnoise_t trace_seq_printf(s, "\033[2;37;40m"); =20 trace_seq_printf(s, " Timer Latency = "); - if (params->user_top) + if (params->user_data) trace_seq_printf(s, " "); =20 if (params->pretty_output) @@ -277,7 +277,7 @@ static void timerlat_top_header(struct timerlat_params = *params, struct osnoise_t params->output_divisor =3D=3D 1 ? "ns" : "us", params->output_divisor =3D=3D 1 ? "ns" : "us"); =20 - if (params->user_top) { + if (params->user_data) { trace_seq_printf(s, " | Ret user Timer Latency (%s)", params->output_divisor =3D=3D 1 ? "ns" : "us"); } @@ -287,7 +287,7 @@ static void timerlat_top_header(struct timerlat_params = *params, struct osnoise_t trace_seq_printf(s, "\033[2;30;47m"); =20 trace_seq_printf(s, "CPU COUNT | cur min avg = max | cur min avg max"); - if (params->user_top) + if (params->user_data) trace_seq_printf(s, " | cur min avg max"); =20 if (params->pretty_output) @@ -338,7 +338,7 @@ static void timerlat_top_print(struct osnoise_tool *top= , int cpu) trace_seq_printf(s, "%9llu", cpu_data->max_thread); } =20 - if (!params->user_top) { + if (!params->user_data) { trace_seq_printf(s, "\n"); return; } @@ -380,7 +380,7 @@ timerlat_top_print_sum(struct osnoise_tool *top, struct= timerlat_top_cpu *summar } =20 trace_seq_printf(s, "%.*s|%.*s|%.*s", 15, split, 40, split, 39, split); - if (params->user_top) + if (params->user_data) trace_seq_printf(s, "-|%.*s", 39, split); trace_seq_printf(s, "\n"); =20 @@ -405,7 +405,7 @@ timerlat_top_print_sum(struct osnoise_tool *top, struct= timerlat_top_cpu *summar trace_seq_printf(s, "%9llu", summary->max_thread); } =20 - if (!params->user_top) { + if (!params->user_data) { trace_seq_printf(s, "\n"); return; } @@ -722,7 +722,7 @@ static struct timerlat_params params->user_workload =3D true; /* fallback: -u implies -U */ case 'U': - params->user_top =3D true; + params->user_data =3D true; break; case '0': /* trigger */ if (params->events) { @@ -800,100 +800,10 @@ static int timerlat_top_apply_config(struct osnoise_tool *top, struct timerlat_params= *params) { int retval; - int i; - - if (!params->sleep_time) - params->sleep_time =3D 1; - - if (params->cpus) { - retval =3D osnoise_set_cpus(top->context, params->cpus); - if (retval) { - err_msg("Failed to apply CPUs config\n"); - goto out_err; - } - } else { - for (i =3D 0; i < sysconf(_SC_NPROCESSORS_CONF); i++) - CPU_SET(i, ¶ms->monitored_cpus); - } - - if (params->stop_us) { - retval =3D osnoise_set_stop_us(top->context, params->stop_us); - if (retval) { - err_msg("Failed to set stop us\n"); - goto out_err; - } - } - - if (params->stop_total_us) { - retval =3D osnoise_set_stop_total_us(top->context, params->stop_total_us= ); - if (retval) { - err_msg("Failed to set stop total us\n"); - goto out_err; - } - } - - - if (params->timerlat_period_us) { - retval =3D osnoise_set_timerlat_period_us(top->context, params->timerlat= _period_us); - if (retval) { - err_msg("Failed to set timerlat period\n"); - goto out_err; - } - } =20 - - if (params->print_stack) { - retval =3D osnoise_set_print_stack(top->context, params->print_stack); - if (retval) { - err_msg("Failed to set print stack\n"); - goto out_err; - } - } - - if (params->hk_cpus) { - retval =3D sched_setaffinity(getpid(), sizeof(params->hk_cpu_set), - ¶ms->hk_cpu_set); - if (retval =3D=3D -1) { - err_msg("Failed to set rtla to the house keeping CPUs\n"); - goto out_err; - } - } else if (params->cpus) { - /* - * Even if the user do not set a house-keeping CPU, try to - * move rtla to a CPU set different to the one where the user - * set the workload to run. - * - * No need to check results as this is an automatic attempt. - */ - auto_house_keeping(¶ms->monitored_cpus); - } - - /* - * If the user did not specify a type of thread, try user-threads first. - * Fall back to kernel threads otherwise. - */ - if (!params->kernel_workload && !params->user_top) { - retval =3D tracefs_file_exists(NULL, "osnoise/per_cpu/cpu0/timerlat_fd"); - if (retval) { - debug_msg("User-space interface detected, setting user-threads\n"); - params->user_workload =3D 1; - params->user_top =3D 1; - } else { - debug_msg("User-space interface not detected, setting kernel-threads\n"= ); - params->kernel_workload =3D 1; - } - } - - /* - * Set workload according to type of thread if the kernel supports it. - * On kernels without support, user threads will have already failed - * on missing timerlat_fd, and kernel threads do not need it. - */ - retval =3D osnoise_set_workload(top->context, params->kernel_workload); - if (retval < -1) { - err_msg("Failed to set OSNOISE_WORKLOAD option\n"); + retval =3D timerlat_apply_config(top, params); + if (retval) goto out_err; - } =20 if (isatty(STDOUT_FILENO) && !params->quiet) params->pretty_output =3D 1; @@ -1142,7 +1052,7 @@ int timerlat_top_main(int argc, char *argv[]) } } =20 - if (params->cgroup && !params->user_top) { + if (params->cgroup && !params->user_data) { retval =3D set_comm_cgroup("timerlat/", params->cgroup_name); if (!retval) { err_msg("Failed to move threads to cgroup\n"); --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 CC1021F3BAC for ; Wed, 26 Mar 2025 14:55:17 +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=1743000917; cv=none; b=Sva1r6UOhr6A3WVlkB2zE2z0a+QHoRlgOuZJScyMoxmwmt0VjULS8WDeyUG+wHMDSfa6TFTckH0KcYF1al4K4L/pfT0NaPfyLpTnjEi/qlIfDXwZy+NsPc+MsR/Onwdm+MSjIvkYP+PKCZNJaFf+DCE3V9Uuc0LfG5/86aAQYEs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000917; c=relaxed/simple; bh=XCe1plkqFiS5Uoutw1qfxrhgFmIAmpmwLkSClR/e7vw=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=Ie9stJcsW/RV7KgqCs+nihipP/dGhVbfd0d1HVo8ildQZghQhMRajBj32gUWECdDQVR5+FSEcjZKlWWetq3ksCDh+Dl4uWEHpfu+mJisqweBqVI677h+8p9q2wl4YjdLwAWkyJMbJGTP+O0PEIzKTGK9s+xA/8TJpmXiBPIjweA= 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 B7E8CC4CEE2; Wed, 26 Mar 2025 14:55:17 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAm-00000002kEZ-2eJj; Wed, 26 Mar 2025 10:56:04 -0400 Message-ID: <20250326145604.482508283@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:54 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves Subject: [for-next][PATCH 5/9] rtla/osnoise: Set OSNOISE_WORKLOAD to true References: <20250326145549.978154551@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 If running rtla osnoise with NO_OSNOISE_WORKLOAD, it reports no samples: $ echo NO_OSNOISE_WORKLOAD > /sys/kernel/tracing/osnoise/options $ rtla osnoise hist -d 10s Index over: 0 count: 0 min: 0 avg: 0 max: 0 This situation can also happen when running rtla-osnoise after an improperly exited rtla-timerlat run. Set OSNOISE_WORKLOAD in rtla-osnoise, too, similarly to what we already did for timerlat in commit 217f0b1e990e ("rtla/timerlat_top: Set OSNOISE_WORKLOAD for kernel threads") and commit d8d866171a41 ("rtla/timerlat_hist: Set OSNOISE_WORKLOAD for kernel threads"). Note that there is no user workload mode for rtla-osnoise yet, so OSNOISE_WORKLOAD is always set to true. Cc: Luis Goncalves Link: https://lore.kernel.org/20250320092500.101385-4-tglozar@redhat.com Fixes: 1eceb2fc2ca5 ("rtla/osnoise: Add osnoise top mode") Fixes: 829a6c0b5698 ("rtla/osnoise: Add the hist mode") Signed-off-by: Tomas Glozar Reviewed-by: John Kacur Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/src/osnoise.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/tracing/rtla/src/osnoise.c b/tools/tracing/rtla/src/osno= ise.c index 1735a36466c4..a71618d876e9 100644 --- a/tools/tracing/rtla/src/osnoise.c +++ b/tools/tracing/rtla/src/osnoise.c @@ -1187,6 +1187,12 @@ osnoise_apply_config(struct osnoise_tool *tool, stru= ct osnoise_params *params) auto_house_keeping(¶ms->monitored_cpus); } =20 + retval =3D osnoise_set_workload(tool->context, true); + if (retval < -1) { + err_msg("Failed to set OSNOISE_WORKLOAD option\n"); + goto out_err; + } + return 0; =20 out_err: --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 047081F3D59 for ; Wed, 26 Mar 2025 14:55: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=1743000918; cv=none; b=J+/lGognGYQ8I58UJ2slPSOIqyG3iV/pbkCnt+aN+JBmX7dLLCJL6kKFw56upuVAy/aJKBMecBd2UxXYJO4L13SgNu3vo6t4MG5NTnWXZqm4qkdCFAjNzgSAusUm1J5XNWGnu1fyGMcyM5bHL8qmT50A2fyi4YDUlwS1NsmDyow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000918; c=relaxed/simple; bh=RbxTpL00A5cqTlR0YQKwZWmt521LefRA9dXYwCczeU0=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=iGJQcKNWDtjDiSgMPZIP8Va9gHTphpMJ8+R5cSxNUMkw9VV6PBKj0f/jaUQW0h3kn+GbE8B5nhQdJJBKzxnX2ceWox6L8K4jF1W1faooAj22P+e6ghDWyMQXeJshC8x+E29wtYZfeDaFKB2Vff4CtC4Euu8Pb3USHMrSxRGxlhA= 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 E4566C4CEEB; Wed, 26 Mar 2025 14:55:17 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAm-00000002kF3-3NUe; Wed, 26 Mar 2025 10:56:04 -0400 Message-ID: <20250326145604.654551325@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:55 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves Subject: [for-next][PATCH 6/9] rtla: Always set all tracer options References: <20250326145549.978154551@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 rtla currently only sets tracer options that are explicitly set by the user, with the exception of OSNOISE_WORKLOAD. This leads to improper behavior in case rtla is run with those options not set to the default value. rtla does reset them to the original value upon exiting, but that does not protect it from starting with non-default values set either by an improperly exited rtla or by another user of the tracers. For example, after running this command: $ echo 1 > /sys/kernel/tracing/osnoise/stop_tracing_us all runs of rtla will stop at the 1us threshold, even if not requested by the user: $ rtla osnoise hist Index CPU-000 CPU-001 1 8 5 2 5 9 3 1 2 4 6 1 5 2 1 6 0 1 8 1 1 12 0 1 14 1 0 15 1 0 over: 0 0 count: 25 21 min: 1 1 avg: 3.68 3.05 max: 15 12 rtla osnoise hit stop tracing Fix the problem by setting the default value for all tracer options if the user has not provided their own value. For most of the options, it's enough to just drop the if clause checking for the value being set. For cpus, "all" is used as the default value, and for osnoise default period and runtime, default values of the osnoise_data variable in trace_osnoise.c are used. Cc: Luis Goncalves Link: https://lore.kernel.org/20250320092500.101385-5-tglozar@redhat.com Fixes: 1eceb2fc2ca5 ("rtla/osnoise: Add osnoise top mode") Fixes: 829a6c0b5698 ("rtla/osnoise: Add the hist mode") Fixes: a828cd18bc4a ("rtla: Add timerlat tool and timelart top mode") Fixes: 1eeb6328e8b3 ("rtla/timerlat: Add timerlat hist mode") Signed-off-by: Tomas Glozar Reviewed-by: John Kacur Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/src/osnoise.c | 56 ++++++++++++++--------------- tools/tracing/rtla/src/timerlat.c | 59 +++++++++++++++---------------- 2 files changed, 56 insertions(+), 59 deletions(-) diff --git a/tools/tracing/rtla/src/osnoise.c b/tools/tracing/rtla/src/osno= ise.c index a71618d876e9..2dc3e4539e99 100644 --- a/tools/tracing/rtla/src/osnoise.c +++ b/tools/tracing/rtla/src/osnoise.c @@ -17,6 +17,9 @@ =20 #include "osnoise.h" =20 +#define DEFAULT_SAMPLE_PERIOD 1000000 /* 1s */ +#define DEFAULT_SAMPLE_RUNTIME 1000000 /* 1s */ + /* * osnoise_get_cpus - return the original "osnoise/cpus" content * @@ -1127,46 +1130,43 @@ osnoise_apply_config(struct osnoise_tool *tool, str= uct osnoise_params *params) if (!params->sleep_time) params->sleep_time =3D 1; =20 - if (params->cpus) { - retval =3D osnoise_set_cpus(tool->context, params->cpus); - if (retval) { - err_msg("Failed to apply CPUs config\n"); - goto out_err; - } + retval =3D osnoise_set_cpus(tool->context, params->cpus ? params->cpus : = "all"); + if (retval) { + err_msg("Failed to apply CPUs config\n"); + goto out_err; } =20 if (params->runtime || params->period) { retval =3D osnoise_set_runtime_period(tool->context, params->runtime, params->period); - if (retval) { - err_msg("Failed to set runtime and/or period\n"); - goto out_err; - } + } else { + retval =3D osnoise_set_runtime_period(tool->context, + DEFAULT_SAMPLE_PERIOD, + DEFAULT_SAMPLE_RUNTIME); } =20 - if (params->stop_us) { - retval =3D osnoise_set_stop_us(tool->context, params->stop_us); - if (retval) { - err_msg("Failed to set stop us\n"); - goto out_err; - } + if (retval) { + err_msg("Failed to set runtime and/or period\n"); + goto out_err; } =20 - if (params->stop_total_us) { - retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_u= s); - if (retval) { - err_msg("Failed to set stop total us\n"); - goto out_err; - } + retval =3D osnoise_set_stop_us(tool->context, params->stop_us); + if (retval) { + err_msg("Failed to set stop us\n"); + goto out_err; } =20 - if (params->threshold) { - retval =3D osnoise_set_tracing_thresh(tool->context, params->threshold); - if (retval) { - err_msg("Failed to set tracing_thresh\n"); - goto out_err; - } + retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_us= ); + if (retval) { + err_msg("Failed to set stop total us\n"); + goto out_err; + } + + retval =3D osnoise_set_tracing_thresh(tool->context, params->threshold); + if (retval) { + err_msg("Failed to set tracing_thresh\n"); + goto out_err; } =20 if (params->hk_cpus) { diff --git a/tools/tracing/rtla/src/timerlat.c b/tools/tracing/rtla/src/tim= erlat.c index 448fb1f7d3a6..c29e2ba2d7d8 100644 --- a/tools/tracing/rtla/src/timerlat.c +++ b/tools/tracing/rtla/src/timerlat.c @@ -16,6 +16,8 @@ =20 #include "timerlat.h" =20 +#define DEFAULT_TIMERLAT_PERIOD 1000 /* 1ms */ + /* * timerlat_apply_config - apply common configs to the initialized tool */ @@ -27,49 +29,44 @@ timerlat_apply_config(struct osnoise_tool *tool, struct= timerlat_params *params) if (!params->sleep_time) params->sleep_time =3D 1; =20 - if (params->cpus) { - retval =3D osnoise_set_cpus(tool->context, params->cpus); - if (retval) { - err_msg("Failed to apply CPUs config\n"); - goto out_err; - } - } else { + retval =3D osnoise_set_cpus(tool->context, params->cpus ? params->cpus : = "all"); + if (retval) { + err_msg("Failed to apply CPUs config\n"); + goto out_err; + } + + if (!params->cpus) { for (i =3D 0; i < sysconf(_SC_NPROCESSORS_CONF); i++) CPU_SET(i, ¶ms->monitored_cpus); } =20 - if (params->stop_us) { - retval =3D osnoise_set_stop_us(tool->context, params->stop_us); - if (retval) { - err_msg("Failed to set stop us\n"); - goto out_err; - } + retval =3D osnoise_set_stop_us(tool->context, params->stop_us); + if (retval) { + err_msg("Failed to set stop us\n"); + goto out_err; } =20 - if (params->stop_total_us) { - retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_u= s); - if (retval) { - err_msg("Failed to set stop total us\n"); - goto out_err; - } + retval =3D osnoise_set_stop_total_us(tool->context, params->stop_total_us= ); + if (retval) { + err_msg("Failed to set stop total us\n"); + goto out_err; } =20 =20 - if (params->timerlat_period_us) { - retval =3D osnoise_set_timerlat_period_us(tool->context, params->timerla= t_period_us); - if (retval) { - err_msg("Failed to set timerlat period\n"); - goto out_err; - } + retval =3D osnoise_set_timerlat_period_us(tool->context, + params->timerlat_period_us ? + params->timerlat_period_us : + DEFAULT_TIMERLAT_PERIOD); + if (retval) { + err_msg("Failed to set timerlat period\n"); + goto out_err; } =20 =20 - if (params->print_stack) { - retval =3D osnoise_set_print_stack(tool->context, params->print_stack); - if (retval) { - err_msg("Failed to set print stack\n"); - goto out_err; - } + retval =3D osnoise_set_print_stack(tool->context, params->print_stack); + if (retval) { + err_msg("Failed to set print stack\n"); + goto out_err; } =20 if (params->hk_cpus) { --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 8FCF01F4194 for ; Wed, 26 Mar 2025 14:55: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=1743000918; cv=none; b=FqRp4MUfRxpcbjuQ597MeuX3+/JTpGX7lbYQdpx7l4tKxcOVLq/C87bKZC4/g/1Dv+sVcBLQjGF9/FJs5eAOaZv+7T7LTb2LB9CasI3cHcIh0DoiYZR1BGYezun4O/CKktiBrAqXq6VOYzsGG6roJdS5VXrp7Qu6NfPe5iRN5N4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000918; c=relaxed/simple; bh=f8Go/Lf6eKTKK3ZOLvtfyqYnJK+Xb1Uz/4HbbTR++Tw=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=iOnYKPdjRP/mJEQeFdzLDoBs0OzD50DWqjQx19bkqY7jbAAKn5BHQ4KQj3DeUY6G/x3kXQGDPetl7z3JGEmvAI6Wq9j4CAyVjZjRvbUo8ph61EZeOqXyIRMsmuaZyXSw08fdWgnjJq/nzfB9bqh/l+teJHkKtUmaBjXg37e9cHY= 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 2034CC4CEF6; Wed, 26 Mar 2025 14:55:18 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAm-00000002kFY-45d0; Wed, 26 Mar 2025 10:56:04 -0400 Message-ID: <20250326145604.825747992@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:56 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves Subject: [for-next][PATCH 7/9] rtla/tests: Reset osnoise options before check References: <20250326145549.978154551@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 Remove any dangling tracing instances from previous improperly exited runs of rtla, and reset osnoise options to default before running a test case. This ensures that the test results are deterministic. Specific test cases checked that rtla behaves correctly even when the tracer state is not clean will be added later. Cc: John Kacur Cc: Luis Goncalves Link: https://lore.kernel.org/20250320092500.101385-6-tglozar@redhat.com Signed-off-by: Tomas Glozar Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/tests/engine.sh | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/tracing/rtla/tests/engine.sh b/tools/tracing/rtla/tests/= engine.sh index 64d0446dc28e..5db8aa4bc031 100644 --- a/tools/tracing/rtla/tests/engine.sh +++ b/tools/tracing/rtla/tests/engine.sh @@ -8,12 +8,44 @@ test_begin() { [ -n "$TEST_COUNT" ] && echo "1..$TEST_COUNT" } =20 +reset_osnoise() { + # Reset osnoise options to default and remove any dangling instances crea= ted + # by improperly exited rtla runs. + pushd /sys/kernel/tracing || return 1 + + # Remove dangling instances created by previous rtla run + echo 0 > tracing_thresh + cd instances + for i in osnoise_top osnoise_hist timerlat_top timerlat_hist + do + [ ! -d "$i" ] && continue + rmdir "$i" + done + + # Reset options to default + # Note: those are copied from the default values of osnoise_data + # in kernel/trace/trace_osnoise.c + cd ../osnoise + echo all > cpus + echo DEFAULTS > options + echo 1000000 > period_us + echo 0 > print_stack + echo 1000000 > runtime_us + echo 0 > stop_tracing_total_us + echo 0 > stop_tracing_us + echo 1000 > timerlat_period_us + + popd +} + check() { # Simple check: run rtla with given arguments and test exit code. # If TEST_COUNT is set, run the test. Otherwise, just count. ctr=3D$(($ctr + 1)) if [ -n "$TEST_COUNT" ] then + # Reset osnoise options before running test. + [ "$NO_RESET_OSNOISE" =3D=3D 1 ] || reset_osnoise # Run rtla; in case of failure, include its output as comment # in the test results. result=3D$(stdbuf -oL $TIMEOUT "$RTLA" $2 2>&1); exitcode=3D$? @@ -37,6 +69,14 @@ unset_timeout() { unset TIMEOUT } =20 +set_no_reset_osnoise() { + NO_RESET_OSNOISE=3D1 +} + +unset_no_reset_osnoise() { + unset NO_RESET_OSNOISE +} + test_end() { # If running without TEST_COUNT, tests are not actually run, just # counted. In that case, re-run the test with the correct count. --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 554591F4173 for ; Wed, 26 Mar 2025 14:55: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=1743000918; cv=none; b=OYaK7gRdBwIxWnAsNg2bCN4A/suLIx2RbONFOUyC2qjLjJKiQL0f/3bWYSYyesNp5L1YECyem/Dtb8jueJiPvLgScRqeks5DXbigi6QOLHpxmD1ETBntHG3FIa0n00sQSm6FZ20nAEF6NQR2hFEnuNW3+lRX1YABVzZQkY9vQQ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000918; c=relaxed/simple; bh=IrI/e9OiTfMrQ42Z1i3DNtNrpqZY4yoMiD8jn+nJSbU=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=VmI561X6t46vsmY8R6lwx9ONw0tIgXQhpPmRzZe+ORP84HiSsj7z+DCtBihprDdVpgRLXdCZ9K95WwtdcDaPMcpqup+VgiE5j/AJeG6rDLoie0UGeRiPYnqVr70usjqUm+XOqIdvCQ/ogpiDxCFbLhUDNfhfX1NzbJ3WPNQoglA= 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 406E5C4CEE2; Wed, 26 Mar 2025 14:55:18 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAn-00000002kG4-0cMZ; Wed, 26 Mar 2025 10:56:05 -0400 Message-ID: <20250326145604.996254538@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:57 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Luis Goncalves Subject: [for-next][PATCH 8/9] rtla/tests: Test setting default options References: <20250326145549.978154551@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 Add function to test engine to test with pre-set osnoise options, and use it to test whether osnoise period (as an example) is set correctly. The test works by pre-setting a high period of 10 minutes and stop on threshold. Thus, it is easy to check whether rtla is properly resetting the period to default: if it is, the test will complete on time, since the first sample will overflow the threshold. If not, it will time out. Cc: Luis Goncalves Link: https://lore.kernel.org/20250320092500.101385-7-tglozar@redhat.com Signed-off-by: Tomas Glozar Reviewed-by: John Kacur Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/tests/engine.sh | 26 ++++++++++++++++++++++++++ tools/tracing/rtla/tests/osnoise.t | 6 ++++++ 2 files changed, 32 insertions(+) diff --git a/tools/tracing/rtla/tests/engine.sh b/tools/tracing/rtla/tests/= engine.sh index 5db8aa4bc031..b1697b3e3f52 100644 --- a/tools/tracing/rtla/tests/engine.sh +++ b/tools/tracing/rtla/tests/engine.sh @@ -61,6 +61,32 @@ check() { fi } =20 +check_with_osnoise_options() { + # Do the same as "check", but with pre-set osnoise options. + # Note: rtla should reset the osnoise options, this is used to test + # if it indeed does so. + # Save original arguments + arg1=3D$1 + arg2=3D$2 + + # Apply osnoise options (if not dry run) + if [ -n "$TEST_COUNT" ] + then + [ "$NO_RESET_OSNOISE" =3D=3D 1 ] || reset_osnoise + shift + while shift + do + [ "$1" =3D=3D "" ] && continue + option=3D$(echo $1 | cut -d '=3D' -f 1) + value=3D$(echo $1 | cut -d '=3D' -f 2) + echo "option: $option, value: $value" + echo "$value" > "/sys/kernel/tracing/osnoise/$option" || return 1 + done + fi + + NO_RESET_OSNOISE=3D1 check "$arg1" "$arg2" +} + set_timeout() { TIMEOUT=3D"timeout -v -k 15s $1" } diff --git a/tools/tracing/rtla/tests/osnoise.t b/tools/tracing/rtla/tests/= osnoise.t index 86596e547893..e5995c03c790 100644 --- a/tools/tracing/rtla/tests/osnoise.t +++ b/tools/tracing/rtla/tests/osnoise.t @@ -16,4 +16,10 @@ check "verify the --trace param" \ check "verify the --entries/-E param" \ "osnoise hist -P F:1 -c 0 -r 900000 -d 1M -b 10 -E 25" =20 +# Test setting default period by putting an absurdly high period +# and stopping on threshold. +# If default period is not set, this will time out. +check_with_osnoise_options "apply default period" \ + "osnoise hist -s 1" period_us=3D600000000 + test_end --=20 2.47.2 From nobody Thu Dec 18 04:50:49 2025 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 948931F4196 for ; Wed, 26 Mar 2025 14:55: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=1743000918; cv=none; b=VFagxnTTqw7oxdP1mmiXUShV72LZeLiGp+2pqu2oa1vRJSDKbJ/S+DDkIzVg+Vspe+eb37OWGrgOs0RuMMAA6MZlzCrDmEjrRfSo8Nqs3F9pGsP+Jo6mRGiO2iET1d9wDZtEfz90CV5FfdSqi9469gSGtHgRkl18CHPBB+OGfOg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743000918; c=relaxed/simple; bh=o6iNGj42Opmg2oegJQ1Tw7Jv8z8jcOYi8n6UQAgaqHs=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=btO36xdQKdmvBk5qBRiUhj10TBBI6JXBElM6D+nxcVIdVrtBaqY10y86d9Ucrc4G99qNDQOiJx/A1PwOgv+HfG1ht/XgjRKpG8HW9sSbOxjTqPE/l9XJ1hZa+nvk3SBtkfBngJxcW+7CgWQtRqYu/m+vGhgekH7WSNLFVgB2gTI= 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 7FA6CC4CEEB; Wed, 26 Mar 2025 14:55:18 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1txSAn-00000002kGa-1LK4; Wed, 26 Mar 2025 10:56:05 -0400 Message-ID: <20250326145605.168984535@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 26 Mar 2025 10:55:58 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , "Luis Claudio R . Goncalves" Subject: [for-next][PATCH 9/9] rtla: Add the ability to create ctags and etags References: <20250326145549.978154551@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: John Kacur - Add the ability to create and remove ctags and etags, using the following make tags make TAGS make tags_clean - fix a comment in Makefile.rtla with the correct spelling and don't imply that the ability to create an rtla tarball will be removed Cc: Tomas Glozar Cc: "Luis Claudio R . Goncalves" Link: https://lore.kernel.org/20250321175053.29048-1-jkacur@redhat.com Signed-off-by: John Kacur Signed-off-by: Steven Rostedt (Google) --- tools/tracing/rtla/Makefile.rtla | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tools/tracing/rtla/Makefile.rtla b/tools/tracing/rtla/Makefile= .rtla index cc1d6b615475..08c1b40883d3 100644 --- a/tools/tracing/rtla/Makefile.rtla +++ b/tools/tracing/rtla/Makefile.rtla @@ -34,6 +34,8 @@ INSTALL :=3D install MKDIR :=3D mkdir STRIP :=3D strip BINDIR :=3D /usr/bin +CTAGS :=3D ctags +ETAGS :=3D ctags -e =20 .PHONY: install install: doc_install @@ -47,6 +49,18 @@ install: doc_install @test ! -f $(DESTDIR)$(BINDIR)/timerlat || $(RM) $(DESTDIR)$(BINDIR)/time= rlat @$(LN) -s rtla $(DESTDIR)$(BINDIR)/timerlat =20 +.PHONY: tags +tags: + $(CTAGS) -R --extras=3D+f --c-kinds=3D+p src + +.PHONY: TAGS +TAGS: + $(ETAGS) -R --extras=3D+f --c-kinds=3D+p src + +.PHONY: tags_clean +tags_clean: + $(RM) tags TAGS + .PHONY: doc doc_clean doc_install doc: $(MAKE) -C $(DOCSRC) @@ -57,8 +71,7 @@ doc_clean: doc_install: $(MAKE) -C $(DOCSRC) install =20 -# This section is neesary for the tarball, when the tarball -# support is removed, we can delete these entries. +# This section is necessary to make the rtla tarball NAME :=3D rtla DIRS :=3D src FILES :=3D Makefile README.txt --=20 2.47.2