Linux : CPU Idle

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 */

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值