如何在Linux内核(Samsung Exynos5422)中实现异构多处理(HMP)调度?

时间:2014-08-26 04:44:31

标签: linux-kernel scheduling smp odroid hmp

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

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

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

1 个答案:

答案 0 :(得分:11)

代码:

检查#ifdef CONFIG_SCHED_HMP下的源代码主要位于 kernel/sched/core.c


A(不是那样)简要概述:

big.LITTLE 可以在两种操作模式下配置CPU:

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

GTS是非均质的运作形式,即 HMP

在最抽象的级别,目前仅通过扩展 DVFS SMP负载平衡来支持HMP。这两者都充分了解大核(通过LITTLE核心)的性能优势,并相应地安排高优先级,CPU密集型前台任务。

  

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

DVFS extended to handle big.LITTLE cores

  

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

参考:community.arm.com : Ten Things to Know About big.LITTLE