Linux CPU管理
平均负载:单位时间内,处于可运行状态和不可中断状态的进程数。不仅包括了正在使用CPU的进程,还包括等待CPU和等待I/O的进程 --> iostat、mpstat、pidstat
CPU使用率:单位时间内CPU繁忙情况的统计 top-->pref top
CPU密集型进程,使用大量CPU会导致平均负载升高,此时这两者是一致的
I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高
大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高
进程从用户态到内核态的转变,需要通过系统调用来完成
系统调用-->CPU寄存器里原来用户态的指令位置,需要先保存起来。接着,为了执行内核态代码,CPU寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。系统调用结束后,CPU寄存器需要恢复原来保存的用户态,然后再切换到用户空间,继续运行进程。所以,一次系统调用的过程,其实是发生了两次CPU上下文切换。
系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。
CPU上下文切换:
进程上下文切换-->进程的切换只能发生在内核态。进程的上下文不仅包括了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态。 先保存虚拟内存、栈、内核状态、CPU寄存器,加载了下一进程的内核态后,还需要刷新进程的虚拟内存和用户栈。虚拟内存更新后,TLB也要更新。
线程上下文切换-->内核中的任务调度实际上的调度对象是线程 属于同一进程的切换/不同进程的切换
中断上下文切换-->中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件。中断上下文并不涉及用户态,其实只包括内核态中断服务程序执行所必需的状态,包括CPU寄存器、内核堆栈、硬件中断参数等。
进程的几种状态:
不可中断状态D:进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有I/O性能问题。
可中断睡眠S:进程因为等待某个事件而被系统挂起,当进程等待的事件发生时,会被唤醒并进入R状态。
运行态/就绪态R:表示进程在CPU的就绪队列中,正在运行或正在等待运行。
空闲态I:
僵尸进程Z:表示进程已经退出,但它的父进程还没有回收子进程占用的资源。 危害:占用进程号
iowait升高-->dstat,可以同时查看CPU和I/O这两种资源的使用情况
pidstat

浙公网安备 33010602011771号