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

nic*_*ico 9 scheduling smp linux-kernel odroid hmp

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

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

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

The*_*ist 11

码:

#ifdef CONFIG_SCHED_HMP主要内部检查源代码kernel/sched/core.c


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

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

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

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

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

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

DVFS扩展为处理big.LITTLE核心

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

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