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核心#0,第二个1表示CPU核心#1…


设置 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。

你可能感兴趣的:(LINUX,OTHER)