【问题标题】:NR_CPUS define translated to 8192 during kernel compilationNR_CPUS 定义在内核编译期间翻译为 8192
【发布时间】:2021-08-28 15:49:57
【问题描述】:

我正在尝试为 Ubuntu 18.04 编译 4.14 Linux 内核,并在代码中做了一些小改动(与讨论无关)。

出于某种原因,NR_CPUS 定义对我来说转换为数字 8192,这是一个太大的数字,而且它会弄乱我的代码。 (我的 Kabylake 机器上只有 4 个 CPU 内核)。为什么这么大?在尝试编译内核之前,我是否错过了配置中的某些内容?如何正确更改定义?

【问题讨论】:

    标签: ubuntu linux-kernel


    【解决方案1】:

    在您的内核树中,检查 arch/x86/Kconfig 以查看您在 menuconfig 中设置的哪些内核选项可能会影响 Kabylake NR_CPUS。根据我这个 Kconfig 的 4.14.2 版本:

    config NR_CPUS
            int "Maximum number of CPUs" if SMP && !MAXSMP
            range 2 8 if SMP && X86_32 && !X86_BIGSMP
            range 2 512 if SMP && !MAXSMP && !CPUMASK_OFFSTACK
            range 2 8192 if SMP && !MAXSMP && CPUMASK_OFFSTACK && X86_64
            default "1" if !SMP
            default "8192" if MAXSMP
            default "32" if SMP && X86_BIGSMP
            default "8" if SMP && X86_32
            default "64" if SMP
            ---help---
              This allows you to specify the maximum number of CPUs which this
              kernel will support.  If CPUMASK_OFFSTACK is enabled, the maximum
              supported value is 8192, otherwise the maximum value is 512.  The
              minimum value which makes sense is 2.
    

    因此,设置 MAXSMP(在 menuconfig 会话中显示为“启用 SMP 处理器和 NUMA 节点的最大数量 [N/y]”)可能会让您达到 8192。请注意,使用 NR_CPUS 您指定的是 最大值 此内核使用的 CPU 数量;预计它不会与您当前的 CPU 计数完全匹配。这应该即时完成。

    【讨论】:

      【解决方案2】:

      直接编辑您的“.config”或使用内核目录中的 menuconfig 更改它(在内核功能下)。 NR_CPUS 仅默认为 4。不知道你是如何结束 8192 的。最好分享你的内核 defconfig 以便可以评论很多

      【讨论】:

        猜你喜欢
        • 2019-01-05
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多