1. 什么是綁核?
所謂綁核,其實就是設定某個進程/線程與某個CPU核的親和力(affinity)。設定以后,Linux調度器就會讓這個進程/線程只在所綁定的核上面去運行。
但並不是說該進程/線程就獨占這個CPU的核,其他的進程/線程還是可以在這個核上面運行的。如果想要實現某個進程/線程獨占某個核,就要使用cpuset命令去實現。
其實,很多情況下,為了提高性能,Linux調度器會自動的實現盡量讓某個進程/線程在同樣的CPU上去運行。所以,除非必須,我們沒有必要顯式的去進程綁核操作。
2. 如何綁核?
taskset用於將某個進程/線程綁定到CPU的某個或某幾個核上面,其用法如下:
taskset -p pid
可以查出進程pid現在的綁核情況。
設置綁核有兩種方法,一種是掩碼形式,一種是直接綁定。下面分別介紹:
2.1 掩碼形式綁核
按照二進制形式,從最低位到最高位代表物理CPU的#1、#2、……、#n號核。
比如:0x00000001代表CPU的0號核,0x00000003代表CPU的0號和3號核。
需要注意的是,並非掩碼中給出的CPU核就一定會存在,比如0x00000400理論上代表CPU的第10號核,但是該核在真正的計算機上面並不一定是存在的。而且,如果我們試圖將物理上並不存的核綁定給某個進程時,會返回錯誤。掩碼形式的綁核命令為:
taskset -p mask pid
2.2 按CPU數直接綁核
taskset -cp cpu-list pid
其中cpu-list是數字化的cpu列表,從1開始。多個不連續的cpu可用逗號連接,連續的可用短現連接,比如1,2,5-11等。
比如“taskset -cp 1,2,5-11 9865”命令表示將進程9864綁定到#1、#2、#5~#11號核上面。
轉自:http://time-track.cn/taskset-command.html