diff options
author | Dirk Brandewie <dirk.brandewie@gmail.com> | 2012-06-12 08:57:15 -0700 |
---|---|---|
committer | Chris E Ferron <chris.e.ferron@linux.intel.com> | 2012-06-12 09:33:26 -0700 |
commit | f0f926545ff6c307632d6f7c25d341d39e1c0e5a (patch) | |
tree | 1f391f3c82c37109c9f57780ab105bfb8d046fde | |
parent | 035c28b60c764ce465488042edbad926540c316b (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.cpp | 26 | ||||
-rw-r--r-- | src/calibrate/calibrate.h | 2 | ||||
-rw-r--r-- | src/main.cpp | 38 |
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 |