首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以在多核CPU中的特定内核上运行linux内核吗?

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

Stack Overflow用户
提问于 2018-05-13 15:19:24
回答 2查看 2.4K关注 0票数 1

我在做一个脑电波探测装置。我将使用八核ARM处理器进行软件处理。对于CPU核心的管理,我可以编写Linux内核来严格地在一组特定的核心上运行吗?假设是核心1、2和3,但它不应该太严格,因为我还需要在一个单独的核心上生成设备驱动程序(让我们以核心4为例)。那么这样做是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2018-05-13 19:01:29

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

代码语言:javascript
复制
/dts-v1/;

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2018-05-30 04:49:57

还不完全清楚你想要的是什么。

留下未使用的内核?

虽然您可能只使用机器中的一个核心子集就可以启动Linux,但这样做是没有意义的。它回避了一个问题,未使用的内核将做什么?它们对于您在Linux上运行的软件(应用程序或驱动程序代码)是不可用的,因为您引导的Linux没有使用它们。

请记住,核心只是一个CPU,恰好与其他核心位于相同的内存地址空间中。它必须运行一些东西,在它上面运行操作系统块是很正常的。必须有一些运行在管理它的核心上的东西(调度在它上面运行的东西)。您不能只将应用程序线程转储到CPU上,而不需要为其提供操作系统服务。

核心亲和性-

如果您对控制核心亲和性感兴趣,可以使用一些函数来控制哪些线程在哪些核心上运行。尽管我告诫他们-对于您希望支持的每个CPU模型,都有大量的工作要做,而且无论如何,您都很难超越Linux内核所做的工作。我已经尝试过了,与Linux自动完成的功能相比,我只做了很小的改进。这不值得。

实时调度--

你真的在寻找一些实时性能吗?对于Linux,你能做的最好的事情就是像PREEMPT_RT补丁集一样(我认为会变得越来越主流)。

在这个版本的Linux中,设备驱动程序变成了线程,因此可以像其他任何东西一样被抢占。因此,如果你给应用程序/驱动程序线程一个高的实时优先级,它将(几乎)总是赢得内核将要做出的“接下来要调度什么”的决定。PREEMPT_RT还将解决优先级反转问题,因此,如果您的线程被竞争相同资源的较低优先级线程阻塞,内核将尽最大努力解决问题。

如果PREEMPT_RT的延迟对您来说不够低,那么Linux是错误的选择。VxWorks突然浮现在脑海中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50313703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档