diff options
-rw-r--r-- | tools/power/cpupower/Makefile | 5 | ||||
-rw-r--r-- | tools/power/cpupower/bench/benchmark.c | 48 | ||||
-rw-r--r-- | tools/power/cpupower/bench/benchmark.h | 8 | ||||
-rw-r--r-- | tools/power/cpupower/bench/config.h | 2 | ||||
-rw-r--r-- | tools/power/cpupower/bench/main.c | 7 | ||||
-rw-r--r-- | tools/power/cpupower/bench/parse.c | 37 | ||||
-rw-r--r-- | tools/power/cpupower/bench/parse.h | 13 | ||||
-rw-r--r-- | tools/power/cpupower/bench/system.c | 13 |
8 files changed, 75 insertions, 58 deletions
diff --git a/tools/power/cpupower/Makefile b/tools/power/cpupower/Makefile index fea0e6a0a37a..62c2716a9588 100644 --- a/tools/power/cpupower/Makefile +++ b/tools/power/cpupower/Makefile @@ -38,7 +38,7 @@ NLS ?= true CPUFRQ_BENCH ?= true # Prefix to the directories we're installing to -DESTDIR ?= +DESTDIR ?= # --- CONFIGURATION END --- @@ -277,5 +277,4 @@ uninstall: rm -f $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupowerutils.mo; \ done; -.PHONY: all utils libcpufreq update-po create-gmo install-lib install-tools install-man install-gmo install uninstall \ - clean +.PHONY: all utils libcpufreq update-po create-gmo install-lib install-tools install-man install-gmo install uninstall clean diff --git a/tools/power/cpupower/bench/benchmark.c b/tools/power/cpupower/bench/benchmark.c index f538633b8b41..81b1c48607d9 100644 --- a/tools/power/cpupower/bench/benchmark.c +++ b/tools/power/cpupower/bench/benchmark.c @@ -37,7 +37,7 @@ if (config->output != stdout) { \ * compute how many rounds of calculation we should do * to get the given load time * - * @param load aimed load time in µs + * @param load aimed load time in µs * * @retval rounds of calculation **/ @@ -61,9 +61,8 @@ unsigned int calculate_timespace(long load, struct config *config) timed = (unsigned int)(then - now); /* approximation of the wanted load time by comparing with the - * initial calculation time */ - for (i= 0; i < 4; i++) - { + * initial calculation time */ + for (i = 0; i < 4; i++) { rounds = (unsigned int)(load * estimated / timed); dprintf("calibrating with %u rounds\n", rounds); now = get_time(); @@ -102,11 +101,11 @@ void start_benchmark(struct config *config) load_time = config->load; /* For the progress bar */ - for (_round=1; _round <= config->rounds; _round++) + for (_round = 1; _round <= config->rounds; _round++) total_time += _round * (config->sleep + config->load); total_time *= 2; /* powersave and performance cycles */ - for (_round=0; _round < config->rounds; _round++) { + for (_round = 0; _round < config->rounds; _round++) { performance_time = 0LL; powersave_time = 0LL; @@ -130,9 +129,10 @@ void start_benchmark(struct config *config) fprintf(config->output, "%u %li %li ", _round, load_time, sleep_time); - if (config->verbose) { - printf("avarage: %lius, rps:%li\n", load_time / calculations, 1000000 * calculations / load_time); - } + if (config->verbose) + printf("avarage: %lius, rps:%li\n", + load_time / calculations, + 1000000 * calculations / load_time); /* do some sleep/load cycles with the performance governor */ for (cycle = 0; cycle < config->cycles; cycle++) { @@ -142,10 +142,14 @@ void start_benchmark(struct config *config) then = get_time(); performance_time += then - now - sleep_time; if (config->verbose) - printf("performance cycle took %lius, sleep: %lius, load: %lius, rounds: %u\n", - (long)(then - now), sleep_time, load_time, calculations); + printf("performance cycle took %lius, " + "sleep: %lius, " + "load: %lius, rounds: %u\n", + (long)(then - now), sleep_time, + load_time, calculations); } - fprintf(config->output, "%li ", performance_time / config->cycles); + fprintf(config->output, "%li ", + performance_time / config->cycles); progress_time += sleep_time + load_time; show_progress(total_time, progress_time); @@ -155,7 +159,8 @@ void start_benchmark(struct config *config) if (set_cpufreq_governor(config->governor, config->cpu) != 0) return; - /* again, do some sleep/load cycles with the powersave governor */ + /* again, do some sleep/load cycles with the + * powersave governor */ for (cycle = 0; cycle < config->cycles; cycle++) { now = get_time(); usleep(sleep_time); @@ -163,22 +168,27 @@ void start_benchmark(struct config *config) then = get_time(); powersave_time += then - now - sleep_time; if (config->verbose) - printf("powersave cycle took %lius, sleep: %lius, load: %lius, rounds: %u\n", - (long)(then - now), sleep_time, load_time, calculations); + printf("powersave cycle took %lius, " + "sleep: %lius, " + "load: %lius, rounds: %u\n", + (long)(then - now), sleep_time, + load_time, calculations); } progress_time += sleep_time + load_time; /* compare the avarage sleep/load cycles */ - fprintf(config->output, "%li ", powersave_time / config->cycles); - fprintf(config->output, "%.3f\n", performance_time * 100.0 / powersave_time); + fprintf(config->output, "%li ", + powersave_time / config->cycles); + fprintf(config->output, "%.3f\n", + performance_time * 100.0 / powersave_time); fflush(config->output); if (config->verbose) - printf("performance is at %.2f%%\n", performance_time * 100.0 / powersave_time); + printf("performance is at %.2f%%\n", + performance_time * 100.0 / powersave_time); sleep_time += config->sleep_step; load_time += config->load_step; } } - diff --git a/tools/power/cpupower/bench/benchmark.h b/tools/power/cpupower/bench/benchmark.h index 0691f91b720b..51d7f50ac2bb 100644 --- a/tools/power/cpupower/bench/benchmark.h +++ b/tools/power/cpupower/bench/benchmark.h @@ -19,9 +19,11 @@ /* load loop, this schould take about 1 to 2ms to complete */ #define ROUNDS(x) {unsigned int rcnt; \ - for (rcnt = 0; rcnt< x*1000; rcnt++) { \ - (void)(((int)(pow(rcnt, rcnt) * sqrt(rcnt*7230970)) ^ 7230716) ^ (int)atan2(rcnt, rcnt)); \ - }} \ + for (rcnt = 0; rcnt < x*1000; rcnt++) { \ + (void)(((int)(pow(rcnt, rcnt) * \ + sqrt(rcnt*7230970)) ^ 7230716) ^ \ + (int)atan2(rcnt, rcnt)); \ + } } \ void start_benchmark(struct config *config); diff --git a/tools/power/cpupower/bench/config.h b/tools/power/cpupower/bench/config.h index 9690f1be32fd..ee6f258e5336 100644 --- a/tools/power/cpupower/bench/config.h +++ b/tools/power/cpupower/bench/config.h @@ -31,6 +31,6 @@ #ifdef DEBUG #define dprintf printf #else -#define dprintf( ... ) while(0) { } +#define dprintf(...) do { } while (0) #endif diff --git a/tools/power/cpupower/bench/main.c b/tools/power/cpupower/bench/main.c index 60953fc93431..24910313a521 100644 --- a/tools/power/cpupower/bench/main.c +++ b/tools/power/cpupower/bench/main.c @@ -28,8 +28,7 @@ #include "system.h" #include "benchmark.h" -static struct option long_options[] = -{ +static struct option long_options[] = { {"output", 1, 0, 'o'}, {"sleep", 1, 0, 's'}, {"load", 1, 0, 'l'}, @@ -50,7 +49,7 @@ static struct option long_options[] = usage *******************************************************************/ -void usage() +void usage() { printf("usage: ./bench\n"); printf("Options:\n"); @@ -67,7 +66,7 @@ void usage() printf(" -o, --output=<dir>\t\t\toutput path. Filename will be OUTPUTPATH/benchmark_TIMESTAMP.log\n"); printf(" -v, --verbose\t\t\t\tverbose output on/off\n"); printf(" -h, --help\t\t\t\tPrint this help screen\n"); - exit (1); + exit(1); } /******************************************************************* diff --git a/tools/power/cpupower/bench/parse.c b/tools/power/cpupower/bench/parse.c index 3b270ac92c46..543bba14ae2c 100644 --- a/tools/power/cpupower/bench/parse.c +++ b/tools/power/cpupower/bench/parse.c @@ -86,20 +86,22 @@ FILE *prepare_output(const char *dirname) len += strlen(sysdata.nodename) + strlen(sysdata.release); filename = realloc(filename, sizeof(char) * len); - if(filename == NULL) { + if (filename == NULL) { perror("realloc"); return NULL; } - snprintf(filename, len - 1, "%s/benchmark_%s_%s_%li.log", + snprintf(filename, len - 1, "%s/benchmark_%s_%s_%li.log", dirname, sysdata.nodename, sysdata.release, time(NULL)); } else { - snprintf(filename, len -1, "%s/benchmark_%li.log", dirname, time(NULL)); + snprintf(filename, len - 1, "%s/benchmark_%li.log", + dirname, time(NULL)); } dprintf("logilename: %s\n", filename); - if ((output = fopen(filename, "w+")) == NULL) { + output = fopen(filename, "w+"); + if (output == NULL) { perror("fopen"); fprintf(stderr, "error: unable to open logfile\n"); } @@ -130,7 +132,7 @@ struct config *prepare_default_config() config->load_step = 500000; config->cycles = 5; config->rounds = 50; - config->cpu = 0; + config->cpu = 0; config->prio = SCHED_HIGH; config->verbose = 0; strncpy(config->governor, "ondemand", 8); @@ -166,13 +168,12 @@ int prepare_config(const char *path, struct config *config) if (configfile == NULL) { perror("fopen"); - fprintf(stderr, "error: unable to read configfile\n"); + fprintf(stderr, "error: unable to read configfile\n"); free(config); return 1; } - while (getline(&line, &len, configfile) != -1) - { + while (getline(&line, &len, configfile) != -1) { if (line[0] == '#' || line[0] == ' ') continue; @@ -183,35 +184,35 @@ int prepare_config(const char *path, struct config *config) if (strncmp("sleep", opt, strlen(opt)) == 0) sscanf(val, "%li", &config->sleep); - else if (strncmp("load", opt, strlen(opt)) == 0) + else if (strncmp("load", opt, strlen(opt)) == 0) sscanf(val, "%li", &config->load); - else if (strncmp("load_step", opt, strlen(opt)) == 0) + else if (strncmp("load_step", opt, strlen(opt)) == 0) sscanf(val, "%li", &config->load_step); - else if (strncmp("sleep_step", opt, strlen(opt)) == 0) + else if (strncmp("sleep_step", opt, strlen(opt)) == 0) sscanf(val, "%li", &config->sleep_step); - else if (strncmp("cycles", opt, strlen(opt)) == 0) + else if (strncmp("cycles", opt, strlen(opt)) == 0) sscanf(val, "%u", &config->cycles); - else if (strncmp("rounds", opt, strlen(opt)) == 0) + else if (strncmp("rounds", opt, strlen(opt)) == 0) sscanf(val, "%u", &config->rounds); - else if (strncmp("verbose", opt, strlen(opt)) == 0) + else if (strncmp("verbose", opt, strlen(opt)) == 0) sscanf(val, "%u", &config->verbose); - else if (strncmp("output", opt, strlen(opt)) == 0) + else if (strncmp("output", opt, strlen(opt)) == 0) config->output = prepare_output(val); - else if (strncmp("cpu", opt, strlen(opt)) == 0) + else if (strncmp("cpu", opt, strlen(opt)) == 0) sscanf(val, "%u", &config->cpu); - else if (strncmp("governor", opt, 14) == 0) + else if (strncmp("governor", opt, 14) == 0) strncpy(config->governor, val, 14); else if (strncmp("priority", opt, strlen(opt)) == 0) { - if (string_to_prio(val) != SCHED_ERR) + if (string_to_prio(val) != SCHED_ERR) config->prio = string_to_prio(val); } } diff --git a/tools/power/cpupower/bench/parse.h b/tools/power/cpupower/bench/parse.h index 9fcdfa23dd9c..a8dc632d9eee 100644 --- a/tools/power/cpupower/bench/parse.h +++ b/tools/power/cpupower/bench/parse.h @@ -20,19 +20,22 @@ /* struct that holds the required config parameters */ struct config { - long sleep; /* sleep time in µs */ - long load; /* load time in µs */ + long sleep; /* sleep time in µs */ + long load; /* load time in µs */ long sleep_step; /* time value which changes the - * sleep time after every round in µs */ + * sleep time after every round in µs */ long load_step; /* time value which changes the - * load time after every round in µs */ + * load time after every round in µs */ unsigned int cycles; /* calculation cycles with the same sleep/load time */ unsigned int rounds; /* calculation rounds with iterated sleep/load time */ unsigned int cpu; /* cpu for which the affinity is set */ char governor[15]; /* cpufreq governor */ enum sched_prio /* possible scheduler priorities */ { - SCHED_ERR=-1,SCHED_HIGH, SCHED_DEFAULT, SCHED_LOW + SCHED_ERR = -1, + SCHED_HIGH, + SCHED_DEFAULT, + SCHED_LOW } prio; unsigned int verbose; /* verbose output */ diff --git a/tools/power/cpupower/bench/system.c b/tools/power/cpupower/bench/system.c index 3e3a82e8bdd9..f01e3f4be84c 100644 --- a/tools/power/cpupower/bench/system.c +++ b/tools/power/cpupower/bench/system.c @@ -31,7 +31,7 @@ #include "system.h" /** - * returns time since epoch in µs + * returns time since epoch in µs * * @retval time **/ @@ -87,7 +87,7 @@ int set_cpufreq_governor(char *governor, unsigned int cpu) int set_cpu_affinity(unsigned int cpu) { cpu_set_t cpuset; - + CPU_ZERO(&cpuset); CPU_SET(cpu, &cpuset); @@ -129,7 +129,7 @@ int set_process_priority(int priority) } /** - * notifys the user that the benchmark may run some time + * notifies the user that the benchmark may run some time * * @param config benchmark config values * @@ -142,8 +142,11 @@ void prepare_user(const struct config *config) unsigned int round; for (round = 0; round < config->rounds; round++) { - sleep_time += 2 * config->cycles * (config->sleep + config->sleep_step * round); - load_time += 2 * config->cycles * (config->load + config->load_step * round) + (config->load + config->load_step * round * 4); + sleep_time += 2 * config->cycles * + (config->sleep + config->sleep_step * round); + load_time += 2 * config->cycles * + (config->load + config->load_step * round) + + (config->load + config->load_step * round * 4); } if (config->verbose || config->output != stdout) |