【cpuidle】cpuidle overview

什么是cpuidle

cpuidle的进入退出流程

  • boot阶段
    系统启动后,创建idle线程

  • runtime阶段

  1. 判断是否有任务调度
    a. 如果有的话,就去做schedule调度
  2. 判断core有没有被offline,
    a. 如果被offline,则执行cpu die相关流程
  3. 判断有没有使用cpuidle framework
    a. 如果没有使用,则直接走default idle函数,执行wfi
  4. 如果使用了cpuidle framework,那接下来要调用cpuidle_select(),获取target state
    a. cpuidle_select(),根据当前使用的governor,根据系统的pm qos,预期驻留时间/唤醒延时,判断target state
  5. call_cpuidle()调用注册的driver进入target state
    a. driver主要做的事情是,在初始化时,从ACPI/DTS中获取c state信息;调用psci、pcc等协议和通信接口
  6. driver根据target state进入低功耗状态,有可能是idle、retention、shutdown等状态
    a. 如果是retention,会处于wfi,上下文不丢失,唤醒后执行下一条指令
    b. 如果是shutdown,会重新走resume流程

cpuidle enter具体分析

Reference

posted @ 2023-02-01 19:03  zephyr~  阅读(308)  评论(0编辑  收藏  举报