專利名稱:管理訪問數(shù)據(jù)處理系統(tǒng)的存儲器的地址轉(zhuǎn)換的方法和裝置的制作方法
管理訪問數(shù)據(jù)處理系統(tǒng)的存儲器的地址轉(zhuǎn)換的方法和裝置 技術(shù)領(lǐng)域本申請通常涉及改進(jìn)的數(shù)據(jù)處理系統(tǒng)和方法。更具體地,本申 請涉及在設(shè)備驅(qū)動器和設(shè)備驅(qū)動器服務(wù)之間劃分端點(diǎn)地址轉(zhuǎn)換高速緩存管理責(zé)任的裝置和方法。
背景技術(shù):
在具有當(dāng)前的外設(shè)組件互連(PCI)協(xié)議的某些系統(tǒng)上,當(dāng)執(zhí)行 直接存儲器訪問(DMA )操作的時候,使用地址轉(zhuǎn)換和保護(hù)表(ATPT) 來執(zhí)行地址轉(zhuǎn)換和訪問檢查。盡管ATPT已經(jīng)使用了幾十年,它們 對于較低端系統(tǒng)來說是新的,并且通過許多其他名稱為人所知,諸 如直接存儲器訪問(DMA)重映射資源或者輸入/輸出存儲器管理單 元(IOMMU)。 ATPT存儲條目,用于將在DMA事務(wù)中使用的PCIATPT中的條目存儲保護(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和存儲器IIO借助于系統(tǒng)總線U5耦 合到PCIe根聯(lián)合體120,該P(yáng)CIe根聯(lián)合體120包含地址轉(zhuǎn)換和保護(hù) 表(ATPT) 130。 PCIe根聯(lián)合體120接著經(jīng)由PCIe鏈路135耦合到 一個或者多個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 )、 零個或者多個根聯(lián)合體集成的端點(diǎn)、零個或者多個根聯(lián)合體事件采 集器、以及一個或者多個根端口。每個根端口支持分離的1/0層次。 1/0層次可以包括根聯(lián)合體120、零個或者多個互聯(lián)交換機(jī)和/或橋(其包括交換機(jī)或者PCI結(jié)構(gòu))、以及諸如端點(diǎn)140的一個或者多 個端點(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、 一個或者 多個物理功能(PF) 146以及零個或者多個虛擬功能(VF) 148-152, 其中每個VF關(guān)聯(lián)于PF。 ATS允許每個虛擬功能使用地址轉(zhuǎn)換高速 緩存(ATC) 160-164,用于將已轉(zhuǎn)換的PCI存儲器地址高速緩存, 并且當(dāng)執(zhí)行DMA操作的時候,該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的物理和/或虛擬功能所4吏用。例如,當(dāng)將要執(zhí)行DMA操作的時候,可以在處理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則可以使用ATPT130執(zhí)行 地址轉(zhuǎn):換并將已轉(zhuǎn)換的地址返回PCIe端點(diǎn)140。 PCIe端點(diǎn)140則可 以在對應(yīng)于處理DMA^喿作的物理和/或虛擬功能的適當(dāng)ATC 160-164中存儲該轉(zhuǎn)換。使用已轉(zhuǎn)換的地址可以將DMA操作傳遞到 系統(tǒng)總線115上。如果在ATC 160-164中已經(jīng)存在此地址,則已轉(zhuǎn)換的地址與 DMA操作一起使用。在DMA頭部中可以設(shè)置一個位來指示該地址 已經(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。一段時間之后,如果提供到PCIe端點(diǎn)140的轉(zhuǎn)換不再由PCIe 端點(diǎn)140所使用,諸如當(dāng)轉(zhuǎn)換已經(jīng)在ATPT 130內(nèi)部變化時,根聯(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è)置一個位來 將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)的每個PCI總線/設(shè)備/功能(BDF)可以提供不同的樹 狀結(jié)構(gòu)。使用這些ATPT數(shù)據(jù)結(jié)構(gòu),設(shè)備可以共享設(shè)備地址空間, 并且設(shè)備可以具有專用的地址空間。由此,不是所有的設(shè)備可以在 系統(tǒng)存儲器的所有地址空間上執(zhí)行所有的DMA操作。作為DMA事務(wù)的一部分來同步進(jìn)行ATPT130的訪問。這包括 使用一種耗時的轉(zhuǎn)換機(jī)制用于將DMA事務(wù)未轉(zhuǎn)換的PCI總線存儲以及檢查ATPT以確保提交DMA事務(wù)的設(shè)備具有足夠的許可用于訪 問已轉(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)的大量等待時間的原因。 這些等待時間可以導(dǎo)致端點(diǎn)的嚴(yán)重問題,端點(diǎn)需要低的通信等待時 間。作為減輕這些等待時間的一種方式,在PCIe端點(diǎn)140中實(shí)現(xiàn)的 ATS使用ATC 160-164來存儲已經(jīng)執(zhí)行的地址轉(zhuǎn)換,從而不必再次 執(zhí)行這些轉(zhuǎn)換。由此,通過ATPT和ATC的結(jié)合,PCIATS以此方 式執(zhí)行地址轉(zhuǎn)換和訪問檢查,以便減少與DMA操作相關(guān)聯(lián)的等待時 間。盡管PCI 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í)施方式提供了 一種用于在設(shè)備驅(qū)動器和設(shè)備驅(qū)動器服 務(wù)之間劃分端點(diǎn)(例如,PCIe輸入/輸出(I/O)適配器)地址轉(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ū)動器服如之間劃分與PCIe端點(diǎn)進(jìn)行 通信的責(zé)任,在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ù)中可以防止一個OS請求端點(diǎn)對另一 OS的存儲器執(zhí)行 DMA操作。在一個示意性實(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條目編程,并使能一個位,該位表示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ī)制,這個未轉(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)的一個或多個已轉(zhuǎn)換的PCIe存儲器地址。然后,PCIe 端點(diǎn)可以將一個或多個已轉(zhuǎn)換的PCIe存儲器地址存儲在與設(shè)備驅(qū)動 器的隊(duì)列相關(guān)聯(lián)的上下文中,例如,與PCIe端點(diǎn)中的一個或者多個 虛擬功能相關(guān)聯(lián)的一個或者多個地址轉(zhuǎn)換高速緩存。將未轉(zhuǎn)換的PCIe存儲器地址的轉(zhuǎn)換存儲在適配器的設(shè)備驅(qū)動器 隊(duì)列上下文中允許在目標(biāo)為設(shè)備驅(qū)動器隊(duì)列條目的DMA時,PCIe 端點(diǎn)旁路根聯(lián)合體的ATPT。由此,當(dāng)根聯(lián)合體接收到標(biāo)記為已轉(zhuǎn)換 的PCIe DMA事務(wù)的時候,根聯(lián)合體驗(yàn)證轉(zhuǎn)換高速緩存針對該端點(diǎn) 而使能,并且使用已轉(zhuǎn)換的PCIe存儲器地址直接訪問主機(jī)的實(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ī)存儲器解釘 (u叩in)并釋放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)換的PCle存儲器地址之后,向設(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)之間 使用 一個或者多個隊(duì)列數(shù)據(jù)結(jié)構(gòu)進(jìn)行的通信中。在示意性實(shí)施方式 的如此實(shí)現(xiàn)中,以上文先前所述的方式將用于一個或者多個隊(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)提供一個或者多個隊(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ì)列上下文中高速緩存,用于從一個或者多個隊(duì)列獲取 項(xiàng)目使用,并將項(xiàng)目放置在一個或者多個隊(duì)列中。在一個示意性實(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è)備驅(qū)動器執(zhí)行操作的部 分,設(shè)備驅(qū)動器調(diào)取設(shè)備驅(qū)動器服務(wù)以針對隊(duì)列數(shù)據(jù)結(jié)構(gòu)來對ATPT 條目編程,并且向設(shè)備驅(qū)動器返回用于隊(duì)列的未轉(zhuǎn)換的PCIe地址 (即,DMA地址)。ATPT條目的編程可以包括4丁住用于隊(duì)列數(shù) 據(jù)結(jié)構(gòu)的主機(jī)存儲器空間,利用用于從未轉(zhuǎn)換的PCIe地址到系統(tǒng)存 儲器地址的轉(zhuǎn)換信息來對根聯(lián)合體的ATPT中的ATPT條目進(jìn)行編 程,并在ATPT條目中設(shè)置一個高速緩存使能位,該位指示對應(yīng)于 ATPT條目的地址轉(zhuǎn)換在PCIe端點(diǎn)的ATC中是可高速緩存的。在執(zhí) 行此操作之后,用于一個或多個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配置空間、 一個或者多個VPD字段、 一個或者多個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)中移除時、在關(guān)聯(lián)于設(shè)備驅(qū) 動器的功能(物理的或者虛擬的)從主機(jī)系統(tǒng)中移除之后等情況下, 可以4丸行這種無效。這種無效的處理可以包括"i殳備驅(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è)備驅(qū)動器服務(wù)將控制返回給
設(shè)備驅(qū)動器,并且此時,可以從系統(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)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)通道適配器、InfiniBand 適配器等,用于通過一個或者 多個數(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ù)傳送/接收的時候經(jīng)歷根聯(lián)合 體的地址轉(zhuǎn)換。由此,該機(jī)制降低了關(guān)聯(lián)于經(jīng)由網(wǎng)絡(luò)適配器的數(shù)據(jù) 傳送和接收的等待時間。除了由連網(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í)施方式中,提供了 一種用于管理用于訪問數(shù)據(jù) 處理系統(tǒng)的存儲器的地址轉(zhuǎn)換的方法。該方法可以包括由設(shè)備驅(qū) 動器調(diào)取設(shè)備驅(qū)動器服務(wù),用于初始化數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體的 地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn)換條目;以及由設(shè)備驅(qū)動器服務(wù)在與 根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目。本方法可以進(jìn)一步包括將一個或者多個地址轉(zhuǎn)換 數(shù)據(jù)結(jié)構(gòu)條目的至少 一個高速緩存在耦合到數(shù)據(jù)處理系統(tǒng)的輸入/輸 出(I/O)設(shè)備的高速緩存中。此外,本方法可以包括,針對接收的 與地址相關(guān)聯(lián)的1/0操作,其中在1/0設(shè)備的高速緩存中存在針對該 地址的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目,旁路與根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換 數(shù)據(jù)結(jié)構(gòu)。在與根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建 一 個或者多個 地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目可以包括由設(shè)備驅(qū)動器向設(shè)備驅(qū)動器服務(wù) 傳遞第一地址空間中的一個或者多個地址,該第一地址空間引用由 設(shè)備驅(qū)動器和操作系統(tǒng)所使用的地址。創(chuàng)建一個或者多個地址轉(zhuǎn)換 數(shù)據(jù)結(jié)構(gòu)條目可以進(jìn)一 步包括由設(shè)備驅(qū)動器服務(wù)將第 一地址空間 中的一個或者多個地址轉(zhuǎn)換成為第二地址空間中的一個或者多個地 址,其中第二地址空間引用由根聯(lián)合體用于引用實(shí)際存儲器的已轉(zhuǎn) 換的地址。創(chuàng)建一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目還可以包括 由設(shè)備驅(qū)動器服務(wù)將來自引用未轉(zhuǎn)換的I/O總線地址的第三地址空 間的一個或者多個轉(zhuǎn)換條目存儲在數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體的地址 轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中,在該未轉(zhuǎn)換的I/O總線地址用以引用實(shí)際存儲器之 前,由根聯(lián)合體將其轉(zhuǎn)換成為第二地址空間中的一個或者多個地址。 此外,創(chuàng)建一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目可以包括由設(shè)備 驅(qū)動器服務(wù)向設(shè)備驅(qū)動器傳遞第三地址空間中的一個或者多個地 址。根聯(lián)合體可以以一個或者多個地址轉(zhuǎn)換對來自I/O設(shè)備的轉(zhuǎn)換 請求做出響應(yīng),該地址轉(zhuǎn)換將來自第三地址空間的一個或者多個地 址轉(zhuǎn)換成為第二地址空間中的 一 個或者多個地址。本方法可以進(jìn)一步包括由1/0設(shè)備接收無效請求,以將高速緩 存在I/O設(shè)備的高速緩存中的、從第三地址空間到第二地址空間的一 個或者多個地址轉(zhuǎn)換的至少一個無效。此外,本方法可以包括由 I/O設(shè)備將I/O設(shè)備的高速緩存中的至少 一個條目無效,該條目與從
第三地址空間到第二地址空間的 一個或者多個地址轉(zhuǎn)換中的至少一 個相對應(yīng)??梢詮脑O(shè)備驅(qū)動器服務(wù)或者根聯(lián)合體之一 來接收無效請求。本方法進(jìn)一步包括使用在I/0設(shè)備的高迭緩存中的一個或者多 個高速緩存的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目來處理來自1/0設(shè)備的直接存 儲器訪問事務(wù)請求。設(shè)備驅(qū)動器可以提供在數(shù)據(jù)處理系統(tǒng)的不受信任的邏輯分區(qū)或 者系統(tǒng)鏡像之一中,并且設(shè)備驅(qū)動服務(wù)提供在受信任的虛擬化媒介 中。受信任的虛擬化媒介可以是虛擬化媒介操作系統(tǒng)、管理程序或 者服務(wù)分區(qū)中的一個。本方法可以進(jìn)一步包括確定來自I/O設(shè)備的直4妻存儲器訪問 (DMA)事務(wù)是否被導(dǎo)向第三地址空間中的地址,其中在I/0設(shè)備 的高速緩存中存在高速緩存的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目??梢孕薷腎/0 操作i青求,以包括與第三地址空間中的地址相對應(yīng)的第二地址空間 中的地址,并且如果DMA事務(wù)凈皮導(dǎo)向第三地址空間中的地址,其中 在所述I/O端點(diǎn)的高速緩存中存在針對所述第三地址空間中的地址 的、高速緩存的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目,則在所述DMA事務(wù)中設(shè)置 "已轉(zhuǎn)換"標(biāo)識符以指示所述DMA事務(wù)包括已轉(zhuǎn)換的地址。本方法可以進(jìn)一步包括執(zhí)行從I/0設(shè)備到根聯(lián)合體的、利用未 轉(zhuǎn)換的地址的DMA事務(wù)或者利用已轉(zhuǎn)換的地址的DMA事務(wù)之一。 此外,本方法可以包括根據(jù)在接收DMA事務(wù)中是否已經(jīng)設(shè)置了 "已 轉(zhuǎn)換"標(biāo)識符,在根聯(lián)合體中確定從I/0設(shè)備接收的DMA事務(wù)是否 引用 一個或者多個已轉(zhuǎn)換的地址。如果接收的DMA事務(wù)引用 一個或 者多個已轉(zhuǎn)換的地址,則可以旁路與根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù) 據(jù)結(jié)構(gòu),其中,如果接收的DMA事務(wù)引用一個或者多個未轉(zhuǎn)換的地 址,則根聯(lián)合體使用地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)來執(zhí)行地址轉(zhuǎn)換操作。本方法可以進(jìn)一步包括;由根聯(lián)合體驗(yàn)證所接收的DMA事務(wù)。 驗(yàn)證接收的DMA事務(wù)可以包括檢查I/O設(shè)備被允許執(zhí)行已轉(zhuǎn)換的 DMA事務(wù),其中該1/0設(shè)備是DMA事務(wù)的源。此外,驗(yàn)證所接收 DMA事務(wù)可以包括檢查已經(jīng)針對地址轉(zhuǎn)換高速緩存使能了已轉(zhuǎn)換
的地址,該已轉(zhuǎn)換的地址被所述I/O設(shè)備用以執(zhí)行已轉(zhuǎn)換的DMA。 在另一示意性實(shí)施方式中,提供了一種計(jì)算機(jī)程序產(chǎn)品,其包 括具有計(jì)算機(jī)可讀程序的計(jì)算機(jī)可用介質(zhì)。當(dāng)在計(jì)算設(shè)備上執(zhí)行的 時候,計(jì)算機(jī)可讀程序使得計(jì)算設(shè)備執(zhí)行關(guān)于方法示意性實(shí)施方式 而在上文概括的各種操作、以及操作的結(jié)合。在又一示意性實(shí)施方式中,提供了一種裝置。該裝置可用包括: 處理器,以及耦合到該處理器的輸入/輸出(1/0)設(shè)備。處理器執(zhí)行 這樣的指令,該指令使得處理器由設(shè)備驅(qū)動器調(diào)取設(shè)備驅(qū)動器服務(wù), 用于初始化數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址 轉(zhuǎn)換條目。該指令進(jìn)一步使得處理器由設(shè)備驅(qū)動器服務(wù)在與根聯(lián)合 體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié) 構(gòu)條目。此外,該指令可以使得處理器將一個或者多個地址轉(zhuǎn)換數(shù) 據(jù)結(jié)構(gòu)條目的至少一個高速緩存在耦合到數(shù)據(jù)處理系統(tǒng)的1/0設(shè)備 的高速緩存中。與根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)可以針對接 收的與地址相關(guān)聯(lián)的1/0操作而被旁路,其中在1/0設(shè)備的高速緩存 中存在針對該地址的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目。本發(fā)明的這些以及其他特征和優(yōu)點(diǎn)將在以下本發(fā)明的示范性實(shí) 施方式的詳細(xì)說明中描述,或者對本領(lǐng)域普通技術(shù)人員而言,通過 以下本發(fā)明的示范性實(shí)施方式的詳細(xì)說明,發(fā)明的這些以及其他特 征和優(yōu)點(diǎn)將變得顯而易見。
當(dāng)結(jié)合附圖閱讀的時候,通過參考以下示意性實(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ù)的一個示意性 實(shí)施方式的操作的示范性圖示;圖5是示出了根據(jù)一個示意性實(shí)施方式的利用DMA操作處理已 轉(zhuǎn)換的和未轉(zhuǎn)換的PCIe地址的示范性圖示;圖6是根據(jù)一個示意性實(shí)施方式的流程圖,其概括了用于對用 于DMA地址的ATPT條目進(jìn)行初始化的示范性操作;圖7是根據(jù)一個示意性實(shí)施方式的流程圖,其概括了用于使用圖8是根據(jù)一個示意性實(shí)施方式的流程圖,其概括了用于處理 DMA操作中的已轉(zhuǎn)換的和未轉(zhuǎn)換的PCIe地址的示范性操作;圖9示出了用于高速緩存針對PCIe端點(diǎn)隊(duì)列的地址轉(zhuǎn)換的示意 性實(shí)施方式的實(shí)現(xiàn);圖IO是根據(jù)一個示意性實(shí)施方式的流程圖,其概括了用于初始 化主機(jī)系統(tǒng)和PCIe端點(diǎn)之間通信的隊(duì)列數(shù)據(jù)結(jié)構(gòu)的示范性操作;圖11是一個示范性操作的圖示,其示出了使用隊(duì)列條目(被稱 作"命令隊(duì)列條目"或者CQE)從PCIe端點(diǎn)接收主機(jī)系統(tǒng)的緩沖器 中數(shù)據(jù)的操作;圖12是示出了使用CQE經(jīng)由PCIe端點(diǎn)傳送數(shù)據(jù)的操作的示范 性圖示;圖13A至圖13B描繪了根據(jù)一個示意性實(shí)施方式的流程圖,其 概括了用于接收網(wǎng)絡(luò)適配器的操作的示范性操作;圖14A至圖14B描繪了根據(jù)一個示意性實(shí)施方式的流程圖,其 概括了用于傳送網(wǎng)絡(luò)適配器的操作的示范性操作;圖15是根據(jù)一個示意性實(shí)施方式的示出了 SCSI讀取操作的示 范性圖示;圖16A至圖16B描繪了根據(jù)一個示意性實(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)行多種修改?,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包含至少一個網(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可以是例如個人計(jì)算機(jī)、網(wǎng)絡(luò)計(jì)算機(jī)等。 在所述例子中,服務(wù)器204向客戶端210、 212和214提供數(shù)據(jù),諸 如引導(dǎo)文件、操作系統(tǒng)鏡像、以及應(yīng)用。在所述例子中,客戶端210、 務(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旨在于作為一個例子,并不作為針對本發(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ī)的一個例子,實(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ī)的P C卡、以及附加卡。 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)4亍,并且從在數(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 eServerTM pSeries 計(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中包括多個處理器的對稱多處理器(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、或者一個或多個外圍設(shè) 備326和330的存儲器中。總線系統(tǒng)(諸如圖3中所示的總線338或者總線340)可以包括 一個或多個總線。當(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ù)的 一個或多個設(shè)備。存儲器可以是例如主存儲器308、 ROM324或諸如在圖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)用到先前提及的SMP系統(tǒng)以外的多處理器數(shù)據(jù)處理 系統(tǒng)中,而并不背離本發(fā)明的精神和范圍。此外,數(shù)據(jù)處理系統(tǒng)300可以釆取多個不同數(shù)據(jù)處理系統(tǒng)的任 意一個的形式,包括客戶端計(jì)算設(shè)備、服務(wù)器計(jì)算設(shè)備、平板計(jì)算 機(jī)、膝上型計(jì)算機(jī)、電話或者其他通信設(shè)備、個人數(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é)議o關(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í)行這種
初始化和管理的方式。在 一 個示意性實(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ū)動器。在一個示 意性實(shí)施方式中,這些ATPT條目和PCI存儲器地址與用于與PCIe 適配器進(jìn)行通信的一個或多個設(shè)備驅(qū)動器隊(duì)列(稱作"設(shè)備驅(qū)動器 的隊(duì)列")相關(guān)聯(lián)。實(shí)質(zhì)上,設(shè)備驅(qū)動器服務(wù)釘住(pin)用于一個或者多個隊(duì)列的 主機(jī)系統(tǒng)存儲器,對一個或者多個隊(duì)列分配DMA地址,對ATPT條 目編程并使能一個位,該位表示ATPT條目可以高速緩存,即,可 以在PCIe端點(diǎn)上的地址轉(zhuǎn)換高速緩存中進(jìn)行高速緩存。然后,設(shè)備 驅(qū)動器服務(wù)針對可能使用的ATPT條目向設(shè)備驅(qū)動器返回一個或者 多個未轉(zhuǎn)換的PCIe存儲器地址,例如,作為與一個或者多個隊(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)中)存儲一個或多個 已轉(zhuǎn)換的PCIe存儲器地址。在適配器的設(shè)備驅(qū)動器隊(duì)列上下文中存儲未轉(zhuǎn)換的PCIe存儲器 地址的轉(zhuǎn)換,這允許PCIe端點(diǎn)在目標(biāo)為設(shè)備驅(qū)動器隊(duì)列條目的DMA 時旁路根聯(lián)合體的ATPT。由此,當(dāng)根聯(lián)合體接收到標(biāo)記為已轉(zhuǎn)換的 PCIeDMA事務(wù)時,根聯(lián)合體將驗(yàn)證轉(zhuǎn)換高速緩存針對端點(diǎn)而使能,
并且使用已轉(zhuǎn)換的PCIe存儲器地址直接訪問主機(jī)的實(shí)際存儲器。在之后的某個時間點(diǎn),諸如從系統(tǒng)移除PCIe端點(diǎn)之后,從系統(tǒng) 移除與設(shè)備驅(qū)動器關(guān)聯(lián)的功能(物理的或者虛擬的)之后等等,需 要使得對應(yīng)于未轉(zhuǎn)換的PCIe存儲器地址的ATPT條目和ATC條目 無效。為了執(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ū)動器。 一個可替換的實(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ù)的一個示意性 實(shí)施方式的操作的示范性圖示。如在圖4中所示,主機(jī)系統(tǒng)可以具 有一個或者多個邏輯分區(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ū)動器、庫以及其他軟件資源。在系統(tǒng)鏡像420 中可以提供設(shè)備驅(qū)動器450,用于在系統(tǒng)鏡像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通信。 響應(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)的方式提供門鈴存儲設(shè)備426,用
于當(dāng)響應(yīng)隊(duì)列422具有需要處理的響應(yīng)隊(duì)列條目424的時候,通知 系統(tǒng)鏡像420??梢杂蛇@種隊(duì)列執(zhí)行的工作的例子包括與從PCIe 端點(diǎn)490請求的工作系統(tǒng)鏡像420相關(guān)聯(lián)的完成處理,與由PCIe端 點(diǎn)490傳送(surface )到系統(tǒng)鏡像420的錯誤或者多個事件相關(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何時存在于PCIe 端點(diǎn)命令隊(duì)列498中以便處理。PCIe端點(diǎn)490進(jìn)一步具有一個或者多個物理功能(未示出)以 及虛擬功能492。例如,虛擬功能492可以進(jìn)一步維護(hù)地址轉(zhuǎn)換高速 緩存(ATC) 494以用于高速緩存已轉(zhuǎn)換的地址,以便用于執(zhí)行與主 機(jī)系統(tǒng)存儲器的直接存儲器訪問(DMA)操作。ATC494可以存儲 在PCIe端點(diǎn)490處的設(shè)備驅(qū)動器的隊(duì)列上下文中。PCIe端點(diǎn)490經(jīng)由PCI結(jié)構(gòu)485井禺合到主才幾系統(tǒng),其可以包括 通信鏈路、 一個或者多個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和ATFT482中的條目以及使其無效的時候, 設(shè)備驅(qū)動器服務(wù)470可以由沒備驅(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。設(shè)備驅(qū)動器450 另外負(fù)責(zé)當(dāng)需要執(zhí)行用于初始化ATPT 482中的地址轉(zhuǎn)換條目所需 的功能時調(diào)取設(shè)備驅(qū)動器服務(wù)470,以及當(dāng)PCIe端點(diǎn)490不再使用 轉(zhuǎn)換時,使得ATPT482和ATC494中的條目無效。在設(shè)備驅(qū)動器450的初始化期間,設(shè)備驅(qū)動器450可以針對一 個或者多個隊(duì)列來初始化DMA地址空間,所述一個或者多個隊(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ǒng)存儲器部分。每個ATPT條目用于鄰近P CI總線地址的 一 個集已知的。例如,在普通轉(zhuǎn)讓的美國專利6,629,162中描述了用于初始 化這種條目的機(jī)制。然后,設(shè)備驅(qū)動器服務(wù)470向設(shè)備驅(qū)動器450 返回一個或者多個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)行編程并且使能一個位,該位表示用 于設(shè)備驅(qū)動器的響應(yīng)隊(duì)列422以及PCIe端點(diǎn)的命令隊(duì)列498 (如果 其駐留在系統(tǒng)鏡像420中)的ATPT條目是可高速緩存的,即可高 速緩存在PCIe端點(diǎn)490上的ATC494中。然后,設(shè)備驅(qū)動器服務(wù) 470針對ATPT條目向設(shè)備驅(qū)動器450返回未轉(zhuǎn)換的PCIe存儲器地 址。使用示意性實(shí)施方式的機(jī)制,則可以向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)的上下文(例如,ATC 494)中。 作為結(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時旁路根聯(lián)合體ATPT482。即,當(dāng)根聯(lián)合體480接收標(biāo)記為 已轉(zhuǎn)換的PCIe DMA事務(wù)的時候,其將驗(yàn)證轉(zhuǎn)換高速緩存針對PCIe 端點(diǎn)490而使能,并且將直接使用已轉(zhuǎn)換的PCIe存儲器地址訪問主 機(jī)系統(tǒng)的實(shí)際存儲器。在之后的某時間點(diǎn)處,諸如乂人系統(tǒng)移除PCIe端點(diǎn)490之后,從 主機(jī)系統(tǒng)移除與設(shè)備驅(qū)動器45 0相關(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è)置ATPT482中的一個位表示該條目不再有效,或 者通過將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ì)列上下文(例如,ATC494) 中移除高速緩存的轉(zhuǎn)換。在未轉(zhuǎn)換的PCIe存儲器地址不再使用之后, 即,當(dāng)引用未轉(zhuǎn)換的PCIe存儲器地址的所有未完成的DMA操作完 成時,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條目無效之后,設(shè)備驅(qū) 動器服務(wù)470可以清除ATPT 482中的ATPT條目并返回至設(shè)備驅(qū)動 器450。圖5是示出了根據(jù)一個示意性實(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ā)送到 主才幾系統(tǒng)的CPU和存儲器560的^f吏用未轉(zhuǎn)換的PCIe地址的一個 DMA操作,以及從PCIe端點(diǎn)505發(fā)送到CPU和存儲器560的使用 已轉(zhuǎn)換的PCIe地址的另一個DMA操作。如圖5中所示,當(dāng)在PCIe端點(diǎn)505的虛擬功能中接收到DMA 操作請求或生成DMA操作請求時,可以執(zhí)行相應(yīng)ATC的檢查,以 確定在ATC中是否存在用于未轉(zhuǎn)換的PCIe地址的地址轉(zhuǎn)換。如果 在ATC中不存在用于未轉(zhuǎn)換的PCIe地址的條目,則將DMA操作請 求作為4吏用未轉(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)地址、以及可以在與這些主機(jī)系統(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)換的PCIeDMA 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è)置) 一個位,指示在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)這些流程圖示的每個方框、 下文的流程圖示、以及流程圖示中方框的結(jié)合??梢韵蛱幚砥骰蛘?其他可編程數(shù)據(jù)處理裝置提供這些計(jì)算機(jī)程序指令以生成一個機(jī) 器,以便在處理器或者其他可編程數(shù)據(jù)處理裝置上執(zhí)行的指令創(chuàng)建 用于實(shí)現(xiàn) 一 個或多個流程方框中的指定功能的器件。這些計(jì)算機(jī)程 序指令還可以存儲在計(jì)算機(jī)可讀存儲器或者存儲介質(zhì)中,該指令可 以引導(dǎo)處理器或者其他可編程數(shù)據(jù)處理裝置以特殊方式工作,以便 在計(jì)算機(jī)可讀存儲器或者存儲介質(zhì)中存儲的指令產(chǎn)生一項(xiàng)產(chǎn)品,該 產(chǎn)品包括實(shí)現(xiàn)一個或多個流程方框中指定功能的指令器件。因而,流程圖示的方框支持用于執(zhí)行指定功能的器件的結(jié)合、用于執(zhí)行特定功能的步驟的結(jié)合、以及用于執(zhí)行特定功能的程序指 令器件的結(jié)合。應(yīng)該理解,流程圖示的每個方框、以及流程圖示中 方框的結(jié)合可以通過執(zhí)行特定功能或者步驟的基于專用硬件的計(jì)算 機(jī)系統(tǒng)來實(shí)現(xiàn),或者由專用硬件和計(jì)算機(jī)指令來實(shí)現(xiàn)。圖6是根據(jù) 一 個示意性實(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是根掂一個示意性實(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ù)一個示意性實(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)。此后,接著的是操作的兩個路徑。在第一路徑中,做出關(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)用等與使用一個或者多 個隊(duì)列數(shù)據(jù)結(jié)構(gòu)的PCIe端點(diǎn)之間的通信中使用。在示意性實(shí)施方式 的此實(shí)現(xiàn)中,以上文先前所述方式將用于一個或者多個隊(duì)列數(shù)據(jù)結(jié) 構(gòu)的ATPT條目初始化。在PCIe端點(diǎn)的初始化階段期間,PCIe端點(diǎn) 對i殳備驅(qū)動器已經(jīng);陂初始化進(jìn)行驗(yàn)證。這可以例如通過/人PCIe端點(diǎn) 的PCI配置空間、重要產(chǎn)品數(shù)據(jù)(VPD)字段、或者存儲器映射的 輸入/輸出(MMIO)字段讀取信息來執(zhí)行。設(shè)備驅(qū)動器可以向PCIe端點(diǎn)提供一 個或者多個隊(duì)列的開始和 結(jié)束地址、開始地址和長度等等。例如,設(shè)備驅(qū)動器可以將這些地 址寫入對應(yīng)于隊(duì)列配置空間的PCIe端點(diǎn)的PCI配置空間字段、VPD 或者M(jìn)MIO字"a。這些地址是未轉(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ì)列上下文中高速緩存,用于從 一 個或者多個隊(duì)列獲 取項(xiàng)目使用,并將項(xiàng)目放置在一個或者多個隊(duì)列中。通過以此方式 預(yù)轉(zhuǎn)換隊(duì)列地址,通過將轉(zhuǎn)換操作的等待時間從每個操作的開始移 動到任何操作開始之前來降低在開始I/O操作中所包含的等待時間, 由此提高端點(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ù)目不限于兩個,在不偏離本發(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è)置一個高速緩存使能位,指 示對應(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配置空間、 一個或者 多個VPD字段、 一個或者多個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)換和訪問檢查,并向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)中 移除時、在關(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è)備驅(qū)動器服 務(wù)940將控制返回給設(shè)備驅(qū)動器910,并且此時可以乂人系統(tǒng)移除PCIe 端點(diǎn)990。圖IO是根據(jù)一個示意性實(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中所示,作為主才幾系統(tǒng)上系統(tǒng)4竟像初始化的部分,由 主機(jī)系統(tǒng)開始用于PCIe端點(diǎn)的設(shè)備驅(qū)動器的初始化(步驟IOIO)。 主機(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ù)脑挘贏TPT 條目中設(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)。(步驟1095 ),并且操作終止。此后,PCIe端點(diǎn)可以將隊(duì)列上下文 中已轉(zhuǎn)換的地址用于來往于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的DMA請求。由此,示意性實(shí)施方式提供了一種機(jī)制,通過該4幾制可以創(chuàng)建 一個或者多個隊(duì)列,用于在系統(tǒng)鏡像、系統(tǒng)鏡像上運(yùn)行的應(yīng)用等與 例如I/O適配器的PCIe端點(diǎn)之間進(jìn)行通信。提供示意性實(shí)施方式的 機(jī)制用于根聯(lián)合體中的ATPT條目的初始化和4吏用,以l更將與一個 或者多個隊(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ā)到一個或者多個隊(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)通道適配器、InfiniBand 適配器等,用于通過一個或 者多個數(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)換操作的等待時間從每個操作開始移動到任何操作開始之前,來降低在開始1/0操作中所包含的等待時間,由此提高端點(diǎn)DMA操作 的整體性能?,F(xiàn)在,將參考下文的圖11和圖12來描述使用關(guān)聯(lián)于連網(wǎng)適配 器的示意性實(shí)施方式的結(jié)構(gòu)來用于接收和傳送數(shù)據(jù)的處理。圖ll是 示出了一個示范性操作的圖示,其示出了用于使用隊(duì)列條目(被稱 作"命令隊(duì)列條目,,或者CQE )從PCIe端點(diǎn)將數(shù)據(jù)接收到主機(jī)系統(tǒng) 的緩沖器中的操作。首先,設(shè)備驅(qū)動器1110調(diào)取設(shè)備驅(qū)動器服務(wù) 1140以初始化一個或者多個隊(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è)置一個位,該 位表示ATPT條目是可高速緩存的,并向設(shè)備驅(qū)動器U10返回未轉(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指 示出CQE 1122是可用的。PCIe端點(diǎn)1190響應(yīng)于在門鈴存儲器設(shè)備 1192中門鈴值的設(shè)置,從命令隊(duì)列數(shù)據(jù)結(jié)構(gòu)1120中獲取CQE 1122 且由此獲取緩沖器地址。在已經(jīng)獲取了用于緩沖器1124的未轉(zhuǎn)換的PCIe地址之后, PCIe端點(diǎn)1190針對緩沖器1124的未轉(zhuǎn)換的PCIe地址的地址轉(zhuǎn)換向
根聯(lián)合體1150發(fā)布請求。根聯(lián)合體1150使用ATPT 1160來將未轉(zhuǎn) 換的PCIe地址轉(zhuǎn)換成為已轉(zhuǎn)換的系統(tǒng)存儲器地址,并將已轉(zhuǎn)換的系 統(tǒng)存儲器地址返回PCIe端點(diǎn)1190。 PCIe端點(diǎn)U90將已轉(zhuǎn)換的系統(tǒng) 存儲器地址存儲在PCIe端點(diǎn)1190中的CQE 1194的本地副本中。應(yīng)該理解,可以在從針對CQE 1194的外部網(wǎng)絡(luò)附加設(shè)備(未 示出)接收數(shù)據(jù)包之前,執(zhí)行轉(zhuǎn)換并將已轉(zhuǎn)換的地址(即,系統(tǒng)存 儲器或者實(shí)際存傍器地址)存儲在CQE 1194的本地副本中。由此, 在由外部網(wǎng)絡(luò)附加的i殳備發(fā)送數(shù)據(jù)包以及在PCIe端點(diǎn)1190中接收 數(shù)據(jù)包的時候,已轉(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è)置一個位,以指示在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。還可
能針對多個操作重用數(shù)據(jù)緩沖器(例如,多個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)鏡像傳送 數(shù)據(jù)的時候,設(shè)備驅(qū)動器1210調(diào)取設(shè)備驅(qū)動器服務(wù)1240來釘住用 于緩沖器1224的主機(jī)存儲器,為緩沖器1224分配DMA地址,將針 對緩沖器1224的ATPT 1260中的ATPT條目編程,并在ATPT條目 中設(shè)置一個位,該位指示在這些條目中的地址轉(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)由它的一個或者多個端口 傳送數(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)換的地址時,其將 已轉(zhuǎn)換的地址存儲在CQE的本地副本1294中。在PCIe端點(diǎn)12卯將 來自數(shù)據(jù)緩沖器1224的傳送數(shù)據(jù)DMA (例如,當(dāng)端口變得可用于 傳送數(shù)據(jù)的時候)并傳送該數(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ù)緩沖器重用于多個操作(例如,多個 CQE),在此情況下,將不調(diào)用設(shè)備驅(qū)動器服務(wù)1140 (例如使得數(shù) 據(jù)緩沖器地址無效和對存儲器解釘),直到其他操作不再需要數(shù)據(jù) 緩沖器為止。圖13A至圖13B描述了根據(jù)一個示意性實(shí)施方式的流程圖, 其概括了用于網(wǎng)絡(luò)適配器的接受操作的示范性操作。如圖13A至圖 13B中所示,操作開始于設(shè)備驅(qū)動器調(diào)取設(shè)備驅(qū)動器服務(wù)來初始化 一個或者多個數(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ù)椐結(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)(步驟1390),其將完成通知給設(shè)備驅(qū)動器服務(wù)。然后, 設(shè)備驅(qū)動器服務(wù)將關(guān)聯(lián)于數(shù)據(jù)緩沖器的主機(jī)存儲器解釘(步驟 1392)。然后,設(shè)備驅(qū)動器服務(wù)將控制返回給設(shè)備驅(qū)動器(步驟1395 ) 并且操作終止。圖14A至圖14B描繪了根據(jù)一個示意性實(shí)施方式的流程圖, 其概括了用于網(wǎng)絡(luò)適配器傳送操作的一個示范性操作。如圖14A至 圖14B所示,操作開始于設(shè)備驅(qū)動器調(diào)取設(shè)備驅(qū)動器服務(wù)(步驟 1410),設(shè)備驅(qū)動器服務(wù)接著將用于緩沖器的主機(jī)存儲器釘住,分 配用于緩沖器的DMA地址,將用于緩沖器的ATPT中的ATPT條目 編程,并在ATPT條目中設(shè)置一個位來指示在這些條目中的地址轉(zhuǎn) 換是可高速緩存的(步驟1415)。然后,設(shè)備驅(qū)動器服務(wù)向設(shè)備驅(qū) 動器返回用于緩沖器的一個或者多個未轉(zhuǎn)換的PCIe存儲器地址,即 DMA地址(步驟1420)。
設(shè)備驅(qū)動器創(chuàng)建包含指向緩沖器的指針(即,未轉(zhuǎn)換的PCIe 存儲器地址)的隊(duì)列條目,PCIe端點(diǎn)將從該緩沖器經(jīng)由它的一個或 者多個端口傳送數(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)換的地址時(步驟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ī) 制可以用于降低SCSI適配器的DMA讀取等待時間。圖15是根據(jù)一個示意性實(shí)施方式的示出了 SCSI讀取操作的示 范性圖示。如圖15中所示,當(dāng)設(shè)備驅(qū)動器1510從諸如系統(tǒng)鏡像或 者系統(tǒng)鏡像中運(yùn)行的應(yīng)用接收存儲事務(wù)請求的時候,設(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é)果的時候,將結(jié)果存儲在PCIe端點(diǎn)1590中的CQE 1594的本地副本中。由此,可以與正在執(zhí)行的讀取操作基本同時執(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)1590還將響應(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è)備驅(qū)動器 服務(wù)1540將控制返回給設(shè)備驅(qū)動器1510。圖16A至圖16B示出了根據(jù)一個示意性實(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é)果的時候,將結(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ì)列數(shù)據(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è)備驅(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)的時間少 于物理SCSI設(shè)備用以執(zhí)行查找操作花費(fèi)的時間,由此在整個操作的 等待時間中隱含了地址轉(zhuǎn)換時間。當(dāng)端點(diǎn)從根聯(lián)合體接收已轉(zhuǎn)換的地址的時候,端點(diǎn)將這些已轉(zhuǎn) 換的地址存儲在CQE的本地副本中(步驟1652 )。然后,端點(diǎn)設(shè)置 DMA頭部以指示在DMA請求中正在使用的是已轉(zhuǎn)換的地址,并使 用在CQE的本地副本中的本地高速緩存的已轉(zhuǎn)換的地址執(zhí)行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。由此,示意性實(shí)施方式提供用于以在設(shè)備驅(qū)動器和設(shè)備驅(qū)動器 服務(wù)上分布通信責(zé)任的方式與不同類型PCIe端點(diǎn)(包括網(wǎng)絡(luò)適配器、 SCSI適配器、InfiniBand 適配器等)進(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í)施方式、完全 軟件實(shí)施方式或者包含硬件或者軟件元件的實(shí)施方式的形式。在一 個示范性實(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)將包括至少 一個 通過系統(tǒng)總線直接或間接耦合至存儲器元件的處理器。該存儲器元 件可以包括在程序代碼實(shí)際執(zhí)行期間所使用的本地存儲器、大容量 存儲器以及高速緩沖存儲器,其提供至少某些程序代碼的臨時存儲, 以減少在執(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í) 施方式是為了更好地解釋本發(fā)明的原理及其實(shí)際應(yīng)用,并使其他本 領(lǐng)域普通技術(shù)人員理解,具有各種變化的各種實(shí)施方式的本發(fā)明適 用于預(yù)期的特殊用途。
權(quán)利要求
1.一種用于在數(shù)據(jù)處理系統(tǒng)中管理用于訪問所述數(shù)據(jù)處理系統(tǒng)的存儲器的地址轉(zhuǎn)換的方法,包括由設(shè)備驅(qū)動器調(diào)取設(shè)備驅(qū)動器服務(wù),用于初始化所述數(shù)據(jù)處理系統(tǒng)的根聯(lián)合體的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn)換條目;由所述設(shè)備驅(qū)動器服務(wù)在與所述根聯(lián)合體相關(guān)聯(lián)的所述地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目;將所述一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目的至少一個高速緩存在耦合到所述數(shù)據(jù)處理系統(tǒng)的輸入/輸出(I/O)設(shè)備的高速緩存中;以及針對接收的與地址相關(guān)聯(lián)的I/O操作,其中在所述I/O設(shè)備的高速緩存中存在針對該地址的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目,旁路與根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)。
2. 根據(jù)權(quán)利要求1所述的方法,其中在與所述根聯(lián)合體相關(guān)聯(lián) 的所述地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條 目包括由所述設(shè)備驅(qū)動器向設(shè)備驅(qū)動器服務(wù)傳遞第 一地址空間中的一 個或者多個地址,所述第一地址空間引用由所迷設(shè)備驅(qū)動器和操作 系統(tǒng)所使用的地址;由所述設(shè)備驅(qū)動器服務(wù)將所述第一地址空間中的一個或者多個 地址轉(zhuǎn)換成為第二地址空間中的一個或者多個地址,其中所述第二 地址空間引用由所述根聯(lián)合體用于引用實(shí)際存儲器的已轉(zhuǎn)換的地 址;由設(shè)備驅(qū)動器服務(wù)將來自引用未轉(zhuǎn)換的I/O總線地址的第三地 址空間的 一個或者多個轉(zhuǎn)換條目存儲在所述數(shù)據(jù)處理系統(tǒng)的根聯(lián)合 體的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中,在該未轉(zhuǎn)換的I/O總線地址用以引用實(shí)際 存儲器之前,由所述根聯(lián)合體將其轉(zhuǎn)換成為所述第二地址空間中的 一個或者多個地址;以及 由所述設(shè)備驅(qū)動器服務(wù)向所述設(shè)備驅(qū)動器傳遞所述第三地址空 間中的一個或者多個地址。
3. 根據(jù)權(quán)利要求2所述的方法,其中所述根聯(lián)合體以一個或者 多個地址轉(zhuǎn)換對來自所述I/O設(shè)備的轉(zhuǎn)換請求做出響應(yīng),該地址轉(zhuǎn)換 將來自所述第三地址空間的一個或者多個地址轉(zhuǎn)換成為所述第二地 址空間中的一個或者多個地址。
4. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括由所述I/O設(shè)備接收無效請求,以將高速緩存在所述I/O設(shè)備的 高速緩存中的、從所述第三地址空間轉(zhuǎn)換到所述第二地址空間的一 個或者多個地址轉(zhuǎn)換的至少一個無效;以及由所述I/O設(shè)備將所述I/O設(shè)備的高速緩存中的至少一個條目無 效,所述條目與從所述第三地址空間轉(zhuǎn)換到所述第二地址空間的一 個或者多個地址轉(zhuǎn)換中的至少一個相對應(yīng)。.
5. 根據(jù)權(quán)利要求4所述的方法,其中從所述設(shè)備驅(qū)動器服務(wù)或 者所述根聯(lián)合體之 一 來接收所述無效請求。
6. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括使用所述I/O設(shè)備的高速緩存中的一個或者多個高速緩存的地 址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目來處理來自所述I/O設(shè)備的直接存儲器訪問事 務(wù)請求。
7. 根據(jù)權(quán)利要求1所述的方法,其中所述設(shè)備驅(qū)動器提供在所 述數(shù)據(jù)處理系統(tǒng)的不受信任的邏輯分區(qū)或者系統(tǒng)鏡像之一中,并且 所述設(shè)備驅(qū)動服務(wù)提供在受信任的虛擬化媒介中。
8. 根據(jù)權(quán)利要求7所述的方法,其中所述受信任的虛擬化媒介 是虛擬化媒介操作系統(tǒng)、管理程序或者服務(wù)分區(qū)之一。
9. 根據(jù)權(quán)利要求2所述的方法,進(jìn)一步包括 確定來自所述I/0設(shè)備的直接存儲器訪問(DMA)事務(wù)是否被導(dǎo)向所述第三地址空間中的地址,其中在所述I/O設(shè)備的高速緩存中 存在高速緩存的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目;以及修改所述I/O操作請求,以包括與所述第三地址空間中的地址相 對應(yīng)的所述第二地址空間中的地址,并且如果所述DMA事務(wù)被導(dǎo)向 所述第三地址空間中的地址,其中在所述I/O端點(diǎn)的高速緩存中存在 針對所述第三地址空間中的地址的、高速緩存的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu) 條目,則在所述DMA事務(wù)中設(shè)置"已轉(zhuǎn)換"標(biāo)識符以指示所述DMA 事務(wù)包括已轉(zhuǎn)換的地址。
10. 根據(jù)權(quán)利要求9所述的方法,進(jìn)一步包括 執(zhí)行從所述I/O設(shè)備到所述根聯(lián)合體的、利用未轉(zhuǎn)換的地址的DMA事務(wù)或者利用已轉(zhuǎn)換的地址的DMA事務(wù)之一;根據(jù)在接收的DMA事務(wù)中是否已經(jīng)設(shè)置了 "已轉(zhuǎn)換"標(biāo)識符,在所述根聯(lián)合體中確定從I/O設(shè)備接收的DMA事務(wù)是否引用 一個或者多個已轉(zhuǎn)換的地址;以及如果接收的DMA事務(wù)引用一個或者多個已轉(zhuǎn)換地址,則旁路與所述根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu),其中,如果接收的DMA事務(wù)引用 一個或者多個未轉(zhuǎn)換的地址,則所述根聯(lián)合體使用所述地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)來執(zhí)行地址轉(zhuǎn)換操作。
11. 根據(jù)權(quán)利要求IO所述的方法,進(jìn)一步包括由所述根聯(lián)合 體-驗(yàn)i正接收的DMA事務(wù),其中驗(yàn)證接收的DMA事務(wù)至少包括以下 步驟的一個檢查所述1/0設(shè)備被允許執(zhí)行已轉(zhuǎn)換的DMA事務(wù),其中所述I/O 設(shè)備是DMA事務(wù)的源;或者檢查已經(jīng)針對地址轉(zhuǎn)換高速緩存使能了已轉(zhuǎn)換的地址,該已轉(zhuǎn)換 的地址被所述I/O設(shè)備用以執(zhí)行已轉(zhuǎn)換的DMA。
12. —種裝置,包括 處理器;以及耦合到所述處理器的輸入/輸出U/0)設(shè)備,其中所述處理器執(zhí) 行使得所述處理器進(jìn)行以下操作的指令由設(shè)備驅(qū)動器調(diào)取設(shè)備驅(qū)動器服務(wù),用于初始化所述數(shù)據(jù)處理系 統(tǒng)的根聯(lián)合體的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn)換條目;換數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目;將所述一個或者多個地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目的至少 一個高速緩存在耦合到所述數(shù)據(jù)處理系統(tǒng)的1/0設(shè)備的高速緩存中;以及針對接收的與地址相關(guān)聯(lián)的1/0操作,其中在1/0設(shè)備的高速緩存中存在針對該地址的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目,旁路與根聯(lián)合體相關(guān)聯(lián)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)。
全文摘要
提供了一種管理訪問數(shù)據(jù)處理系統(tǒng)的存儲器的地址轉(zhuǎn)換的方法和裝置,用于在設(shè)備驅(qū)動器和設(shè)備驅(qū)動器服務(wù)之間劃分與端點(diǎn)進(jìn)行通信的責(zé)任。通過該裝置和方法,設(shè)備驅(qū)動器負(fù)責(zé)管理在邏輯分區(qū)和端點(diǎn)中的應(yīng)用之間的傳送請求的隊(duì)列。設(shè)備驅(qū)動器進(jìn)一步經(jīng)由設(shè)備驅(qū)動器服務(wù)來調(diào)取存儲器管理。設(shè)備驅(qū)動器服務(wù)負(fù)責(zé)管理可由端點(diǎn)訪問的存儲器,包括地址轉(zhuǎn)換和保護(hù)表(ATPT)或者端點(diǎn)的地址轉(zhuǎn)換高速緩存(ATC)和根聯(lián)合體。設(shè)備驅(qū)動器服務(wù)可以聯(lián)合用以在系統(tǒng)鏡像和端點(diǎn)之間通信的數(shù)據(jù)結(jié)構(gòu)的未轉(zhuǎn)換的地址。端點(diǎn)可以請求將未轉(zhuǎn)換的地址轉(zhuǎn)換,并且可以將轉(zhuǎn)換在ATC中高速緩存。
文檔編號G06F12/10GK101165665SQ20071015408
公開日2008年4月23日 申請日期2007年9月13日 優(yōu)先權(quán)日2006年10月17日
發(fā)明者C·A·薩爾茨伯格, D·F·莫特爾, R·J·雷西奧, S·M·瑟伯爾 申請人:國際商業(yè)機(jī)器公司