在当前的智能手机和平板电脑中,人们使用动态电压和频率调节 (DVFS) 来适应所需性能的即时变化。big.LITTLE 迁移模式延伸了这一概念,当 LITTLE 核心超过最高 DVFS 运行点时,它会将任务迁移到“big”CPU 核心。这种迁移需要大约 30微秒。相反,DVFS 驱动程序通常每 50 毫秒对操作系统和各个核心的性能进行一次评估,有些实施的采样稍微更加频繁。它需要大约 100 微秒来改变电压和频率。由于迁移 CPU 或集群所需的时间短于 DVFS 更改时间,甚至比 DVFS 更改需要的操作系统评估时间短一个数量级,因此 big.LITTLE 迁移让处理器能够在更低的运行点运行,运行频率更高,而且让用户丝毫察觉不到。
在全局任务调度模型中,DVFS 机制仍然在工作,但操作系统内核调度程序可以识别系统中的 big 和 LITTLE 核心,并设法将高性能线程分配给高性能核心,而将低性能或内存限制的线程分配给高能效核心,从而达到负载平衡。这类似于当前的SMP 负载平衡器,它可在系统中的可用核心之间自动平衡线程,让未使用的核心保持空闲状态。在 big.LITTLE 全局任务调度中,同样的机制仍然在工作,但操作系统会跟踪每个线程的加载历史记录,并且使用这些历史记录,结合实时性能采样,在 big 核心和 LITTLE 核心之间适当平衡线程。
问题 3:在未对 Android 进行任何更改的情况下,它可以在 Android 系统上运行吗?
- big.LITTLE 软件是以 Linux 内核的补丁集形式提供的。在 Android 系统下,它在内核中有效运行。全局任务调度软件(ARM 的“全局任务调试”实施在开源树中称为 big.LITTLE MP)托管在 Linaro git 树上,可供所有用户自由访问,正处在上游提交过程中。该补丁集可以应用于 Android 系统下运行的标准 Linux 内核。ARM 已经在多个开发板上演示了全局任务调度,还与主要合作伙伴在量产芯片上进行了演示,包括在私人活动以及全球移动大会和国际消费电子展上。big.LITTLE 的第一次量产实施使用了集群迁移和 CPU 迁移模式,因为这些系统的软件冻结日期是在 2012 年。全局任务调度预期在 2013 下半年开始在量产系统上应用。
问题 4:big.LITTLE 如何实现更高的性能?
由于存在高效率的 Cortex®-A7 核心,SoC 设计人员可以调节 Cortex-A15 处理器,使其专门用于处理高性能工作负载,同时确信平均功耗可保持在现有移动电源范围内。这使我们能够满负荷地使用较高吞吐量的 Cortex-A15 CPU 来处理突发的高性能,抑制电压和频率,随后再将工作迁移至 LITTLE 核心,以便实现持续的后台性能。
最后,我们还发现,当前的很多重要工作负载(例如网络浏览)会产生一个或两个具有苛刻性能要求的线程(Android 中的 WebViewCoreThread 和 SurfaceFlinger)。big.LITTLE 非常适合处理这种类型的工作负载 – 高性能线程可以各自分配给高性能的 Cortex-A15 CPU,而后台线程可以调度给一个或多个 LITTLE CPU。通过将低性能线程分配给 LITTLE CPU,我们可将高性能核心的整个容量专门用于处理性能要求最苛刻的线程,从而实现更高的整体性能。
只有 big.LITTLE 具有调节微架构的优势,其效率比高性能 CPU 高出三倍以上。
- LITTLE 核心是采用与核心完全不同的微架构构建的,由于本身具备设计简易的特性,LITTLE 核心可以节省功耗,另外还具有电压和频率调整的优势。
- 可以实施核心,以降低耗散功率和提供更适当的性能点,独立于通常调节为高频率运行的核心物理实施。
最终,这意味着 big.LITTLE 提供更好的节能机会,优于单个 CPU 微架构实施。CPU 集群内部的异步 DVFS 具有一些强大优势。我们将异步 DVFS 视为可扩展性能概念的体现,它本身也是一种很好的解决方案。但是,big.LITTLE 技术相比异步 DVFS 具有一定优势。这些技术的并行开发展示了 ARM 生态系统的强大能量 – 它们为了提高在市场上的采用率而展开竞争,与单种架构和实施一统市场相比,这种竞争可以促进每种方法以更快的步伐发展。
问题 6:big.LITTLE 可以在系统级别上提供显著节能吗?
在系统级别上,它可以节省 CPU 子系统的 50% 以上功耗,这是非常可观的节省。与 DVFS、电源门控、时钟门控和保持模式相结合,big.LITTLE 在移动设备的整体电源管理中扮演着重要角色,随着软件电源管理策略的演进,它还将为未来的节能带来机会,可以通过协调的策略,更加密切地协作管理关闭、核心迁移、电压和频率。总之,目前的节能效果非常好,未来还会更好。
高性能应用程序也有低强度的时段,例如在等待用户输入时或 GPU 处于活动状态时。在这些时段内,现有的智能手机 SoC 会调低至较低的 DVFS 点和/或让核心空闲。从下图中,我们可以看出,在运行高清赛车游戏时,DVFS 机制让双核Cortex-A9 CPU 在将近一半时间处于空闲状态,同时在 90% 以上时间在低于 1GHz 的频率下工作。所有这些空闲时段和低频率状态非常适合转移到 LITTLE 核心,即便对于GT Racer 高清游戏这样的高性能工作负载,它也提供了节省能耗的机会。
高性能工作负载也有低强度时段,我们还可以举出很多其他例子。在一个页面呈现之后的网络浏览,在存储器上处于等待状态的高性能任务,等等。由于从 big 核心迁移至 LITTLE 核心的速度极快,即便很短的低强度时段,也可将工作负载转移至 LITTLE CPU,从而节省能耗。
问题 8:为了支持 big.LITTLE,需要更改多少用户级代码?
不需要。使用 big 核心还是 LITTLE 核心由操作系统决定。big.LITTLE 是一种电源管理技术,对于用户级软件是完全不可见的,与动态电压和频率调节 (DVFS) 或多核 SoC 中的 CPU 关闭非常相似。
如果使用 big.LITTLE 的动因是用户空间,则又会有可以利用的机会。用户空间可以知道某个线程对于用户体验是否重要,并允许用户界面线程使用 big CPU,同时阻止后台的线程/应用程序使用 big CPU 等等。其他示例包括在屏幕关闭时阻止使用 big 核心,或者在您知道只能使用 LITTLE 核心进行计算的情况下(例如在通话过程中)锁定线程。用户空间可以提供更多特性,但这些技术都不是必需的,big.LITTLE 也不要求具有用户空间意识以节省能源和提供高性能。
问题 9:big 核心和 LITTLE 核心的数量可以不同吗?
有了全局任务调度,软件可以自动支持不同数量的 big 核心和 LITTLE 核心。这对系统没有任何额外要求,软件可在不同数量和类型的核心之间自动平衡负载。我们预期,随着 big.LITTLE 全局任务调度技术在 2013 下半年开始进行更广泛部署,具有不同数量的 big 核心和 LITTLE 核心的这种非对称系统拓扑将得到更普遍的使用。
问题 10:我听说这种技术很难使用... 它有多复杂?
软件实际上非常简单。无需在用户级别或中间件级别上进行任何代码更改。big.LITTLE 软件完全在内核空间中,以相对较小的补丁集形式提供,并由芯片供应商在电路板和芯片支持库中应用。芯片供应商和 OEM 进行了一些调整,类似于在当前标准多核系统中对 DVFS 运行点和核心关闭策略的调整方式。该补丁位于内核中,因此对于用户是透明的 – 供应商生产芯片并进行调整之后,它就可以工作。