在多核x86处理器中设置亲和性

时间:2009-06-15 06:53:55

标签: assembly multicore smp affinity

(我问,因为它是在我学习操作系统的严重SMP和多核之前。我喜欢对代码的执行方式有所了解。)

如果我有一个多核x86 CPU直接启动到我的程序中。有人可以推荐一个网站来描述我必须控制亲和力的汇编命令吗?

2 个答案:

答案 0 :(得分:5)

亲和力不是由CPU状态决定的,因此不能通过程序集(单独)进行修改。您需要参与操作系统。每个操作系统都会有一个特定的调用来执行此操作。

操作系统将执行的操作:操作系统将具有调度程序,该调度程序实际上是一个程序,用于确定在哪个处理器上运行哪个进程。通过将亲缘关系设置为用户,可以配置此调度程序。

如果你没有操作系统(这个问题似乎意味着我认为),那么你自己编写调度程序,你将拥有自己的配置控制权,你可能会从全局运行队列开始,为每个处理器(核心)观察此runqueue,并检索从其运行的进程。

那么这是如何工作的呢?在引导期间,只有一个CPU正在运行。如果您已经为操作系统做好了准备,那么您将“启动”其他开始执行代码的CPU,这些CPU可能会运行一种调度程序。

有关示例实现,请参阅Linux 2.6.29 arch / x86 / kernel / smpboot.c函数do_boot_cpu(),它使用API​​C以多种方式使CPU联机。

答案 1 :(得分:0)

这里有一个很好的解释QNX如何做到这一点。它没有提供所需的ASM(无论如何都依赖于平台),但它可能有助于概念:

http://www.embedded.com/columns/technicalinsights/183702309?_requestid=408789

以及来自同一网站的一系列文章

http://www.embedded.com/products/integratedcircuits/173400008?_requestid=409058