9

有人知道如何在 Linux 内核调度程序中实现异构多处理 (HMP) 调度吗?

这已在随 ODROID-XU3 板提供的内核中实现。( https://github.com/hardkernel/linux.git -b odroidxu3-3.10.y-android )

我大致知道它会计算某个进程的负载,并根据该负载重新调度到更快或更慢的 CPU。我正在寻找更详细的解释,如果可能的话,实现此功能的函数的代码位置。

4

1 回答 1

12

代码:

#ifdef CONFIG_SCHED_HMP签出主要在下面的源代码kernel/sched/core.c


一个(不是这样)简要概述:

big.LITTLE CPU 可以配置为 2 种操作模式:

  • IKS在内核切换器中(也称为CPU 迁移
  • GTS -全局任务调度(也称为big.LITTLE MP

GTS 是异构的操作形式,即HMP

在最抽象的层面上,目前通过简单地扩展DVFSSMP 负载均衡来支持 HMP 。两者都充分意识到大核心(相对于小核心)的性能优势,并相应地安排高优先级、cpu 密集型的前台任务。

动态电压和频率缩放 (DVFS) 用于适应所需性能的瞬时变化。big.LITTLE 的迁移模式通过在 LITTLE 内核的最高 DVFS 操作点之上实现向“大”CPU 内核的过渡扩展了这一概念。迁移大约需要 30 微秒。相比之下,DVFS 驱动程序通常每 50 毫秒评估一次操作系统和单个内核的性能,尽管某些实现的采样频率稍高一些。改变电压和频率大约需要 100 微秒。因为迁移 CPU 或集群所需的时间比 DVFS 更改时间短,并且比 DVFS 更改的 OS 评估期短一个数量级,所以 big.LITTLE 转换将使处理器能够以更低的操作点更频繁地运行, 并进一步,

DVFS 扩展以处理 big.LITTLE 内核

在 Global Task Scheduling 模型中,DVFS 机制仍在运行,但操作系统内核调度器知道系统中的 big 和 LITTLE 内核,并寻求将高性能线程负载平衡到高性能内核,以及低性能或内存将线程绑定到高效核心。这类似于今天的 SMP 负载平衡器,它会自动平衡系统中可用内核之间的线程,以及闲置未使用的内核。在 big.LITTLE 全局任务调度中,运行相同的机制,但操作系统会跟踪每个线程的负载历史记录,并使用该历史记录和实时性能采样来适当地平衡大核和小核之间的线程。

参考:community.arm.com:关于 big.LITTLE 的十件事

于 2014-08-26T06:48:08.740 回答