power state由于aarch64架构有多种不用的电源状态,不同电源状态的功耗和唤醒延迟不同。
如standby状态会关闭power domain的clock,但并不关闭电源。因此它虽然消除了门电路翻转引起的动态功耗,但依然存在漏电流等引起的静态功耗。故其功耗相对较大,但相应地唤醒延迟就比较低。
而对于power down状态,会断开对应power domain的电源,因此其不仅消除了动态功耗,还消除了静态功耗,相应地其唤醒延迟就比较高了。
psci一共为power domain定义了四种power state:
(1)run:电源和时钟都打开,该domain正常工作
(2)standby:关闭时钟,但电源处于打开状态。其寄存器状态得到保存,打开时钟后就可继续运行。功耗相对较大,但唤醒延迟较低。arm执行wfi或wfe指令会进入该状态。
(3)retention:它将core的状态,包括调试设置都保存在低功耗结构中,并使其部分关闭。其状态在从低功耗变为运行时能自动恢复。从操作系统角度看,除了进入方法、延迟等有区别外,其它都与standby相同。它的功耗和唤醒延迟都介于standby和power down之间。
(4)power down:关闭时钟和电源。power domain掉电后,所有状态都丢失,上电以后软件必须重新恢复其状态。它的功耗最低,但唤醒延迟也相应地最高。
(这里我很好奇怎么和linux的s3、s4对应的。当时测试s3的时候,对应的是suspend。这里的对于cpu的有off、on、suspend三种,我觉得这里应该就是对于的standby,因为有wfi或wfe这些指令。那s4就是CPU off了?可以看一下这个有点认识,突然想到psci里面的状态是对于的cpu为对象,但是linux的电源管理应该是对整个设备。)
显然,power state的睡眠程度从run到power down逐步加深。而高层级power domain的power
state不应低于低层级power domain。
如以上例子中core 0 – core 2都为power down状态,而core 3为standby状态,则cluster 0不能为retention或power down状态。同样若cluster 0为standby状态,而cluster 1为run状态,则整个系统必须为run状态。
为了达到上述约束,不同power domain之间的power state具有以下关系:
这里解释了psci那个源码文档里电源树的概念。
psci实现了父leve与子level之间的电源关系协调,如cluster 0中最后一个core被设置为power
down状态后,psci就会将该cluster也设置为power donw状态。若其某一个core被设置为run状态,则psci会先将其对应cluster的状态设置为run,然后再设置对应core的电源状态,这也是psci名字的由来(power state coordinate interface)
-
电源
+关注
关注
184文章
17561浏览量
249403 -
cpu
+关注
关注
68文章
10824浏览量
211098 -
Linux
+关注
关注
87文章
11220浏览量
208880 -
SMP
+关注
关注
0文章
71浏览量
19628
发布评论请先 登录
相关推荐
评论