專利名稱:改進(jìn)系統(tǒng)dma映射同時(shí)實(shí)質(zhì)上減少存儲(chǔ)器分段的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及計(jì)算機(jī)系統(tǒng),特別地涉及計(jì)算機(jī)系統(tǒng)中的存儲(chǔ)器分配。本發(fā)明更特別地涉及一種用于提供改進(jìn)的DMA映射的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)包括應(yīng)要求動(dòng)態(tài)地分配給執(zhí)行應(yīng)用程序和輸入/輸出(IO)設(shè)備(或者關(guān)聯(lián)適配器)的有限物理存儲(chǔ)器資源。經(jīng)由轉(zhuǎn)換成如下真實(shí)(或者物理)地址的虛擬地址來訪問存儲(chǔ)器,該真實(shí)(或者物理)地址對(duì)應(yīng)于存儲(chǔ)器內(nèi)的物理位置。完成這些分配和/或存儲(chǔ)器地址空間訪問的一種方法是經(jīng)由從IO適配器發(fā)出的直接存儲(chǔ)器訪問(DMA)操作。
在當(dāng)今的許多計(jì)算機(jī)系統(tǒng)中,系統(tǒng)的物理存儲(chǔ)器地址空間通常大于IO地址空間。利用這些計(jì)算機(jī)系統(tǒng),為便于一個(gè)或多個(gè)IO適配器訪問整個(gè)系統(tǒng)物理存儲(chǔ)器,要求一些轉(zhuǎn)換機(jī)制。例如,32位IO地址子系統(tǒng)要求某種存儲(chǔ)器映射以便允許IO適配器訪問大于4GB的系統(tǒng)存儲(chǔ)器地址。目前,多數(shù)操作系統(tǒng)(OS)將(存儲(chǔ)器中的)最大頁面大小設(shè)置為4K字節(jié)(4K),因此每個(gè)映射頁面是4K字節(jié)。下面的表1圖示了地址映射表的例子,該例子示出了就給定的4K頁面基地址而言在系統(tǒng)存儲(chǔ)器地址與IO DMA(直接存儲(chǔ)器訪問)之間的轉(zhuǎn)換。
表1
為了滿足高性能IO適配器的新要求,該數(shù)據(jù)緩沖映射大小需要大于4K字節(jié),例如具體來說是利用以太網(wǎng)巨型框架和大型TCP分段卸載(TSO)發(fā)送。為了實(shí)現(xiàn)這一較大數(shù)據(jù)緩沖映射大小的支持,OS的開發(fā)者已經(jīng)改進(jìn)了OS的映射方法以便允許連續(xù)IO DMA地址的大于4K字節(jié)的地址映射。
圖1是圖示了由設(shè)備驅(qū)動(dòng)程序用來將系統(tǒng)物理地址映射到IODMA地址的現(xiàn)有技術(shù)方法的流程圖。所示方法描述了AIX OS功能。然而,所呈現(xiàn)的流程圖是作為一個(gè)例子而提供的,并且也可以應(yīng)用于其它OS。
如圖所示,該過程始于在其中初始化計(jì)算機(jī)系統(tǒng)(或者IO適配器)的塊102。在IO適配器的初始化過程中,設(shè)備驅(qū)動(dòng)程序進(jìn)行系統(tǒng)調(diào)用以便登記驅(qū)動(dòng)程序進(jìn)行操作所需要的IO地址空間的大小,如在塊104處所述。D_MAP_INIT是這一系統(tǒng)調(diào)用的例子。接著在塊106處,設(shè)備驅(qū)動(dòng)程序調(diào)用存儲(chǔ)器分配例程以便分配系統(tǒng)存儲(chǔ)器(緩沖器)。然后,設(shè)備驅(qū)動(dòng)程序在塊108處調(diào)用系統(tǒng)映射例程以便將系統(tǒng)存儲(chǔ)器映射到IO DMA地址。這一系統(tǒng)調(diào)用的例子是D_MAP_PAGE/D_MAP_LIST。
一旦進(jìn)行這一調(diào)用,設(shè)備驅(qū)動(dòng)程序監(jiān)視何時(shí)不再需要IO DMA地址,如在判決塊110處所示。如果仍然需要IO DMA地址,則適配器維護(hù)該空間,如在塊116處所示。然而,當(dāng)不再需要IO DMA地址時(shí),設(shè)備驅(qū)動(dòng)程序調(diào)用內(nèi)核解映射例程以便將該IO DMA地址返回到內(nèi)核,如在塊112處所示。然后,設(shè)備驅(qū)動(dòng)程序/OS將分配的存儲(chǔ)器釋放回到內(nèi)核,如在塊114處所示。完成將所分配的存儲(chǔ)器返回到內(nèi)核的這些系統(tǒng)調(diào)用的例子是D_UNMAP_PAGE/D_UNMAP_LIST和D_MAP_CLEAR。
當(dāng)隨著時(shí)間推移越來越多的適配器請(qǐng)求存儲(chǔ)器地址空間時(shí),IODMA地址空間變得分段越來越多。當(dāng)這一分段超過閾值點(diǎn)時(shí),由于大型IO DMA空間的多個(gè)部分被指定給DMA請(qǐng)求,所以可用空間的鄰接性降低,而且變得更加難于為指定給新DMA請(qǐng)求而找到鄰接空間。
此外,隨著分段水平增加,從OS獲得(為鄰接的地址)分配IODMA地址的等待也會(huì)增加。這一增加的等待可能造成可度量的處理延遲,并且由此對(duì)整體系統(tǒng)性能具有實(shí)質(zhì)上的負(fù)面影響。盡管這些延遲在當(dāng)今多數(shù)計(jì)算機(jī)系統(tǒng)的操作中司空見慣,但是它們是所不希望的。因此,系統(tǒng)在一開始以相對(duì)快的速度執(zhí)行DMA地址分配,而在操作一段時(shí)間之后最終放松實(shí)質(zhì)上的性能速度(即要求增加的延遲)。因此這些系統(tǒng)表現(xiàn)得沒有在系統(tǒng)初始啟動(dòng)時(shí)那樣好。
就上述以及其它類型的常規(guī)DMA映射(例如使用應(yīng)用編程接口(API))而言,存在若干局限。在這些局限之中的是下列各項(xiàng)(1)盡管驅(qū)動(dòng)程序能夠在IPL時(shí)間期間預(yù)先登記驅(qū)動(dòng)程序所需要的I/ODMA地址的大小,但是預(yù)先登記并不保證地址映射操作一直成功。也就是說,如果存儲(chǔ)器空間耗盡驅(qū)動(dòng)程序所請(qǐng)求的鄰接地址空間的數(shù)量則映射可能失?。灰约?2)系統(tǒng)運(yùn)行時(shí)間越長,IO DMA地址空間將變得分段越多,而為IO DMA映射獲得大型鄰接地址空間所要求的時(shí)間(即操作等待)越長。如上所言,這一增加的等待負(fù)面地影響了整體系統(tǒng)性能。
發(fā)明內(nèi)容
公開了一種方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,用于當(dāng)按照設(shè)備驅(qū)動(dòng)程序的IO DMA請(qǐng)求對(duì)鄰接存儲(chǔ)器空間的搜索出現(xiàn)在初始程序加載器(IPL)之后的某一時(shí)刻時(shí),通過消除在該搜索中的等待來增加計(jì)算機(jī)系統(tǒng)中IO DMA操作的效率。在操作系統(tǒng)(OS)代碼內(nèi)提供三個(gè)新應(yīng)用編程接口(API),該應(yīng)用編程接口允許一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)程序(1)在IPL期間從OS預(yù)先請(qǐng)求和預(yù)先分配IO DMA地址范圍并且維護(hù)該地址的控制;(2)將系統(tǒng)(虛擬/物理)地址范圍映射到具體預(yù)先分配的IO DMA地址范圍;以及,(3)在不再需要空間時(shí)將預(yù)先分配的IO DMA地址空間釋放回到內(nèi)核。利用這些API實(shí)現(xiàn)了設(shè)備驅(qū)動(dòng)程序所維護(hù)的高級(jí)IO DMA地址映射技術(shù),而指定/分配的IO DMA地址空間不再分段,并且實(shí)質(zhì)上減少/消除了完成IO DMA映射的等待。
本發(fā)明的上述以及附加目的、特征和優(yōu)點(diǎn)將在以下具體書面描述中變得明顯。
通過參照在結(jié)合附圖時(shí)閱讀的對(duì)說明性實(shí)施例的以下具體描述,將最佳地理解本發(fā)明本身及其最佳實(shí)施方式、更多目的和優(yōu)點(diǎn),在附圖中圖1是根據(jù)現(xiàn)有技術(shù)分配DMA地址空間的過程的流程圖;圖2是圖示了根據(jù)本發(fā)明優(yōu)選實(shí)施例的本發(fā)明可以實(shí)施于其中的數(shù)據(jù)處理系統(tǒng)的框圖;以及圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例利用API來分配DMA地址空間的過程的流程圖。
具體實(shí)施例方式
本發(fā)明提供了一種方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,用于當(dāng)按照設(shè)備驅(qū)動(dòng)程序的IO DMA請(qǐng)求對(duì)鄰接存儲(chǔ)器空間的搜索出現(xiàn)在初始程序加載器(IPL)之后的某一時(shí)刻時(shí),通過消除在該搜索中的等待來增加計(jì)算機(jī)系統(tǒng)中IO DMA操作的效率。在操作系統(tǒng)(OS)代碼內(nèi)提供三個(gè)新應(yīng)用編程接口(API),該應(yīng)用編程接口允許一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)程序(1)在IPL期間從OS預(yù)先請(qǐng)求和預(yù)先分配IO DMA地址范圍并且維護(hù)該地址的控制;(2)將系統(tǒng)(虛擬/物理)地址范圍映射到具體預(yù)先分配的IO DMA地址范圍;以及,(3)在不再需要空間時(shí)將預(yù)先分配的IO DMA地址空間釋放回到內(nèi)核。利用這些API實(shí)現(xiàn)了設(shè)備驅(qū)動(dòng)程序所維護(hù)的高級(jí)IO DMA地址映射技術(shù),而指定/分配的IODMA地址空間不再分段,并且實(shí)質(zhì)上減少/消除了完成IO DMA映射的等待。
現(xiàn)在參照?qǐng)D2,示出了本發(fā)明可以實(shí)施于其中的數(shù)據(jù)處理系統(tǒng)的框圖。數(shù)據(jù)處理系統(tǒng)200是計(jì)算機(jī)的例子,可以實(shí)施本發(fā)明的過程的代碼或者指令位于該計(jì)算機(jī)中。數(shù)據(jù)處理系統(tǒng)200利用外圍組件互連(PCI)本地總線架構(gòu)。雖然所示例子利用PCI總線,但是可以使用其它總線架構(gòu),比如加速圖形端口(AGP)和工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)。處理器202和主存儲(chǔ)器204通過PCI橋接器208連接到PC本地總線206。PCI橋接器208也可以包括用于處理器202的集成存儲(chǔ)器控制器和高速緩存存儲(chǔ)器。通向PCI本地總線206的附加連接可以通過直接組件連接或者通過附加板來實(shí)現(xiàn)。
在所示例子中,局域網(wǎng)(LAN)適配器210、小型計(jì)算機(jī)系統(tǒng)接口(SCSI)主機(jī)總線適配器212、擴(kuò)展總線接口214通過直接組件連接來連接到PCI本地總線206。對(duì)照而言,音頻適配器216、圖形適配器218和音頻/視頻適配器219通過插入到擴(kuò)展槽中的附加板連接到PCI本地總線206。擴(kuò)展總線接口214為鍵盤和鼠標(biāo)適配器220、調(diào)制解調(diào)器222和附加存儲(chǔ)器224提供連接。SCSI主機(jī)總線適配器212為硬盤驅(qū)動(dòng)226、磁帶驅(qū)動(dòng)228和CD-ROM驅(qū)動(dòng)230提供連接。典型的PCI本地總線實(shí)施將支持三個(gè)或者四個(gè)PCI擴(kuò)展槽或者附加連接器。
操作系統(tǒng)(OS)在處理器202上運(yùn)行并且用來協(xié)調(diào)圖2中數(shù)據(jù)處理系統(tǒng)200內(nèi)的各種組件和提供這些組件的控制。操作系統(tǒng)可以是可在商業(yè)上獲得的操作系統(tǒng),比如可從Microsoft公司獲得的WindowsXP。比如Java這樣的面向?qū)ο蟮木幊滔到y(tǒng)可以與該操作系統(tǒng)相結(jié)合地運(yùn)行并且提供從在數(shù)據(jù)處理系統(tǒng)200上執(zhí)行的Java程序或者應(yīng)用程序到該操作系統(tǒng)的調(diào)用?!癑ava”是Sun Microsystems公司的商標(biāo)。用于操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)和應(yīng)用程序或者程序的指令位于比如硬盤驅(qū)動(dòng)226這樣的存儲(chǔ)設(shè)備上,并且可以加載到主存儲(chǔ)器204中以供處理器202執(zhí)行。在圖2中描繪的數(shù)據(jù)處理系統(tǒng)例如可以是IBMeServer pSeries系統(tǒng),該系統(tǒng)是紐約州Armonk國際商務(wù)機(jī)器公司的產(chǎn)品,運(yùn)行高級(jí)交互執(zhí)行(AIX)操作系統(tǒng)或者LINUX操作系統(tǒng)。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到圖2中的硬件可以根據(jù)實(shí)施而變化。除了使用在圖2中描繪的硬件之外或者代替使用這樣的硬件,可以使用其它內(nèi)部硬件或者外圍設(shè)備,比如快速只讀存儲(chǔ)器(ROM)、等效非易失性存儲(chǔ)器或者光盤驅(qū)動(dòng)等。本發(fā)明的過程也可以應(yīng)用于多處理器數(shù)據(jù)處理系統(tǒng)。
例如,數(shù)據(jù)處理系統(tǒng)200如果任選地配置為網(wǎng)絡(luò)計(jì)算機(jī)則可以不包括SCSI主機(jī)總線適配器212、硬盤驅(qū)動(dòng)226、磁帶驅(qū)動(dòng)228和CD-ROM 230。在那一情況下,將恰當(dāng)?shù)胤Q為客戶機(jī)計(jì)算機(jī)的計(jì)算機(jī)包括某類網(wǎng)絡(luò)通信接口,比如網(wǎng)絡(luò)適配器210、調(diào)制解調(diào)器222等。
在圖2中的所示例子以及上述例子的本意不在于意味著架構(gòu)性的限制。例如,除了采用PDA形式之外,數(shù)據(jù)處理系統(tǒng)200也可以是筆記本計(jì)算機(jī)或者手持計(jì)算機(jī)。數(shù)據(jù)處理系統(tǒng)200也可以是信息站或者Web設(shè)備。
本發(fā)明的過程可以通過處理器202使用由計(jì)算機(jī)實(shí)施的指令來執(zhí)行,這些指令可以位于如主存儲(chǔ)器204、存儲(chǔ)器224這樣的存儲(chǔ)器中或者一個(gè)或多個(gè)外圍設(shè)備226-230中。
還可以為訪問存儲(chǔ)器224提供附加設(shè)備,例如直接存儲(chǔ)器訪問(DMA)控制器207。DMA控制器207在圖中表示為連接到系統(tǒng)總線206;然而應(yīng)當(dāng)理解DMA控制器(或者可能是第二DMA控制器)可以連接到外部總線,該外部總線又連接到其它IO主控設(shè)備,比如數(shù)字信號(hào)處理器(DSP)。DMA控制器207根據(jù)已建立的存儲(chǔ)器訪問技術(shù)利用標(biāo)準(zhǔn)的頁面框架表等訪問存儲(chǔ)器。
在比如圖2的數(shù)據(jù)處理系統(tǒng)這樣的數(shù)據(jù)處理系統(tǒng)中實(shí)施本發(fā)明的特征。本發(fā)明的所述實(shí)施例提供了允許IO適配器設(shè)備驅(qū)動(dòng)程序維護(hù)它的自有IO DMA地址映射的新應(yīng)用編程接口(API)集。這些新API的實(shí)施實(shí)現(xiàn)了避免IO DMA地址分段也減少了執(zhí)行地址映射所要求的CPU周期(即等待)。因此,這些新API可度量地改進(jìn)了系統(tǒng)的性能。
根據(jù)一個(gè)實(shí)施例,將新API實(shí)施為具有以下提供的格式的命令。這些命令和它們各自所利用的參數(shù)的描述或者定義包括(API_1)IO address=IO DMA_ADDRESS REQUEST(size),其中“IO address”是如下返回值,該返回值是內(nèi)核(OS)已經(jīng)指定給調(diào)用程序的IO DMA地址空間的開始,而“size”是調(diào)用程序所請(qǐng)求的鄰接地址空間的大小。
(API_2)VIRT_TO_DMA_MAPPING(virt,DMA,size),其中“Virt”是需要映射到IO DMA地址空間的虛擬存儲(chǔ)器地址,“DMA”是驅(qū)動(dòng)程序請(qǐng)求內(nèi)核映射到虛擬地址的DMA地址,而“Size”同樣是映射的大小;以及(API_3)IO_DMA_ADDRESS_FREE(IO address,size),其中IO地址是驅(qū)動(dòng)程序希望釋放回到內(nèi)核的IO DMA地址的開始,而“size”是調(diào)用程序希望歸還到內(nèi)核的鄰接地址空間的大小,該地址空間可以重新分配給隨后的地址請(qǐng)求。
利用這些新API,設(shè)備驅(qū)動(dòng)程序能夠提供以下描述的若干高級(jí)功能,這些功能通過在圖3流程圖內(nèi)圖示的過程來說明。這里描述的具體地址(數(shù)字)和/或大小僅僅是為了說明而提供的而本意不在于意味著對(duì)本發(fā)明的任何限制。該過程始于塊302,該塊示出了在IO適配器的IPL調(diào)用期間DMA地址請(qǐng)求的發(fā)起。作為例子,進(jìn)行以下設(shè)備驅(qū)動(dòng)程序調(diào)用(API_1)IO_address=IO_DMA_ADDRESS_REQUEST(0x100000)。
根據(jù)本發(fā)明,以上API調(diào)用出現(xiàn)在適配器IPL時(shí)間期間。在API調(diào)用之后,那一適配器的IO地址接收數(shù)值0xF0001000。內(nèi)核進(jìn)而將IO_DMA地址空間0xE0001000到0xF0101000指定給設(shè)備驅(qū)動(dòng)程序,如在塊304處所示。在運(yùn)行時(shí)間期間,設(shè)備驅(qū)動(dòng)程序分配系統(tǒng)存儲(chǔ)器(虛擬地址),如在塊306處所示,而在塊308處,設(shè)備驅(qū)動(dòng)程序調(diào)用新API(API_2)以便映射到具體的IO DMA地址,該地址是驅(qū)動(dòng)程序在IPL時(shí)間期間請(qǐng)求過的并且是由驅(qū)動(dòng)程序維護(hù)的。這一功能由比如如下調(diào)用這樣的API_2調(diào)用來提供VIRT_TO_DMA_MAPPING(0x56780000,0xF0001000,0x4000)利用這一調(diào)用,驅(qū)動(dòng)程序請(qǐng)求內(nèi)核將系統(tǒng)存儲(chǔ)器從0x56780000...0x56784000映射到IO DMA地址空間0xF0001000...0xF0005000。
如在塊310處所示,設(shè)備驅(qū)動(dòng)程序能夠使用比如如下調(diào)用這樣的API_2調(diào)用來請(qǐng)求任一數(shù)目的其它映射VIRT_TO_DMA_MAPPING(0x77780000,0xF0005000,0x1000)利用這一調(diào)用,驅(qū)動(dòng)程序請(qǐng)求內(nèi)核將系統(tǒng)存儲(chǔ)器從0x77780000...0x77781000映射到IO DMA地址空間0xF0005000...0xF0006000。
最后,在塊312處,驅(qū)動(dòng)程序監(jiān)視何時(shí)不再需要預(yù)先分配的IODMA地址這一指示。跟隨在塊312處的這一確定之后,驅(qū)動(dòng)程序?qū)ODMA地址返回到內(nèi)核,如在塊314處所示。在一個(gè)實(shí)施例中,IO DMA地址的返回只有在驅(qū)動(dòng)程序?qū)⒁P(guān)閉設(shè)備時(shí)才發(fā)生。這一過程可以(例如)涉及到如下API_3功能調(diào)用IO_DMA_ADDRESS_FREE(0XF0001000,0x100000)利用這一調(diào)用,設(shè)備驅(qū)動(dòng)程序?qū)O DMA地址空間0xF0001000...0xF0101000釋放給內(nèi)核。
利用上述新API,設(shè)備驅(qū)動(dòng)程序能夠維護(hù)來自IPL的IO DMA地址空間,而不會(huì)造成在隨后請(qǐng)求/需要空間時(shí)引起嘗試找到鄰接地址空間的等待。本發(fā)明保證了IO DMA地址空間的鄰接大小在適配器希望利用鄰接空間時(shí)將總是可供適配器隨后加以利用。另外,本發(fā)明使得內(nèi)核能夠?qū)嵸|(zhì)上消除在分段的存儲(chǔ)器空間內(nèi)搜索自由IO DMA地址空間這一需要。IO DMA地址的映射由設(shè)備驅(qū)動(dòng)程序而不是內(nèi)核提供。最后,本發(fā)明實(shí)現(xiàn)了減少映射IO DMA地址空間所需要的CPU周期的數(shù)目(等待),并且有助于防止內(nèi)核中的IO DMA地址分段。
作為最后的內(nèi)容,重要的是,盡管在具有已安裝的管理軟件的完全功能計(jì)算機(jī)系統(tǒng)背景中已經(jīng)并且將繼續(xù)描述本發(fā)明的說明性實(shí)施例,但是本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,本發(fā)明的說明性實(shí)施例的軟件方面能夠用各種形式作為程序產(chǎn)品來分布,并且無論用來實(shí)際地實(shí)現(xiàn)該分布的信號(hào)承載介質(zhì)的特定類型如何,本發(fā)明的說明性實(shí)施例都將同樣地適用。信號(hào)承載介質(zhì)的例子包括比如軟盤、硬盤驅(qū)動(dòng)、CD ROM這樣的可記錄型介質(zhì)以及比如數(shù)字和模擬通信鏈路這樣的傳輸型介質(zhì)。
盡管已經(jīng)參照優(yōu)選實(shí)施例特定地示出和描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員將理解到,在不脫離本發(fā)明的精神和范圍的情況下,可以在本發(fā)明中做出形式和細(xì)節(jié)上的各種變化。
權(quán)利要求
1.一種數(shù)據(jù)處理系統(tǒng),包括包括物理地址空間的存儲(chǔ)器;直接存儲(chǔ)器訪問(DMA)控制器;操作系統(tǒng)(OS)內(nèi)核,控制對(duì)所述存儲(chǔ)器的訪問并且與所述DMA控制器通信以便完成虛擬到真實(shí)的存儲(chǔ)器訪問;與所述OS相關(guān)聯(lián)的設(shè)備驅(qū)動(dòng)程序,所述設(shè)備驅(qū)動(dòng)程序包括用于實(shí)施應(yīng)用編程接口(API)的邏輯,所述API使得所述設(shè)備驅(qū)動(dòng)程序能夠在初始程序起動(dòng)(IPL)期間將具體的鄰接IO DMA地址空間分配給適配器/IO設(shè)備,其中所分配的IO DMA地址空間隨后用來執(zhí)行與那一IO設(shè)備相關(guān)聯(lián)的DMA映射操作,而在所述IO設(shè)備要求鄰接DMA地址空間時(shí)不引起搜索所述鄰接DMA地址空間的延遲。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理系統(tǒng),其中所述API包括實(shí)施為第一命令的第一API,所述第一命令包括針對(duì)分配具體IODMA地址空間的請(qǐng)求,所述地址空間包括開始IO DMA地址和隨后DMA映射所要求的鄰接DM A地址空間的所需大小,其中所述第一API的發(fā)出觸發(fā)所述內(nèi)核將所述具體IO DMA地址空間指定給所述IO設(shè)備;以及同樣實(shí)施為第二命令的第二API,所述第二命令在所述IO設(shè)備隨后要求從虛擬地址空間到所述先前分配的IO DMA地址空間的映射時(shí)觸發(fā)所述映射。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理系統(tǒng),其中所述API還包括實(shí)施為第三命令的第三API,所述第三命令將所分配的IO DMA地址空間釋放回到所述內(nèi)核,其中所述IO DMA地址空間然后可以分配給經(jīng)歷IPL的另一IO設(shè)備。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理系統(tǒng),其中所述設(shè)備驅(qū)動(dòng)程序還包括用于以下操作的邏輯在所述IO設(shè)備的適配器的所述IPL期間,利用所述第一API命令發(fā)出第一API調(diào)用以便為所述設(shè)備保留鄰接IO DMA地址空間,其中所述第一API調(diào)用包括所請(qǐng)求的地址空間的大小;以及在所述IPL期間,調(diào)用第二API以便將虛擬存儲(chǔ)器地址空間映射到所述驅(qū)動(dòng)程序所請(qǐng)求的所述鄰接IO DMA地址空間,其中所述開始IO DMA地址和所述DMA地址空間的大小由所述驅(qū)動(dòng)程序維護(hù)。
5.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理系統(tǒng),其中所述OS內(nèi)核包括用于以下操作的功能代碼當(dāng)在適配器的IPL期間收到第一API調(diào)用時(shí),向所述適配器指定具有具體開始IO DMA地址的所請(qǐng)求的大小的鄰接IO DMA地址空間;在向所述第一適配器指定所述DMA地址空間的同時(shí)后續(xù)地阻止將指定DMA地址空間重復(fù)指定給經(jīng)歷IPL的另一適配器;以及在從所述適配器的設(shè)備驅(qū)動(dòng)程序收到將所述系統(tǒng)存儲(chǔ)器的虛擬地址空間映射到指定DMA地址空間的隨后請(qǐng)求時(shí),將所述DMA地址空間自動(dòng)地映射到所提供的虛擬地址空間,而無需啟動(dòng)對(duì)其它DMA地址空間的搜索以便完成所述映射。
6.根據(jù)權(quán)利要求5所述的數(shù)據(jù)處理系統(tǒng),其中所述OS內(nèi)核還包括用于以下操作的功能代碼在收到對(duì)所述地址空間解除分配的請(qǐng)求時(shí),將所述IO DMA地址空間返回到所述內(nèi)核,其中在另一適配器的IPL期間可以完成向所述另一適配器的隨后分配。
7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)處理系統(tǒng),其中所述用于將所述地址空間返回到所述內(nèi)核的功能代碼用于以下功能的代碼監(jiān)視所述設(shè)備驅(qū)動(dòng)程序?qū)λ鯥O驅(qū)動(dòng)程序的關(guān)閉;以及當(dāng)所述IO設(shè)備正在由所述設(shè)備驅(qū)動(dòng)程序關(guān)閉時(shí)對(duì)所述IO地址空間解除分配。
8.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理系統(tǒng),其中所述API使得所述IO適配器的所述設(shè)備驅(qū)動(dòng)程序能夠維護(hù)和執(zhí)行它的自有IO DMA地址映射;以及所述API使得實(shí)質(zhì)上減少了IO DMA地址分段,并且減少了為了執(zhí)行要求鄰接IO DMA地址空間的DMA地址映射而產(chǎn)生的等待。
9.一種在數(shù)據(jù)處理系統(tǒng)中的方法,包括在用于設(shè)備的適配器的初始程序起動(dòng)(IPL)期間,經(jīng)由設(shè)備驅(qū)動(dòng)程序邏輯所提供的第一應(yīng)用編程接口(API),動(dòng)態(tài)地觸發(fā)向所述設(shè)備預(yù)先分配鄰接輸入/輸出(IO)直接存儲(chǔ)器訪問(DMA)地址空間;為那一設(shè)備后續(xù)地維護(hù)所述預(yù)先分配的DMA地址空間;以及當(dāng)所述設(shè)備隨后要求DMA映射時(shí),經(jīng)由第二API將所述數(shù)據(jù)處理系統(tǒng)的存儲(chǔ)器的虛擬地址空間自動(dòng)地映射到所述預(yù)先分配的DMA地址空間。
10.根據(jù)權(quán)利要求9所述的方法,還包括監(jiān)視所述設(shè)備驅(qū)動(dòng)程序?qū)λ鲵?qū)動(dòng)程序的關(guān)閉;當(dāng)所述設(shè)備正在由所述設(shè)備驅(qū)動(dòng)程序關(guān)閉時(shí)對(duì)所述IO地址空間解除分配;以及在收到對(duì)所述地址空間解除分配的請(qǐng)求時(shí),將所述IO DMA地址和地址空間返回到所述內(nèi)核,其中在另一適配器的IPL期間可以完成向所述另一適配器的隨后分配。
11.根據(jù)權(quán)利要求9所述的方法,其中所述第一API實(shí)施為第一命令,所述第一命令包括對(duì)分配具體IODMA地址空間的請(qǐng)求,所述地址空間包括開始IO DMA地址和隨后DMA映射所要求的鄰接DMA地址空間的所需大小,其中所述第一API的發(fā)出觸發(fā)所述內(nèi)核將所述具體IO DMA地址空間指定給所述IO設(shè)備;以及所述第二API實(shí)施為第二命令,所述第二命令在所述IO設(shè)備隨后要求從虛擬地址空間到所述先前分配的IO DMA地址空間的映射時(shí)觸發(fā)所述映射。
12.根據(jù)權(quán)利要求10所述的方法,其中所述第三API是實(shí)施為第三命令的第三API,所述第三命令將所分配的IO DMA地址空間釋放回到所述內(nèi)核,其中所述IO DMA地址空間然后可以分配給經(jīng)歷IPL的另一IO設(shè)備。
13.根據(jù)權(quán)利要求9所述的方法,其中所述動(dòng)態(tài)地觸發(fā)還包括在所述IO設(shè)備的適配器的所述IPL期間,利用所述第一API命令發(fā)出第一API調(diào)用以便為所述設(shè)備保留鄰接IO DMA地址空間,其中所述第一API調(diào)用包括所請(qǐng)求的地址空間的大??;以及在所述IPL期間,調(diào)用第二API以便將虛擬存儲(chǔ)器地址空間映射到所述驅(qū)動(dòng)程序所請(qǐng)求的所述鄰接IO DMA地址空間,其中所述開始1O DMA地址和所述DMA地址空間的大小由所述驅(qū)動(dòng)程序維護(hù)。
14.根據(jù)權(quán)利要求9所述的方法,還包括當(dāng)在適配器的IPL期間收到第一API調(diào)用時(shí),向所述適配器指定具有具體開始IO DMA地址的所請(qǐng)求的大小的鄰接IO DMA地址空間;在向所述第一適配器指定所述DMA地址空間的同時(shí)后續(xù)地阻止將指定DMA地址空間重復(fù)指定給經(jīng)歷IPL的另一適配器;以及在從所述適配器的設(shè)備驅(qū)動(dòng)程序收到將所述系統(tǒng)存儲(chǔ)器的虛擬地址空間映射到指定DMA地址空間的隨后請(qǐng)求時(shí),將所述DMA地址空間自動(dòng)地映射到所提供的虛擬地址空間,而不需啟動(dòng)對(duì)其它DMA地址空間的搜索以便完成所述映射。
15.根據(jù)權(quán)利要求9所述的方法,其中所述API使得所述IO適配器的所述設(shè)備驅(qū)動(dòng)程序能夠維護(hù)和執(zhí)行它的自有IO DMA地址映射;以及所述API使得實(shí)質(zhì)上減少了IO DMA地址分段,并且減少為了執(zhí)行要求鄰接IO DMA地址空間的DMA地址映射而產(chǎn)生的等待。
全文摘要
一種方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,用于消除在按照設(shè)備驅(qū)動(dòng)程序的IO DMA請(qǐng)求來搜索鄰接存儲(chǔ)器空間時(shí)產(chǎn)生的等待。在操作系統(tǒng)(OS)代碼內(nèi)提供三個(gè)新應(yīng)用編程接口(API),該應(yīng)用編程接口允許一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)程序(1)在IPL期間從OS預(yù)先請(qǐng)求和預(yù)先分配IO DMA地址范圍并且維護(hù)該地址的控制;(2)將系統(tǒng)(虛擬/物理)地址范圍映射到具體預(yù)先分配的IO DMA地址范圍;以及(3)在不再需要該空間時(shí)將預(yù)先分配的IO DMA地址空間釋放回到內(nèi)核。利用這些API實(shí)現(xiàn)了設(shè)備驅(qū)動(dòng)程序所維護(hù)的高級(jí)IO DMA地址映射技術(shù),而指定/分配的IO DMA地址空間不再分段,并且實(shí)質(zhì)上減少/消除了完成IO DMA映射的等待。
文檔編號(hào)G06F13/28GK101042684SQ20071013598
公開日2007年9月26日 申請(qǐng)日期2007年3月14日 優(yōu)先權(quán)日2006年3月21日
發(fā)明者藍(lán)燕虹, 熊文, 許健平, D·米歇爾 申請(qǐng)人:國際商業(yè)機(jī)器公司