Linux效能優化實戰學習筆記 第三講

2021-10-10 15:22:52 字數 1932 閱讀 4605

上下文切換是對任務當前執行狀態的暫存和恢復

當多個程序競爭cpu的時候,cpu為了保證每個程序能公平被排程執行,採取了處理任務時間分片的機制,

輪流處理多個程序,由於cpu處理速度非常快,在人類的感官上認為是並行處理,實際是"偽"並行,

同一時間只有乙個任務在執行處理。

根據 tsuna 的測試報告,每次上下文切換都需要幾十納秒到到微秒的cpu時間,這些時間對cpu來說,

就好比人類對1分鐘或10分鐘的感覺概念。在分秒必爭的計算機處理環境下,浪費太多時間在切換上,

只能會降低真正處理任務的時間,表象上導致延時、排隊、卡頓現象發生。

程序上下文切換、執行緒上下文切換、中斷上下文切換

系統呼叫、程序狀態轉換(執行、就緒、阻塞)、時間片耗盡、系統資源不足、sleep、優先順序排程、硬體中斷等

執行緒是排程的基本單位,程序是資源擁有的基本單位,同屬乙個程序的執行緒,發生上下文切換,

只切換執行緒的私有資料,共享資料不變,因此速度非常快。

資料庫連線池(復用連線)、合理設定應用的最大程序,執行緒數、直接記憶體訪問dma、零拷貝技術

(1)程序執行態為核心執行態和程序執行態。核心空間態資源包括核心的堆疊、暫存器等;使用者空間態資源包括虛擬記憶體、棧、變數、正文、資料等

(2)系統呼叫(軟中斷)在核心態完成的,需要進行2次cpu上下文切換(使用者空間-->核心空間-->使用者空間),不涉及使用者態資源,也不會切換程序。

(3)程序是由核心來管理和排程的,程序的切換只能發生在核心態。所以,程序的上下文不僅包括了使用者空間的資源,也包括核心空間資源。

(4)程序的上下文切換過程:

(a)接收到切換訊號,掛起程序,記錄當前程序的虛擬記憶體、棧等資源儲存;

(b)將這個程序在 cpu 中的上下文狀態儲存於起來;

(c)然後在記憶體中檢索下乙個程序的上下文;

(d)並將其載入到 cpu的暫存器中恢復;

(e)還需要重新整理程序的虛擬記憶體和使用者棧;

(f)最後跳轉到程式計數器所指向的位置(即跳轉到程序被中斷時的**行),以恢復該程序。

(5)、下列將會觸發程序上下文切換的場景:

(a)、根據排程策略,將cpu時間劃片為對應的時間片,當時間片耗盡,當前程序必須掛起。

(b)、資源不足的,在獲取到足夠資源之前程序掛起。

(c)、程序sleep掛起程序。

(d)、高優先順序程序導致當前進度掛起

(e)、硬體中斷,導致當前程序掛起

(1)、不同程序之間的執行緒上下文切換,其過程和程序上下文切換大致相同。

(2)、執行緒內部的執行緒進上下文切換。不需要切換程序的使用者資源,只需要切換執行緒私有的資料和暫存器等。

這會比程序上下文程序切換消耗的資源少,所以多執行緒相比多程序的優勢。

為了快速響應硬體的事件(如usb接入),中斷處理會打斷程序的正常排程和執行,轉而呼叫中斷處理程式,

響應裝置事件。而打斷其它程序執行時,需要進行上下文切換。中斷事件過多,會無謂的消耗cpu資源,導致程序處理時間延長。

對於乙個cpu來說,中斷處理比程序擁有更高的優先順序

最後,我想邀請你一起來聊聊,你所理解的cpu上下文切換,你可以結合今天的內容,總結自己的思路和看法,寫下你的學習心得

程序切換我想到了很多年前在銀行櫃檯辦理業務的情形。

1:銀行分配各個視窗給來辦理業務的人

2:如果只有1個視窗開放(系統資源不足),大部分都得等

3:如果正在辦理業務的突然說自己不辦了(sleep),那他就去旁邊再想想(等)

4:如果突然來了個vip客戶,可以強行插隊

5:如果突然斷電了(中斷),都得等。。

LinuxIO效能優化實戰學習筆記

以下內容來自極客課程,如對您有幫助,詳細課程請見海報 1.檔案系統 為了方便管理,linux 檔案系統為每個檔案都分配兩個資料結構,索引節點 index node 和目錄項 directory entry 它們主要用來記錄檔案的元資訊和目錄結構。2.slab cache cached sreclai...

學習Linux效能優化實戰 1

程序排程 軟中斷測試工具 最近在極客時間上面發現了倪鵬飛老師的linux效能優化實戰,自己感覺講得很好,有興趣的朋友可以去極客時間上面訂閱。部落格是自己總結學習到的一些命令,記錄下來,以備後面使用。侵刪。uptime 用來看系統過去的 1 5 15 分鐘的平均負載。mpstat p all inte...

Linux效能優化實戰學習筆記 第五十四講

上一節,我帶你學習了,如何使用 use 法來監控系統的效能,先簡單回顧一下。系統監控的核心是資源的使用情況,這既包括 cpu 記憶體 磁碟 檔案系統 網路等硬體資源,也包括檔案描述符數 連線數 連線跟蹤數等軟體資源。而要描述這些資源瓶頸,最簡單有效的 方法就是 use 法。use 法把系統資源的效能...