[PATCH] cpufreq: the calibration is taking a long time, make it faster

Colin King colin.king at canonical.com
Wed Oct 7 15:53:16 UTC 2015


From: Colin Ian King <colin.king at canonical.com>

I've reduced the CPU cycle consumer loop from 1 sec to 0.25 seconds,
it speeds up the cpufreq test and I've not notice any detrimental
results occur.  If one reduces the loop down to sub 0.1 seconds
the results aren't that stable, so I think 0.25 seconds is a good
compromise.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/cpu/cpufreq/cpufreq.c | 9 +++++----
 src/lib/src/fwts_cpu.c    | 2 +-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/cpu/cpufreq/cpufreq.c b/src/cpu/cpufreq/cpufreq.c
index c96ed4d..c202797 100644
--- a/src/cpu/cpufreq/cpufreq.c
+++ b/src/cpu/cpufreq/cpufreq.c
@@ -74,6 +74,7 @@ static bool cpufreq_settable = true;
 
 #define MAX_ABSOLUTE_ERROR	20.0		/* In Hz */
 #define MAX_RELATIVE_ERROR	0.0025		/* as fraction */
+#define MAX_REPEATS		(5)
 
 static inline void cpu_mkpath(
 	char *const path,
@@ -130,8 +131,8 @@ static int cpu_set_frequency(fwts_framework *fw, struct cpu *cpu,
 
 out:
 	if (rc != FWTS_OK)
-		fwts_warning(fw, "Cannot set CPU %d frequency to %s.",
-				cpu->idx, buffer);
+		fwts_warning(fw, "Cannot set CPU %d frequency to %s when setting %s.",
+			cpu->idx, buffer, path);
 	return rc;
 }
 
@@ -446,14 +447,14 @@ static int cpufreq_test_sw_all(fwts_framework *fw)
 	for (i = 0; i < num_cpus; i++)
 		cpu_set_lowest_frequency(fw, &cpus[i]);
 
-	if (get_performance_repeat(fw, &cpus[0], 5, GET_PERFORMANCE_MIN, &lowperf) != FWTS_OK) {
+	if (get_performance_repeat(fw, &cpus[0], MAX_REPEATS, GET_PERFORMANCE_MIN, &lowperf) != FWTS_OK) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqSW_ALLGetPerf",
 			"Failed to get CPU performance.");
 		return FWTS_ERROR;
 	}
 
 	cpu_set_highest_frequency(fw, &cpus[0]);
-	if (get_performance_repeat(fw, &cpus[0], 5, GET_PERFORMANCE_MAX, &highperf) != FWTS_OK) {
+	if (get_performance_repeat(fw, &cpus[0], MAX_REPEATS, GET_PERFORMANCE_MAX, &highperf) != FWTS_OK) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqSW_ALLGetPerf",
 			"Failed to get CPU performance.");
 		return FWTS_ERROR;
diff --git a/src/lib/src/fwts_cpu.c b/src/lib/src/fwts_cpu.c
index a870ae8..307e81b 100644
--- a/src/lib/src/fwts_cpu.c
+++ b/src/lib/src/fwts_cpu.c
@@ -433,7 +433,7 @@ int fwts_cpu_benchmark(
 
 		gettimeofday(&end, NULL);
 		timersub(&end, &start, &duration);
-		if (duration.tv_sec >= 1)
+		if (duration.tv_usec >= 250000)
 			break;
 	}
 
-- 
2.5.0




More information about the fwts-devel mailing list