ARM 低功耗架构
Linux power and performance management architecture and SCMI
移动设备
SoC上有很多核,ATF和Linux占据了A核,SCP占据了一个M核。当遇到Linux没有权限的事情的时候(eg: 当Linux想要关机或者休眠的时候,这涉及到整个系统电源状态的变化,为了安全性Linux内核没有权利直接执行,需要陷入到EL3等级去执行),需要给SCP打报告,SCP审批后去执行。(异构核间通信)。
ATF代码运行在EL3, 是实现安全相关的软件部分固件,在EL3中处理的程序是BL31。PSCI是工作在non secure EL1(linux内核)/EL2 hypervisor和EL3(bl31)之间的一组电源管理接口,PSCI在EL3实现。
- ATF响应smc发过来的PSCI服务请求,PSCI由BL31处理;
- 实现EL2的虚拟化系统中,EL1使用hvc进入EL2,hypervisor为运行在EL1的Guest/Host OS提供PSCI API调用SPF支持。
虚拟机电源管理的两种类型(左:Type-2,右:Type-1)
A核需要通过SCMI协议上报给SCP,在AP与SCP的核间通信使用SCMI。
走SMC是安全通道,Linux直接和SCP通信是非安全通道
- 用户层:首先用户发起的一些操作,通过用户空间的各service处理,会经过内核提供的sysfs,操作cpu hotplug、device pm、EAS、IPA等。
- 内核层:在linux内核中,EAS通过感知到当前的负载及相应的功耗,经过cpu idle、cpu dvfs及调度选择idle等级、cpu频率及大核或者小核上运行。IPA经过与EAS的交互,做热相关的管理。
- ATF层:Linux kernel中发起的操作,会经过电源状态协调接口PSCI,由操作系统无关的framework(ARM Trusted Firmware,ATF)做相关的处理后,通过系统控制与管理接口(System Control and Management Interface,SCMI),向系统控制处理器(system control processor,SCP)发起低功耗操作。
- SCP层:SCP(系统控制处理器system control processor)最终会控制芯片上的sensor、clock、power domain、及板级的pmic做低功耗相关的处理。
Call flow: 用户进程 --sysfs–> 内核(EAS、IPA)–PSCI–> ATF --SCMI–>SCP --LPI–> 功耗输出器件
服务器
在OS中加入ACPI高级配置和电源接口(X86)
ACPI为兼容的OSPM实现,提供了一组电源管理服务:
- LPI:Low-Power Idle,不同于C-states,可以兼容ARM的idle状态
- D-States:设备电源管理
- CPPC:让OS根据CPU负载情况主动管理CPU的性能
- Power Meters:功率计接口 (PMI)
PSCI在ATF(EL3/BL31)中实现
ACPI在UEFI(EL2/BL33)中实现
ATF+UEFI的boot过程
CPUidle和hotplug区别:
CPUidle:处于idle状态的cpu,是“suspend”。对调度器来说是可见的,换句话说,调度器并不知道某个CPU是否处于idle状态
cpu hotplug:“off”。负荷较低时,从调度器移除,并将该CPU上的中断等资源迁移到其它CPU上,同时进行必要的负载均衡。
PSCI不包含:
- 动态电压频率调节DVFS (cpu freq)
- 外设电源管理(GPU等外设)
PSCI用来与高级配置与电源接口ACPI和设备树FDT等配合使用,并不是要取代ACPI或FDT
PSCI是ARM安全和非安全世界之间的接口,提供了一种发出电源管理请求的方法,在SPF和可信操作系统之间进行通信。为了处理这些请求,SPF(Secure Platform Firmware)必须包含PSCI实现
PSCI在ARM架构不同异常等级上工作的软件之间,提供一个标准的电源管理接口。这些软件,比如Linux、Hypervisor、安全Firmware和可信OS之间必须能够实现互相操作。包括:
- CPU核的空闲管理(cpu idle)
- CPU核的动态添加,删除(热插拔hotplug)
- 辅核引导(在SMP系统中,Linux kernel会在一个CPU(primary CPU)上完成启动操作。primary CPU启动完成后,再启动其它的CPU(secondary CPUs),这称作secondary CPU boot。)
- big.LITTLE调度(Cluster迁移,Cpu迁移,全局任务调度)
- 系统关机,复位,挂起
SCP 与 SOC PPU
中间层的SCP是由一个M系列的处理器构成的子系统,负责运行固件软件(firmware),向上可与AP通过设定好的接口/协议通信,接收服务请求,向下控制硬件单元,监控传感器,控制时钟和复位,管理电源等等。
有了SCP,就能把一些任务从OSPM中抽离出来,把软件和硬件隔离,增加了灵活性和安全性
PPU(power policy unit)是一个硬件组件,支持SCP通过软件接口编程