Linux : CPU Idle【转】


转自:https://blog.csdn.net/hongzg1982/article/details/54881417

CPU Idle状态可以分为很多种Idle状态,在CPU准备进入idle的时候在很多状态中进行选择以达到省电的目的。

CPU Idle相关的软件架构可以分以下几种:
CPUIDLE core:CPUIdle的内核驱动,在kernel\drivers\cpuidle目录下。
CPUIDLE sysfs:这部分向用户层提供CPUIDLE的相关节点,以提供信息给用户。
在/sys/devices/system/cpu/cpuidle下可以查到当前的CPUIdle的驱动的名字和governor的种类。
在/sys/devices/system/cpu/cpu0/cpuidle下可以看到几种CPUIDLE状态,在相应的目录下有lantency,名字等信息。

CPUIdle govenor:根据latency,residency等,根据某种算法选择一个合适的CPUIDLE状态。
比如cpuidle governor里边的menu algorithm会根据之前的idle time的统计结果来预测接下来的idle time,并从中选择合适的idle state。

CPUIdle状态
以S5PC210为例,它有以下几种CPUIdle状态

NORMAL : IDLE (Wait For Interrupt)
AFTR : ARM Off and TOP Running
LPA : Low Power Audio
DEEP-STOP
SLEEP
每种状态关闭的模块以及latency,power saving也是各有不同。

进入CPUIdle,选择CPUIdle state的过程


Governor
以下以menu governor为例说明
在众多Idle state中选择合适的idle state必须要考虑

Energy break event point
Performance impact
Latency tolerance(from pmqos infrastructure) ?
Energy break event point
1.target_residency

进入每个IDLE mode的时候,都是会产生energy cost
所以在”target_residency”里写入进入每个IDLE state所需的energy cost。
governor->select()选择合适的idle state所要满足的条件为
target_residency > predicted idle duration的时候,governor->select()不会选择这个IDLE State!!这里predicted idle duration表示预测的下一个idle state可以持续的时间
2.correction_factor[]
为了提交预测下一个idle state所停留的时间而导入的内容

Performance Impact
exit_latency
? IDLE state(C state)? ??? ? ???? exit_latency ? ????, exit_latency? Performace impact? ?? ?
“exit_latency“ ??? ? IDLE state? ?? ??? ???? latency? ?? ?
???? ??? ????, C0?? C7?? ? ?? latency? ?? ??
struct cpuidle_state {
unsigned int exit_latency; /* in US */
int power_usage; /* in mW */
unsigned int target_residency; /* in US */
bool disabled; /* disabled on all CPUs */

}
————————————————
版权声明:本文为CSDN博主「honghong96」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hongzg1982/article/details/54881417