系统优化学习笔记之一(taskset)

近期跟着大家学习了很多知识,记录在博客中,方便以后查阅,另外,一些问题的理解不够深入,描述的深度可能有限,深入后再逐步补充吧。

线上系统中经常出现多核CPU的系统中某一个CPU的利用率较高,其他的CPU利用率则特别低的情况。taskset是解决这种问题的可行方法。

问题1: 如何查看CPU核数

    最直观的方式就是 cat /proc/cpuinfo

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 4
model name      :                   Intel(R) Xeon(TM) CPU 2.80GHz
stepping        : 1
cpu MHz         : 2793.085
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
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 lm pni monitor ds_cpl cid cx16 xtpr
bogomips        : 5590.02
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:
processor       : 1
vendor_id       : GenuineIntel
cpu family      : 15
model           : 4
model name      :                   Intel(R) Xeon(TM) CPU 2.80GHz
stepping        : 1
cpu MHz         : 2793.085
cache size      : 1024 KB
physical id     : 3
siblings        : 2
core id         : 3
cpu cores       : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
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 lm pni monitor ds_cpl cid cx16 xtpr
bogomips        : 5585.77
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:
processor       : 2
vendor_id       : GenuineIntel
cpu family      : 15
model           : 4
model name      :                   Intel(R) Xeon(TM) CPU 2.80GHz
stepping        : 1
cpu MHz         : 2793.085
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
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 lm pni monitor ds_cpl cid cx16 xtpr
bogomips        : 5586.04
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:
processor       : 3
vendor_id       : GenuineIntel
cpu family      : 15
model           : 4
model name      :                   Intel(R) Xeon(TM) CPU 2.80GHz
stepping        : 1
cpu MHz         : 2793.085
cache size      : 1024 KB
physical id     : 3
siblings        : 2
core id         : 3
cpu cores       : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
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 lm pni monitor ds_cpl cid cx16 xtpr
bogomips        : 5586.07
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:

2 如何查看当前CPU每个核的利用率?

 方法1: 先执行top命令,出结果后,按1,会显示每个核的利用率情况

Cpu0  : 55.1% us,  3.0% sy,  0.0% ni, 18.3% id,  0.0% wa,  1.0% hi, 22.6% si
Cpu1  : 66.6% us,  4.0% sy,  0.0% ni, 28.5% id,  0.0% wa,  0.0% hi,  1.0% si
Cpu2  : 66.4% us,  6.0% sy,  0.0% ni, 26.9% id,  0.0% wa,  0.0% hi,  0.7% si
Cpu3  : 68.4% us,  4.3% sy,  0.0% ni, 26.6% id,  0.0% wa,  0.0% hi,  0.7% si

 方法2: 利用mpstat命令, 如果需要查看所有核的利用率情况可以执行 mpstat -P ALL 1

结果如下

10:52:48 AM  CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
10:52:49 AM  all   63.37    0.00    4.70    0.00    0.25    5.94   25.74   3851.00
10:52:49 AM    0   56.00    0.00    3.00    0.00    0.00   22.00   19.00   2843.00
10:52:49 AM    1   68.00    0.00    4.00    0.00    0.00    1.00   29.00      0.00
10:52:49 AM    2   65.00    0.00    6.00    0.00    0.00    1.00   29.00      0.00
10:52:49 AM    3   67.00    0.00    6.00    0.00    0.00    1.00   27.00   1008.00
10:52:49 AM  CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
10:52:50 AM  all   57.71    0.00    4.48    0.00    0.25    5.72   31.84   3686.00
10:52:50 AM    0   49.00    0.00    5.00    0.00    1.00   20.00   25.00   2684.00
10:52:50 AM    1   63.00    0.00    3.00    0.00    0.00    1.00   34.00      0.00
10:52:50 AM    2   59.00    0.00    6.00    0.00    0.00    0.00   36.00      0.00
10:52:50 AM    3   63.00    0.00    4.00    0.00    0.00    1.00   33.00   1003.00
10:52:50 AM  CPU   %user   %nice %system %iowait    %irq   %soft   %idle    intr/s
10:52:51 AM  all   63.50    0.00    4.75    0.00    0.00    5.75   26.00   3530.69
10:52:51 AM    0   53.47    0.00    4.95    0.00    0.99   20.79   19.80   2535.64
10:52:51 AM    1   68.32    0.00    2.97    0.00    0.00    0.00   27.72      0.00
10:52:51 AM    2   64.36    0.00    4.95    0.00    0.00    0.99   28.71      0.00
10:52:51 AM    3   64.36    0.00    6.93    0.00    0.00    1.98   25.74    994.06

当我们发现某个核的CPU的idle值相对于其他CPU较低时,可以推断目前主要是该CPU在干活,这时我们根据系统的服务来决定将某些服务交由其他核来执行,达到一定的负载均衡的效果

3 如何将服务同CPU绑定

我们为了测试某个服务被绑定到单核上的情况,写了一个死循环的程序,CPU占用率很高,mpstat显示结果如下

11:10:21 AM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
11:10:22 AM  all   12.69    0.00    0.00    0.00    0.00    0.00    0.12   87.19    754.00
11:10:22 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00    114.00
11:10:22 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00    251.00
11:10:22 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      2.00
11:10:22 AM    3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    101.00
11:10:22 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00    250.00
11:10:22 AM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      6.00
11:10:22 AM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      9.00
11:10:22 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00     21.00

可以看到核3已经没有idle了

执行 sudo taskset -pc 6 ./test.pl
执行结果如下:

11:20:41 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
11:20:42 AM  all   11.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00   88.20
11:20:42 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:20:42 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:20:42 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:20:42 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:20:42 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:20:42 AM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:20:42 AM    6  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
11:20:42 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

问题: man手册上说可以同时绑定多个核,但实验不成功,不知是否只对多进程或多线程程序有效

 

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(504) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值