MSI-X Capability結構
MSI-X Capability中斷機制與MSI Capability的中斷機制類似。PCIe總線引出MSI-X機制的主要目的是為了擴展PCIe設備使用中斷向量的個數,同時解決MSI中斷機制要求使用中斷向量號連續所帶來的問題。
MSI中斷機制最多只能使用32個中斷向量,而MSI-X可以使用更多的中斷向量。目前Intel的許多PCIe設備支持MSI-X中斷機制。與MSI中斷機制相比,MSI-X機制更為合理。首先MSI-X可以支持更多的中斷請求,但是這並不是引入MSI-X中斷機制最重要的原因。因為對於多數PCIe設備,32種中斷請求已經足夠了。而引入MSI-X中斷機制的主要原因是,使用該機制不需要中斷控制器分配給該設備的中斷向量號連續。
如果一個PCIe設備需要使用8個中斷請求時,如果使用MSI機制時,Message Data的[2:0]字段可以為0b000~0b111,因此可以發送8種中斷請求,但是這8種中斷請求的Message Data字段必須連續。在許多中斷控制器中,Message Data字段連續也意味着中斷控制器需要為這個PCIe設備分配8個連續的中斷向量號。
有時在一個中斷控制器中,雖然具有8個以上的中斷向量號,但是很難保證這些中斷向量號是連續的。因此中斷控制器將無法為這些PCIe設備分配足夠的中斷請求,此時該設備的“Multiple Message Enable”字段將小於“Multiple Message Capable”。
而使用MSI-X機制可以合理解決該問題。在MSI-X Capability結構中,每一個中斷請求都使用獨立的Message Address字段和Message Data字段,從而中斷控制器可以更加合理地為該設備分配中斷資源。
與MSI Capability寄存器相比,MSI-X Capability寄存器使用一個數組存放Message Address字段和Message Data字段,而不是將這兩個字段放入Capability寄存器中,本篇將這個數組稱為MSI-X Table。從而當PCIe設備使用MSI-X機制時,每一個中斷請求可以使用獨立的Message Address字段和Message Data字段。
除此之外MSI-X中斷機制還使用了獨立的Pending Table表,該表用來存放與每一個中斷向量對應的Pending位。這個Pending位的定義與MSI Capability寄存器的Pending位類似。MSI-X Table和Pending Table存放在PCIe設備的BAR空間中。MSI-X機制必須支持這個Pending Table,而MSI機制的Pending Bits字段是可選的。
正所謂
長江后浪推前浪,前浪死在沙灘上。
技術革新永不斷,一不小心就完蛋。