分类 Linux 下的文章

什么是上下文切换


上下文

首先,需要讲清楚什么是上下文。

每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,这就涉及到 CPU 寄存器程序计数器(PC)

  • CPU 寄存器是 CPU 内置的容量小、但速度极快的内存;
  • 程序计数器会存储 CPU 正在执行的指令位置,或者即将执行的指令位置。

这两个是 CPU 运行任何任务前都必须依赖的环境,因此叫做 CPU 上下文


如何查看系统的上下文切换


vmstat

vmstat:主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断次数。

# 1 表示 每 1 秒 输出一次数据
->:~$ vmstat 1
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 5787772   2108 3448464    0    0   530  1766  699  975 14  9 73  5  0
 0  0      0 5787648   2108 3448464    0    0     0     0  167  136  0  0 100  0  0
 0  0      0 5787624   2108 3448464    0    0     0     0  196  167  0  0 100  0  0
  • r(Running or Runnable):就绪队列的长度,即,正在运行和等待 CPU 的进程数;
  • b(Blocked):处于不可中断睡眠状态的进程数;
  • cs(context switch):每秒上下文切换次数;
  • in(interrupt):每秒中断次数。


平均负载


当系统性能变低时(俗称卡顿),我们可以从平均负载入手,找到引发根源,然后解决。

什么是平均负载?

单位时间内,系统中处于可运行状态不可中断状态的平均进程数。

对上述状态释义如下:

  • 可运行状态进程:正在使用 CPU 、或是正在等待 CPU 的进程。用命令 ps 看到 STAT 为 R (Running,Runable)。
  • 不可中断状态进程:不可以被中断的进程,如等待硬件设备的I/O响应。用命令 ps 看到 STAT 为 D(Uninterruptible Sleep,也叫 Disk Sleep)。