一、
1、cpu数,物理核,逻辑核的关系:
逻辑CPU个数 > 物理CPU个数 * CPU内核数 开启了超线程
逻辑CPU个数 = 物理CPU个数 * CPU内核数 没有开启超线程
2、cpu数,物理核,逻辑核的查看方法:
cat /proc/cpuinfo
processor:逻辑核的个数(逻辑核的id)
physical id:物理CPU的id
cpu cores:每个物理CPU的物理核个数
siblings:每个物理CPU上逻辑CPU个数
core id:每个CPU上的物理核的id
3、查看CPU(各个逻辑核)占用情况:
top 点击"1"可以查看各个逻辑核的占用情况
4、使用cat /proc/cpuinfo查看cpu信息,如下两个信息:
processor,指明第几个cpu处理器
cpu cores,指明每个处理器的核心数
二、进程绑定逻辑核
1、命令绑定
//g++ -o test test.cpp
启动两个实例,将进程都绑定到Cpu0:
taskset -c 0 ./test
taskset -c 0 ./test
通过top, 输入“1”查看系统cpu状况:
Cpu1空闲,Cpu0使用100%
继续测试,将pid为18057的test迁移到CPU1上运行,执行:
$ taskset -pc 1 18057
pid 18057's current affinity list: 0
pid 18057's new affinity list: 1
Cpu0及Cpu1都进入忙碌状态了!
继续测试!将pid为18210的test也迁移到Cpu1上运行,执行:
Cpu0闲着,Cpu1忙碌起来了!
2、显示进程运行的CPU
命令taskset -p 21184
显示结果:
pid 21184's current affinity mask: ffffff
3、指定进程运行在某个特定的CPU上
命令taskset -pc 3 21184
显示结果:
pid 21184's current affinity list: 0-23
pid 21184's new affinity list: 3
注:3表示CPU将只会运行在第4个CPU上(从0开始计数)。
4、进程启动时指定CPU
命令taskset -c 1 ./redis-server ../redis.conf
5、查看进程当前运行在哪个cpu上
taskset -p 2726
pid 2726's current affinity mask: 3
显示的十进制数字3转换为2进制为最低两个是1,每个1对应一个cpu,所以进程运行在2个cpu上。
注意,cpu的标号是从0开始的,所以cpu1表示第二个cpu(第一个cpu的标号是0)
三、线程绑定逻辑核
1、cpu亲和力
1》cpu亲和性(affinity)
CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性;再简单的点的描述就将指定的进程或线程绑定到相应的cpu上;在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,性能有一定的提高。
2》软亲和性(affinity)
就是进程要在指定的 CPU 上尽量长