zoukankan      html  css  js  c++  java
  • 【转】CPU上下文切换的次数和时间(context switch)

    什么是CPU上下文切换?

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

    如何获得上下文切换的次数?

             vmstat直接运行即可,在最后几列,有CPU的context switch次数。 这个是系统层面的,加入想看特定进程的情况,可以使用pidstat。

    Linux中可以通过工具vmstat, dstat, pidstat来观察CS的切换情况。vmstat, dstat只能观察整个系统的切换情况,而pidstat可以更精确地观察某个进程的上下文切换情况。

    cs

     

    执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:

     

    备注:执行pidstat默认输出信息为系统启动后到执行时间点的统计信息,因而即使当前某进程的cpu占用率很高,输出中的值有可能仍为0

    上下文切换的性能消耗在哪里呢?

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

        ​

        ​    ​引起上下文切换的原因有哪些?

        ​    ​对于抢占式操作系统而言, 大体有几种:

        ​    ​1、当前任务的时间片用完之后,系统CPU正常调度下一个任务;

        ​    ​2、当前任务碰到IO阻塞,调度线程将挂起此任务,继续下一个任务;

        ​    ​3、多个任务抢占锁资源,当前任务没有抢到,被调度器挂起,继续下一个任务;

        ​    ​4、用户代码挂起当前任务,让出CPU时间;

        ​    ​5、硬件中断;

        ​   ​

        ​    ​如何测试上下文切换的时间消耗?

            LMbench,知道这个工具,是在霸爷的博客上面(http://blog.yufeng.info/archives/753),然后就开始在测试环境下搞了一把,一会就出结果了。然后就搞了台线上机器安装这个工具,然后测试,后面在测试Memory的时候,直接导致Load飙升,还好没人发现,机器java进程重启就好了。这方面纯粹是业务选手。霸爷说分析的结果对于高性能C的开发同学来说,是需要熟记的,没办法,咱是搞java的,只能每个指标逐个看一下了。

           ​ 

        ​    ​LMbench的简单介绍?

        ​    首先看英文介绍:LMbench -Tools for Performance Analysis,微观性能分析工具。

         ​   官方地址:http://www.bitmover.com/lmbench/

            ​下载地址:http://www.bitmover.com/lmbench/lmbench3.tar.gz 

            

        ​    ​LMbench​主要能干啥?

            ​主要是带宽(读取缓存文件、内存拷贝、读写内存、管道等)和反应时间(上下文切换、网路、进程创建等)的评测工具。

     LMbench关于结果解释(这次主要关注线程切换信息)

            在网上找了半天,信息很少,只能看doc下面的英文解释了。    

            测试上下文切换的时间,一个上下文切换,包括保存一个进程状态的保存和恢复另外一个进程的时间。

            典型的上下文切换性能,仅仅是测量最小的线程切换时间。仅仅是做进程切换,任何实质的任务都不做。

    首先是看任务处理的时间(通过一次任务处理,这个任务处理的时间被定义为token时间,不包括线程切换的)。
        然后多次执行,排除任务执行的时间,然后计算出CS的时间(如果有cache miss,则CS的时间也包括cache misses的时间)。

    转载自:http://iamzhongyong.iteye.com/blog/1895728

    文章参考:    

    霸爷和周忱的博客

    http://www.bitmover.com/lmbench/

    https://www.usenix.org/legacy/publications/library/proceedings/sd96/full_papers/mcvoy.pdf

    http://blog.csdn.net/taozi343805436/article/details/7876087 

    http://blog.yufeng.info/archives/753

    http://rdc.taobao.com/team/jm/archives/1706

  • 相关阅读:
    ubuntu16.04系统安装
    SQL注入之Sqli-labs系列第二十六关(过滤空格、注释符、逻辑运算符注入)和第二十六A
    提权心法(2)提权基本流程
    布尔盲注
    提权心法(1)信息搜集很重要
    POST注入-双注入
    POST型注入-报错注入
    字符型注入
    Web中间件常见安全漏洞总结
    SSRF 从入门到批量找漏洞
  • 原文地址:https://www.cnblogs.com/uncleyong/p/7279294.html
Copyright © 2011-2022 走看看