context switches 上下文切換,有時也被稱為程序切換(process switch)或任務切換。是乙個重要的效能指標。
cpu從乙個執行緒切換到另外乙個執行緒,需要儲存當前任務的執行環境,恢復將要執行任務的執行環境,必然帶來效能消耗。
context switches 上下文切換簡介
作業系統可以同時執行多個程序, 然而一顆cpu同時只能執行一項任務,作業系統利用時間片輪轉的方式,讓使用者感覺這些任務正在同時進行。 cpu給每個任務都服務一定的時間, 然後把當前任務的狀態儲存下來, 在載入下一任務的狀態後, 繼續服務下一任務。任務的狀態儲存及再載入, 這段過程就叫做上下文切換。
時間片輪轉的方式使多個任務在同一顆cpu上執行變成了可能, 但同時也帶來了儲存現場和載入現場的直接消耗。
上下文切換的效能消耗
間接消耗:多核的cache之間得共享資料。間接消耗對於程式的影響要看執行緒工作區運算元據的大小。
效能分析檢視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計數器即可。
引起上下文切換的原因
對於我們經常使用的搶占式作業系統來說, 引起上下文切換的原因大概有以下幾種:
1. 當前執行任務的時間片用完之後, 系統cpu正常排程下乙個任務
2. 當前執行任務碰到io阻塞, 排程器將掛起此任務, 繼續下一任務
3. 多個任務搶占鎖資源, 當前任務沒有搶到,被排程器掛起, 繼續下一任務
4. 使用者**掛起當前任務, 讓出cpu時間
5. 硬體中斷
6san.com
Context Switches上下文切換效能詳解
1 什麼是cpu上下文切換 context switches 作業系統 可以同時執行多個程序,然而一顆cpu同時只能執行一項任務,作業系統利用時間片輪轉的方式,讓使用者感覺這些任務正在同時進行。cpu給每個任務都服務一定的時間,然後把當前任務的狀態儲存下來,在載入下一任務的狀態後,繼續服務下一任務。...
上下文切換
1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...
上下文切換
上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...