美文网首页
什么是CPU上下文切换?

什么是CPU上下文切换?

作者: oleryu | 来源:发表于2016-12-20 13:59 被阅读0次

    现在linux是大多基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前状态保存下来,同时加载下一个任务,这个过程叫做上下文切换。时间片轮转的方式,使得多个任务利用一个CPU执行成为可能,但是保存现场和加载现场,也带来了性能消耗。  那线程上下文切换的次数和时间以及性能消耗如何看呢?

    上下文切换的性能消耗在哪里呢?
    context switch过高,会导致CPU像个搬运工,频繁在寄存器和运行队列直接奔波  ,更多的时间花在了线程切换,而不是真正工作的线程上。直接的消耗包括CPU寄存器需要保存和加载,系统调度器的代码需要执行。间接消耗在于多核cache之间的共享数据。

    引起上下文切换的原因有哪些?
    对于抢占式操作系统而言, 大体有几种:
    1、当前任务的时间片用完之后,系统CPU正常调度下一个任务;
    2、当前任务碰到IO阻塞,调度线程将挂起此任务,继续下一个任务;
    3、多个任务抢占锁资源,当前任务没有抢到,被调度器挂起,继续下一个任务;
    4、用户代码挂起当前任务,让出CPU时间;
    5、硬件中断;

    监测Linux的应用的时候,当CPU的利用率非常高,但是系统的性能却上不去的时候,不妨监控一下线程/进程的切换,看看是不是context switching导致的overhead过高。
    常用命令: pidstat vmstat

    参考:
    1. latencytop深度了解你的Linux系统的延迟

    相关文章

      网友评论

          本文标题:什么是CPU上下文切换?

          本文链接:https://www.haomeiwen.com/subject/qanxvttx.html