【轉】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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM