Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 023fe0ac authored by Chen Yu's avatar Chen Yu Committed by Len Brown
Browse files

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: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: default avatarChen Yu <yu.c.chen@intel.com>
Reviewed-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 997e5395
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+19 −1
Original line number Diff line number Diff line
@@ -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 @@ void turbostat_loop()
		goto restart;
	}
	restarted = 0;
	done_iters = 0;
	gettimeofday(&tv_even, (struct timezone *)NULL);

	while (1) {
@@ -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;
@@ -2830,6 +2836,8 @@ void turbostat_loop()
		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