美文网首页
003-cpu分析(上下文切换)

003-cpu分析(上下文切换)

作者: 0981b16f19c7 | 来源:发表于2019-07-06 11:42 被阅读0次

基本概念

CPU上下文

CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。程序计数器,则是用来存储CPU正在执行的指令位置或者即将执行的下一条指令位置。它们都是CPU在运行任何任务前,必须依赖的环境。因此被叫做CPU的上下文。

CPU上下文切换

1)将前一个任务的CPU上下文保存起来;2)加载新任务的上下文;3)跳转到程序计数器所指的新位置,运行新任务。

目的:保证任务原来的状态不受影响,让任务看起来还是连续运行。

分类

进程上下文切换

触发场景:1)CPU时间片耗尽,进程被系统挂起,切换到其它正在等待CPU的进程运行;2)进程在系统资源不足时,要等到资源满足侯才可以运行,这个时候进程也会被挂起,并由系统调度其它进程运行;3)进程通过睡眠函数sleep主动将自己挂起,自然也会重新调度;4)当有优先级更高的进程运行时;5)发生硬件中断时,CPU上的进程也会被中断挂起,转而执行内核中的中断服务程序。

线程上下文切换

两种场景:1)前后两个线程属于不同进程。此时资源不共享,切换过程就跟进程上下文切换一样。2)前后两个线程属于同一个进程。此时,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源保持不动,只需要切换线程的私有数据等不共享的数据。

中断上下文切换

为了快速响应硬件的时间,中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件。

对同一个CPU来说,中断处理比进程拥有更高的优先级。

自愿与非自愿上下文切换

自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如IO、内存等系统资源不足。

非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的。比如说大量进程都在争抢CPU时,就非常容易发生非自愿上下文切换。

应用总结

1、CPU上下文切换是保证linux洗正常工作的核心功能之一,一般情况下我们不需要特别关注;

2、但过多的上下文切换,会把CPU事件消耗在寄存器、内核栈一级虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降。

监控

step1:查看系统总体的上下文切换情况

#vmstat  5   详细使用见vmstat命令详解

step2:查看每个进程的上下文切换情况

#pidstat -w 5  详细使用见pidstat命令详解

step3:查看每个线程的上下文切换情况

#pidstat -wt 5

step4:查看中断情况

#watch -d cat /proc/interrupts

查看系统中断情况

过载经验值:这个数值取决于系统本身的CPU性能。如果系统的上下文切换次数比较稳定,那么从数百到1万以内都算正常,但是上下文切换次数超过1万次,或者切换次数出现数量级的增长时,就有可能出现了性能问题。

结果分析

1、自愿上下文切换变多,说明进程都在等待资源,有可能发生了IO问题;

2、非自愿上下文切换变多,说明进程都在被强制调用,也就是在争抢CPU,说明CPU成了瓶颈;

3、中断次数变多,说明CPU被中断处理程序占用,需要分析具体的中断类型来进一步定位。

相关文章

  • 003-cpu分析(上下文切换)

    基本概念 CPU上下文 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。程序计数器,则是用来存储CPU...

  • 计算机组成原理

    进程上下文切换由以下4个步骤组成: 决定是否作上下文切换以及是否允许作上下文切换。包括对进程调度原因的检查分析,以...

  • 理解进程调度时机跟踪分析进程调度与进程切换的过程

    实验 准备环境 进行调试 进程上下文切换相关代码分析 分析switch_to中的汇编代码:-保存flags-保存e...

  • CPU 上下文切换(上)

    根据任务的不同,CPU 的上下文切换就可以分为几个不同的场景 进程上下文切换 线程上下文切换 中断上下文切换 小结...

  • 2018-06-11-vmstat

    '''用Lmbench3测量上下文切换的时长 vmstat测量上下文切换次数'''

  • CPU性能分析--上下文切换

    内容提要 CPU上下文切换都做了哪些事? CPU上下文切换都有哪些场景? 系统调用上下文切换都做了哪些事? 进程上...

  • 监控CPU

    CPU 上下文切换 根据任务的不同,CPU 的上下文切换就可以分为几个不同的场景,也就是进程上下文切换、线程上下文...

  • Java并发编程-并发编程带来的问题

    并发编程带来的问题 上下文切换 多线程不一定快 如何减少上下文切换 减少上下文切换的方法有无锁编程、CAS算法、使...

  • cm003-pidstat命令详解

    pidstat是一个常用的进程性能分析工具,用来实时查看进城的cpu,内存,io以及上下文切换等。 安装 本人是c...

  • 并发编程的挑战

    上下文切换 上下文切换发生于计算机CPU从一个进程或线程切换到不同的进程或线程。 上下文切换允许一个CPU处理多个...

网友评论

      本文标题:003-cpu分析(上下文切换)

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