專利名稱:使用高速緩存的地址轉(zhuǎn)換與i/o適配器進(jìn)行通信的裝置、方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及 一 種改進(jìn)的數(shù)據(jù)處理系統(tǒng)和方法。更具體地,本發(fā)明涉及用于使用高速緩存的地址轉(zhuǎn)換來與輸入/輸出(I/O)適配 器或者端點(diǎn)進(jìn)行通信的裝置和方法,該I/O適配器或者端點(diǎn)配置用于 與一個(gè)或者多個(gè)本地附加的1/0設(shè)備進(jìn)行通信。
背景技術(shù):
在具有當(dāng)前的外設(shè)組件互連(PCI)協(xié)議的某些系統(tǒng)上,當(dāng)執(zhí)行 直接存儲(chǔ)器訪問(DMA )操作的時(shí)候,使用地址轉(zhuǎn)換和保護(hù)表(ATPT ) 來執(zhí)行地址轉(zhuǎn)換和訪問檢查。盡管ATPT已經(jīng)使用了幾十年,它們 對(duì)于較低端系統(tǒng)來說是新的,并且通過許多其他名稱為人所知,諸 如直接存儲(chǔ)器訪問(DMA)重映射資源或者輸入/輸出存儲(chǔ)器管理單 元(IOMMU ) 。 ATPT存儲(chǔ)條目,用于將在DMA事務(wù)中使用的PCI 總線地址轉(zhuǎn)換為用于訪問實(shí)際存儲(chǔ)器資源的實(shí)際存儲(chǔ)器地址。在 ATPT中的條目存儲(chǔ)保護(hù)信息,該保護(hù)信息標(biāo)識(shí)哪些設(shè)備可以訪問存 儲(chǔ)器的相應(yīng)部分、以及這樣的設(shè)備可以在存儲(chǔ)器的這些部分上執(zhí)行 的特殊操作。最近,PCI-SIG ( www.pcisig.com/home )已經(jīng)處于對(duì)允許駐留在 ATPT中的地址轉(zhuǎn)換高速緩存在PCI系適配器中的機(jī)制進(jìn)行標(biāo)準(zhǔn)化 的過程中。這些機(jī)制7>知為地址轉(zhuǎn)換服務(wù)(ATS) 。 ATS允許PCI 系適配器針對(duì)未轉(zhuǎn)換的PCI總線地址請(qǐng)求轉(zhuǎn)換,其中在支持ATS的 系統(tǒng)上,這種請(qǐng)求的成功完成可將已轉(zhuǎn)換的(即實(shí)際存儲(chǔ)器地址) 地址返回到PCI系適配器。然后,ATS允許PCI系適配器將在DMA
操作中使用的PCI總線地址標(biāo)記為已轉(zhuǎn)換。然后支持ATS的系統(tǒng)將 使用已轉(zhuǎn)換的地址以旁路ATPT。 ATS還提供一種機(jī)制,通過該機(jī)制 主機(jī)側(cè)(例如,硬件或者虛擬化媒介)可使先前所廣告的地址轉(zhuǎn)換 無效。圖1是示出了用于使用ATPT和PCI express ( PCIe )通信協(xié)議 執(zhí)行DMA操作的傳統(tǒng)機(jī)制的示范性圖示。描繪的例子還示出了上述 PCIe地址轉(zhuǎn)換服務(wù)(ATS),其通過PCIe端點(diǎn)(諸如使用ATS執(zhí) 行地址轉(zhuǎn)換操作的PCIe輸入/輸出(I/O)適配器)來調(diào)取。ATS功 能在PCIe端點(diǎn)和主機(jī)系統(tǒng)的根聯(lián)合體之中構(gòu)建,如下所述。有關(guān) PCIe ATS的更多信息,請(qǐng)參考可從外設(shè)組件互連特別興趣組 (PCI-SIG )網(wǎng)站www.pcisig.com處獲得的PCIe ATS規(guī)范。如圖1中所示,主機(jī)CPU和存儲(chǔ)器110借助于系統(tǒng)總線115耦 合到PCIe根聯(lián)合體120,該P(yáng)CIe根聯(lián)合體120包含地址轉(zhuǎn)換和保護(hù) 表(ATPT) 130。 PCIe根聯(lián)合體120接著經(jīng)由PCIe鏈路135耦合到 一個(gè)或者多個(gè)PCIe端點(diǎn)140(在PCIe規(guī)范中術(shù)語"端點(diǎn)"用于指支 持PCIe的I/O適配器)。根聯(lián)合體120指示I/O層次的根,其將CPU/ 存儲(chǔ)器連接到PCIe端點(diǎn)140。根聯(lián)合體120包括主機(jī)橋(host bridge )、 零個(gè)或者多個(gè)根聯(lián)合體集成的端點(diǎn)、零個(gè)或者多個(gè)根聯(lián)合體事件采 集器、以及一個(gè)或者多個(gè)根端口。每個(gè)根端口支持分離的1/0層次。 1/0層次可以包括根聯(lián)合體120、零個(gè)或者多個(gè)互聯(lián)交換機(jī)和/或橋 (其包括交換機(jī)或者PCI結(jié)構(gòu))、以及諸如端點(diǎn)140的一個(gè)或者多 個(gè)端點(diǎn)。例如,PCIe交換機(jī)可以用以增加諸如附加到根聯(lián)合體120 的端點(diǎn)140的PCIe端點(diǎn)的數(shù)目。關(guān)于PCI和PCIe的更多信息,請(qǐng) 參考可從PCI-SiG網(wǎng)站www.pcisig.com處獲得的PCI和PCIe規(guī)范。PCIe端點(diǎn)包括內(nèi)部路由電路142、配置管理邏輯144、 一個(gè)或者 多個(gè)物理功能(PF) 146以及零個(gè)或者多個(gè)虛擬功能(VF) 148-152, 其中每個(gè)VF關(guān)聯(lián)于PF。 ATS允許每個(gè)虛擬功能使用地址轉(zhuǎn)換高速 緩存(ATC) 160-164,用于將已轉(zhuǎn)換的PCI存儲(chǔ)器地址高速緩存, 并且當(dāng)執(zhí)行DMA操作的時(shí)候,該P(yáng)CI存儲(chǔ)器地址可由虛擬功能使用 以旁路主機(jī)ATPT 130。在操作中,PCIe端點(diǎn)140可以調(diào)取PCIe ATS事務(wù)以i青求將給定 PCI總線地址轉(zhuǎn)換成為系統(tǒng)總線地址,并且指示后續(xù)事務(wù)(例如DMA 操作)已經(jīng)轉(zhuǎn)換并且可旁路ATPT。根聯(lián)合體120可以調(diào)取PCIe ATS 事務(wù)以使得被提供給PCIe端點(diǎn)140的轉(zhuǎn)換無效,從而轉(zhuǎn)換不再由 PCIe端點(diǎn)140的物理和/或虛擬功能所使用。例如,當(dāng)將要執(zhí)行DMA操作的時(shí)候,可以在處理DMA操作的 特殊虛擬功能148-152的ATC 160-164中查找DMA操作的地址。如 果在ATC 160-164中沒有出現(xiàn)地址轉(zhuǎn)換,則可由PCIe端點(diǎn)140向根 聯(lián)合體120提出轉(zhuǎn)換請(qǐng)求。根聯(lián)合體120則可以使用ATPT 130執(zhí)行 地址轉(zhuǎn)換并將已轉(zhuǎn)換的地址返回PCIe端點(diǎn)140。 PCIe端點(diǎn)140則可 以在對(duì)應(yīng)于處理DMA操作的物理和/或虛擬功能的適當(dāng)ATC 160-164中存儲(chǔ)該轉(zhuǎn)換。使用已轉(zhuǎn)換的地址可以將DMA操作傳遞到 系統(tǒng)總線115上。如果在ATC 160-164中已經(jīng)存在此地址,則已轉(zhuǎn)換的地址與 DMA操作一起使用。在DMA頭部中可以設(shè)置一個(gè)位來指示該地址作為結(jié)果,在PCIe端點(diǎn)140與主機(jī)CPU和存儲(chǔ)器IIO之間經(jīng)由PCIe 鏈路135和系統(tǒng)總線115來直接執(zhí)行DMA操作。訪問檢查仍然可以 由根聯(lián)合體120執(zhí)行,用以確保PCIe端點(diǎn)的虛擬功能的特殊BDF 號(hào)對(duì)應(yīng)于允許以由DMAl喿作請(qǐng)求的方式來訪問該地址的BDF。一段時(shí)間之后,如果提供到PCIe端點(diǎn)140的轉(zhuǎn)換不再由PCIe 端點(diǎn)140所使用,諸如當(dāng)轉(zhuǎn)換已經(jīng)在ATPT 130內(nèi)部變化時(shí),根聯(lián)合 體120必須向PCIe端點(diǎn)140發(fā)布ATS無效請(qǐng)求。PCIe端點(diǎn)140并 不立刻沖刷針對(duì)該無效地址的所有未決請(qǐng)求。相反,PCIe端點(diǎn)140 等待指向無效的已轉(zhuǎn)換的地址的所有未完成的讀取請(qǐng)求退回 (retire),并釋放ATC 160-164中的轉(zhuǎn)換,諸如通過設(shè)置一個(gè)位來 將ATC 160-164中的條目標(biāo)記為無效。PCIe端點(diǎn)140向根聯(lián)合體120 返回ATS無效完成消息,指示ATC 160-164中轉(zhuǎn)換無效的完成。PCIe 端點(diǎn)140確保無效完成指示在使用無效地址的任何先前發(fā)出的寫入 之后到達(dá)根聯(lián)合體120。通常,ATPT 130可以提供為系統(tǒng)存儲(chǔ)器中的樹狀結(jié)構(gòu)轉(zhuǎn)換表。 針對(duì)計(jì)算系統(tǒng)的每個(gè)PCI總線/設(shè)備/功能(BDF)可以提供不同的樹 狀結(jié)構(gòu)。使用這些ATPT數(shù)據(jù)結(jié)構(gòu),設(shè)備可以共享設(shè)備地址空間, 并且設(shè)備可以具有專用的地址空間。由此,不是所有的設(shè)備可以在 系統(tǒng)存儲(chǔ)器的所有地址空間上執(zhí)行所有的DMA操作。作為DMA事務(wù)的一部分來同步進(jìn)行ATPT130的訪問。這包括 使用 一種耗時(shí)的轉(zhuǎn)換機(jī)制用于將DMA事務(wù)未轉(zhuǎn)換的PCI總線存儲(chǔ)以及檢查ATPT以確保提交DMA事務(wù)的設(shè)備具有足夠的許可用于訪 問已轉(zhuǎn)換的實(shí)際存儲(chǔ)器地址、并且具有足夠的許可以在已轉(zhuǎn)換的實(shí) 際存儲(chǔ)器地址上執(zhí)行希望的DMA操作。作為訪問ATPT 130的部分,必須標(biāo)識(shí)對(duì)應(yīng)于特殊BDF的正確 的ATPT樹狀數(shù)據(jù)結(jié)構(gòu)、并且必須遍歷(walk)樹狀數(shù)據(jù)結(jié)構(gòu),以 便執(zhí)行轉(zhuǎn)換和訪問檢查。ATPT樹狀數(shù)據(jù)結(jié)構(gòu)的位置可能需要 一 次或 者兩次訪問來找到關(guān)聯(lián)于BDF的樹狀數(shù)據(jù)結(jié)構(gòu)的地址。 一旦發(fā)現(xiàn), 則可以采取對(duì)樹狀數(shù)據(jù)結(jié)構(gòu)的3次或者4次訪問來遍歷樹。由此, 此轉(zhuǎn)換和訪問檢查是造成與DMA操作關(guān)聯(lián)的大量等待時(shí)間的原因。 這些等待時(shí)間可以導(dǎo)致端點(diǎn)的嚴(yán)重問題,端點(diǎn)需要低的通信等待時(shí) 間。作為減輕這些等待時(shí)間的一種方式,在PCIe端點(diǎn)140中實(shí)現(xiàn)的 ATS使用ATC 160-164來存儲(chǔ)已經(jīng)執(zhí)行的地址轉(zhuǎn)換,從而不必再次 執(zhí)行這些轉(zhuǎn)換。由此,通過ATPT和ATC的結(jié)合,PCIATS以此方 式執(zhí)行地址轉(zhuǎn)換和訪問檢查,以便減少與DMA操作相關(guān)聯(lián)的等待時(shí) 間。盡管PCI SiG已經(jīng)闡明針對(duì)PCIe ATS的規(guī)范,但PCI SiG沒有 指定在實(shí)現(xiàn)PCIeATS的系統(tǒng)中怎樣分配用于使用ATS執(zhí)行地址轉(zhuǎn) 換和管理諸如ATPT和ATC的ATS結(jié)構(gòu)的責(zé)任
發(fā)明內(nèi)容
示例性實(shí)施方式提供了一種用于使用高速緩存的地址轉(zhuǎn)換來與輸入/輸出(I/O)適配器或端點(diǎn)進(jìn)行通信的裝置和方法,該I/0適配 器或者端點(diǎn)配置用于與一個(gè)或者多個(gè)本地附加的1/0設(shè)備進(jìn)行通信。通過該裝置和方法,在設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器服務(wù)之間分配用于 地址轉(zhuǎn)換信息的高速緩存管理的責(zé)任。設(shè)備驅(qū)動(dòng)器可以提供在不受信任的任務(wù)邏輯分區(qū)(LPAR)中,而設(shè)備驅(qū)動(dòng)器服務(wù)可以提供在受 信任的虛擬化媒介中,諸如虛擬化媒介操作系統(tǒng)、管理程序、服務(wù) 分區(qū)等。設(shè)備驅(qū)動(dòng)器負(fù)責(zé)管理用于在LPAR和PCIe端點(diǎn)中應(yīng)用之間傳送 請(qǐng)求的隊(duì)列,反之亦然。設(shè)備驅(qū)動(dòng)器進(jìn)一步負(fù)責(zé)經(jīng)由設(shè)備驅(qū)動(dòng)器服 務(wù)調(diào)取存儲(chǔ)器管理。設(shè)備驅(qū)動(dòng)器服務(wù)負(fù)責(zé)管理由PCIe端點(diǎn)可訪問的 存儲(chǔ)器,包括PCIe端點(diǎn)的地址轉(zhuǎn)換高速緩存(ATC)以及地址轉(zhuǎn)換 和保護(hù)表(ATPT)。通過在設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器服務(wù)之間劃分與PCIe端點(diǎn)進(jìn)行 通信的責(zé)任,在OS內(nèi)部運(yùn)行的設(shè)備驅(qū)動(dòng)器不能向PCIe端點(diǎn)提供與 另一 OS的存儲(chǔ)器相關(guān)聯(lián)的轉(zhuǎn)換。作為結(jié)果,維護(hù)了與系統(tǒng)虛擬化相 關(guān)聯(lián)的受信任模式。即,將地址轉(zhuǎn)換高速緩存管理責(zé)任放置在設(shè)備 驅(qū)動(dòng)器服務(wù)中可以防止一個(gè)OS請(qǐng)求端點(diǎn)對(duì)另一 OS的存儲(chǔ)器執(zhí)行 DMA操作。在一個(gè)示意性實(shí)施方式中,在主機(jī)系統(tǒng)的不受信任的任務(wù)邏輯 分區(qū)(LPAR)系統(tǒng)鏡像中設(shè)備驅(qū)動(dòng)器的初始化期間,用于PCIe端 點(diǎn)的設(shè)備驅(qū)動(dòng)器調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)(在下文中簡單稱為"驅(qū)動(dòng)器 服務(wù)")以針對(duì)適配器資源來初始化地址轉(zhuǎn)換和保護(hù)表(ATPT)條 目,并向設(shè)備驅(qū)動(dòng)器返回PCI存儲(chǔ)器地址,諸如命令、響應(yīng)、以及 事件隊(duì)列,其中該適配器資源駐留在系統(tǒng)存儲(chǔ)器中,并且PCIe端點(diǎn) 通過直接存儲(chǔ)器訪問(DMA)操作可訪問該適配器資源。設(shè)備驅(qū)動(dòng) 器和PCIe端點(diǎn)通過該命令、響應(yīng)和事件隊(duì)列通信。在此文檔中,這 些隊(duì)列將稱作"設(shè)備驅(qū)動(dòng)器的隊(duì)列"。
實(shí)際上,設(shè)備驅(qū)動(dòng)器服務(wù)釘住(pin)用于設(shè)備驅(qū)動(dòng)器的隊(duì)列的 主機(jī)存儲(chǔ)器,為設(shè)備驅(qū)動(dòng)器的隊(duì)列分配DMA地址,針對(duì)這些DMA 地址來對(duì)ATPT條目編程,并使能一個(gè)位,該位表示ATPT條目可 高速緩存,即,在PCIe端點(diǎn)上的隊(duì)列上下文(例如,地址轉(zhuǎn)換高速 緩存)中可高速緩存。然后,設(shè)備驅(qū)動(dòng)器服務(wù)將未轉(zhuǎn)換的PCIe存儲(chǔ) 器地址(即,DMA地址)返回到設(shè)備驅(qū)動(dòng)器用于ATPT條目,例如, 用于設(shè)備驅(qū)動(dòng)器的隊(duì)列的開始地址,其與偏移 一起可以用于標(biāo)識(shí)隊(duì) 列中的特殊條目。未轉(zhuǎn)換的PCIe存儲(chǔ)器地址是這樣的地址,它不處 于系統(tǒng)的存儲(chǔ)器空間中,而且在其用以訪問系統(tǒng)存儲(chǔ)器之前必須被 轉(zhuǎn)換。使用示意性實(shí)施方式的機(jī)制,這個(gè)未轉(zhuǎn)換的PCIe存儲(chǔ)器地址可 以提供到PCIe端點(diǎn)、并且由PCIe端點(diǎn)所使用以向根聯(lián)合體發(fā)送轉(zhuǎn) 換請(qǐng)求。即,PCIe端點(diǎn)可請(qǐng)求根聯(lián)合體來返回與未轉(zhuǎn)換的PCIe存儲(chǔ) 器地址相關(guān)聯(lián)的一個(gè)或多個(gè)已轉(zhuǎn)換的PCIe存儲(chǔ)器地址。然后,PCIe 端點(diǎn)可以將一個(gè)或多個(gè)已轉(zhuǎn)換的PCIe存儲(chǔ)器地址存儲(chǔ)在與設(shè)備驅(qū)動(dòng) 器的隊(duì)列相關(guān)聯(lián)的上下文中,例如,與PCIe端點(diǎn)中的一個(gè)或者多個(gè) 虛擬功能相關(guān)聯(lián)的 一 個(gè)或者多個(gè)地址轉(zhuǎn)換高速緩存。將未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的轉(zhuǎn)換存儲(chǔ)在適配器的設(shè)備驅(qū)動(dòng)器 隊(duì)列上下文中允許在目標(biāo)為設(shè)備驅(qū)動(dòng)器隊(duì)列條目的DMA時(shí),PCIe 端點(diǎn)旁路根聯(lián)合體的ATPT。由此,當(dāng)根聯(lián)合體接收到標(biāo)記為已轉(zhuǎn)換 的PCIeDMA事務(wù)的時(shí)候,根聯(lián)合體驗(yàn)證轉(zhuǎn)換高速緩存針對(duì)該端點(diǎn) 而使能,并且使用已轉(zhuǎn)換的PCIe存儲(chǔ)器地址直接訪問主機(jī)的實(shí)際存 儲(chǔ)器。在之后的某時(shí)間點(diǎn)處,諸如從系統(tǒng)移除PCIe端點(diǎn)之后,從系統(tǒng) 移除與設(shè)備驅(qū)動(dòng)器相關(guān)聯(lián)的功能(物理的或者虛擬的)之后等,需 要使得對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的ATC條目和ATPT條目 無效。為了執(zhí)行這種無效,設(shè)備驅(qū)動(dòng)器或者某較高級(jí)別的實(shí)體(諸 如管理程序管理組件)調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)以將主機(jī)存儲(chǔ)器解釘 (unpin)并釋放DMA地址,即,未轉(zhuǎn)換的PCIe存儲(chǔ)器地址。然后, 設(shè)備驅(qū)動(dòng)器服務(wù)清除對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的ATPT條 目,并且根聯(lián)合體向PCIe端點(diǎn)發(fā)布ATC條目無效請(qǐng)求。然后,PCIe 端點(diǎn)執(zhí)行操作以使得對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的任何ATC 條目無效,并且在不再使用未轉(zhuǎn)換的PCIe存儲(chǔ)器地址之后,向設(shè)備 服務(wù)返回ATC無效完成響應(yīng)。然后,設(shè)備服務(wù)將控制返回給設(shè)備驅(qū) 動(dòng)器。在可替換實(shí)現(xiàn)中,設(shè)備驅(qū)動(dòng)器服務(wù)可以向PCIe端點(diǎn)發(fā)布ATC 條目無效請(qǐng)求,并且在PCIe端點(diǎn)完成ATC條目無效之后,設(shè)備驅(qū) 動(dòng)器服務(wù)可以清除ATPT條目并返回到設(shè)備驅(qū)動(dòng)器。如上所提及,可以利用示意性實(shí)施方式的機(jī)制來建立ATPT條 目,用于在系統(tǒng)鏡像、運(yùn)行在系統(tǒng)鏡像中的應(yīng)用等與PCIe端點(diǎn)之間 使用一個(gè)或者多個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu)進(jìn)行的通信中。在示意性實(shí)施方式 的如此實(shí)現(xiàn)中,以上文先前所述的方式將用于一個(gè)或者多個(gè)隊(duì)列數(shù) 據(jù)結(jié)構(gòu)的ATPT條目初始化。在PCIe端點(diǎn)的初始化階段期間,PCIe 端點(diǎn)驗(yàn)證設(shè)備驅(qū)動(dòng)器已經(jīng)初始化。例如,這可以通過從PCIe端點(diǎn)的 PCI配置空間、重要產(chǎn)品數(shù)據(jù)(VPD)字段、或者存儲(chǔ)器映射的輸入 /輸出(MMIO)字段讀取信息來執(zhí)行。設(shè)備驅(qū)動(dòng)器可以向PCIe端點(diǎn)提供 一 個(gè)或者多個(gè)隊(duì)列的開始和結(jié) 束地址、開始地址和長度等。例如,設(shè)備驅(qū)動(dòng)器可以將這些地址寫 入對(duì)應(yīng)于隊(duì)列配置空間的PCIe端點(diǎn)的PCI配置空間字段、VPD或者 MMIO字段。這些地址是未轉(zhuǎn)換的PCIe地址。PCIe端點(diǎn)可以調(diào)取用 于隊(duì)列地址的已轉(zhuǎn)換的PCIe ATS請(qǐng)求。作為結(jié)果,根聯(lián)合體可以使 用ATPT來執(zhí)行地址轉(zhuǎn)換并將結(jié)果返回到PCIe端點(diǎn),其可以將已轉(zhuǎn) 換的地址在隊(duì)列上下文中高速緩存,用于從 一 個(gè)或者多個(gè)隊(duì)列獲取 項(xiàng)目使用,并將項(xiàng)目放置在一個(gè)或者多個(gè)隊(duì)列中。在一個(gè)示意性實(shí)施方式中,設(shè)備驅(qū)動(dòng)器生成用于與PCIe端點(diǎn)通 信的隊(duì)列數(shù)據(jù)結(jié)構(gòu)。隊(duì)列數(shù)據(jù)結(jié)構(gòu)可以包括,例如,命令隊(duì)列和響 應(yīng)隊(duì)列。隊(duì)列數(shù)據(jù)結(jié)構(gòu)可以是小型組件系統(tǒng)接口 (SCSI)隊(duì)列,例 如,用于與耦合到PCIe端點(diǎn)的SCSI I/O設(shè)備進(jìn)行通信。這些隊(duì)列數(shù) 據(jù)結(jié)構(gòu)可以以包括鏈接的列表隊(duì)列、循環(huán)緩沖隊(duì)列等的任何方式配 置。在生成這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)時(shí),作為由設(shè)備驅(qū)動(dòng)器執(zhí)行操作的部條目編程,并且向設(shè)備驅(qū)動(dòng)器返回用于隊(duì)列的未轉(zhuǎn)換的PCIe地址 (即,DMA地址)。ATPT條目的編程可以包括4丁住用于隊(duì)列數(shù) 據(jù)結(jié)構(gòu)的主機(jī)存儲(chǔ)器空間,利用用于從未轉(zhuǎn)換的PCIe地址到系統(tǒng)存 儲(chǔ)器地址的轉(zhuǎn)換信息來對(duì)根聯(lián)合體的ATPT中的ATPT條目進(jìn)行編 程,并在ATPT條目中設(shè)置一個(gè)高速緩存使能位,該位指示對(duì)應(yīng)于 ATPT條目的地址轉(zhuǎn)換在PCIe端點(diǎn)的ATC中是可高速緩存的。在執(zhí) 行此操作之后,用于一個(gè)或多個(gè)ATPT條目的未轉(zhuǎn)換的PCIe地址返 回到設(shè)備驅(qū)動(dòng)器。這些未轉(zhuǎn)換的PCIe地址可以標(biāo)識(shí)例如隊(duì)列數(shù)據(jù)結(jié) 構(gòu)的開始和結(jié)束地址。由設(shè)備驅(qū)動(dòng)器向PCIe端點(diǎn)提供未轉(zhuǎn)換的PCIe地址,諸如通過 將地址寫入PCIe端點(diǎn)中的隊(duì)列配置空間。隊(duì)列配置空間可以是例如 PCI配置空間、 一個(gè)或者多個(gè)VPD字段、 一個(gè)或者多個(gè)MMIO字段 等。響應(yīng)于接收到這些用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn)換的PCIe地址,PCIe 端點(diǎn)可以向根聯(lián)合體發(fā)布針對(duì)隊(duì)列地址的PCIeATS請(qǐng)求。作為結(jié) 果,根聯(lián)合體可以執(zhí)行針對(duì)隊(duì)列數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn)換的PCIe地址的訪 問檢查以及地址轉(zhuǎn)換,并將已轉(zhuǎn)換的地址返回PCIe端點(diǎn)。PCIe端點(diǎn) 則可以將這些地址轉(zhuǎn)換存儲(chǔ)在由PCIe端點(diǎn)的ATC提供的隊(duì)列上下 文中。作為上文的結(jié)果,由于PCIe端點(diǎn)現(xiàn)在訪問用于與隊(duì)列數(shù)據(jù)結(jié)構(gòu) 相關(guān)聯(lián)的地址的轉(zhuǎn)換,所以PCIe端點(diǎn)現(xiàn)在可以執(zhí)行DMA操作以將 隊(duì)列條目提供到隊(duì)列數(shù)據(jù)結(jié)構(gòu)、或者從隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取隊(duì)列條目, 而不必經(jīng)歷根聯(lián)合體ATPT地址轉(zhuǎn)換。一旦PCIe端點(diǎn)不再使用隊(duì)列數(shù)據(jù)結(jié)構(gòu),則可以以上文先前所述 的方式使得對(duì)應(yīng)于用于這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)的地址的ATPT和ATC條 目無效。例如,當(dāng)PCIe端點(diǎn)將要從系統(tǒng)中移除時(shí)、在關(guān)聯(lián)于設(shè)備驅(qū) 動(dòng)器的功能(物理的或者虛擬的)從主機(jī)系統(tǒng)中移除之后等情況下,12 可以、執(zhí)行這種無效。這種無效的處理可以包括設(shè)備驅(qū)動(dòng)器調(diào)取設(shè) 備驅(qū)動(dòng)器服務(wù)以將對(duì)應(yīng)于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的主機(jī)系統(tǒng)存儲(chǔ)器解釘,釋 》丈用于這些隊(duì)列^:據(jù)結(jié)構(gòu)的DMA地址,清除用于這些DMA地址的 ATPT條目,以及向PCIe端點(diǎn)發(fā)布ATC條目無效請(qǐng)求。當(dāng)由PCIe 端點(diǎn)完成ATC條目無效操作的時(shí)候,設(shè)備驅(qū)動(dòng)器服務(wù)將控制返回給 設(shè)備驅(qū)動(dòng)器,并且此時(shí),可以從系統(tǒng)移除PCIe端點(diǎn)。如上所述,可以使用示意性實(shí)施方式的機(jī)制來在設(shè)備驅(qū)動(dòng)器中 建立隊(duì)列數(shù)據(jù)結(jié)構(gòu),以及數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體中建立該隊(duì)列數(shù) 據(jù)結(jié)構(gòu)對(duì)應(yīng)的ATPT條目。 一旦通過上述機(jī)制將這種隊(duì)列數(shù)據(jù)結(jié)構(gòu) 初始化,則可以通過使用這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)和ATPT條目來執(zhí)行在 PCIe端點(diǎn)和主機(jī)系統(tǒng)的邏輯分區(qū)的應(yīng)用實(shí)例、系統(tǒng)鏡像等之間的通 信??梢杂刹煌愋偷腜CIe端點(diǎn)來使用這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)和對(duì)應(yīng)的 ATPT條目。例如,PCIe端點(diǎn)可以是連網(wǎng)的適配器,諸如以太網(wǎng)適 配器、結(jié)構(gòu)通道適配器、InfiniBand 適配器等,用于通過一個(gè)或者 多個(gè)數(shù)據(jù)網(wǎng)絡(luò)來與其他設(shè)備進(jìn)行通信。通過這種連網(wǎng)適配器,正在 發(fā)送或者接收的數(shù)據(jù)被放置到與主機(jī)系統(tǒng)的設(shè)備驅(qū)動(dòng)器相關(guān)聯(lián)的緩 沖器之中,并且根據(jù)數(shù)據(jù)是否正在接收或者發(fā)送而由主機(jī)系統(tǒng)的系 統(tǒng)鏡像或者PCIe適配器來獲取。提供了用于建立隊(duì)列數(shù)據(jù)結(jié)構(gòu)以及 將對(duì)應(yīng)于隊(duì)列的已轉(zhuǎn)換的地址進(jìn)行高速緩存的示意性實(shí)施方式的機(jī) 制,從而可以使用這些已轉(zhuǎn)換的地址和DMA操作來將數(shù)據(jù)直接發(fā)送 到傳送和/或接收緩沖器,而不必在數(shù)據(jù)傳送/接收的時(shí)候經(jīng)歷根聯(lián)合 體的地址轉(zhuǎn)換。由此,該機(jī)制降低了關(guān)聯(lián)于經(jīng)由網(wǎng)絡(luò)適配器的數(shù)據(jù) 傳送和接收的等待時(shí)間。除了由連網(wǎng)適配器使用以外,示意性實(shí)施方式的機(jī)制還進(jìn)一步 由其他類型的PCIe端點(diǎn)^使用,用于與本地可用i殳備通信。例如,PCIe 端點(diǎn)可以是用于與附加至PCIe端點(diǎn)的存儲(chǔ)設(shè)備直接通信的小型組件 系統(tǒng)接口 (SCSI)適配器??梢允褂檬疽庑詫?shí)施方式的機(jī)制,通過 提供將用于SCSI讀取/寫入的地址信息高速緩存在SCSI適配器中的
機(jī)制,來降低SCSI適配器的DMA讀取等待時(shí)間。在一個(gè)示意性實(shí)施方式中,提供了一種用于在系統(tǒng)鏡像和本地 附加的外部存儲(chǔ)設(shè)備之間執(zhí)行操作的方法。該方法可以包括接收 來自系統(tǒng)鏡像的存儲(chǔ)事務(wù)請(qǐng)求,以及在命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建命 令隊(duì)列元素(CQE) , CQE指定緩沖器數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn)換的地址, 并且包含數(shù)據(jù)傳送操作命令。本方法可以進(jìn)一步包括由用于與本 地附加的外部存儲(chǔ)器設(shè)備進(jìn)行通信的輸入/輸出(I/O)適配器從命令 隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取CQE,并且向耦合到1/0適配器的本地附加的外 部存儲(chǔ)器設(shè)備發(fā)送數(shù)據(jù)傳送操作命令。此外,本方法可以包括在 向本地附加的外部存儲(chǔ)設(shè)備發(fā)送數(shù)據(jù)傳送操作命令基本上同一時(shí) 間,由I/O適配器向數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體發(fā)布針對(duì)與緩沖器數(shù)據(jù) 結(jié)構(gòu)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址相對(duì)應(yīng)的一個(gè)或者多個(gè)已轉(zhuǎn)換的 地址的請(qǐng)求。此外,本方法可以包括由1/0適配器在該1/0適配器 的本地地址轉(zhuǎn)換高速緩存中存儲(chǔ)與緩沖器數(shù)據(jù)結(jié)構(gòu)的一個(gè)或者多個(gè) 未轉(zhuǎn)換的地址相對(duì)應(yīng)的 一 個(gè)或者多個(gè)已轉(zhuǎn)換的地址。數(shù)據(jù)傳送操作 可以是對(duì)本地附加的外部存儲(chǔ)設(shè)備的寫入、或者從本地附加的外部 存儲(chǔ)設(shè)備的讀取之一。本方法可以進(jìn)一步包括由1/0適配器使用在本地地址轉(zhuǎn)換高速 緩存中存儲(chǔ)的 一個(gè)或者多個(gè)已轉(zhuǎn)換的地址來執(zhí)行在I/O適配器和緩 沖器數(shù)據(jù)結(jié)構(gòu)之間的直接存儲(chǔ)器訪問(DMA)事務(wù),以將從本地附 加的外部存儲(chǔ)設(shè)備讀取的數(shù)據(jù)放置到緩沖器數(shù)據(jù)結(jié)構(gòu)之中。DMA事 務(wù)可以具有一個(gè)轉(zhuǎn)換位,其被設(shè)置指示由DMA事務(wù)所使用的地址是 已轉(zhuǎn)換的地址。根聯(lián)合體可以響應(yīng)于檢測到該轉(zhuǎn)換位被設(shè)置而將 DMA操作直接傳遞到緩沖器數(shù)據(jù)結(jié)構(gòu),而不執(zhí)行地址轉(zhuǎn)換操作。本方法可以進(jìn)一步包括在I/0適配器中的CQE的本地副本中 存儲(chǔ)與數(shù)據(jù)傳送操作命令相關(guān)聯(lián)的地址轉(zhuǎn)換。本方法可以包括響 應(yīng)于創(chuàng)建CQE,向與1/0適配器相關(guān)聯(lián)的門鈴存儲(chǔ)設(shè)備中寫入一個(gè) 值,指示CQE可用于由1/0適配器進(jìn)行的處理。1/0適配器可以響 應(yīng)于將該值寫入門鈴存儲(chǔ)設(shè)備而從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取CQE。 本方法可以包括由數(shù)據(jù)處理系統(tǒng)的設(shè)備驅(qū)動(dòng)器來調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù),用于針對(duì)命令隊(duì)列數(shù)據(jù)結(jié)構(gòu),將與根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的一個(gè)或者多個(gè)地址轉(zhuǎn)換條目進(jìn)行初始化。此外,本方法可以包括向1/0適配器提供與命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址。所述一個(gè)或者多個(gè)地址轉(zhuǎn)換條目可以指 定從與命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址到一個(gè)或者多個(gè)已轉(zhuǎn)換的地址的轉(zhuǎn)換。I / 0適配器可以是小型組件系統(tǒng)接 口 (SCSI)適配器、串行附加SCSI (SAS)適配器、串行高級(jí)技術(shù) 附件(SATA)或者高級(jí)技術(shù)附件(ATA)適配器之一。本方法可以進(jìn)一步包括讀取在CQE的頭部中提供的值,并且 根據(jù)在CQE的頭部中所提供的值來確定CQE是否包括讀取數(shù)據(jù)傳 送操作命令。響應(yīng)于確定CQE包含讀取數(shù)據(jù)傳送操作命令,向根聯(lián) 合體發(fā)布針對(duì)一個(gè)或者多個(gè)已轉(zhuǎn)換的地址的請(qǐng)求,并存儲(chǔ)該一個(gè)或 者多個(gè)已轉(zhuǎn)換的地址。本方法還可以包括響應(yīng)于CQE的數(shù)據(jù)傳送操作命令的完成, 從I/O適配器向與系統(tǒng)鏡像相關(guān)聯(lián)的響應(yīng)隊(duì)列數(shù)據(jù)結(jié)構(gòu)發(fā)送響應(yīng)隊(duì) 列條目(RQE)。此外,本方法可以包括由設(shè)備驅(qū)動(dòng)器從響應(yīng)隊(duì) 列數(shù)據(jù)結(jié)構(gòu)獲取RQE,并且由設(shè)備驅(qū)動(dòng)器來調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)以 將與緩沖器數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的主機(jī)存儲(chǔ)器解釘,釋放與緩沖器數(shù)據(jù) 結(jié)構(gòu)相關(guān)聯(lián)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址,并且清除與緩沖器數(shù)據(jù) 結(jié)構(gòu)相對(duì)應(yīng)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn)換條目。在另一示意性實(shí)施方式中,提供了一種計(jì)算機(jī)程序產(chǎn)品,其包 括具有計(jì)算機(jī)可讀程序的計(jì)算機(jī)可用介質(zhì)。當(dāng)在計(jì)算設(shè)備上執(zhí)行的 時(shí)候,計(jì)算機(jī)可讀程序使得計(jì)算設(shè)備執(zhí)行關(guān)于方法示意性實(shí)施方式 而在上文概括的各種操作、以及操作的結(jié)合。在又一示意性實(shí)施方式中,提供了一種裝置。該裝置包括處 理器,以及耦合到處理器的1/0適配器,1/0適配器配置用于與本地 附加的外部存儲(chǔ)設(shè)備進(jìn)行通信。該處理器可以接收來自系統(tǒng)鏡像的 存儲(chǔ)事務(wù)請(qǐng)求,并且在命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建命令隊(duì)列元素 (CQE),該CQE指定緩沖器數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn)換的地址并包含數(shù)據(jù) 傳送操作命令。1/0適配器可以從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取CQE,向耦 合到I/O適配器的本地附加的外部存儲(chǔ)設(shè)備發(fā)送數(shù)據(jù)傳送操作命令, 并且在向本地附加的外部存儲(chǔ)I/0設(shè)備發(fā)送數(shù)據(jù)傳送操作命令基本 上同 一 時(shí)間,向數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體發(fā)布針對(duì)與緩沖器數(shù)據(jù)結(jié) 構(gòu)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址相對(duì)應(yīng)的一個(gè)或者多個(gè)已轉(zhuǎn)換的地 址的請(qǐng)求。此外,1/0適配器可以在1/0適配器的本地地址轉(zhuǎn)換高速 緩存中存儲(chǔ)與緩沖器數(shù)據(jù)結(jié)構(gòu)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址相對(duì)應(yīng) 的一個(gè)或者多個(gè)已轉(zhuǎn)換的地址。本發(fā)明的這些以及其他特征和優(yōu)點(diǎn)將在以下本發(fā)明的示范性實(shí) 施方式的詳細(xì)說明中描述,或者對(duì)本領(lǐng)域普通技術(shù)人員而言,通過 以下本發(fā)明的示范性實(shí)施方式的詳細(xì)說明,發(fā)明的這些以及其他特 征和優(yōu)點(diǎn)將變得顯而易見。
當(dāng)結(jié)合附圖閱讀的時(shí)候,通過參考以下示意性實(shí)施方式的詳細(xì) 描述,將更好地理解本發(fā)明和其中使用的優(yōu)選模式以及進(jìn)一步的目 的和優(yōu)點(diǎn),其中圖1是示出了用于使用ATPT和PCI express ( PCIe )通信協(xié)議 執(zhí)行DMA操作的傳統(tǒng)機(jī)制的示范性圖示;圖2是示出了分布式數(shù)據(jù)處理環(huán)境的示范性圖示,其中可以實(shí) 現(xiàn)示意性實(shí)施方式的示范性方面;圖3是示出了數(shù)據(jù)處理設(shè)備的示范性圖示,其中可以實(shí)現(xiàn)示意 性實(shí)施方式的示范性方面;圖4是示出了關(guān)于設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器服務(wù)的一個(gè)示意性 實(shí)施方式的操作的示范性圖示;圖5是示出了根據(jù)一個(gè)示意性實(shí)施方式的利用DMA操作處理已 轉(zhuǎn)換的和未轉(zhuǎn)換的PCIe地址的示范性圖示;圖6是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,其概括了用于對(duì)用
于DMA地址的ATPT條目進(jìn)行初始化的示范性操作;圖7是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,其概括了用于使用 于DMA地址的ATPT條目和ATC條目無效的示范性操作;圖8是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,其概括了用于處理 DMA操作中的已轉(zhuǎn)換的和未轉(zhuǎn)換的PCIe地址的示范性操作;圖9示出了用于高速緩存針對(duì)PCIe端點(diǎn)隊(duì)列的地址轉(zhuǎn)換的示意 性實(shí)施方式的實(shí)現(xiàn);圖IO是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,其概括了用于初始 化主機(jī)系統(tǒng)和PCIe端點(diǎn)之間通信的隊(duì)列數(shù)據(jù)結(jié)構(gòu)的示范性操作;圖11是一個(gè)示范性操作的圖示,其示出了使用隊(duì)列條目(被稱 作"命令隊(duì)列條目,,或者CQE)從PCIe端點(diǎn)接收主機(jī)系統(tǒng)的緩沖器 中數(shù)據(jù)的操作;圖12是示出了使用CQE經(jīng)由PCIe端點(diǎn)傳送數(shù)據(jù)的操作的示范 性圖示;圖13A至圖13B描繪了根據(jù)一個(gè)示意性實(shí)施方式的流程圖,其 概括了用于接收網(wǎng)絡(luò)適配器的操作的示范性操作;圖14A至圖14B描繪了根據(jù)一個(gè)示意性實(shí)施方式的流程圖,其 概括了用于傳送網(wǎng)絡(luò)適配器的操作的示范性操作;圖15是根據(jù)一個(gè)示意性實(shí)施方式的示出了 SCSI讀取操作的示 范性圖示;圖16A至圖16B描繪了根據(jù)一個(gè)示意性實(shí)施方式的流程圖,其 概括了用于從SCSI設(shè)備讀取數(shù)據(jù)的示范性操作。
具體實(shí)施方式
示意性實(shí)施方式提供了多種機(jī)制,通過該機(jī)制,端點(diǎn)地址轉(zhuǎn)換 管理責(zé)任跨越設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器服務(wù)分布,以便促進(jìn)在端點(diǎn) 和主機(jī)系統(tǒng)之間更有效的直接存儲(chǔ)器訪問(DMA)操作。這樣,示 意性實(shí)施方式可以在其中可以使用設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器服務(wù)來 執(zhí)行DMA操作的任何計(jì)算設(shè)備中實(shí)現(xiàn),如下文所述。這種計(jì)算設(shè)備
可以采取多種形式并且可以具有各種配置。在下文中,圖2至圖3 提供了其中可以實(shí)現(xiàn)示意性實(shí)施方式的示范性方面的數(shù)據(jù)處理環(huán)境 和數(shù)據(jù)處理設(shè)備的例子。應(yīng)該理解,圖2至圖3僅僅是示范性的, 并且并非旨在于限制關(guān)于其中可以使用示意性實(shí)施方式機(jī)制的數(shù)據(jù) 處理環(huán)境和設(shè)備的類型?,F(xiàn)在參考附圖,尤其是參考圖2至圖3,其中提供了可以實(shí)現(xiàn)本 發(fā)明實(shí)施方式的數(shù)據(jù)處理環(huán)境的示范性圖示。應(yīng)該理解,圖2至圖3 僅僅是示范性的并且并非旨在聲明或者暗示關(guān)于可以實(shí)現(xiàn)本發(fā)明的 方面或者實(shí)施方式的環(huán)境的任何限制。在不偏離本發(fā)明的精神和范 圍的情況下,可以對(duì)所述環(huán)境進(jìn)行多種修改?,F(xiàn)在參考附圖,圖2描繪了其中可以實(shí)現(xiàn)示意性實(shí)施方式的方 面的示范性分布式數(shù)據(jù)處理系統(tǒng)的圖示性表示。分布式數(shù)據(jù)處理系 統(tǒng)200可以包括其中可以實(shí)現(xiàn)示意性實(shí)施方式中的實(shí)施方式的計(jì)算 機(jī)網(wǎng)絡(luò)。分布式數(shù)據(jù)處理系統(tǒng)200包含至少一個(gè)網(wǎng)絡(luò)202,該網(wǎng)絡(luò)是 用以在分布式數(shù)據(jù)處理系統(tǒng)200內(nèi)部連接在一起的各種設(shè)備和計(jì)算 機(jī)之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)202可以包括連接,諸如有線、 無線通信鏈路或者光纜。在所述例子中,服務(wù)器204和服務(wù)器206隨存儲(chǔ)單元208連接 到網(wǎng)絡(luò)202。另外,客戶端210、 212和214也連接到網(wǎng)絡(luò)202。這 些客戶端210、 212和214可以是例如個(gè)人計(jì)算機(jī)、網(wǎng)絡(luò)計(jì)算機(jī)等。 在所述例子中,服務(wù)器204向客戶端210、 212和214提供數(shù)據(jù),諸 如引導(dǎo)文件、操作系統(tǒng)鏡像、以及應(yīng)用。在所述例子中,客戶端210、 212和214是針對(duì)服務(wù)器204的客戶端。分布式數(shù)據(jù)處理系統(tǒng)200 可以包括附加的服務(wù)器、客戶端以及未示出的其他設(shè)備。在所述例子中,分布式數(shù)據(jù)處理系統(tǒng)200是具有網(wǎng)絡(luò)202的因 特網(wǎng),其中網(wǎng)絡(luò)202表示使用傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP ) 協(xié)議族來彼此通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的世界范圍集合。因特網(wǎng)的中心是 在主節(jié)點(diǎn)或者主機(jī)計(jì)算機(jī)之間的高速數(shù)據(jù)通信線路骨干,包括對(duì)數(shù) 據(jù)和消息進(jìn)行路由的成千上萬的商業(yè)、政府、教育以及其他計(jì)算機(jī)
系統(tǒng)。當(dāng)然,還可以實(shí)現(xiàn)分布式數(shù)據(jù)處理系統(tǒng)200以包括許多類型 的網(wǎng)絡(luò),諸如例如內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)等。 如上所述,圖2旨在于作為一個(gè)例子,并不作為針對(duì)本發(fā)明不同實(shí) 施方式的構(gòu)架限制,并且因而,在圖2中所示的特定單元不應(yīng)被認(rèn) 為是關(guān)于其中可以實(shí)現(xiàn)本發(fā)明示意性實(shí)施方式的環(huán)境的限制。現(xiàn)在參考圖3,示出了其中可以實(shí)現(xiàn)示意性實(shí)施方式的方面的示 范性數(shù)據(jù)處理系統(tǒng)的框圖。數(shù)據(jù)處理系統(tǒng)300是諸如圖2中的主機(jī) 210的計(jì)算機(jī)的一個(gè)例子,實(shí)現(xiàn)用于本發(fā)明示意性實(shí)施方式的處理的 計(jì)算機(jī)可用代碼或者指令可以位于其中。在所述例子中,數(shù)據(jù)處理系統(tǒng)200使用中心(hub)架構(gòu),其中 包括北橋和存儲(chǔ)器控制器中心(NB/MCH) 302以及南橋和輸入/輸 出(I/O)控制器中心(SB/ICH) 304。處理單元306、主存儲(chǔ)器308 和圖形處理器310連接到NB/MCH 302。圖形處理器310可以通過 加速圖形端口 ( AGP )連接到NB/MCH 302。在所述例子中,局域網(wǎng)(LAN)適配器312連接到SB/ICH 304。 音頻適配器316、鍵盤和鼠標(biāo)適配器220、調(diào)制解調(diào)器322、只讀存 儲(chǔ)器(ROM) 324、硬盤驅(qū)動(dòng)器(HDD) 326、 CD-ROM驅(qū)動(dòng)器330、 通用串行總線(USB)端口和其他通信端口 232以及PCI/PCIe設(shè)備 334通過總線338和總線340連接到SB/ICH 304。 PCI/PCIe設(shè)備可 以包括例如以太網(wǎng)適配器、用于筆記本計(jì)算機(jī)的PC卡、以及附加卡。 PCI使用卡總線控制器,而PCIe不使用。ROM324例如可以是快閃 二進(jìn)制輸入/輸出系統(tǒng)(BIOS )。HDD 326和CD-ROM驅(qū)動(dòng)器330通過總線340連接到SB/ICH 304。 HDD 326和CD-ROM驅(qū)動(dòng)器330可以4吏用例如集成的驅(qū)動(dòng)器 電子設(shè)備(IDE)或者串行高級(jí)技術(shù)附件(SATA)接口。超級(jí)1/0 (SIO )設(shè)備336可以連接到SB/ICH 204。操作系統(tǒng)在處理單元306上運(yùn)行。操作系統(tǒng)對(duì)圖3中的數(shù)據(jù)處 理系統(tǒng)300內(nèi)部的各種組件進(jìn)行調(diào)整并提供控制。作為客戶端,操 作系統(tǒng)可以是商業(yè)可獲得的操作系統(tǒng),諸如Microsoft Windows XP (Microsoft和Windows是微軟公司在美國、其他國家或兩者中的商 標(biāo))。面向?qū)ο蟮木幊滔到y(tǒng)(例如JavaTM編程系統(tǒng))可以結(jié)合操作 系統(tǒng)運(yùn)行,并且從在數(shù)據(jù)處理系統(tǒng)300上扭J亍的Java程序或應(yīng)用向 操作系統(tǒng)提供調(diào)用(Java和所有基于Java的商標(biāo)是Sun微系統(tǒng)公司 在美國、其他國家或兩者中的商標(biāo))。作為服務(wù)器,數(shù)據(jù)處理系統(tǒng)300可以是例如IBM eServer pSeries 計(jì)算機(jī)系統(tǒng),運(yùn)行在高級(jí)交互執(zhí)行(AIX )操作系統(tǒng)或者 LINUX⑧操作系統(tǒng)(eServer、 pSeries和AIX是國際商用機(jī)器公司在 美國、其他國家或兩者中的商標(biāo),而Linux是Linus Torvalds在美國、 其他國家或兩者中的商標(biāo))上。數(shù)據(jù)處理系統(tǒng)300可以是在處理單 元306中包括多個(gè)處理器的對(duì)稱多處理器(SMP)系統(tǒng)。作為替換, 可以使用單處理器系統(tǒng)。針對(duì)操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)以及應(yīng)用或程序的指令位 于諸如HDD 326的存儲(chǔ)器設(shè)備上,并且可以裝載到主存儲(chǔ)器308中 用于由處理單元306來執(zhí)行。本發(fā)明示意性實(shí)施方式的處理可以由 處理單元306使用計(jì)算機(jī)可讀程序代碼來執(zhí)行,該計(jì)算機(jī)可讀程序 代碼可以位于例如主存儲(chǔ)器308、 ROM 324、或者一個(gè)或多個(gè)外圍設(shè) 備326和330的存儲(chǔ)器中??偩€系統(tǒng)(諸如圖3中所示的總線338或者總線340)可以包括 一個(gè)或多個(gè)總線。當(dāng)然,可以使用在附加至該結(jié)構(gòu)或架構(gòu)的不同組 件或設(shè)備之間提供數(shù)據(jù)傳遞的任何類型的通信結(jié)構(gòu)或架構(gòu)來實(shí)現(xiàn)總 線系統(tǒng)。通信單元(諸如圖3中的調(diào)制解調(diào)器322或網(wǎng)絡(luò)適配器312) 可以包括用以傳送和接收數(shù)據(jù)的 一 個(gè)或多個(gè)設(shè)備。存儲(chǔ)器可以是例 如主存儲(chǔ)器308、 ROM324或諸如在圖3中NB/MCH 302中可以找 到的高速緩存。本領(lǐng)域普通技術(shù)人員應(yīng)該理解,在圖2至圖3中的硬件可以根 據(jù)實(shí)現(xiàn)而改變。其他內(nèi)部硬件或外圍設(shè)備,諸如閃存、等同的非易 失性存儲(chǔ)器或光盤驅(qū)動(dòng)器等,可以在圖2至圖3中示出的硬件之外 使用或代替圖2至圖3中示出的硬件而使用。此外,示意性實(shí)施方
式的處理可以應(yīng)用到先前提及的S MP系統(tǒng)以外的多處理器數(shù)據(jù)處理 系統(tǒng)中,而并不背離本發(fā)明的精神和范圍。此外,數(shù)據(jù)處理系統(tǒng)300可以采取多個(gè)不同數(shù)據(jù)處理系統(tǒng)的任 意一個(gè)的形式,包括客戶端計(jì)算設(shè)備、服務(wù)器計(jì)算設(shè)備、平板計(jì)算 機(jī)、膝上型計(jì)算機(jī)、電話或者其他通信設(shè)備、個(gè)人數(shù)字助理(PDA) 等。在某些示意性例子中,例如,數(shù)據(jù)處理系統(tǒng)300可以是便攜計(jì) 算設(shè)備,其配置有閃存來提供非易失性存儲(chǔ)器用于存儲(chǔ)操作系統(tǒng)文 件和/或用戶生成的數(shù)據(jù)。本質(zhì)上,數(shù)據(jù)處理系統(tǒng)300可以是任何已 知的或者新近開發(fā)的數(shù)據(jù)處理系統(tǒng),而并沒有架構(gòu)限制。如上所提及,示意性實(shí)施方式提供了一種系統(tǒng)和方法,用于將 端點(diǎn)地址轉(zhuǎn)換高速緩存管理的責(zé)任分布在設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器 服務(wù)之間。設(shè)備驅(qū)動(dòng)器例如可以提供在不受信任的任務(wù)邏輯分區(qū) (LPAR)中,而設(shè)備驅(qū)動(dòng)器服務(wù)例如可以提供在受信任的輸入/輸出 (I/O)虛擬化媒介(VI)中。盡管將在示意性實(shí)施方式的描述中使 用PCIe端點(diǎn)和PCIe通信協(xié)議,應(yīng)該理解,示意性實(shí)施方式不應(yīng)限 制于此,并且在不偏離本發(fā)明的精神和范圍的情況下,可以使用任 何通信協(xié)議。關(guān)于示意性實(shí)施方式,設(shè)備驅(qū)動(dòng)器負(fù)責(zé)管理和使用用于在用戶 應(yīng)用/庫和PCIe端點(diǎn)之間通信的隊(duì)列結(jié)構(gòu)。設(shè)備驅(qū)動(dòng)器進(jìn) 一 步負(fù)責(zé)調(diào) 取由設(shè)備驅(qū)動(dòng)器服務(wù)提供的存儲(chǔ)器管理服務(wù)。設(shè)備驅(qū)動(dòng)器服務(wù)初始 化并管理計(jì)算系統(tǒng)的PCIe根聯(lián)合體的保護(hù)表(ATPT)和地址轉(zhuǎn)換、 以及PCIe端點(diǎn)的地址轉(zhuǎn)換高速緩存(ATC)。下文將描述執(zhí)行這種 初始化和管理的方式。在 一 個(gè)示意性實(shí)施方式中,在主機(jī)系統(tǒng)的邏輯分區(qū)的系統(tǒng)鏡像 中,在用于PCIe端點(diǎn)的設(shè)備驅(qū)動(dòng)器的初始化期間,用于PCIe端點(diǎn) 的設(shè)備驅(qū)動(dòng)器調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)以初始化地址轉(zhuǎn)換和保護(hù)表 (ATPT)條目,并將PCI存儲(chǔ)器地址返回到設(shè)備驅(qū)動(dòng)器。在一個(gè)示 意性實(shí)施方式中,這些ATPT條目和PCI存儲(chǔ)器地址與用于與PCIe 適配器進(jìn)行通信的一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)器隊(duì)列(稱作"設(shè)備驅(qū)動(dòng)器
的隊(duì)列")相關(guān)聯(lián)。實(shí)質(zhì)上,設(shè)備驅(qū)動(dòng)器服務(wù)釘住(pin)用于一個(gè)或者多個(gè)隊(duì)列的 主機(jī)系統(tǒng)存儲(chǔ)器,對(duì)一個(gè)或者多個(gè)隊(duì)列分配DMA地址,對(duì)ATPT條 目編程并使能一個(gè)位,該位表示ATPT條目可以高速緩存,即,可 以在PCIe端點(diǎn)上的地址轉(zhuǎn)換高速緩存中進(jìn)行高速緩存。然后,設(shè)備 驅(qū)動(dòng)器服務(wù)針對(duì)可能使用的ATPT條目向設(shè)備驅(qū)動(dòng)器返回一個(gè)或者 多個(gè)未轉(zhuǎn)換的PCIe存儲(chǔ)器地址,例如,作為與 一個(gè)或者多個(gè)隊(duì)列(例 如,隊(duì)列的開始地址,以及可選的,隊(duì)列的結(jié)束隊(duì)列地址)相關(guān)聯(lián) 的地址。未轉(zhuǎn)換的PCIe存儲(chǔ)器地址是這樣的地址,該地址不在系統(tǒng) 的實(shí)際存儲(chǔ)器地址空間中,并且在使用其訪問系統(tǒng)的實(shí)際存儲(chǔ)器之 前必須進(jìn)行轉(zhuǎn)換。使用示意性實(shí)施方式的機(jī)制,可以向PCIe端點(diǎn)提供未轉(zhuǎn)換的 PCIe存儲(chǔ)器地址,并且該地址由PCIe端點(diǎn)所使用以與根聯(lián)合體執(zhí)行 轉(zhuǎn)換請(qǐng)求操作。即,PCIe端點(diǎn)可以請(qǐng)求根聯(lián)合體返回已轉(zhuǎn)換的PCIe 存儲(chǔ)器地址或者對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的地址。PCIe端點(diǎn) 則可以在與設(shè)備驅(qū)動(dòng)器的隊(duì)列相關(guān)聯(lián)的上下文中(例如,在PCIe端 點(diǎn)中的虛擬功能的地址轉(zhuǎn)換高速緩存(ATC)中)存儲(chǔ)一個(gè)或多個(gè) 已轉(zhuǎn)換的PCIe存儲(chǔ)器地址。地址的轉(zhuǎn)換,這允許PCIe端點(diǎn)在目標(biāo)為設(shè)備驅(qū)動(dòng)器隊(duì)列條目的DMA 時(shí)旁路根聯(lián)合體的ATPT。由此,當(dāng)根聯(lián)合體接收到標(biāo)記為已轉(zhuǎn)換的 PCIeDMA事務(wù)時(shí),根聯(lián)合體將驗(yàn)證轉(zhuǎn)換高速緩存針對(duì)端點(diǎn)而使能, 并且使用已轉(zhuǎn)換的PCIe存儲(chǔ)器地址直接訪問主機(jī)的實(shí)際存儲(chǔ)器。在之后的某個(gè)時(shí)間點(diǎn),諸如從系統(tǒng)移除PCIe端點(diǎn)之后,從系統(tǒng) 移除與設(shè)備驅(qū)動(dòng)器關(guān)聯(lián)的功能(物理的或者虛擬的)之后等等,需無效。為了執(zhí)行這種無效,設(shè)備驅(qū)動(dòng)器或者某些較高級(jí)別實(shí)體(諸 如管理程序管理組件)調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)以解釘(unpin)主機(jī)存 儲(chǔ)器并釋放DMA地址,即,未轉(zhuǎn)換的PCIe存儲(chǔ)器地址。設(shè)備服務(wù) 則清除對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的ATPT條目,并且根聯(lián)合 體向PCIe端點(diǎn)發(fā)布ATC條目無效請(qǐng)求。然后PCIe端點(diǎn)執(zhí)行操作以使得對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地 址的任何ATC條目無效,并在未轉(zhuǎn)換的PCIe存儲(chǔ)器地址不再使用 之后,向設(shè)備服務(wù)返回ATC無效完成響應(yīng)。設(shè)備驅(qū)動(dòng)器服務(wù)則將控 制返回給設(shè)備驅(qū)動(dòng)器。 一個(gè)可替換的實(shí)現(xiàn)包括,使驅(qū)動(dòng)器服務(wù)向PCIe 端點(diǎn)發(fā)布ATC條目無效請(qǐng)求,并且在PCIe端點(diǎn)完成ATC條目無效 之后,設(shè)備驅(qū)動(dòng)器服務(wù)清除ATPT條目并返回到設(shè)備驅(qū)動(dòng)器。圖4是示出了關(guān)于設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器服務(wù)的 一 個(gè)示意性 實(shí)施方式的操作的示范性圖示。如在圖4中所示,主機(jī)系統(tǒng)可以具 有 一 個(gè)或者多個(gè)邏輯分區(qū)410,在該邏輯分區(qū)中可以執(zhí)行例如操作系 統(tǒng)等的系統(tǒng)鏡像420??梢允褂孟到y(tǒng)鏡像420通過訪問應(yīng)用庫等來執(zhí) 行用戶應(yīng)用430。系統(tǒng)鏡像420具有相關(guān)聯(lián)的文件系統(tǒng)440,通過其 可以訪問文件、設(shè)備驅(qū)動(dòng)器、庫以及其他軟件資源。在系統(tǒng)鏡像420 中可以提供設(shè)備驅(qū)動(dòng)器450,用于在系統(tǒng)鏡像420和PCIe適配器490 之間進(jìn)行通信。設(shè)備驅(qū)動(dòng)器450進(jìn)一步具有相關(guān)聯(lián)的響應(yīng)隊(duì)列422,通過該響應(yīng) 隊(duì)列,用戶應(yīng)用430、系統(tǒng)鏡像420等可以與PCIe端點(diǎn)490通信。 響應(yīng)隊(duì)列422具有針對(duì)以下操作的響應(yīng)隊(duì)列條目(RQE) 424,該操 作是PCIe端點(diǎn)490期望由設(shè)備驅(qū)動(dòng)器450、用戶應(yīng)用430、系統(tǒng)鏡 像420、主機(jī)系統(tǒng)存儲(chǔ)器以及其他主機(jī)系統(tǒng)資源執(zhí)行的操作。以與響 應(yīng)隊(duì)列422和系統(tǒng)鏡像420相關(guān)聯(lián)的方式提供門鈴存儲(chǔ)設(shè)備426,用 于當(dāng)響應(yīng)隊(duì)列422具有需要處理的響應(yīng)隊(duì)列條目424的時(shí)候,通知 系統(tǒng)鏡像420。可以由這種隊(duì)列執(zhí)行的工作的例子包括與從PCIe 端點(diǎn)490請(qǐng)求的工作系統(tǒng)鏡像420相關(guān)聯(lián)的完成處理,與由PCIe端 點(diǎn)490傳送(surface )到系統(tǒng)鏡像420的錯(cuò)誤或者多個(gè)事件相關(guān)聯(lián) 的異步事件處理等等。類似地,PCIe端點(diǎn)490可以具有相關(guān)聯(lián)的PCIe端點(diǎn)命令隊(duì)列 498,其中可以提供命令隊(duì)列條目(CQE)499,用于向PCIe端點(diǎn)490
通知系統(tǒng)鏡像420、用戶應(yīng)用430等期望由PCIe端點(diǎn)490來才丸行的 操作。PCIe端點(diǎn)490命令隊(duì)列498可以在PCIe端點(diǎn)490其自身中實(shí) 現(xiàn),或者更普通地,如所述的那樣,在由PCIe端點(diǎn)490可以訪問的 系統(tǒng)鏡像420存儲(chǔ)器位置中實(shí)現(xiàn)。在PCIe端點(diǎn)490中可以提供門鈴 存儲(chǔ)設(shè)備496,用于向PCIe端點(diǎn)490通知CQE 499何時(shí)存在于PCIe 端點(diǎn)命令隊(duì)列498中以j更處理。PCIe端點(diǎn)490進(jìn)一步具有一個(gè)或者多個(gè)物理功能(未示出)以 及虛擬功能492。例如,虛擬功能492可以進(jìn)一步維護(hù)地址轉(zhuǎn)換高速 緩存(ATC) 494以用于高速緩存已轉(zhuǎn)換的地址,以便用于執(zhí)行與主 機(jī)系統(tǒng)存儲(chǔ)器的直接存儲(chǔ)器訪問(DMA)操作。ATC 494可以存儲(chǔ) 在PCIe端點(diǎn)490處的設(shè)備驅(qū)動(dòng)器的隊(duì)列上下文中。PCIe端點(diǎn)490經(jīng)由PCI結(jié)構(gòu)485耦合到主才幾系統(tǒng),其可以包括: 通信鏈路、 一個(gè)或者多個(gè)PCI交換機(jī)等。主機(jī)系統(tǒng)具有PCIe根聯(lián)合 體480用于經(jīng)由PCI結(jié)構(gòu)485與PCIe端點(diǎn)4卯進(jìn)行通信。才艮聯(lián)合體 480維護(hù)地址轉(zhuǎn)換和保護(hù)表(ATPT) 482,其用于將未轉(zhuǎn)換的PCIe 存儲(chǔ)器地址轉(zhuǎn)換成為在系統(tǒng)的實(shí)際存儲(chǔ)器地址空間中使用的已轉(zhuǎn)換 的地址。ATPT482和ATC 494的管理由在輸入/輸出(I/O)虛擬化々某介 (VI) 460中提供的設(shè)備驅(qū)動(dòng)器服務(wù)470執(zhí)行。IOVI 460可以例如 是管理程序或者其他虛擬化管理組件,諸如受信任的服務(wù)分區(qū)。當(dāng) 需要初始化ATC 494和ATPT482中的條目以及使其無效的時(shí)候, 設(shè)備驅(qū)動(dòng)器服務(wù)470可以由設(shè)備驅(qū)動(dòng)器450來調(diào)取。在設(shè)備驅(qū)動(dòng)器450和設(shè)備驅(qū)動(dòng)器服務(wù)470之間劃分用于管理主 機(jī)系統(tǒng)和PCIe端點(diǎn)之間通信的責(zé)任。具體地,設(shè)備驅(qū)動(dòng)器450負(fù)責(zé) 管理其響應(yīng)隊(duì)列422和PCIe端點(diǎn)的命令隊(duì)列498。設(shè)備驅(qū)動(dòng)器450 另外負(fù)責(zé)當(dāng)需要執(zhí)行用于初始化ATPT 482中的地址轉(zhuǎn)換條目所需 的功能時(shí)調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)470,以及當(dāng)PCIe端點(diǎn)490不再使用 轉(zhuǎn)換時(shí),使得ATPT482和ATC494中的條目無效。在設(shè)備驅(qū)動(dòng)器450的初始化期間,設(shè)備驅(qū)動(dòng)器450可以針對(duì)一
個(gè)或者多個(gè)隊(duì)列來初始化DMA地址空間,所述一個(gè)或者多個(gè)隊(duì)列諸 如設(shè)備驅(qū)動(dòng)器響應(yīng)隊(duì)列422、 PCIe端點(diǎn)的命令隊(duì)列498 (其駐留在系 統(tǒng)鏡像420中用于與PCIe端點(diǎn)490通信)等。接著,針對(duì)PCIe端 點(diǎn)490的設(shè)備驅(qū)動(dòng)器450調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)470以初始化ATPT 482條目,用于將PCIe地址轉(zhuǎn)換成為DMA地址空間地址,以訪問 系統(tǒng)存儲(chǔ)器部分。每個(gè)ATPT條目用于鄰近PCI總線地址的一個(gè)集 合。用于初始化地址轉(zhuǎn)換和保護(hù)表?xiàng)l目的機(jī)制通常在現(xiàn)有技術(shù)中是 已知的。例如,在普通轉(zhuǎn)讓的美國專利6,629,162中描述了用于初始 化這種條目的機(jī)制。然后,設(shè)備驅(qū)動(dòng)器服務(wù)470向設(shè)備驅(qū)動(dòng)器450 返回一個(gè)或者多個(gè)PCI存儲(chǔ)器地址。實(shí)際上,在所述例子中,設(shè)備驅(qū)動(dòng)器服務(wù)470釘住用于響應(yīng)隊(duì) 列422和PCIe端點(diǎn)的命令隊(duì)列498(如果其駐留在系統(tǒng)鏡^象420中) 的主機(jī)系統(tǒng)存儲(chǔ)器。設(shè)備驅(qū)動(dòng)器服務(wù)470向設(shè)備驅(qū)動(dòng)器的響應(yīng)隊(duì)列 422和PCIe端點(diǎn)的命令隊(duì)列498 (如果其駐留在系統(tǒng)鏡像420中) 分配DMA地址,其中該地址是未轉(zhuǎn)換的PCIe存儲(chǔ)器地址。i殳備驅(qū) 動(dòng)器服務(wù)470對(duì)ATPT條目進(jìn)行編程并且使能一個(gè)位,該位表示用 于設(shè)備驅(qū)動(dòng)器的響應(yīng)隊(duì)列422以及PCIe端點(diǎn)的命令隊(duì)列498 (如果 其駐留在系統(tǒng)鏡像420中)的ATPT條目是可高速緩存的,即可高 速緩存在PCIe端點(diǎn)490上的ATC 494中。然后,設(shè)備驅(qū)動(dòng)器服務(wù) 470針對(duì)ATPT條目向設(shè)備驅(qū)動(dòng)器450返回未轉(zhuǎn)換的PCIe存儲(chǔ)器地 址。使用示意性實(shí)施方式的機(jī)制,則可以向PCIe端點(diǎn)490提供未轉(zhuǎn) 換的PCIe存儲(chǔ)器地址,用以向PCIe端點(diǎn)490通知隊(duì)列422和498 的位置。可以由PCIe端點(diǎn)490使用未轉(zhuǎn)換的PCIe存儲(chǔ)器地址來向 根聯(lián)合體480發(fā)送轉(zhuǎn)換請(qǐng)求操作。即,PCIe端點(diǎn)490可以請(qǐng)求根聯(lián)存儲(chǔ)器地址。然后,PCIe端點(diǎn)490可以將已轉(zhuǎn)換的PCIe存儲(chǔ)器地址 存儲(chǔ)在與設(shè)備驅(qū)動(dòng)器的隊(duì)列相關(guān)聯(lián)的上下文(例如,ATC494)中。 作為結(jié)果,將未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的轉(zhuǎn)換存儲(chǔ)在PCIe端點(diǎn)的
設(shè)備驅(qū)動(dòng)器隊(duì)列上下文或者ATC 494中,這允許PCIe端點(diǎn)490在目 標(biāo)為設(shè)備驅(qū)動(dòng)器隊(duì)列條目(例如,響應(yīng)隊(duì)列422中的RQE424)的 DMA時(shí)旁路根聯(lián)合體ATPT 482。即,當(dāng)才艮聯(lián)合體480接收標(biāo)記為 已轉(zhuǎn)換的PCIe DMA事務(wù)的時(shí)候,其將驗(yàn)證轉(zhuǎn)換高速緩存針對(duì)PCIe 端點(diǎn)490而使能,并且將直接使用已轉(zhuǎn)換的PCIe存儲(chǔ)器地址訪問主 機(jī)系統(tǒng)的實(shí)際存儲(chǔ)器。在之后的某時(shí)間點(diǎn)處,諸如從系統(tǒng)移除PCIe端點(diǎn)490之后,從 主機(jī)系統(tǒng)移除與設(shè)備驅(qū)動(dòng)器45 0相關(guān)聯(lián)的功能(物理的或者虛擬的) 之后等等,需要使得對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的ATPT條目 和ATC條目無效。為了執(zhí)行這種無效,設(shè)備驅(qū)動(dòng)器450、管理程序 管理組件等調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)470以將主機(jī)存儲(chǔ)器解釘并釋放 DMA地址,即,未轉(zhuǎn)換的PCIe存儲(chǔ)器地址。然后設(shè)備驅(qū)動(dòng)器服務(wù) 470清除ATPT 482中對(duì)應(yīng)于未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的ATPT條 目,例如,通過設(shè)置ATPT 482中的一個(gè)位表示該條目不再有效,或 者通過將ATPT條目"置零(zero,ing)"來指示其不再有效。然后,根聯(lián)合體480向PCIe端點(diǎn)490發(fā)布ATC條目無效請(qǐng)求。 然后,PCIe端點(diǎn)490執(zhí)行操作以使得ATC 494中對(duì)應(yīng)于未轉(zhuǎn)換的 PCIe存儲(chǔ)器地址的任何ATC條目無效。這種無效可以包括,例如, 從高速緩存已轉(zhuǎn)換的任何虛擬功能的隊(duì)列上下文(例如,ATC 494) 中移除高速緩存的轉(zhuǎn)換。在未轉(zhuǎn)換的PCIe存儲(chǔ)器地址不再使用之后, 即,當(dāng)引用未轉(zhuǎn)換的PCIe存儲(chǔ)器地址的所有未完成的DMA操作完 成時(shí),PCIe端點(diǎn)490向設(shè)備驅(qū)動(dòng)器服務(wù)470返回ATC無效完成響應(yīng)。 然后,設(shè)備驅(qū)動(dòng)器服務(wù)470將控制返回給設(shè)備驅(qū)動(dòng)器450。在可替換 實(shí)現(xiàn)中,設(shè)備驅(qū)動(dòng)器服務(wù)470可以向PCIe端點(diǎn)490發(fā)布ATC條目 無效請(qǐng)求,并且在PCIe端點(diǎn)490完成ATC條目無效之后,i殳備驅(qū) 動(dòng)器服務(wù)470可以清除ATPT 482中的ATPT條目并返回至設(shè)備驅(qū)動(dòng) 器450。圖5是示出了根據(jù)一個(gè)示意性實(shí)施方式的利用DMA操作處理已 轉(zhuǎn)換的和未轉(zhuǎn)換的PCIe地址的示范性圖示。圖5中所示的操作假定,已經(jīng)使用設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器服務(wù)初始化了用于DMA操作的 適當(dāng)ATPT條目,如先前所述。圖5示出了從PCIe端點(diǎn)505發(fā)送到 主機(jī)系統(tǒng)的CPU和存儲(chǔ)器560的使用未轉(zhuǎn)換的PCIe地址的一個(gè) DMA操作,以及從PCIe端點(diǎn)505發(fā)送到CPU和存儲(chǔ)器560的使用 已轉(zhuǎn)換的PCIe地址的另 一個(gè)DMA操作。如圖5中所示,當(dāng)在PCIe端點(diǎn)505的虛擬功能中接收到DMA 操作請(qǐng)求或生成DMA纟喿作請(qǐng)求時(shí),可以4丸行相應(yīng)ATC的4全查,以 確定在ATC中是否存在用于未轉(zhuǎn)換的PCIe地址的地址轉(zhuǎn)換。如果 在ATC中不存在用于未轉(zhuǎn)換的PCIe地址的條目,則將DMA操作請(qǐng) 求作為使用未轉(zhuǎn)換的PCIe地址的未轉(zhuǎn)換的PCIe DMA 510而轉(zhuǎn)發(fā)到 根聯(lián)合體530。如果在ATC中可獲得條目、并且該條目沒有被無效, 則可以^使用已轉(zhuǎn)換的地址代替用于DMA的未轉(zhuǎn)換的PCIe地址。作 為結(jié)果,將使用已轉(zhuǎn)換的地址520的已轉(zhuǎn)換的PCIe DMA轉(zhuǎn)發(fā)到根 聯(lián)合體530。對(duì)于未轉(zhuǎn)換的PCIe DMA 510,由于未轉(zhuǎn)換的PCIe地址不在主 機(jī)系統(tǒng)存儲(chǔ)器地址空間中,有必要首先將未轉(zhuǎn)換的PCIe地址轉(zhuǎn)換成 為主機(jī)系統(tǒng)存儲(chǔ)器地址。由根聯(lián)合體530使用ATPT來執(zhí)行此轉(zhuǎn)換。 另外,根聯(lián)合體530根據(jù)PCIe端點(diǎn)505的BDF號(hào)以及ATPT中的條 目來進(jìn)一步執(zhí)行訪問檢查。即,根聯(lián)合體530在ATPT 540中查找對(duì) 應(yīng)于未轉(zhuǎn)換的PCIe地址的條目,獲得對(duì)應(yīng)于未轉(zhuǎn)換的PCIe地址的 已轉(zhuǎn)換的主機(jī)系統(tǒng)存儲(chǔ)器地址、以及用于已轉(zhuǎn)換的主機(jī)系統(tǒng)存儲(chǔ)器 地址的相應(yīng)的保護(hù)信息。該保護(hù)信息可以標(biāo)識(shí)哪些BDF號(hào)可以訪問 相應(yīng)的主機(jī)系統(tǒng)地址、以及可以在與這些主才幾系統(tǒng)存儲(chǔ)器地址相對(duì) 應(yīng)的系統(tǒng)存儲(chǔ)器的部分上執(zhí)行的特殊操作。如果允許PCIe端點(diǎn)505訪問與已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址相對(duì)應(yīng) 的系統(tǒng)存儲(chǔ)器的部分,并且允許執(zhí)行請(qǐng)求的DMA操作(例如,讀/ 寫),則使用已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址570將DMA操作請(qǐng)求轉(zhuǎn)發(fā)到 CPU和存儲(chǔ)器560。如果不允許PCIe端點(diǎn)505訪問系統(tǒng)存儲(chǔ)器的部 分,則可以返回錯(cuò)誤消息,并且DMA操作請(qǐng)求不被轉(zhuǎn)發(fā)到CPU和
存儲(chǔ)器560。用于未轉(zhuǎn)換的PCIe地址的已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址可以返回 到PCIe端點(diǎn)505。然后,PCIe端點(diǎn)505可以在4是交DMA才乘作請(qǐng)求 的虛擬功能的ATC中存儲(chǔ)該轉(zhuǎn)換,參考圖4如上所述。以此方式, 代替隨后必須執(zhí)行此轉(zhuǎn)換的是,可以在PCIe端點(diǎn)中經(jīng)由ATC訪問 已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址,因而節(jié)省了針對(duì)未轉(zhuǎn)換的PCIe地址的 ATPT轉(zhuǎn)換所需的周期。對(duì)于已轉(zhuǎn)換的PCIeDMA 520,由于已經(jīng)借助于PCIe端點(diǎn)505 中的虛擬功能的ATC而將PCIe地址轉(zhuǎn)換成為系統(tǒng)存儲(chǔ)器地址,DMA 操作可以通過根聯(lián)合體530直接傳遞到CPU和存儲(chǔ)器560。例如, 已轉(zhuǎn)換的PCIe DMA 520在DMA頭部中設(shè)置(例如,由PCIe端點(diǎn) 505設(shè)置) 一個(gè)位,指示在DMA操作請(qǐng)求的頭部中指定的地址是已 轉(zhuǎn)換的地址。根聯(lián)合體530可以讀取此位并且確定該位是否指示 D M A操作請(qǐng)求中的地址是已轉(zhuǎn)換的或者未轉(zhuǎn)換的地址。如果根聯(lián)合體530確定該地址是未轉(zhuǎn)換的地址,則執(zhí)行上述關(guān) 于未轉(zhuǎn)換的PCIeDMA操作請(qǐng)求510的操作。如果根聯(lián)合體530確 定該地址是已轉(zhuǎn)換的地址,則根聯(lián)合體5 3 0可以將DMA操作請(qǐng)求 520傳遞到CPU和存儲(chǔ)器560。可選地,仍可以根據(jù)PCIe端點(diǎn)505 的BDF號(hào)來執(zhí)行訪問檢查,以確保允許PCIe端點(diǎn)訪問與已轉(zhuǎn)換的 系統(tǒng)存儲(chǔ)器地址相對(duì)應(yīng)的系統(tǒng)存儲(chǔ)器部分。此訪問檢查可以非常簡 單,諸如通常4企查以確定是否允許BDF號(hào)對(duì)地址轉(zhuǎn)換進(jìn)行高速緩存, 如果允許,則檢查成功。如果不允許BDF號(hào)對(duì)地址轉(zhuǎn)換進(jìn)行高速緩 存,則該訪問4全查失敗。圖6至圖8概述了示意性實(shí)施方式的各種元素的示范性操作。 應(yīng)該理解,可由計(jì)算機(jī)程序指令來實(shí)現(xiàn)這些流程圖示的每個(gè)方框、 下文的流程圖示、以及流程圖示中方框的結(jié)合。可以向處理器或者 其他可編程數(shù)據(jù)處理裝置提供這些計(jì)算機(jī)程序指令以生成一個(gè)機(jī) 器,以便在處理器或者其他可編程數(shù)據(jù)處理裝置上執(zhí)行的指令創(chuàng)建 用于實(shí)現(xiàn) 一 個(gè)或多個(gè)流程方框中的指定功能的器件。這些計(jì)算機(jī)程
序指令還可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器或者存儲(chǔ)介質(zhì)中,該指令可 以引導(dǎo)處理器或者其他可編程數(shù)據(jù)處理裝置以特殊方式工作,以便 在計(jì)算機(jī)可讀存儲(chǔ)器或者存儲(chǔ)介質(zhì)中存儲(chǔ)的指令產(chǎn)生一項(xiàng)產(chǎn)品,該產(chǎn)品包括實(shí)現(xiàn)一個(gè)或多個(gè)流程方框中指定功能的指令器件。因而,流程圖示的方框支持用于執(zhí)行指定功能的器件的結(jié)合、 用于執(zhí)行特定功能的步驟的結(jié)合、以及用于執(zhí)行特定功能的程序指 令器件的結(jié)合。應(yīng)該理解,流程圖示的每個(gè)方框、以及流程圖示中 方框的結(jié)合可以通過執(zhí)行特定功能或者步驟的基于專用硬件的計(jì)算 機(jī)系統(tǒng)來實(shí)現(xiàn),或者由專用硬件和計(jì)算機(jī)指令來實(shí)現(xiàn)。圖6是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,概括了對(duì)用于DMA 地址的ATPT條目進(jìn)行初始化的示范性操作。如在圖6中所示,該 操作開始于由主機(jī)系統(tǒng)對(duì)用于PCIe端點(diǎn)的設(shè)備驅(qū)動(dòng)器進(jìn)行初始化, 作為對(duì)主機(jī)系統(tǒng)上系統(tǒng)鏡像的初始化的一部分(步驟610)。主機(jī)系 統(tǒng)調(diào)用邏輯分區(qū)中的設(shè)備驅(qū)動(dòng)器,該設(shè)備驅(qū)動(dòng)器接著調(diào)用I/O虛擬化 媒介中的設(shè)備驅(qū)動(dòng)器服務(wù)(步驟620)。設(shè)備驅(qū)動(dòng)器服務(wù)釘住主機(jī)系 統(tǒng)存儲(chǔ)器(步驟630 )。設(shè)備驅(qū)動(dòng)器服務(wù)向PCIe端點(diǎn)分配DMA地址(步驟640 )。設(shè) 備驅(qū)動(dòng)器服務(wù)對(duì)用于DMA地址的ATPT條目編程,并且如果合適則 在ATPT條目中設(shè)置高速緩存使能位(步驟650)。然后,設(shè)備驅(qū)動(dòng) 器服務(wù)向設(shè)備驅(qū)動(dòng)器返回未轉(zhuǎn)換的PCIe存儲(chǔ)器地址(步驟660), 并且操作終止。圖7是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,概括了用于使用于 DMA地址的ATPT條目和ATC條目無效的示范性操作。如在圖7 中所示,操作開始于設(shè)備驅(qū)動(dòng)器調(diào)用設(shè)備驅(qū)動(dòng)器服務(wù)(步驟710)。 設(shè)備驅(qū)動(dòng)器服務(wù)釋放DMA地址(步驟720 ),然后清除用于DMA 地址的ATPT條目(步驟730)。根聯(lián)合體向PCIe端點(diǎn)發(fā)布ATC條目無效請(qǐng)求(步驟740)。 PCIe端點(diǎn)使得對(duì)應(yīng)于將被無效的DMA地址的ATC條目無效(步驟 750)。設(shè)備驅(qū)動(dòng)器服務(wù)等待ATC無效完成響應(yīng)接收(步驟760)。29一旦接收到ATC無效完成響應(yīng),則設(shè)備驅(qū)動(dòng)器服務(wù)可以將主機(jī)系統(tǒng) 存儲(chǔ)器解釘(步驟770),而一旦完成ATC無效則將控制返回給設(shè) 備驅(qū)動(dòng)器(步驟780 )。然后,操作終止。圖8是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,概括了用于處理 DMA操作中已轉(zhuǎn)換的和未轉(zhuǎn)換的PCIe地址的示范性操作。如圖8 中所示,操作開始于在根聯(lián)合體中接收DMA事務(wù)(步驟810)。根 聯(lián)合體確定是否設(shè)置了已轉(zhuǎn)換的位(步驟820)。如果沒有設(shè)置已轉(zhuǎn) 換的位,則根聯(lián)合體使用ATPT執(zhí)行全面轉(zhuǎn)化和BDF號(hào)訪問檢查(步 驟830)。此后,接著的是操作的兩個(gè)路徑。在第一路徑中,做出關(guān)于是 否允許DMA操作的源執(zhí)行已轉(zhuǎn)換的DMA操作的確定,即關(guān)于訪問 檢查是否成功完成的確定(步驟840)。如果沒有,則返回錯(cuò)誤(步 驟860)。如果允許源執(zhí)行已轉(zhuǎn)換的DMA操作,則根聯(lián)合體執(zhí)行 DMA (步驟850 )。然后操作終止。如果設(shè)置了已轉(zhuǎn)換的位(步驟820),則可以執(zhí)行可選的BDF 號(hào)訪問檢查(步驟870 )。操作旁路步驟830的地址轉(zhuǎn)換而繼續(xù)到步 驟840。由此,示意性實(shí)施方式提供一種機(jī)制,通過該機(jī)制調(diào)取設(shè)備驅(qū) 動(dòng)器服務(wù)以將主機(jī)系統(tǒng)的根聯(lián)合體的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn) 換初始化和使其無效。這些設(shè)備驅(qū)動(dòng)器服務(wù)可以在1/0虛擬化媒介中 提供,并且可以由在與系統(tǒng)鏡像相關(guān)聯(lián)的邏輯分區(qū)中提供的設(shè)備驅(qū) 動(dòng)器來調(diào)取。設(shè)備驅(qū)動(dòng)器服務(wù)可以通過根聯(lián)合體創(chuàng)建地址轉(zhuǎn)換數(shù)據(jù) 結(jié)構(gòu)條目,用于將虛擬地址(例如未轉(zhuǎn)換的PCIe地址)轉(zhuǎn)換成為系 統(tǒng)存儲(chǔ)器地址。此外,設(shè)備驅(qū)動(dòng)器服務(wù)可以通過根聯(lián)合體來從地址 轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中清除地址轉(zhuǎn)換條目,并通過PCIe端點(diǎn)將PCIe端點(diǎn) 的任何地址轉(zhuǎn)換高速緩存中的條目無效。如上所提及,可以使用示意性實(shí)施方式的機(jī)制來建立ATPT條 目,用于在系統(tǒng)鏡像、系統(tǒng)鏡像中運(yùn)行的應(yīng)用等與使用一個(gè)或者多 個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu)的PCIe端點(diǎn)之間的通信中使用。在示意性實(shí)施方式
的此實(shí)現(xiàn)中,以上文先前所述方式將用于一個(gè)或者多個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu)的ATPT條目初始化。在PCIe端點(diǎn)的初始化階段期間,PCIe端點(diǎn) 對(duì)設(shè)備驅(qū)動(dòng)器已經(jīng)被初始化進(jìn)行-瞼證。這可以例如通過/人PCIe端點(diǎn) 的PCI配置空間、重要產(chǎn)品數(shù)據(jù)(VPD)字段、或者存儲(chǔ)器映射的 輸入/輸出(MMIO)字段讀取信息來執(zhí)行。設(shè)備驅(qū)動(dòng)器可以向PCIe端點(diǎn)提供一 個(gè)或者多個(gè)隊(duì)列的開始和 結(jié)束地址、開始地址和長度等等。例如,設(shè)備驅(qū)動(dòng)器可以將這些地 址寫入對(duì)應(yīng)于隊(duì)列配置空間的PCIe端點(diǎn)的PCI配置空間字段、VPD 或者M(jìn)MIO字段。這些地址是未轉(zhuǎn)換的PCIe地址。PCIe端點(diǎn)可以 調(diào)取用于隊(duì)列地址轉(zhuǎn)換的PCIe ATS請(qǐng)求。作為結(jié)果,根聯(lián)合體可以 使用ATPT來執(zhí)行地址轉(zhuǎn)換并將結(jié)果返回到PCIe端點(diǎn),其可以將已 轉(zhuǎn)換的地址在隊(duì)列上下文中高速緩存,用于從一個(gè)或者多個(gè)隊(duì)列獲 取項(xiàng)目使用,并將項(xiàng)目放置在一個(gè)或者多個(gè)隊(duì)列中。通過以此方式 預(yù)轉(zhuǎn)換隊(duì)列地址,通過將轉(zhuǎn)換操作的等待時(shí)間從每個(gè)操作的開始移 動(dòng)到任何操作開始之前來降低在開始I/O操作中所包含的等待時(shí)間, 由此提高端點(diǎn)DMA操作的整體性能。圖9示出了用于將用于PCIe端點(diǎn)隊(duì)列的地址轉(zhuǎn)換進(jìn)行高速緩 存的示意性實(shí)施方式的實(shí)現(xiàn)。如圖9中所示,設(shè)備驅(qū)動(dòng)器910生成 用于與PCIe端點(diǎn)990通信的隊(duì)列數(shù)據(jù)結(jié)構(gòu)920 - 930。在所述例子中, 隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930包括命令隊(duì)列920和響應(yīng)隊(duì)列930,其中命 令隊(duì)列920例如可以等效于圖4中的PCIe端點(diǎn)的命令隊(duì)列498,而 響應(yīng)隊(duì)列930例如可以等效于圖4中的響應(yīng)隊(duì)列422。應(yīng)該理解,可 以由設(shè)備驅(qū)動(dòng)器910建立的隊(duì)列的數(shù)目不限于兩個(gè),在不偏離本發(fā) 明的精神和范圍的情況下,可以使用較小或者較大數(shù)目的隊(duì)列。例如,隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930可以是小型組件系統(tǒng)接口 (SCSI)隊(duì)列,用于與耦合到PCIe端點(diǎn)990的SCSI I/O設(shè)備進(jìn)行通 信。這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)可以以包括鏈接列表隊(duì)列、循環(huán)緩沖隊(duì)列等 的任何方式配置。作為由設(shè)備驅(qū)動(dòng)器910在生成這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930中
執(zhí)行的操作的部分,設(shè)備驅(qū)動(dòng)器910調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)940以對(duì) 用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930的ATPT條目進(jìn)行編程,并向設(shè)備驅(qū)動(dòng) 器910返回用于隊(duì)列的未轉(zhuǎn)換的PCIe地址。如上文先前所述,在示 意性實(shí)施方式中,ATPT條目的編程可以包括將用于隊(duì)列數(shù)據(jù)結(jié)構(gòu) 的主機(jī)存儲(chǔ)器空間950釘住,利用用于從未轉(zhuǎn)換的PCIe地址轉(zhuǎn)換到 系統(tǒng)存儲(chǔ)器地址的轉(zhuǎn)換信息對(duì)根聯(lián)合體970的ATPT 960中的ATPT 條目進(jìn)行編程,以及在ATPT條目中設(shè)置一個(gè)高速緩存使能位,指 示對(duì)應(yīng)于ATPT條目的地址轉(zhuǎn)換可以在PCIe端點(diǎn)990的ATC 992中 高速緩存。在執(zhí)行如此操作之后,用于ATPT條目的未轉(zhuǎn)換的PCIe 地址返回設(shè)備驅(qū)動(dòng)器910。這些未轉(zhuǎn)換的PCIe地址可以標(biāo)識(shí)例如隊(duì) 列數(shù)據(jù)結(jié)構(gòu)920- 930的開始和結(jié)束地址。由設(shè)備驅(qū)動(dòng)器910向PCIe端點(diǎn)990提供未轉(zhuǎn)換的PCIe地址, 諸如通過將該地址寫入PCIe端點(diǎn)990的隊(duì)列配置空間994中來進(jìn)行 上述提供。隊(duì)列配置空間994可以例如是PCI配置空間、 一個(gè)或者 多個(gè)VPD字段、 一個(gè)或者多個(gè)MMIO字段等。響應(yīng)于接收這些用于 隊(duì)列數(shù)據(jù)結(jié)構(gòu)920 - 930的未轉(zhuǎn)換的PCIe地址,PCIe端點(diǎn)990可以 向根聯(lián)合體970發(fā)布針對(duì)隊(duì)列地址的PCIeATS請(qǐng)求。作為結(jié)果,根 聯(lián)合體970可以執(zhí)行用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)920 - 930的未轉(zhuǎn)換的PCIe 地址的地址轉(zhuǎn)換和訪問4企查,并向PCIe端點(diǎn)990返回已轉(zhuǎn)換的地址。 然后,PCIe端點(diǎn)990可以將這些地址轉(zhuǎn)換存儲(chǔ)在由PCIe端點(diǎn)990的 地址轉(zhuǎn)換高速緩存(ATC) 992提供的隊(duì)列上下文中。作為上文的結(jié)果,由于PCIe端點(diǎn)現(xiàn)在可以訪問用于與隊(duì)列數(shù) 據(jù)結(jié)構(gòu)920- 930相關(guān)聯(lián)的地址的轉(zhuǎn)換,所以PCIe端點(diǎn)現(xiàn)在可以執(zhí) 行DMA操作以將隊(duì)列條目提交到隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930、或者從 隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930獲取隊(duì)列條目,而不必經(jīng)歷根聯(lián)合體970 ATPT地址轉(zhuǎn)換。一旦PCIe端點(diǎn)990不再使用隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930,則可以 以上文先前所述的方式將對(duì)應(yīng)于用于這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)920- 930的 地址的ATPT和ATC條目無效。例如,當(dāng)PCIe端點(diǎn)將要從系統(tǒng)中 移除時(shí)、在關(guān)聯(lián)于設(shè)備驅(qū)動(dòng)器的功能(物理的或者虛擬的)從主機(jī) 系統(tǒng)中移除之后等情況下,可以執(zhí)行這種無效。如前所述,這種無效的處理可以包括設(shè)備驅(qū)動(dòng)器910調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)940以將 對(duì)應(yīng)于隊(duì)列數(shù)據(jù)結(jié)構(gòu)920 - 930的主機(jī)系統(tǒng)存儲(chǔ)器950解釘,釋放用 于這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)920 - 930的DMA地址,清除用于這些DMA 地址的ATPT條目,以及向PCIe端點(diǎn)990發(fā)布ATC條目無效請(qǐng)求。 當(dāng)由PCIe端點(diǎn)990完成ATC條目無效操作的時(shí)候,設(shè)備驅(qū)動(dòng)器服 務(wù)940將控制返回給設(shè)備驅(qū)動(dòng)器910,并且此時(shí)可以從系統(tǒng)移除PCIe 端點(diǎn)990。圖IO是根據(jù)一個(gè)示意性實(shí)施方式的流程圖,概括了用于將用 于主機(jī)系統(tǒng)和PCIe端點(diǎn)之間的通信的隊(duì)列數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化的示 范性操作。由于用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)地址的無效的操作與上文圖7中 概括的操作基本相同,因而在本描述中將僅僅通過流程圖具體示出 用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的初始化操作。如圖10中所示,作為主機(jī)系統(tǒng)上系統(tǒng)鏡像初始化的部分,由 主機(jī)系統(tǒng)開始用于PCIe端點(diǎn)的設(shè)備驅(qū)動(dòng)器的初始化(步驟IOIO)。 主機(jī)系統(tǒng)調(diào)用邏輯分區(qū)中的設(shè)備驅(qū)動(dòng)器,設(shè)備驅(qū)動(dòng)器接著調(diào)用I/O 虛擬化媒介中的設(shè)備驅(qū)動(dòng)器服務(wù)(步驟1020)。設(shè)備驅(qū)動(dòng)器服務(wù)釘 住用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的主機(jī)系統(tǒng)存儲(chǔ)器(步驟1030 )。設(shè)備驅(qū)動(dòng)器服務(wù)向隊(duì)列數(shù)據(jù)結(jié)構(gòu)分配未轉(zhuǎn)換的DMA地址 一 即 未轉(zhuǎn)換的PCIe存儲(chǔ)器地址(步驟1040)。設(shè)備驅(qū)動(dòng)器服務(wù)對(duì)用于未 轉(zhuǎn)換的DMA地址的ATPT條目編程,并且如果適當(dāng)?shù)脑?,在ATPT 條目中設(shè)置高速緩存使能位(步驟1050)。然后,設(shè)備驅(qū)動(dòng)器服務(wù) 向設(shè)備驅(qū)動(dòng)器返回未轉(zhuǎn)換的DMA地址,即用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn) 換的PCIe存儲(chǔ)器地址(步驟1060 )。然后,設(shè)備驅(qū)動(dòng)器向PCIe端點(diǎn)提供用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn) 換的DMA地址(步驟1070 ) 。 PCIe端點(diǎn)向根聯(lián)合體發(fā)布ATS地址 轉(zhuǎn)換請(qǐng)求(步驟1080)。根聯(lián)合體使用ATPT來執(zhí)行未轉(zhuǎn)換的DMA 地址的地址轉(zhuǎn)換,并向PCIe端點(diǎn)返回已轉(zhuǎn)換的地址(步驟1090)。
PCIe端點(diǎn)將已轉(zhuǎn)換的地址存儲(chǔ)在用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的隊(duì)列上下文中 (步驟1095 ),并且操作終止。此后,PCIe端點(diǎn)可以將隊(duì)列上下文 中已轉(zhuǎn)換的地址用于來往于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的DMA請(qǐng)求。由此,示意性實(shí)施方式提供了一種機(jī)制,通過該機(jī)制可以創(chuàng)建 一個(gè)或者多個(gè)隊(duì)列,用于在系統(tǒng)鏡像、系統(tǒng)鏡像上運(yùn)行的應(yīng)用等與 例如I/0適配器的PCIe端點(diǎn)之間進(jìn)行通信。提供示意性實(shí)施方式的 機(jī)制用于根聯(lián)合體中的ATPT條目的初始化和使用,以便將與一個(gè) 或者多個(gè)隊(duì)列相關(guān)聯(lián)的地址從未轉(zhuǎn)換的地址空間(例如,PCIe總線 地址空間)轉(zhuǎn)換到已轉(zhuǎn)換的地址空間(例如,系統(tǒng)總線地址空間)。 此外,示意性實(shí)施方式提出了用于將PCIe端點(diǎn)中的轉(zhuǎn)換存儲(chǔ)為地址 轉(zhuǎn)換高速緩存的 一部分的機(jī)制,從而使用與這些轉(zhuǎn)換匹配的未轉(zhuǎn)換 的地址的請(qǐng)求可以直接轉(zhuǎn)發(fā)到 一 個(gè)或者多個(gè)隊(duì)列,而不必經(jīng)歷根聯(lián) 合體中的形式轉(zhuǎn)換。如上所述,可以使用示意性實(shí)施方式的機(jī)制來在設(shè)備驅(qū)動(dòng)器中 建立隊(duì)列數(shù)據(jù)結(jié)構(gòu),并在數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體中建立它們對(duì)應(yīng) 的ATPT條目。 一旦通過上述機(jī)制初始化此隊(duì)列數(shù)據(jù)結(jié)構(gòu),則可以 使用這些數(shù)據(jù)結(jié)構(gòu)和ATPT條目來執(zhí)行PCIe端點(diǎn)和主機(jī)系統(tǒng)邏輯分 區(qū)的應(yīng)用實(shí)例、系統(tǒng)鏡像等之間的通信。可以由不同類型的PCIe端點(diǎn)來使用這些隊(duì)列數(shù)據(jù)結(jié)構(gòu)和相應(yīng) 的ATPT條目。例如,PCIe端點(diǎn)可以是連網(wǎng)的適配器,諸如以太網(wǎng) 適配器、結(jié)構(gòu)通道適配器、InfiniBandTM適配器等,用于通過一個(gè)或 者多個(gè)數(shù)據(jù)網(wǎng)絡(luò)來與其他設(shè)備進(jìn)行通信。通過這種連網(wǎng)適配器,正 在發(fā)送或者接收的數(shù)據(jù)被放置到與主機(jī)系統(tǒng)的設(shè)備驅(qū)動(dòng)器中的緩沖 器之中,并且根據(jù)數(shù)據(jù)是否正在接收或者發(fā)送而由主機(jī)系統(tǒng)的系統(tǒng) 鏡像或者網(wǎng)絡(luò)適配器來獲取。通過預(yù)轉(zhuǎn)換數(shù)據(jù)緩沖器地址,通過將 轉(zhuǎn)換操作的等待時(shí)間從每個(gè)操作開始移動(dòng)到任何操作開始之前,來 降低在開始1/0操作中所包含的等待時(shí)間,由此提高端點(diǎn)DMA操作 的整體性能。現(xiàn)在,將參考下文的圖11和圖12來描述使用關(guān)聯(lián)于連網(wǎng)適配 器的示意性實(shí)施方式的結(jié)構(gòu)來用于接收和傳送數(shù)據(jù)的處理。圖ll是 示出了一個(gè)示范性操作的圖示,其示出了用于使用隊(duì)列條目(被稱作"命令隊(duì)列條目"或者CQE)從PCIe端點(diǎn)將數(shù)據(jù)接收到主機(jī)系統(tǒng) 的緩沖器中的操作。首先,設(shè)備驅(qū)動(dòng)器1110調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù) 1140以初始化一個(gè)或者多個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu)(例如,命令隊(duì)列數(shù)據(jù)結(jié) 構(gòu)1120),用于向PCIe端點(diǎn)1190發(fā)送請(qǐng)求,該P(yáng)CIe端點(diǎn)可以是連 網(wǎng)適配器,諸如以太網(wǎng)適配器、結(jié)構(gòu)通道適配器、InfmiBandTM適配 器等。如前所述,此初始化可以包括釘住用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的主 機(jī)系統(tǒng)存儲(chǔ)器,分配DMA地址,編程ATPT條目并設(shè)置一個(gè)位,該 位表示ATPT條目是可高速緩存的,并向設(shè)備驅(qū)動(dòng)器1110返回未轉(zhuǎn) 換的PCIe存儲(chǔ)器地址。在初始化隊(duì)列數(shù)據(jù)結(jié)構(gòu)之后,設(shè)備驅(qū)動(dòng)器創(chuàng)建CQE 1122,其 包括指向緩沖器1124的指針(即,地址),其中PCIe端點(diǎn)使用該 緩沖器存儲(chǔ)來自進(jìn)入數(shù)據(jù)包的數(shù)據(jù)。用于緩沖器的地址是未轉(zhuǎn)換的 PCIe地址。然后,設(shè)備驅(qū)動(dòng)器lllO向PCIe端點(diǎn)1190中的門鈴存儲(chǔ)設(shè)備 1192 (例如,寄存器)寫入門鈴值。該門鈴值向PCIe端點(diǎn)1190指 示出CQE 1122是可用的。PCIe端點(diǎn)1190響應(yīng)于在門鈴存儲(chǔ)器設(shè)備 1192中門鈴值的設(shè)置,從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)1120中獲取CQE1122 且由此獲取緩沖器地址。在已經(jīng)獲取了用于緩沖器1124的未轉(zhuǎn)換的PCIe地址之后, PCIe端點(diǎn)1190針對(duì)緩沖器1124的未轉(zhuǎn)換的PCIe地址的地址轉(zhuǎn)換向 根聯(lián)合體1150發(fā)布請(qǐng)求。根聯(lián)合體1150使用ATPT1160來將未轉(zhuǎn) 換的PCIe地址轉(zhuǎn)換成為已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址,并將已轉(zhuǎn)換的系 統(tǒng)存儲(chǔ)器地址返回PCIe端點(diǎn)1190。 PCIe端點(diǎn)1190將已轉(zhuǎn)換的系統(tǒng) 存儲(chǔ)器地址存儲(chǔ)在PCIe端點(diǎn)1190中的CQE 1194的本地副本中。應(yīng)該理解,可以在從針對(duì)CQE 1194的外部網(wǎng)絡(luò)附加設(shè)備(未 示出)接收數(shù)據(jù)包之前,執(zhí)行轉(zhuǎn)換并將已轉(zhuǎn)換的地址(即,系統(tǒng)存 儲(chǔ)器或者實(shí)際存儲(chǔ)器地址)存儲(chǔ)在CQE 1194的本地副本中。由此, 在由外部網(wǎng)絡(luò)附加的設(shè)備發(fā)送數(shù)據(jù)包以及在PCIe端點(diǎn)1190中接收 數(shù)據(jù)包的時(shí)候,已轉(zhuǎn)換的PCIe地址可以存儲(chǔ)在CQE 1194的本地副 本中。一旦在PCIe端點(diǎn)1190中接收到結(jié)果數(shù)據(jù)包,則PCIe端點(diǎn)1190 發(fā)布DMA操作請(qǐng)求以使用本地存儲(chǔ)的高速緩存的已轉(zhuǎn)換的地址 (即,系統(tǒng)存儲(chǔ)器地址,其對(duì)應(yīng)于存儲(chǔ)在CQE 1194的本地副本中的 緩沖器1124的未轉(zhuǎn)換的PCIe地址)來將數(shù)據(jù)放置在緩沖器1124中。 通過在DMA操作請(qǐng)求的頭部中設(shè)置一個(gè)位,以指示在DMA操作請(qǐng) 求中所使用的地址是已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址,來執(zhí)行DMA操作請(qǐng) 求。作為結(jié)果,根聯(lián)合體1150傳遞DMA操作請(qǐng)求,而不使用ATPT 1160進(jìn)行地址轉(zhuǎn)換,從而數(shù)據(jù)被直接寫入到緩沖器1124之中。一旦待寫入緩沖器112 4的所有數(shù)據(jù)已被以此方式D M A到緩 沖器1124,則PCIe端點(diǎn)1190可以類似的方式將響應(yīng)隊(duì)列條目(RQE) 1132DMA到響應(yīng)隊(duì)列數(shù)據(jù)結(jié)構(gòu)1130。 一旦設(shè)備驅(qū)動(dòng)器1110接收并 處理RQE 1132,則設(shè)備驅(qū)動(dòng)器1110調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)1140來將 用于數(shù)據(jù)緩沖器1124的主機(jī)存儲(chǔ)器解釘。設(shè)備驅(qū)動(dòng)器服務(wù)1140釋 放用于數(shù)據(jù)緩沖器1124的DMA地址,并清除用于數(shù)據(jù)緩沖器1124 的ATPT條目。根聯(lián)合體1150向PCIe端點(diǎn)1190發(fā)布ATC條目無 效請(qǐng)求,用于清除CQE 1194的本地副本中的地址信息。PCIe端點(diǎn) 1190向根聯(lián)合體1150返回ATC條目無效完成響應(yīng),該響應(yīng)將完成 通知給設(shè)備驅(qū)動(dòng)器服務(wù)1140。然后,設(shè)備驅(qū)動(dòng)器服務(wù)1140將控制返 回給設(shè)備驅(qū)動(dòng)器1110,并且操作完成直到需要?jiǎng)?chuàng)建下一 CQE。還可 能針對(duì)多個(gè)操作重用數(shù)據(jù)緩沖器(例如,多個(gè)CQE),在此情況下, 設(shè)備驅(qū)動(dòng)器服務(wù)1140將不被調(diào)用(例如,使數(shù)據(jù)緩沖器地址無效并 將存儲(chǔ)器解釘),直到其他操作不再需要數(shù)據(jù)緩沖器為止。圖12是示出了用于使用CQE經(jīng)由PCIe端點(diǎn)傳送數(shù)據(jù)的操作 的示范性圖示。當(dāng)經(jīng)由PCIe端點(diǎn)1290從主機(jī)系統(tǒng)中的系統(tǒng)鏡^f象傳 送數(shù)據(jù)的時(shí)候,設(shè)備驅(qū)動(dòng)器1210調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)1240來釘住 用于緩沖器1224的主機(jī)存儲(chǔ)器,為緩沖器1224分配DMA地址,將 針對(duì)緩沖器1224的ATPT 1260中的ATPT條目編程,并在ATPT條 目中設(shè)置一個(gè)位,該位指示在這些條目中的地址轉(zhuǎn)換是可高速緩存 的。設(shè)備驅(qū)動(dòng)器服務(wù)1240向設(shè)備驅(qū)動(dòng)器1210返回用于緩沖器1224 的未轉(zhuǎn)換的PCIe地址。設(shè)備驅(qū)動(dòng)器創(chuàng)建CQE 1222,其包含指向緩沖器1224的指針(即,地址),PCIe端點(diǎn)1290將從這里經(jīng)由它的一個(gè)或者多個(gè)端口 傳送數(shù)據(jù)。用于緩沖器1224的地址是未轉(zhuǎn)換的PCIe地址。然后,設(shè)備驅(qū)動(dòng)器1210向PCIe端點(diǎn)1290中的門鈴存儲(chǔ)設(shè)備(例如,寄存器)寫入門鈴值。門鈴值向PCIe端點(diǎn)1290指示CQE 1222 是可用的。PCIe端點(diǎn)1290響應(yīng)于門鈴存儲(chǔ)設(shè)備1292中門鈴值的設(shè) 置,從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)1220獲取CQE 1222,并由此獲取緩沖器 地址。如果PCIe端點(diǎn)1290中的數(shù)據(jù)緩沖器是滿的,例如下游端口飽 和,則PCIe端點(diǎn)1290向根聯(lián)合體1250發(fā)布ATS轉(zhuǎn)換請(qǐng)求。當(dāng)PCIe 端點(diǎn)1290接收作為此ATS轉(zhuǎn)換請(qǐng)求結(jié)果的已轉(zhuǎn)換的地址時(shí),其將 已轉(zhuǎn)換的地址存儲(chǔ)在CQE的本地副本1294中。在PCIe端點(diǎn)1290將 來自數(shù)據(jù)緩沖器1224的傳送數(shù)據(jù)進(jìn)行DMA (例如,當(dāng)端口變得可 用于傳送數(shù)據(jù)的時(shí)候)并傳送該數(shù)據(jù)之后,PCIe端點(diǎn)1290接著將 RQE 1232 DMA到響應(yīng)隊(duì)列1230,以指示傳送纟喿作已經(jīng)完成,并且 如果請(qǐng)求,則還可以生成中斷。一旦設(shè)備驅(qū)動(dòng)器1210獲取RQE 1232,則設(shè)備驅(qū)動(dòng)器1210調(diào) 取設(shè)備驅(qū)動(dòng)器服務(wù)1240來將用于緩沖器1224的主機(jī)存儲(chǔ)器解釘, 釋放DMA地址,并清除用于緩沖器1224的未轉(zhuǎn)換的地址的ATPT 條目。4妄著4艮聯(lián)合體1250向PCIe端點(diǎn)1290發(fā)布ATC條目無效請(qǐng) 求并等待來自PCIe端點(diǎn)1290的完成消息。 一旦ATC條目無效操作 由PCIe端點(diǎn)1290執(zhí)行,則設(shè)備驅(qū)動(dòng)器服務(wù)1240將控制返回給設(shè)備 驅(qū)動(dòng)器1210。還可能將數(shù)據(jù)緩沖器重用于多個(gè)操作(例如,多個(gè) CQE),在此情況下,將不調(diào)用設(shè)備驅(qū)動(dòng)器服務(wù)1140 (例如使得數(shù) 據(jù)緩沖器地址無效和對(duì)存儲(chǔ)器解釘),直到其他操作不再需要數(shù)據(jù)
緩沖器為止。圖13A至圖13B描述了根據(jù)一個(gè)示意性實(shí)施方式的流程圖, 其概括了用于網(wǎng)絡(luò)適配器的接受操作的示范性操作。如圖13A至圖 13B中所示,操作開始于設(shè)備驅(qū)動(dòng)器調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)來初始化 一個(gè)或者多個(gè)數(shù)據(jù)緩沖器結(jié)構(gòu)(步驟1310)。更具體地,設(shè)備驅(qū)動(dòng) 器調(diào)用設(shè)備驅(qū)動(dòng)器服務(wù)來釘住與緩沖器相關(guān)聯(lián)的主機(jī)存儲(chǔ)器,并設(shè) 置用于緩沖器地址的ATPT。在初始化數(shù)據(jù)緩沖器結(jié)構(gòu)之后,設(shè)備驅(qū) 動(dòng)器創(chuàng)建包含指向緩沖器的指針(即,未轉(zhuǎn)換的PCIe存儲(chǔ)器地址) 的隊(duì)列條目,其中PCIe端點(diǎn)使用該緩沖器來存儲(chǔ)來自進(jìn)入數(shù)據(jù)包的 數(shù)據(jù)(步驟1315)。然后,設(shè)備驅(qū)動(dòng)器向PCIe端點(diǎn)中的門鈴存儲(chǔ)設(shè) 備寫入門鈴值(步驟1320)。PCIe端點(diǎn)響應(yīng)于門鈴存儲(chǔ)設(shè)備中門鈴值的設(shè)置,從隊(duì)列數(shù)據(jù) 結(jié)構(gòu)獲取隊(duì)列條目、以及由此獲取未轉(zhuǎn)換的PCIe緩沖器存儲(chǔ)器地址 (步驟1325 )。獲取用于緩沖器的未轉(zhuǎn)換的PCIe存儲(chǔ)器地址之后, PCIe端點(diǎn)向根聯(lián)合體發(fā)布關(guān)于用于緩沖器的未轉(zhuǎn)換的PCIe地址的 地址轉(zhuǎn)換的請(qǐng)求(步驟1330)。根聯(lián)合體使用ATPT來將未轉(zhuǎn)換的 PCIe地址轉(zhuǎn)換成為已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址,并且向PCIe端點(diǎn)返回 已轉(zhuǎn)換的系統(tǒng)存儲(chǔ)器地址(步驟1335 ) 。 PCIe端點(diǎn)將已轉(zhuǎn)換的系統(tǒng) 存儲(chǔ)器地址存儲(chǔ)在PCIe端點(diǎn)中的隊(duì)列條目的本地副本中(步驟 1340)。PCIe端點(diǎn)確定是否接收到數(shù)據(jù)包(步驟1345 )。如果沒有, 則操作通過返回步驟1345而等待接收數(shù)據(jù)包。如果在PCIe端點(diǎn)中 接收了數(shù)據(jù)包,則PCIe端點(diǎn)發(fā)布DMA操作請(qǐng)求,其中位于DMA 操作請(qǐng)求的頭部中的轉(zhuǎn)換位被設(shè)置,從而使用本地存儲(chǔ)的高速緩存 的系統(tǒng)存儲(chǔ)器地址來將數(shù)據(jù)放置在主機(jī)系統(tǒng)的緩沖器中(步驟 1350 )。根聯(lián)合體傳遞DMA操作請(qǐng)求,而無需使用ATPT的地址轉(zhuǎn) 換,從而數(shù)據(jù)直接寫入緩沖器之中(步驟1355 )。針對(duì)將要寫入緩 沖器的所有數(shù)據(jù)是否已經(jīng)DMA到緩沖器來做出確定(步驟1360 )。 如果沒有,則操作返回步驟1345。 一旦待寫入緩沖器的所有數(shù)據(jù)已被DMA到緩沖器,則PCIe 端點(diǎn)將響應(yīng)隊(duì)列條目DMA到響應(yīng)隊(duì)列數(shù)據(jù)結(jié)構(gòu)(步驟1365 )。響 應(yīng)于接收RQE,設(shè)備驅(qū)動(dòng)器調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)來將用于數(shù)據(jù)緩沖 器結(jié)構(gòu)的主機(jī)存儲(chǔ)器解釘(步驟1370 )。設(shè)備驅(qū)動(dòng)器服務(wù)將用于隊(duì) 列數(shù)據(jù)結(jié)構(gòu)的DMA地址(即未轉(zhuǎn)換的PCIe存儲(chǔ)器地址)釋放(步 驟1375 ),并清除用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的ATPT條目(步驟1380 )。 根聯(lián)合體向PCIe端點(diǎn)發(fā)布ATC條目無效請(qǐng)求,用于清除隊(duì)列條目 的本地副本中的地址信息(步驟1385 )。然后,PCIe端點(diǎn)使得隊(duì)列 條目的本地副本中的地址信息無效,并向根聯(lián)合體返回ATC條目無 效完成響應(yīng)(步驟1390),其將完成通知給設(shè)備驅(qū)動(dòng)器服務(wù)。然后, 設(shè)備驅(qū)動(dòng)器服務(wù)將關(guān)聯(lián)于數(shù)據(jù)緩沖器的主機(jī)存儲(chǔ)器解釘(步驟 1392 )。然后,設(shè)備驅(qū)動(dòng)器服務(wù)將控制返回給設(shè)備驅(qū)動(dòng)器(步驟1395 ) 并且操作終止。圖14A至圖14B描繪了根據(jù)一個(gè)示意性實(shí)施方式的流程圖, 其概括了用于網(wǎng)絡(luò)適配器傳送操作的一個(gè)示范性操作。如圖14A至 圖14B所示,操作開始于設(shè)備驅(qū)動(dòng)器調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)(步驟 1410),設(shè)備驅(qū)動(dòng)器服務(wù)接著將用于緩沖器的主機(jī)存儲(chǔ)器釘住,分 配用于緩沖器的DMA地址,將用于緩沖器的ATPT中的ATPT條目 編程,并在ATPT條目中設(shè)置一個(gè)位來指示在這些條目中的地址轉(zhuǎn) 換是可高速緩存的(步驟1415)。然后,設(shè)備驅(qū)動(dòng)器服務(wù)向設(shè)備驅(qū) 動(dòng)器返回用于緩沖器的一個(gè)或者多個(gè)未轉(zhuǎn)換的PCIe存儲(chǔ)器地址,即 DMA地址(步驟1420)。設(shè)備驅(qū)動(dòng)器創(chuàng)建包含指向緩沖器的指針(即,未轉(zhuǎn)換的PCIe 存儲(chǔ)器地址)的隊(duì)列條目,PCIe端點(diǎn)將從該緩沖器經(jīng)由它的一個(gè)或 者多個(gè)端口傳送數(shù)據(jù)(步驟1425 )。然后,設(shè)備驅(qū)動(dòng)器向PCIe端點(diǎn) 中的門鈴存儲(chǔ)設(shè)備寫入門鈴值(步驟1430) 。 PCIe端點(diǎn)響應(yīng)于在門 鈴存儲(chǔ)設(shè)備中的門鈴值的設(shè)置,從隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取隊(duì)列條目并由 此獲取緩沖器的未轉(zhuǎn)換的PCIe存儲(chǔ)器地址(步驟1435 )。針對(duì)PCIe端點(diǎn)中的數(shù)據(jù)緩沖器是否是滿的來做出確定(步驟 1440)。如果數(shù)據(jù)緩沖器未滿,則數(shù)據(jù)經(jīng)由DMA傳送并被放置到 PCIe端點(diǎn)的數(shù)據(jù)緩沖器中用于傳送(步驟1460),且PCIe端點(diǎn)相 應(yīng)地傳送數(shù)據(jù)(步驟1465 )。如果數(shù)據(jù)緩沖器是滿的,則PCIe端點(diǎn)向根聯(lián)合體發(fā)布ATS轉(zhuǎn) 換請(qǐng)求(步驟1445 )。當(dāng)PCIe端點(diǎn)接收作為ATS轉(zhuǎn)換請(qǐng)求的結(jié)果 的已轉(zhuǎn)換的地址時(shí)(步驟1450) , PCIe端點(diǎn)將已轉(zhuǎn)換的地址存儲(chǔ)在 隊(duì)列條目的本地副本中(步驟1455 )。端點(diǎn)等待可用的緩沖器(步 驟1457 ),數(shù)據(jù)經(jīng)由DMA傳輸并被放置到PCIe端點(diǎn)的數(shù)據(jù)緩沖器 中用于傳送(步驟1460),然后,PCIe端點(diǎn)相應(yīng)地傳送該數(shù)據(jù)(步 驟1465 )。然后,PCIe端點(diǎn)將響應(yīng)隊(duì)列條目(RQE) DMA到響應(yīng)隊(duì)列以 指示傳送操作已經(jīng)完成,并且如果請(qǐng)求,則還可以生成中斷(步驟 1470)。一旦設(shè)備驅(qū)動(dòng)器獲取RQE,則設(shè)備驅(qū)動(dòng)器調(diào)取設(shè)備驅(qū)動(dòng)器服 務(wù)以將用于緩沖器的主機(jī)存儲(chǔ)器解釘,釋放DMA地址,并清除用于 緩沖器的未轉(zhuǎn)換的地址的ATPT條目(步驟1475 )。然后,根聯(lián)合 體向PCIe端點(diǎn)發(fā)布ATC條目無效請(qǐng)求(步驟1480),并等待來自 PCIe端點(diǎn)的完成消息(步驟1485 )。 一旦ATC條目無效操作由PCIe 端點(diǎn)執(zhí)行,則設(shè)備驅(qū)動(dòng)器服務(wù)將與數(shù)據(jù)緩沖器相關(guān)聯(lián)的主機(jī)存儲(chǔ)器 解釘(步驟1490),且然后將控制返回給設(shè)備驅(qū)動(dòng)器(步驟1495 ), 并且操作終止。由此,示意性實(shí)施方式提供了一種機(jī)制,通過該機(jī)制,可以生 成命令隊(duì)列和命令隊(duì)列條目,用于經(jīng)由網(wǎng)絡(luò)適配器PCIe端點(diǎn)將數(shù)據(jù) 接收和/或傳送到主機(jī)系統(tǒng)中的設(shè)備驅(qū)動(dòng)器的緩沖器之中。利用在 PCIe端點(diǎn)中可高速緩存的與緩沖器相對(duì)應(yīng)的地址的轉(zhuǎn)換(以便直接 訪問緩沖器,而不必執(zhí)行在根聯(lián)合體中的地址轉(zhuǎn)換),可以建立用 于緩沖器的ATPT條目。除了與網(wǎng)絡(luò)適配器一起使用以外,示意性實(shí)施方式的機(jī)制還可 以由其他類型的PCIe端點(diǎn)所使用,用于與本地可用設(shè)備進(jìn)行通信。 例如,PCIe端點(diǎn)可以是用于與直接附加到PCIe端點(diǎn)的存儲(chǔ)裝置通信 的小型組件系統(tǒng)接口 ( SCSI)適配器。通過提供一種用于將用于SCSI 讀/寫的地址信息高速緩存在SCSI適配器中,示意性實(shí)施方式的枳j圖15是根據(jù)一個(gè)示意性實(shí)施方式的示出了 SCSI讀取操作的示 范性圖示。如圖15中所示,當(dāng)設(shè)備驅(qū)動(dòng)器1510從諸如系統(tǒng)鏡像或 者系統(tǒng)鏡像中運(yùn)行的應(yīng)用接收存儲(chǔ)事務(wù)請(qǐng)求的時(shí)候,設(shè)備驅(qū)動(dòng)器 1510調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)1540來將用于設(shè)備驅(qū)動(dòng)器緩沖器1524的 主機(jī)存儲(chǔ)器釘住,對(duì)設(shè)備驅(qū)動(dòng)器緩沖器1524分配DMA地址,對(duì) ATPT條目編程,并將表示這些ATPT條目是可高速緩存的位使能, 以及將用于緩沖器1524的未轉(zhuǎn)換的PCIe地址返回給設(shè)備驅(qū)動(dòng)器 1510。設(shè)備驅(qū)動(dòng)器1510在命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)1520中創(chuàng)建命令隊(duì)列條 目(CQE) 1522。 CQE 1522包含與命令相關(guān)聯(lián)的SCSI命令和指向 緩沖器(例如,緩沖器1524)的指針,即未轉(zhuǎn)換的地址。然后,設(shè) 備驅(qū)動(dòng)器1510將門鈴值寫入門鈴存儲(chǔ)器設(shè)備1592之中,該門鈴值 向PCIe端點(diǎn)1590指示存在進(jìn)入的請(qǐng)求。響應(yīng)于在門鈴存儲(chǔ)設(shè)備1592中設(shè)置的門鈴值,PCIe端點(diǎn)(其 可以再次為SCSI適配器)從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)1520獲取CQE 1522, 并確定哪種類型的命令被請(qǐng)求。例如,可以根據(jù)在CQE 1522的頭部 中提供的值來做出確定。如果CQE 1522包含的SCSI命令是用于從 盤讀取的讀取命令,則PCIe端點(diǎn)1590發(fā)布盤讀取操作,其后是ATS 地址轉(zhuǎn)換請(qǐng)求,其請(qǐng)求主機(jī)系統(tǒng)上的根聯(lián)合體1550執(zhí)行對(duì)于CQE 1522中的指針(即,未轉(zhuǎn)換的地址)的地址轉(zhuǎn)換。當(dāng)PCIe端點(diǎn)1590 接收地址轉(zhuǎn)換的結(jié)果的時(shí)候,將結(jié)果存儲(chǔ)在PCIe端點(diǎn)1590中的CQE 1594的本地副本中。由此,可以與正在執(zhí)行的讀取操作基本同時(shí)4丸 行CQE 1522中指針的地址轉(zhuǎn)換。由于未轉(zhuǎn)換的地址用于訪問耦合到 PCIe端點(diǎn)1590的SCSI設(shè)備,所以不需要轉(zhuǎn)換作為讀取操作的一部
一旦SCSI設(shè)備向PCIe端點(diǎn)1590返回?cái)?shù)據(jù),則PCIe端點(diǎn)1590 發(fā)布DMA操作以使用在CQE 1594中本地存儲(chǔ)的高速緩存的已轉(zhuǎn)換 的地址(即,用于緩沖器1524的系統(tǒng)總線地址)來將數(shù)據(jù)返回主機(jī) 系統(tǒng)。執(zhí)行DMA,其中頭部位被設(shè)置,指示在DMA中正在使用的 地址是已轉(zhuǎn)換的地址。作為結(jié)果,根聯(lián)合體1550不使用ATPT 1560 執(zhí)行轉(zhuǎn)換,而DMA傳遞至緩沖器1524。PCIe端點(diǎn)1590還將響應(yīng)隊(duì)列條目(RQE) 1532 DMA到響 應(yīng)隊(duì)列數(shù)據(jù)結(jié)構(gòu)1530,以指示從盤讀取的操作已經(jīng)完成。如果^皮請(qǐng) 求,則PCIe端點(diǎn)1590還可以生成中斷。一旦設(shè)備驅(qū)動(dòng)器1510從盤操作的讀取獲取RQE 1532,則i殳備 驅(qū)動(dòng)器1510調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)1540來將用于數(shù)據(jù)緩沖器1524的 主機(jī)存儲(chǔ)器解釘。設(shè)備驅(qū)動(dòng)器服務(wù)1540進(jìn)一步釋放用于數(shù)據(jù)緩沖器 1524的DMA地址,并清除用于數(shù)據(jù)緩沖器1524的ATPT條目。才艮 聯(lián)合體1550向PCIe端點(diǎn)1590發(fā)布ATC條目無效請(qǐng)求,因而使得 PCIe端點(diǎn)1590將對(duì)應(yīng)于清除的ATPT條目的ATC條目無效,即, CQE 1594的本地副本。當(dāng)ATC無效操作完成的時(shí)候,設(shè)備驅(qū)動(dòng)器 服務(wù)1540將控制返回給設(shè)備驅(qū)動(dòng)器1510。圖16A至圖16B示出了根據(jù)一個(gè)示意性實(shí)施方式的流程圖, 其概括了用于從SCSI設(shè)備讀取數(shù)據(jù)的示范性操作。如圖16A中所示, 操作開始于設(shè)備驅(qū)動(dòng)器接收存儲(chǔ)事務(wù)請(qǐng)求(步驟1602)。設(shè)備驅(qū)動(dòng) 器調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù)以將用于設(shè)備驅(qū)動(dòng)器緩沖器的主機(jī)存儲(chǔ)器釘 住(步驟1604),向設(shè)備驅(qū)動(dòng)器緩沖器分配DMA地址(步驟1606), 對(duì)ATPT條目編程并將表示這些ATPT條目可以高速緩存的位使能(步驟1608 ),并將用于緩沖器的未轉(zhuǎn)換的PCIe存儲(chǔ)器地址(即, DMA地址)返回給設(shè)備驅(qū)動(dòng)器(步驟1610)。設(shè)備驅(qū)動(dòng)器在命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建命令隊(duì)列條目(CQE)(步驟1612),該CQE包含SCSI命令和指向與該命令相關(guān)聯(lián)的緩 沖器的指針。然后,設(shè)備驅(qū)動(dòng)器將門鈴值寫入門鈴存儲(chǔ)器設(shè)備之中(步驟1614)。響應(yīng)于門鈴值在門鈴存儲(chǔ)設(shè)備中被設(shè)置,PCIe端點(diǎn)
從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取CQE (步驟1616),并確定CQE中的命 令是否是讀取命令(步驟1620)。如果CQE包含SCSI命令,其是用于從盤讀取的讀取命令,則 PCIe端點(diǎn)發(fā)布盤讀取操作,該盤讀取操作跟隨有ATS地址轉(zhuǎn)換請(qǐng)求, 其請(qǐng)求主機(jī)系統(tǒng)上的根聯(lián)合體1550執(zhí)行關(guān)于CQE中的指針的地址 轉(zhuǎn)換(步驟1622)。當(dāng)PCIe端點(diǎn)接收地址轉(zhuǎn)換的結(jié)果的時(shí)候,將結(jié) 果存儲(chǔ)在PCIe端點(diǎn)中的CQE的本地副本中(步驟1624)。一旦SCSI設(shè)備向PCIe端點(diǎn)返回?cái)?shù)據(jù),則PCIe端點(diǎn)發(fā)布DMA 操作以使用在CQE中本地存儲(chǔ)的、高速緩存的、已轉(zhuǎn)換的地址來將 數(shù)據(jù)返回主機(jī)系統(tǒng)(步驟1626)。由頭部位來執(zhí)行DMA,其中該頭 部位設(shè)置成指示在DMA中正在使用的地址是已轉(zhuǎn)換的地址(步驟 1628 )。作為結(jié)果,根聯(lián)合體不使用ATPT執(zhí)行轉(zhuǎn)換,并且DMAS皮 傳遞至緩沖器。PCIe端點(diǎn)還將響應(yīng)隊(duì)列條目(RQE) DMA到響應(yīng)隊(duì)列凄t才居 結(jié)構(gòu),以指示已經(jīng)完成從盤讀取的操作(步驟1630)。如果請(qǐng)求, 則PCIe端點(diǎn)還可以生成中斷。一旦設(shè)備驅(qū)動(dòng)器從盤操作的讀取獲取RQE,則設(shè)備驅(qū)動(dòng)器調(diào) 取設(shè)備驅(qū)動(dòng)器服務(wù)來將存儲(chǔ)器解釘,釋放DMA地址,并清除用于數(shù) 據(jù)緩沖器的ATPT條目(步驟1632)。設(shè)備驅(qū)動(dòng)器服務(wù)進(jìn)一步釋放 用于命令隊(duì)列的DMA地址,并清除用于命令隊(duì)列的ATPT條目(步 驟1634 )。根聯(lián)合體向PCIe端點(diǎn)發(fā)布ATC條目無效請(qǐng)求,因而使 得PCIe端點(diǎn)將對(duì)應(yīng)于清除的ATPT條目的ATC條目無效(步驟 1636 )。當(dāng)ATC無效操作完成的時(shí)候,設(shè)備驅(qū)動(dòng)器服務(wù)將用于緩沖 器的主機(jī)存儲(chǔ)器解釘(步驟1638 ),且設(shè)備驅(qū)動(dòng)器服務(wù)將控制返回 給設(shè)備驅(qū)動(dòng)器(步驟1640)。返回步驟1620,如圖16B中所示,如果命令不是讀取命令, 即,該命令是SCSI寫入命令,則端點(diǎn)根據(jù)CQE中的信息向SCSI 設(shè)備發(fā)布盤查找操作,之后是發(fā)送到根聯(lián)合體的、針對(duì)CQE中指針 的地址轉(zhuǎn)換請(qǐng)求(步驟1650)。通常,接收轉(zhuǎn)換請(qǐng)求花費(fèi)的時(shí)間少
于物理SCSI設(shè)備用以執(zhí)行查找操作花費(fèi)的時(shí)間,由此在整個(gè)操作的等待時(shí)間中隱含了地址轉(zhuǎn)換時(shí)間。當(dāng)端點(diǎn)從根聯(lián)合體接收已轉(zhuǎn)換的地址的時(shí)候,端點(diǎn)將這些已轉(zhuǎn)換的地址存儲(chǔ)在CQE的本地副本中(步驟1652 )。然后,端點(diǎn)i殳置 DMA頭部以指示在DMA請(qǐng)求中正在使用的是已轉(zhuǎn)換的地址,并使 用在CQE的本地副本中的本地高速緩存的已轉(zhuǎn)換的地址執(zhí)行DMA 操作,來獲取將從系統(tǒng)存儲(chǔ)器中的數(shù)據(jù)緩沖器寫入的數(shù)據(jù)(步驟 1654 )。然后,端點(diǎn)等待SCSI設(shè)備指示先前的盤查找操作已經(jīng)完成 (步驟1656 )。響應(yīng)于來自SCSI設(shè)備的指示盤查找操作已經(jīng)完成的 消息,端點(diǎn)將先前DMA的數(shù)據(jù)傳送到SCSI設(shè)備(步驟1658 )。 然后,操作返回上述步驟1630。由此,示意性實(shí)施方式提供用于以在設(shè)備驅(qū)動(dòng)器和設(shè)備驅(qū)動(dòng)器 服務(wù)上分布通信責(zé)任的方式與不同類型PCIe端點(diǎn)(包括網(wǎng)絡(luò)適配器、 SCSI適配器、InfiniBandTM適配器等)進(jìn)行通信的機(jī)制。示意性實(shí)施 方式促進(jìn)根據(jù)所使用PCIe端點(diǎn)的類型以不同方式在各種類型的 PCIe端點(diǎn)中將已轉(zhuǎn)換的地址進(jìn)行高速緩存的使用。對(duì)這些已轉(zhuǎn)換的 地址高速緩存允許PCIe端點(diǎn)直接訪問主機(jī)系統(tǒng)的隊(duì)列、緩沖器以及 系統(tǒng)存儲(chǔ)器,而不必在主機(jī)系統(tǒng)的根聯(lián)合體中經(jīng)歷地址轉(zhuǎn)換操作。 應(yīng)該理解,示意性實(shí)施方式可以采取完全硬件實(shí)施方式、完全個(gè)示范性實(shí)施方式中,以軟件實(shí)現(xiàn)示意性實(shí)施方式的機(jī)制,軟件包 括但不限于固件、駐留軟件、微代碼等。此外,本發(fā)明可以采用計(jì)算機(jī)程序產(chǎn)品的形式,可以從提供程 序代碼的計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)來訪問該計(jì)算機(jī)程序產(chǎn)品, 其中該程序代碼由計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)使用或結(jié)合它們來使 用。為了說明目的,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是任何能夠 包含、存儲(chǔ)、通信、傳播或傳送用于由指令執(zhí)行系統(tǒng)、裝置或設(shè)備 使用或結(jié)合指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用的程序的有形裝置。該介質(zhì)可以是電子、》茲性、光學(xué)、電磁、紅外或半導(dǎo)體系統(tǒng)(或
裝置或設(shè)備)或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的例子包括半導(dǎo)體或固態(tài)存儲(chǔ)器、磁帶、可移動(dòng)計(jì)算機(jī)盤、隨機(jī)存取存儲(chǔ)器(RAM)、只 讀存儲(chǔ)器(ROM)、剛性磁盤和光盤。光盤的當(dāng)前例子包括致密盤-只讀存儲(chǔ)器(CD-ROM)、致密盤-讀/寫存儲(chǔ)器(CD-R/W)和DVD。 適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少 一個(gè) 通過系統(tǒng)總線直接或間接耦合至存儲(chǔ)器元件的處理器。該存儲(chǔ)器元存儲(chǔ)器以及高速緩沖存儲(chǔ)器,其提供至少某些程序代碼的臨時(shí)存儲(chǔ), 以減少在執(zhí)行期間必須從大容量存儲(chǔ)器中獲取代碼的次數(shù)。輸入/輸出或1/0設(shè)備(包括但不限于鍵盤、顯示器、點(diǎn)擊設(shè)備 等)可以直接地或通過中間1/0控制器來耦合至系統(tǒng)。網(wǎng)絡(luò)適配器也 可以耦合至該系統(tǒng),以使得數(shù)據(jù)處理系統(tǒng)能夠通過介入的專用或公 共網(wǎng)絡(luò)而耦合至其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備。調(diào)制 解調(diào)器、電纜調(diào)制解調(diào)器以及以太網(wǎng)卡僅是當(dāng)前可用類型的網(wǎng)絡(luò)適 配器中的一些。為了示意和描述的目的已經(jīng)呈現(xiàn)了本發(fā)明的描述,而該描述并 不旨在窮盡或?qū)⒈景l(fā)明限制在所公開的形式。對(duì)本領(lǐng)域的普通技術(shù)人員而言,許多修改和變更都是顯而易見的。因此,選擇并描述實(shí)領(lǐng)域普通技術(shù)人員理解,具有各種變化的各種實(shí)施方式的本發(fā)明適 用于預(yù)期的特殊用途。
權(quán)利要求
1.一種用于在數(shù)據(jù)處理系統(tǒng)中的系統(tǒng)鏡像和本地附加的外部存儲(chǔ)設(shè)備之間執(zhí)行操作的方法,包括接收來自所述系統(tǒng)鏡像的存儲(chǔ)事務(wù)請(qǐng)求;在命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建命令隊(duì)列元素(CQE),所述CQE指定緩沖器數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn)換的地址,并且包含數(shù)據(jù)傳送操作命令;由用于與本地附加的外部存儲(chǔ)器設(shè)備進(jìn)行通信的輸入/輸出(I/O)適配器從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取CQE;向耦合到所述I/O適配器的所述本地附加的外部存儲(chǔ)器設(shè)備發(fā)送數(shù)據(jù)傳送操作命令;在向所述本地附加的外部存儲(chǔ)設(shè)備發(fā)送所述數(shù)據(jù)傳送操作命令基本上同一時(shí)間,由所述I/O適配器向所述數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體發(fā)布針對(duì)與所述緩沖器數(shù)據(jù)結(jié)構(gòu)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址相對(duì)應(yīng)的一個(gè)或者多個(gè)已轉(zhuǎn)換的地址的請(qǐng)求;以及由所述I/O適配器在所述I/O適配器的本地地址轉(zhuǎn)換高速緩存中存儲(chǔ)與所述緩沖器數(shù)據(jù)結(jié)構(gòu)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址相對(duì)應(yīng)的一個(gè)或者多個(gè)已轉(zhuǎn)換的地址。
2. 根據(jù)權(quán)利要求1所述的方法,其中所述數(shù)據(jù)傳送操作是對(duì)所 述本地附加的外部存儲(chǔ)設(shè)備的寫入、或者從所述本地附加的外部存 儲(chǔ)設(shè)備的讀取之一。
3. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括由所述I/O適配器使用在所述本地地址轉(zhuǎn)換高速緩存中存儲(chǔ)的 一個(gè)或者多個(gè)已轉(zhuǎn)換的地址來執(zhí)行在所述I/O適配器和所述緩沖器 數(shù)據(jù)結(jié)構(gòu)之間的直接存儲(chǔ)器訪問(DMA)事務(wù),以將從所述本地附 加的外部存儲(chǔ)設(shè)備讀取的數(shù)據(jù)放置到所述緩沖器數(shù)據(jù)結(jié)構(gòu)之中。
4. 根據(jù)權(quán)利要求3所述的方法,其中所述DMA事務(wù)具有一個(gè) 轉(zhuǎn)換位,其被設(shè)置指示由DMA事務(wù)所使用的地址是已轉(zhuǎn)換的地址, 并且其中所述根聯(lián)合體響應(yīng)于檢測到所述轉(zhuǎn)換位:帔設(shè)置而將DMA操作直接傳遞到所述緩沖器數(shù)據(jù)結(jié)構(gòu),而不執(zhí)行地址轉(zhuǎn)換操作。
5. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括將與所述數(shù)據(jù)傳送操作命令相關(guān)聯(lián)的所述地址轉(zhuǎn)換存儲(chǔ)在所述 1/0適配器中的CQE的本地副本中。
6. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括 響應(yīng)于創(chuàng)建所述CQE,向與所述I/O適配器相關(guān)聯(lián)的門鈴存儲(chǔ)設(shè)備中寫入一個(gè)值,指示所述CQE可用于由所述I/O適配器進(jìn)行的處所述命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取所述CQE。
7. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括 由所述數(shù)據(jù)處理系統(tǒng)的設(shè)備驅(qū)動(dòng)器來調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù),用于針對(duì)所述命令隊(duì)列數(shù)據(jù)結(jié)構(gòu),將與所述根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換 數(shù)據(jù)結(jié)構(gòu)中的一個(gè)或者多個(gè)地址轉(zhuǎn)換條目進(jìn)行初始化;以及向所述I/0適配器提供與所述命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的一個(gè) 或者多個(gè)未轉(zhuǎn)換的地址,其中所述一個(gè)或者多個(gè)地址轉(zhuǎn)換條目指定 從與所述命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的 一 個(gè)或者多個(gè)未轉(zhuǎn)換的地址到 一個(gè)或者多個(gè)已轉(zhuǎn)換的地址的轉(zhuǎn)換。
8. 根據(jù)權(quán)利要求1所述的方法,其中所述I/0適配器是小型組 件系統(tǒng)接口 (SCSI)適配器、串行附加SCSI (SAS)適配器、串行 高級(jí)技術(shù)附件(SATA)或者高級(jí)技術(shù)附件(ATA)適配器之一。
9. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括 讀取在所述CQE的頭部中提供的值;以及讀取數(shù)據(jù)傳送操作命令,其中響應(yīng)于確定所述CQE包含讀取數(shù)據(jù)傳 送操作命令,向所述根聯(lián)合體發(fā)布針對(duì)一個(gè)或者多個(gè)已轉(zhuǎn)換的地址 的請(qǐng)求,并存儲(chǔ)所述一個(gè)或者多個(gè)已轉(zhuǎn)換的地址。
10. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括響應(yīng)于所述CQE的數(shù)據(jù)傳送操作命令的完成,從所述I/O適配 器向與所述系統(tǒng)鏡像相關(guān)聯(lián)的響應(yīng)隊(duì)列數(shù)據(jù)結(jié)構(gòu)發(fā)送響應(yīng)隊(duì)列條目 (RQE)。
11. 根據(jù)權(quán)利要求IO所述的方法,進(jìn)一步包括 由設(shè)備驅(qū)動(dòng)器從所述響應(yīng)隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取RQE;以及由所述設(shè)備驅(qū)動(dòng)器調(diào)取設(shè)備驅(qū)動(dòng)器服務(wù),以將與所述緩沖器數(shù)據(jù) 結(jié)構(gòu)相關(guān)聯(lián)的主機(jī)存儲(chǔ)器解釘,釋放與所述緩沖器數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián) 的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址,并且清除與所述緩沖器數(shù)據(jù)結(jié)構(gòu)相 對(duì)應(yīng)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn)換條目。
12. —種裝置,包括 處理器;以及耦合到所述處理器的輸入/輸出(1/0)適配器,1/0適配器配置 用于與本地附加的外部存儲(chǔ)設(shè)備進(jìn)行通信,其中所述處理器接收來自所述系統(tǒng)鏡像的存儲(chǔ)事務(wù)請(qǐng)求;以及在命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建命令隊(duì)列元素(CQE),所述CQE 指定緩沖器數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn)換的地址,并且包含數(shù)據(jù)傳送操作命令, 并且其中所述I/0適配器從所述命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)獲取所述CQE;向耦合到所述I/O適配器的所述本地附加的外部存儲(chǔ)設(shè)備發(fā)送 數(shù)據(jù)傳送操作命令;在向所述本地附加的外部存儲(chǔ)I/O設(shè)備發(fā)送所述數(shù)據(jù)傳送操作 命令基本上同 一時(shí)間,向所述數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體發(fā)布針對(duì)與 所述緩沖器數(shù)據(jù)結(jié)構(gòu)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址相對(duì)應(yīng)的一個(gè)或 者多個(gè)已轉(zhuǎn)換的地址的請(qǐng)求;以及在所述I/O適配器的本地地址轉(zhuǎn)換高速緩存中存儲(chǔ)與所述緩沖 器數(shù)據(jù)結(jié)構(gòu)的一個(gè)或者多個(gè)未轉(zhuǎn)換的地址相對(duì)應(yīng)的一個(gè)或者多個(gè)已 轉(zhuǎn)換的地址。
全文摘要
提供了用于與輸入/輸出(I/O)適配器進(jìn)行通信的裝置和方法,該I/O適配器配置用于使用高速緩存的地址轉(zhuǎn)換來與本地附加的I/O設(shè)備進(jìn)行通信。利用該裝置和方法,響應(yīng)于接收存儲(chǔ)事務(wù)的請(qǐng)求,在命令隊(duì)列中創(chuàng)建指示未轉(zhuǎn)換的緩沖器地址的隊(duì)列元素。隊(duì)列元素可以由I/O適配器所獲取,并且可以確定隊(duì)列元素是否包含讀取操作命令。如果包含,則可以在向本地附加的外部存儲(chǔ)I/O設(shè)備發(fā)送讀取操作命令基本上同一時(shí)間,從I/O適配器向根聯(lián)合體發(fā)送轉(zhuǎn)換請(qǐng)求。在接收從外部I/O設(shè)備讀取的數(shù)據(jù)之前,可以返回與隊(duì)列元素的未轉(zhuǎn)換的地址相對(duì)應(yīng)的已轉(zhuǎn)換的地址并將其存儲(chǔ)在I/O適配器中。
文檔編號(hào)G06F12/10GK101165663SQ20071015332
公開日2008年4月23日 申請(qǐng)日期2007年9月14日 優(yōu)先權(quán)日2006年10月17日
發(fā)明者C·A·薩爾茨伯格, D·F·莫特爾, R·J·雷西奧, S·M·瑟伯爾 申請(qǐng)人:國際商業(yè)機(jī)器公司