Linux下程序繫結多CPU執行

2021-08-31 12:29:42 字數 1551 閱讀 5122

[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的概率...