[v2,2/3] examples/vm_power_manager: Allowing power managing of idle cores
Checks
Commit Message
This change is required to allow the branch ratio algorithm to
power manage cores with no workload running on them. This is
useful both when idle cores don't use C-states and for a number of
hyperthreading scenarios.
Signed-off-by: Rory Sexton <rory.sexton@intel.com>
---
examples/vm_power_manager/oob_monitor_x86.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Comments
Hi Rory,
On 18/5/2020 11:39 AM, Sexton, Rory wrote:
> This change is required to allow the branch ratio algorithm to
> power manage cores with no workload running on them. This is
> useful both when idle cores don't use C-states and for a number of
> hyperthreading scenarios.
>
> Signed-off-by: Rory Sexton <rory.sexton@intel.com>
> ---
> examples/vm_power_manager/oob_monitor_x86.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/examples/vm_power_manager/oob_monitor_x86.c b/examples/vm_power_manager/oob_monitor_x86.c
> index 3c514475f..a5b1c168c 100644
> --- a/examples/vm_power_manager/oob_monitor_x86.c
> +++ b/examples/vm_power_manager/oob_monitor_x86.c
> @@ -96,12 +96,12 @@ apply_policy(int core)
> g_branch_misses = miss_diff;
>
> if (hits_diff < (INTERVAL*100)) {
> - /* Likely no workload running on this core. Skip. */
> - return -1.0;
> + /* Likely no workload running on this core. */
> + ratio = 0.0;
> + } else {
> + ratio = (float)miss_diff * (float)100 / (float)hits_diff;
> }
>
> - ratio = (float)miss_diff * (float)100 / (float)hits_diff;
> -
> /*
> * Store the last few directions that the ratio indicates
> * we should take. If there's on 'up', then we scale up
Good enhancement. It hadn't occurred to me to manage non-PMD workloads,
but I agree that when
C-States are disabled on a system, there may be cases where this
algorithm is useful to save power.
Reviewed-by: David Hunt <david.hunt@intel.com>
@@ -96,12 +96,12 @@ apply_policy(int core)
g_branch_misses = miss_diff;
if (hits_diff < (INTERVAL*100)) {
- /* Likely no workload running on this core. Skip. */
- return -1.0;
+ /* Likely no workload running on this core. */
+ ratio = 0.0;
+ } else {
+ ratio = (float)miss_diff * (float)100 / (float)hits_diff;
}
- ratio = (float)miss_diff * (float)100 / (float)hits_diff;
-
/*
* Store the last few directions that the ratio indicates
* we should take. If there's on 'up', then we scale up