|
@@ -39,6 +39,7 @@ static int mode;
|
|
|
static int interval = 1;
|
|
|
static char *show_monitors_param;
|
|
|
static struct cpupower_topology cpu_top;
|
|
|
+static unsigned int wake_cpus;
|
|
|
|
|
|
/* ToDo: Document this in the manpage */
|
|
|
static char range_abbr[RANGE_MAX] = { 'T', 'C', 'P', 'M', };
|
|
@@ -314,16 +315,28 @@ int fork_it(char **argv)
|
|
|
int do_interval_measure(int i)
|
|
|
{
|
|
|
unsigned int num;
|
|
|
+ int cpu;
|
|
|
+
|
|
|
+ if (wake_cpus)
|
|
|
+ for (cpu = 0; cpu < cpu_count; cpu++)
|
|
|
+ bind_cpu(cpu);
|
|
|
|
|
|
for (num = 0; num < avail_monitors; num++) {
|
|
|
dprint("HW C-state residency monitor: %s - States: %d\n",
|
|
|
monitors[num]->name, monitors[num]->hw_states_num);
|
|
|
monitors[num]->start();
|
|
|
}
|
|
|
+
|
|
|
sleep(i);
|
|
|
+
|
|
|
+ if (wake_cpus)
|
|
|
+ for (cpu = 0; cpu < cpu_count; cpu++)
|
|
|
+ bind_cpu(cpu);
|
|
|
+
|
|
|
for (num = 0; num < avail_monitors; num++)
|
|
|
monitors[num]->stop();
|
|
|
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -332,7 +345,7 @@ static void cmdline(int argc, char *argv[])
|
|
|
int opt;
|
|
|
progname = basename(argv[0]);
|
|
|
|
|
|
- while ((opt = getopt(argc, argv, "+li:m:")) != -1) {
|
|
|
+ while ((opt = getopt(argc, argv, "+lci:m:")) != -1) {
|
|
|
switch (opt) {
|
|
|
case 'l':
|
|
|
if (mode)
|
|
@@ -351,6 +364,9 @@ static void cmdline(int argc, char *argv[])
|
|
|
mode = show;
|
|
|
show_monitors_param = optarg;
|
|
|
break;
|
|
|
+ case 'c':
|
|
|
+ wake_cpus = 1;
|
|
|
+ break;
|
|
|
default:
|
|
|
print_wrong_arg_exit();
|
|
|
}
|