[quote]published on 十二月 17, 2009 2,310 在伺服器上,我們經常會有多個cpu的情況,而此時如果把程序都繫結在乙個cpu上,那麼對資源太多浪費了,下面的**就實現了如何將程式繫結在不同的cpu上。傳入引數代表繫結第幾個cpu(從0開始計算)
//cpu_test.cpp
#include
#include
#include
#include
#include
//#define __use_gnu
#include
#include
#include
int main(int argc, char* argv)
myid = atoi(argv[1]);
printf("system has %i processor(s). \n", num);
cpu_zero(&mask);
cpu_set(myid, &mask);
if (sched_setaffinity(0, sizeof(mask), &mask) == -1)
while (1)
for (i = 0; i < num; i++)}}
return 0;
}//g++ cpu_test.cpp -o cpu_test
下面解釋一下,裡面用到的函式:
首先解釋一下乙個叫cpu親和力(cpu affinity)的概念
cpu親合力就是指在linux系統中能夠將乙個或多個程序繫結到乙個或多個處理器上執行.
乙個程序的cpu親合力掩碼決定了該程序將在哪個或哪幾個cpu上執行.在乙個多處理器系統中,設定cpu親合力的掩碼可能會獲得更好的效能.
乙個cpu的親合力掩碼用乙個cpu_set_t結構體來表示乙個cpu集合,下面的幾個巨集分別對這個掩碼集進行操作:
cpu_zero() 清空乙個集合
cpu_set()與cpu_clr()分別對將乙個給定的cpu號加到乙個集合或者從乙個集合中去掉.
cpu_isset()檢查乙個cpu號是否在這個集合中.
而下面的函式實現了pid繫結對應cpu的過程:
sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)
該函式設定程序為pid的這個程序,讓它執行在mask所設定的cpu上.如果pid的值為0,則表示指定的是當前程序,使當前程序執行在mask所設定的那些cpu上.第二個引數cpusetsize是 mask所指定的數的長度.通常設定為sizeof(cpu_set_t).如果當前pid所指定的cpu此時沒有執行在mask所指定的任意乙個cpu上,則該指定的程序會從其它cpu上遷移到mask的指定的 乙個cpu上執行.
sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)
該函式獲得pid所指示的程序的cpu位掩碼,並將該掩碼返回到mask所指向的結構中.即獲得指定pid當前可以執行在哪些cpu上.同樣,如果pid的值為0.也表示的是當前程序.
ok,到此為止~~~
linux繫結程序到指定cpu
方法之一 top p pidof 程序名稱 方法之二 top p ps h o pid c 程序名稱 如果還要檢視此程序下的各執行緒,可用如下 top h p pidof process 我是分割線 top實時顯示程序在那個cpu上 1 top 2 按 1 實時顯示cpu資訊 3 按 f 進入顯示配...
為程序繫結CPU
taskset 是乙個cpu 調節工具,能夠將系統任務分配至指定的cpu 本文以nodejs為例 第一步,查詢nodejs 程序 pgrep node 19277 19283 第二步,鎖定cpu taskset pc 0 19277 其中0代表cpu0,以此類推 taskset pc 1 19283...
python繫結核心 程序繫結CPU
程序繫結cpu 本文所講述內容僅適用於linux環境 1.cpu親和性 cpu親和性是指程序在某個給定的cpu上長時間執行,盡可能少的遷移到其他處理器的傾向性。linux核心的程序排程器天生就具有這樣的特性,它盡可能保證乙個程序不在處理器之間頻繁的遷移,頻繁的遷移意味著會增加cpu快取miss的概率...