内核编译期间将NR_CPUS定义转换为8192

时间:2019-01-20 12:37:21

标签: ubuntu linux-kernel

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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,您要指定最大。 strong>此内核使用的CPU数量;它可能与您当前的CPU数量不完全匹配。那应该是即时完成的。

如果能为您解决,请记住将其标记为正确答案-谢谢。