aboutsummaryrefslogtreecommitdiff
path: root/cpu
diff options
context:
space:
mode:
authorarjan <arjan@arjan-desktop.localdomain>2010-09-02 21:50:06 -0700
committerarjan <arjan@arjan-desktop.localdomain>2010-09-02 21:50:06 -0700
commit4874efc49664ef55a2c7c7270290527dd1757088 (patch)
tree655f4e6f0e038cfbaf1e7d0611a10edcb313c11e /cpu
parent8cad3ca27faf837c6a308c3557340f85686bb08f (diff)
downloadpowertop-4874efc49664ef55a2c7c7270290527dd1757088.tar.gz
more pstate work
Diffstat (limited to 'cpu')
-rw-r--r--cpu/intel_cpus.cpp64
1 files changed, 62 insertions, 2 deletions
diff --git a/cpu/intel_cpus.cpp b/cpu/intel_cpus.cpp
index d8deda6..0f3b186 100644
--- a/cpu/intel_cpus.cpp
+++ b/cpu/intel_cpus.cpp
@@ -81,6 +81,7 @@ void nhm_core::measurement_start(void)
file.close();
}
account_freq(0, 0);
+
}
void nhm_core::measurement_end(void)
@@ -88,7 +89,7 @@ void nhm_core::measurement_end(void)
unsigned int i;
uint64_t time_delta;
double ratio;
-
+ char buffer[4096];
c3_after = get_msr(first_cpu, MSR_CORE_C3_RESIDENCY);
@@ -146,6 +147,26 @@ void nhm_core::measurement_end(void)
}
#endif
total_stamp = 0;
+
+ if (cstates.size() > 1) {
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"core-idle-%s", cstates[i]->human_name);
+ printf("registering %s \n", buffer);
+ register_parameter(buffer, 1);
+ }
+
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"core-%i-idle-%s", number, cstates[i]->human_name);
+ report_utilization(buffer, percentage(cstates[i]->duration_delta / time_factor));
+ }
+ }
+
+ for (i = 0; i < pstates.size(); i ++) {
+ if (strstr(pstates[i]->human_name,"Idle"))
+ continue;
+ sprintf(buffer,"core-freq-%s", pstates[i]->human_name);
+ register_parameter(buffer, 1);
+ }
}
void nhm_core::account_freq(uint64_t freq, uint64_t duration)
@@ -362,6 +383,19 @@ void nhm_package::measurement_end(void)
char buffer[256];
+ if (cstates.size() > 1) {
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"core-idle-%s", cstates[i]->human_name);
+ printf("registering %s \n", buffer);
+ register_parameter(buffer, 1);
+ }
+
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"core-%i-idle-%s", number, cstates[i]->human_name);
+ report_utilization(buffer, percentage(cstates[i]->duration_delta / time_factor));
+ }
+ }
+
for (i = 0; i < pstates.size(); i ++) {
if (strstr(pstates[i]->human_name,"Idle"))
continue;
@@ -388,6 +422,19 @@ void nhm_package::report_out(void)
sprintf(buffer,"package-%i-freq-%s", number, pstates[i]->human_name);
report_utilization(buffer, percentage(1.0* (pstates[i]->time_after) / total_stamp));
}
+
+ if (cstates.size() > 1) {
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"package-idle-%s", cstates[i]->human_name);
+ printf("registering %s \n", buffer);
+ register_parameter(buffer, 1);
+ }
+
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"package-%i-idle-%s", number, cstates[i]->human_name);
+ report_utilization(buffer, percentage(cstates[i]->duration_delta / time_factor));
+ }
+ }
abstract_cpu::report_out();
}
@@ -520,7 +567,7 @@ void nhm_cpu::measurement_end(void)
uint64_t time_delta;
double ratio;
unsigned int i;
-
+ char buffer[4096];
aperf_after = get_msr(number, MSR_APERF);
mperf_after = get_msr(number, MSR_MPERF);
@@ -549,6 +596,19 @@ void nhm_cpu::measurement_end(void)
total_stamp = 0;
+ if (cstates.size() > 1) {
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"cpu-idle-%s", cstates[i]->human_name);
+ printf("registering %s \n", buffer);
+ register_parameter(buffer, 1);
+ }
+
+ for (i = 0; i < cstates.size() - 1; i ++) {
+ sprintf(buffer,"cpu-%i-idle-%s", number, cstates[i]->human_name);
+ report_utilization(buffer, percentage(cstates[i]->duration_delta / time_factor));
+ }
+ }
+
}