CPU 上下文切換,執行佇列和使用率

2021-08-13 11:09:16 字數 1187 閱讀 4866

引用 :

關於cpu,有3個重要的概念:上下文切換(context switchs),執行佇列(run queue)和使用率(utilization)。 

上下文切換: 

目前流行的cpu在同一時間內只能執行乙個執行緒,超執行緒的處理器可以在同一時間執行多個執行緒(包括多核cpu),linux核心會把多核的處理器當作多個單獨的cpu來識別。 

乙個標準的linux核心可以支援執行50~50000個程序執行,對於普通的cpu,核心會排程和執行這些程序。每個程序都會分到cpu的時間片來執行,當乙個程序用完時間片或者被更高優先順序的程序搶占後,它會備份到cpu的執行佇列中,同時其他程序在cpu上執行。這個程序切換的過程被稱作上下文切換。過多的上下文切換會造成系統很大的開銷。 

執行佇列 

每個cpu都會維持乙個執行佇列,理想情況下,排程器會不斷讓佇列中的程序執行。程序不是處在sleep狀態就是run able狀態。如果cpu過載,就會出現排程器跟不上系統的要求,導致可執行的程序會填滿佇列。佇列愈大,程式執行時間就愈長。 

關於時間片和動態優先順序 

時間片對於cpu來說是很關鍵的引數,如果時間片太長,就會使系統的互動性能變差,使用者感覺不到並行。如果太短,又會造成系統頻繁的上下文切換,使效能下降。對於io bound的系統來講並不需要太長的時間片,因為系統主要是io操作;而對於cpu bound的系統來說需要長的時間片以保持cache的有效性。 

每乙個程序啟動的時候系統都會給出乙個預設的優先順序,但在執行過程中,系統會根據程序的執行狀況不斷調整優先順序,核心會公升高或降低程序的優先順序(每次增加或降低5),判斷標準是根據程序處於sleep狀態的時間。 

io bound程序大部分時間在sleep狀態,所以核心會調高它的優先順序,cpu bound程序會被核心懲罰降低優先順序。因此,如果乙個系統上即執行io bound程序,又執行cpu bound程序,會發現,io bound程序的效能不會下降,而cpu bound程序效能會不斷下降。 

經驗總結: 

1. 對於每乙個cpu來說執行佇列不要超過3,例如,如果是雙核cpu就不要超過6; 

2. 如果cpu在滿負荷執行,應該符合下列分布, 

a) user time:65%~70% 

b) system time:30%~35% 

c) idle:0%~5% 

3. 對於上下文切換要結合cpu使用率來看,如果cpu使用滿足上述分布,大量的上下文切換也是可以接受的。

CPU上下文切換

linux任務執行前,cpu都要知道從任務從 載入 又從 開始執行,也就是說,需要系統事先幫它設定好cpu暫存器和程式計數器 cpu上下文 cpu暫存器和程式計數器 cpu暫存器 cpu內建容量小 速度極快的記憶體 程式計數器 儲存cpu正在執行的指令位置 或者即將執行的下一條指令位置 把前乙個任務...

CPU 上下文切換

乙個酒店,裡面滿滿的客人在吃飯,好比是,酒店裡面的所有人速速離開酒店,讓下一波客人吃。好比是 酒店裡的客人不需要離開酒店,但是服務員就是不給他們上菜,因為服務員去給 vip 客戶服務去了,好在 vip 客戶比較好說話,很快就伺候好了,服務員再來給酒店裡的客人服務 不好意思,這道菜的工序比較複雜,讓您...

筆記 cpu上下文,上下文切換

cpu 上下文 cpu 暫存器,是 cpu 內建的容量小 但速度極快的記憶體。而程式計數器,則是用來儲存 cpu 正在執行的指令位置 或者即將執行的下一條指令位置。它們都是 cpu 在執行任何任務前,必須的依賴環境。cpu 上下文切換 就是先把前乙個任務的 cpu 上下文 也就是 cpu 暫存器和程...