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