专利名称:使用进程调度来提高数据吞吐量的系统和方法
技术领域:
本发明一般涉及计算机数据的处理,具体涉及到为应用程序的处理提供数据的操作。
背景技术:
数据输入/输出(I/O),包括将数据从一个计算机部件传输到另一个计算机部件,通常是数据处理中的限制因素或者瓶颈。例如,在计算机上运行的应用程序典型地依靠较低等级的设备驱动(例如在核心程序模型中)向其提供用于处理的数据。因此程序的性能就依赖于能够提供实现任务所需数据的驱动器的效率。
按照惯例,程序可以通过两种方式从设备驱动器中接受数据。在第一种方式中,如果所请求的数据是现在不可得的,程序发送一个请求来从设备驱动器中接收数据。该请求被异步处理,即程序并不等待设备驱动器来提供所请求的数据,并当数据可得时所请求的数据在滞后的时间被发送给程序。在第二种方式中,数据请求被同步处理。在这种情况下,所请求的数据已经被放置在队列中并能被立即发送来响应请求。这种数据发送的异步处理方法通常很少被选用,因为它导致了真正的处理和存储溢出,由于为跟踪数据请求而对数据结构定位和初始化的需要,也导致异步整体的溢出。而同步方式,相反,没有这种溢出,但是要求驱动器已经具有列队备选的数据来响应应用程序的系统呼叫。因为在发送所请求的数据时没有延迟,在微软Windows平台下同步方式也被称作“快速I/O”,尽管其他平台可能使用不同的术语。因为同步方法具有减少溢出和立即发送数据的优点,应该提高它的的使用率使之超过异步方法的使用率。
发明概述鉴于前面所述,本发明提供一种用于将数据从设备驱动器发送到应用程序的系统极其方法,它通过使用进程调度来提高所请求数据对于立即发送可实现的可能性,从而提高了数据发送中同步处理(例如快速I/O方式)的使用率。当应用程序需要用于处理的数据时,检查由设备驱动器所使用的来向程序发送已经存储好数据的数据队列。如果数据队列中的数据量较低,则修改系统的进程调度来促进设备驱动器的进程,由此给予设备驱动器将更多数据放入数据队列中以供程序消耗的机会。设备驱动器进程的促进可能通过不同方式来完成,包括将应用程序程序进程转为另一个进程(不必须是设备驱动器进程),提高设备驱动器进程的优先级,和/或降低应用程序进程的优先级,等等。
附图概述附
图1是一般举例说明了示范计算机系统的结构图,在其上能实现用于本发明直接设备的对象配额管理。
附图2是实现本发明实施方案的计算机系统的示意图,它提高了将数据从驱动器传送到应用程序的数据请求的同步处理(例如,快速I/O)利用率。
附图3是概括了通过进程调度提高快速I/O使用率的方法的流程图。
附图4是表示了设备驱动器的多种状态及其作为例子的以传统方式使用的异步数据传送的数据队列的示意图。
附图5是表示了设备驱动器的状态及其数据队列的示意图,数据队列作为根据本发明的实施方案通过修改进程调度的方式来提高快速I/O使用率的效果的例子。
发明详述现在来看附图,其中相同的编号指相同的元件,本发明被图解为就如在一个适合的计算环境中被实现。尽管没有要求,本发明将在计算机可执行指令的一般范围内被描述,例如被个人计算机执行的程序模块。通常,程序模块包括规则,程序,对象,构件,数据结构,等等,它们实现特殊任务或者执行特殊抽象数据类型。另外,本领域技术人应当理解本发明可能被其他计算机系统结构来执行,包括手持设备,多处理器系统,基于微处理或可编程客户电器,网络PCs,迷你计算机,大型计算机,等等。本发明可以在分布式计算环境中实现,其中任务可通过由通信网络所连接的远程设备来实现。在分布式计算环境中,程序模块可以即被置于本地也可以被置于远程存储设备中。
下面的描述将以对一般目的的计算设备的描述开始,这些计算设备可能被应用来实现本发明,并且将参考附图2-5更加详细地描述通过进程调度来提高快速数据I/O的本发明的系统和方法。现在来看附图1,以传统个人计算机20的形式表示了的一般目的计算设备,包括处理单元21,系统存储器22,和系统总线23,它连接了包括从系统存储器到处理单元21的多种系统部件,。系统总线23可以是几类总线结构中的任何一种,包括存储总线或者存储控制器,外围设备总线,和用于多种总线结构的本地总线。系统存储器包括只读存储器(ROM)24和随机存取存储器(RAM)25。基础输入/输出系统(BIOS)26被存储在ROM24中,它包括了例如在启动时帮助在个人计算机20内部的元件之间传送信息的基础程序。个人计算机20还包括用于从硬盘60中读写的硬盘驱动器27,用于在可移动磁盘29中读写的磁盘驱动器28,以及用于在可移动光盘31例如CD ROM或者其他光介质中读写的光盘驱动器30。
硬盘驱动器27,磁盘驱动器28,和光盘驱动器30分别通过硬盘驱动器接口32,磁盘驱动器接口33,和光盘驱动器34,连接到系统总线23上。驱动器和它们连带的计算机可读介质,为计算机可读指令、数据接口、程序模块和其他用于个人计算机20的数据提供非易失性的存储器。尽管这里所描述的示范性的环境使用了硬盘60,可移动磁盘29,和可移动光盘31,但对本领域技术人员来说应当理解能够被计算机接受的其他类型的能存储数据的可机读介质,例如,磁带,闪存卡,数字化视频光盘,伯努里式盒式磁盘,随机存取存储器,只读存储器,区域网络存储器,等等也可以在示范性操作环境中使用。
一定数量的程序模块可被存储在包括了操作系统35,一个或多个应用程序36,其他程序模块37,以及程序数据38的硬盘60,磁盘29,光盘31,ROM24或RAM25中。用户可以将命令和信息输入个人计算机20,通过输入设备例如键盘40和点击设备42。其他输入设备(未表示出)可以包括麦克风,控制手柄,游戏垫,圆盘式卫星电视天线,扫描仪,等等。这些及其他输入设备通常通过与系统总线相连的串行接口46连接到处理单元21上,但也可能通过其他的接口,例如并行端口,游戏端口,通用串行总线(USB)或者网络接口卡。监视器47或者其他类型的显示设备也通过接口与系统总线23相连接,例如视频适配器48。除监视器以外,个人计算机还通常包括其他的外部输出设备,这里没有表示,例如话筒和打印机。
个人计算机29可能在一个与一个或多个远程计算机,例如远程计算机49,相逻辑连接的网络工作环境下操作。远程计算机49可以是另一台个人计算机,服务器,路由器,网络计算机,同级设备或者其他普通的网络节点,并且通常包括许多或全部上述个人计算机20的元件,尽管在附图1中是表示了一个存储器设备50。在附图1中描述的逻辑连接包括局域网(LAN)51和广域网(WAN)52。这种网络工作环境在办公室,企业内部计算机网络,企业内部互联网和国际互联网中是很平常的事。
当在局域网网络工作环境中使用时,个人计算机20通过网络接口或者适配器53连接到局域网51。当在广域网网络工作环境中使用时,个人计算机20通常包括调制解调器54或者其他用于在广域网52中建立通信的装置。调制解调器54,可以是内置的也可以是外置的,通过串行端口接口46连接到系统总线23。在网络工作环境中,与个人计算机20相关的程序模块,或者它的一部分,可以存储在远程存储设备中。应当理解图中所示的网络连接是示范性的并且其他在计算机之间建立通信连接的装置也是可以被使用的。
在下面的说明书中,除非另有表示,本发明将被作为由一个或者多个计算机实现的,关于行为和符号表示的操作来描述。同样,应当理解这种行为和操作,有时称作被计算机执行,包括由以结构形式表示数据的电子信号的计算机的处理单元进行的操作。这种操作转换了数据或者将它保存在计算机存储系统的位置中,以一种为本领域普通技术人员所众所周知的方式对计算机的操作进行重置或做其他改变。数据被保存的数据结构,是具有由数据格式所定义的特殊性质的存储器的物理位置。因此,当本发明在前面内容中被描述时,并不意味着被限制,正如本领域技术人员所理解的,在下文中描述的多种行为和操作也可能以硬件的形式实现。
参见附图2,本发明专注于一种用于提高从设备驱动器70到应用程序72的数据吞吐量的系统和方法。设备驱动器向应用程序提供所需要的数据来实现它的功能。为了提高向应用程序72传送数据的效率,设备驱动器保存了一个已经存储好用于向应用程序立即发送的数据的队列76。如附图2中所举例说明的那样,在计算机结构中设备驱动器70通常处于一个低于应用程序72的等级。例如,设备驱动器70可能在操作系统的核心程序模型中,而应用程序72运行在操作系统的用户模型中。设备驱动器70可以从数据源中接受数据,该数据源有可能是处于较低等级的另一个驱动器80。数据源可能会从另一个数据源处顺序接收数据。例如在附图2中所例举的实施方案中,驱动器80可能从网络82,如国际互联网中接收数据。
根据在数据队列76中是否有足够的数据用于程序的消耗,将数据从设备驱动器70传送到应用程序72有两种模式。在“低速I/O”模式中,数据队列76中没有足够的数据,并且应用程序72要求进行异步数据传送。当数据变得对于设备驱动器70而言是可获得后,被传送给应用程序72。除了速度慢之外,这种数据传送模式还有在存储和处理中高溢出的缺点,因为数据结构不得不被定位并且初始化来跟踪异步数据请求。相反,在“快速I/O”模式中,应用程序72发送同步数据请求,并且所请求的数据被立即传送给应用程序。这种数据传送方式不会导致异步模式中的那类溢出。此外,应用程序所需的数据立即为应用程序所得。因为只有当拥有所需要的数据后,应用程序才可以实现其功能,应用程序的性能取决于当需要时它能多快获得发送给它的数据。因此,如果数据传送在大多数时间内能以快速I/O模式进行的话,应用程序的性能将有显著的提高。快速I/O模式的必要条件是,当然,应用程序72所要求的数据已经存在于用于程序消耗的数据队列76之内。
与本发明的一个特征相一致,通过给予设备驱动器70更多的机会用新数据来填充数据队列,在数据队列76中具有足够数据的可能性被提高,这通过进程调度来实现。参见附图3,为了确定数据队列76包括足够的数据来允许快速I/O方式的数据传送,数据队列76中的数据量时常被检查(步骤92)。这种检查可以在例如,每次应用程序72需要更多数据但是在数据请求发出之前进行。换句话说,这种检查可以在每次数据源(例如,驱动器80)有更多给设备驱动器的数据时进行。如果确定(步骤96)数据队列76中的数据量太低(例如,低于一个预先选定的阈值),在计算机系统上运行的部件的进程调度被修改(步骤98),提高设备驱动器的进程从而给设备驱动器一个将更多数据放进数据队列中的机会。如这里所使用的,“提高”设备驱动器的进程意味着使设备驱动器的进程更快的轮到被运行。当设备驱动器的进程运行时,设备驱动器70可以将更多的数据放进数据队列76(步骤100),如果这些数据是从数据源可得的。然后,当应用程序进程运行时,应用程序可以通过快速I/O在数据队列中检索数据(步骤102)。
重新参见附图2,进程调度如何被修改,取决于操作系统的执行。例如,可能为计算机的部件提供应用程序接口(API)功能110,用于呼叫用进程调度改变它们的优先级或者转换为其他进程。在一个实施方案中,应用程序72在请求数据之前检查数据队列76中是否有足够的数据。如果认为数据量太低,应用程序进程向处理器让给其他进程,通过呼叫API110的适当功能来通知进程管理者120它的让步意向。应当指出下一个被转换的进程可能不是设备驱动器进程。尽管如此,通过仅仅是将它自己的进程让给另一个进程,应用程序已经加快了设备驱动器进程转换的时间,并且在发出数据请求之前给予设备驱动器一个向数据队列中增加更多数据的机会。
如前所述,除了将应用程序进程转换为另一个进程外,设备驱动器进程的促进也可以通过提高设备驱动器进程的优先级,或者降低应用程序进程的优先级来实现。进程优先级的提高或者降低可以通过呼叫API功能来进行。在一个实施方案中,无论是应用程序72还是设备驱动器70都可以呼叫API110来提高设备驱动器进程的优先级。换句话说或者另外的说,用于设备驱动器的数据源,在附图2中是驱动器80,可以呼叫API来提高设备驱动器进程的优先级。
为了举例说明利用进程调度提高快速I/O的效果,分别在附图4和附图5中提供了传统串行处理的实施例和快速I/O提高的实施例。在这两个实施例当中,应用程序被称作“App Pool”,它用来服务自国际互联网处接收的网络请求。假如这样的话,被App Pool处理的数据是网络请求的形式。负责向App Pool提供网络请求的设备驱动器是一个Http.sys驱动器126。Http.sys驱动器126顺序接收来自传输驱动程序接口(TDI)驱动器128的网络请求,它从国际互联网接收请求。TDI驱动器128有一个用来存储从网络中接收的将被Http.sys驱动器获得的网络请求的缓存130。类似地,Http.sys驱动器126有一个用来存储将被App Pool122获得的请求的队列136。
在附图4所举的实施例中,本发明的快速I/O提高没有实现,并且当队列136中没有数据(网络请求)可供其处理时App Pool122发出传统的异步数据请求。队列136和缓存130的五个连续状态,用A-E标出的,在附图4中表示。箭头138用来表示App Pool122,Http.sys驱动器126,或拥有处理器的TDI驱动器128等等中哪一个能使其进程运行。因此在状态A中,App Pool122进程正在运行。当AppPool122试图接收网络请求时,它发现队列136是空的。因为是传统方式的,AppPool122在队列136中发送两个“接收IRPs”。IRPs(I/O请求包)是一个用于异步数据传送的数据结构。在状态B中,轮到Http.sys进程运行。Http.sys进程使用它从缓存130检索到的网络请求完成两个被发出的接收IRPs。在状态C中,Http.sys将保留在缓存130中的网络请求移动到队列136中。在状态D中,返回到App Pool进程。这时,在队列136中有一个网络请求。当App Pool处理时,TDI驱动器128,已经中断了驱动,可以将更多的网络请求放入缓存130中。在状态E中,App Pool通过快速I/O消耗了队列136中仅有的网络请求,并且重新变得缺乏数据。这时,TDI继续将网络请求加入缓存。
在附图5所举的实施例中,快速I/O提高已经被实现了。附图5表示了用A-C标记的三个状态。倾向地,在进行接收呼叫时App Pool会一直在队列136中查找数据项。当一个网络请求出现在队列136中时,接收呼叫被通过快速I/O立即完成。当App Pool快要耗尽队列136中的数据时,一个Http.sys进程被提高的情况会更加频繁地发生。如状态A所示,App Pool检查队列136并且观察队列中保留的少量数据。在响应时,App Pool让出其进程并且提高Http.sys进程的优先级,使得Http.sys更可能运行。在状态B中,Http.sys进程运行,并且Http.sys驱动器将网络请求从缓存130中移动到队列136中。当App Pool进程回到状态C,在队列136中有足够的网络请求可供其通过快速I/O检索。当队列136中请求的数量重新变低时,App Pool进程让给另一个进程。
鉴于有许多可能的实施例都可以采用本发明的原理,应当认识到这里根据附图所描述的实施例仅仅是举例说明,并且不应该被视为对本发明保护范围的限制。因此,这里所描述的发明期待所有这些实施方案可以落入下述权利要求书的范围并与其等效。
权利要求
1.一种用于执行从设备驱动器向在计算机上运行的应用程序传送数据的步骤的具有计算机可执行指令的计算机可读介质,其特征在于,所述计算机可读介质包括检查被设备驱动器使用的队列中的数据以存储已准备好用于向应用程序同步传送的数据项;如果数据队列中的数据量超过一个阈值,向应用程序同步传送数据队列中的数据项;并且如果数据队列中的数据量低于一个阈值,通过进程调度的方式提高设备驱动器的进程。
2.如权利要求1所述的计算机可读介质,其特征在于,所述提高设备驱动器进程的步骤包括将应用程序进程让给另一个进程。
3.如权利要求1所述的计算机可读介质,其特征在于,所述提高设备驱动器进程的步骤包括提高设备驱动器进程的优先级。
4.如权利要求1所述的计算机可读介质,其特征在于,所述提高设备驱动器进程的步骤包括降低应用程序进程的优先级。
5.如权利要求1所述的计算机可读介质,还包括用于执行以下步骤的计算机可读指令通过设备驱动器,将数据项从第二驱动器的缓存中移动到用于向应用程序传送的数据队列。
6.如权利要求1所述的计算机可读介质,其特征在于,所述数据项是网络请求。
7.如权利要求6所述的计算机可读介质,还包括用于执行以下步骤的计算机可读指令通过第二驱动器接收来自国际互联网的网络请求;通过第二驱动器把已接收的网络请求存储到缓存;通过第二驱动器把缓存中的网络请求移动到用于向应用程序同步传送的数据队列。
8.如权利要求1所述的计算机可读介质,其特征在于,所述提高设备驱动器进程的步骤包括呼叫用来修改计算机的进程调度的API功能。
9.一种用于从设备驱动器向运行在执行进程调度的计算机上的应用程序传送数据的方法,包括;检查被设备驱动器使用的数据队列中的数据以存储已准备好用于向应用程序同步传送的数据项;如果数据队列中的数据量超过一个阈值,向应用程序同步传送数据队列中的数据项;并且如果数据队列中的数据量低于一个阈值,通过进程调度的方式提高设备驱动器的进程。
10.如权利要求9所述的方法,其特征在于,所述提高设备驱动器进程的步骤包括将应用程序进程让给另一个进程。
11.如权利要求9所述的方法,其特征在于,所述提高设备驱动器进程的步骤包括提高设备驱动器进程的优先级。
12.如权利要求9所述的方法,其特征在于,所述提高设备驱动器进程的步骤包括降低应用程序进程的优先级。
13.如权利要求9所述的方法,还包括以下步骤通过设备驱动器,将数据项从第二驱动器的缓存中移动到用于向应用程序传送的数据队列。
14.如权利要求9所述的方法,其特征在于,所述数据项是网络请求。
15.如权利要求9所述的方法,还包括以下步骤通过第二驱动器接收来自国际互联网的网络请求;通过第二驱动器把已接收的网络请求存储到缓存;通过第二驱动器把缓存中的网络请求移动到用于向应用程序同步传送的数据队列。
16.如权利要求9所述的方法,其特征在于,所述提高设备驱动器进程的步骤包括呼叫用来修改计算机的进程调度的API功能。
17.一种计算机系统,其特征在于,所述计算机系统包括用于管理计算系统的进程调度的进程管理程序;用于处理数据项的应用程序;用于存储已准备好用于向应用程序传送数据项的数据队列;和用于将数据项向应用程序传送的设备驱动器,所述设备驱动器在数据队列中存储已准备好用于向应用程序传送的数据项,应用程序被编程来检查数据队列,如果数据队列中的数据量超过一个阈值就同步地接收存储在数据队列中的数据项,并且如果数据队列中的数据量低于一个阈值就促进设备驱动器的进程。
18.如权利要求17所述的系统,其特征在于,所述应用程序通过将应用程序进程让给另一个进程来促进设备驱动器进程。
19.如权利要求17所述的系统,其特征在于,所述应用程序通过提高设备驱动器进程的优先权来促进设备驱动器的进程。
20.如权利要求17所述的系统,其特征在于,所述应用程序通过降低应用程序进程的优先权来促进设备驱动器的进程。
21.如权利要求17所述的系统,其特征在于,所述系统还包括用于接收被应用程序处理的数据项的第二驱动器,所述第二驱动器将所接收的数据项放置在用来被设备驱动器检索的缓存中。
22.如权利要求17所述的系统,其特征在于,所述系统还包括用于修改计算机系统进程调度的API功能,并且其中应用程序呼叫API功能来促进设备驱动的进程。
全文摘要
一种用于从设备驱动器向应用程序传送数据的系统及其方法,通过进程调度来提高所请求数据对于被立即传送给应用程序是可获得的可能性,从而提高对来自应用程序的数据请求的同步处理(快速I/O模式)使用率。如果存储用于传送的数据的数据队列中的数据量较低,修改系统的进程调度来促进设备驱动器进程,给它将更多数据放在供应用程序消耗的数据队列中的机会。设备驱动器进程的促进可以通过将应用程序进程转换为另一个进程(不必须是设备驱动器进程),提高设备驱动器的优先级,和/或降低应用程序的优先级等等来进行。
文档编号G06F13/12GK1595361SQ20041008551
公开日2005年3月16日 申请日期2004年8月27日 优先权日2003年8月29日
发明者J·C·弗勒 申请人:微软公司