1.arm big.little 架构
传统的arm多核系统一般都是对称性质的 所以可以常见CPU的架构为双核A9 四核A7等。随着移动设备高速发展,arm开始推出了非对称式的cpu架构。例如:双核A53和双核A72混合封装到SOC上,这样的形式一般称为big.little架构。第一个在商业上使用这个架构的CPU是三星samsung exynos 5410,这款芯片用在了三星 Samsung Galaxy s4这款手机上。
2.cluster switch 调度
最开始实现中 big.little使用cluster切换策略,架构相同的几个CPU被划分为一个cluster,在同一时刻要么是高性能的大核CPU cluster在运行 要么是低性能但低功耗的小核CPU cluster在运行,在cpu cluster互相切换时 ,有一个严重的缺点:CPU之间要保持缓存一致性,切换开销太大,并且同一时刻只能选在大核/或者小核,如果所有的大核CPU都在激活状态会造成功耗过高,所以cluster switch程序在大小核之间切换但是并没有像人们希望的节省更多电量。
cluster调度在Adroid 4.2.2 上是默认调度器,主要在三星的exynos cpu系列平板/手机和一些国际上的手机上使用
3. IKS调度
linaro开发者设计了IKS调度器, IKS将一个大核和一个小核组织成了一个虚拟的VCPU,多个VCPU之间形成了对称的结构 所以可以使用经典的SMP调度算法在VCPU之间进行调度 ,任务在VCPU 内部通过CPU load指标来决定应用是在大核上运行还是在小核上运行。IKS调度允许了大核和小核混合使用,但是仍存在很大的局限性:
同一时刻仍有一半的CPU没有运行。
无法处理不平衡的大小核系统。如四核A53和双核A72
IKS补丁进入了3.10 Linaro稳定内核 和3.14 Linux主线 但是谷歌Android没有采用。
4.GTS调度
在GTS调度模型中,操作系统任务调度器能够分辨大核和小核之间计算容量的差异,利用统计数据,调度器跟踪每个软件线程的性能需求,并将该信息决策当前任务应该使用哪种类型的核心。与IKS调度模型相比,这种方法有许多优点:
这个模型可以在一个集群中有任意数量的小核统,适应非平衡式的大小核结构
如果需要最大性能 任何核都可以在任意候都处于活动状态,这增加可用的最大CPU容量。
可以更好的做到负载均衡
GTS调度在三星Galaxy S4 / S5 以及chrombooks 设备上得到应用,但是由于这些修改对于非ARM架构的kernel 代码影响较大,所以这个调度算法被linux主线拒绝 无法合入mainline.
5. EAS调度
EAS是一系列的内核扩展,它引入了一个基于能量的功率性能控制和任务调度模型,现代调度器将会是功率控制的焦点。eas调度的目标是使用调度策略和一系列优秀的调试设施来简化功率和性能控制,下一篇文章将会重点介绍EAS的原理和机制。
PS:翻译+学习笔记