【linux】把进程/线程绑定到特定cpu核上运行

本文介绍了如何在Linux系统中通过命令行和编程方式将进程或线程绑定到特定的CPU核心上,以提高运行效率,包括taskset命令的使用和 sched_setaffinity、pthread_setaffinity_np的系统调用示例。
摘要由CSDN通过智能技术生成

目录

一、目的

二、命令绑定

1、查看绑定情况

2、启动时绑定

3、启动后绑定

三、代码绑定

绑定进程到cpu核上运行

绑定线程到cpu核上运行

总结


一、目的

某个进程需要较高的运行效率时,就有必要考虑将其绑定到单独的核上运行,以减小由于在不同的核上调度造成的开销。

把某个进程/线程绑定到特定的cpu核上后,该进程就会一直在此核上运行,不会再被操作系统调度到其他核上。但绑定的这个核还是可能会被调度运行其他应用程序的。

二、命令绑定

1、查看绑定情况

查看进程pid现在的绑核情况

taskset -p pid

pid 2726's current affinity mask: 6

显示的十进制数字6--->转换为2进制是110,每个1对应一个cpu,所以进程运行在#1,#2cpu上(cpu从0开始)

2、启动时绑定

#启动时绑定到第二个cpu

taskset -c 1 ./dgram_servr&

#启动时绑定到第1个cpu,第3个cpu

taskset -c 0,2 ./dgram_servr&

(cpu从0开始)

3、启动后绑定

2.1 按CPU数直接绑核

taskset -cp 1,2,5,11 9865  将进程9864绑定到#1、#2、#5、#11号核上面。

taskset -cp 1,2,5-11 9865  将进程9864绑定到#1、#2、#5~#11号核上面。

注意,cpu的标号是从0开始的,所以cpu1表示第二个cpu(第一个cpu的标号是0)。


taskset -cp cpu-list pid
其中cpu-list是数字化的cpu列表,从1开始。多个不连续的cpu可用逗号连接,连续的可用短现连接,比如1,2,5-11等。

2.2 掩码形式绑核

taskset -p mask pid


按照二进制形式,从最低位到最高位代表物理CPU的#1、#2、……、#n号核。
比如:0x00000001代表CPU的0号核,0x00000003代表CPU的0号和3号核。
需要注意的是,并非掩码中给出的CPU核就一定会存在,比如0x00000400理论上代表CPU的第10号核,但是该核在真正的计算机上面并不一定是存在的。而且,如果我们试图将物理上并不存的核绑定给某个进程时,会返回错误。掩码形式的绑核命令为:
taskset -p mask pid

三、代码绑定

(原文:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值