Linux CPU的调优: CPU数物理核逻辑核的查看方法及线程进程的绑定

cpu数,物理核,逻辑核的关系

逻辑CPU个数 > 物理CPU个数 * CPU内核数 开启了超线程
逻辑CPU个数 = 物理CPU个数 * CPU内核数 没有开启超线程

cpu数,物理核,逻辑核的查看方法:

#cat /proc/cpuinfo

processor  : 0
vendor_id  :GenuineIntel
cpu family  :6
model    :26
model name :Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
stepping    :5
cpu MHz    :1600.000
cache size  : 8192 KB
physical id  :0
siblings    :8
core id     : 0
cpu cores   :4
apicid         :0
fpu       :yes
fpu_exception :yes
cpuid level   : 11
wp      :yes
flags      : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr popcnt lahf_lm
bogomips   :4522.12
clflush size  :64
cache_alignment  : 64
address sizes    : 40 bits physical, 48 bits virtual
power management :
以上输出项的含义如下:
processor :系统中逻辑处理核的编号。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
vendor_id :CPU制造商      
cpu family :CPU产品系列代号
model   :CPU属于其系列中的哪一代的代号
model name:CPU属于的名字及其编号、标称主频
stepping   :CPU属于制作更新版本
cpu MHz   :CPU的实际使用主频
cache size   :CPU二级缓存大小
physical id   :单个CPU的标号
siblings       :单个CPU逻辑物理核数
core id        :当前物理核在其所处CPU中的编号,这个编号不一定连续
cpu cores    :该逻辑核所处CPU的物理核数
apicid          :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
fpu             :是否具有浮点运算单元(Floating Point Unit)
fpu_exception  :是否支持浮点计算异常
cpuid level   :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
wp             :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
flags          :当前CPU支持的功能
bogomips   :在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
clflush size  :每次刷新缓存的大小单位
cache_alignment :缓存地址对齐单位
address sizes     :可访问地址空间位数
power management :对能源管理的支持,有以下几个可选支持功能:
  ts:  temperature sensor
  fid:   frequency id control
  vid:  voltage id control
  ttp:  thermal trip
  tm:
  stc:
  100mhzsteps:
  hwpstate:

processor:逻辑核的个数(逻辑核的id)
physical id:物理CPU的id
cpu cores:每个物理CPU的物理核个数
siblings:每个物理CPU上逻辑CPU个数
core id:每个CPU上的物理核的id

查看CPU(各个逻辑核)占用情况:

# top

remark:在top命令下,点击"1"可以查看各个逻辑核的占用情况

进程绑定核

CPU亲和力:

在多核情况下,可以认为指定一个进程在哪颗CPU上执行程序,减少进程在不同CPU之前切换的开销,使用taskset命令

语法: taskset  -c <N>   <命令>                                            //-c=cuplist N=第几个CPU,也就是cpuinfo的#号

[root@localhost ~]# taskset -c 0 vim a.txt    //本机是4核CPU ,指定vim命令在第一个CPU上运行,1号CPU ID是0

[root@localhost ~]# ps -axu | grep vim

Warning: bad syntax, perhaps a bogus'-'? See/usr/share/doc/procps-3.2.8/FAQ
root      2614  1.3  0.2 143696  3332 pts/0    S+   18:39   0:00 vim a.txt

[root@localhost ~]# taskset -p  2614 //要查看的进程ID

pid2614's current affinity mask: 1    #CPU亲和力掩码,1代表第一个CPU核心
关于换算方式:

8个核心的CPU ID:   7 6 5 4 3 2 1 0
对应10的十进制数位: 128 64 32 16 8 4 2 1
十六进制的16个数是:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F

对应每一个16进制的二进制位:0=0000,1=0001,2=0010,3=0011,4=0100,5=0101,6=0110,7=0111,8=1000,9=1001,A=1010,
B=1011,C=1100,D=1101,E=1110,F=1111

那么例如出现pid 8987's current affinity mask: ff   ff是16进制,转换二进制:11111111,意思就是sshd在8个CPU上进行却换!所以对应每一个数值!

比如说16进制的40,那么转换二进制01000000,意思就是在第7块CPU上运作

进程优先级

调整进程优先级使用更多CPU:

调整进程nice值,让进程使用更多的CPU

nice值的范围,  -20 ~ 19  越小优先级越高 普通用户0-19

作用:以什么优先级运行进程 。默认优先级是0

语法: nice  -n  <优先级数字>   <命令>

 [root@localhost ~]# nice -n -5 vim b.txt   //vim进程以-5级别运行

 [root@localhost ~]# ps -axu | grep b.txt

Warning: bad syntax, perhaps a bogus'-'? See/usr/share/doc/procps-3.2.8/FAQ
root     24318  0.0  0.2 143624  3280 pts/4    S+   17:00   0:00 vim b.txt

[root@localhost ~]# top -p 24318

PID USER      PR  NI  VIRT  RES  SHR S%  CPU% MEM   TIME+   COMMAND 
24219 root    15  -5  140m  3336 2200 S  0.0  0.3   0:00.08 vim  

renice  修改正在运行的进程的优先级,更改正在运行进程的优先级

语法: nice  -n  <优先级数字>  <pid>        //修改进程优先级

[root@localhost ~]#renice -n 5 24318

[root@localhost ~]# top -p 24318

PID USER      PR  NI  VIRT  RES  SHR S%CPU%MEM    TIME+  COMMAND 
24219 root      15  5  140m3336 2200 S  0.0  0.3   0:00.08 vim 

CPU利用率分配

CPU状态信息us,sy,ni,id,wa,hi,si,st含义

CPU状态信息
1ususer CPU time用户空间占用CPU百分比
2sysystem CPU time内核空间占用CPU百分比
3ninice CPU time用户进程空间内改变过优先级的进程占用CPU百分比
4ididle空闲CPU百分比
5waiowait等待输入输出的CPU时间百分比
6hihardware irq硬件中断
7sisoftware irq软件中断
8ststeal time实时
系统命令top 即可看到如下类似CPU信息:
top- 12:00:53 up  2:31,  3 users,  load average: 0.00, 0.00, 0.00

Tasks: 217 total,   3 running, 214 sleeping,   0 stopped,   0 zombie

Cpu(s):  89.7%us,  7.3%sy,  0.0%ni, 11.3%id, 10.6%wa,  0.0%hi,  0.1%si,  0.0%st

如果一个 CPU 被充分使用,利用率分类之间均衡的比例应该是:

65~70% User Time          //用户态

30~35% System Time     //内核态

0~5% Idle Time                //空闲

如果wa%>5, IO已经成为瓶颈

上下文切换:

Context Switches ­ 上下文切换的数目直接关系到CPU 的使用率,如果CPU 利用率保持在上述均衡状态时,有大量的上下文切换是正常的

如果系统的中断多,我们可以判断系统进程正在高速运行

如果系统的上下文切换多,我们可以判断系统此时有很多进程/线程在运行

语法:     vmstat  [-V] [-n]  [delay [count]]               

常用选项:
-V :打印版本信息。
-n :在周期性循环输出时,输出的头部信息仅显示一次。
delay :两次输出之间间隔多少时间,单位
count :按照这个时间间隔统计的次数。
-a :显示活跃和非活跃内存大小。

Linux vmstat命令实战详解_浮生一梦-CSDN博客_vmstat

Linux vmstat命令 | 天使羊波波闪耀光芒

 vmstat 参数分析实例:

[root@localhost ~]# vmstat  1   //本机为单核CPU,执行vmstat显示以下内容

procs    --------memory---------   ---swap-- -----io----  --system--  -----cpu-----

 r  b    swpd   free   buff  cache  si   so    bi    bo    in   cs    us sy  id  wa  st

 3  0      0 130644  86244 609860    0    0     4     1    531   25     0  0  20  0  0
 4  0      0 130620  86244 609860    0    0     0     0    638   62     0  0  14  0  0
 2  0      0 130620  86244 609860    0    0     0     0    658   62     0  0  13  0  0
 4  0      0 130620  86244 609860    0    0     0     0    688   62     0  0  11  0  0

根据观察值,我们可以得到以下结论:

1,有大量的中断(in) 和较少的上下文切换(cs).这意味着一个单一的进程正在快速运行,如果进程多那么就会有大量的上下文切换,意思就是上下文的量可以看出进程的量,同时通过中断可以看出来,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程,也就是需要处理我们的进程!其他的进程在等待了,也就是在排队的情况!

2,进一步显示应用,user time(us) 经常在86%或者更多。

  执行top — 按P —  查看使用CPU最多的进程  

top- 12:00:53 up  2:31,  3 users,  load average: 0.00, 0.00, 0.00

Tasks: 217 total,   3 running, 214 sleeping,   0 stopped,   0 zombie

Cpu(s):  89.7%us,  7.3%sy,  0.0%ni, 11.3%id, 10.6%wa,  0.0%hi,  0.1%si,  0.0%st

……

PID USER      PR  NI  VIRT  RES  SHR S%CPU%MEM    TIME+  COMMAND

3096 root      20   0  290m  13m9668 S21.9  1.3   0:03.58 gnome-terminal

3743 root      20   0  109m1280  900 R19.6  0.1   0:02.82 find

……      

3,运行队列还在可接受的性能范围内,其中有2个地方,是超出了允许限制.

4,这个系统的CPU被充分利用
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值