为了提高电池的使用寿命,为了节省功耗,linux引入了DVFS。而为了应用程序的性能,Linux 又引入了PM QoS。下图是linux kernel power 管理中PM QOS和DVFS相关的架构图。
LinuxKernel Power Management
DVFS: 动态调整电压和频率技术,包括CPU,DDR,GPU,DSP,BUS等的电压,频率的动态调整。其目的是为了省电。CPUfreq:DVFS for CPU Core。Devfreq:DVFS for other devices。
PM-QOS:Quality of Service。简单的说提供在省电和performance之间提供协调机制。
工作流程
PM QoS简单的说提供在省电和performance 之间提供协调机制。我们知道,Linux PM的主要功能,是节省功耗,但同时,会付出一定的性能代价,例如延迟(latency)增加、吞吐量(throughput)下降。而PMQoS 便解决这个问题的一种技术。
kernel将“系统各个实体对QoS的期望”抽象为一个一个的constraint,围绕这些constraint,可以将系统的实体分为三类:client、pm qosframework和service。示意图如下:
Client提出对QoS的constraint。常见的client包括应用进程、GPUdevice、netdevice、flashdevice等,它们基于自身的实际特性,需要系统的QoS满足一定的条件,才能正常工作。
PM QoS core负责汇整、整理这些constraint,并根据实际情况,计算出它们的极值(最大或者最小)。
QOS service在需要的时候从PMQoS core处获取constraint的极值,并确保自身的行为,可以满足这些constraints。如cpuidle,runtime pm,pm domain等。
PM QoS framework将constraint分为2类,每一类包括若干个constraint,具体如下。
1)系统级的constraint,包括cpu&dmalatency、networklatency、networkthroughput和memorybandwidth 4个constraint。
2)设备级别的constraint,包括从低功耗状态resume的latency、active状态的latency和一些QoS flag(如是否允许poweroff)。
为了节省功耗,所有的设备都工作在DVFS模式下,即所有的设备都不是工作在最高clock下,只有在需要时其clock才工作在较高的频率从而满足App的性能要求。而DVFS主要有下面的perfissue.
Issue 1: 调整频率太慢而导致性能问题。
Issue 2: 在有大量资源需求的时候,不能及时Bursts
Issue 3: 不对称的依赖关系
这里有两种可能的solution.
下面是典型的QoS应用,在其应用或driver中我们增加QoS request。
Issue1 “Touchscreen Event” CPU 提频到1GHz
àCPUfreq runs CPU at 1GHz
Issue 2 “Video Decoding” QoS request DMA 吞吐量2.4GB,提高其DDR clock,CPU 提频到500MHz。
àQoS request “DMA throughput of 2.4GB/s”
àCPUfreq runs CPU at 500MHz
No PM QoS request 示意图
PM QoS DVFS 示意图