diff options
author | arjan <arjan@arjan-desktop.localdomain> | 2010-08-29 15:51:36 -0700 |
---|---|---|
committer | arjan <arjan@arjan-desktop.localdomain> | 2010-08-29 15:51:36 -0700 |
commit | 571b28f2989d2a919347826b2dda5a5d0c5fe32c (patch) | |
tree | dbfd67b7d04d8da30af8c5cf9f042473d2349fb6 /cpu | |
parent | b23cd71d728fae6f2b027bff4f6ff6e6e256bcbf (diff) | |
download | powertop-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.h | 1 | ||||
-rw-r--r-- | cpu/cpu_core.cpp | 37 | ||||
-rw-r--r-- | cpu/cpu_package.cpp | 34 |
3 files changed, 61 insertions, 11 deletions
@@ -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 +} |