我正試圖理解Linux內核中的NAPI實現。這些是我基本的疑問。NAPI中斷禁用和處理共享中斷線
1)NAPI禁止進一步的中斷,並處理skbs'使用輪詢
- 誰禁止呢?
中斷處理程序是否應該禁用它?
如果是 - 禁用中斷和處理實際輪詢完成的SOFTIRQ net_rx_action之間的時間間隔不是太大。
2)默認在下半區使用輪詢接收單個幀禁止中斷,處理剩餘的幀的所有NAPI啓用驅動程序? 還是有一個邏輯,只有當幀> 32(連續接收IRQ處理程序中的所有幀)切換到輪詢模式?
3)現在來共享IRQ -
- 發生了什麼其它設備的中斷,其他設備下半部分可能無法運行,因爲這些設備是不存在的poll_list。
謝謝理解1&2,但是3我還不清楚,比如說NIC 1和NIC 2共享IRQ線,讓我們假設NIC 1是低負載,NIC 2高負載,NIC 1接收中斷,NIC 1的驅動程序將會禁用中斷,直到它處理了softirq,並將時間間隔稱爲t1。因此,對於時間t1,NIC 2中斷被禁用,對吧? – Pramod
@Pramod,啊行。我更新了上面的答案 - 讓我知道是否有幫助。對不起,我誤解你在問什麼。您想知道兩臺共享IRQ的設備如何禁用IRQ以開始使用NAPI而不會阻塞其他設備。是對的嗎?如果是這樣,我認爲我的補充信息解釋了這一點。 –
@Pramod我剛剛做了另一次更新並鏈接到了intel IGB源,因此您可以看到它是如何禁用該NIC的中斷的。 –