计算设备中的在外部管理的I/O饥饿避免的制作方法

文档序号:17123638发布日期:2019-03-16 00:05阅读:139来源:国知局
计算设备中的在外部管理的I/O饥饿避免的制作方法

本申请要求于2016年8月17日提交的标题为“externallymanagedi/ostarvationavoidanceinacomputingdevice”的美国非临时申请no.15/239,396的优先权,该申请通过引用整体并入本文,用于所有目的。

本发明的各方面涉及计算系统,并且更具体地,本发明的各方面涉及用于监视和控制提供给存储设备的输入/输出(i/o)请求的系统和/或方法,使得没有一个i/o请求等待处理(pending)达到显著的时间量。



背景技术:

互联网的持续扩展、企业计算网络和系统的扩展和复杂化、通过互联网存储和可访问的内容的激增以及许多其它因素继续推动对大型复杂数据存储系统的需求。因此,随着对数据存储的需求持续增加,正在设计和部署更大且更复杂的存储系统。许多大规模数据存储系统利用包括存储介质的阵列的存储设备。通常,这些存储系统包括用于存储和访问文件的文件系统。除了存储系统文件(例如,操作系统文件、设备驱动程序文件等)之外,文件系统还提供对用户数据文件的存储和访问。为了让用户访问文件,一个或多个输入/输出(i/o)请求被生成,以从与存储系统相关联的多个存储设备检索与该文件相关联的数据块。

常常,存储系统使用的存储设备可以仅处置(handle)如此多的i/o请求。例如,存储设备可以被设备本身或者被用于存储系统的管理软件限制到十个i/o请求。另外,i/o请求可能无法按它们被接收的次序完成或得到服务。相反,许多存储设备试图通过以降低存储设备上的物理需求的次序服务i/o请求来最大化检索数据块的效率。例如,当对针对存储设备的i/o请求进行服务时,可以考虑盘驱动器上盘头的移动和当前位置。照此,当存储设备检索存储在存储介质上的数据块时,特定的i/o请求的完成可以被延迟。这可能导致处理i/o请求的显著延迟或减慢,这会对存储系统的性能产生负面影响。

考虑到这些和其它问题,研发了本公开的各个方面。



技术实现要素:

本公开的一个实现方案可以采取用于管理存储池的方法的形式。该方法包括以下操作:维护旨在用于存储设备的一个或多个输入/输出(i/o)请求的队列,其中队列的每个i/o请求包括指示该i/o请求在存储管理系统处被接收到的次序的次序值,以及计算与队列中的第一i/o请求相关联的第一次序值和与队列中的第二i/o请求相关联的第二次序值之间的差。此外,该方法可以包括以下操作:将计算出的第一次序值和第二次序值之间的差与阈值进行比较,以及,当计算出的第一次序值和第二次序值之间的差小于或等于阈值时,将至少一个i/o请求从该一个或多个i/o请求的队列发送到存储设备。

本公开的另一个实现方案可以采取一种或多种非瞬态有形计算机可读存储介质的形式,该存储介质存储用于在机器上执行计算机处理的计算机可执行指令。该计算机处理可以包括以下操作:管理旨在用于存储设备的一个或多个输入/输出(i/o)请求的队列,其中队列的每个i/o请求包括指示该i/o请求在存储管理系统处被接收到的次序的次序值,以及确定与队列中的第一i/o请求相关联的第一次序值和与队列中的第二i/o请求相关联的第二次序值之间的差的操作,其中第一i/o请求是在第二i/o请求之前在存储管理系统处接收的。该计算机处理还可以包括将计算出的第一次序值和第二次序值之间的差与阈值进行比较,以及当计算出的第一次序值和第二次序值之间的差小于或等于阈值时将至少一个i/o请求从该一个或多个i/o请求的队列发送到存储设备。

附图说明

图1是被配置为从一个或多个存储设备访问数据的示例存储系统。

图2是实现在外部管理的i/o请求系统和方法的示例网络文件系统。

图3是用于管理针对存储系统的存储设备的队列的方法的流程图。

图4是用于在外部管理针对存储系统的存储设备的i/o请求以防止i/o请求的饥饿(starvation)的方法的流程图。

图5a-图5g是用于防止对存储设备的i/o请求的饥饿的、针对存储设备的i/o请求的队列的图示。

图6是可以实现本公开技术的各种系统和方法的示例计算系统。

具体实施方式

本公开的实现方案涉及用于管理存储系统的系统和/或方法,并且更具体地,涉及用于外部地管理对存储设备的输入/输出(i/o)请求以避免对i/o请求的服务的大的延迟的系统和/或方法。在一个实施例中,该系统和方法可以是管理软件、设备或具有多个存储设备的大型存储系统。管理方法可以维护针对与该系统相关联的存储设备中的一个或多个存储设备的i/o请求队列。每个队列可以包括与i/o请求被提供给存储设备的次序对应的值,并且i/o请求可以按照次序值被排列在队列内。例如,队列的头部可以包括对存储设备的具有最小次序值的i/o请求,并且队列的尾部可以包括具有最高次序值的i/o请求。另外,存储系统管理方法可以基于用于对存储设备的并发i/o请求的阈值,来限制进入到队列中的i/o请求的总数量。当i/o请求被存储设备服务或完成时,相关联的队列中的相关i/o请求可以从该队列中被移除。

此外,管理系统可以防止对存储设备的任何一个i/o请求的显著延迟。在一个实施例中,系统可以计算队列顶部的i/o请求的次序值与队列底部的i/o请求的次序值之间的差。如果计算出的差高于阈值,那么针对存储设备的新i/o请求不被添加到队列或不被发送到存储设备。一般而言,在计算出的差降至低于阈值之前,不向队列添加附加的i/o请求。以这种方式,管理系统可以强制存储设备对已经被存储在队列中一段时间但没有被服务的i/o请求进行服务。而且,避免i/o请求的饥饿是由管理系统在存储设备外部控制的。因此,在通过抑制到设备的新i/o请求直到饥饿的请求得到服务来避免完成请求的延迟时,管理系统可以比存储设备本身更积极(即,可以接受在对针对存储设备的请求进行服务时的更短延迟)。

参考图1以开始详细描述示例存储系统100,示例存储系统100被配置为在维护针对一个或多个存储设备的一个或多个i/o请求队列以在外部对请求饥饿进行管理的同时,访问来自一个或多个存储设备的数据。如从图1可以理解的,示例存储系统100包括一个或多个存储设备102-104,每个存储设备管理数据在存储介质106-108上的存储,这可以涉及使介质(例如,盘驱动器)以及各种形式的持久存储器(诸如固态存储器)自旋(spin)。在一个实施例中,存储设备102-104各自可以以分层结构存储数据,其中需要快速访问的数据存储在较快的存储介质(例如,一个或多个级别的高速缓存存储器)中并且其它数据存储在较慢的存储介质(诸如盘驱动器)中。

虽然本文参考具有一个或多个存储设备102-104的存储系统进行了讨论,但应当认识到的是,可以针对将数据存储在存储设备中的任何计算设备,来利用用于在外部管理对存储设备的i/o请求的系统、方法和/或程序。例如,系统和方法可以用在将数据存储在计算机的存储器部件中的计算机中。因此,在一个示例中,系统和方法由在单个存储器设备中存储数据的计算设备使用。在其它示例中,系统和方法用在包括若干存储设备的系统中。一般而言,系统可以用于将数据存储在可以对接收到的i/o请求进行重新组织的一个或多个存储设备中的任何计算设备。然而,为简单起见,本文关于诸如图1中所示的存储系统的存储系统来讨论用于在外部对存储设备的i/o请求进行管理的系统和方法。

返回到图1的示例系统100,存储设备102-104各自可以是但不限于存储器件,包括通过网络110向客户网络上的一个或多个用户设备112-114提供数据访问的文件级存储服务器。例如,这种存储器件可以是zfs存储器件,它是由sun在2005年设计并且现在由扩展和升级的组合文件系统和卷管理器,其允许数据完整性验证和修复、高存储容量,以及许多其它特征和优点。虽然本文在zfs存储器件的上下文中进行了讨论,但是将认识到的是,存储设备102-104各自可以是具有任何类型的存储器件管理软件的任何类型的存储设备。

在一个实现方案中,存储网络上的存储设备102-104可以通过网络110由客户网络上的用户设备112-114访问。然而,将认识到的是,各种网络可以包括集成网络,并且本文讨论的网络之间的连接仅表示一种可能的网络拓扑。各种网络本质上也可以是本地的或地理上分散的,诸如大型私有企业网络或互联网。用户设备112-114一般是能够与网络110交互的任何形式的计算设备,诸如终端、工作站、个人计算机、便携式计算机、手机、移动设备、平板电脑、多媒体控制台等等。在一些实现方案中,客户网络包括一个或多个用户界面,包括例如商业用户界面(bui),从而允许用户与存储设备交互以访问数据。

基于zfs的系统利用具有一个或多个存储池(常常称为“zpool”)的存储池层,该存储池包括由块设备(诸如存储介质106-108)构成的虚拟设备(vdev)。块设备是以块的形式移动数据的任何设备,其可以是但不限于硬盘驱动器、固态驱动器、光盘驱动器、磁驱动器和其它可寻址的存储器区域。虚拟设备可以跨越多个块设备或卷,并且存储池可以包括一个或多个虚拟设备,每个虚拟设备包括存储介质的一个或多个分区或者一个或多个存储介质。

来自或去往存储设备102-104的流量通常由位于存储设备102-104或存储网络内的一个或多个专用存储服务器管理。由存储器件采用的用于访问内容(包括文件、目录及其相关联的元数据)的常见协议是网络文件系统(nfs)。nfs是广泛使用的分布式文件系统协议,最初由sun于1984年开发,目前是来自的版本4(nfsv4)。nfs通过提供允许用户设备112-114进行以下操作的编程接口而允许客户网络无缝地访问所存储的数据:创建和删除文件;读写文件;在文件内执行搜索;创建和删除目录;管理目录内容;以及执行其它文件、目录或内容操作。由用户设备112-114使用的操作系统被配置为与nfs编程接口通信,以管理文件系统以及执行应用与驻留在存储设备102-104中的数据之间的交互。一般而言,nfs系统管理文件系统元数据并提供对文件和目录的访问。元数据描述文件和目录在存储介质106-108上的位置。

转到图2,示出了实现在外部管理的i/o请求系统和方法的示例文件系统200。在一个实现方案中,系统200包括与操作系统204接口的应用202。操作系统204包括与文件系统206交互的功能,文件系统206进而与存储池218接口。操作系统204通常经由系统调用接口208与文件系统204接口。操作系统204为用户提供访问文件系统206内的文件的操作。这些操作可以包括读取、写入、打开、关闭等。在一个实现方案中,文件系统206是基于对象的文件系统(即,数据和元数据都被存储为对象)。更具体而言,文件系统206包括将数据和对应的元数据二者都存储在存储池218中的功能。

在一个实现方案中,存储池218包括存储设备220-220n。存储设备是移动和存储数据的任何设备,其可以是但不限于硬盘驱动器、固态驱动器、光盘驱动器、磁驱动器和其它可寻址的存储器区域。一般而言,存储池218包括一个或多个物理存储驱动器或盘作为块设备220-220n,以存储从文件系统206发送到存储池的数据。

在一个实现方案中,由操作系统204提供的操作与对对象的操作对应。换句话说,执行特定操作(即,事务)的请求从操作系统204经由系统调用接口208转发到数据管理单元(未示出)。在一个实现方案中,dmu将对对象执行操作的请求直接变换成在存储池218内的物理位置处执行读取操作的请求(即,i/o请求)。存储池分配器(spa)212从dmu接收该请求并从存储池218中读取块。在一个实现方案中,spa212包括i/o层216和其它模块,其可以被spa212用来从存储池218读取数据。在一个实现方案中,i/o层216接收i/o请求并将i/o请求分组成事务分组以进行处理。

在一个特定实现方案中,文件系统206包括监视和跟踪被发送到存储池218的存储设备220-220n的每个i/o请求的程序或其它方法。因此,本文描述的方法和操作可以由图2的文件系统206执行。这些方法和操作可以通过执行一个或多个软件程序、通过一个或多个硬件部件或通过软件程序和硬件部件二者的组合来执行。然而,在其它实施例中,方法和操作可以由存储系统的、可以通过其发送对数据的i/o请求的任何计算设备或部件执行。例如,第二应用可以由操作系统204执行,以执行本文描述的方法。一般而言,任何计算设备或计算设备的部件都可以执行本文包括的操作和方法。

如上所述,由操作系统204提供的操作被发送到文件系统206,以在存储池218的存储设备220-220n上检索或存储数据。然后这些i/o请求由文件系统206发送到存储池中的适当存储设备220-220n,以存储和/或检索数据。因此,文件系统206通过知道哪个或哪些存储设备220-220n包括所请求的数据并提供适当的i/o请求来管理每个i/o请求。另外,许多存储设备220-220n再设备可以并发服务的i/o请求的数量的方面是受限的。例如,一些存储设备220-220n可以在通知文件系统206该设备的i/o请求队列已满之前一次仅服务十个i/o请求。在服务或完成i/o请求时,存储设备220-220n还可以向文件系统206提供对已完成的请求的某个指示以及可以将另一个i/o请求发送到该存储设备的指示。以这种方式,文件系统206(或存储系统200的其它部件)充当用于针对存储池218的存储设备220-220n的i/o请求的网关。

如上面所提到的,许多存储设备220-220n可以采用对履行某些i/o请求进行延迟的机制或过程。例如,取决于盘驱动器的盘头的位置和盘驱动器上所请求数据的位置,一些存储设备220-220n将对获得或存储数据进行延迟,直到盘头在物理上靠近盘上的存储位置。在一些情况下,这会显著延迟对被发送到存储设备220-220n的i/o请求的响应。另外,虽然一些盘驱动器包括履行延迟的或“饥饿的”i/o请求的过程,但是这些过程可以几秒钟都不发生,这取决于存储设备220-220n的类型。当系统等待对延迟的请求的服务时,对i/o请求进行服务的这种延迟会对存储系统的性能产生负面影响。

为了解决服务i/o请求时的这种延迟,存储系统200可以执行在外部管理的i/o请求饥饿处理,以确保发送到存储设备220-220n的请求不会太长时间不被履行。具体而言,图3是用于管理存储系统的存储设备的队列以防止i/o请求饥饿的方法的流程图。除了管理针对存储池218的一个或多个存储设备220-220n的队列之外,图4还是用于在外部管理针对存储系统的存储设备的i/o请求以防止i/o请求饥饿的方法的流程图。通过执行所描述的方法,文件系统206可以在外部管理发送到存储池218的一个或多个存储设备220-220n的i/o请求,使得没有一个请求被延迟服务太长时间,如由存储系统200确定的。

当在操作302中文件系统206接收到针对相关联存储池218的特定存储设备220的i/o请求时,图3的方法300开始。该i/o请求可以用于从存储池218读取数据或向存储池218写入数据,并且可以从存储系统200的操作系统204接收。在操作304中,文件系统206将i/o次序值指派给接收到的针对特定存储设备220的i/o请求。例如,文件系统206可以维护针对存储池218的存储设备220-220n中的每个存储设备的每个i/o请求的有序列表。在一个实施例中,这些有序列表包括针对每个设备的i/o被接收的值。因此,针对特定存储设备220的第一i/o请求被赋予有序值“1”,针对该设备的第二i/o请求被赋予有序值“2”,依此类推。在一个特定实施例中,与对特定存储设备的i/o请求相关联的有序值是64位二进制数。文件系统206维护针对存储池218中的每个存储设备220-220n的i/o请求的有序列表,当接收到i/o请求时,将与接收到的针对存储设备220-220n的i/o请求相关联的有序值递增。在一个特定实施例中,当存储系统200重新开始或重启时,i/o请求的有序值可以以“1”重新开始。

在另一个实施例中,与有序列表中的每个i/o请求相关联的值可以基于i/o请求将被满足或将被服务的次序。例如,这个实施例中的文件系统206基于文件系统确定的i/o请求将被服务的次序来对接收到的i/o请求重新排序。另外,指派给有序列表中的每个i/o请求的次序值可以在i/o从队列头部被发布到i/o设备时被指派。以这种方式,可以将更多i/o请求添加到队列,而不必将这些请求添加到队列的尾部。然而,为了简化描述本公开,使用如下实施例,其中i/o请求被添加到队列的尾端并且基于请求被接收的次序来指派有序值。

另外,除了将次序值与每个接收到的i/o请求相关联之外,文件系统206还可以为存储池218中的每个存储设备220-220n维护i/o请求队列。在一个特定实施例中,文件系统206可以将由文件系统管理的i/o请求队列存储在一个或多个存储器设备中。另外,文件系统206可以执行将队列存储在一个或多个存储器设备中的一个或多个指令。请求队列是针对存储池218的特定存储设备220-220n的i/o请求的有序列表。具体而言,用于存储设备的队列可以包括位于队列头部的最旧i/o请求(即,针对该存储设备的具有最低次序值的i/o请求)和位于队列尾部的最新i/o请求(即,针对该存储设备的具有最高次序值的i/o请求)。可以为存储池218的每个存储设备220-220n维护这样的队列。此外,文件系统206可以维护如下的列表或指示,即,已经向相应的存储设备220发送了哪些i/o请求以及队列中的哪些i/o请求尚未被发送。如上面所提到的,一些存储设备220可以限制存储设备处的等待处理的i/o请求的数量。因此,文件系统206可以跟踪特定存储设备处的等待处理的i/o请求的数量,以确保该数量不超过该存储设备设置的限制。为了辅助文件系统206,存储池218的存储设备220-220n中的一个或多个可以向文件系统发送可用指示符或信号,以指示存储设备何时可以接受对该存储设备的附加i/o请求。

返回到图3的方法300,文件系统206可以在操作306中将接收到的i/o请求添加到与该请求的存储设备220相关联的适当队列。另外,因为接收到的i/o请求具有队列的最高次序值,所以该请求在队列尾部被添加到该队列。在操作308中,当从相关联的存储设备接收到请求已完成的指示时,文件系统206可以从相关联的队列中移除被服务或已完成的i/o请求。以这种方式,随着从等待处理的队列中移除已完成的i/o请求,将新的i/o请求添加到存储设备的队列。

通过上面讨论的存储设备队列,文件系统206可以在外部管理存储设备的i/o请求饥饿。如上面所提到的,存储设备220可以出于各种原因而延迟履行一些i/o请求。i/o请求的这种延迟或饥饿会对存储系统200的性能产生负面影响。通过队列,通过存储设备220的i/o请求的饥饿可以由文件系统206减少或以其它方式管理,以减少对存储系统200的负面影响。具体而言,图4是用于在外部管理针对存储系统200的存储设备220的i/o请求以防止i/o请求饥饿的方法400的流程图。方法400的操作可以由存储系统200的文件系统206或该系统的任何其它部件来执行。

在操作402中,文件系统206等待针对存储池218的存储设备220的新i/o请求或者来自存储设备的完成的i/o请求的指示。当新的i/o请求到达或者接收到完成的i/o请求的指示时,文件系统206在操作404中确定是否有更多的i/o请求要发布到存储设备220。如果没有附加的i/o请求要发布,那么文件系统返回操作402以等待新请求。然而,如果要发布i/o请求,那么文件系统206在操作406中确定存储设备220是否可以接受附加i/o请求或具有用于附加i/o请求的容量。如果不是,那么文件系统206返回操作402以等待来自存储设备的完成的i/o请求的指示。

如果如在操作406中确定的存储设备220具有容量,那么文件系统可以确定是否延迟向存储设备发送新的i/o请求,以强制存储设备服务于饥饿的i/o请求。例如,发送到存储设备的i/o请求可能不会被存储设备及时地服务。为了强制对延迟的i/o请求进行服务,文件系统206可以被配置为停止向存储设备发送新的i/o请求,直到延迟的i/o请求被服务为止。换句话说,文件系统206可以使存储设备饥饿于(starvingfrom)新的i/o请求,直到延迟的i/o请求被完成为止。通过图4的操作来执行文件系统206控制向一个或多个存储设备220-220n传输i/o请求以管理饥饿的i/o请求的方法。

为了确定什么时候应当停止发送到存储设备220的i/o请求直到饥饿的i/o请求被服务,文件系统206可以在操作408中计算针对存储设备的队列中最旧的i/o请求次序值与最新的i/o请求次序值之间的差异。例如,文件系统206以与上述类似的方式维护针对存储池218中的存储设备200的i/o请求队列。i/o队列中的每个请求都包括指示该i/o请求被放入队列的次序的次序值。因此,文件系统206计算最高i/o请求次序值(队列尾部处的i/o请求)与最低剩余i/o请求次序值(队列头部处的i/o请求)之间的差。例如,用于存储设备200的i/o队列可以包括在头部处的具有有序值二(2)的请求和在尾部处的具有有序值15的请求。针对这个队列的计算出的差为13。

在操作410中,文件系统可以将计算出的针对特定i/o请求队列的差与阈值进行比较。在一个实施例中,阈值是预定值,其被文件系统206用来检测对存储设备220的一个或多个i/o请求何时饿得太久。例如,文件系统206可以从系统管理员接收阈值以在图4的方法400中使用。在其它实施例中,阈值可以基于所使用的存储设备、基于确定的时间或日期、基于系统或特定存储设备上的特定负载等而变化,使得该值不是由文件系统预先确定的。在一个特定实施例中,阈值是存储设备可以接受的并发i/o请求的最大数量乘以因子。例如,阈值可以是40,如通过将存储设备220处置的并发i/o请求的最大数量(在这个示例中为10)乘以因子4而确定的。然而,一般而言,阈值可以是文件系统206确定或使用的任何数。

在操作412中,文件系统206基于比较而确定计算出的队列中最旧的i/o请求与最新的i/o请求的差是否小于或等于阈值。如果是,那么文件系统206移动到操作414并发布队列中尚未发送到存储设备220的最旧的i/o请求。换句话说,与等待处理的对存储设备的i/o请求的数量相比,文件系统206确定队列中的最旧的i/o请求没有被存储设备220饿太久,使得对存储设备的附加请求可以发生。然而,在一些情况下,计算出的队列中最旧与最新次序值的差与阈值的比较指示发送到存储设备220的i/o请求在一段时间内没有得到服务或完成。这个i/o请求可以被认为是被存储设备220饿着。作为响应,文件系统可以通过返回到操作401来停止向存储设备220发布i/o请求,直到最旧的等待处理的i/o请求被服务。

通过上面解释的操作,文件系统206防止i/o请求被发布到存储设备,直到饥饿的请求被存储设备履行。照此,文件系统206可以监视i/o请求的完成,并在那些完成的请求完成时从队列中移除它们。完成后,文件系统206可以确定完成的请求是否是饥饿的i/o请求。如果不是,那么图4的方法400还可以停止向存储设备发布请求,直到饥饿的i/o请求被服务或完成为止。一旦饥饿的请求完成,文件系统206就可以继续向存储设备发布i/o请求以供完成。

图5a-图5g是用于防止对存储设备的i/o请求的饥饿的、针对存储设备的i/o请求的队列的示例。具体而言,所示队列提供了执行图4的方法400的文件系统206的示例。因此,虽然图5a-图5g中所示的队列针对(可能作为存储池218的一部分的)单个存储设备220,但应当认识到的是,文件系统206可以为与文件系统连接或通信的多个存储设备维护类似的队列。图5a-图5g中所示的队列仅仅是与文件系统206通信的存储设备的i/o请求队列的一个示例。另外,在一些实施例中,可以为存储池中的单个存储设备维护多个队列。因此,可以将针对存储设备的i/o请求从一个队列移动到用于该存储设备的另一个队列。然而,为简单起见,图5a-图5g中图示了单个队列。

图5a中图示了用于管理针对存储设备220的i/o请求的i/o请求队列500。具体而言,该队列包括在文件系统206处接收并且旨在针对特定存储设备的十个i/o请求的列表。通过上面参考图3提到的操作,文件系统206将有序值与每个接收到的针对存储设备的i/o请求相关联。在这个特定示例中,队列500包括针对存储设备的前十个i/o请求,其相应地排列在队列中。另外,队列500中的每个i/o请求的灰色指示已经将该请求发送到存储设备。如上面所提到的,许多存储设备在设备可以处理的并发i/o请求的数量方面受到限制。在这个特定示例中,存储设备可以处理十个并发i/o请求,使得队列500中的每个i/o请求被发送到存储设备。

还如图5a中所示,可以从队列500中移除两个i/o请求(示为有序值请求5和6)。在文件系统从存储设备接收到这些特定i/o请求被服务的指示之后,文件系统206可以从队列500中移除这些请求。另外,如下面更详细讨论的,当在文件系统处接收到针对存储设备的新的i/o请求时,可以将这些新的i/o请求添加到队列500的尾部。这些新请求包括从队列中的最后一个i/o请求起递增的有序值。以这种方式,可以由文件系统通过向队列的尾端添加新的i/o请求并移除完成的i/o请求来管理针对存储设备的i/o请求。

在图5b的队列502中,移除i/o请求5和6,并且将排序为11、12和13的新i/o请求添加到队列的尾部。另外,因为i/o请求5和6已经由存储设备完成并从队列502中移除,所以可以将附加的i/o请求发送到存储设备。为了确定是否将附加i/o请求发送到存储设备,文件系统206执行图4的方法400。换句话说,文件系统206确定队列中最旧的i/o请求是否饿着,以便在饥饿的i/o请求被服务之前不向存储设备发布新的请求。具体而言,文件系统206计算队列502中最旧的i/o请求(在这个示例中,i/o请求1)与队列中最新的i/o请求(在这个示例中,i/o请求13)之间的差。如图5b中所示,计算出的差提供值12。

接下来,文件系统206将计算出的差与阈值进行比较。在所示的示例中,阈值为12,使得比较指示计算出的差等于阈值。因此,因为队列中最旧的i/o请求与队列中最新的i/o请求之间的计算出的差小于或等于阈值,所以没有针对存储设备的单个i/o请求被饿着,并且新的请求可以被发送到存储设备。如上面所提到的,由文件系统使用的阈值可以是由文件系统确定或接收的任何值。因为新的i/o请求可以被发送到存储设备并且存储设备具有用于两个附加请求的容量(基于上面i/o请求5和6的完成),所以i/o请求11和12被发送到存储设备,如图5c的填充的框所示。

进一步假设i/o请求3、9、10和11由存储设备完成并从队列504中移除,如图5c中所示。而且,在图5d中,新的i/o请求被添加到队列504的尾部,指示为i/o请求14。通过请求3、9、10和11的完成,存储设备具有接收四个附加i/o请求的容量。因此,在图5d中,文件系统206再次计算队列506中最旧的i/o请求(请求1)与最新的i/o请求(请求14)之间的差。如图所示,这个计算出的差是13。为了确定是否应当从队列506中发布附加请求,将这个计算出的差与阈值12进行比较。因为计算出的差大于阈值,所以对于队列506中i/o请求1确定了饥饿的状况。在基于比较而检测到队列506中最旧的请求被饿着时,文件系统可以停止向存储设备发布新的i/o请求,直到饥饿的i/o请求被服务为止。因此,虽然存储设备具有接收新i/o请求的能力,但i/o请求13和14到存储设备的传输被延迟,直到饥饿的请求被服务为止。

在图5e中,饥饿的i/o请求(i/o请求1)由存储设备完成并从队列508中移除。在一些情况下,文件系统206可以停止发送i/o请求,直到仅有的未被服务的请求是饥饿的请求为止。换句话说,文件系统可以通过停止向存储设备发送任何新的i/o请求来强制存储设备服务饥饿的请求,直到饥饿的请求被服务为止。另外,虽然未在图5a-图5g的示例中示出,但是文件系统206可以继续接收针对存储设备的新i/o请求并将它们添加到队列的尾部。然而,在饥饿的请求被服务之前,不会向存储设备发出这种请求。另外,在文件系统等待对饥饿的请求进行服务的同时,可以服务其它已经发送的请求(诸如队列508的i/o请求2、4、7等)并将它们从队列中移除。

在移除饥饿的请求之后,文件系统206再次计算最旧的请求与最新的请求之间的差,如图5f中所示。在这个示例中,计算出的差等于或低于阈值,使得现在可以将新请求发送到存储设备。因此,然后可以将i/o请求13和14发送到存储设备以进行服务,如图5g中所示。通过上述示例和操作,文件系统可以管理发送到存储设备的i/o请求的数量,以从外部控制一个或多个请求的饥饿,以防止任何一个请求被饿太长时间,如由文件系统确定的。对存储设备的请求的这种外部控制可以比存储设备本身更积极,并且可以考虑请求的重要性或价值。

现在参考图6,提供了具有可以实现本文讨论的各种系统和方法的一个或多个计算单元的示例计算系统600的详细描述。计算系统600可以适用于存储设备102-104、存储系统200、文件系统206、用户设备112-114和/或其它计算设备。将认识到的是,这些设备的具体实现方案可以具有不同的可能的具体计算体系架构,并非所有这些实现方案都在本文中具体讨论,但是本领域普通技术人员将理解这些实现方案。

计算机系统600可以是能够执行计算机程序产品以执行计算机处理的通用计算系统。数据和程序文件可以输入到计算机系统600,计算机系统600读取文件并执行其中的程序。图6中示出了通用计算机系统600的一些元件,其中示出了具有输入/输出(i/o)区段604、中央处理单元(cpu)606和存储器区段608的处理器602。可以存在一个或多个处理器602,使得计算机系统600的处理器602包括单个中央处理单元606或多个处理单元(通常称为并行处理环境)。计算机系统600可以是常规计算机、分布式计算机或任何其它类型的计算机,诸如经由云计算体系架构可用的一个或多个外部计算机。当前描述的技术可选地在加载在存储器608中、存储在配置的dvd/cd-rom610或存储单元612上和/或经由有线或无线网络链路614传送的软件设备中实现,从而将图6中的计算机系统600变换为用于实现所描述的操作的专用机器。

i/o区段604连接到一个或多个用户接口设备(例如,键盘616和显示单元618)、盘存储单元612和盘驱动单元620。在平板电脑或智能电话设备的情况下,可以没有物理键盘,而是具有计算机生成的触摸屏键盘的触摸屏。一般而言,盘驱动器单元620是能够读取通常包含程序和数据622的dvd/cd-rom介质610的dvd/cd-rom驱动器单元。包含实现根据当前描述的技术的系统和方法的机制的计算机程序产品可以驻留在计算机系统600的存储器区段604中、盘存储单元612上、dvd/cd-rom介质610上,或者经由云计算体系架构可用的具有这种计算机程序产品的外部存储设备上,包括一个或多个数据库管理产品、web服务器产品、应用服务器产品和/或其它附加软件部件。可替代地,盘驱动器单元620可以由光学驱动器单元、闪存驱动器单元、磁驱动器单元或其它存储介质驱动器单元替换或补充。类似地,盘驱动器单元620可以用随机存取存储器(ram)、磁存储器、光存储器和/或智能电话和平板电脑中常见的各种其它可能形式的基于半导体的存储器替换或补充。

网络适配器624能够经由网络链路614将计算机系统600连接到网络,计算机系统可以通过网络链路614接收指令和数据。这种系统的示例包括个人计算机、基于intel或powerpc的计算系统、基于amd的计算系统,以及运行基于windows、基于unix或其它操作系统的其它系统。应当理解的是,计算系统还可以实施诸如终端、工作站、移动电话、平板电脑或平板(slates)、多媒体控制台、游戏控制台、机顶盒等设备。

当在lan网络环境中使用时,计算机系统600通过网络接口或适配器624(通过有线连接或无线地)连接到本地网络,网络接口或适配器624是一种类型的通信设备。当在wan网络环境中使用时,计算机系统600通常包括调制解调器、网络适配器或用于在广域网上建立通信的任何其它类型的通信设备。在联网环境中,相对于计算机系统或其部分描绘的程序模块可以存储在远程存储器存储设备中。应该认识到的是,所示的网络连接是通信设备的示例,并且可以使用在计算机之间建立通信链路的其它手段。

本文描述的一些或所有操作可以由处理器602执行。另外,本地计算系统、远程数据源和/或服务以及其它相关联的逻辑表示被配置为控制存储设备维护、存储设备102-104、用户设备112-114和/或存储系统100的其它计算单元或部件的操作的固件、硬件和/或软件。这些服务可以使用通用计算机和专用软件(诸如,执行服务软件的服务器)、专用计算系统和专用软件(诸如执行服务软件的移动设备或网络器件)或其它计算配置来实现。此外,本文公开的一个或多个功能可以由处理器602生成,并且用户可以使用一个或多个用户接口设备(例如,键盘616、显示单元618和用户设备112-114)与gui交互,其中一些使用的数据直接来自在线资源和数据存储库。图6中阐述的系统仅仅是可以根据本公开的各方面使用或配置的计算机系统的一个可能示例。

应当注意的是,图3和4的流程图仅仅是说明性的。在不影响本发明的精神和范围的情况下,本发明的替代实施例可以添加操作、省略操作或改变操作的次序。以上仅仅说明了本发明的原理。鉴于本文的教导,对所述实施例的各种修改和更改对于本领域技术人员而言将是清楚的。因此,将认识到的是,本领域技术人员将能够设计出许多系统、布置和方法,这些系统、布置和方法虽然未在本文中明确示出或描述,但实施了本发明的原理并且因此在本发明的精神和范围内。根据以上描述和附图,本领域普通技术人员将理解的是,所示出和描述的特定实施例仅仅用于说明的目的,并不意图限制本发明的范围。对特定实施例的细节的参考不旨在限制本发明的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1