cpu亲和性相关函数和宏 基础讲解[cpu_set_t]

发布时间 2023-10-15 17:17:03作者: io_T_T

cpu亲和性相关函数和宏讲解:

写在前面:

  1. 我在查找关于linux cpu宏函数没看到有对宏函数基础的、详细的讲解,笔者便通过官方文档入手,对次进行的翻译和理解希望能帮到对这方面宏有疑惑的读者
  2. explain: /elem/ 表示为elem变量,这样子便于区分

P.S:#include <sched.h>

  1. 动态范围cpu设置
    /**
    * @description: 因为某些应用程序需要动态大小的cpu集合;如今GLIBC提供了一套宏支持这一点
    *  以下函数用来分发和释放cpu集合
    */
           cpu_set_t *CPU_ALLOC(int num_cpus);
                  分配足够大的 CPU 集以容纳该(动态)范围内的 CPU
                  该动态集合范围为: 0 到 num_cpus-1
    ​
           size_t CPU_ALLOC_SIZE(int num_cpus);
                  返回cpu集合的大小,但前提范围是合法的【0 to num_cpus-1】,
                  这个宏提供了能够设置CPU _*_ s()宏中的参数etsize的值 
    ​
           void CPU_FREE(cpu_set_t *set);
                  释放cpu集 CPU_ALLOC().
  2. 基础宏设置
     1 /**
     2 * @description: 这些宏被用来提供对CPU集合 set 的设置
     3 */
     4        void CPU_ZERO(cpu_set_t *set);
     5               清除设置,让/set/集合不包含cpu
     6  7        void CPU_SET(int cpu, cpu_set_t *set);
     8               添加/cpu/到/set/集合
     9 10        void CPU_CLR(int cpu, cpu_set_t *set);
    11               从集合/set/中 移除指定/cpu/ 
    12 13        int  CPU_ISSET(int cpu, cpu_set_t *set);
    14               测试以查看CPU /cpu/是否是集合/set/的成员
    15 16        int  CPU_COUNT(cpu_set_t *set);
    17               返回集合/set/中有多少个cpu【应该是cpu的数量?】
    18         /**系统中第一个cpu对应的/cpu/值为0,第二个cpu的索引/cpu/值为1,以此类推
    19          *不应该对 特定的CPU值的可用 或者 CPU连续的集合是连续 进行假设,因为CPU可以动态脱机或以其他方式不存在
    20 /**
    21 * @description: 这些宏被用来提供对CPU集合 set 的逻辑操作
    22 */ 
    23        void CPU_AND(cpu_set_t *destset,
    24                     cpu_set_t *srcset1, cpu_set_t *srcset2);
    25               将/srcset1/和/srcset2/的 交集 存储在/destset/【可能是源集之一(当srcset1 == srcset2)】
    26 27        void CPU_OR(cpu_set_t *destset,
    28                     cpu_set_t *srcset1, cpu_set_t *srcset2);
    29               将/srcset1/和/srcset2/的 并集 存储在/destset/【可能是源集之一(当
    30 31        void CPU_XOR(cpu_set_t *destset,
    32                     cpu_set_t *srcset1, cpu_set_t *srcset2);
    33              将/srcset1/和/srcset2/的 异或集【XOR】 存储在/destset/ 
    34              XOR意思是,/srcset1/和/srcset2/中有其中一个(集合)存在的信息,另一个(集合)不存在的信息,所有符合这些的信息将被存放于接收集合/destset/ 
    35 36        int  CPU_EQUAL(cpu_set_t *set1, cpu_set_t *set2);
    37               测试两个集合/set1/和/set2/中是否有相同的CPU
    38               // return 1 it mean equal, 0 for unequal
  3. 带_s 的宏多用于对指定函数的扩展,文档里面没有仔细说明,但基础思路应该并无二致,有需要的可在此基础阅读查阅

    source:源码