这几天我在浏览Linux内核代码时,遇到了很多关于内核可能支持的CPU数量的问题。
据我了解,根据架构,内核可以处理一定数量的 CPU。该数字在 Kconfig 文件中指定,并传递给 CONFIG_NR_CPUS 选项。
这是我的 dmesg 输出:
setup_percpu: NR_CPUS:5120 nr_cpumask_bits:240 nr_cpu_ids:240 nr_node_ids:1 RCU restricting CPUs from NR_CPUS=5120 to nr_cpu_ids=240
我的问题是:
为什么
NR_CPUS
这么大?240
nr_cpumask_bits
和nr_cpu_ids
从哪里来?
非常感谢您的帮助
答案1
为什么 NR_CPUS 这么大?
因为真实的 Linux 系统的 CPU 计数是按照这个顺序的。我见过1024 CPU机器的实际测试结果。
我指的不是独立小系统的集群,而是具有多个 CPU 核心的单台计算机,所有计算机都运行一个 Linux 内核。
例如,SGI目前有一个能够扩展至 32 个 CPU 插槽的系统。目前英特尔至强系列的最大核心数为 22 个,这使您可以达到 704 个核心,然后将其增加一倍超线程。从撰写本文到您阅读本文时,该核心限制可能已被超出。
240 个 nr_cpumask_bits 和 nr_cpu_ids 从哪里来?
可能是您的实际硬件的一些限制。即使有两个物理处理器,也需要专门设计的系统来处理。能够支持许多物理CPU芯片的系统需要各种特殊的硬件支持才能使其高效:交叉开关结构,NUMA计划等