改进系统dma映射同时实质上减少存储器分段的系统和方法

文档序号:6611166阅读:215来源:国知局
专利名称:改进系统dma映射同时实质上减少存储器分段的系统和方法
技术领域
本发明一般地涉及计算机系统,特别地涉及计算机系统中的存储器分配。本发明更特别地涉及一种用于提供改进的DMA映射的方法、系统和计算机程序产品。
背景技术
计算机系统包括应要求动态地分配给执行应用程序和输入/输出(IO)设备(或者关联适配器)的有限物理存储器资源。经由转换成如下真实(或者物理)地址的虚拟地址来访问存储器,该真实(或者物理)地址对应于存储器内的物理位置。完成这些分配和/或存储器地址空间访问的一种方法是经由从IO适配器发出的直接存储器访问(DMA)操作。
在当今的许多计算机系统中,系统的物理存储器地址空间通常大于IO地址空间。利用这些计算机系统,为便于一个或多个IO适配器访问整个系统物理存储器,要求一些转换机制。例如,32位IO地址子系统要求某种存储器映射以便允许IO适配器访问大于4GB的系统存储器地址。目前,多数操作系统(OS)将(存储器中的)最大页面大小设置为4K字节(4K),因此每个映射页面是4K字节。下面的表1图示了地址映射表的例子,该例子示出了就给定的4K页面基地址而言在系统存储器地址与IO DMA(直接存储器访问)之间的转换。
表1


为了满足高性能IO适配器的新要求,该数据缓冲映射大小需要大于4K字节,例如具体来说是利用以太网巨型框架和大型TCP分段卸载(TSO)发送。为了实现这一较大数据缓冲映射大小的支持,OS的开发者已经改进了OS的映射方法以便允许连续IO DMA地址的大于4K字节的地址映射。
图1是图示了由设备驱动程序用来将系统物理地址映射到IODMA地址的现有技术方法的流程图。所示方法描述了AIX OS功能。然而,所呈现的流程图是作为一个例子而提供的,并且也可以应用于其它OS。
如图所示,该过程始于在其中初始化计算机系统(或者IO适配器)的块102。在IO适配器的初始化过程中,设备驱动程序进行系统调用以便登记驱动程序进行操作所需要的IO地址空间的大小,如在块104处所述。D_MAP_INIT是这一系统调用的例子。接着在块106处,设备驱动程序调用存储器分配例程以便分配系统存储器(缓冲器)。然后,设备驱动程序在块108处调用系统映射例程以便将系统存储器映射到IO DMA地址。这一系统调用的例子是D_MAP_PAGE/D_MAP_LIST。
一旦进行这一调用,设备驱动程序监视何时不再需要IO DMA地址,如在判决块110处所示。如果仍然需要IO DMA地址,则适配器维护该空间,如在块116处所示。然而,当不再需要IO DMA地址时,设备驱动程序调用内核解映射例程以便将该IO DMA地址返回到内核,如在块112处所示。然后,设备驱动程序/OS将分配的存储器释放回到内核,如在块114处所示。完成将所分配的存储器返回到内核的这些系统调用的例子是D_UNMAP_PAGE/D_UNMAP_LIST和D_MAP_CLEAR。
当随着时间推移越来越多的适配器请求存储器地址空间时,IODMA地址空间变得分段越来越多。当这一分段超过阈值点时,由于大型IO DMA空间的多个部分被指定给DMA请求,所以可用空间的邻接性降低,而且变得更加难于为指定给新DMA请求而找到邻接空间。
此外,随着分段水平增加,从OS获得(为邻接的地址)分配IODMA地址的等待也会增加。这一增加的等待可能造成可度量的处理延迟,并且由此对整体系统性能具有实质上的负面影响。尽管这些延迟在当今多数计算机系统的操作中司空见惯,但是它们是所不希望的。因此,系统在一开始以相对快的速度执行DMA地址分配,而在操作一段时间之后最终放松实质上的性能速度(即要求增加的延迟)。因此这些系统表现得没有在系统初始启动时那样好。
就上述以及其它类型的常规DMA映射(例如使用应用编程接口(API))而言,存在若干局限。在这些局限之中的是下列各项(1)尽管驱动程序能够在IPL时间期间预先登记驱动程序所需要的I/ODMA地址的大小,但是预先登记并不保证地址映射操作一直成功。也就是说,如果存储器空间耗尽驱动程序所请求的邻接地址空间的数量则映射可能失败;以及(2)系统运行时间越长,IO DMA地址空间将变得分段越多,而为IO DMA映射获得大型邻接地址空间所要求的时间(即操作等待)越长。如上所言,这一增加的等待负面地影响了整体系统性能。

发明内容
公开了一种方法、系统和计算机程序产品,用于当按照设备驱动程序的IO DMA请求对邻接存储器空间的搜索出现在初始程序加载器(IPL)之后的某一时刻时,通过消除在该搜索中的等待来增加计算机系统中IO DMA操作的效率。在操作系统(OS)代码内提供三个新应用编程接口(API),该应用编程接口允许一个或多个设备驱动程序(1)在IPL期间从OS预先请求和预先分配IO DMA地址范围并且维护该地址的控制;(2)将系统(虚拟/物理)地址范围映射到具体预先分配的IO DMA地址范围;以及,(3)在不再需要空间时将预先分配的IO DMA地址空间释放回到内核。利用这些API实现了设备驱动程序所维护的高级IO DMA地址映射技术,而指定/分配的IO DMA地址空间不再分段,并且实质上减少/消除了完成IO DMA映射的等待。
本发明的上述以及附加目的、特征和优点将在以下具体书面描述中变得明显。


通过参照在结合附图时阅读的对说明性实施例的以下具体描述,将最佳地理解本发明本身及其最佳实施方式、更多目的和优点,在附图中图1是根据现有技术分配DMA地址空间的过程的流程图;图2是图示了根据本发明优选实施例的本发明可以实施于其中的数据处理系统的框图;以及图3是根据本发明一个实施例利用API来分配DMA地址空间的过程的流程图。
具体实施例方式
本发明提供了一种方法、系统和计算机程序产品,用于当按照设备驱动程序的IO DMA请求对邻接存储器空间的搜索出现在初始程序加载器(IPL)之后的某一时刻时,通过消除在该搜索中的等待来增加计算机系统中IO DMA操作的效率。在操作系统(OS)代码内提供三个新应用编程接口(API),该应用编程接口允许一个或多个设备驱动程序(1)在IPL期间从OS预先请求和预先分配IO DMA地址范围并且维护该地址的控制;(2)将系统(虚拟/物理)地址范围映射到具体预先分配的IO DMA地址范围;以及,(3)在不再需要空间时将预先分配的IO DMA地址空间释放回到内核。利用这些API实现了设备驱动程序所维护的高级IO DMA地址映射技术,而指定/分配的IODMA地址空间不再分段,并且实质上减少/消除了完成IO DMA映射的等待。
现在参照图2,示出了本发明可以实施于其中的数据处理系统的框图。数据处理系统200是计算机的例子,可以实施本发明的过程的代码或者指令位于该计算机中。数据处理系统200利用外围组件互连(PCI)本地总线架构。虽然所示例子利用PCI总线,但是可以使用其它总线架构,比如加速图形端口(AGP)和工业标准架构(ISA)。处理器202和主存储器204通过PCI桥接器208连接到PC本地总线206。PCI桥接器208也可以包括用于处理器202的集成存储器控制器和高速缓存存储器。通向PCI本地总线206的附加连接可以通过直接组件连接或者通过附加板来实现。
在所示例子中,局域网(LAN)适配器210、小型计算机系统接口(SCSI)主机总线适配器212、扩展总线接口214通过直接组件连接来连接到PCI本地总线206。对照而言,音频适配器216、图形适配器218和音频/视频适配器219通过插入到扩展槽中的附加板连接到PCI本地总线206。扩展总线接口214为键盘和鼠标适配器220、调制解调器222和附加存储器224提供连接。SCSI主机总线适配器212为硬盘驱动226、磁带驱动228和CD-ROM驱动230提供连接。典型的PCI本地总线实施将支持三个或者四个PCI扩展槽或者附加连接器。
操作系统(OS)在处理器202上运行并且用来协调图2中数据处理系统200内的各种组件和提供这些组件的控制。操作系统可以是可在商业上获得的操作系统,比如可从Microsoft公司获得的WindowsXP。比如Java这样的面向对象的编程系统可以与该操作系统相结合地运行并且提供从在数据处理系统200上执行的Java程序或者应用程序到该操作系统的调用。“Java”是Sun Microsystems公司的商标。用于操作系统、面向对象的编程系统和应用程序或者程序的指令位于比如硬盘驱动226这样的存储设备上,并且可以加载到主存储器204中以供处理器202执行。在图2中描绘的数据处理系统例如可以是IBMeServer pSeries系统,该系统是纽约州Armonk国际商务机器公司的产品,运行高级交互执行(AIX)操作系统或者LINUX操作系统。
本领域技术人员将认识到图2中的硬件可以根据实施而变化。除了使用在图2中描绘的硬件之外或者代替使用这样的硬件,可以使用其它内部硬件或者外围设备,比如快速只读存储器(ROM)、等效非易失性存储器或者光盘驱动等。本发明的过程也可以应用于多处理器数据处理系统。
例如,数据处理系统200如果任选地配置为网络计算机则可以不包括SCSI主机总线适配器212、硬盘驱动226、磁带驱动228和CD-ROM 230。在那一情况下,将恰当地称为客户机计算机的计算机包括某类网络通信接口,比如网络适配器210、调制解调器222等。
在图2中的所示例子以及上述例子的本意不在于意味着架构性的限制。例如,除了采用PDA形式之外,数据处理系统200也可以是笔记本计算机或者手持计算机。数据处理系统200也可以是信息站或者Web设备。
本发明的过程可以通过处理器202使用由计算机实施的指令来执行,这些指令可以位于如主存储器204、存储器224这样的存储器中或者一个或多个外围设备226-230中。
还可以为访问存储器224提供附加设备,例如直接存储器访问(DMA)控制器207。DMA控制器207在图中表示为连接到系统总线206;然而应当理解DMA控制器(或者可能是第二DMA控制器)可以连接到外部总线,该外部总线又连接到其它IO主控设备,比如数字信号处理器(DSP)。DMA控制器207根据已建立的存储器访问技术利用标准的页面框架表等访问存储器。
在比如图2的数据处理系统这样的数据处理系统中实施本发明的特征。本发明的所述实施例提供了允许IO适配器设备驱动程序维护它的自有IO DMA地址映射的新应用编程接口(API)集。这些新API的实施实现了避免IO DMA地址分段也减少了执行地址映射所要求的CPU周期(即等待)。因此,这些新API可度量地改进了系统的性能。
根据一个实施例,将新API实施为具有以下提供的格式的命令。这些命令和它们各自所利用的参数的描述或者定义包括(API_1)IO address=IO DMA_ADDRESS REQUEST(size),其中“IO address”是如下返回值,该返回值是内核(OS)已经指定给调用程序的IO DMA地址空间的开始,而“size”是调用程序所请求的邻接地址空间的大小。
(API_2)VIRT_TO_DMA_MAPPING(virt,DMA,size),其中“Virt”是需要映射到IO DMA地址空间的虚拟存储器地址,“DMA”是驱动程序请求内核映射到虚拟地址的DMA地址,而“Size”同样是映射的大小;以及(API_3)IO_DMA_ADDRESS_FREE(IO address,size),其中IO地址是驱动程序希望释放回到内核的IO DMA地址的开始,而“size”是调用程序希望归还到内核的邻接地址空间的大小,该地址空间可以重新分配给随后的地址请求。
利用这些新API,设备驱动程序能够提供以下描述的若干高级功能,这些功能通过在图3流程图内图示的过程来说明。这里描述的具体地址(数字)和/或大小仅仅是为了说明而提供的而本意不在于意味着对本发明的任何限制。该过程始于块302,该块示出了在IO适配器的IPL调用期间DMA地址请求的发起。作为例子,进行以下设备驱动程序调用(API_1)IO_address=IO_DMA_ADDRESS_REQUEST(0x100000)。
根据本发明,以上API调用出现在适配器IPL时间期间。在API调用之后,那一适配器的IO地址接收数值0xF0001000。内核进而将IO_DMA地址空间0xE0001000到0xF0101000指定给设备驱动程序,如在块304处所示。在运行时间期间,设备驱动程序分配系统存储器(虚拟地址),如在块306处所示,而在块308处,设备驱动程序调用新API(API_2)以便映射到具体的IO DMA地址,该地址是驱动程序在IPL时间期间请求过的并且是由驱动程序维护的。这一功能由比如如下调用这样的API_2调用来提供VIRT_TO_DMA_MAPPING(0x56780000,0xF0001000,0x4000)利用这一调用,驱动程序请求内核将系统存储器从0x56780000...0x56784000映射到IO DMA地址空间0xF0001000...0xF0005000。
如在块310处所示,设备驱动程序能够使用比如如下调用这样的API_2调用来请求任一数目的其它映射VIRT_TO_DMA_MAPPING(0x77780000,0xF0005000,0x1000)利用这一调用,驱动程序请求内核将系统存储器从0x77780000...0x77781000映射到IO DMA地址空间0xF0005000...0xF0006000。
最后,在块312处,驱动程序监视何时不再需要预先分配的IODMA地址这一指示。跟随在块312处的这一确定之后,驱动程序将IODMA地址返回到内核,如在块314处所示。在一个实施例中,IO DMA地址的返回只有在驱动程序将要关闭设备时才发生。这一过程可以(例如)涉及到如下API_3功能调用IO_DMA_ADDRESS_FREE(0XF0001000,0x100000)利用这一调用,设备驱动程序将IO DMA地址空间0xF0001000...0xF0101000释放给内核。
利用上述新API,设备驱动程序能够维护来自IPL的IO DMA地址空间,而不会造成在随后请求/需要空间时引起尝试找到邻接地址空间的等待。本发明保证了IO DMA地址空间的邻接大小在适配器希望利用邻接空间时将总是可供适配器随后加以利用。另外,本发明使得内核能够实质上消除在分段的存储器空间内搜索自由IO DMA地址空间这一需要。IO DMA地址的映射由设备驱动程序而不是内核提供。最后,本发明实现了减少映射IO DMA地址空间所需要的CPU周期的数目(等待),并且有助于防止内核中的IO DMA地址分段。
作为最后的内容,重要的是,尽管在具有已安装的管理软件的完全功能计算机系统背景中已经并且将继续描述本发明的说明性实施例,但是本领域技术人员将认识到,本发明的说明性实施例的软件方面能够用各种形式作为程序产品来分布,并且无论用来实际地实现该分布的信号承载介质的特定类型如何,本发明的说明性实施例都将同样地适用。信号承载介质的例子包括比如软盘、硬盘驱动、CD ROM这样的可记录型介质以及比如数字和模拟通信链路这样的传输型介质。
尽管已经参照优选实施例特定地示出和描述了本发明,但是本领域技术人员将理解到,在不脱离本发明的精神和范围的情况下,可以在本发明中做出形式和细节上的各种变化。
权利要求
1.一种数据处理系统,包括包括物理地址空间的存储器;直接存储器访问(DMA)控制器;操作系统(OS)内核,控制对所述存储器的访问并且与所述DMA控制器通信以便完成虚拟到真实的存储器访问;与所述OS相关联的设备驱动程序,所述设备驱动程序包括用于实施应用编程接口(API)的逻辑,所述API使得所述设备驱动程序能够在初始程序起动(IPL)期间将具体的邻接IO DMA地址空间分配给适配器/IO设备,其中所分配的IO DMA地址空间随后用来执行与那一IO设备相关联的DMA映射操作,而在所述IO设备要求邻接DMA地址空间时不引起搜索所述邻接DMA地址空间的延迟。
2.根据权利要求1所述的数据处理系统,其中所述API包括实施为第一命令的第一API,所述第一命令包括针对分配具体IODMA地址空间的请求,所述地址空间包括开始IO DMA地址和随后DMA映射所要求的邻接DM A地址空间的所需大小,其中所述第一API的发出触发所述内核将所述具体IO DMA地址空间指定给所述IO设备;以及同样实施为第二命令的第二API,所述第二命令在所述IO设备随后要求从虚拟地址空间到所述先前分配的IO DMA地址空间的映射时触发所述映射。
3.根据权利要求1所述的数据处理系统,其中所述API还包括实施为第三命令的第三API,所述第三命令将所分配的IO DMA地址空间释放回到所述内核,其中所述IO DMA地址空间然后可以分配给经历IPL的另一IO设备。
4.根据权利要求1所述的数据处理系统,其中所述设备驱动程序还包括用于以下操作的逻辑在所述IO设备的适配器的所述IPL期间,利用所述第一API命令发出第一API调用以便为所述设备保留邻接IO DMA地址空间,其中所述第一API调用包括所请求的地址空间的大小;以及在所述IPL期间,调用第二API以便将虚拟存储器地址空间映射到所述驱动程序所请求的所述邻接IO DMA地址空间,其中所述开始IO DMA地址和所述DMA地址空间的大小由所述驱动程序维护。
5.根据权利要求1所述的数据处理系统,其中所述OS内核包括用于以下操作的功能代码当在适配器的IPL期间收到第一API调用时,向所述适配器指定具有具体开始IO DMA地址的所请求的大小的邻接IO DMA地址空间;在向所述第一适配器指定所述DMA地址空间的同时后续地阻止将指定DMA地址空间重复指定给经历IPL的另一适配器;以及在从所述适配器的设备驱动程序收到将所述系统存储器的虚拟地址空间映射到指定DMA地址空间的随后请求时,将所述DMA地址空间自动地映射到所提供的虚拟地址空间,而无需启动对其它DMA地址空间的搜索以便完成所述映射。
6.根据权利要求5所述的数据处理系统,其中所述OS内核还包括用于以下操作的功能代码在收到对所述地址空间解除分配的请求时,将所述IO DMA地址空间返回到所述内核,其中在另一适配器的IPL期间可以完成向所述另一适配器的随后分配。
7.根据权利要求6所述的数据处理系统,其中所述用于将所述地址空间返回到所述内核的功能代码用于以下功能的代码监视所述设备驱动程序对所述IO驱动程序的关闭;以及当所述IO设备正在由所述设备驱动程序关闭时对所述IO地址空间解除分配。
8.根据权利要求1所述的数据处理系统,其中所述API使得所述IO适配器的所述设备驱动程序能够维护和执行它的自有IO DMA地址映射;以及所述API使得实质上减少了IO DMA地址分段,并且减少了为了执行要求邻接IO DMA地址空间的DMA地址映射而产生的等待。
9.一种在数据处理系统中的方法,包括在用于设备的适配器的初始程序起动(IPL)期间,经由设备驱动程序逻辑所提供的第一应用编程接口(API),动态地触发向所述设备预先分配邻接输入/输出(IO)直接存储器访问(DMA)地址空间;为那一设备后续地维护所述预先分配的DMA地址空间;以及当所述设备随后要求DMA映射时,经由第二API将所述数据处理系统的存储器的虚拟地址空间自动地映射到所述预先分配的DMA地址空间。
10.根据权利要求9所述的方法,还包括监视所述设备驱动程序对所述驱动程序的关闭;当所述设备正在由所述设备驱动程序关闭时对所述IO地址空间解除分配;以及在收到对所述地址空间解除分配的请求时,将所述IO DMA地址和地址空间返回到所述内核,其中在另一适配器的IPL期间可以完成向所述另一适配器的随后分配。
11.根据权利要求9所述的方法,其中所述第一API实施为第一命令,所述第一命令包括对分配具体IODMA地址空间的请求,所述地址空间包括开始IO DMA地址和随后DMA映射所要求的邻接DMA地址空间的所需大小,其中所述第一API的发出触发所述内核将所述具体IO DMA地址空间指定给所述IO设备;以及所述第二API实施为第二命令,所述第二命令在所述IO设备随后要求从虚拟地址空间到所述先前分配的IO DMA地址空间的映射时触发所述映射。
12.根据权利要求10所述的方法,其中所述第三API是实施为第三命令的第三API,所述第三命令将所分配的IO DMA地址空间释放回到所述内核,其中所述IO DMA地址空间然后可以分配给经历IPL的另一IO设备。
13.根据权利要求9所述的方法,其中所述动态地触发还包括在所述IO设备的适配器的所述IPL期间,利用所述第一API命令发出第一API调用以便为所述设备保留邻接IO DMA地址空间,其中所述第一API调用包括所请求的地址空间的大小;以及在所述IPL期间,调用第二API以便将虚拟存储器地址空间映射到所述驱动程序所请求的所述邻接IO DMA地址空间,其中所述开始1O DMA地址和所述DMA地址空间的大小由所述驱动程序维护。
14.根据权利要求9所述的方法,还包括当在适配器的IPL期间收到第一API调用时,向所述适配器指定具有具体开始IO DMA地址的所请求的大小的邻接IO DMA地址空间;在向所述第一适配器指定所述DMA地址空间的同时后续地阻止将指定DMA地址空间重复指定给经历IPL的另一适配器;以及在从所述适配器的设备驱动程序收到将所述系统存储器的虚拟地址空间映射到指定DMA地址空间的随后请求时,将所述DMA地址空间自动地映射到所提供的虚拟地址空间,而不需启动对其它DMA地址空间的搜索以便完成所述映射。
15.根据权利要求9所述的方法,其中所述API使得所述IO适配器的所述设备驱动程序能够维护和执行它的自有IO DMA地址映射;以及所述API使得实质上减少了IO DMA地址分段,并且减少为了执行要求邻接IO DMA地址空间的DMA地址映射而产生的等待。
全文摘要
一种方法、系统和计算机程序产品,用于消除在按照设备驱动程序的IO DMA请求来搜索邻接存储器空间时产生的等待。在操作系统(OS)代码内提供三个新应用编程接口(API),该应用编程接口允许一个或多个设备驱动程序(1)在IPL期间从OS预先请求和预先分配IO DMA地址范围并且维护该地址的控制;(2)将系统(虚拟/物理)地址范围映射到具体预先分配的IO DMA地址范围;以及(3)在不再需要该空间时将预先分配的IO DMA地址空间释放回到内核。利用这些API实现了设备驱动程序所维护的高级IO DMA地址映射技术,而指定/分配的IO DMA地址空间不再分段,并且实质上减少/消除了完成IO DMA映射的等待。
文档编号G06F13/28GK101042684SQ20071013598
公开日2007年9月26日 申请日期2007年3月14日 优先权日2006年3月21日
发明者蓝燕虹, 熊文, 许健平, D·米歇尔 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1