zoukankan      html  css  js  c++  java
  • CPU上下文切换以及相关指标的理解

     

    前言

    上下文切换这个词一直不理解,看了无数遍就忘了无数遍,知道看到《操作系统导论》这本书,终于有了略微的理解。这也证明了我的方向是没错的,一直认为做运维还是得理解底层的知识,不理解很多东西只是搬运工而已,比如监控做了无数遍,但是具体的监控指标理解吗,这个监控指标如何衡量系统的性能。
     

    官方理解

    1)操作系统要做的就是为当前正在执行的进程保存一些寄存器的值,并为即将执行的进程恢复一些寄存器的值,这样一来,操作系统就可以确保最后执行从陷阱返回指令时,不是返回到之前运行的进程而是继续执行另一个进程。
    2)现在linux是基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前的状态保存下来,同时加载下一个任务,这个过程叫做上下文切换。时间片轮转的方式,使得多个任务利用一个CPU执行成为可能,但是保存现场和加载现场,也带来了性能消耗。
     

    相关知识

    1)虚拟化
         为了虚拟化CPU,操作系统需要以某种方式让许多任务共享物理CPU,在他们看起来像是同时运行。基本的思路:运行一个进程一段时间,然后运行另一个进程,如此轮换,通过以这种方式时分共享CPU,实现了虚拟化。
     
    2)时钟中断
         时钟中断的目的是让CPU重新获取CPU的控制权,然后停止当前的进程,运行另一个进程。
     
    因此,停止当前进程运行另一个进程时,需要保留当前进程的相关信息,并读取接下来将要运行的进程的相关信息,这样系统才知道需要运行哪一个进程,这种保存当前进程信息,以及读取下一个进程的相关信息叫做上下文切换。
     

    自己理解

     
    1)通俗易懂的讲法:每秒钟进程的切换次数
    2)单位:ksps(千次每秒)
    3)指标类型:性能指标
    4)zabbix上的监控项:system.cpu.switches       每秒进程切换次数
         相关监控项:           system.cpu.intr                每秒时钟中断次数
     
     
     
    时间中断的目的是为了进行进程切换,因此这两个监控线一般放在一起,时钟中断就是为了进程切换,但是每一次时钟中断不一定会切换进程
     

    测试系统的上下文

     1)工具lmbench

     wget http://www.bitmover.com/lmbench/lmbench3.tar.gz
     tar -zxvf lmbench3.tar.gz 
     cd src/
     make results

    2)可能会报错:

    gmake[1]: Entering directory `/lmbeanch/lmbench3/src'
    gmake[1]: *** No rule to make target `../SCCS/s.ChangeSet', needed by `bk.ver'.  Stop.
    gmake[1]: Leaving directory `/lmbeanch/lmbench3/src'
    make: *** [lmbench] Error 2

    3)解决办法:

    把src/Makefile文件的第231行的$O/lmbench : ../scripts/lmbench  bk.ver  的 bk.ver 去掉为$O/lmbench : ../scripts/lmbench

    4)使用

    下篇博文专门总结。

  • 相关阅读:
    你是老鸟吗?但是有些你可能目前都不知道的东西
    工具类合集
    也谈Flash mmorpg地图问题【转】
    大量实用工具类、开源包,该帖绝对值得你收藏!
    如何设计产品【页游】
    网络游戏中,玩家常常询问什么时候开新服,其中的本质需求是什么?
    大将军UE分析
    天天连萌UE分析
    selenium IDE 回放报错
    jenkins配置
  • 原文地址:https://www.cnblogs.com/lemon-le/p/12952762.html
Copyright © 2011-2022 走看看