linux 中的中斷處理程式分為上半部和下半部:上半部對應硬體中斷,用來快速處理中斷。下半部對應軟中斷,用來非同步處理上半部未完成的工作。linux 中的軟中斷包括網路收發、定時、排程、rcu 鎖等各種型別,可以通過檢視 /proc/softirqs 來觀察軟中斷的運**況。
網絡卡接收資料報的例子,讓你更好地理解。網絡卡接收到資料報後,會通過硬體中斷的方式,通知核心有新的資料到了。這時,核心就應該呼叫中斷處理程式來響應它。你可以自己先想一下,這種情況下的上半部和下半部分別負責什麼工作呢?對上半部來說,既然是快速處理,其實就是要把網絡卡的資料讀到記憶體中,然後更新一下硬體暫存器的狀態(表示資料已經讀好了),最後再傳送乙個軟中斷訊號,通知下半部做進一步的處理。而下半部被軟中斷訊號喚醒後,需要從記憶體中找到網路資料,再按照網路協議棧,對資料進行逐層解析和處理,直到把它送給應用程式。所以,這兩個階段你也可以這樣理解:
上半部直接處理硬體請求,也就是我們常說的硬中斷,特點是快速執行;
而下半部則是由核心觸發,也就是我們常說的軟中斷,特點是延遲執行。實際上,上半部會打斷 cpu 正在執行的任務,然後立即執行中斷處理程式。
而下半部以核心執行緒的方式執行,並且每個 cpu 都對應乙個軟中斷核心執行緒,名字為 「ksoftirqd/cpu 編號」,比如說, 0 號 cpu 對應的軟中斷核心執行緒的名字就是 ksoftirqd/0。
不過要注意的是,軟中斷不只包括了剛剛所講的硬體裝置中斷處理程式的下半部,一些核心自定義的事件也屬於軟中斷,比如核心排程和 rcu 鎖(read-copy update 的縮寫,rcu 是 linux 核心中最常用的鎖之一)等。那要怎麼知道你的系統裡有哪些軟中斷呢?檢視軟中斷和核心執行緒不知道你還記不記得,前面提到過的 proc 檔案系統。它是一種核心空間和使用者空間進行通訊的機制,可以用來檢視核心的資料結構,或者用來動態修改核心的配置。其中:/proc/softirqs 提供了軟中斷的運**況;/proc/interrupts 提供了硬中斷的運**況。執行下面的命令,檢視 /proc/softirqs 檔案的內容,你就可以看到各種型別軟中斷在不同 cpu 上的累積執行次數:$ cat /proc/softirqs cpu0 cpu1 hi: 0 0 timer: 811613 1972736 net_tx: 49 7 net_rx: 1136736 15068
軟中斷 cpu 使用率(softirq)公升高是一種很常見的效能問題。雖然軟中斷的型別很多,但實際生產中,我們遇到的效能瓶頸大多是網路收發型別的軟中斷,特別是網路接收的軟中斷。在碰到這類問題時,你可以借用 sar、tcpdump 等工具,做進一步分析。
自我介紹 軟工5問
這個作業屬於哪個課程 軟體工程 這個作業要求在 作業要求 這個作業的目標 建立github與賬號,熟悉markdown用法 自我介紹 github截圖 截圖自我介紹 姓名何悅 github e mail 2239115773 qq.com 興趣愛好 聽 打桌球,玩遊戲 軟工五問 書中的理論對實際軟體...
自我介紹 軟工5問
這個作業屬於哪個課程 軟體工程 這個作業在 自我介紹 軟工5問 這個作業的目標 自我介紹 1.name 盧敏聰 2.hobby 打羽毛球,偶爾打打遊戲,看看動漫 3.github 4.e mail 583093007 qq.com 5.學習成績不算好,曾經在大一掛科程式設計,在 程式設計方面相當薄弱...
自我介紹 軟工5問
作業所屬課程 作業要求 作業目標 軟工五問 markdown基礎語法編寫文字 github和git的使用 軟體工程與以往的程式設計有何不同?軟體工程的發展是怎麼進行的?如何從0開始構建乙個軟體?物件導向對軟體工程的意義是什麼?如何從細節上實現乙個軟體?學會使用markdown git和github等...