2 在big.LITTLE上的软件执行模式
在big.LITTLE上主要有两种执行模式:
Migration: 迁移模式是电源性能管理技术如DVFS的外延。迁移模式有两种类型:
- Cluster迁移;
- Cpu 迁移;
迁移行为与DVFS操作点转换类似。一个core的DVFS曲线操作点遍历响应负载的变化。当当前core或cluster达到最高操作点时,若软件栈要求更高性能,core或cluster的迁移行为生效。然后再另一个core或cluster上继续执行,并遍历此core或cluster上的操作点。当性能没有要求时,执行可以切换回来。
Global Task Scheduling:在全局任务调度时,操作系统任务调度器能够意识到big和LITTLE core在计算容量上的差异。调度器追踪每个独立的软件线程的性能要求,并使用这个信息来决定哪种类型的core来用于那个任务。不使用的core会被下电。这种方式相比迁移模式有很多优势。
2.1 Cluster迁移
只有一个cluster,要么big要么LITTLE,在任何某个时刻是活动的,除了在一个cluster短暂切换到另一个cluster的时候。为了完成最好的电源和性能,软件栈大多数运行在节能的LITTLE cluster上,仅在很短的周期才运行在big cluster上。这个模式要求两个cluster上运行相同数量的core。
该模式无法很好的应对不平衡的软件负载,即在一个cluster上每个core的负载明显不一样。在这种场景下,cluster迁移会导致完全迁移到big cluster,尽管并非所有的core需要这种性能级别。因为这个原因,cluster迁移没有其他方法受欢迎。
2.2 CPU迁移
在这种模式下,每个big core与LITTLE core成对。在成对的core中仅有一个core在某一时刻处于active状态,inactive的core被下电。根据当前负载条件active core被选择。使用下图例子,操作系统可以看到4个逻辑core。每个逻辑core可以为big或LITTLE core。这是由DVFS来选择。这个模式要求cluster中的core数目相同。
系统主动监控每个core上的负载。高负载会导致执行上下文被移到big core上,当低负载时,执行被移动到LITTLE core上。成对的仅一个core在任意时刻能工作。当负载从outbound core移动到inbound core,前者core被关闭。这个模式允许big和LITTLE core的混合运行。
2.3 全局任务的调度
随着big.LITTLE技术的发展,ARM已经将软件模型从各种迁移模式进化到全局任务调度,全局任务调度GTS形成了所有big.LITTLE技术将来发展的基础。ARM实现的GTS成为big.LITTLE多进程(MP)。
在这种模式下,操作系统任务调度器能够意识到big和LITTLE core在计算容量上的差异。使用统计数据,调度器跟踪每个独立软件线程的性能要求,并使用该信息来决定那种core运行那个线程。这个模式可以工作在每个cluster上有任意数据的core的big.LITTLE系统上。如上图所示。这个方法相比迁移模式有很多优势,如:
- 系统可以有不同数目的big和LITTLE core;
- 不像迁移模式,任何数量的core可以在任何时刻被运行。若要求最大性能,这可以增加最大有效的计算容量;
- 可以隔离big cluster用于密度线程的昂贵使用,轻量级的线程可以运行在LITTLE cluster上。这可以让高计算任务完成得更快,因为没有其他后台线程;
- 也可以将独立的中断直接发送到big core或LITTTLE core上。