aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDirk Brandewie <dirk.brandewie@gmail.com>2012-06-12 08:57:15 -0700
committerChris E Ferron <chris.e.ferron@linux.intel.com>2012-06-12 09:33:26 -0700
commitf0f926545ff6c307632d6f7c25d341d39e1c0e5a (patch)
tree1f391f3c82c37109c9f57780ab105bfb8d046fde
parent035c28b60c764ce465488042edbad926540c316b (diff)
Add option to specify workload to run during measurement.
Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
-rw-r--r--src/calibrate/calibrate.cpp26
-rw-r--r--src/calibrate/calibrate.h2
-rw-r--r--src/main.cpp38
3 files changed, 42 insertions, 24 deletions
diff --git a/src/calibrate/calibrate.cpp b/src/calibrate/calibrate.cpp
index cf00fcf..5457cf8 100644
--- a/src/calibrate/calibrate.cpp
+++ b/src/calibrate/calibrate.cpp
@@ -313,7 +313,7 @@ static void cpu_calibration(int threads)
for (i = 0; i < threads; i++)
pthread_create(&thr, NULL, burn_cpu, NULL);
- one_measurement(15);
+ one_measurement(15, NULL);
stop_measurement = 1;
sleep(1);
}
@@ -328,7 +328,7 @@ static void wakeup_calibration(unsigned long interval)
pthread_create(&thr, NULL, burn_cpu_wakeups, (void *)interval);
- one_measurement(15);
+ one_measurement(15, NULL);
stop_measurement = 1;
sleep(1);
}
@@ -344,7 +344,7 @@ static void usb_calibration(void)
printf(_(".... device %s \n"), usb_devices[i].c_str());
suspend_all_usb_devices();
write_sysfs(usb_devices[i], "on\n");
- one_measurement(15);
+ one_measurement(15, NULL);
suspend_all_usb_devices();
sleep(3);
}
@@ -361,7 +361,7 @@ static void rfkill_calibration(void)
printf(_(".... device %s \n"), rfkill_devices[i].c_str());
rfkill_all_radios();
write_sysfs(rfkill_devices[i], "0\n");
- one_measurement(15);
+ one_measurement(15, NULL);
rfkill_all_radios();
sleep(3);
}
@@ -369,7 +369,7 @@ static void rfkill_calibration(void)
printf(_(".... device %s \n"), rfkill_devices[i].c_str());
unrfkill_all_radios();
write_sysfs(rfkill_devices[i], "1\n");
- one_measurement(15);
+ one_measurement(15, NULL);
unrfkill_all_radios();
sleep(3);
}
@@ -385,28 +385,28 @@ static void backlight_calibration(void)
char str[4096];
printf(_(".... device %s \n"), backlight_devices[i].c_str());
lower_backlight();
- one_measurement(15);
+ one_measurement(15, NULL);
sprintf(str, "%i\n", blmax / 4);
write_sysfs(backlight_devices[i], str);
- one_measurement(15);
+ one_measurement(15, NULL);
sprintf(str, "%i\n", blmax / 2);
write_sysfs(backlight_devices[i], str);
- one_measurement(15);
+ one_measurement(15, NULL);
sprintf(str, "%i\n", 3 * blmax / 4 );
write_sysfs(backlight_devices[i], str);
- one_measurement(15);
+ one_measurement(15, NULL);
sprintf(str, "%i\n", blmax);
write_sysfs(backlight_devices[i], str);
- one_measurement(15);
+ one_measurement(15, NULL);
lower_backlight();
sleep(1);
}
printf(_("Calibrating idle\n"));
system("DISPLAY=:0 /usr/bin/xset dpms force off");
- one_measurement(15);
+ one_measurement(15, NULL);
system("DISPLAY=:0 /usr/bin/xset dpms force on");
}
@@ -414,7 +414,7 @@ static void idle_calibration(void)
{
printf(_("Calibrating idle\n"));
system("DISPLAY=:0 /usr/bin/xset dpms force off");
- one_measurement(15);
+ one_measurement(15, NULL);
system("DISPLAY=:0 /usr/bin/xset dpms force on");
}
@@ -430,7 +430,7 @@ static void disk_calibration(void)
stop_measurement = 0;
pthread_create(&thr, NULL, burn_disk, NULL);
- one_measurement(15);
+ one_measurement(15, NULL);
stop_measurement = 1;
sleep(1);
diff --git a/src/calibrate/calibrate.h b/src/calibrate/calibrate.h
index fa9c4d4..c279ae2 100644
--- a/src/calibrate/calibrate.h
+++ b/src/calibrate/calibrate.h
@@ -25,7 +25,7 @@
#ifndef __INCLUDE_GUARD_CALIBRATE_H
#define __INCLUDE_GUARD_CALIBRATE_H
-extern void one_measurement(int seconds);
+extern void one_measurement(int seconds, char *workload);
extern void calibrate(void);
diff --git a/src/main.cpp b/src/main.cpp
index 292f25a..880d745 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -76,6 +76,7 @@ static const struct option long_options[] =
{"extech", optional_argument, NULL, 'e'},
{"time", optional_argument, NULL, 't'},
{"iteration", optional_argument, NULL, 'i'},
+ {"workload", optional_argument, NULL, 'w'},
{NULL, 0, NULL, 0}
};
@@ -109,6 +110,7 @@ static void print_usage()
printf("--csv%s \t %s\n",_("[=FILENAME]"),_("generate a csv report"));
printf("--time%s \t %s\n",_("[=seconds]"), _("generate a report for 'x' seconds"));
printf("--iteration%s\n", _("[=iterations] number of times to run each test"));
+ printf("--workload%s \t %s\n", _("[=workload]"), _("file to execute for workload"));
printf("--help \t\t\t %s\n",_("print this help menu"));
printf("\n");
printf("%s\n\n",_("For more help please refer to the README"));
@@ -174,15 +176,21 @@ static void do_sleep(int seconds)
}
-void one_measurement(int seconds)
+void one_measurement(int seconds, char *workload)
{
+ int tmp;
+
create_all_usb_devices();
start_power_measurement();
devices_start_measurement();
start_process_measurement();
start_cpu_measurement();
- do_sleep(seconds);
+ if (workload && workload[0]) {
+ tmp = system(workload);
+ }
+ else
+ do_sleep(seconds);
end_cpu_measurement();
end_process_measurement();
@@ -245,19 +253,23 @@ static void load_board_params()
global_power_override = 1;
}
-void report(int time, int iterations, char *file)
+void report(int time, char *workload, int iterations, char *file)
{
/* one to warm up everything */
fprintf(stderr, _("Preparing to take measurements\n"));
utf_ok = 0;
- one_measurement(1);
- fprintf(stderr, _("Taking %d measurement(s) for a duration of %d second(s) each.\n"),iterations,time);
+ one_measurement(1, NULL);
+
+ if (!workload[0])
+ fprintf(stderr, _("Taking %d measurement(s) for a duration of %d second(s) each.\n"),iterations,time);
+ else
+ fprintf(stderr, _("Measuring workload %s.\n"), workload);
for (int i=0; i != iterations; i++){
init_report_output(file);
initialize_tuning();
/* and then the real measurement */
- one_measurement(time);
+ one_measurement(time, workload);
report_show_tunables();
finish_report_output();
clear_tuning();
@@ -342,6 +354,7 @@ int main(int argc, char **argv)
int c;
bool wantreport = FALSE;
char filename[4096];
+ char workload[4096];
int iterations = 1;
#ifndef DISABLE_TRYCATCH
@@ -355,7 +368,7 @@ int main(int argc, char **argv)
#endif
while (1) { /* parse commandline options */
- c = getopt_long (argc, argv, "ch:C:i:t:uV", long_options, &option_index);
+ c = getopt_long (argc, argv, "ch:C:i:t:uV:w", long_options, &option_index);
/* Detect the end of the options. */
if (c == -1)
break;
@@ -394,6 +407,11 @@ int main(int argc, char **argv)
iterations = (optarg ? atoi(optarg) : 1);
break;
+ case 'w': /* measure workload */
+ wantreport = TRUE;
+ sprintf(workload, "%s", optarg ? optarg :'\0' );
+ break;
+
case 'C': /* csv report*/
wantreport = TRUE;
reporttype = 0;
@@ -409,7 +427,7 @@ int main(int argc, char **argv)
powertop_init();
if (wantreport)
- report(time_out, iterations, filename);
+ report(time_out, workload, iterations, filename);
if (debug_learning)
printf("Learning debugging enabled\n");
@@ -427,14 +445,14 @@ int main(int argc, char **argv)
/* first one is short to not let the user wait too long */
init_display();
- one_measurement(1);
+ one_measurement(1, NULL);
initialize_tuning();
tuning_update_display();
show_tab(0);
while (!leave_powertop) {
show_cur_tab();
- one_measurement(time_out);
+ one_measurement(time_out, workload);
learn_parameters(15, 0);
}
#ifndef DISABLE_NCURSES