Linux:taskset 查詢或設置進程(線程)綁定CPU(親和性)

Linux:taskset 查詢或設置進程(線程)綁定CPU(親和性)

通過 taskset 命令可將某個進程與某個CPU核心綁定,使得其僅在與之綁定的CPU核心上運行。

線程是最小的內核執行調度單元,因此,準確地說是將某個線程與某個CPU核心綁定,而非某個進程。
taskset 是依據 線程PID(TID)查詢或設置線程的CPU親和性(與哪個CPU核心綁定)。

查詢 PID(TID)= 11498 的線程可用的CPU核心
[test1280@localhost ~]$ taskset -pc 11498
pid 11498's current affinity list: 0-3

由於當前主機僅有4個核心:

[test1280@localhost ~]$ cat /proc/cpuinfo | grep process
processor	: 0
processor	: 1
processor	: 2
processor	: 3

默認情況下,TID=11498的線程可以運行在任意的CPU核心上(0-3)。

-p, --pid operate on an existing PID and not launch a new task
-c, --cpu-list specify  a  numerical  list  of  processors instead of a bitmask. 
               The list may contain multiple items, separated by comma, and ranges.
               For example, 0,5,7,9-11.

查詢 PID(TID)= 11498 的線程可用的CPU核心,掩碼形式表示
[test1280@localhost ~]$ taskset -p 11498
pid 11498's current affinity mask: f

0x0F(十六進制) => 1111(二進制),最右起第一個1表示CPU核心#1,第二個1表示CPU核心#2…


設置 PID(TID)= 11498 的線程可用的CPU核心到#0、#2上
[test1280@localhost ~]$ taskset -pc 0,2 11498
pid 11498's current affinity list: 2
pid 11498's new affinity list: 0,2

設置 PID(TID)= 11498 的線程可用的CPU核心到除#0之外的核心上,掩碼形式表示
[test1280@localhost ~]$ taskset -p 7 11498
pid 11498's current affinity mask: 5
pid 11498's new affinity mask: 7

原來的是0、2,即0101(掩碼十進制5),現在的是0111,即掩碼十進制7。


taskset 不僅可通過PID查詢運行中的線程的CPU親和性,也可以運行一個新的進程。

可參考 man taskset 或執行 taskset -h。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章