我一直在閱讀關於Linux的性能優化,以便在接收金融市場數據時獲得最快的數據包處理時間。我看到,當網卡接收到一個數據包時,它通過DMA將其存儲在內存中,然後產生一個HardIRQ,然後設置一些NAPI設置並引發一個SoftIRQ。然後,SoftIRQ使用NAPI /設備驅動程序通過輪詢從RX緩衝區中讀取數據,但這隻會在有限的時間內運行(net.core.netdev_budget,默認爲300個數據包)。這些都是參照真實服務器運行Ubuntu,與Solarflare的網卡我的問題是如下:Linux上的SoftIRQ和快速數據包處理網絡
如果每個HardIRQ提出了一個軟中斷,以及設備驅動程序在1個圍棋(netdev_budget)讀取多個數據包,會發生什麼到每一個從RX緩衝區中排出的數據包引發的SoftIRQs(每個包接收到的數據包將會增加一個難度,然後是軟irq)?這些排隊?
爲什麼NAPI使用輪詢來排空RX_buffer?系統剛生成一個SoftIRQ並正在讀取RX緩衝區,那麼爲什麼輪詢?
推測,通過softirq排空RX_Buffer只會從1個特定的RX_Buffer發生,而不會發生在多個RX_Buffers之間?如果是這樣,那麼增加netdev_budget可以延遲處理/排空其他RX_buffers?或者可以通過將不同的RX_buffers分配給不同的內核來緩解這種情況?
有一些設置可以確保立即提出並處理HardIRQ。但是,SoftIRQ可能會在稍後處理。是否有設置/配置以確保與網絡RX相關的SoftIRQ也以最高優先級處理並且沒有延遲?
這可能更適合Linux/Ubuntu Stack Exchange站點之一。 –