Context Switches上下文切換效能詳解

2021-10-08 08:56:15 字數 1827 閱讀 7570

1、什麼是cpu上下文切換(context switches)?

作業系統

可以同時執行多個程序, 然而一顆cpu同時只能執行一項任務,作業系統利用時間片輪轉的方式,讓使用者感覺這些任務正在同時進行。 cpu給每個任務都服務一定的時間, 然後把當前任務的狀態儲存下來, 在載入下一任務的狀態後, 繼續服務下一任務。任務的狀態儲存及再載入, 這段過程就叫做上下文切換。

context switches上下文切換,有時也被稱為程序切換(process switch)或任務切換。是乙個重要的效能指標。

時間片輪轉的方式使多個任務在同一顆cpu上執行變成了可能, 但同時也帶來了儲存現場和載入現場的直接消耗。

cpu從乙個執行緒切換到另外乙個執行緒,需要儲存當前任務的執行環境,恢復將要執行任務的執行環境,必然帶來效能消耗。

2、如何獲得上下文切換的次數?( 效能分析檢視context switches的方法)

linux

中可以通過工具vmstat, dstat, pidstat來觀察cs的切換情況。vmstat, dstat只能觀察整個系統的切換情況,而pidstat可以更精確地觀察某個程序的上下文切換情況。

windows中可以使用檢視程序的神器processxp,程序列表中可以新增context switchs和context switchs delta列,另外程序屬性threads標籤頁可檢視執行緒對應的context switchs。

另windows中還可以使用「效能計數器」監控context switchs的變化趨勢,方便效能分析。新增system\context switches/sec或thread(_total)\context switches/sec計數器即可。

示例如下:vmstat直接執行即可,在最後幾列,有cpu的context switch次數。 這個是系統層面的,加入想看特定程序的情況,可以使用pidstat。

執行pidstat,將輸出系統啟動後所有活動程序的cpu統計資訊:       ​  

2023年07月21日:pidstat獲取資訊時間點

pid: 程序pid

%usr: 程序在使用者態執行所佔cpu時間比率

%system: 程序在核心態執行所佔cpu時間比率

%cpu: 程序執行所佔cpu時間比率

cpu: 指示程序在哪個核執行

command: 拉起程序對應的命令

備註:執行pidstat預設輸出資訊為系統啟動後到執行時間點的統計資訊,因而即使當前某程序的cpu佔用率很高,輸出中的值有可能仍為 0。

3、上下文切換的效能消耗

間接消耗:多核的cache之間得共享資料。間接消耗對於程式的影響要看執行緒工作區運算元據的大小。

linux相比與其他作業系統(包括其他類 unix 系統)有很多的優點,其中有一項就是,其上下文切換和模式切換的時間消耗非常少。

4、引起上下文切換的原因

對於我們經常使用的搶占式作業系統來說, 引起上下文切換的原因大概有以下幾種:

1. 當前執行任務的時間片用完之後, 系統cpu正常排程下乙個任務

2. 當前執行任務碰到io阻塞, 排程器將掛起此任務, 繼續下一任務

3. 多個任務搶占鎖資源, 當前任務沒有搶到,被排程器掛起, 繼續下一任務

4. 使用者**掛起當前任務, 讓出cpu時間

5. 硬體中斷,(如鍵盤、滑鼠、除錯解調器、系統時鐘)

Context Switches上下文切換效能詳解

context switches 上下文切換,有時也被稱為程序切換 process switch 或任務切換。是乙個重要的效能指標。cpu從乙個執行緒切換到另外乙個執行緒,需要儲存當前任務的執行環境,恢復將要執行任務的執行環境,必然帶來效能消耗。context switches 上下文切換簡介 作業...

上下文切換

1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...

上下文切換

上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...