Linux:taskset 查詢或設(shè)置進(jìn)程(線程)綁定CPU(親和性)
Linux:taskset 查詢或設(shè)置進(jìn)程(線程)綁定CPU(親和性)
通過(guò) taskset 命令可將某個(gè)進(jìn)程與某個(gè)CPU核心綁定,使得其僅在與之綁定的CPU核心上運(yùn)行。
線程是最小的內(nèi)核執(zhí)行調(diào)度單元,因此,準(zhǔn)確地說(shuō)是將某個(gè)線程與某個(gè)CPU核心綁定,而非某個(gè)進(jìn)程。
taskset 是依據(jù) 線程PID(TID)查詢或設(shè)置線程的CPU親和性(與哪個(gè)CPU核心綁定)。
查詢 PID(TID)= 11498 的線程可用的CPU核心
[test1280@localhost ~]$ taskset -pc 11498
pid 11498's current affinity list: 0-3
由于當(dāng)前主機(jī)僅有4個(gè)核心:
[test1280@localhost ~]$ cat /proc/cpuinfo | grep process
processor : 0
processor : 1
processor : 2
processor : 3
默認(rèn)情況下,TID=11498的線程可以運(yùn)行在任意的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(十六進(jìn)制) => 1111(二進(jìn)制),最右起第一個(gè)1表示CPU核心#0,第二個(gè)1表示CPU核心#1…
設(shè)置 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
設(shè)置 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
原來(lái)的是0、2,即0101(掩碼十進(jìn)制5),現(xiàn)在的是0111,即掩碼十進(jìn)制7。
taskset 不僅可通過(guò)PID查詢運(yùn)行中的線程的CPU親和性,也可以運(yùn)行一個(gè)新的進(jìn)程。
可參考 man taskset 或執(zhí)行 taskset -h。
————————————————
原文鏈接:https://blog.csdn.net/test1280/article/details/87991302
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。