aboutsummaryrefslogtreecommitdiff
path: root/cpu
diff options
context:
space:
mode:
authorarjan <arjan@arjan-desktop.localdomain>2010-08-29 15:51:36 -0700
committerarjan <arjan@arjan-desktop.localdomain>2010-08-29 15:51:36 -0700
commit571b28f2989d2a919347826b2dda5a5d0c5fe32c (patch)
treedbfd67b7d04d8da30af8c5cf9f042473d2349fb6 /cpu
parentb23cd71d728fae6f2b027bff4f6ff6e6e256bcbf (diff)
downloadpowertop-571b28f2989d2a919347826b2dda5a5d0c5fe32c.tar.gz
add C state data as well
add per core data in addition per per package
Diffstat (limited to 'cpu')
-rw-r--r--cpu/cpu.h1
-rw-r--r--cpu/cpu_core.cpp37
-rw-r--r--cpu/cpu_package.cpp34
3 files changed, 61 insertions, 11 deletions
diff --git a/cpu/cpu.h b/cpu/cpu.h
index 44eb4b7..0e3e866 100644
--- a/cpu/cpu.h
+++ b/cpu/cpu.h
@@ -143,6 +143,7 @@ public:
virtual char * fill_pstate_name(int line_nr, char *buffer);
virtual int can_collapse(void) { return childcount == 1;};
+ virtual void measurement_end(void);
};
class cpu_package: public abstract_cpu
diff --git a/cpu/cpu_core.cpp b/cpu/cpu_core.cpp
index 5ee32be..5a474b6 100644
--- a/cpu/cpu_core.cpp
+++ b/cpu/cpu_core.cpp
@@ -2,6 +2,8 @@
#include "cpu.h"
#include "../lib.h"
+#include "../parameters/parameters.h"
+
char * cpu_core::fill_cstate_line(int line_nr, char *buffer)
{
unsigned int i;
@@ -68,3 +70,38 @@ char * cpu_core::fill_pstate_line(int line_nr, char *buffer)
return buffer;
}
+
+
+void cpu_core::measurement_end(void)
+{
+ unsigned int i;
+ char buffer[256];
+
+ abstract_cpu::measurement_end();
+
+ if (pstates.size() > 1) {
+ for (i = 0; i < pstates.size() - 1; i ++) {
+ sprintf(buffer,"core-freq-%s", pstates[i]->human_name);
+ printf("registering %s \n", buffer);
+ register_parameter(buffer, 1);
+ }
+
+ for (i = 0; i < pstates.size() - 1; i ++) {
+ sprintf(buffer,"core-%i-freq-%s", number, pstates[i]->human_name);
+ report_utilization(buffer, percentage(1.0* (pstates[i]->time_after - pstates[i]->time_before) / time_factor * 10000 / pstates[i]->after_count));
+ }
+ }
+
+ 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));
+ }
+ }
+} \ No newline at end of file
diff --git a/cpu/cpu_package.cpp b/cpu/cpu_package.cpp
index 9144dfd..5ad818c 100644
--- a/cpu/cpu_package.cpp
+++ b/cpu/cpu_package.cpp
@@ -78,17 +78,29 @@ void cpu_package::measurement_end(void)
abstract_cpu::measurement_end();
- if (pstates.size() < 2)
- return;
-
- for (i = 0; i < pstates.size() - 1; i ++) {
- sprintf(buffer,"package-freq-%s", pstates[i]->human_name);
- printf("registering %s \n", buffer);
- register_parameter(buffer, 1);
+ if (pstates.size() > 1) {
+ for (i = 0; i < pstates.size() - 1; i ++) {
+ sprintf(buffer,"package-freq-%s", pstates[i]->human_name);
+ printf("registering %s \n", buffer);
+ register_parameter(buffer, 1);
+ }
+
+ for (i = 0; i < pstates.size() - 1; i ++) {
+ sprintf(buffer,"package-%i-freq-%s", number, pstates[i]->human_name);
+ report_utilization(buffer, percentage(1.0* (pstates[i]->time_after - pstates[i]->time_before) / time_factor * 10000 / pstates[i]->after_count));
+ }
}
- for (i = 0; i < pstates.size() - 1; i ++) {
- sprintf(buffer,"package-%i-freq-%s", number, pstates[i]->human_name);
- report_utilization(buffer, percentage(1.0* (pstates[i]->time_after - pstates[i]->time_before) / time_factor * 10000 / pstates[i]->after_count));
+ 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));
+ }
}
-} \ No newline at end of file
+}