[lkml]   [2011]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[RFC PATCH V1 0/2] cpuidle: global registration of idle states with per-cpu statistics
This patch series is an early RFC to discuss the feasibility of
avoiding registering of idle states from each cpu.

The core change is to split the cpuidle_device structure into parts
that can be global and parts that has to remain per-cpu. The per-cpu
pieces are mostly generic statistics that can be independent of
current running driver.

* Simplify the cpuidle subsystem framework and have
registration/unregistration done by single cpu.

* Minimise the data structure that needs to be maintained for multiple
cpuidle drivers

* Reference:

* Make the cpuidle framework simple for most use cases where C-States
are symmetric. In case there are asymmetric C-States detected,
fallback mechanism should be incorporated to maintain the system

* Non x86 archs that does not have asymmetric C-States like POWER, may
not need the fallback mechanism and hence the framework will be
simple for most use cases.

* Asymmetric C-States are part of x86 ACPI specification. Incorrect
handling may functionally affect the system

* Incorporating per-cpu masks for each state to allow/dis-allow global
states on subset of CPUs may result in an implementation that is
not better than current solution of having per-cpu states.

This patch series applies on top of the pm_idle cleanup patch (cpuidle: Cleanup pm_idle and
include driver/cpuidle.c in-kernel)

This patch series is tested on x86 Nehalem system with multiple ACPI

This patch series has limitations of not handling multiple driver
registration and switching between drivers on all CPUs mainly due to
incomplete handling of per-cpu enable/disable and driver_data.

Please let us know your comments and suggest possible approaches to
the problem.


Trinabh Gupta (2):
cpuidle: API changes in callers using new cpuidle_state_stats
cpuidle: Data structure changes for global cpuidle device

drivers/acpi/processor_driver.c | 19 +---
drivers/acpi/processor_idle.c | 45 ++++++----
drivers/cpuidle/cpuidle.c | 169 ++++++++++++++++++++++--------------
drivers/cpuidle/cpuidle.h | 4 -
drivers/cpuidle/driver.c | 24 -----
drivers/cpuidle/governor.c | 10 +-
drivers/cpuidle/governors/Makefile | 2
drivers/cpuidle/governors/menu.c | 16 ++-
drivers/cpuidle/sysfs.c | 62 +++++++------
drivers/idle/default_driver.c | 39 +++-----
include/linux/cpuidle.h | 70 ++++++++++-----
11 files changed, 245 insertions(+), 215 deletions(-)


 \ /
  Last update: 2011-03-22 13:51    [W:0.114 / U:4.636 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site