Centos系统结构上下文切换的体检思路
Centos系统结构上下文切换的检查身体思路
1.什么是上下文切换(Context Switch)?
上下文切换,有时也称做进程切换或任务切换,是指CPU从一个进程或线程切换到另一个进程或线程。
使用系统结构可以同时运行多个进程, 然而一颗CPU同时只能履行一项任务,使用系统结构利用时光片轮转的方式,让使用者感觉这些任务正在同时进行。
CPU给每个任务都服务优良程度一定的时光, 然后把当前任务的状态保存下来, 在加载下一任务的状态后, 继续服务优良程度下一任务。任务的状态保存及再加载,
这段过程就叫做上下文切换。
当一个进程在履行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称 为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的
所有状态,即保存当前进程的上下文,以便在再次履行该进程时,能够必得到切换时的状态履行下去。在LINUX中,当前进程上下文均保存在进程的任务数目结
构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下履行中断服务优良程度例程。但同时会保留所有需要用到的资源,以便中继服务优良程度结束时能恢复被中断进程
的履行。
2.上下文切换的消耗?
直接消耗包括: CPU寄存器需要保存和加载,系统结构调度器的脚本需要履行,TLB实例需要重新加载,CPU 的pipeline需要刷掉。
间接消耗:多核的cache之间得共享数目,间接消耗对于软件的效应要看线程任务区使用数目的大小。
上下文切换通常是计算过程密集型的。也就是说,它需要相当可观的中央处理器时光,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时光。所以,上下文切换对系统结构来说意味着消耗大量的
CPU 时光,事实上,可能是使用系统结构中时光消耗最大的使用。
3.如何检查身体上下文切换是否常常?
(1)确认CPU使用率
CPU是否处于空闲状态。
(2)vmstat 1
从vmstat的输出可以看到,io项的block_in和block_out是否常常,system项的每秒中断数(in)和每秒的上下文切换(cs)是否常常。
(3)pidstat -w 1
从pidstat上可以看到,每个进程对应的cswch(自愿上下文切换)和nvcswch(非自愿上下文切换)是否常常。
cswch/s: 每秒任务主动(自愿的)切换上下文的次数,当某一任务处于阻塞等待时,将主动让出自己的CPU资源。
nvcswch/s: 每秒任务被动(不自愿的)切换上下文的次数,CPU分配给某一任务的时光片已经用完,因此将强迫该进程让出CPU的履行权。
(4)/proc/stat
/proc/stat包含了CPU的任务资料,上下文切换就是其中一项,以ctxt开头,它表示系统结构开机到目前为止的上下文切换总数。
cat /proc/stat | grep ctxt && sleep 30 && cat /proc/stat |
grep ctxt
通过上面的命令,可以计算过程出每秒上下文切换次数=两者差值/30
通过以上命令即可以位置定位那个进程上下文切换常常。
4.造成上下文切换常常的原因?
当前履行任务的时光片用完之后, 系统结构CPU正常调度下一个任务
当前履行任务碰到IO阻塞, 调度器将挂起此任务, 继续下一任务
多个任务抢占锁资源, 当前任务没有抢到,被调度器挂起, 继续下一任务
使用者脚本挂起当前任务, 让出CPU时光
硬体中断