tools/power turbostat: if --iterations, print for specific time of iterations
PATCH v4 1/1 tools/power turbostat: if --iterations, print for specific time of iterations
From: Chen Yu <[email protected]>
There's a use case during test to only print specific round of iterations if --iterations is specified, for example, with this patch applied:
turbostat -i 5 -I 4
will capture 4 samples with 5 seconds interval.
--- tools/power/x86/turbostat/turbostat.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)
tools/power/x86/turbostat/turbostat.c +22 -1
@@ -48,6 +48,7 @@ char *proc_stat = "/proc/stat";FILE *outf;int *fd_percpu;struct timespec interval_ts = {5 ,0 }; +int iterations;unsigned int debug;unsigned int quiet;unsigned int sums_need_wide_columns;
@@ -470,6 +471,7 @@ void help(void)" {core | package | j,k,l..m,n-p }\n" "--quiet skip decoding system configuration header\n" "--interval sec Override default 5-second measurement interval\n" +"--iterations count Number of measurement iterations(requires '--interval'\n" "--help print this help message\n" "--list list column headers only\n" "--out file create or truncate \"file\" for all output\n"
@@ -2565,6 +2567,7 @@ void turbostat_loop() {int retval;int restarted =0 ; +int done_iters =0 ; restart: restarted++;
@@ -2581,6 +2584,7 @@ void turbostat_loop() goto restart; } restarted =0 ; + done_iters =0 ;gettimeofday (&tv_even, (struct timezone *)NULL );while (1 ) {
@@ -2607,6 +2611,10 @@ void turbostat_loop()compute_average (EVEN_COUNTERS );format_all_counters (EVEN_COUNTERS );flush_output_stdout (); + +if (iterations && (++done_iters >= iterations)) +break ; +nanosleep (&interval_ts,NULL );if (snapshot_proc_sysfs_files ()) goto restart;
@@ -2626,6 +2634,9 @@ void turbostat_loop()compute_average (ODD_COUNTERS );format_all_counters (ODD_COUNTERS );flush_output_stdout (); + +if (iterations && (++done_iters >= iterations)) +break ; } }
@@ -4999,6 +5010,7 @@ void cmdline(int argc, char **argv) {"Dump", no_argument, 0, 'D'}, {"debug", no_argument, 0, 'd'}, /* internal, not documented */ {"interval", required_argument, 0, 'i'}, + {"iterations", required_argument, 0, 'I'}, {"help", no_argument, 0, 'h'}, {"hide", required_argument, 0, 'H'}, // meh, -h taken by --help {"Joules", no_argument, 0, 'J'},
@@ -5014,7 +5026,7 @@ void cmdline(int argc, char **argv) progname = argv[0 ]; -while ((opt =getopt_long_only (argc, argv,"+C:c:Ddhi:JM:m:o:qST:v" , +while ((opt =getopt_long_only (argc, argv,"+C:c:DdhI:i:JM:m:o:qST:v" , long_options, &option_index)) !=-1 ) {switch (opt) {case 'a' :
@@ -5036,6 +5048,15 @@ void cmdline(int argc, char **argv)default :help ();exit (1 ); +case 'I' : + iterations =strtod (optarg,NULL ); + +if (iterations <=0 ) { +fprintf (outf,"iterations %d should be positive number\n" , + iterations); +exit (2 ); + } +break ;case 'i' : {double interval =strtod (optarg,NULL );
Signature · 1 line
2.13.6
Quoted 13 lines · Yu Chen
tools/power/x86/turbostat/turbostat.c +1
-0@@ -48,6 +48,7 @@ char *proc_stat = "/proc/stat";FILE *outf;int *fd_percpu;struct timespec interval_ts = {5 ,0 }; +int iterations;unsigned int debug;unsigned int quiet;unsigned int sums_need_wide_columns;
tools/power/x86/turbostat/turbostat.c void help(void) · line 474
Quoted 4 lines
tools/power/x86/turbostat/turbostat.c +1
-0@@ -470,6 +471,7 @@ void help(void)" {core | package | j,k,l..m,n-p }\n" "--quiet skip decoding system configuration header\n" "--interval sec Override default 5-second measurement interval\n" +"--iterations count Number of measurement iterations(requires '--interval'\n"
Missing white-space and ")".
Signature · 2 lines
Best Regards, Artem Bityutskiy
Quoted 32 lines · CEST Yu Chen
From: Chen Yu <[email protected]>
There's a use case during test to only print specific round of iterations if --iterations is specified, for example, with this patch applied:
turbostat -i 5 -I 4
will capture 4 samples with 5 seconds interval.Cc Len Brown <[email protected]>Cc Rafael J Wysocki <[email protected]>Cc Artem Bityutskiy <[email protected]>Cc Doug Smythies <[email protected]>Signed-off-by Chen Yu <[email protected]>--- tools/power/x86/turbostat/turbostat.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)tools/power/x86/turbostat/turbostat.c +1
-0@@ -48,6 +48,7 @@ char *proc_stat = "/proc/stat";FILE *outf;int *fd_percpu;struct timespec interval_ts = {5 ,0 }; +int iterations;unsigned int debug;unsigned int quiet;unsigned int sums_need_wide_columns;
tools/power/x86/turbostat/turbostat.c void help(void) · line 474
Quoted 4 lines
tools/power/x86/turbostat/turbostat.c +1
-0@@ -470,6 +471,7 @@ void help(void)" {core | package | j,k,l..m,n-p }\n" "--quiet skip decoding system configuration header\n" "--interval sec Override default 5-second measurement interval\n" +"--iterations count Number of measurement iterations(requires '--interval'\n"
Why does it require --interval? Surely it should work with the default interval too?
Quoted 41 lines
tools/power/x86/turbostat/turbostat.c +9
-0"--help print this help message\n" "--list list column headers only\n" "--out file create or truncate \"file\" for all output\n" @@ -2565,6 +2567,7 @@ void turbostat_loop() {int retval;int restarted =0 ; +int done_iters =0 ; restart: restarted++;@@ -2581,6 +2584,7 @@ void turbostat_loop() goto restart; } restarted =0 ; + done_iters =0 ;gettimeofday (&tv_even, (struct timezone *)NULL );while (1 ) {@@ -2607,6 +2611,10 @@ void turbostat_loop()compute_average (EVEN_COUNTERS );format_all_counters (EVEN_COUNTERS );flush_output_stdout (); + +if (iterations && (++done_iters >= iterations)) +break ; +nanosleep (&interval_ts,NULL );if (snapshot_proc_sysfs_files ()) goto restart;@@ -2626,6 +2634,9 @@ void turbostat_loop()compute_average (ODD_COUNTERS );format_all_counters (ODD_COUNTERS );flush_output_stdout (); + +if (iterations && (++done_iters >= iterations)) +break ; } }
tools/power/x86/turbostat/turbostat.c void cmdline(int argc, char **argv) · line 5013
Quoted 4 lines
tools/power/x86/turbostat/turbostat.c +1
-0@@ -4999,6 +5010,7 @@ void cmdline(int argc, char **argv) {"Dump", no_argument, 0, 'D'}, {"debug", no_argument, 0, 'd'}, /* internal, not documented */ {"interval", required_argument, 0, 'i'}, + {"iterations", required_argument, 0, 'I'},
I would use "-r" rather (unless assigned already). It may be interpreted as "repetitions" and there's no confusion with "-i".
Quoted 19 lines
tools/power/x86/turbostat/turbostat.c +3
-1{"help", no_argument, 0, 'h'}, {"hide", required_argument, 0, 'H'}, // meh, -h taken by --help {"Joules", no_argument, 0, 'J'},@@ -5014,7 +5026,7 @@ void cmdline(int argc, char **argv) progname = argv[0 ]; -while ((opt =getopt_long_only (argc, argv,"+C:c:Ddhi:JM:m:o:qST:v" , +while ((opt =getopt_long_only (argc, argv,"+C:c:DdhI:i:JM:m:o:qST:v" , long_options, &option_index)) !=-1 ) {switch (opt) {case 'a' :@@ -5036,6 +5048,15 @@ void cmdline(int argc, char **argv)default :help ();exit (1 ); +case 'I' : + iterations =strtod (optarg,NULL );
tools/power/x86/turbostat/turbostat.c void cmdline(int argc, char **argv) · line 5062
Quoted 10 lines
tools/power/x86/turbostat/turbostat.c +7
-0+ +if (iterations <=0 ) { +fprintf (outf,"iterations %d should be positive number\n" , + iterations); +exit (2 ); + } +break ;case 'i' : {double interval =strtod (optarg,NULL );
What about the man page?