CPU Affinity (CPU親合力) 一. 定義: CPU Affinity(親合力), 係指在linux 中,process 想 儘量長時間運行 在某個指定的CPU上 ,且不被轉移至其他CPU 的 傾向性 。 二. 函式 : CPU親合力用一個 cpu_set_t 型態來產生一CPU集合,下面討論 函式 : cpu_set_t cpuset; CPU_ZERO(&cpuset) : 清空 給定變數cpuset 中的 CPU set。 CPU_SET(n, &cpuset) :將CPU n(0~n) 加進 給定變數cpuset集合中。 CPU_CLR( n, &cpuset ) : 將 CPU n 從 給定變數cpuset集合中 移除 。 CPU_ISSET( n, &cpuset ) : 檢 查CPU n 是否存在 於這個 cpuset 集合中. 以下為最重要的兩個 函式 : sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t * cpuset ) ; 該函式將process為pid,丟進名為cpuset 的CPU set中執行。 cpusetsize 即為 cpuset 的長度,通常 設定為sizeof(cpu_set_t)。 若pid給予0,則表示目前的process。 sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t * cpuset ) ; 取得 指定pid的process可以運行在哪些cpu中。 三.pthread 若我們討論的範疇為thread對於CPU的affinity時,我們會改用以下兩個函式: pthread_setaffinity_np(pthread_t thread,size_t cpusetsize,const cpu_set_t *cpuset); 參數差別只在上一個是pid(process),這個是tid(thread)。通常我們會使用 pthread_self() 來表示目前的th read。 回傳值為一int型態;若綁定成功時,會回傳0。 int pthread_