《绑定cpu核 线程、进程》

本文介绍了如何查看和管理CPU的逻辑核、物理核,以及如何通过taskset命令和系统调用绑定进程和线程到特定CPU。详细讲解了进程与线程的CPU亲和性,包括软硬亲和性,并提供了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、
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 上尽量长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值