我们可以在多核CPU的特定内核上运行linux内核吗?

时间:2018-05-13 07:19:24

标签: multithreading linux-kernel artificial-intelligence embedded-linux multicore

我正在制作脑波检测设备。 我将采用Octa-Core ARM处理器进行软件处理。 对于CPU内核的管理,我可以将Linux内核编码为严格在特定的内核集上运行吗?让我们说核心1,2和3。 但它不应该太严格,因为我还需要在单独的核心上生成设备驱动程序(让我们拿核心4)。 那么有可能这样做吗?

2 个答案:

答案 0 :(得分:1)

其中一种方法是使用设备树。如您所知,内核对硬件一无所知,因此在启动时,它会从描述硬件的设备树中检索信息。 Here,您可以找到一些基本信息。但是,在设备树中,应该有这样的部分:

/dts-v1/;

/ {
    compatible = "acme,coyotes-revenge";

    cpus {
        cpu@0 {
            compatible = "arm,cortex-a9";
        };
        cpu@1 {
            compatible = "arm,cortex-a9";
        };
    };
};

尝试通过添加/删除设备树中的节点来描述要使用的硬件。

答案 1 :(得分:1)

你所要求的并不完全清楚。

没有使用内核?

虽然您可能只能使用计算机中的一部分核心来启动Linux,但没有必要这样做。它引出了一个问题,未使用的核心将会做什么?它们无法用于您在Linux上运行的软件(应用程序或驱动程序代码),因为您启动的Linux并未使用它们。

请记住,核心只是一个与其他核心位于同一内存地址空间的CPU。它必须运行一些东西,并且在其上运行大量的操作系统是正常的。必须在核心上运行一些东西来管理它(安排在它上面运行的东西)。您无法将应用程序线程转储到CPU上,而无需为其提供OS服务。

核心亲和力?

如果您对控制核心关联性感兴趣,可以使用其功能来控制哪些线程在哪些核心上运行。虽然我提醒他们 - 对于你希望支持的每个CPU模型,要做很多工作,但是你真的很难击败Linux内核所做的事情。我尝试过,并且对Linux自动完成的改进只做了很小的改进。这不值得。

实时安排?

你真的在寻找一些实时表现吗?你可以用Linux做的最好就像PREEMPT_RT补丁集(我认为它变得更加主流)。

使用这个版本的Linux,设备驱动程序成为线程,因此可以像其他任何东西一样可以预先设置。因此,如果您为应用程序/驱动程序线程提供高实时优先级,它将(几乎)总是赢得"接下来要安排的内容"决定内核将要做什么。 PREEMPT_RT还将解决优先级倒置问题,因此如果您的线程被争用相同资源的较低优先级线程阻止,内核将尽力解决问题。

如果PREEMPT_RT的延迟不够低,Linux就是错误的选择。我想起了VxWorks。

相关问题