1. 程式人生 > >關於SMI、MSI、SCI、INTx各種中斷小結

關於SMI、MSI、SCI、INTx各種中斷小結

MSI VS INTx(Pin-based interrupt)

        MSI的全稱是Message Signaled Interrupt.MSI出現在PCI 2.2和PCIe的規範中,是一種內部中斷訊號機制。傳統的中斷都有專門的中斷pin,當中斷訊號產生是,中斷PIN電平產生變化(一般是拉低)。INTx就是傳統的外部中斷觸發機制,它使用專門的通道來產生控制資訊。然而PCIe並沒有多根獨立的中斷PIN,它使用特殊的訊號來模擬中斷PIN的置位和復位。MSI允許裝置向一段指定的MMIO地址空間寫一小段資料,然後chipset以此產生相應的中斷給CPU.

對MSI的誤解

        通常有一個對MSI的誤解:有人認為device可以直接向cpu傳送資料作為中斷的一部分。這得看CPU。如果使用的是Client CPU而且PCIe匯流排經過南橋,這部分寫到MMIO的資料是給chipset的,chipset讀取這段資料來決定說傳送什麼樣的中斷給CPU。Device是沒有辦法直接給interrupt handler傳遞更多的資訊的。

 但對於Intel的至強sever處理器,處理器中有IIO(Integrated I/O Controller), 如果PCIe的device是直接接在cpu的root port上的,那麼MSI會被直接傳送到cpu的IIO, IIO又會將MSI轉給UBox, 由UBox把MSI傳送給目標CPU。

MSI Capability結構

MSI Capability一共有四種結構。可以通過讀取MSI Capability結構中的Message Control欄位來判斷當前是四種結構中的哪一種。
MSI結構中的Message Address欄位代表的是目的地址,Message Data就是中斷時要傳送的Data.


相對於PIN-based/out-ofband中斷, MSI的好處

雖然MSI相對比較複雜一點,但它是有不少好處的:

1.  從電氣機械的角度,MSI減少了對interrupt pin個數的需求。從而使得連線頭變得更簡單,更便宜。

2.  MSI增加了中斷號的數量。傳統的PCI中斷只允許每個device擁有4箇中斷,並且由於這些中斷都是共享的,大部分device都只有一箇中斷。MSI允許每個device有1,2,4,8,16或者是32箇中斷。

3.  使用MSI也有一點點效能上的優勢。使用傳統的PIN中斷,當中斷到來時,程式去讀記憶體獲取資料時有可能會產生衝突。其原因device的資料主要通過DMA來傳輸,而在PIN中斷到達時,DMA傳輸還未能完成,此時cpu不能獲取到資料,只能空轉。而MSI不會存在這個問題,因為MSI都是發生在DMA傳輸完成之後的。

SCI VS SMI

SCI:System Control Interrupt, 系統控制中斷。專門用於ACPI電源管理的一個IRQ,需要OS支援。

SMI:System Management Interrupt, 系統管理中斷,使用系統進入SMM的特殊中斷。

兩者區別:

SMI是CPU級別的,ACPI和非ACPI模式下都可以使用,而SCI是OS級別的,只有在ACPI support的OS中才能見到。比如說DOS下觸發的中斷肯定不是SCI,但有可能是SMI。

兩者聯絡:

兩者可以用於電源管理,但SMI不限於電源管理。

觸發過程:

SMI:  (硬體方式)

SMI Pinassert -> CPU SMM mode -> BIOS SMI handler

SMI:(軟體方式)

WriteIO(B2h) -> CPU SMM mode->BIOS SMI handler

SCI:

SCI Pinassert->IDT->OS ACPI driver->ASL code(Q Evnent)->?