0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

教大家如何處理x86處理器中MSI-X中斷請求

TLOc_gh_3394704 ? 來源:博客 ? 作者:sailing ? 2021-08-12 11:23 ? 次閱讀

x86處理器如何處理MSI-X中斷請求PCIe設備發(fā)出MSI-X中斷請求的方法與發(fā)出MSI中斷請求的方法類似,都是向Message Address所在的地址寫Message Data字段包含的數(shù)據(jù)。

只是MSI-X中斷機制為了支持更多的中斷請求,在MSI-X Capablity結構中存放了一個指向一組Message Address和 Message Data字段的指針,從而一個PCIe設備可以支持的MSI-X中斷請求數(shù)目大于32個,而且并不要求中斷向量號連續(xù)。

MSI-X機制使用的這組Message Address和 Message Data字段存放在PCIe設備的BAR空間中,而不是在PCIe設備的配置空間中,從而可以由用戶決定使用MSI-X中斷請求的數(shù)目。

當系統(tǒng)軟件初始化PCIe設備時,如果該PCIe設備使用MSI-X機制傳遞中斷請求,需要對MSI-X Capability結構指向的Message Address和Message Data字段進行設置,并使能MSI-X Enable位。x86處理器在此處的實現(xiàn)與PowerPC處理器有較大的不同。

Message Address字段和Message Data字段的格式

在x86處理器系統(tǒng)中,PCIe設備也是通過向Message Address寫入Message Data指定的數(shù)值實現(xiàn)MSI/MSI-X機制。在x86處理器系統(tǒng)中,PCIe設備使用的Message Adress字段和Message Data字段與PowerPC處理器不同。

1 PCIe設備使用Message Adress字段

在x86處理器系統(tǒng)中,PCIe設備使用的Message Address字段仍然保存PCI總線域的地址。

其中第31~20位,存放FSB Interrupts存儲器空間的基地址,其值為0xFEE。當PCIe設備對0xFEEX-XXXX這段“PCI總線域”的地址空間進行寫操作時,MCH/ICH將會首先進行“PCI總線域”到“存儲器域”的地址轉換,之后將這個寫操作翻譯為FSB總線的Interrupt Message總線事務,從而向CPU內(nèi)核提交中斷請求。

x86處理器使用FSB Interrupt Message總線事務轉發(fā)MSI/MSI-X中斷請求。使用這種方法的優(yōu)點是向CPU內(nèi)核提交中斷請求的同時,提交PCIe設備使用的中斷向量,從而CPU不需要使用中斷響應周期從寄存器中獲得中斷向量。FSB Interrupt Message總線事務的詳細說明見下文。

Message Address字段其他位的含義如下所示。

?Destination ID字段保存目標CPU的ID號,目標CPU的ID與該字段相等時,目標CPU將接收這個Interrupt Message。FSB Interrupt Message總線事務可以向不同的CPU提交中斷請求。

?RH(Redirection Hint Indication)位為0時,表示Interrupt Message將直接發(fā)向與Destination ID字段相同的目標CPU;如果RH為1時,將使能中斷轉發(fā)功能。

?DM(Destination Mode)位表示在傳遞優(yōu)先權最低的中斷請求時,Destination ID字段是否被翻譯為Logical或者Physical APIC ID。在x86處理器中APIC ID有三種模式,分別為Physical、Logical和Cluster ID模式。

?如果RH位為1且DM位為0時,Destination ID字段使用Physical模式;如果RH位為1且DM位為1,Destination ID字段使用Logical模式;如果RH位為0,DM位將被忽略。

以上這些字段的描述與x86處理器使用的APIC中斷控制器相關。對APIC的詳細說明超出了本書的范圍,對此部分感興趣的讀者請參閱Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1。

2 Message Data字段

Trigger Mode字段為0b0x時,PCIe設備使用邊沿觸發(fā)方式申請中斷;為0b10時使用低電平觸發(fā)方式;為0b11時使用高電平觸發(fā)方式。

MSI/MSI-X中斷請求使用邊沿觸發(fā)方式,但是FSB Interrupt Message總線事務還支持Legacy INTx中斷請求方式,因此在Message Data字段中仍然支持電平觸發(fā)方式。但是對于PCIe設備而言,該字段為0b0x。

Vector字段表示這個中斷請求使用的中斷向量。FSB Interrupt Message總線事務在提交中斷請求的同時,將中斷向量也通知給處理器。

因此使用FSB Interrupt Message總線事務時,處理器不需要使用中斷響應周期通過讀取中斷控制器獲得中斷向量號。與PowerPC的傳統(tǒng)方式相比,x86處理器的這種中斷請求的效率較高[①]。

值得注意的是,在x86處理器中,MSI機制使用的Message Data字段與MSI-X機制相同。但是當一個PCIe設備支持多個MSI中斷請求時,其Message Data字段必須是連續(xù)的,因而其使用的Vector字段也必須是連續(xù)的,這也是在x86處理器系統(tǒng)中,PCIe設備支持多個MSI中斷請求的問題所在,而使用MSI-X機制有效避免了該問題。

Delivery Mode字段表示如何處理來自PCIe設備的中斷請求。

?該字段為0b000時,表示使用“Fixed Mode”方式。此時這個中斷請求將被Destination ID字段指定的CPU處理。

?該字段為0b001時,表示使用“Lowest Priority”方式。此時這個中斷請求將被優(yōu)先權最低的CPU處理。

當使用“Fixed Mode”和“Lowest Priority”方式時,如果Vector字段有效,CPU接收到這個中斷請求之后,將使用Vector字段指定的中斷向量處理這些中斷請求;而當Delivery Mode字段為其他值時,Message Data字段中所包含的Vector字段無效。

?該字段為0b010時,表示使用SMI方式傳遞中斷請求,而且必須使用邊沿觸發(fā),此時Vector字段必須為0。這個中斷請求將被Destination ID字段指定的CPU處理。

?該字段為0b100時,表示使用NMI方式傳遞中斷請求,而且必須使用邊沿觸發(fā),此時Vector字段和Trigger字段的內(nèi)容將被忽略。這個中斷請求將被Destination ID字段指定的CPU處理。

?該字段為0b101時,表示使用INIT方式傳遞中斷請求,Vector字段和Trigger字段的內(nèi)容將被忽略。這個中斷請求將被Destination ID字段指定的CPU處理。

?該字段為0b111時,表示使用INTR信號傳遞中斷請求且使用邊沿觸發(fā)。此時MSI中斷信息首先傳遞給中斷控制器,然后中斷控制器在通過INTR信號向CPU傳遞中斷請求,之后CPU在通過中斷響應周期獲得中斷向量。

上文中PowerPC處理器使用的方法與此方法類似。而在x86處理器中多使用Interrupt Message總線事務進行MSI中斷信息的傳遞,因此這種模式很少被使用。

邊沿觸發(fā)和電平觸發(fā)是中斷請求常用的兩種方式。其中電平觸發(fā)指外部設備使用邏輯電平1(高電平觸發(fā))或者0(低電平觸發(fā)),提交中斷請求。使用電平或者邊沿方式提交中斷請求時,外部設備一般通過中斷線(IRQ_PIN#)與中斷控制器相連,其中多個外部設備可能通過相同的中斷線與中斷控制器相連(線與或者與門)。

外部設備在使用低電平觸發(fā),提交中斷請求的過程中,首先需要將IRQ_PIN#信號驅(qū)動為低。當中斷控制器將該中斷請求提交給處理器,而且處理器將這個中斷請求處理完畢后,處理器將通過寫外部設備的某個寄存器來清除此中斷源,此時外部設備將不再驅(qū)動IRQ_PIN#信號線,從而結束整個中斷請求。

IRQ_PIN#信號線可以被多個外部設備共享,在這種情況之下,只有所有外部設備都不驅(qū)動IRQ_PIN#信號線時,IRQ_PIN#信號才為高電平。

采用電平觸發(fā)方式進行中斷請求的優(yōu)點是不會丟失中斷請求,而缺點是一個優(yōu)先權較高的中斷請求有可能會長期占用中斷資源,從而使其他優(yōu)先權較低的中斷不能被及時提交。因為優(yōu)先級別較高的中斷源有可能會持續(xù)不斷地驅(qū)動IRQ_PIN#信號。

而邊沿觸發(fā)使用上升沿(0到1)或者下降沿(1到0)作為觸發(fā)條件,但是中斷控制器并不是使用這個“邊沿”作為觸發(fā)條件。

中斷控制器使用內(nèi)部時鐘對IRQ_PIN#信號進行采樣,如果在前一個時鐘周期,IRQ_PIN#信號為0,而后一個時鐘周期,IRQ_PIN#信號為1,中斷控制器認為外部設備提交了一個有效“上升沿”,中斷控制器會鎖定這個“上升沿”并向處理器發(fā)出中斷請求。

這也是外部設備至少需要將IRQ_PIN#信號保持一個時鐘采樣周期的原因,否則中斷控制器可能無法識別本次邊沿觸發(fā)的中斷請求,從而產(chǎn)生Spurious中斷請求。

外部設備使用“上升沿”進行中斷申請時,不需要持續(xù)地將IRQ_PIN#信號驅(qū)動為1,而只需要保證中斷控制器可以進行正確采樣這些中斷信號即可。在處理邊沿觸發(fā)中斷請求時,處理器不需要清除中斷源。

使用邊沿觸發(fā)可以有效避免“優(yōu)先級別”較高的中斷源長期占用IRQ_PIN#信號的情況,使用“下降沿”觸發(fā)進行中斷請求與“上升沿”觸發(fā)類似。

但是外部設備使用邊沿觸發(fā)方式時,有可能會丟失一些中斷請求。例如在一個處理器系統(tǒng)中,存在一個定時器,這個定時器使用上升沿觸發(fā)方式向中斷控制器定時提交中斷。

如果當處理器正在處理這個定時器的上一個中斷請求時,將不會處理這個定時器發(fā)出的其他“邊沿”中斷請求,從而導致中斷丟失。而使用電平觸發(fā)方式不會出現(xiàn)這類問題,因為電平觸發(fā)方式是一個“持續(xù)”過程,處理器只有處理完畢當前中斷,并清除相應中斷源之后,才會處理下一個中斷源。

MSI中斷請求實際上和邊沿觸發(fā)方式非常類似,MSI中斷請求通過存儲器寫TLP實現(xiàn),這個寫動作是一個瞬間的動作,并不是一個持續(xù)請求,因此在x86處理器中MSI中斷請求使用邊沿觸發(fā)進行中斷請求。

還有一些外部設備可以通過I/O APIC進行中斷請求[②],這些I/O APIC接收的外部中斷需要標明是使用邊沿或者電平觸發(fā),I/O APIC使用FSB Interrupt Message總線事務將中斷請求發(fā)向Local APIC,并由Local APIC向處理器提交中斷請求。

FSB Interrupt Message總線事務

與MPC8572處理器處理MSI中斷請求不同,x86處理器使用FSB的Interrupt Message總線事務,處理PCIe設備的MSI/MSI-X中斷請求。

由上文所示,MPC8572處理器處理MSI中斷請求時,首先由MPIC中斷控制器截獲這個MSI中斷請求,之后由MPIC中斷控制器向CPU提交中斷請求,而CPU通過中斷響應周期從MPIC中斷控制器的ACK寄存器中獲得中斷向量。

采用這種方式的主要問題是,當一個處理器中存在多個CPU時,這些CPU都需要通過中斷響應周期從MPIC中斷控制器的ACK寄存器中獲得中斷向量。在一個中斷較為密集的應用中,ACK寄存器很可能會成為系統(tǒng)瓶頸。

而采用Interrupt Message總線事務可以有效地避免這種系統(tǒng)瓶頸,因為使用這種方式中斷信息和中斷向量將同時到達指定的CPU,而不需要使用中斷響應周期獲得中斷向量。

x86處理器也具有通過中斷控制器提交MSI/MSI-X中斷請求的方法,在I/O APIC具有一個 “The IRQ Pin Assertion Register”寄存器,該寄存器地址為0xFEC00020[③],其第4~0位存放IRQ Number。系統(tǒng)軟件可以將PCIe設備的Message Address寄存器設置為0xFEC00020,將Meaasge Data寄存器設置為相應的IRQ Number。

當PCIe設備需要提交MSI中斷請求時,將向PCI總線域的0xFEC00020地址寫入Message Data寄存器中的數(shù)據(jù)。此時這個存儲器寫請求將數(shù)據(jù)寫入I/O APIC的The IRQ Pin Assertion Register中,并由I/O APIC將這個MSI中斷請求最終發(fā)向Local APIC,之后再由Local APIC通過INTR#信號向CPU提交中斷請求。

上述步驟與MPC8572處理器傳遞MSI中斷的方法類似。在x86處理器中,這種方式基本上已被棄用。說明x86處理器如何使用FSB總線的Interrupt Message總線事務,向CPU提交MSI/MSI-X中斷請求。

PCIe設備在發(fā)送MSI/MSI-X中斷請求之前,系統(tǒng)軟件需要合理設置PCIe設備MSI/MSI-X Capability寄存器,使Message Address寄存器的值為0xFEExx00y[④],同時合理地設置Message Data寄存器Vector字段。

PCIe設備提交MSI/MSI-X中斷請求時,需要向0xFEExx00y地址寫Message Data寄存器中包含的數(shù)據(jù),并以存儲器寫TLP的形式發(fā)送到RC。如果ICH收到這個存儲器寫TLP時,將通過DMI接口將這個TLP提交到MCH。

MCH收到這個TLP后,發(fā)現(xiàn)這個TLP的目的地址在FSB Interrupts存儲器空間中,則將PCIe總線的存儲器寫請求轉換為Interrupt Message總線事務,并在FSB總線上廣播。

FSB總線上的CPU,根據(jù)APIC ID信息,選擇是否接收這個Interrupt Message總線事務,并進入中斷狀態(tài),之后該CPU將直接從這個總線事務中獲得中斷向量號,執(zhí)行相應的中斷服務例程,而不需要從APIC中斷控制器獲得中斷向量。與PowerPC處理器的MPIC中斷控制器相比,這種方法更具優(yōu)勢。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19347

    瀏覽量

    230240
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10879

    瀏覽量

    212179
  • APIC
    +關注

    關注

    0

    文章

    4

    瀏覽量

    7262

原文標題:x86處理器如何處理MSI-X中斷請求

文章出處:【微信號:gh_339470469b7d,微信公眾號:FPGA與數(shù)據(jù)通信】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    海光國產(chǎn)x86處理器未來可能會在芯國際生產(chǎn)

    海光方面對國產(chǎn)X86處理器一直比較低調(diào),沒有透露是哪家晶圓廠生產(chǎn)的,不過這個問題也不算復雜,AMD的第一代Zen處理器使用的是格芯的工藝。因此不難猜測。
    的頭像 發(fā)表于 06-27 16:13 ?1.3w次閱讀

    國產(chǎn)X86處理器與國際CPU有多大差距?有人做了個測試

    國產(chǎn)處理器何時能夠達到世界領先水平?這個問題幾乎是每一個關心國產(chǎn)半導體的人都在期待的,尤其是國產(chǎn)的X86處理器。
    的頭像 發(fā)表于 02-04 11:35 ?7995次閱讀

    PCIe設備發(fā)出MSI-X中斷請求的方法

    x86處理器何處理MSI-X中斷請求PCIe設備發(fā)出MSI-X
    發(fā)表于 02-16 06:36

    政務辦公標準配置:兆芯國產(chǎn)X86處理器

    目前,聯(lián)想開天M6100臺式機和昭陽CF03商用筆記本電腦成功入圍上海市政采購目錄并邁向大規(guī)模推廣應用,這兩款電腦的共同之處在于都采用了具有自主國產(chǎn)芯的兆芯X86通用處理器。那么讓人不禁發(fā)問,兆芯X86
    發(fā)表于 07-27 10:56 ?2151次閱讀

    獲Zen架構授權,國產(chǎn)X86處理器即將問世

    國內(nèi)的處理器廠商在MIPS、ARM及Alpha等架構上搞的還可以,但在桌面市場上,因為Wintel聯(lián)盟的門檻限制,沒有X86處理器是玩不轉的。
    發(fā)表于 06-12 14:27 ?1667次閱讀

    國產(chǎn)x86處理器已開啟生產(chǎn),或?qū)[脫對海外的依賴?

    由芯片制造商海光(Hygon)負責制造的中國國產(chǎn)Dhyana(禪定)x86處理器開始啟動生產(chǎn)。值得注意的是,這款芯片是根據(jù)AMD Zen微架構開發(fā)的。AMD將x86的IP授權給中國合作伙伴,Dhyana正是合作的結果。
    發(fā)表于 07-09 15:48 ?1363次閱讀

    國產(chǎn)x86處理器發(fā)布,該芯片依據(jù)AMD Zen微架構開發(fā)

    北京時間7月9日上午消息,由芯片制造商海光(Hygon)負責制造的中國國產(chǎn)Dhyana(禪定)x86處理器開始啟動生產(chǎn)。
    的頭像 發(fā)表于 07-13 13:34 ?4733次閱讀

    全球首款集成AI協(xié)處理器x86處理器實照公布 采用LGA觸點式封裝方式

    2019年11月,在通用x86處理器領域沉寂多年的威盛(VIA)高調(diào)歸來,旗下已有24年歷史的處理器研發(fā)部門CenTaur開發(fā)出了世界上第一個集成AI協(xié)處理器
    的頭像 發(fā)表于 02-19 15:15 ?2793次閱讀

    蘋果M1嚴重威脅x86處理器,關鍵因素在于錢

    最近一段時間,隨著配備M1處理器的Mac電腦上市,大部分人都被M1的性能給震撼了,此前幾乎沒有人能想到ARM架構性能也可以正面威脅高端x86處理器了。
    的頭像 發(fā)表于 11-23 10:46 ?1871次閱讀

    簡述MSIMSI-X中斷機制

    中斷請求機制,而可以不支持INTx中斷消息。 在PCIe總線MSIMSI-X中斷機制使用存
    的頭像 發(fā)表于 08-10 17:54 ?5853次閱讀

    x86處理器何處理MSI-X中斷請求

    x86處理器何處理MSI-X中斷請求PCIe設備發(fā)出MSI-X
    發(fā)表于 12-17 18:28 ?9次下載
    <b class='flag-5'>x86</b><b class='flag-5'>處理器</b>如<b class='flag-5'>何處理</b><b class='flag-5'>MSI-X</b><b class='flag-5'>中斷請求</b>

    Cortex-M0處理器中斷請求形式:電平觸發(fā)和脈沖輸入

    Cortex-M0處理器允許兩種形式的中斷請求:電平觸發(fā)和脈沖輸入。
    的頭像 發(fā)表于 05-13 12:05 ?1772次閱讀

    AMD Q4季度移動處理器x86處理器份額已超三成

    AMD 2022年第四季度在包括桌面處理器,移動處理器和服務處理器x86處理器整體市場當中的
    發(fā)表于 02-13 10:56 ?375次閱讀

    英特爾x86處理器市占率為68.7%,AMD則上升至31.3%

    雖然英特爾依然穩(wěn)居x86處理器市場龍頭寶座,近年來卻被AMD搶走部分市占率。Mercury Research數(shù)據(jù)顯示,去年Q4,英特爾在x86處理器市場的市占率為68.7%,AMD則上
    發(fā)表于 02-14 10:28 ?1279次閱讀

    INT8量子化PyTorch x86處理器

    INT8量子化PyTorch x86處理器
    的頭像 發(fā)表于 08-31 14:27 ?900次閱讀
    INT8量子化PyTorch <b class='flag-5'>x86</b><b class='flag-5'>處理器</b>