CPU状态信息us,sy,ni,id,wa,hi,si,st含义
使⽤系统命令top即可看到如下类似信息:us是什么意思 英语
Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
但不知什么含义?google之
worthyI try to explain the:
us: is meaning of "ur CPU time"
sy: is meaning of "system CPU time"
ni: is meaning of" nice CPU time"
id: is meaning of "idle"
wa: is meaning of "iowait"
hi:is meaning of "hardware irq"
si : is meaning of "software irq"
st : is meaning of "steal time"
中⽂翻译为:
us ⽤户空间占⽤CPU百分⽐
sy 内核空间占⽤CPU百分⽐
ni ⽤户进程空间内改变过优先级的进程占⽤CPU百分⽐
id 空闲CPU百分⽐
wa 等待输⼊输出的CPU时间百分⽐
hi 硬件中断
si 软件中断
st: 实时在太空烤饼干
26个英文字母大小写===========================================================================================================================================
测试中发现服务器整体负载较低,但有cpu负载特别⾼,其中⼀个cpu⼏乎⼀半是软中断si,特别忙,⽽还有的cpu特别空闲。lighter什么意思
Java代码
1. top - 16:12:08 up 31 days, 3:52, 1 ur, load average: <span >0.11, 0.11, 0.06</span>
2. Tasks: 242 total, 4 running, 238 sleeping, 0 stopped, 0 zombie
3. Cpu0 : 12.3%us, 1
4.6%sy, 0.0%ni, 70.2%id, 0.0%wa, 0.0%hi, 3.0%si, 0.0%st
4. Cpu1 : 21.6%us, 22.9%sy, 0.0%ni, 7.3%id, 0.0%wa, 0.0%hi, <span >48.2%si</span>, 0.0%st
5. Cpu2 : 1
affects
6.5%us, 19.1%sy, 0.0%ni, 43.9%id, 0.0%wa, 0.0%hi, 20.5%si, 0.0%stshould
6. Cpu3 : 2.3%us, 2.6%sy, 0.0%ni, 94.1%id, 0.0%wa, 0.0%hi, 1.0%si, 0.0%st
7. Cpu4 : 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
先⽤mpstat -I SUM -P ALL 5 来看⼀下每个cpu的终端情况,发现cpu1和cpu2处理的中断确实很多,是什么dd在使⽤这两个cpu做中断呢?
Java代码
1. # mpstat -I SUM -P ALL 5
2. Linux 2.6.32-220.1
3.1.el6.x86_64 (talus186) 12/26/2013 _x86_64_ (12 CPU)
3.
4. 04:15:18 PM CPU intr/s
5. 04:15:23 PM all 62422.60
6. 04:15:23 PM 0 0.00
7. 04:15:23 PM 1 21566.20
disi
8. 04:15:23 PM 2 12123.00
9. 04:15:23 PM 3 0.00
10. 04:15:23 PM 4 1.00
使⽤ cat /proc/interrupts 查看中断情况,间隔⼏秒后再次cat /proc/interrupts,然后⽐较对应值的变化,发现eth0-1、eth0-2等使⽤cpu1、cpu2做中断,这两个对应的中断号分别是95,96...
Java代码
1. 95: 33 325897741 0 30997484 72 0 93968731 0 0 0 426 864 IR-PCI-MSI-edge eth0-1
2. 96: 50 206 66609822 117 0 0 0 0 0 0 0 24437509 IR-PCI-MSI-edge eth0-2
注:⽹卡(包括磁盘等外设)需要cpu服务时,都会抛出⼀个中断,中断告诉cpu发⽣了什么事情,cpu就要停⽌⽬前的⼯作来处理这个中断。⽐如当⽹卡收到包时,假如cpu正在执⾏某个应⽤进程处理程序,此刻就会被⽹卡中断所打断执⾏中断处理程序。每个外设对应的中断处理程序⾃然是不同的,因此为了进⾏区分,防⽌多个设备发出相同的中断请求,系统中的每个设备都被分配了⼀个独⼀⽆⼆的IRQ(Interupt Request),上⾯95、96就是所谓的IRQ,如果⽹卡有多队列,每个队列可以对应⼀个IRQ(参考net)。
在使⽤ cat /proc/irq/95/smp_affinity cat /proc/irq/smp_affinity 等看出⽹卡的队列都在使⽤cpu1 和cpu2
Java代码
1. cat /proc/irq/95/smp_affinity
2. 00000002
3. cat /proc/irq/96/smp_affinity
4. 00000004
apriori
好了,把空闲的cpu⽤上来分摊⽹卡中断
Java代码
1. echo 08 > /proc/irq/97/ smp_affinity
2. echo 10 > /proc/irq/98/ smp_affinity
3. ...
再进⾏测试,发现cpu消耗整体还不够均衡,TOP下使⽤f,然后再加j,发现应⽤进程使⽤的cpu与⽹卡中断使⽤的cpu重合,再把单线程应⽤进程绑定到其他CPU,终于均衡下来。东莞翻译公司
最后,⽹卡软中断绑定cpu需要满⾜⼏个条件:1 linux内核版本必须在2.4+; 2 ⽹卡对应的中断控制器必须是IO-APIC芯⽚,且需启⽤IO-APIC;3 部分CPU 可能不⽀持。