diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2010-08-08 08:42:34 -0700 |
---|---|---|
committer | Arjan van de Ven <arjan@linux.intel.com> | 2010-08-08 08:42:34 -0700 |
commit | 6d10cf6fa7821b93025dd226651a6ed7cb59a49e (patch) | |
tree | ad00d4825743a184fe399a2d4c24393f81dbcd2e /cpu | |
parent | d8e3da347eab38ef7d9142896c06bb783a95ede0 (diff) | |
download | powertop-6d10cf6fa7821b93025dd226651a6ed7cb59a49e.tar.gz |
add turbo mode support
Diffstat (limited to 'cpu')
-rw-r--r-- | cpu/abstract_cpu.cpp | 14 | ||||
-rw-r--r-- | cpu/cpu.h | 2 | ||||
-rw-r--r-- | cpu/cpu_linux.cpp | 13 |
3 files changed, 29 insertions, 0 deletions
diff --git a/cpu/abstract_cpu.cpp b/cpu/abstract_cpu.cpp index a6305d3..b084327 100644 --- a/cpu/abstract_cpu.cpp +++ b/cpu/abstract_cpu.cpp @@ -1,11 +1,16 @@ +#include <iostream> +#include <fstream> #include <string.h> #include <stdio.h> #include <stdlib.h> #include "cpu.h" + void abstract_cpu::measurement_start(void) { unsigned int i; + ifstream file; + char filename[4096]; for (i = 0; i < cstates.size(); i++) delete cstates[i]; @@ -15,6 +20,15 @@ void abstract_cpu::measurement_start(void) delete pstates[i]; pstates.resize(0); + + sprintf(filename, "/sys/devices/system/cpu/cpu%i/cpufreq/scaling_available_frequencies", number); + file.open(filename, ios::in); + if (file) { + file >> max_frequency; + file >> max_minus_one_frequency; + file.close(); + } + for (i = 0; i < children.size(); i++) if (children[i]) children[i]->measurement_start(); @@ -51,6 +51,8 @@ protected: int first_cpu; struct timeval stamp_before, stamp_after; double time_factor; + uint64_t max_frequency; + uint64_t max_minus_one_frequency; public: vector<class abstract_cpu *> children; vector<struct idle_state *> cstates; diff --git a/cpu/cpu_linux.cpp b/cpu/cpu_linux.cpp index 9441953..1a964fd 100644 --- a/cpu/cpu_linux.cpp +++ b/cpu/cpu_linux.cpp @@ -14,6 +14,15 @@ #include <sys/stat.h> #include <dirent.h> +static int is_turbo(uint64_t freq, uint64_t max, uint64_t maxmo) +{ + if (freq != max) + return 0; + if (maxmo + 1000 != max) + return 0; + return 1; +} + void cpu_linux::measurement_start(void) { @@ -103,6 +112,10 @@ void cpu_linux::measurement_start(void) hz_to_human(f, line); + if (is_turbo(f, max_frequency, max_minus_one_frequency)) { + sprintf(line, _("Turbo Mode")); + } + if (f > 0) update_pstate(f, line, count, 1); |