cpu亲和性相关函数和宏讲解:
写在前面:
- 我在查找关于linux cpu宏函数没看到有对宏函数基础的、详细的讲解,笔者便通过官方文档入手,对次进行的翻译和理解希望能帮到对这方面宏有疑惑的读者
- explain: /elem/ 表示为elem变量,这样子便于区分
P.S:#include <sched.h>
-
动态范围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().
-
基础宏设置
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
-
带_s 的宏多用于对指定函数的扩展,文档里面没有仔细说明,但基础思路应该并无二致,有需要的可在此基础阅读查阅
source:源码