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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

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

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

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

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

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

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

1 PCIe設(shè)備使用Message Adress字段

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

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

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

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

?Destination ID字段保存目標(biāo)CPU的ID號(hào),目標(biāo)CPU的ID與該字段相等時(shí),目標(biāo)CPU將接收這個(gè)Interrupt Message。FSB Interrupt Message總線事務(wù)可以向不同的CPU提交中斷請求。

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

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

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

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

2 Message Data字段

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

采用電平觸發(fā)方式進(jìn)行中斷請求的優(yōu)點(diǎn)是不會(huì)丟失中斷請求,而缺點(diǎn)是一個(gè)優(yōu)先權(quán)較高的中斷請求有可能會(huì)長期占用中斷資源,從而使其他優(yōu)先權(quán)較低的中斷不能被及時(shí)提交。因?yàn)閮?yōu)先級(jí)別較高的中斷源有可能會(huì)持續(xù)不斷地驅(qū)動(dòng)IRQ_PIN#信號(hào)。

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

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

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

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

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

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

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

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

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

FSB Interrupt Message總線事務(wù)

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

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

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

而采用Interrupt Message總線事務(wù)可以有效地避免這種系統(tǒng)瓶頸,因?yàn)槭褂眠@種方式中斷信息和中斷向量將同時(shí)到達(dá)指定的CPU,而不需要使用中斷響應(yīng)周期獲得中斷向量。

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

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

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

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

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

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

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

編輯:jq

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

    關(guān)注

    68

    文章

    19048

    瀏覽量

    228515
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10778

    瀏覽量

    210484
  • APIC
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    7238

原文標(biāo)題:x86處理器如何處理MSI-X中斷請求

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    政務(wù)辦公標(biāo)準(zhǔn)配置:兆芯國產(chǎn)X86處理器

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

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

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

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

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

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

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

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

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

    蘋果M1嚴(yán)重威脅x86處理器,關(guān)鍵因素在于錢

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

    簡述MSIMSI-X中斷機(jī)制

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

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

    x86處理器何處理MSI-X中斷請求PCIe設(shè)備發(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 ?1597次閱讀

    AMD Q4季度移動(dòng)處理器x86處理器份額已超三成

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

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

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

    INT8量子化PyTorch x86處理器

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