Skip to content

Commit

Permalink
tools/power turbostat: if --num_iterations, print for specific number…
Browse files Browse the repository at this point in the history
… of iterations

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

turbostat -i 5 -n 4
will capture 4 samples with 5 seconds interval.

[lenb: renamed to --num_iterations from --iterations]

Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
Reviewed-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Chen Yu authored and Len Brown committed Jun 2, 2018
1 parent 997e539 commit 023fe0a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
2 changes: 2 additions & 0 deletions tools/power/x86/turbostat/turbostat.8
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ The column name "all" can be used to enable all disabled-by-default built-in cou
.PP
\fB--interval seconds\fP overrides the default 5.0 second measurement interval.
.PP
\fB--num_iterations num\fP number of the measurement iterations.
.PP
\fB--out output_file\fP turbostat output is written to the specified output_file.
The file is truncated if it already exists, and it is created if it does not exist.
.PP
Expand Down
20 changes: 19 additions & 1 deletion tools/power/x86/turbostat/turbostat.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ int *fd_percpu;
struct timeval interval_tv = {5, 0};
struct timespec interval_ts = {5, 0};
struct timespec one_msec = {0, 1000000};
unsigned int num_iterations;
unsigned int debug;
unsigned int quiet;
unsigned int shown;
Expand Down Expand Up @@ -496,6 +497,7 @@ void help(void)
"--interval sec.subsec Override default 5-second measurement interval\n"
"--help print this help message\n"
"--list list column headers only\n"
"--num_iterations num number of the measurement iterations\n"
"--out file create or truncate \"file\" for all output\n"
"--version print version information\n"
"\n"
Expand Down Expand Up @@ -2763,6 +2765,7 @@ void turbostat_loop()
{
int retval;
int restarted = 0;
int done_iters = 0;

setup_signal_handler();

Expand All @@ -2781,6 +2784,7 @@ void turbostat_loop()
goto restart;
}
restarted = 0;
done_iters = 0;
gettimeofday(&tv_even, (struct timezone *)NULL);

while (1) {
Expand Down Expand Up @@ -2809,6 +2813,8 @@ void turbostat_loop()
flush_output_stdout();
if (exit_requested)
break;
if (num_iterations && ++done_iters >= num_iterations)
break;
do_sleep();
if (snapshot_proc_sysfs_files())
goto restart;
Expand All @@ -2830,6 +2836,8 @@ void turbostat_loop()
flush_output_stdout();
if (exit_requested)
break;
if (num_iterations && ++done_iters >= num_iterations)
break;
}
}

Expand Down Expand Up @@ -5212,6 +5220,7 @@ void cmdline(int argc, char **argv)
{"debug", no_argument, 0, 'd'}, /* internal, not documented */
{"enable", required_argument, 0, 'e'},
{"interval", required_argument, 0, 'i'},
{"num_iterations", required_argument, 0, 'n'},
{"help", no_argument, 0, 'h'},
{"hide", required_argument, 0, 'H'}, // meh, -h taken by --help
{"Joules", no_argument, 0, 'J'},
Expand All @@ -5227,7 +5236,7 @@ void cmdline(int argc, char **argv)

progname = argv[0];

while ((opt = getopt_long_only(argc, argv, "+C:c:Dde:hi:Jo:qST:v",
while ((opt = getopt_long_only(argc, argv, "+C:c:Dde:hi:Jn:o:qST:v",
long_options, &option_index)) != -1) {
switch (opt) {
case 'a':
Expand Down Expand Up @@ -5287,6 +5296,15 @@ void cmdline(int argc, char **argv)
case 'q':
quiet = 1;
break;
case 'n':
num_iterations = strtod(optarg, NULL);

if (num_iterations <= 0) {
fprintf(outf, "iterations %d should be positive number\n",
num_iterations);
exit(2);
}
break;
case 's':
/*
* --show: show only those specified
Expand Down

0 comments on commit 023fe0a

Please sign in to comment.