2018-04-11 10:34:51

by Chen Yu

[permalink] [raw]
Subject: [PATCH][v3] tools/power turbostat: if --max_loop, print for specific time of loops

From: Chen Yu <[email protected]>

There's a use case during test to only print specific round of loops
if --iterations is specified, for example, with this patch applied:

turbostat -i 5 -t 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: [email protected]
Cc: [email protected]
Signed-off-by: Chen Yu <[email protected]>
---
tools/power/x86/turbostat/turbostat.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index bd9c6b31a504..29419b1535bb 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -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 loops The number of loops if interval is specified\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 loops = 0;

restart:
restarted++;
@@ -2583,6 +2586,7 @@ void turbostat_loop()
restarted = 0;
gettimeofday(&tv_even, (struct timezone *)NULL);

+ loops = 0;
while (1) {
if (for_all_proc_cpus(cpu_is_not_present)) {
re_initialize();
@@ -2607,6 +2611,10 @@ void turbostat_loop()
compute_average(EVEN_COUNTERS);
format_all_counters(EVEN_COUNTERS);
flush_output_stdout();
+
+ if (iterations && (++loops >= 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 && (++loops >= 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, 't'},
{"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:JM:m:o:qST:vt:",
long_options, &option_index)) != -1) {
switch (opt) {
case 'a':
@@ -5069,6 +5081,15 @@ void cmdline(int argc, char **argv)
case 'S':
summary_only++;
break;
+ case 't':
+ iterations = strtod(optarg, NULL);
+
+ if (iterations <= 0) {
+ fprintf(outf, "loops %d should be positive number\n",
+ iterations);
+ exit(2);
+ }
+ break;
case 'T':
tcc_activation_temp_override = atoi(optarg);
break;
--
2.13.6



2018-04-11 11:05:59

by Artem Bityutskiy

[permalink] [raw]
Subject: Re: [PATCH][v3] tools/power turbostat: if --max_loop, print for specific time of loops

A couple of nitpicks.

On Wed, 2018-04-11 at 18:30 +0800, Yu Chen wrote:
> @@ -48,6 +48,7 @@ char *proc_stat = "/proc/stat";
> FILE *outf;
> int *fd_percpu;
> struct timespec interval_ts = {5, 0};
> +int iterations;

OK, out of several choices, you selected "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 loops The number of loops if interval is specified\n"

Since "iterations" is the term, be consistent and do not mix it with
"loops". Who knows may be the "loops" term will be used for something
else in the future. Use something like this:

"--iterations count Number of measurement iterations (requires '
--interval')"

> print this help mkk
> "--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 loops = 0;

Please, name variables in a consistent manner, this should really be
something like 'int iters = 0'. Or may be 'done_iters', or something.
But not "loops".

> @@ -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, 't'},

If you used term "count", you could have consistent long and short
option names, like '--count / -c'. I find '--iterations / -t' to be
inconsistent, and harder to remember the short option, because I think
about time, not "iterations" when I see -t.

2018-04-11 12:52:52

by Chen Yu

[permalink] [raw]
Subject: Re: [PATCH][v3] tools/power turbostat: if --max_loop, print for specific time of loops

Hi,
On Wed, Apr 11, 2018 at 02:02:02PM +0300, Artem Bityutskiy wrote:
> A couple of nitpicks.
>
> On Wed, 2018-04-11 at 18:30 +0800, Yu Chen wrote:
> > @@ -48,6 +48,7 @@ char *proc_stat = "/proc/stat";
> > FILE *outf;
> > int *fd_percpu;
> > struct timespec interval_ts = {5, 0};
> > +int iterations;
>
> OK, out of several choices, you selected "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 loops The number of loops if interval is specified\n"
>
> Since "iterations" is the term, be consistent and do not mix it with
> "loops". Who knows may be the "loops" term will be used for something
> else in the future. Use something like this:
>
> "--iterations count Number of measurement iterations (requires '
> --interval')"
>
OK, this looks more consistent.
> > print this help mkk
> > "--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 loops = 0;
>
> Please, name variables in a consistent manner, this should really be
> something like 'int iters = 0'. Or may be 'done_iters', or something.
> But not "loops".
>
OK.
> > @@ -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, 't'},
>
> If you used term "count", you could have consistent long and short
> option names, like '--count / -c'. I find '--iterations / -t' to be
> inconsistent, and harder to remember the short option, because I think
> about time, not "iterations" when I see -t.
However the '-c' is already used as a short form for '--cpu',
so I chose --iterations previously.

Thanks,
Yu

2018-04-12 07:23:31

by Doug Smythies

[permalink] [raw]
Subject: RE: [PATCH][v3] tools/power turbostat: if --max_loop, print for specific time of loops

On 2018.04.11 03:31 Yu Chen wrote:

> From: Chen Yu <[email protected]>
>
> There's a use case during test to only print specific round of loops
> if --iterations is specified, for example, with this patch applied:
>
> turbostat -i 5 -t 4
> will capture 4 samples with 5 seconds interval.

Hi Yu,

This would be a very useful addition to turbostat.
Please also update the man turbostat man page.

tools/power/x86/turbostat/turbostat.8

... Doug



2018-04-12 07:35:32

by Chen Yu

[permalink] [raw]
Subject: Re: [PATCH][v3] tools/power turbostat: if --max_loop, print for specific time of loops

Hi Doug,
On Thu, Apr 12, 2018 at 12:18:44AM -0700, Doug Smythies wrote:
> On 2018.04.11 03:31 Yu Chen wrote:
>
> > From: Chen Yu <[email protected]>
> >
> > There's a use case during test to only print specific round of loops
> > if --iterations is specified, for example, with this patch applied:
> >
> > turbostat -i 5 -t 4
> > will capture 4 samples with 5 seconds interval.
>
> Hi Yu,
>
> This would be a very useful addition to turbostat.
> Please also update the man turbostat man page.
>
> tools/power/x86/turbostat/turbostat.8
>
OK, I will do this.
Thanks,
Yu
> ... Doug
>
>