diff options
author | Chen Yu <yu.c.chen@intel.com> | 2018-04-26 08:41:03 +0800 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2018-06-01 23:12:45 -0400 |
commit | 023fe0ac975e4dff592ce90bbd12747dedf7c598 (patch) | |
tree | 42a7e6da73b0a220e97c597ff48b0302516a293e /tools/power | |
parent | 997e53950e3e71ceb13a7cc220d430b7cb78ef8f (diff) | |
download | linux-stable-023fe0ac975e4dff592ce90bbd12747dedf7c598.tar.gz linux-stable-023fe0ac975e4dff592ce90bbd12747dedf7c598.tar.bz2 linux-stable-023fe0ac975e4dff592ce90bbd12747dedf7c598.zip |
tools/power turbostat: if --num_iterations, print for specific number 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>
Diffstat (limited to 'tools/power')
-rw-r--r-- | tools/power/x86/turbostat/turbostat.8 | 2 | ||||
-rw-r--r-- | tools/power/x86/turbostat/turbostat.c | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/tools/power/x86/turbostat/turbostat.8 b/tools/power/x86/turbostat/turbostat.8 index 4cffa4a5a2b7..ca9ef7017624 100644 --- a/tools/power/x86/turbostat/turbostat.8 +++ b/tools/power/x86/turbostat/turbostat.8 @@ -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 diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 1cb38c12a8b5..6910773e85a9 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c @@ -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; @@ -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" @@ -2763,6 +2765,7 @@ void turbostat_loop() { int retval; int restarted = 0; + int done_iters = 0; setup_signal_handler(); @@ -2781,6 +2784,7 @@ restart: goto restart; } restarted = 0; + done_iters = 0; gettimeofday(&tv_even, (struct timezone *)NULL); while (1) { @@ -2809,6 +2813,8 @@ restart: flush_output_stdout(); if (exit_requested) break; + if (num_iterations && ++done_iters >= num_iterations) + break; do_sleep(); if (snapshot_proc_sysfs_files()) goto restart; @@ -2830,6 +2836,8 @@ restart: flush_output_stdout(); if (exit_requested) break; + if (num_iterations && ++done_iters >= num_iterations) + break; } } @@ -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'}, @@ -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': @@ -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 |