rtla improvements
Subsystems (2)
cover rtla improvements
This is a series of improvements for rtla, mainly as a result of our daily usage of the tool debugging problems at red hat.
The cgroup support and house keeping options are from our usage of the tool debugging containers.
The auto-analysis overhead reduction is needed when we go to large boxes - but it is really hand in practice, as it gives an idea of the problem without having to look at the trace.
Finally, running hwnoise 100 % of CPU time might cause some systems to slow down too much. Reduce its utilization to 75% by default to avoid problems for people using it for the first time.
Daniel Bristot de Oliveira (8):
rtla: Add -C cgroup support
rtla: Add --house-keeping option
rtla: Change monitored_cpus from char * to cpu_set_t
rtla: Automatically move rtla to a house-keeping cpu rtla/timerlat: Give timerlat auto analysis its own instance rtla/timerlat_hist: Add auto-analysis support
rtla: Start the tracers after creating all instances rtla/hwnoise: Reduce runtime to 75%
Documentation/tools/rtla/common_options.rst | 8 + .../tools/rtla/common_timerlat_aa.rst | 7 - .../tools/rtla/rtla-timerlat-hist.rst | 7 +- .../tools/rtla/rtla-timerlat-top.rst | 7 + tools/tracing/rtla/src/osnoise_hist.c | 90 +++++- tools/tracing/rtla/src/osnoise_top.c | 83 +++++- tools/tracing/rtla/src/timerlat_aa.c | 35 ++- tools/tracing/rtla/src/timerlat_aa.h | 5 +- tools/tracing/rtla/src/timerlat_hist.c | 139 +++++++-- tools/tracing/rtla/src/timerlat_top.c | 127 +++++++-- tools/tracing/rtla/src/utils.c | 266 ++++++++++++++++-- tools/tracing/rtla/src/utils.h | 5 + 12 files changed, 684 insertions(+), 95 deletions(-)
Signature · 1 line
2.38.1
PATCH 1/8 rtla: Add -C cgroup support
The -C option sets a cgroup to the tracer's threads. If the -C option is passed without arguments, the tracer's thread will inherit rtla's cgroup. Otherwise, the threads will be placed on the cgroup passed to the option.
--- Documentation/tools/rtla/common_options.rst | 4 + tools/tracing/rtla/src/osnoise_hist.c | 26 ++- tools/tracing/rtla/src/osnoise_top.c | 26 ++- tools/tracing/rtla/src/timerlat_hist.c | 27 ++- tools/tracing/rtla/src/timerlat_top.c | 26 ++- tools/tracing/rtla/src/utils.c | 185 ++++++++++++++++++++ tools/tracing/rtla/src/utils.h | 1 + 7 files changed, 286 insertions(+), 9 deletions(-)
Documentation/tools/rtla/common_options.rst +4 -0
@@ -42,6 +42,10 @@ - *f:prio* - use SCHED_FIFO with *prio*; - *d:runtime[us|ms|s]:period[us|ms|s]* - use SCHED_DEADLINE with *runtime* and *period* in nanoseconds. +**-C**, **--cgroup**\[*=cgroup*] + + Set a *cgroup* to the tracer's threads. If the **-C** option is passed without arguments, the tracer's thread will inherit **rtla**'s *cgroup*. Otherwise, the threads will be placed on the *cgroup* passed to the option. + **-h**, **--help** Print help menu.
tools/tracing/rtla/src/osnoise_hist.c +24 -2
@@ -19,6 +19,7 @@ struct osnoise_hist_params {char *cpus;char *monitored_cpus;char *trace_output; +char *cgroup_name;unsigned long long runtime;unsigned long long period;long long threshold;
@@ -28,6 +29,7 @@ struct osnoise_hist_params {int duration;int set_sched;int output_divisor; +int cgroup;struct sched_attr sched_param;struct trace_events *events;
@@ -433,7 +435,7 @@ static void osnoise_hist_usage(char *usage)" usage: rtla osnoise hist [-h] [-D] [-d s] [-a us] [-p us] [-r us] [-s us] [-S us] \\" ," [-T us] [-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] \\" ," [-c cpu-list] [-P priority] [-b N] [-E N] [--no-header] [--no-summary] [--no-index] \\" , -" [--with-zeros]" , +" [--with-zeros] [-C[=cgroup_name]]" ,"" ," -h/--help: print this menu" , " -a/--auto: set automatic trace mode, stopping the session if argument in us sample is hit",
@@ -443,6 +445,7 @@ static void osnoise_hist_usage(char *usage)" -S/--stop-total us: stop trace if the total sample is higher than the argument in us" ," -T/--threshold us: the minimum delta to be considered a noise" ," -c/--cpus cpu-list: list of cpus to run osnoise threads" , +" -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[s|m|h|d]: duration of the session" ," -D/--debug: print debug info" , " -t/--trace[=file]: save the stopped trace to [file|osnoise_trace.txt]",
@@ -501,6 +504,7 @@ static struct osnoise_hist_params {"bucket-size", required_argument, 0, 'b'}, {"entries", required_argument, 0, 'E'}, {"cpus", required_argument, 0, 'c'}, + {"cgroup", optional_argument, 0, 'C'}, {"debug", no_argument, 0, 'D'}, {"duration", required_argument, 0, 'd'}, {"help", no_argument, 0, 'h'},
@@ -524,7 +528,7 @@ static struct osnoise_hist_params/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:b:d:e:E:Dhp:P:r:s:S:t::T:01234:5:" , + c =getopt_long (argc, argv,"a:c:C::b:d:e:E:Dhp:P:r:s:S:t::T:01234:5:" , long_options, &option_index);/* detect the end of the options. */
@@ -554,6 +558,16 @@ static struct osnoise_hist_paramsosnoise_hist_usage ("\nInvalid -c cpu list\n" ); params->cpus = optarg;break ; +case 'C' : + params->cgroup =1 ; +if (!optarg) { +/* will inherit this cgroup */ + params->cgroup_name =NULL ; + }else if (*optarg =='=' ) { +/* skip the = */ + params->cgroup_name = ++optarg; + } +break ;case 'D' : config_debug =1 ;break ;
@@ -816,6 +830,14 @@ int osnoise_hist_main(int argc, char *argv[]) } } +if (params->cgroup) { + retval =set_comm_cgroup ("timerlat/" , params->cgroup_name); +if (!retval) { +err_msg ("Failed to move threads to cgroup\n" ); + goto out_free; + } + } +trace_instance_start (trace);if (params->trace_output) {
tools/tracing/rtla/src/osnoise_top.c +24 -2
@@ -26,6 +26,7 @@ struct osnoise_top_params {char *cpus;char *monitored_cpus;char *trace_output; +char *cgroup_name;unsigned long long runtime;unsigned long long period;long long threshold;
@@ -35,6 +36,7 @@ struct osnoise_top_params {int duration;int quiet;int set_sched; +int cgroup;struct sched_attr sched_param;struct trace_events *events;enum osnoise_mode mode;
@@ -276,7 +278,7 @@ static void osnoise_top_usage(struct osnoise_top_params *params, char *usage)static const char *const msg[] = {" [-h] [-q] [-D] [-d s] [-a us] [-p us] [-r us] [-s us] [-S us] \\" ," [-T us] [-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] \\" , -" [-c cpu-list] [-P priority]" , +" [-c cpu-list] [-P priority] [-C[=cgroup_name]]" ,"" ," -h/--help: print this menu" ," -a/--auto: set automatic trace mode, stopping the session if argument in us sample is hit" ,
@@ -286,6 +288,7 @@ static void osnoise_top_usage(struct osnoise_top_params *params, char *usage)" -S/--stop-total us: stop trace if the total sample is higher than the argument in us" ," -T/--threshold us: the minimum delta to be considered a noise" ," -c/--cpus cpu-list: list of cpus to run osnoise threads" , +" -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[s|m|h|d]: duration of the session" ," -D/--debug: print debug info" , " -t/--trace[=file]: save the stopped trace to [file|osnoise_trace.txt]",
@@ -347,6 +350,7 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)static struct option long_options[] = { {"auto" , required_argument,0 ,'a' }, {"cpus" , required_argument,0 ,'c' }, + {"cgroup" , optional_argument,0 ,'C' }, {"debug" , no_argument,0 ,'D' }, {"duration" , required_argument,0 ,'d' }, {"event" , required_argument,0 ,'e' },
@@ -367,7 +371,7 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:d:De:hp:P:qr:s:S:t::T:0:1:" , + c =getopt_long (argc, argv,"a:c:C::d:De:hp:P:qr:s:S:t::T:0:1:" , long_options, &option_index);/* Detect the end of the options. */
@@ -392,6 +396,16 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)osnoise_top_usage (params,"\nInvalid -c cpu list\n" ); params->cpus = optarg;break ; +case 'C' : + params->cgroup =1 ; +if (!optarg) { +/* will inherit this cgroup */ + params->cgroup_name =NULL ; + }else if (*optarg =='=' ) { +/* skip the = */ + params->cgroup_name = ++optarg; + } +break ;case 'D' : config_debug =1 ;break ;
@@ -643,6 +657,14 @@ int osnoise_top_main(int argc, char **argv) } } +if (params->cgroup) { + retval =set_comm_cgroup ("osnoise/" , params->cgroup_name); +if (!retval) { +err_msg ("Failed to move threads to cgroup\n" ); + goto out_free; + } + } +trace_instance_start (trace);if (params->trace_output) {
tools/tracing/rtla/src/timerlat_hist.c +24 -3
@@ -19,6 +19,7 @@ struct timerlat_hist_params {char *cpus;char *monitored_cpus;char *trace_output; +char *cgroup_name;unsigned long long runtime;long long stop_us;long long stop_total_us;
@@ -29,9 +30,9 @@ struct timerlat_hist_params {int duration;int set_sched;int dma_latency; +int cgroup;struct sched_attr sched_param;struct trace_events *events; -char no_irq;char no_thread;char no_header;
@@ -433,7 +434,7 @@ static void timerlat_hist_usage(char *usage)" usage: [rtla] timerlat hist [-h] [-q] [-d s] [-D] [-n] [-a us] [-p us] [-i us] [-T us] [-s us] \\" ," [-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] [-c cpu-list] \\" ," [-P priority] [-E N] [-b N] [--no-irq] [--no-thread] [--no-header] [--no-summary] \\" , -" [--no-index] [--with-zeros] [--dma-latency us]" , +" [--no-index] [--with-zeros] [--dma-latency us] [-C[=cgroup_name]]" ,"" ," -h/--help: print this menu" , " -a/--auto: set automatic trace mode, stopping the session if argument in us latency is hit",
@@ -442,6 +443,7 @@ static void timerlat_hist_usage(char *usage)" -T/--thread us: stop trace if the thread latency is higher than the argument in us" ," -s/--stack us: save the stack trace at the IRQ if a thread latency is higher than the argument in us" ," -c/--cpus cpus: run the tracer only on the given cpus" , +" -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[m|h|d]: duration of the session in seconds" ," -D/--debug: print debug info" , " -t/--trace[=file]: save the stopped trace to [file|timerlat_trace.txt]",
@@ -506,6 +508,7 @@ static struct timerlat_hist_paramsstatic struct option long_options[] = { {"auto" , required_argument,0 ,'a' }, {"cpus" , required_argument,0 ,'c' }, + {"cgroup" , optional_argument,0 ,'C' }, {"bucket-size" , required_argument,0 ,'b' }, {"debug" , no_argument,0 ,'D' }, {"entries" , required_argument,0 ,'E' },
@@ -534,7 +537,7 @@ static struct timerlat_hist_params/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:b:d:e:E:Dhi:np:P:s:t::T:0123456:7:8:" , + c =getopt_long (argc, argv,"a:c:C::b:d:e:E:Dhi:np:P:s:t::T:0123456:7:8:" , long_options, &option_index);/* detect the end of the options. */
@@ -561,6 +564,16 @@ static struct timerlat_hist_paramstimerlat_hist_usage ("\nInvalid -c cpu list\n" ); params->cpus = optarg;break ; +case 'C' : + params->cgroup =1 ; +if (!optarg) { +/* will inherit this cgroup */ + params->cgroup_name =NULL ; + }else if (*optarg =='=' ) { +/* skip the = */ + params->cgroup_name = ++optarg; + } +break ;case 'b' : params->bucket_size =get_llong_from_str (optarg);if ((params->bucket_size ==0 ) || (params->bucket_size >=1000000 ))
@@ -840,6 +853,14 @@ int timerlat_hist_main(int argc, char *argv[]) } } +if (params->cgroup) { + retval =set_comm_cgroup ("timerlat/" , params->cgroup_name); +if (!retval) { +err_msg ("Failed to move threads to cgroup\n" ); + goto out_free; + } + } +if (params->dma_latency >=0 ) { dma_latency_fd =set_cpu_dma_latency (params->dma_latency);if (dma_latency_fd <0 ) {
tools/tracing/rtla/src/timerlat_top.c +24 -2
@@ -21,6 +21,7 @@ struct timerlat_top_params {char *cpus;char *monitored_cpus;char *trace_output; +char *cgroup_name;unsigned long long runtime;long long stop_us;long long stop_total_us;
@@ -35,6 +36,7 @@ struct timerlat_top_params {int no_aa;int aa_only;int dump_tasks; +int cgroup;struct sched_attr sched_param;struct trace_events *events; };
@@ -285,7 +287,7 @@ static void timerlat_top_usage(char *usage)"" ," usage: rtla timerlat [top] [-h] [-q] [-a us] [-d s] [-D] [-n] [-p us] [-i us] [-T us] [-s us] \\" ," [[-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] [-c cpu-list] \\" , -" [-P priority] [--dma-latency us] [--aa-only us]" , +" [-P priority] [--dma-latency us] [--aa-only us] [-C[=cgroup_name]]" ,"" ," -h/--help: print this menu" , " -a/--auto: set automatic trace mode, stopping the session if argument in us latency is hit",
@@ -295,6 +297,7 @@ static void timerlat_top_usage(char *usage)" -T/--thread us: stop trace if the thread latency is higher than the argument in us" ," -s/--stack us: save the stack trace at the IRQ if a thread latency is higher than the argument in us" ," -c/--cpus cpus: run the tracer only on the given cpus" , +" -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[m|h|d]: duration of the session in seconds" ," -D/--debug: print debug info" , " --dump-tasks: prints the task running on all CPUs if stop conditions are met (depends on !--no-aa)",
@@ -352,6 +355,7 @@ static struct timerlat_top_paramsstatic struct option long_options[] = { {"auto" , required_argument,0 ,'a' }, {"cpus" , required_argument,0 ,'c' }, + {"cgroup" , optional_argument,0 ,'C' }, {"debug" , no_argument,0 ,'D' }, {"duration" , required_argument,0 ,'d' }, {"event" , required_argument,0 ,'e' },
@@ -376,7 +380,7 @@ static struct timerlat_top_params/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:d:De:hi:np:P:qs:t::T:0:1:2:345:" , + c =getopt_long (argc, argv,"a:c:C::d:De:hi:np:P:qs:t::T:0:1:2:345:" , long_options, &option_index);/* detect the end of the options. */
@@ -417,6 +421,16 @@ static struct timerlat_top_paramstimerlat_top_usage ("\nInvalid -c cpu list\n" ); params->cpus = optarg;break ; +case 'C' : + params->cgroup =1 ; +if (!optarg) { +/* will inherit this cgroup */ + params->cgroup_name =NULL ; + }else if (*optarg =='=' ) { +/* skip the = */ + params->cgroup_name = ++optarg; + } +break ;case 'D' : config_debug =1 ;break ;
@@ -694,6 +708,14 @@ int timerlat_top_main(int argc, char *argv[]) } } +if (params->cgroup) { + retval =set_comm_cgroup ("timerlat/" , params->cgroup_name); +if (!retval) { +err_msg ("Failed to move threads to cgroup\n" ); + goto out_free; + } + } +if (params->dma_latency >=0 ) { dma_latency_fd =set_cpu_dma_latency (params->dma_latency);if (dma_latency_fd <0 ) {
tools/tracing/rtla/src/utils.c +185 -0
188 lines not on this page · raw message
tools/tracing/rtla/src/utils.h +1 -0
@@ -55,6 +55,7 @@ struct sched_attr {int parse_prio (char *arg,struct sched_attr *sched_param);int set_comm_sched_attr (const char *comm_prefix,struct sched_attr *attr); +int set_comm_cgroup (const char *comm_prefix,const char *cgroup);int set_cpu_dma_latency (int32_t latency);#define ns_to_usf (x) (((double)x/1000))
Signature · 1 line
2.38.1
PATCH 2/8 rtla: Add --house-keeping option
In reply to Daniel Bristot de OliveiraTo avoid having rtla interfering with the measurement threads, add an option for the user to set the CPUs in which rtla should run. For instance:
# rtla timerlat top -H 0 -C 1-7
Will place rtla in the CPU 0, while running the measurement threads in the CPU 1-7.
--- Documentation/tools/rtla/common_options.rst | 4 ++ tools/tracing/rtla/src/osnoise_hist.c | 29 +++++++++-- tools/tracing/rtla/src/osnoise_top.c | 27 +++++++++- tools/tracing/rtla/src/timerlat_hist.c | 27 +++++++++- tools/tracing/rtla/src/timerlat_top.c | 27 +++++++++- tools/tracing/rtla/src/utils.c | 58 +++++++++++++++++++++ tools/tracing/rtla/src/utils.h | 3 ++ 7 files changed, 166 insertions(+), 9 deletions(-)
Documentation/tools/rtla/common_options.rst +4 -0
@@ -2,6 +2,10 @@ Set the osnoise tracer to run the sample threads in the cpu-list. +**-H**, **--house-keeping** *cpu-list* + + Run rtla control threads only on the given cpu-list. + **-d**, **--duration** *time[s|m|h|d]* Set the duration of the session.
tools/tracing/rtla/src/osnoise_hist.c +26 -3
@@ -3,6 +3,7 @@* Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <[email protected]> */ +#define _GNU_SOURCE#include <getopt.h> #include <stdlib.h> #include <string.h>
@@ -11,6 +12,7 @@#include <errno.h> #include <stdio.h> #include <time.h> +#include <sched.h> #include "utils.h" #include "osnoise.h"
@@ -30,6 +32,8 @@ struct osnoise_hist_params {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;
@@ -434,8 +438,8 @@ static void osnoise_hist_usage(char *usage)"" ," usage: rtla osnoise hist [-h] [-D] [-d s] [-a us] [-p us] [-r us] [-s us] [-S us] \\" ," [-T us] [-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] \\" , -" [-c cpu-list] [-P priority] [-b N] [-E N] [--no-header] [--no-summary] [--no-index] \\" , -" [--with-zeros] [-C[=cgroup_name]]" , +" [-c cpu-list] [-H cpu-list] [-P priority] [-b N] [-E N] [--no-header] [--no-summary] \\" , +" [--no-index] [--with-zeros] [-C[=cgroup_name]]" ,"" ," -h/--help: print this menu" , " -a/--auto: set automatic trace mode, stopping the session if argument in us sample is hit",
@@ -445,6 +449,7 @@ static void osnoise_hist_usage(char *usage)" -S/--stop-total us: stop trace if the total sample is higher than the argument in us" ," -T/--threshold us: the minimum delta to be considered a noise" ," -c/--cpus cpu-list: list of cpus to run osnoise threads" , +" -H/--house-keeping cpus: run rtla control threads only on the given cpus" ," -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[s|m|h|d]: duration of the session" , " -D/--debug: print debug info",
@@ -507,6 +512,7 @@ static struct osnoise_hist_params {"cgroup", optional_argument, 0, 'C'}, {"debug", no_argument, 0, 'D'}, {"duration", required_argument, 0, 'd'}, + {"house-keeping", required_argument, 0, 'H'}, {"help", no_argument, 0, 'h'}, {"period", required_argument, 0, 'p'}, {"priority", required_argument, 0, 'P'},
@@ -528,7 +534,7 @@ static struct osnoise_hist_params/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:C::b:d:e:E:Dhp:P:r:s:S:t::T:01234:5:" , + c =getopt_long (argc, argv,"a:c:C::b:d:e:E:DhH:p:P:r:s:S:t::T:01234:5:" , long_options, &option_index);/* detect the end of the options. */
@@ -597,6 +603,14 @@ static struct osnoise_hist_paramscase '?' :osnoise_hist_usage (NULL );break ; +case 'H' : + params->hk_cpus =1 ; + retval =parse_cpu_set (optarg, ¶ms->hk_cpu_set); +if (retval) { +err_msg ("Error parsing house keeping CPUs\n" ); +exit (EXIT_FAILURE ); + } +break ;case 'p' : params->period =get_llong_from_str (optarg);if (params->period >10000000 )
@@ -732,6 +746,15 @@ osnoise_hist_apply_config(struct osnoise_tool *tool, struct osnoise_hist_params } } +if (params->hk_cpus) { + retval =sched_setaffinity (getpid (),sizeof (params->hk_cpu_set), + ¶ms->hk_cpu_set); +if (retval ==-1 ) { +err_msg ("Failed to set rtla to the house keeping CPUs\n" ); + goto out_err; + } + } +return 0 ; out_err:
tools/tracing/rtla/src/osnoise_top.c +25 -2
@@ -3,6 +3,7 @@* Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <[email protected]> */ +#define _GNU_SOURCE#include <getopt.h> #include <stdlib.h> #include <string.h>
@@ -10,6 +11,7 @@#include <unistd.h> #include <stdio.h> #include <time.h> +#include <sched.h> #include "osnoise.h" #include "utils.h"
@@ -37,6 +39,8 @@ struct osnoise_top_params {int quiet;int set_sched;int cgroup; +int hk_cpus; +cpu_set_t hk_cpu_set;struct sched_attr sched_param;struct trace_events *events;enum osnoise_mode mode;
@@ -278,7 +282,7 @@ static void osnoise_top_usage(struct osnoise_top_params *params, char *usage)static const char *const msg[] = {" [-h] [-q] [-D] [-d s] [-a us] [-p us] [-r us] [-s us] [-S us] \\" ," [-T us] [-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] \\" , -" [-c cpu-list] [-P priority] [-C[=cgroup_name]]" , +" [-c cpu-list] [-H cpu-list] [-P priority] [-C[=cgroup_name]]" ,"" ," -h/--help: print this menu" ," -a/--auto: set automatic trace mode, stopping the session if argument in us sample is hit" ,
@@ -288,6 +292,7 @@ static void osnoise_top_usage(struct osnoise_top_params *params, char *usage)" -S/--stop-total us: stop trace if the total sample is higher than the argument in us" ," -T/--threshold us: the minimum delta to be considered a noise" ," -c/--cpus cpu-list: list of cpus to run osnoise threads" , +" -H/--house-keeping cpus: run rtla control threads only on the given cpus" ," -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[s|m|h|d]: duration of the session" , " -D/--debug: print debug info",
@@ -354,6 +359,7 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv) {"debug", no_argument, 0, 'D'}, {"duration", required_argument, 0, 'd'}, {"event", required_argument, 0, 'e'}, + {"house-keeping", required_argument, 0, 'H'}, {"help", no_argument, 0, 'h'}, {"period", required_argument, 0, 'p'}, {"priority", required_argument, 0, 'P'},
@@ -371,7 +377,7 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:C::d:De:hp:P:qr:s:S:t::T:0:1:" , + c =getopt_long (argc, argv,"a:c:C::d:De:hH:p:P:qr:s:S:t::T:0:1:" , long_options, &option_index);/* Detect the end of the options. */
@@ -430,6 +436,14 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)case '?' :osnoise_top_usage (params,NULL );break ; +case 'H' : + params->hk_cpus =1 ; + retval =parse_cpu_set (optarg, ¶ms->hk_cpu_set); +if (retval) { +err_msg ("Error parsing house keeping CPUs\n" ); +exit (EXIT_FAILURE ); + } +break ;case 'p' : params->period =get_llong_from_str (optarg);if (params->period >10000000 )
@@ -561,6 +575,15 @@ osnoise_top_apply_config(struct osnoise_tool *tool, struct osnoise_top_params *p } } +if (params->hk_cpus) { + retval =sched_setaffinity (getpid (),sizeof (params->hk_cpu_set), + ¶ms->hk_cpu_set); +if (retval ==-1 ) { +err_msg ("Failed to set rtla to the house keeping CPUs\n" ); + goto out_err; + } + } +return 0 ; out_err:
tools/tracing/rtla/src/timerlat_hist.c +25 -2
@@ -3,6 +3,7 @@* Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <[email protected]> */ +#define _GNU_SOURCE#include <getopt.h> #include <stdlib.h> #include <string.h>
@@ -10,6 +11,7 @@#include <unistd.h> #include <stdio.h> #include <time.h> +#include <sched.h> #include "utils.h" #include "osnoise.h"
@@ -31,6 +33,8 @@ struct timerlat_hist_params {int set_sched;int dma_latency;int cgroup; +int hk_cpus; +cpu_set_t hk_cpu_set;struct sched_attr sched_param;struct trace_events *events;char no_irq;
@@ -432,7 +436,7 @@ static void timerlat_hist_usage(char *usage)char *msg[] = {"" ," usage: [rtla] timerlat hist [-h] [-q] [-d s] [-D] [-n] [-a us] [-p us] [-i us] [-T us] [-s us] \\" , -" [-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] [-c cpu-list] \\" , +" [-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] [-c cpu-list] [-H cpu-list]\\" ," [-P priority] [-E N] [-b N] [--no-irq] [--no-thread] [--no-header] [--no-summary] \\" ," [--no-index] [--with-zeros] [--dma-latency us] [-C[=cgroup_name]]" ,"" ,
@@ -443,6 +447,7 @@ static void timerlat_hist_usage(char *usage)" -T/--thread us: stop trace if the thread latency is higher than the argument in us" ," -s/--stack us: save the stack trace at the IRQ if a thread latency is higher than the argument in us" ," -c/--cpus cpus: run the tracer only on the given cpus" , +" -H/--house-keeping cpus: run rtla control threads only on the given cpus" ," -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[m|h|d]: duration of the session in seconds" , " -D/--debug: print debug info",
@@ -513,6 +518,7 @@ static struct timerlat_hist_params {"debug", no_argument, 0, 'D'}, {"entries", required_argument, 0, 'E'}, {"duration", required_argument, 0, 'd'}, + {"house-keeping", required_argument, 0, 'H'}, {"help", no_argument, 0, 'h'}, {"irq", required_argument, 0, 'i'}, {"nano", no_argument, 0, 'n'},
@@ -537,7 +543,7 @@ static struct timerlat_hist_params/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:C::b:d:e:E:Dhi:np:P:s:t::T:0123456:7:8:" , + c =getopt_long (argc, argv,"a:c:C::b:d:e:E:DhH:i:np:P:s:t::T:0123456:7:8:" , long_options, &option_index);/* detect the end of the options. */
@@ -608,6 +614,14 @@ static struct timerlat_hist_paramscase '?' :timerlat_hist_usage (NULL );break ; +case 'H' : + params->hk_cpus =1 ; + retval =parse_cpu_set (optarg, ¶ms->hk_cpu_set); +if (retval) { +err_msg ("Error parsing house keeping CPUs\n" ); +exit (EXIT_FAILURE ); + } +break ;case 'i' : params->stop_us =get_llong_from_str (optarg);break ;
@@ -755,6 +769,15 @@ timerlat_hist_apply_config(struct osnoise_tool *tool, struct timerlat_hist_param } } +if (params->hk_cpus) { + retval =sched_setaffinity (getpid (),sizeof (params->hk_cpu_set), + ¶ms->hk_cpu_set); +if (retval ==-1 ) { +err_msg ("Failed to set rtla to the house keeping CPUs\n" ); + goto out_err; + } + } +return 0 ; out_err:
tools/tracing/rtla/src/timerlat_top.c +25 -2
@@ -3,6 +3,7 @@* Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <[email protected]> */ +#define _GNU_SOURCE#include <getopt.h> #include <stdlib.h> #include <string.h>
@@ -11,6 +12,7 @@#include <stdio.h> #include <time.h> #include <errno.h> +#include <sched.h> #include "utils.h" #include "osnoise.h"
@@ -37,6 +39,8 @@ struct timerlat_top_params {int aa_only;int dump_tasks;int cgroup; +int hk_cpus; +cpu_set_t hk_cpu_set;struct sched_attr sched_param;struct trace_events *events; };
@@ -286,7 +290,7 @@ static void timerlat_top_usage(char *usage)static const char *const msg[] = {"" ," usage: rtla timerlat [top] [-h] [-q] [-a us] [-d s] [-D] [-n] [-p us] [-i us] [-T us] [-s us] \\" , -" [[-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] [-c cpu-list] \\" , +" [[-t[=file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] [-c cpu-list] [-H cpu-list]\\" ," [-P priority] [--dma-latency us] [--aa-only us] [-C[=cgroup_name]]" ,"" ," -h/--help: print this menu" ,
@@ -297,6 +301,7 @@ static void timerlat_top_usage(char *usage)" -T/--thread us: stop trace if the thread latency is higher than the argument in us" ," -s/--stack us: save the stack trace at the IRQ if a thread latency is higher than the argument in us" ," -c/--cpus cpus: run the tracer only on the given cpus" , +" -H/--house-keeping cpus: run rtla control threads only on the given cpus" ," -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be inherited" ," -d/--duration time[m|h|d]: duration of the session in seconds" , " -D/--debug: print debug info",
@@ -360,6 +365,7 @@ static struct timerlat_top_params {"duration", required_argument, 0, 'd'}, {"event", required_argument, 0, 'e'}, {"help", no_argument, 0, 'h'}, + {"house-keeping", required_argument, 0, 'H'}, {"irq", required_argument, 0, 'i'}, {"nano", no_argument, 0, 'n'}, {"period", required_argument, 0, 'p'},
@@ -380,7 +386,7 @@ static struct timerlat_top_params/* getopt_long stores the option index here. */ int option_index =0 ; - c =getopt_long (argc, argv,"a:c:C::d:De:hi:np:P:qs:t::T:0:1:2:345:" , + c =getopt_long (argc, argv,"a:c:C::d:De:hH:i:np:P:qs:t::T:0:1:2:345:" , long_options, &option_index);/* detect the end of the options. */
@@ -454,6 +460,14 @@ static struct timerlat_top_paramscase '?' :timerlat_top_usage (NULL );break ; +case 'H' : + params->hk_cpus =1 ; + retval =parse_cpu_set (optarg, ¶ms->hk_cpu_set); +if (retval) { +err_msg ("Error parsing house keeping CPUs\n" ); +exit (EXIT_FAILURE ); + } +break ;case 'i' : params->stop_us =get_llong_from_str (optarg);break ;
@@ -598,6 +612,15 @@ timerlat_top_apply_config(struct osnoise_tool *top, struct timerlat_top_params * } } +if (params->hk_cpus) { + retval =sched_setaffinity (getpid (),sizeof (params->hk_cpu_set), + ¶ms->hk_cpu_set); +if (retval ==-1 ) { +err_msg ("Failed to set rtla to the house keeping CPUs\n" ); + goto out_err; + } + } +return 0 ; out_err:
tools/tracing/rtla/src/utils.c +58 -0
70 lines not on this page · raw message
tools/tracing/rtla/src/utils.h +3 -0
@@ -1,6 +1,8 @@// SPDX-License-Identifier: GPL-2.0 +#include <stdint.h> #include <time.h> +#include <sched.h> /* * '18446744073709551615\0'
@@ -54,6 +56,7 @@ struct sched_attr { };int parse_prio (char *arg,struct sched_attr *sched_param); +int parse_cpu_set (char *cpu_list,cpu_set_t *set);int set_comm_sched_attr (const char *comm_prefix,struct sched_attr *attr);int set_comm_cgroup (const char *comm_prefix,const char *cgroup);int set_cpu_dma_latency (int32_t latency);
Signature · 1 line
2.38.1
PATCH 3/8 rtla: Change monitored_cpus from char * to cpu_set_t
In reply to Daniel Bristot de OliveiraUse a cpumask instead of a char *, reducing memory footprint and code.
No functional change, and in preparation for auto house-keeping.
--- tools/tracing/rtla/src/osnoise_hist.c | 18 ++++---- tools/tracing/rtla/src/osnoise_top.c | 6 +-- tools/tracing/rtla/src/timerlat_hist.c | 18 ++++---- tools/tracing/rtla/src/timerlat_top.c | 6 +-- tools/tracing/rtla/src/utils.c | 63 -------------------------- 5 files changed, 24 insertions(+), 87 deletions(-)
tools/tracing/rtla/src/osnoise_hist.c +9 -9
@@ -19,7 +19,7 @@struct osnoise_hist_params {char *cpus; -char *monitored_cpus; +cpu_set_t monitored_cpus;char *trace_output;char *cgroup_name;unsigned long long runtime;
@@ -274,7 +274,7 @@ static void osnoise_hist_header(struct osnoise_tool *tool)trace_seq_printf (s,"Index" );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].count)
@@ -305,7 +305,7 @@ osnoise_print_summary(struct osnoise_hist_params *params,trace_seq_printf (trace->seq,"count:" );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].count)
@@ -319,7 +319,7 @@ osnoise_print_summary(struct osnoise_hist_params *params,trace_seq_printf (trace->seq,"min: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].count)
@@ -334,7 +334,7 @@ osnoise_print_summary(struct osnoise_hist_params *params,trace_seq_printf (trace->seq,"avg: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].count)
@@ -352,7 +352,7 @@ osnoise_print_summary(struct osnoise_hist_params *params,trace_seq_printf (trace->seq,"max: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].count)
@@ -387,7 +387,7 @@ osnoise_print_stats(struct osnoise_hist_params *params, struct osnoise_tool *too bucket * data->bucket_size);for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].count)
@@ -411,7 +411,7 @@ osnoise_print_stats(struct osnoise_hist_params *params, struct osnoise_tool *tootrace_seq_printf (trace->seq,"over: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].count)
@@ -559,7 +559,7 @@ static struct osnoise_hist_paramsosnoise_hist_usage ("Bucket size needs to be > 0 and <= 1000000\n" );break ;case 'c' : - retval =parse_cpu_list (optarg, ¶ms->monitored_cpus); + retval =parse_cpu_set (optarg, ¶ms->monitored_cpus);if (retval)osnoise_hist_usage ("\nInvalid -c cpu list\n" ); params->cpus = optarg;
tools/tracing/rtla/src/osnoise_top.c +3 -3
@@ -26,7 +26,7 @@ enum osnoise_mode {*/ struct osnoise_top_params {char *cpus; -char *monitored_cpus; +cpu_set_t monitored_cpus;char *trace_output;char *cgroup_name;unsigned long long runtime;
@@ -263,7 +263,7 @@ osnoise_print_stats(struct osnoise_top_params *params, struct osnoise_tool *top)osnoise_top_header (top);for (i =0 ; i < nr_cpus; i++) { -if (params->cpus && !params->monitored_cpus[i]) +if (params->cpus && !CPU_ISSET (i, ¶ms->monitored_cpus))continue ;osnoise_top_print (top, i); }
@@ -397,7 +397,7 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)break ;case 'c' : - retval =parse_cpu_list (optarg, ¶ms->monitored_cpus); + retval =parse_cpu_set (optarg, ¶ms->monitored_cpus);if (retval)osnoise_top_usage (params,"\nInvalid -c cpu list\n" ); params->cpus = optarg;
tools/tracing/rtla/src/timerlat_hist.c +9 -9
@@ -19,7 +19,7 @@struct timerlat_hist_params {char *cpus; -char *monitored_cpus; +cpu_set_t monitored_cpus;char *trace_output;char *cgroup_name;unsigned long long runtime;
@@ -227,7 +227,7 @@ static void timerlat_hist_header(struct osnoise_tool *tool)trace_seq_printf (s,"Index" );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
@@ -263,7 +263,7 @@ timerlat_print_summary(struct timerlat_hist_params *params,trace_seq_printf (trace->seq,"count:" );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
@@ -283,7 +283,7 @@ timerlat_print_summary(struct timerlat_hist_params *params,trace_seq_printf (trace->seq,"min: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
@@ -303,7 +303,7 @@ timerlat_print_summary(struct timerlat_hist_params *params,trace_seq_printf (trace->seq,"avg: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
@@ -331,7 +331,7 @@ timerlat_print_summary(struct timerlat_hist_params *params,trace_seq_printf (trace->seq,"max: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
@@ -371,7 +371,7 @@ timerlat_print_stats(struct timerlat_hist_params *params, struct osnoise_tool *t bucket * data->bucket_size);for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
@@ -405,7 +405,7 @@ timerlat_print_stats(struct timerlat_hist_params *params, struct osnoise_tool *ttrace_seq_printf (trace->seq,"over: " );for (cpu =0 ; cpu < data->nr_cpus; cpu++) { -if (params->cpus && !params->monitored_cpus[cpu]) +if (params->cpus && !CPU_ISSET (cpu, ¶ms->monitored_cpus))continue ;if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
@@ -565,7 +565,7 @@ static struct timerlat_hist_paramsbreak ;case 'c' : - retval =parse_cpu_list (optarg, ¶ms->monitored_cpus); + retval =parse_cpu_set (optarg, ¶ms->monitored_cpus);if (retval)timerlat_hist_usage ("\nInvalid -c cpu list\n" ); params->cpus = optarg;
tools/tracing/rtla/src/timerlat_top.c +3 -3
@@ -21,7 +21,7 @@struct timerlat_top_params {char *cpus; -char *monitored_cpus; +cpu_set_t monitored_cpus;char *trace_output;char *cgroup_name;unsigned long long runtime;
@@ -271,7 +271,7 @@ timerlat_print_stats(struct timerlat_top_params *params, struct osnoise_tool *totimerlat_top_header (top);for (i =0 ; i < nr_cpus; i++) { -if (params->cpus && !params->monitored_cpus[i]) +if (params->cpus && !CPU_ISSET (i, ¶ms->monitored_cpus))continue ;timerlat_top_print (top, i); }
@@ -422,7 +422,7 @@ static struct timerlat_top_params params->aa_only =1 ;break ;case 'c' : - retval =parse_cpu_list (optarg, ¶ms->monitored_cpus); + retval =parse_cpu_set (optarg, ¶ms->monitored_cpus);if (retval)timerlat_top_usage ("\nInvalid -c cpu list\n" ); params->cpus = optarg;
tools/tracing/rtla/src/utils.c +0 -63
69 lines not on this page · raw message
Signature · 1 line
2.38.1
PATCH 4/8 rtla: Automatically move rtla to a house-keeping cpu
In reply to Daniel Bristot de OliveiraWhen the user sets -c <cpu-list> try to move rtla out of the <cpu-list>, even without an -H option. This is useful to avoid having rtla interfering with the workload.
This works by removing <cpu-list> from rtla's current affinity.
If rtla fails to move itself away it is not that of a problem as this is an automatic measure.
--- tools/tracing/rtla/src/osnoise_hist.c | 9 +++++ tools/tracing/rtla/src/osnoise_top.c | 9 +++++ tools/tracing/rtla/src/timerlat_hist.c | 9 +++++ tools/tracing/rtla/src/timerlat_top.c | 9 +++++ tools/tracing/rtla/src/utils.c | 50 ++++++++++++++++++++++++++ tools/tracing/rtla/src/utils.h | 1 + 6 files changed, 87 insertions(+)
tools/tracing/rtla/src/osnoise_hist.c +9 -0
@@ -753,6 +753,15 @@ osnoise_hist_apply_config(struct osnoise_tool *tool, struct osnoise_hist_paramserr_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 ;
tools/tracing/rtla/src/osnoise_top.c +9 -0
@@ -582,6 +582,15 @@ osnoise_top_apply_config(struct osnoise_tool *tool, struct osnoise_top_params *perr_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 ;
tools/tracing/rtla/src/timerlat_hist.c +9 -0
@@ -776,6 +776,15 @@ timerlat_hist_apply_config(struct osnoise_tool *tool, struct timerlat_hist_paramerr_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 ;
tools/tracing/rtla/src/timerlat_top.c +9 -0
@@ -619,6 +619,15 @@ timerlat_top_apply_config(struct osnoise_tool *top, struct timerlat_top_params *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 ;
tools/tracing/rtla/src/utils.c +50 -0
53 lines not on this page · raw message
tools/tracing/rtla/src/utils.h +1 -0
@@ -60,6 +60,7 @@ int parse_cpu_set(char *cpu_list, cpu_set_t *set);int set_comm_sched_attr (const char *comm_prefix,struct sched_attr *attr);int set_comm_cgroup (const char *comm_prefix,const char *cgroup);int set_cpu_dma_latency (int32_t latency); +int auto_house_keeping (cpu_set_t *monitored_cpus);#define ns_to_usf (x) (((double)x/1000))#define ns_to_per (total, part) ((part * 100) / (double)total)
Signature · 1 line
2.38.1
PATCH 5/8 rtla/timerlat: Give timerlat auto-analysis its own instance
In reply to Daniel Bristot de OliveiraCurrently, the auto-analysis is attached to the timerlat top instance. The idea was to avoid creating another instance just for that, so one instance could be reused.
The drawback is that, by doing so, the auto-analysis run for the entire session, consuming CPU time. On my 24 box CPUs for timerlat with a 100 us period consumed 50 % with auto analysis, but only 16 % without.
By creating an instance for auto-analysis, we can keep the processing stopped until a stop tracing condition is hit. Once it happens, timerlat auto-analysis can use its own trace instance to parse only the end of the trace.
By doing so, auto-analysis stop consuming cpu time when it is not needed.
If the --aa-only is passed, the timerlat top instance is reused for auto analysis.
--- tools/tracing/rtla/src/timerlat_aa.c | 35 +++++++++++++++++-- tools/tracing/rtla/src/timerlat_aa.h | 5 +-- tools/tracing/rtla/src/timerlat_top.c | 48 ++++++++++++++++++--------- 3 files changed, 67 insertions(+), 21 deletions(-)
tools/tracing/rtla/src/timerlat_aa.c +33 -2
@@ -8,6 +8,7 @@#include "utils.h" #include "osnoise.h" #include "timerlat.h" +#include <unistd.h> enum timelat_state {TIMERLAT_INIT =0 ,
@@ -233,7 +234,7 @@ static int timerlat_aa_thread_latency(struct timerlat_aa_data *taa_data,* * Returns 0 on success, -1 otherwise. */ -int timerlat_aa_handler (struct trace_seq *s,struct tep_record *record, +static int timerlat_aa_handler (struct trace_seq *s,struct tep_record *record,struct tep_event *event,void *context) {struct timerlat_aa_context *taa_ctx =timerlat_aa_get_ctx ();
@@ -665,6 +666,25 @@ static void timerlat_thread_analysis(struct timerlat_aa_data *taa_data, int cpu, ns_to_usf(total)); } +static int timerlat_auto_analysis_collect_trace (struct timerlat_aa_context *taa_ctx) +{ +struct trace_instance *trace = &taa_ctx->tool->trace; +int retval; + + retval =tracefs_iterate_raw_events (trace->tep, + trace->inst, +NULL , +0 , + collect_registered_events, + trace); +if (retval <0 ) { +err_msg ("Error iterating on events\n" ); +return 0 ; + } + +return 1 ; +} +/** * timerlat_auto_analysis - Analyze the collected data */
@@ -677,6 +697,8 @@ void timerlat_auto_analysis(int irq_thresh, int thread_thresh)struct tep_handle *tep;int cpu; +timerlat_auto_analysis_collect_trace (taa_ctx); +/* bring stop tracing to the ns scale */ irq_thresh = irq_thresh *1000 ; thread_thresh = thread_thresh *1000 ;
@@ -838,6 +860,10 @@ static int timerlat_aa_init_seqs(struct timerlat_aa_context *taa_ctx)*/ static void timerlat_aa_unregister_events (struct osnoise_tool *tool,int dump_tasks) { + +tep_unregister_event_handler (tool->trace.tep,-1 ,"ftrace" ,"timerlat" , + timerlat_aa_handler, tool); +tracefs_event_disable (tool->trace.inst,"osnoise" ,NULL ); tep_unregister_event_handler(tool->trace.tep, -1, "osnoise", "nmi_noise",
@@ -875,6 +901,10 @@ static int timerlat_aa_register_events(struct osnoise_tool *tool, int dump_tasks {int retval; +tep_register_event_handler (tool->trace.tep,-1 ,"ftrace" ,"timerlat" , + timerlat_aa_handler, tool); + +/* * register auto-analysis handlers. */
@@ -955,8 +985,9 @@ void timerlat_aa_destroy(void)* * Returns 0 on success, -1 otherwise. */ -int timerlat_aa_init (struct osnoise_tool *tool,int nr_cpus,int dump_tasks) +int timerlat_aa_init (struct osnoise_tool *tool,int dump_tasks) { +int nr_cpus =sysconf (_SC_NPROCESSORS_CONF);struct timerlat_aa_context *taa_ctx;int retval;
tools/tracing/rtla/src/timerlat_aa.h +1 -4
@@ -3,10 +3,7 @@* Copyright (C) 2023 Red Hat Inc, Daniel Bristot de Oliveira <[email protected]> */ -int timerlat_aa_init (struct osnoise_tool *tool,int nr_cpus,int dump_task); +int timerlat_aa_init (struct osnoise_tool *tool,int dump_task);void timerlat_aa_destroy (void ); -int timerlat_aa_handler (struct trace_seq *s,struct tep_record *record, -struct tep_event *event,void *context); -void timerlat_auto_analysis (int irq_thresh,int thread_thresh);
tools/tracing/rtla/src/timerlat_top.c +33 -15
90 lines not on this page · raw message
Signature · 1 line
2.38.1
PATCH 6/8 rtla/timerlat_hist: Add auto-analysis support
In reply to Daniel Bristot de OliveiraAdd auto-analysis to timerlat hist, including the --no-aa option to reduce overhead and --dump-task. --aa-only was not added as it is already on timerlat top.
--- .../tools/rtla/common_timerlat_aa.rst | 7 --- .../tools/rtla/rtla-timerlat-hist.rst | 7 ++- .../tools/rtla/rtla-timerlat-top.rst | 7 +++ tools/tracing/rtla/src/timerlat_hist.c | 51 ++++++++++++++++++- 4 files changed, 61 insertions(+), 11 deletions(-)
Documentation/tools/rtla/common_timerlat_aa.rst +0 -7
@@ -5,10 +5,3 @@ **--no-aa** disable auto-analysis, reducing rtla timerlat cpu usage - -**--aa-only** *us* - - Set stop tracing conditions and run without collecting and displaying statistics. - Print the auto-analysis if the system hits the stop tracing condition. This option - is useful to reduce rtla timerlat CPU, enabling the debug without the overhead of - collecting the statistics.
Documentation/tools/rtla/rtla-timerlat-hist.rst +5 -2
@@ -29,15 +29,18 @@ OPTIONS .. include:: common_options.rst +.. include:: common_timerlat_aa.rst + EXAMPLE ======= In the example below, **rtla timerlat hist** is set to run for *10* minutes, in the cpus *0-4*, *skipping zero* only lines. Moreover, **rtla timerlat hist** will change the priority of the *timerlat* threads to run under *SCHED_DEADLINE* priority, with a *10us* runtime every *1ms* period. The -*1ms* period is also passed to the *timerlat* tracer:: +*1ms* period is also passed to the *timerlat* tracer. Auto-analysis is disabled +to reduce overhead :: - [root@alien ~]# timerlat hist -d 10m -c 0-4 -P d:100us:1ms -p 1ms + [root@alien ~]# timerlat hist -d 10m -c 0-4 -P d:100us:1ms -p 1ms --no-aa # RTLA timerlat histogram # Time unit is microseconds (us) # Duration: 0 00:10:00
Documentation/tools/rtla/rtla-timerlat-top.rst +7 -0
@@ -32,6 +32,13 @@ OPTIONS .. include:: common_timerlat_aa.rst +**--aa-only** *us* + + Set stop tracing conditions and run without collecting and displaying statistics. + Print the auto-analysis if the system hits the stop tracing condition. This option + is useful to reduce rtla timerlat CPU, enabling the debug without the overhead of + collecting the statistics. + EXAMPLE =======
tools/tracing/rtla/src/timerlat_hist.c +49 -2
141 lines not on this page · raw message
Signature · 1 line
2.38.1
PATCH 7/8 rtla: Start the tracers after creating all instances
In reply to Daniel Bristot de OliveiraGroup all start tracing after finishing creating all instances.
The tracing instance starts first for the case of hitting a stop tracing while enabling other instances. The trace instance is the one with most valuable information.
--- tools/tracing/rtla/src/osnoise_hist.c | 14 +++++++++++--- tools/tracing/rtla/src/osnoise_top.c | 13 ++++++++++--- tools/tracing/rtla/src/timerlat_hist.c | 17 ++++++++++++----- tools/tracing/rtla/src/timerlat_top.c | 19 +++++++++++++------ 4 files changed, 46 insertions(+), 17 deletions(-)
tools/tracing/rtla/src/osnoise_hist.c +11 -3
@@ -870,8 +870,6 @@ int osnoise_hist_main(int argc, char *argv[]) } } -trace_instance_start (trace); -if (params->trace_output) { record =osnoise_init_trace_tool ("osnoise" );if (!record) {
@@ -885,9 +883,19 @@ int osnoise_hist_main(int argc, char *argv[]) goto out_hist; } -trace_instance_start (&record->trace); } +/* +* Start the tracer here, after having set all instances. +* +* Let the trace instance start first for the case of hitting a stop +* tracing while enabling other instances. The trace instance is the +* one with most valuable information. +*/ +if (params->trace_output) +trace_instance_start (&record->trace); +trace_instance_start (trace); + tool->start_time =time (NULL );osnoise_hist_set_signals (params);
tools/tracing/rtla/src/osnoise_top.c +10 -3
@@ -697,8 +697,6 @@ int osnoise_top_main(int argc, char **argv) } } -trace_instance_start (trace); -if (params->trace_output) { record =osnoise_init_trace_tool ("osnoise" );if (!record) {
@@ -711,9 +709,18 @@ int osnoise_top_main(int argc, char **argv)if (retval) goto out_top; } + } +/* +* Start the tracer here, after having set all instances. +* +* Let the trace instance start first for the case of hitting a stop +* tracing while enabling other instances. The trace instance is the +* one with most valuable information. +*/ +if (params->trace_output)trace_instance_start (&record->trace); - } +trace_instance_start (trace); tool->start_time =time (NULL );osnoise_top_set_signals (params);
tools/tracing/rtla/src/timerlat_hist.c +12 -5
@@ -922,8 +922,6 @@ int timerlat_hist_main(int argc, char *argv[]) } } -trace_instance_start (trace); -if (params->trace_output) { record =osnoise_init_trace_tool ("timerlat" );if (!record) {
@@ -936,8 +934,6 @@ int timerlat_hist_main(int argc, char *argv[])if (retval) goto out_hist; } - -trace_instance_start (&record->trace); }if (!params->no_aa) {
@@ -956,9 +952,20 @@ int timerlat_hist_main(int argc, char *argv[])err_msg ("Failed to enable timerlat tracer\n" ); goto out_hist; } + } +/* +* Start the tracers here, after having set all instances. +* +* Let the trace instance start first for the case of hitting a stop +* tracing while enabling other instances. The trace instance is the +* one with most valuable information. +*/ +if (params->trace_output) +trace_instance_start (&record->trace); +if (!params->no_aa)trace_instance_start (&aa->trace); - } +trace_instance_start (trace); tool->start_time =time (NULL );timerlat_hist_set_signals (params);
tools/tracing/rtla/src/timerlat_top.c +13 -6
@@ -743,8 +743,6 @@ int timerlat_top_main(int argc, char *argv[]) } } -trace_instance_start (trace); -if (params->trace_output) { record =osnoise_init_trace_tool ("timerlat" );if (!record) {
@@ -757,8 +755,6 @@ int timerlat_top_main(int argc, char *argv[])if (retval) goto out_top; } - -trace_instance_start (&record->trace); }if (!params->no_aa) {
@@ -785,11 +781,22 @@ int timerlat_top_main(int argc, char *argv[])err_msg ("Failed to enable timerlat tracer\n" ); goto out_top; } - -trace_instance_start (&aa->trace); } } +/* +* Start the tracers here, after having set all instances. +* +* Let the trace instance start first for the case of hitting a stop +* tracing while enabling other instances. The trace instance is the +* one with most valuable information. +*/ +if (params->trace_output) +trace_instance_start (&record->trace); +if (!params->no_aa && aa != top) +trace_instance_start (&aa->trace); +trace_instance_start (trace); + top->start_time =time (NULL );timerlat_top_set_signals (params);
Signature · 1 line
2.38.1
0001-rtla-Add-C-cgroup-support.patch
In reply to Daniel Bristot de OliveiraResult: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 1/8] rtla: Add -C cgroup support
Date: Thu, 11 May 2023 20:02:53 +0200
Message-Id: <df9ab6da3d389ebc4e5049fd84079e801974a397.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Juri Lelli <[email protected]> from line 'Suggested-by: Juri Lelli <[email protected]>' (body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 2/8] rtla: Add --house-keeping option
Date: Thu, 11 May 2023 20:02:54 +0200
Message-Id: <9d24752f2af0cb5b6fe9893f236b576cedf31b62.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 3/8] rtla: Change monitored_cpus from char * to cpu_set_t
Date: Thu, 11 May 2023 20:02:55 +0200
Message-Id: <0b2e708c5951e5e3016b0a3838960066cfcea19d.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 4/8] rtla: Automatically move rtla to a house-keeping cpu
Date: Thu, 11 May 2023 20:02:56 +0200
Message-Id: <ebe5dbd39620bfae91eb95fe6c69f766334c6381.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 5/8] rtla/timerlat: Give timerlat auto-analysis its own instance
Date: Thu, 11 May 2023 20:02:57 +0200
Message-Id: <dc2fa88f7c8c6103db986122baa496c944571d02.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 6/8] rtla/timerlat_hist: Add auto-analysis support
Date: Thu, 11 May 2023 20:02:58 +0200
Message-Id: <09d6bbc8642fa930cdfc9fa003a0546f9106261d.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 7/8] rtla: Start the tracers after creating all instances
Date: Thu, 11 May 2023 20:02:59 +0200
Message-Id: <26d837baec9e9e261a1352fba6ffe9be8967ba25.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
(mbox) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'From: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Steven Rostedt <[email protected]> from line 'Cc: Steven Rostedt <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Cc: Daniel Bristot de Oliveira <[email protected]>' (body) Adding cc: Masami Hiramatsu <[email protected]> from line 'Cc: Masami Hiramatsu <[email protected]>' (body) Adding cc: Jonathan Corbet <[email protected]> from line 'Cc: Jonathan Corbet <[email protected]>'
(body) Adding cc: Daniel Bristot de Oliveira <[email protected]> from line 'Signed-off-by: Daniel Bristot de Oliveira <[email protected]>' Dry-OK. Log says:
Server: mail.kernel.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
From: Daniel Bristot de Oliveira <[email protected]>
To: [email protected],
Steven Rostedt <[email protected]>
Cc: [email protected],
[email protected],
Juri Lelli <[email protected]>,
William White <[email protected]>,
Daniel Bristot de Oliveira <[email protected]>,
Masami Hiramatsu <[email protected]>,
Jonathan Corbet <[email protected]>
Subject: [PATCH 8/8] rtla/hwnoise: Reduce runtime to 75%
Date: Thu, 11 May 2023 20:03:00 +0200
Message-Id: <09fd28d1be7a5f3e01da1c2c007cf56790635f39.1683827510.git.bristot@kernel.org>
X-Mailer: git-send-email 2.38.1
In-Reply-To: <[email protected]>
References: <[email protected]>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Result: OK
Re: 0001-rtla-Add-C-cgroup-support.patch
ok, today is one of those days... Ignore this email, it is the log --dry-run I tried before.
I need to automate this final checks :-)
-- Daniel
PATCH 8/8 rtla/hwnoise: Reduce runtime to 75%
In reply to Daniel Bristot de Oliveiraosnoise runs 100% of time by default. It makes sense because osnoise is preemptive. hwnoise checks preemption once a second, so it reduces system progress.
Reduce runtime to 75% to avoid problems by default. I added a Fixes as it might avoid problems for first time users as it lands on distros.
--- tools/tracing/rtla/src/osnoise_top.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
tools/tracing/rtla/src/osnoise_top.c +7 -1
@@ -348,8 +348,14 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)if (!params)exit (1 ); -if (strcmp (argv[0 ],"hwnoise" ) ==0 ) +if (strcmp (argv[0 ],"hwnoise" ) ==0 ) { params->mode =MODE_HWNOISE ; +/* +* Reduce CPU usage for 75% to avoid killing the system. +*/ + params->runtime =750000 ; + params->period =1000000 ; + }while (1 ) {static struct option long_options[] = {
Signature · 1 line
2.38.1