首页 > Linux操作系统 > Linux操作系统 > cpu性能评估(三)
CPU性能评估
一、CPU介绍
CPU 利用率很大部分取决于试图访问它的资源, 内核拥有一个管理两种资源的调度器:线程(单或多)和中断。调度器给予不同资源以不同的优先级,以下由优先级从高到低:
1) 中断——设备通知内核它们处理完成。例如网卡发送一个数据包或硬盘驱动器提供一次 IO 请求
2) 内核(系统)进程——所有的内核进程都在此级别的优先级进行处理
3)用户进程——通常被称为“用户空间” ,所有应用软件运行在用户空间,拥有最低的优先级.
为了弄明白内核是如何管理不同的资源的,几个关键概念需要提及一下: context switches,run queues,utilization。
Context Switches(上下文切换):
大多数处理器在同一时间只能处理一个进程或线程,多线程处理器可同时处理 n 个线程。然而,linux 内核把多核处理器的各个核心当做独立核心。例如,内核把一个双核的处理当做两个独立处理器。
一个标准的内核可同时处理 50 到 50000 个进程, 在只有一颗 CPU 的情况下, 内核必须调度和平衡这些进程和线程。 每个线程在处理器上都拥有一个时间分配单元, 当一个线程超过自己的时间单元或被更高优先级的程序抢占时, 此线程及被传回队列而此时更高优先级的程序将在处理器上执行。这种线程间的切换操作即是上下文切换。
运行队列
每个 CPU 维持着一个线程的运行队列, 理论上, 调度器应该是不断地运行和执行线程。线程要么处于睡眠状态,要么处于可运行状态。假如 CPU 子系统处于高负载状态,那么内核调度器罢工是有可能的, 其结果将导致可运行状态的进程开始阻塞运行队列。 运行队列越大,执行进程所花费的时间也越长。
一个很流行的术语叫“load(负载) ”经常被用来描述运行队列的状态,系统负载是由正在执行的进程和 CPU 运行队列中的进程的结合,如果有 2 个线程正在一个双核系统中执行且4 个正在运行队列中, 那么负载数即是 6, 像 top 等工具可查看过去 1,5,15 分钟的负载均值。
CPU 利用率
CPU 利用率被定义为 CPU 使用的百分比, CPU 如何被利用是衡量一个系统的重要标准。多数性能监测工具把 CPU 利用分为以下几个类型:
* 用户时间——CPU 花在执行用户空间进程的时间百分比
* 系统时间——CPU 花在执行内核进程和中断的时间百分比
* IO 等待——CPU 花在等待 IO 请求完成的时间百分比
* IDLE——CPU 的空闲时间百分比
理解 CPU 的性能状态即是理解中断,运行队列和上下文切换的状态。之前有提到过性能与基准信息有密切关系,但是有些常规的性能预期:
* 运行队列——每个处理器上的运行队列不应该有超过 1-3 个排队的线程。 例如, 一个双核系统不应该有超过 6 个进行在运行队列里。
* CPU 利用率——假如一个 CPU 满状态负荷,那么以下的平衡关系需要达到:
65%--70%的用户时间
30%--35%的系统时间
0%--5%的空闲时间
* 上下文切换——上下文切换的数量与 CPU 的利用率有直接关系。如果 CPU 处于高负荷状态下那么大量的上下文切换是正常的。
二、利用vmstat命令监控系统CPU
vmstat 工具的低开销使得它可以在一个高负载的系统上持续运行,它有两种工作模式:均值模式和采样模式。采样模式如下:
该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU一个负载情况。
下面是vmstat命令在某个系统的输出结果:
[root@node1 ~]# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0
0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0
0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0
Procs
r:运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。
b:在等待资源的进程数,比如正在等待I/O、或者内存交换等。
Memory
swpd: 虚拟内存使用情况,单位:KB
free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,一般对块设备的读写才需要缓冲,单位:KB
cache:表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。
Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
I/O
bi: 发送到块设备的块数(从内存写入磁盘),单位:块/秒
bo: 从块设备接收到的块数(从磁盘加载到内存),单位:块/秒
System
in: 每秒的中断数,包括时钟中断。
cs: 每秒的环境(上下文)切换次数
cpu
us:用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
sy:内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。
根据经验,us+sy的参考值为70%,如果us+sy大于 70%说明可能存在CPU资源不足。
注意:
1)如果 r (run queue 运行队列中的进程数)经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
2)如果si,so 长期不等于0,表示内存不足。
3)如果disk 经常不等于0, 且在 b中的队列大于3, 表示 io性能不好。
4)其拥有很高的中断数 (in) 和很低的上下文切换数, 这说明可能有单个进程在进行大量的硬件资源请求。
5)运行队列数刚好达到可接受的上限值,且出现超过上限值的情况。
三、mpstat命令监控系统CPU
如果你的系统有多个处理器核心,你就可以使用 mpstat 工具来监测每个核心。linux 内核把一个双核处理器当做 2 个 CPU,所以一个拥有 2 颗双核心的系统将被视为 4CPU。
# mpstat –P ALL 1
10:48:59 PM CPU
%usr %nice %sys %iowait %irq
%soft %steal %guest %idle
10:48:59 PM all 0.32 0.00 0.22
0.07 0.01 0.01 0.00
0.00 99.37
四、利用sar命令监控系统CPU
sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。
下面是sar命令对某个系统的CPU统计输出:
[root@webserver ~]# sar -u 3 5
Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)
11:41:24
AM CPU
%user %nice %system
%iowait %steal %idle
11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83
11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50
11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92
11:41:36 AM all 90.08 0.00 0.13 0.16 0.00 9.63
11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41
Average: all 0.34 0.00 0.16 0.05 0.00 99.45
对上面每项的输出解释如下:
l %user列显示了用户进程消耗的CPU 时间百分比。
l %nice列显示了运行正常进程所消耗的CPU 时间百分比。
l %system列显示了系统进程消耗的CPU时间百分比。
l %iowait列显示了IO等待所占用的CPU时间百分比
l %steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。
l %idle列显示了CPU处在空闲状态的时间百分比。
具体参考:LinuxCPU利用率计算原理及内核实现(http://ilinuxkernel.com/?p=333)
问题
1.你是否遇到过系统CPU整体利用率不高,而应用缓慢的现象?
在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致了整体CPU使用率不高,而应用缓慢现象的发生。
五、小结
CPU 的性能监测包含以下部分:
* 1)检查系统运行队列并确保每个核心上不超过 3 个可运行进程
* 2)确保 CPU 利用率的用户时间和系统时间在 70/30 之间
* 3)当 CPU 花费更多的时间在 system mode 上时,更有可能是因过载而试图重新调度优先级
* 4)运行 CPU 限制型应用比 IO 限制型应用更易出现性能瓶颈
lscpu:
Cat /proc/cpuinfo |grep “physical id” |sort –u |wc -l
查看cpu的核心数;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30129545/viewspace-1542678/ ,如需转载,请注明出处,否则将追究法律责任。