Linux 内核中的 nr_cpu_ids 与 NR_CPUS

md.*_*mal 3 c linux smp linux-device-driver linux-kernel

我试图了解 Linux 内核支持多少个处理器。

grep NR_CPUS /boot/config-`uname -r`
Run Code Online (Sandbox Code Playgroud)

将为我提供内核支持的最大处理器数量,我可以使用内核命令行参数 nr_cpus 覆盖该数量。

要查找在线 cpu 的数量,我可以使用 num_online_cpus() 函数

那么nr_cpu_ids是什么?

#include <linux/kernel.h>
#include <linux/module.h>

MODULE_LICENSE("GPL");


static int __init test_hello_init(void)
{
    pr_info("%s: In init NR_CPUs=%d, nr_cpu_ids=%d\n", __func__, NR_CPUS, nr_cpu_ids);
    pr_info("Number of cpus available:%d\n", num_online_cpus());
    return -1;
}

static void __exit test_hello_exit(void)
{
    pr_info("%s: In exit\n", __func__);
}

module_init(test_hello_init);
module_exit(test_hello_exit);

[11548.627338] test_hello_init: In init NR_CPUs=8192, nr_cpu_ids=128
[11548.627340] Number of cpus available:6
Run Code Online (Sandbox Code Playgroud)

NR_CPU 和 ncr_cpu_ids 之间有什么区别。它们不一样吗?

小智 5

nr_cpu_ids是机器中 CPU 或处理器的总数,而NR_CPUS是 Linux 操作系统可以处理的 CPU 总数。