概述

现在软件在移动系统中存在许多冲突性需求。一方面是对游戏等任务的高性能要求,另一方面是对音频播放等低强度应用的节能要求。
传统上,单处理器设计不可能既具有高峰值性能又具有高能效。这意味着大量能源被浪费,因为高性能的核心将用于低强度任务,导致电池寿命缩短。性能本身会受到堆芯可以持续运行的热极限的影响。
ARM的big.LITTLE技术就解决了这一问题,将小内核的能耗和大内核的高性能结合在一起。bit.LITTLE是一个异构系统的例子。这类系统通常包括几种不同的处理器类型和不同的微体系结构,如通用处理器和专用ASIC。
大小核将这种异构性更进一步,因为它包含了在微体系结构上不同但在指令集体系结构上兼容的通用处理器。通常用于此类系统的术语是异构多处理(HMP)(参见第14-8页的异构多处理)。HMP与非对称多处理(AMP)(第14-7页非对称多处理)的不同之处在于,HMP系统中的所有处理器都是完全一致的,并且运行相同的操作系统映像。
根据性能要求,软件可以在大型或小型处理器(或两者)上运行。当需要最高性能时,软件可以移动到仅在大型处理器上运行。对于正常任务,软件可以在小型处理器上完美运行。通过这个组合,大小核提供的解决方案能够在系统的热边界内,以最大的能效提供最新移动设备所需的峰值性能。

1、大小核系统结构

两种类型的核心都在一个大小核系统中,缓存一致,并共享相同的指令集体系结构(ISA)。相同的应用程序二进制文件在可以在任意系统上运行。处理器内部微体系结构的差异使它们能够提供不同的功率和性能特征,这是大小核处理器的基础概念。它们通常由操作系统管理。

大小核软件模型需要在大集群和小集群之间进行透明和高效的数据传输。硬件一致性使这一点对软件透明。集群之间的一致性由缓存一致性互连(如ARM CoreLink)提供,如第14章中描述的CCI-400。如果没有硬件一致性,大核和小核之间的数据传输总是通过主内存进行的,但这会很慢,而且不节能。此外,它还需要复杂的缓存管理软件,以实现大小集群之间的数据一致性。

此外,这样的系统还需要一个共享中断控制器,如GIC-400,使中断能够在集群中的任何核心之间迁移。所有内核都可以使用分布式中断控制器(如CoreLink GIC-400)相互发送信号。任务切换通常完全在OS调度器中处理,并且对应用程序软件不可见。示例系统如图16-1所示

big little架构 big.little混合架构_体系结构

1.1 大小核配置

许多大小核配置是合理的,图16-1使用Cortex-A57核心作为大集群,Cortex-A53核心作为小集群,尽管其他配置也是可能的。这个小集群能够处理大多数低强度任务,例如音频播放、网页滚动、操作系统事件,以及其他始终打开、始终连接的任务。因此,在运行游戏或视频处理等高强度任务之前,软件堆栈可能会一直保留在小集群中。
大型集群可用于繁重的工作负载,例如某些高性能游戏图形。网页呈现是另一个常见的例子。这两种集群类型的耦合为节省能源和满足移动设备中应用程序堆栈不断增长的性能需求提供了机会。

2、大小核的软件执行模式

有下列两种执行模式:

迁移:迁移模型是DVFS等电源性能管理技术的自然延伸(见第15-6页的动态电压和频率缩放)。迁移模式有两种类型:1、群集迁移 2、CPU迁移
迁移操作类似于DVFS操作点转换。堆芯DVFS曲线上的操作点会根据负载变化进行遍历。当当前核心(或群集)达到最高操作点时,如果软件堆栈需要更高的性能,则会执行核心(或群集)迁移操作。然后在另一个核心(或集群)上继续执行,并遍历该核心(或集群)上的操作点。当不需要性能时,可以切换回执行。

全局任务调度:在全局任务调度(参见第16-5页的全局任务调度)中,操作系统任务调度程序知道大小核之间计算能力的差异。调度器跟踪每个软件线程的性能需求,并使用该信息来决定每个线程使用哪种类型的内核。可以关闭未使用的核心。与迁移模型相比,这种方法有许多优点。

2.1 群集迁移

在任何时候,只有一个集群(大集群或小集群)处于活动状态,除非在集群上下文切换到另一个集群的过程中非常短暂。为了实现最佳的功率和性能效率,软件栈主要在节能的小型集群上运行,在大型集群上只运行很短的时间。此模型要求两个集群中的核心数量相同。该模型不能很好地处理不平衡的软件工作负载,即在集群内的核心上放置显著不同负载的工作负载。在这种情况下,集群迁移会导致完全切换到大型集群,尽管并非所有的核心都需要这种级别的性能。因此,集群迁移不如其他方法受欢迎。

2.2 CPU迁移

在这个模型中,每个大核与一个小核配对。每对中只有一个磁芯在任何时候处于活动状态,非活动的磁芯断电。根据当前负载条件选择对中的有源铁芯。使用第16-5页图16-2中的示例,操作系统可以看到四个逻辑核。每个逻辑核在物理上可以是一个大核或小核。这种选择是由动态电压和频率缩放(DVFS)驱动的。该模型要求两个集群中的核心数量相同。

big little架构 big.little混合架构_任务调度_02


系统主动监控每个核心上的负载。高负载导致执行上下文移动到大核心,反之,当负载低时,执行移动到小核心。在任何时候,配对中只能有一个核心处于活动状态。当负载从出站core(负载离开的core)移动到入站core(到达的core)时,前者已关闭。该模型允许在任何时候混合使用大小核。

2.3 全局任务调度

通过发展大小核技术,ARM已经发展了软件模型,从各种迁移模型开始,一直到全局任务调度(GTS),这是所有未来技术开发的基础。GTS的ARM实现称为大小核多处理(MP)。

big little架构 big.little混合架构_任务调度_03


在这个模型中,操作系统任务调度器知道大小核之间计算能力的差异。调度器使用统计数据跟踪每个软件线程的性能需求,并使用该信息来决定每个线程使用哪种类型的内核。该模型可以在任何集群中具有任意数量内核的大小核系统上工作。如第16-5页图16-3所示。与迁移模型相比,这种方法有许多优点,例如:

  • 系统可以有不同数量的大小核心数量
  • 与迁移模型不同,任意数量的内核可以在任何时间处于活动状态。如果需要峰值性能,这可以增加可用的最大计算容量
  • 可以隔离大集群以专用于密集线程,而轻线程则在小集群上运行。这使得繁重的计算任务能够更快地完成,因为没有额外的后台线程
  • 可以将中断单独定位到大核或小核

3、big.LITTLE MP

对于Linux内核上的大小核MP,基本要求是调度器决定软件线程何时可以在小内核或大内核上运行。调度器通过将软件线程的跟踪负载与可调负载阈值、向上迁移阈值和向下迁移阈值进行比较来实现这一点,如图16-4所示。

big little架构 big.little混合架构_arm_04


当当前分配给小内核的线程的跟踪平均负载超过向上迁移阈值时,该线程被认为有资格迁移到大内核。相反,如果当前分配给大内核的线程的平均负载低于向下迁移阈值,则认为该线程有资格迁移到小内核。大小核MP中这些基本规则管理大内核和小内核之间的任务迁移。在集群中,标准的Linux调度器负载平衡依然适用。这会尝试在一个集群中的所有核心之间保持负载平衡。

该模型通过根据堆芯的当前频率调整跟踪负载度量来细化。当堆芯以半速运行时正在运行的任务,将以堆芯全速运行时的一半速率累积跟踪负载。这使得大小核MP和DVFS管理层协调合作。

3.1 Fork迁移

当使用fork系统调用创建新的软件线程时,这会运行。此时,显然没有历史负载信息可用。系统默认为新线程使用一个大内核,前提是由于唤醒迁移,一个轻线程会快速向下迁移到一个小内核。Fork迁移有利于高要求的任务,而且成本不高。低强度和持久性的线程,例如Android系统服务,在创建时只会移动到大内核,然后快速移动到更合适的小内核。整个过程中要求很高的线程不会因为先在小内核上启动而受到惩罚。偶尔运行但往往需要性能的线程从在大型集群上启动并根据需要继续在那里运行中受益匪浅。

3.2 唤醒迁移

当以前空闲的任务准备好运行时,调度器必须决定哪个集群执行该任务。在大和小之间选择,大小核MP使用任务的跟踪加载历史记录。通常,假设任务恢复到与以前相同的集群上。对于正在休眠的任务,不会更新负载度量。因此,当调度器在唤醒时检查任务的负载度量时,在选择集群执行它之前,该度量具有任务上次运行时的值。这个属性意味着,足够繁忙的任务总是倾向于在一个大核心上醒来。例如,音频播放任务周期性地繁忙。但这通常是一项要求不高的任务,因此总体负载可以舒适地安装在一个小核心上。任务必须实际修改其行为才能更改集群。

big little架构 big.little混合架构_任务调度_05


big little架构 big.little混合架构_体系结构_06


如果任务修改了其行为,并且负载指标超过了向上或向下迁移阈值,则可以将该任务分配给其他集群。图16-5和图16-6说明了该过程。定义的规则确保大内核通常只运行一个密集型线程,并将其运行到完成,因此向上迁移只发生在空闲的大内核上。向下迁移时,此规则不适用,可以将多个软件线程分配给一个小内核。

3.3 强制迁移

强制迁移处理长时间运行的软件线程不睡眠或不经常睡眠的问题。调度器定期检查每个小内核上运行的当前线程。如果跟踪的负载超过向上迁移阈值,任务将转移到一个大内核,如图16-7所示。

big little架构 big.little混合架构_体系结构_07

3.4 空闲导致迁移

空闲拉迁移旨在充分利用活动的大内核。当大内核没有要运行的任务时,将对所有小内核进行检查,以查看小内核上当前正在运行的任务的负载度量是否高于向上迁移阈值。这样的任务就可以立即迁移到空闲的大内核。如果没有找到合适的任务,那么大内核可以断电。这项技术确保了大型内核在运行时始终承担系统中最密集的任务,并一直运行到完成。

3.5 卸载迁移

卸载迁移要求禁用常规计划程序负载平衡。这样做的缺点是,长时间运行的线程可能会将精力集中在大内核上,而使小内核处于空闲状态且未得到充分利用。在这种情况下,通过利用所有内核,可以明显提高系统的总体性能。卸载迁移可以定期将线程向下迁移到小内核,以利用未使用的计算容量。以这种方式向下迁移的线程如果在下一个调度机会超过阈值,则仍然是向上迁移的候选线程。