我正在尝试为Ubuntu 18.04编译4.14 Linux内核,并对代码做了一些小改动(与讨论无关)。
出于某种原因,NR_CPUS
定义对我来说转换为8192,这个数字太大了,它弄乱了我的代码。 (我的Kabylake机器上只有4个CPU内核)。为什么这么大?在尝试编译内核之前,我是否错过了配置中的某些内容?如何正确更改定义?
答案 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数量不完全匹配。那应该是即时完成的。
如果能为您解决,请记住将其标记为正确答案-谢谢。