cpupowerutils: bench - ConfigStyle bugfixes
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
f5ac0641d1
commit
02af3cb5aa
8 changed files with 75 additions and 58 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
**/
|
||||
|
@ -62,8 +62,7 @@ unsigned int calculate_timespace(long load, struct config *config)
|
|||
|
||||
/* approximation of the wanted load time by comparing with the
|
||||
* initial calculation time */
|
||||
for (i= 0; i < 4; i++)
|
||||
{
|
||||
for (i = 0; i < 4; i++) {
|
||||
rounds = (unsigned int)(load * estimated / timed);
|
||||
dprintf("calibrating with %u rounds\n", rounds);
|
||||
now = get_time();
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,9 @@
|
|||
/* 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)); \
|
||||
(void)(((int)(pow(rcnt, rcnt) * \
|
||||
sqrt(rcnt*7230970)) ^ 7230716) ^ \
|
||||
(int)atan2(rcnt, rcnt)); \
|
||||
} } \
|
||||
|
||||
|
||||
|
|
|
@ -31,6 +31,6 @@
|
|||
#ifdef DEBUG
|
||||
#define dprintf printf
|
||||
#else
|
||||
#define dprintf( ... ) while(0) { }
|
||||
#define dprintf(...) do { } while (0)
|
||||
#endif
|
||||
|
||||
|
|
|
@ -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'},
|
||||
|
|
|
@ -94,12 +94,14 @@ FILE *prepare_output(const char *dirname)
|
|||
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");
|
||||
}
|
||||
|
@ -171,8 +173,7 @@ int prepare_config(const char *path, struct config *config)
|
|||
return 1;
|
||||
}
|
||||
|
||||
while (getline(&line, &len, configfile) != -1)
|
||||
{
|
||||
while (getline(&line, &len, configfile) != -1) {
|
||||
if (line[0] == '#' || line[0] == ' ')
|
||||
continue;
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "system.h"
|
||||
|
||||
/**
|
||||
* returns time since epoch in µs
|
||||
* returns time since epoch in µs
|
||||
*
|
||||
* @retval time
|
||||
**/
|
||||
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue