欢迎光临散文网 会员登陆 & 注册

深究CPU 进入 IDLE 都做了啥?

2022-11-03 17:22 作者:补给站Linux内核  | 我要投稿

cpuidle framework

每一个 CPU 核心都会有一个 idle 进程,idle 进程是当系统没有调度 CPU 资源的时候,会进入 idle 进程,而 idle 进程的作用就是不使用 CPU,以此达到省电的目的。

在ARM64架构中,当CPU Idle时,会调用WFI指令(wait for interrupt),关掉CPU的Clock以便降低功耗,当有外设中断触发时,CPU又会恢复回来。

cpuidle core 是 cpuidle framework 的核心模块,负责抽象出 cpuidle device、cpuidle driver 和 cpuidle governor 三个实体,如下所示:


cpuidle core 抽象出了 cpuidle device、cpuidle driver 和 cpuidle governor 三个数据结构。

数据结构

cpuidle_device

针对每个CPU核都对应一个struct cpuidle_device结构,主要字段介绍如下

对应的注册接口是 cpuidle_register_device。


【文章福利】小编推荐自己的Linux内核技术交流群:【891587639】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)     

cpuidle_driver

cpuidle driver用于驱动一个或多个CPU核,关键字段描述如下:

对应的注册接口是 cpuidle_register_driver。

cpuidle_governor

governor 结构主要提供不同的回调函数,最终由 menu_governor 填充,主要字段如下:

对应的注册接口是 cpuidle_register_governor。

流程

我们先看下设备和驱动的注册过程:


注册之后便将设备和驱动建立起连接关系了,最终 cpuidle framework 的用户便可通过接口来调用下层的接口,进而完成具体的硬件操作。

下面看下 CPU 进入 idle 状态的流程图:


可以看出,最终是通过 PSCI 来实现 CPU 的 suspend。

PSCI

PSCI, Power State Coordination Interface,由ARM定义的电源管理接口规范,通常由Firmware来实现,而Linux系统可以通过smc/hvc指令来进入不同的Exception Level,进而调用对应的实现。


PSCI 支持如下功能:

  • CPU hotplug (on/off)

  • CPU idle (suspend/resume)

  • System suspend/resume

  • System shutdown and reset

每个功能和ATF之间的调用接口如下所示:




深究CPU 进入 IDLE 都做了啥?的评论 (共 条)

分享到微博请遵守国家法律