性能分析_linux服务器CPU_中断

中断

1.  指标范围

1.1  Interrupt rate

应该与cpu利用率结合分析,如果cpu利用率在合理范围内,大量的中断也是可以接受的。一个巨大的中断值,同时伴随着缓慢的系统性能表现,指示存在硬件问题

1.2  Context Switch Rate

应该与cpu利用率结合分析,如果cpu利用率在合理范围内,大量的中断也是可以接受的。

当每次调用引起的上下文切换大于等于4时,需要结合分析

网上也有说,需要少于5000*cpu个数

2.  概念说明

CPU 是一种硬件资源,和任何其他硬件设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 CPU 的管理程序,用来管理和分配CPU 资源,合理安排进程抢占 CPU,并决定哪个进程该使用 CPU、哪个进程该等待。操作系统内核里的进程调度主要用来调度两类资源:进程(或线程)和中断,进程调度给不同的资源分配了不同的优先级,优先级最高的是硬件中断,其次是内核(系统)进程,最后是用户进程。每个 CPU 都维护着一个可运行队列,用来存放那些可运行的线程。线程要么在睡眠状态(blocked 正在等待 IO)要么在可运行状态,如果 CPU 当前负载太高而新的请求不断,就会出现进程调度暂时应付不过来的情况,这个时候就不得不把线程暂时放到可运行队列里。

2.1  Interrupt rate

每秒内的设备中断数。CPU接收硬件驱动发出的中断请求数。当一个驱动器有一个时间需要被kernel操作时。例如:如果一个磁盘控制器从磁盘上取得了一个数据块,kernel需要读取使用这个块,那么磁盘控制器会触发一个中断; kernel接收每个中断。

在系统中,中断处理器的优先级非常高,而且执行速度非常快。很多时候,有些中断处理并不需要很高的处理优先级,所以也有soft-interrupt handler。如果有很多的中断,kernel需要花费大量的时间去处理中断。可以检查/proc/interrupts能够知道中断发生在哪个CPU 上。

Interrupt Rate中包括内核由于进程的时间片中断,内核的时钟频率可以通过如下命令知道,每秒总的时钟中断数就是 = cpu个数 * 核数 * CONFIG_HZ

cat /boot/config-`uname -r` | grep '^CONFIG_HZ='

CONFIG_HZ=100

通过cat /proc/interrupts可以查看中断的类型以及次数,用vmstat查看的 in(Interrupt)就是这个参数

 

2.2  Context Switch Rate

大部分现在的CPU在同一时间只能运行一个process,虽然也有一些CPU,例如超线程技术的CPU,能实现同时运行超过一个process。linux把这种CPU看作多个单线程CPU,linux内核不断的在不同process间切换,造成一个错觉,让人感觉一个单CPU同时处理多个任务,不同process之间的切换称作 Context Switch。

当系统做Context Switch时,CPU保存所有old process的context信息并获得new process的所有context信息,Context信息包括大量的linux追踪每个process信息,尤其是一些资源: 那些process正在执行,被分配了哪些内存,它打开了那些文件,等等。切换Context会触发大量的信息移动,这是比较高的开销。

首先,kernel调度触发context switches。为了保证每个process平等的共享CPU时间,kernel周期性中断running的process,如果合适kernel调度器会开始一个其他的process而不是让当前的process继续执行,每次的周期性中断或者定时中断都可能触发context switch。每秒定时中断的次数因不同架构和不同的kernel版本而不同。

获取每秒中断次数的一个简单办法是通过监控 /proc/interrupts文件,通过命令cat /proc/interrupts | grep timer; sleep 10 ; cat /proc/interrupts | grep timer 可以看到在指定的时间内timer次数的变化。如果你的context switch比timer中断大很多。那么context switch更多的可能是I/O请求或者其他长时间的系统调用(比如sleep)产生。 

当一个应用请求一个操作不能立即实现时,kernel开始 context switch操作: 存入请求的process并且试着切换到其他runnable process。这将使得CPU保持工作状态。Context Switch大体上由两个部分组成:中断和进程(包括线程)切换,一次中断(Interrupt)会引起一次切换,进程(线程)的创建、激活之类的也会引起一次切换。 Context Switch 的值也和TPS(Transaction Per Second)相关的,假设每次调用会引起N次CS,那么就可以得出

     Context Switch Rate = Interrupt Rate + TPS* N

CSR减掉IR,就是进程/线程的切换,假如主进程收到请求交给线程处理,线程处理完毕归还给主进程,这里就是2次切换。也可以用CSR、IR、TPS的值代入公式中,得出每次事物导致

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值