一、介绍
假设一太机器上有8个CPU:
1.1 cpu_possible_map
机器上最多有多少个CPU,包括本机的CPU,以及可以热插拔的CPU。
1. 假设cpu_possible_map为10,本机CPU个数为8个,则最多可以再添加2个可插拔CPU。
1.2 cpu_present_map
当前有多少个CPU。
1. 本机CPU个数为8个,都是online的,则cpu_present_map为8;
2. 再插入1个可插拔CPU,则cpu_present_map为9。
1.3 cpu_online_map
在当前的CPU中,有多少个可用的CPU。
1. 本机CPU个数为8个,都是online的,则cpu_online_map为8;
2. 将其中一个设置为offline,则cpu_online_map变为7。
1.4 for_each_possible_cpu()/for_each_present_cpu()/for_each_online_cpu()
for_each_present_cpu() - Iterate over cpu_possible_map
for_each_online_cpu() - Iterate over cpu_online_map
for_each_possible_cpu() - Iterate over cpu_present_map
二、实例
2.1 代码
#include <linux/module.h>
#include <linux/kernel.h>
static int __init init_marker(void)
{
int i;
printk("init marker.\n");
for_each_possible_cpu(i)
{
printk("possible cpu :%d\n", i);
}
for_each_online_cpu(i)
{
printk("online cpu :%d\n", i);
}
for_each_present_cpu(i)
{
printk("present cpu :%d\n", i);
}
return 0;
}
static void __exit exit_marker(void)
{
printk("exit marker.\n");
}
module_init(init_marker);
module_exit(exit_marker);
MODULE_AUTHOR("gwy");
MODULE_LICENSE("GPL");
MODULE_VERSION("1.0.0");
2.2 结果
1. 插入模块,卸载模块
2. 将cpu1设置为offline,再插入模块,卸载模块
echo 0 > /sys/devices/system/cpu/cpu1/online
参考资料:
Linux内核源码中文档:documentation/cpu-hotplug.txt