CPU亲和性(亲和力)
基础知识
查看cpu
#lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 128
On-line CPU(s) list: 0-127
Thread(s) per core: 2
Core(s) per socket: 32
Socket(s): 2
NUMA node(s): 2
# 查看物理CPU个数
cat /proc/cpuinfo|grep "physical id"|sort -u|wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo|grep "cpu cores"|uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo|grep "processor"|wc -l
# 查看CPU的名称型号
cat /proc/cpuinfo|grep "name"|cut -f2 -d:|uniq
- 关系 CPU数量 = Thread(s) per core * Socket(s) * Core(s) per socket
Linux查看某个进程运行在哪个逻辑CPU上
ps -eo pid,args,psr
#参数的含义:
pid - 进程ID
args - 该进程执行时传入的命令行参数
psr - 分配给进程的逻辑CPU
例子:
[~]# ps -eo pid,args,psr | grep nginx
9073 nginx: master process /usr/ 1
9074 nginx: worker process 0
9075 nginx: worker process 1
9076 nginx: worker process 2
9077 nginx: worker process 3
13857 grep nginx 3
CPU亲和性(亲和力)
CPU affinity 是一种调度属性(scheduler property), 它可以将一个进程"绑定" 到一个或一组CPU上.
CPU affinity 使用位掩码(bitmask)表示
taskset命令
以checkpointer 进程为例, 查看进程号 26349
#ps -ef | grep checkpointer
postgres 26349 26302 0 3月15 ? 00:00:00 postgres: checkpointer
查看进程 26349 可使用的cpu
taskset -pc 26349
pid 26349's current affinity list: 0-5
将进程 26349 绑定在cpu (2-3) 范围内, 之间用逗号分开。 绑定在固定的2号cpu上, taskset -pc 2,2 26349
#taskset -pc 2,3 26349
pid 26349's current affinity list: 0-5
pid 26349's new affinity list: 2,3
查看 26349 可使用的cpu
#taskset -pc 26349
pid 26349's current affinity list: 2,3
查看 26349 运行情况
#ps -eo pid,args,psr | grep checkpointer
26349 postgres: checkpointer 4