CPU中斷請求理解

CPU軟中斷

1、什麼是中斷

中斷表示我們請求操作事件準備就緒了,例如從磁盤讀取數據,我們知道CPU執行速度比磁盤執行速度快幾個數量級,因此如果CPU每次check磁盤是否準備就緒了,那麼系統的併發能力和性能會大大下降,但是採用中斷方式,異步事件驅動方式來提升系統效率,首先會在驅動程序中嵌入中斷程序,一旦磁盤準備就緒就會通過驅動程序發生一箇中斷請求操作,CPU立馬停下手裏的活來執行中斷程序,該中斷程序會從磁盤中讀取數據到內存中。

2、如何避免丟失其他中斷請求

一定要保證中斷程序快速能處理,因爲當CPU在處理中斷時,是不能響應其他中斷請求的,那麼就會導致其他中斷請求丟失

舉個取外賣的例子:我們在app上點外賣,但是這個外賣不知道什麼時候到,因爲送外賣小哥一旦到了目的地就會放下外賣就走,這個時候你就會一次又一次的check外賣是否到了,然而你什麼時候也幹不了,僅僅在來來回回看外賣是否到了,導致浪費你的時間。

改進方式:如果換一種方式,你和外賣小哥約定一個通知方式,例如當外賣到了家門口小哥就打電話通知我,我就出去取外賣。 打電話就是一次中斷請求,你就安心的幹其他事情,靜靜等電話。 如果你點了兩份外賣,當第一份外賣到了,小哥電話通知你,但是你在電話中溝通發票問題,這個時候第二份外賣到了另外一個小哥給你打電話發現佔線,幾次嘗試後還是失敗,這個時候外賣小哥就走了,導致丟失了這次外賣。

**解決:**在電話中只回答好,然後溝通發票問題當面說,這個時候就可以接到另外小哥的電話。 所以系統的中斷請求分爲兩個階段:

第一階段(上半部請求):接受硬件中斷請求(從硬件中取完數據後發送一次軟斷請求,複雜邏輯交給下半部分請求,),稱爲硬中斷,特點是處理速度快

第二階段(下半部請求): 內核線程接受到上半部分軟中斷請求,就會異步的繼續執行上半部未完成的請求, 稱爲軟中斷,特點延遲執行

舉個網絡接受數據例子:

當網卡接收到數據時,首先會發送一個硬中斷請求,這個時候CPU就會執行中斷處理程序,快速將網卡中數據讀取到內存中,完成後會發送一個軟中斷請求,下半部被軟中斷信號喚醒後就會按照網絡協議棧將內存數據進行解析處理,最終遞給應用程序。(處理期間還是可以響應其他硬中斷請求的)

中斷中的異步事件機制提高併發能力思想應用到了現在流行的網絡通訊框架Netty中,提高系統吞吐量,詳細瞭解Netty實現原理Reactor模式

3、查看硬中斷和軟中斷運行情況

可以查看 /proc/interrupts 和 /proc/softirq 文件

從 /proc/softirq文件中可以看到軟中斷類型
TIMER(定時中斷)、NET_RX(網絡接收)、SCHED(內核調度)、RCU(RCU 鎖)

總結

一般如果軟中斷佔用CPU多時,大多都是系統讀取網卡數據太頻繁了(要麼數據包太小、可能受到了SYNC FLOOD攻擊 (交換機或防火牆屏蔽此ip,防止將數據進入系統中))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章