1 概述
CPU亲和性(affinity)就是进程要在某个给定的CPU上尽量长时间地运行而不被迁移到其他处理器的倾向性。SylixOS支持对称多处理器(Symmetric Multi-Processor),其线程是调度的最小单位,SylixOS可以对应用层线程,内核线程以及中断设置CPU亲和性,即将不同线程绑定到不同CPU,充分发挥多核处理器并行处理的优势。
2 SylixOS设置CPU亲和性
SylixOS中每个线程都有一个对应的线程控制块,线程控制块中与CPU亲和性最高的是CPU位掩码,这个位掩码由 n 位组成,与系统中的 n 个逻辑处理器一一对应。 具有 4 个物理 CPU 的系统可以有 4 位。如果这些 CPU 都启用了超线程,那么这个系统就有一个 8 位的位掩码。
如果为给定的进程设置了给定的位,那么这个进程就可以在相关的 CPU 上运行。因此,如果一个进程可以在任何 CPU 上运行,并且能够根据需要在处理器之间进行迁移,那么位掩码就全是 1。这也是SylixOS线程中CPU亲和性的默认状态。
2.1 线程与CPU绑定
SylixOS兼容POSIX标准,应用层线程和内核线程的CPU亲和性设置可以使用POSIX接口。pthread_setaffinity_np函数的第三个参数即为CPU掩码。如程序清单2‑1所示。
程序清单2‑1 线程与CPU绑定
int pthread_setaffinity_np (pthread_t thread, size_t setsize, const cpu_set_t *set)
函数名称: pthread_setaffinity_np
功能描述: 设置线程调度的 CPU 集合
输 入 : p