多个进程竞争CPU时,CPU为了保证每个进程能公平被调度运行,采取了处理任务时间分片的机制,轮流
处理多个进程,由于CPU处理速度非常快,在人类的感官上认为是并行处理,实际是"伪"并行,同一时间只有
一个任务在运行处理。
注:每次上下文切换都需要几十纳秒到数微秒的CPU时间
2、进程上下文切换,是指从一个进程切换到另一个进程运行。进程是由内核来管理和调度
的,进程的切换只能发生在内核态
注:内核空间(Ring0)具有最高权限,可以直接访问所有资源;
用户空间(Ring3)只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内
核中,才能
访问这些特权资源。
3、线程上下文切换(线程是调度的基本单位,而进程则是资源拥有的基本单位),有两种情况
①前后两个线程属于不同进程。因为资源不共享,所以切换过程就跟进程上下文切换是一样。
②前后两个线程属于同一个进程。此时,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源
就保持不动,只需要切换线程的私有数据、寄存器等不共享的数据。系统调用属于同进程内的CPU上下文
切换
4、中断上下文切换,中断处理会打断进程的正常调度和执行,对同一个CPU来说,中断处理比进程拥有
更高的优先级,要消耗CPU,中断是一种异步的事件处理机制,可以提高系统的并发处理能力
注:系统调用过程通常称为特权模式切换,而不是上下文切换
5、什么情况下会触发上下文切换?
系统调用、进程状态转换(运行、就绪、阻塞)、时间片耗尽、系统资源不足、sleep、优先级调整
6、有哪些减少上下文切换的技术用例?
数据库连接池(复用连接)、合理设置应用的最大进程,线程数、直接内存访问DMA、零拷贝技术
7、解决上下文切换次数过多的问题时,
①借助vmstat、pidstat和/proc/interrupts等工具,来辅助排查性能问题的根源。
疑CPU存在瓶颈,可用saru 和sarq等来查看
怀疑内存存在瓶颈,可用sarB、sarr和sarW等来查看
怀疑I/ O存在瓶颈,可用sarb、saru和sard等来查看
②CPU上下文切换可能是,系统卡慢的罪魁祸首
/proc/interrupts提供了一个只读的中断使用情况
③中断的变化情况:变化速度最快的是重调度中断(RES)唤醒空闲状态的CPU来调度新的任务运行。这
是多处理器系统(SMP)中,调度器用来分散任务到不同CPU的机制,通常也被称为处理器间中断
(Inter-ProcessorInterrupts,IPI)。
8、上下文切换总结:
自愿上下文切换变多了,说明进程都在等待资源,有可能发生了I/O等其他问题;
非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢CPU,说明CPU的确成了瓶颈;
中断次数变多了,说明CPU被中断处理程序占用,还需要通过查看/proc/interrupts文件来分析具体的
中断类型。
四、CPU使用率升高处理
用户CPU和NiceCPU高,说明用户态进程占用了较多的CPU,所以应该着重排查进程的性能问题。