【cpu数量】for_each_possible_cpu()/for_each_present_cpu()/for_each_online_cpu()区别

转自:https://blog.csdn.net/guowenyan001/article/details/44224759

一、介绍

假设一太机器上有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 代码

[cpp]  view plain  copy
  1. #include <linux/module.h>  
  2. #include <linux/kernel.h>  
  3.   
  4.   
  5. static int __init init_marker(void)  
  6. {  
  7.         int i;  
  8.   
  9.         printk("init marker.\n");  
  10.   
  11.         for_each_possible_cpu(i)  
  12.         {  
  13.                 printk("possible cpu :%d\n", i);  
  14.         }  
  15.   
  16.         for_each_online_cpu(i)  
  17.         {  
  18.                 printk("online cpu :%d\n", i);  
  19.         }  
  20.   
  21.         for_each_present_cpu(i)  
  22.         {  
  23.                 printk("present cpu :%d\n", i);  
  24.         }  
  25.         return 0;  
  26. }  
  27.   
  28. static void __exit exit_marker(void)  
  29. {  
  30.         printk("exit marker.\n");  
  31. }  
  32.   
  33. module_init(init_marker);  
  34. module_exit(exit_marker);  
  35.   
  36. MODULE_AUTHOR("gwy");  
  37. MODULE_LICENSE("GPL");  
  38. MODULE_VERSION("1.0.0");  

2.2 结果

1. 插入模块,卸载模块


2. 将cpu1设置为offline,再插入模块,卸载模块

        echo 0 > /sys/devices/system/cpu/cpu1/online

猜你喜欢

转载自blog.csdn.net/feifei_csdn/article/details/80819257
cpu