Linux系统性能分析核心概念(1)

1.运行队列

在Linux中,进程的状态有2种:

  1. 可运行的:如果进程是可运行的,那就意味着它要和其它也是可运行的进程竞争CPU时间。
  2. 阻塞的:正在等待一个事件的完成,阻塞进程可能在等待的是从I/O设备来的数据,或者是系统调用的结果。

一个可运行的进程不一定会使用CPU,但是当Linux调度器决定下一个要运行的进程时,它会从可运行的进程队列种挑选。如果进程是可运行的,同时又在等待使用处理器,这些进程就构成了运行队列。运行的队列越长,处于等待状态的进程就越多。

性能工具通常会给出可运行的进程个数和等待I/O的阻塞进程个数。

2.上下文切换

处理器一次只能运行一个进程或线程。虽然有些处理器(比如超线程处理器)实际上可以同时运行多个进程,但是Linux会把他们看作多个单线程处理器。如果要制造出给定单处理器同时运行多个任务的假象,Linux内核就要不断地在不同进程间切换。这种不同进程间的切换叫做上下文切换

**上下文切换的开销是非常大的。**因为当其发生时,CPU要保存旧进程的大量信息,包括进程正在执行的指令,分配给进程的内存,进程打开的文件等。这些上下文切换涉及大量信息的移动,因此尽量减少上下文切换的次数是个好主意。

要避免上下文切换,重要的一点是了解他们如何发生的。首先,上下文切换可以是**内核调度的结果。**为了保证公平地给每个进程分配处理器时间,内核周期性地中断正在运行的进程,在适当的情况下,内核调度器会决定开始另一个进程,而不是让当前进程继续执行。每次这种周期性中断或定时发生时,系统都可能进行上下文切换。每秒定时中断的次数与架构和内核版本有关。

一个检测中断频率的简单方法是用/proc/interrupts 文件,它可以确定已知时长内发生的中断次数。

[root@node1 ~]@ cat /proc/interrupts | grep timer;sleep 10;cat /proc/interrupts | grep timer
   0:        115   IO-APIC-edge      timer
 LOC:     276061   Local timer interrupts
   0:        115   IO-APIC-edge      timer
 LOC:     276243   Local timer interrupts

3.中断

此外,处理器还周期性地从硬件设备接受中断。当设备有事件需要内核处理时,它通常就会触发这些中断。比如,如果磁盘控制器刚刚完成从驱动器取数据块的操作,并准备好提供给内核,那么磁盘控制器就会触发一个中断。这些中断处理程序在系统种具有很高的运行优先级,并且通常执行速度也很快。有时,中断处理程序有工作要做,但是又不愮高优先级,因此它可以启动“下半部”,也就是所谓的软中断处理程序。如果有很多中断,内核会花大量的时间服务这些中断。查看/proc/interrupts文件可以显示哪些CPU上触发了哪些中断。

4.CPU使用率

在任何给定的时间内,CPU可以执行以下七件事情中的一个:

  1. CPU可以是空闲的,这意味着处理器实际上没有任何工作,并且等待有任务可以执行。
  2. CPU可以运行用户代码,即指定的“用户”时间
  3. CPU可以执行Linux内核中的应用程序代码,这就是“系统”时间;
  4. CPU可以执行“比较友好”的或者优先级被设置为低于一般进程的用户代码。
  5. CPU可以处于iowait状态:即系统正在等待I/O(如磁盘或网络)完成。
  6. CPU可以处于irq状态,即它正在用高优先级代码执行处理硬件中断。
  7. CPU可以处于softirq模式,即系统正在执行同样由中断触发的内核代码,只不过其运行于较低优先级。

大多数性能工具将这些数值表示为占CPU总时间的百分比。这些时间的范围从0%到100%,但全部三项加起来等于100%。
如果系统在应该工作的时候花费了大量的时间处于iowait状态,那它可能等待来自设备的I/O。导致速度变慢的原因是磁盘、网卡或其它设备。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值