能源消耗分类
		静态功耗:
			每当核心逻辑或RAM块通电时,就会发生静态功耗,也称为泄漏。
			一般来说,漏电流与总硅面积成正比,这意味着芯片越大,漏电流越高。
			随着制造几何尺寸的减小,泄漏造成的功耗比例显著增加。
		
		动态功耗:
			是由于晶体管切换而产生的,是核心时钟速度和每个周期改变状态的晶体管数量的函数。
			显然,更高的时钟速度和更复杂的内核会消耗更多的功率。
基础:
		OSPM
			操作系统电源管理(Operating System Power Management,OSPM)
			在将计算从一个大内核转移到一个小内核,或从一个小内核转移到一个大内核时,可能必须打开或关闭内核和集群。
		PSCI
			ARM提供了的软件接口,即功率状态协调接口(PSCI)
降低功耗方法 // ARM内核通常支持多种级别的电源管理
		idle 管理
			相关概念
				power gating
					remove power, which removes both dynamic and static currents
					// 但是断电前要保存状态
					// 恢复后要恢复状态
					// 且 恢复需要额外的能源消耗
					// 所以有时候一刀切不是最好的选择
				clock gating
					stop the clock of the core which removes dynamic power consumption only
			第一个方法:Standby
				在待机操作模式下,内核保持通电,但其大多数时钟停止
				这意味着,core的几乎所有部分只有静态功耗(泄漏电流)
				唯一的动态功耗 是 
					1.观察唤醒条件的少量逻辑的时钟
				如何进入:
					使用WFI(等待中断)或WFE(等待事件)指令进入该模式。
				如何退出:
					对于WFI,中断或外部调试请求将唤醒内核。
					对于WFE,存在许多指定的事件,包括集群中执行SEV指令的另一个核心。
					A request from the Snoop Control Unit (SCU) can also wake up the clock for a cache coherency operation in an multi-core system.
				具体哪些模块的的时钟会停止
					实现定义
				进入退出产生的影响
					待机模式可以快速进入和退出(通常在两个时钟周期内)。
					因此,它对内核的延迟和响应能力的影响几乎可以忽略不计。
					
					对于管理电源的操作系统来说,待机状态和保留状态基本上是无法区分的。
					这种差异对于外部调试器和硬件实现来说很明显
			第一个方法的变体:Retention
				类似 standby + debug逻辑停止的状态
			第二个方法:Power down // core 断电
				core 断电降低了什么功耗
					core 的 动态功耗和静态功耗
					包括 cache RAM的功耗
				core 断电前应该做什么
					软件必须在core 断电前保存所有状态(取决于实现)到内存(DDR).以便恢复
				怎么给 core 断电
					// TODO
				core 怎么恢复 电源
					// TODO
				core 恢复电源的过程
					1.A reset of the core, after the power level has been restored.
					2.core will restart at the reset vector, typically in secure mode
					3.After initializing, the Secure world must resume the OS that called the power down interface, at the required return address
					
				
				
				
			第二个方法的变体:Dormant mode // 休眠模式
				相对于 "Power down",没有断cache RAM的电,
				所以可以休眠前,将状态保存到 RAM中, 从而恢复的时候更快
				
				仅适用于单核或(多核中的其他核心都关闭,且最后一个休眠的单核),因为多核时,一个core对应的cache 可能会被其他核心改变
				
		hotplug
			热插拔是一种可以动态打开或关闭内核的技术。
			热插拔的应用场景
				OSPM可以根据当前的计算需求 来 更改可用的计算容量(即热插拔)
				可靠性原因
			
			热插拔和在"Power down"有许多不同之处:
				1.当core热插拔时,
					监控软件会停止在中断和线程处理中使用该core。
					操作系统不再认为core可用。
				2.OSPM必须发出一个明确的命令,使core恢复在线,即热插拔core。
					相应的监控软件只会在该命令发出后开始安排或启用对该core的中断。
			
			被拔出之后,怎么恢复
			
				操作系统通常在一个主core上执行大部分内核引导过程,完成之后再使第二个core online
				二次引导的行为非常类似于将内核热插拔到系统中。
				两种情况下的操作几乎相同。

		动态电压,频率缩放调制
			许多系统在工作负载非常多变的情况下运行。
			有能力降低或提高核心性能,以匹配预期的核心工作量,这将是有用的。
			如果你能在内核不那么忙的时候慢一点时钟,你就能节省动态功耗。
			动态电压和频率缩放(DVFS)是一种利用以下技术,他利用了
				•功耗和工作频率之间的线性关系。
				•功耗和工作电压之间的二次关系。
			
			
			这个关系式为:P=C*V^2*f
				P是动态功率。
				C是相关逻辑电路的开关电容。
				V是工作电压。
				f是工作频率。
			
			关系式解析
			
				通过调节core的频率,使其与当前负载成比例,可以实现节电。
				一些频率可以在较低的电压下使用,并且可以实现净二次型节能。
				如果core运行更慢,其电源电压也会有所降低。
				降低电源电压的优点是可以降低动态和静态功率。
				与快速运行,然后进入待机状态,然后快速运行等替代方案相比,以较低的电源缓慢运行的方法可以节省能源。
			
			
			软件控制参数的工程问题: // SoC要求运行在ARM内核上的软件能够可靠地修改内核的时钟速度和电源电压,而不会在系统中造成问题。
					1.这需要诸如电压电平移位器和芯片上的分离电源来应对可变电源,以及电压域之间的同步器来应对时序变化。
					2.同样重要的是,系统中运行的软件能够准确预测未来的工作负载,从而相应地设置电压和时钟速度。
			
			
			对于给定的系统,可达到的OPP范围统称为系统DVFS曲线。
				给定电路的工作电压与电路可以安全工作的频率范围之间存在特定于实现的关系。
				给定的工作频率及其相应的工作电压表示为元组,称为工作性能点(OPP)。
			
			操作系统对DVFS的应用
				OS使用DVFS来节约能源,并在必要时保持在热限制范围内。
				core上的负载 调节 其工作频率。
				操作系统提供DVFS策略来管理功耗和所需的性能。
				针对高性能的策略选择更高的频率并使用更多的能量。
				旨在节能的政策会选择较低的频率,因此会导致较低的性能。
power相关指令
		WFI/WFE
			WFI 进入Standby后如何被唤醒:
				• An IRQ interrupt, even if the CPSR I-bit is set.
				• An FIQ interrupt, even if the CPSR F-bit is set.
				• An asynchronous abort.
				• A Debug Entry request, even if JTAG Debug is disabled
			WFE 进入Standby后如何被唤醒:
				可以唤醒WFI的所有事件
				由集群中的另一个核心发出信号的事件SEV // SEV向集群中的所有核心发送事件信号。
power 状态 协调 接口 // Power State Coordination Interface // PSCI
		需求来源
			如果管理电源的操作系统想要
				1.进入空闲状态
				2.上/下一个内核的电源
				2.迁移,
			其他特权级别的操作系统必须对此请求做出反应。
		
		
			同样,如果内核被唤醒事件从电源状态唤醒,
				则以其他权限级别运行的操作系统可能需要执行诸如恢复状态之类的操作。
		
		现状
			由于来自不同供应商的操作系统可以在ARM系统中同时执行,因此在执行电源控制时,需要有一种协作方法。
			但是没有免费提供的接口允许各种操作系统之间的互操作和集成。这给操作系统供应商带来了困难。
		
		解决方案
			ARM提供了一个软件接口,即功率状态协调接口(PSCI),这样OSPM就可以在核心没有工作时将其置于低功率状态。
			使用此接口,操作系统和固件可以在大型计算机上实现空闲、热插拔和状态迁移等电源管理技术。
			使用此接口发送的消息由所有相关执行级别接收。
			也就是说,如果实现了虚拟化和安全扩展,富操作系统发送的消息必须由虚拟机监控程序接收。
			如果后者发送消息,则安全固件必须接收该消息,然后与受信任的操作系统进行协调。
			这使每个操作系统能够确定是否需要保存上下文。
		
		
		PSCI指定了以下功能:
			CPU_SUSPEND
				在core上暂停执行。
				此调用用于空闲子系统,其中内核将通过唤醒事件返回执行。
			MIGRATE
				这用于请求单个核心的受信任操作系统将其上下文迁移到特定的核心
			CPU_OFF
				关闭了一个内核的电源。
				此呼叫用于热插拔。
				CPU关闭时断电的内核只能在CPU打开时再次通电
			CPU_ON
				开启一个核心。此调用用于为以下内核供电:
					•尚未启动到调用操作系统。
					•之前因CPU_关闭而断电。