的消息引擎的簡化框圖。例如,消息引擎400可以用來將消息發(fā)送到任何其它的消息引擎,例如可以包含在網(wǎng)絡(luò)接口中的消息引擎。消息引擎400還可以用來從另一消息引擎接收消息。網(wǎng)絡(luò)接口能夠發(fā)送和接收網(wǎng)絡(luò)協(xié)議單元。如本文中所使用的,“網(wǎng)絡(luò)協(xié)議單元”可以包括任意分組或幀或具有根據(jù)任何協(xié)議規(guī)范形成的頭和有效載荷部分的其它格式的信息。
[0093]I/O接口 402可以對接收的以太網(wǎng)幀執(zhí)行介質(zhì)訪問控制(MAC)、過濾和循環(huán)冗余校驗(CRC)操作以及對要發(fā)送的以太網(wǎng)幀執(zhí)行介質(zhì)訪問控制。在其它實施例中,I/O接口 402可以針對其它規(guī)范的幀和分組執(zhí)行協(xié)議編碼和解碼。
[0094]緩沖器403-A可以存儲由I/O接口 402處理的所接收的以太網(wǎng)幀,而緩沖器403-B可以在由I/O接口 402處理之前存儲要被發(fā)送的以太網(wǎng)幀。
[0095]消息分段塊404能夠?qū)碜跃彌_器403-A的以太網(wǎng)幀分段成與基礎(chǔ)消息互連兼容的大小的消息。消息分段塊404可以查詢消息路由表410來確定以其來傳輸消息的虛擬消息接收引擎(VMRE)、隊列號(QN)和消息序列號(MSN),其中所述消息傳輸所接收的以太網(wǎng)幀的內(nèi)容。消息分段塊404可以傳輸要被發(fā)送到緩沖器407-A中的消息段。可以使用發(fā)送隊列(SQ)來識別緩沖器407-A。消息分段塊404可以使用數(shù)據(jù)移動程序(未描述)將消息段從緩沖器407-A傳輸至與VMRE、QN和MSN相關(guān)聯(lián)的位置。
[0096]緩沖器407-B可以存儲通過互連接收的消息段。可以使用接收隊列(RQ)部分地識別緩沖器407-B。消息重組塊406可以使用數(shù)據(jù)移動程序(未描述)來將消息段傳輸至緩沖器407-B。
[0097]消息重組塊406能夠?qū)⒕彌_器407-B中的消息段重組成完整的消息并且將這些內(nèi)容提供到緩沖器403-B中以用于在一個或多個網(wǎng)絡(luò)協(xié)議單元中進行發(fā)送。
[0098]接口 408可以將消息從消息分段塊404傳輸?shù)交ミB并且將消息從互連傳輸?shù)较⒅亟M塊406。
[0099]圖4B以框圖形式描述了根據(jù)實施例的使用消息引擎來與外部設(shè)備進行通信的網(wǎng)絡(luò)通信系統(tǒng)。例如,系統(tǒng)450可以具有使用接收(RX)消息引擎454傳輸接收的以太網(wǎng)幀的以太網(wǎng)兼容網(wǎng)絡(luò)接口的能力。系統(tǒng)450還使用發(fā)送(TX)消息引擎456來接收以太網(wǎng)網(wǎng)絡(luò)接口的消息,所述消息包括要在以太網(wǎng)幀中發(fā)送的數(shù)據(jù)或控制或管理信息。系統(tǒng)450可以對其它類型的網(wǎng)絡(luò)協(xié)議單元進行編碼和解碼,所述其它類型的網(wǎng)絡(luò)協(xié)議單元例如但不限于是串行ATA和無限帶寬(Infiniband)。
[0100]在該實例中,mac RX塊接受來自外部以太網(wǎng)介質(zhì)PHY的以太網(wǎng)幀。MAC RX塊對原始分組執(zhí)行組幀和以太網(wǎng)CRC操作。過濾器塊丟棄與過濾器規(guī)則不匹配的分組。小型接收(RX)緩沖器塊提供緩沖來處理消息互連抖動。
[0101]消息映射塊452為來自小型RX緩沖器的業(yè)務(wù)確定目標(biāo)消息弓I擎和隊列的地址。例如,消息映射塊452可以考慮以太網(wǎng)幀的源地址、目標(biāo)地址和/或有效載荷,以識別該業(yè)務(wù)的目標(biāo)消息引擎和隊列??梢曰谔摂M消息接收引擎(VMRE)的標(biāo)識符、隊列號(QN)和消息序列號(MSN)來識別目標(biāo)消息引擎和隊列。多個目標(biāo)消息引擎可以是可用的,其中每個目標(biāo)消息引擎與一核心相關(guān)聯(lián)。消息映射塊452可以使用類似于接收端調(diào)節(jié)(RSS)或應(yīng)用程序目標(biāo)路由的分配方案來向核心分配以太網(wǎng)幀的內(nèi)容,但是也可以使用其它方案。消息映射塊452可以使用查找操作來確定消息段頭(例如,非數(shù)據(jù)部分)的內(nèi)容。
[0102]接收(RX)消息引擎454可以形成消息段并且使用互連將消息發(fā)送到目標(biāo)消息引擎(未描述)。目標(biāo)消息引擎(未描述)可以接收消息以用于由核心、硬件加速器或網(wǎng)絡(luò)協(xié)議卸載處理器(例如,iSCSI)進行處理。
[0103]發(fā)送(TX)消息引擎456可以接收來自源消息引擎的消息。TX消息引擎456可以從管芯上(on-die)互連接收消息段。TX消息引擎456可以檢查所接收消息的有效載荷以確定該消息是否包含控制、數(shù)據(jù)或管理內(nèi)容。TX消息引擎456將控制段指向控制塊,將管理段指向管理塊,以及將數(shù)據(jù)段指向數(shù)據(jù)塊。
[0104]可以使用消息來發(fā)送控制信息,以替代使用基于存儲器的交互(例如,PCI)。例如,消息中的控制信息可以用來配置和指導(dǎo)運行時行為。例如,控制消息可以設(shè)置鏈路速度。
[0105]控制塊實現(xiàn)I/O橋控制功能,例如控制其它功能塊和外部以太網(wǎng)介質(zhì)PHY。數(shù)據(jù)塊可以從消息段形成以太網(wǎng)數(shù)據(jù)幀。管理塊可以從消息段形成例如PAUSE之類的以太網(wǎng)控制幀或其它幀。控制塊可以與核心或平臺中的其它設(shè)備交換控制消息。例如,控制塊可以支持允許I/O橋中其它塊的配置的控制消息。
[0106]小型發(fā)送(TX)緩沖器塊提供緩沖以處理消息互連抖動。MAC發(fā)送(TX)塊在向以太網(wǎng)介質(zhì)PHY發(fā)送分組之前執(zhí)行組幀和CRC操作。
[0107]在一些實施例中,系統(tǒng)450在平臺中提供比傳統(tǒng)的分立網(wǎng)絡(luò)接口更少的專用硅。在一些實施例中,系統(tǒng)450在以太網(wǎng)線路和核心之間提供精益路徑(lean path),并且與執(zhí)行直接存儲器訪問(DMA)的傳統(tǒng)網(wǎng)絡(luò)接口相比消除了延遲。在一些實施例中,軟件可以實現(xiàn)OSI層2特征而非傳統(tǒng)網(wǎng)絡(luò)接口中的固定硅門。在一些實施例中,與具有DMA的傳統(tǒng)網(wǎng)絡(luò)接口不同,系統(tǒng)450不需要與處理分組的核心共享的一致性存儲器。
[0108]圖5描述了根據(jù)實施例的消息引擎的高級框圖。消息引擎500應(yīng)處理器、核心或硬件線程的請求提供消息段的發(fā)送,以及提供消息段的接收以用于由處理器、核心或硬件線程進行處理。
[0109]對于消息發(fā)送,消息分段塊504可以對使用發(fā)送隊列512識別的消息進行分段以用于通過互連進行發(fā)送。盡管沒有描述,但是消息分段塊504可以使用數(shù)據(jù)移動程序?qū)⑹褂冒l(fā)送隊列512識別的消息段傳輸?shù)绞褂媒邮贞犃?未描述)識別的位置。因此,使用一個本地SQ和一個本地RQ的內(nèi)容進行存儲器到存儲器的傳輸,并且消息引擎可以不與另一消息引擎的隊列進行直接交互。
[0110]對于從互連接收的消息段,消息重組塊506可以重組消息并且將消息存儲在接收隊列510中。盡管沒有描述,但是消息重組塊506可以使用數(shù)據(jù)移動程序來將消息段從與另一消息引擎相關(guān)聯(lián)的發(fā)送隊列(二者均未描述)傳輸?shù)绞褂媒邮贞犃?10識別的位置。
[0111]讀/寫塊502允許從使用虛擬存儲器中的發(fā)送隊列512識別的位置讀取用于傳輸?shù)南?,其中使用由轉(zhuǎn)換后援緩沖器(TLB) 514提供的虛擬-物理地址轉(zhuǎn)換來使用發(fā)送隊列512識別位置。讀/寫塊502允許將消息寫入使用虛擬存儲器中的接收隊列510識別的位置,其中使用由轉(zhuǎn)換后援緩沖器(TLB) 514提供的虛擬-物理地址轉(zhuǎn)換來使用接收隊列510識別位置。在一個實施例中,讀/寫塊502能夠以與硬件線程相同的方式將消息段寫入一致性存儲器以及從一致性存儲器讀取消息段。讀/寫塊502可以與核心中的硬件線程共享高速緩存分層和存儲器管理單元(MMU)。
[0112]轉(zhuǎn)換后援緩沖器(TLB) 514和頁未命中處理程序(PMH) 516提供存儲器管理單元(MMU)功能。響應(yīng)于讀/寫塊502提供的虛擬地址,TLB 514將虛擬地址轉(zhuǎn)換成物理地址。超線程HTO或HTl可以對PMH 516中的條目執(zhí)行地址轉(zhuǎn)換。如果TLB 514中沒有可用的條目,則PMH 516從頁表地址檢索地址并且將地址存儲在TLB 514中。PMH 516可以和與核心相關(guān)聯(lián)的硬件線程共享。PMH 516還可以由一個或多個消息引擎專用。
[0113]接口 508可以在互連和消息分段塊504與消息重組塊506之間提供物理層接口。
[0114]圖6描述了根據(jù)實施例的用于定義可用虛擬消息接收引擎(VMRE)的上下文的示例性格式。版本字段(位7-0)指示協(xié)議的版本。ASID字段指定由轉(zhuǎn)換后援緩沖器(TLB)用于虛擬到物理地址轉(zhuǎn)換的應(yīng)用程序空間標(biāo)識符。CR3字段指定由頁未命中處理程序用于虛擬到物理地址轉(zhuǎn)換的頁表地址。隊列表地址字段指定該VMRE支持的隊列陣列的可分頁存儲器地址。
[0115]物理消息引擎(PME)使用至少發(fā)送和接收消息的虛擬消息引擎(VME)來向硬件線程提供虛擬化接口。PME還向硬件線程提供物理接口以用于消息引擎硬件的控制和配置。到PME的物理接口可以不執(zhí)行虛擬存儲器轉(zhuǎn)換。相反,PME的物理接口可以與主機物理地址空間中的固定(pinned)存儲器進行交互。PME的物理接口也可以與核心中的寄存器進行交互。
[0116]虛擬消息引擎(VME)可以使用MMU頁表執(zhí)行存儲器轉(zhuǎn)換并且與虛擬存儲器進行交互。與軟件線程一樣,VME訪問與指向頁表結(jié)構(gòu)頂部的ASID和CR3指針相關(guān)聯(lián)的存儲器。VME可以與和地址空間相關(guān)聯(lián)的軟件線程共享ASID和CR3值,盡管這并不是必需的。系統(tǒng)軟件可以將VME視為由ASID識別的地址空間中的線程。例如,只要VMTE或VMRE可以發(fā)送或接收消息,那么系統(tǒng)軟件就可以將VME使用的頁表保持為一致狀態(tài)。與軟件線程一樣,可以應(yīng)用標(biāo)準(zhǔn)TLB擊落規(guī)則。
[0117]圖7描述了根據(jù)實施例的用于發(fā)送隊列中的空操作命令的示例性格式。發(fā)送隊列(SQ)條目指導(dǎo)VMTE執(zhí)行不發(fā)送消息的空操作。命令字段(位7-0)針對空操作命令為O。當(dāng)設(shè)置了立即中斷(II)字段時,該立即中斷(II)字段指導(dǎo)VME立即生成CQ中斷,而不考慮中斷延遲間隔。
[0118]圖8描述了根據(jù)實施例的用于發(fā)送隊列中的命令的示例性格式。該命令命令VMTE發(fā)送消息。命令字段(位7-0)針對發(fā)送命令為I。當(dāng)設(shè)置了立即中斷(II)字段時,該立即中斷(II)字段指導(dǎo)VME立即生成CQ中斷,而不考慮中斷延遲間隔。VME地址字段指定消息的目標(biāo)VMRE。隊列號字段指定該消息的目標(biāo)隊列號。大小字段指定要發(fā)送的連續(xù)虛擬存儲器中的字節(jié)數(shù)。地址字段指定可緩存可分頁存儲器中要發(fā)送的數(shù)據(jù)的虛擬地址。
[0119]圖9描述了根據(jù)實施例的接收隊列中的示例性條目。命令字段(位7-0)針對接收命令為O。當(dāng)設(shè)置了立即中斷(II)字段時,該立即中斷(II)字段指導(dǎo)VME立即生成CQ中斷,而不考慮中斷延遲間隔。大小字段指定接收緩沖器的連續(xù)虛擬存儲器的字節(jié)數(shù)。當(dāng)針對該描述符的消息接收操作完成時,VMRE更新大小字段以包含接收的消息段的實際數(shù)量。地址字段指定接收緩沖器的可緩存可分頁存儲器中的虛擬地址。
[0120]圖10描述了根據(jù)實施例的示例性消息段格