linux下绑定进程到指定CPU的操作方法

taskset简介

 # taskset 
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]


Show or change the CPU affinity of a process.

Options:
 -a, --all-tasks         operate on all the tasks (threads) for a given pid
 -p, --pid               operate on existing given pid
 -c, --cpu-list          display and specify cpus in list format
 -h, --help              display this help
 -V, --version           output version information

The default behavior is to run a new command:
    taskset 03 sshd -b 1024
You can retrieve the mask of an existing task:
    taskset -p 700
Or set it:
    taskset -p 03 700
List format uses a comma-separated list instead of a mask:
    taskset -pc 0,3,7-11 700
Ranges in list format can take a stride argument:
    e.g. 0-31:2 is equivalent to mask 0x55555555

For more details see taskset(1).

查看cpu的核数

cat /proc/cpuinfo

root@w0112-virtual-machine:/home/w0112# cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 158
model name	: Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
stepping	: 10
microcode	: 0xde
cpu MHz		: 2304.000
cache size	: 8192 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat
bugs		:
bogomips	: 4608.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 43 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 158
model name	: Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
stepping	: 10
microcode	: 0xde
cpu MHz		: 2304.000
cache size	: 8192 KB
physical id	: 2
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 2
initial apicid	: 2
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat
bugs		:
bogomips	: 4608.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 43 bits physical, 48 bits virtual
power management:

processor指出是第几个cpu处理器

root@w0112-virtual-machine:/home/w0112# cat /proc/cpuinfo  | grep processor
processor    : 0
processor    : 1

cpu cores指出每个处理器的核心数量

root@w0112-virtual-machine:/home/w0112# cat /proc/cpuinfo  | grep "cpu cores"
cpu cores    : 1
cpu cores    : 1

由此可以看出我的虚拟机有两个处理器,每个处理器有一个核

虚拟机可以通过如下设置配置

taskset使用

测试脚本bb.sh

#!/bin/sh
while [ 1 ]
do
date=`date`
echo "date:$date"
sleep 5
done

默认不绑定cpu

运行脚本

./bb.sh &

查看脚本程序的进程ID

root@w0112-virtual-machine:/home/w0112#  ps | grep bb.sh
  3037 pts/13   00:00:00 bb.sh

查看默认bb.sh绑定到那个核

语法:taskset -p PID

taskset -p 3037

root@w0112-virtual-machine:/home/w0112# taskset -p 3037
pid 3037's current affinity mask: 3

3表示默认使用了cpu0 cpu1

使用CPU编号绑定核

启动绑定到指定CPU

语法:taskset -c cpu-list PID

指定绑定到cpu0

root@w0112-virtual-machine:/home/w0112# taskset -c 0 ./bb.sh&
[2] 3175

查看进程运行在那个核

root@w0112-virtual-machine:/home/w0112# taskset -p 3175
pid 3175's current affinity mask: 1
 1表示cpu0

指定绑定到cpu0和cpu1

root@w0112-virtual-machine:/home/w0112# taskset -c 0,1 ./bb.sh &
[1] 3307

查看绑定结果

root@w0112-virtual-machine:/home/w0112# taskset -p 3307
pid 3307's current affinity mask: 3

3表示cpu0和cpu1  

启动后绑定

运行测试脚本

./bb.sh &

root@w0112-virtual-machine:/home/w0112# ./bb.sh &
[1] 3389

进程ID 3389

绑定到cpu0

语法: taskset -cp cpu PID

绑定到CPU0

root@w0112-virtual-machine:/home/w0112# taskset -cp 0 3389
pid 3389's current affinity list: 0,1
pid 3389's new affinity list: 0
默认绑定到两个核,修改之后绑定到CPU0

查看绑定结果

oot@w0112-virtual-machine:/home/w0112# taskset -p 3389
pid 3389's current affinity mask: 1
mask为1表示cpu0

绑定到cpu0和cpu1

绑定指令

root@w0112-virtual-machine:/home/w0112# taskset -cp 0,1 3389
pid 3389's current affinity list: 0
pid 3389's new affinity list: 0,1
affinity是从0开始 mask是从1开始

查看绑定结果

root@w0112-virtual-machine:/home/w0112# taskset -p 3389
pid 3389's current affinity mask: 3
mask 3表示cpu0和cpu1 对应二进制0011,即是cpu0和cpu1

使用mask形式绑定核

指令介绍

语法:taskset -p mask PID

按照二进制形式从最低为到最高位分别表示cpu的核的序号

0xffffffffffffffff :表示是64核

0x0000000000000001:表示是cpu的第1核

0x0000000000000007:表示是cpu的第1、2、3个核

绑定cpu的两个核

root@w0112-virtual-machine:/home/w0112# taskset -p 0x3 3389
pid 3389's current affinity mask: 3
pid 3389's new affinity mask: 3

查看绑定结果

root@w0112-virtual-machine:/home/w0112# taskset -p 3389
pid 3389's current affinity mask: 3

判断进程目前分配到cpu ID

ps -o pid,psr,comm -p <PID>

root@w0112-virtual-machine:/home/w0112# ps -o pid,psr,comm -p 3389
   PID PSR COMMAND
  3389   0 bb.sh
表示进程bb.sh目前在cpu0上运行,PSR显示的是当前运行在的核的编号,如果没有绑定cpu,可能会出现运行在1上,这个由内核调度来完成的


 


 


 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wellnw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值