具体实施方式
现在参考附图来描述所主张的主题,其中全文中相同附图标记用以指代相同元件。在以下描述中,为了进行解释,阐述若干具体细节以提供对所主张的主题的透彻理解。然而,可以显而易见的是,可以在没有这些具体细节的情况下实施所主张的主题。在其它实例中,以方框图形式展示结构和设备,以有助于描述所主张的主题。
A. 背景
在计算领域内,许多情景涉及访问存储设备组的非易失性存储设备。这些存储设备可以包括许多类型(例如,硬盘驱动器;固态存储设备;和磁盘或光盘),并且可以用以存储许多类型的数据(例如,文件、电子邮件消息、数据库记录或媒体对象,或其组合)。存储设备可以附接到特定计算机或设备,或者可以连接到网络或通过网络访问。存储设备也可以独立工作(例如,不互相通信或者甚至不会彼此意识到存储设备组的其它存储设备);具有松散协作(例如,在通信或状态的互换通知中);或者具有紧密互操作(例如,一组硬盘驱动器装载到存储控制器中,诸如不昂贵的磁盘冗余阵列(RAID)装置)。同样,存储设备的互操作和/或使用可能导致存储于其中的数据之间的逻辑或实际分区,或者可能导致数据的聚集。例如,两个或两个以上存储设备的可用容量可以聚集为作为单个集成体积呈现给计算机的存储池。
存储设备也可以实施各种布置计划,如跨越(spanning)(例如,逻辑拼接存储设备的容量);条带化(例如,横跨存储设备插入有序的逻辑地址);镜像(例如,将数据组的相同拷贝存储在存储设备组的相应存储设备上,并且通过将数据组的改变自动并同时应用到所有拷贝来维持拷贝的身份);和奇偶性计算(例如,当将数据存储在一个或多个存储设备上时,可以自动计算所存储数据的检查和并将其存储在不同存储设备上,以例如能够从存储设备的故障进行恢复)。此外,存储设备的容量可以根据各种供应计划来供应。作为第一实施例,在固定供应计划中,当接收到对分配存储区域的请求时,一个或多个存储设备可以迅速分配在供应请求中所请求的所有容量,并且可以向请求用户或过程通知此容量可用(并且可以用默认值来视情况初始化容量)。作为第二实例,在延迟的供应计划中,当接收到对分配存储区域的请求时,存储设备可以指示存储区域可用于写入,但是可能不会迅速分配用于存储区域的容量。相反,存储设备可以等待对存储区域内的位置的访问请求,并且在接收到访问请求之后,可以迅速分配存储设备的物理存储(例如,范围(extent)),并将其与位置的逻辑地址绑定起来。此“实时”延迟的供应可以呈现出一些性能改进(例如,迅速完成产生存储设备的请求,和/或比分配仍未使用的存储区域的容量更有效地分配存储设备组的可用容量)。作为另一个变化,在“瘦”供应计划中,存储设备组可以授权请求分配超出存储设备组的可用容量的容量。相反,存储设备组可以分配所使用的容量,并且在可用容量较少到很低之后,可以通知管理员添加提供额外容量的存储设备。这些和其它类型的布置和/或供应计划可以应用于存储设备。
在分配了存储设备的存储区域之后,存储设备可以被配置为用默认值(例如,零)初始化存储区域的位置,以从存储区域去除未初始化的值,如先前解除分配的存储区域的内容。所述初始化可以鉴于几个原因而很重要。作为第一实例,在将值写入到存储区域的位置之前,过程可以请求从存储区域的位置进行读取。在没有初始化的情况下,存储在所述位置的值可能是无法预测的,并且在读取无法预测的值之后的过程的行为可能是不确定的或无法预期的。作为第二实例,一些存储区域可以存储相应地包括具有相关性的两个或两个以上位置的位置组。如果值被存储在位置组的第一位置处而任意数据被存储在位置组的相关位置中,那么可以折中所述关系。作为第一实例,镜像的存储组可以涉及如下数据组,该数据组被存储为不同位置中的两个或两个以上的相同拷贝并且通过将对一个位置的写入应用到相应的镜像位置而保持同步。如果值被写入到第一个这种位置,但是镜像的位置未被初始化,那么可以检测到失配,所述失配损害了对写入第一位置的值为有效的信任。作为第二实例,位置组可以涉及两个或两个数据值,当该两个或两个数据值存储到位置组时导致被存储在位置组的奇偶性位置中的数据值的奇偶性值的计算。所述奇偶性值可以使得能够进行误差检测和/或校正。所述奇偶性值也可以使得能够进行存储在已故障的存储设备上的位置组的数据的重构;例如,存储在位置组的其它位置中的值连同奇偶性值一起可以用以推断存储在故障的存储设备上的值并在替代存储区域中替换所述值。然而,位置组中任何位置中的未初始化值的存在可能导致将不正确的数据重构至替代存储区域中。最近分配的存储设备中的值的初始化可以避免各种计算情景中的这些和其它问题。
然而,存储区域的值的初始化也可以呈现出若干形式的低效率。作为第一实例,响应于对分配存储区域的请求,将默认值写入到整个存储组的过程可能占用长时间,并且可能延迟分配请求的完成。作为第二实例,在许多情况下,将默认值写入到位置可能提供较少的值或不提供值。作为第一个这种实例,如果在位置的初始化之后将数据值写入到位置(而不是首先读取存储在所述位置的值),那么用默认值对所述位置的初始化可能不提供值。作为第二个这种实例,如果在位置的初始化之后在所述位置处读取数据值(而不是将值首先写入到所述位置),那么可以将结果预测为默认值而不从存储设备的位置读取值。鉴于这些和其它原因,存储区域的位置的初始化可能无益地消耗计算机和存储设备的时间和资源,而不提供值或优点。
B. 所呈现的技术
本文呈现如下技术:以相对可行的方式来呈现存储在存储设备的存储区域的位置中。根据这些技术,最近分配的存储组可能不会被默认值初始化。而是可以产生使用位图,其中相应位对于存储区域的相应位置组指示值是否已被存储并且是否存在于位置组中。因此,可以部分地参考使用位图来满足读取请求,例如如下所述的那样。
C. 示例性实施例
图1呈现这些技术的第一实施例,示出为呈现存储在包括存储区域(其包括使用位图)的存储组的至少两个位置的位置组中的值的示例性方法100。示例性方法可以被例如实施为存储在计算机的存储组件(例如,存储器电路、硬盘驱动器的盘、固态存储设备、或磁盘或光盘)中的一组指令,所述指令在由计算机的处理器执行时使得计算机根据本文呈现的技术呈现存储在位置组中的值。示例性方法100开始于102,并且涉及在处理器上执行104指令,所述指令配置成使得计算机根据本文呈现的技术来工作。具体来说,所述指令被配置成,在接收到对于位置处的值的读取请求之后,确定使用位图是否指示值对于包括所述位置的位置组存在。如果使用位图指示值对于包括所述位置的位置组存在,那么指令被配置成返回106存储在所述位置处的值。然而,如果使用位图指示值对于包括所述位置的位置组不存在,那么指令被配置成返回110默认值。以此方式,示例性情景实现根据本文呈现的技术来呈现存储组的值,并且因此在112处结束。
又一个实施例涉及包括处理器可执行指令的计算机可读媒体,所述指令被配置成应用本文呈现的技术。这种计算机可读媒体可以包括例如涉及有形设备的计算机可读存储媒体,例如存储半导体(例如,使用静态随机访问存储器(SRAM)、动态随机访问存储器(DRAM)和/或同步动态随机访问存储器(SDRAM)技术的半导体)、硬盘驱动器的盘、快闪存储设备或磁盘或光盘(如CD-R、DVD-R或软盘),其对一组计算机可读指令进行编码,所述指令在由设备的处理器执行时使得设备实施本文呈现的技术。这种计算机可读媒体也可以包括(作为与计算机可读存储媒体不同的一类技术)各种类型的通信媒体,如可以通过各种物理现象传播的信号(例如,电磁信号、声波信号或光学信号)和在各种有线情景(例如,通过以太网或光纤线缆)和/或无线情景(例如,如WiFi的无线局域网(WLAN)、如蓝牙的个人域网络(PAN)、或者蜂窝或无线电网络),并且其对一组计算机可读指令进行编码,所述指令在由设备的处理器执行时使得设备实施本文呈现的技术。
图2中示出能够以这些方式设计出的示例性计算机可读媒体,其中实施200包括计算机可读媒体202(例如,CD-R、DVD-R或硬盘驱动器的磁盘),其上编码有计算机可读数据204。此计算机可读数据204继而包括一组计算机指令206,计算机指令206被配置成根据本文阐述的原理工作。在一个这种实施例中,计算机可执行指令206可以被配置成执行从存储组读取值的方法,如图1的示例性方法100。此计算机可读媒体的一些实施例可以包括非短暂性计算机可读存储媒体(例如,硬盘驱动器、光盘或快闪存储设备),其被配置成存储以此方式配置的处理器可执行的指令。许多这种计算机可读媒体可以由本领域技术人员设计,所述计算机可读媒体配置成根据本文呈现的技术工作。
D. 变化
本文论述的技术可以设计成在许多方面具有变化,并且一些变化可能呈现出额外的优点和/或相对于这些和其它技术的其它变化来说减少了缺点。此外,一些变化可以以组合方式实施,并且一些组合可以通过协同合作而表征额外优点和/或减少的缺点。所述变化可以并入各种实施例中,以对这些实施例赋予个别和/或协同优点。
D1. 情景
可在这些技术的各实施例之间不同的第一方面涉及可以利用这些技术的情景。作为此第一方面的第一种变化,这些技术可以与许多类型的存储设备一起使用,该存储设备包括硬盘驱动器、固态存储设备、非易失性存储电路、基于磁带的存储设备以及磁盘和光盘。这些存储设备也可以直接连接到实施这些技术的设备(如计算机);可以通过有线或无线局域网(例如,802.11 WiFi网络或特别连接或红外连接)访问;和/或可以通过有线或无线广域网(例如,蜂窝网络或互联网)访问。此外,这些技术可以与独立工作的两个或两个以上存储设备(例如,通过软件程序独立访问的存储设备)一起使用;以松散协作工作(例如,独立工作但是被通知并可以与其它存储设备通信以共享存储组的存储设备);或者通过紧密互操作而工作(例如,管理作为存储系统的组件的几个存储设备的不昂贵的磁盘冗余阵列(RAID)控制器)。
作为此第一方面的第二种变化,这些技术可以结合包括各种类型的数据组的许多类型的存储组来使用,包括存储各种类型的二进制目标的二进制存储系统;存储各文件的文件系统;存储媒体目标的媒体库;存储许多类型的目标的目标系统;存储记录的数据库;和存储电子邮件消息的电子邮件系统。
作为此第一方面的第三种变化,这些技术中的部分或全部可以在计算环境内的一个或多个组件内实施,如存储在访问存储设备的计算机或设备的易失性或非易失性部件中的一组软件指令(例如,操作系统程序或硬件驱动器);通过配置成与存储设备成接口连接的存储系统(例如,RAID控制器)来实施;或者在存储组的相应存储设备中实施。
作为此第一方面的第四种变化,由本文呈现的技术产生和使用的易失性存储器表示可以呈现许多结构。作为一个此类实施例,易失性存储器表示可以被结构化为一组相关记录或目标,如包括逻辑磁盘的逻辑磁盘组,各逻辑磁盘分别被表示为板(slab)的序列;包括板的板组,各板分别表示为范围的集合;和包括范围的范围组,各范围分别表示存储设备、物理地址和范围长度。此外,这些相关记录或目标的集合可以表示特定组织,例如,包括表示逻辑磁盘的第一分级水平、表示板的第二分级水平和表示范围的第三分级水平的分级结构。因此,存储设备组所表明的逻辑磁盘内的位置可以通过首先识别包括逻辑磁盘的位置的板并随后识别包括所述位置的板内的至少一个范围来定位。
作为此第一方面的第五种变化,通过本文呈现的技术访问存储设备组可以使得存储设备组中具有特定类型的灵活性。作为第一实例,第一板可以分配用于指定第一布置计划的逻辑磁盘,并且第二板分配用于指定与第一布置计划不同的第二布置计划的逻辑磁盘。作为第二实例,从应用接收的至少一容量请求指定板使用,并且供应组件被配置成根据板的板使用来选择布置计划。具体来说,第一板被分配用于具有第一板容量的逻辑磁盘,并且第二板被分配用于具有与第一板容量不同的第二板容量的逻辑磁盘。
作为此第一方面的第六种变化,许多类型的布置计划可以由存储组表示。示例性布置计划组可以例如包括:指定一个存储设备上的范围分配的整体(monolithic)布置计划;指定至少两个存储设备上的范围分配的条带化布置计划,所述至少两个存储设备一起提供板分配请求的容量;指定分别提供板分配请求的容量并且被镜像化的范围分配的镜像布置计划;以及指定至少一个存储设备上的至少一个数据范围和至少一个其它存储设备上的至少一个检验符范围的分配的检验布置计划,所述至少一个存储设备一起提供板分配请求的容量,所述至少一个其它存储设备存储用于数据范围的检验符。本领域技术人员可以对情景、组织和本文呈现的技术的使用设计出许多变化。
D2. 技术的变化
可以在各实施例之间不同的第二方面涉及本文呈现的技术的应用。
作为第一实例,在接收到产生存储区域的分配请求之后,一个实施例可以制止初始化存储区域。作为第二实例,在至少一个位置组包括分别存储数据值的至少两个数据位置的情况下,奇偶性位置存储各数据位置的各数据值的奇偶性值。在该情景下,在接收到将至少一个数据值写入到位置组的相应位置的写入请求之后,实施例可以将数据值写入到所述数据位置;计算关于所述位置组的奇偶性值;将所述奇偶性值存储在用于位置组的奇偶性位置处;和更新使用位图以指示值存在于位置组的位置处。一个实施例也可以通过如下方法来计算奇偶性值:如果使用位图指示数据值存在于位置组处,那么读取存储在位置组的其它数据位置处的所存储的数据值;使用所存储的数据值和写入请求的数据值来计算奇偶性值;并且如果使用位图未指示值存在于位置组处,那么使用写入请求的数据值和关于位置组的其它数据位置的默认值来计算奇偶性值。此外,在写入包括不具有数据值的位置组的至少一个未写入位置的情况下,如果使用位图未指示值存在于位置组处,那么实施例可以在位置组的相应未写入位置处写入默认值。或者,在写入请求指定关于位置组的所有数据位置的数据值的情况下,所述实施例可以使用写入请求的数据值来计算奇偶性值。
作为另一个实例,在接收到丢弃位置组的值的请求之后,更新使用位图以指示所述值不存在于位置组的位置处。
作为另一个实例,在相应位置组包括至少两个弹性值的情况下,在检测到位置组中的一个位置的故障之后,一个实施例可确定使用位图是否指示所述值对于位置组存在。如果存在,那么所述实施例可以使用位置组的其它弹性值,恢复所述位置组处的值。然而,如果不存在,那么所述实施例可以制止恢复所述位置组处的值。
作为另一个实例,一个实施例可以将使用位图存储在存储组中。具体来说,对于包括日记(该日记被配置成发起对存储组的位置的写入请求)的存储组来说,一个实施例可以更新使用位图,包括:对存储组的位置的写入请求进行降级之后更新使用位图。例如,存储组的日记可以包括具有头指示器和尾指示器的日志,并且对存储组的写入可以首先存储在日记中(例如,头指示器与尾指示器之间),直到其最终从存储区域写出为止。在这些实施例中,并不是将使用位图频繁写入到存储设备,而是在将写入恰好从日记逐出(例如,通过对尾指示器进行增量以超过日记中的值)之前,一个实施例可以将使用位图写入到存储设备上。这种替代可以是可行的,例如,因为如果存储设备在将值从日记逐出之前发生故障,那么写入的值仍被存储在物理媒体上的日记中,并且设备可以通过重新进行日记中的写入来从故障恢复。作为另一个实例,存储组可以包括至少两个存储区域和使用位图阵列,该使用位图阵列包括使用位图,各使用位图分别存储存在于存储区域的相应位置中的值的指示。
作为另一个实例,使用位图可以通过压缩使用位图以产生压缩的使用位图并且将压缩的使用位图存储在存储设备上来存储。此外,通过行程长度对使用位图进行编码来压缩使用位图可能是有利的。此外,实施例可以计算压缩的使用位图的压缩比率,并且如果压缩比率低于压缩比率阈值,那么可以将压缩的使用位图存储在存储组中, 但是如果压缩比率不低于压缩比率阈值,那么将未压缩的使用位图存储在存储组中。作为另一个实例,实施例可以配置成将至少两个使用位图存储在存储组的至少两个位置中,并且在接收到使用位图读取请求以读取使用位图之后,读取使用位图序列中的最近的使用位图。例如,相应使用位图以序列号存储,并且存储位图的每个连续存储可以用比存储在存储组中的其它使用位图更高的序列号来存储(例如,连续增量逻辑序列号)。或者,存储组可以被存储在包括至少两个使用位图槽和最近使用位图指示器的使用位图日志中。因此,使用位图可以通过对最近使用位图指示器进行增量且将使用位图存储到由最近的使用位图指示器所指示的使用位图槽处来存储,并且通过由最近的使用位图指示器所指示的使用位图槽中的使用位图来读取。本领域技术人员可以设计出许多变化。
E. 计算环境
图3和以下论述提供实施本文阐述的一个或多个规定的实施例的适合的计算环境的简洁概述。图3的操作环境仅为适合的操作环境的一个实例,并不打算对操作环境的使用或功能性的范围提出任何限制。示例性计算设备包括但不限于个人计算机、服务器计算机、手持式或便携式设备、移动设备(如移动电话、个人数字助理(PDA)、媒体播放器等)、多处理器系统、消费性电子产品、迷你计算机、大型计算机、包括上述系统或设备中的任一个的分布式计算环境等。
图3示出包括配置成实施本文提供的一个或多个实施例的计算设备302的系统500的一个实例。在一个配置中,计算设备302包括至少一个处理单元306和存储器308。取决于计算设备的精确配置和类型,存储器308可以为易失性的存储器(如RAM)、非易失性的存储器(如ROM、快闪存储器等)或这两种的某种组合。图3中通过虚线304示出此配置。
在其它实施例中,设备302可以包括额外特征和/或功能性。例如,设备302也可以包括额外储存器(例如,可去除和/或不可去除的储存器),所述储存器包括但不限于磁性储存器、光学储存器等。此类额外储存器在图3中由储存器310示出。在一个实施例中,实施本文提供的一个或多个实施例的计算机可读指令可以在储存器310中。储存器310也可以存储实施操作系统、应用程序等的其它计算机可读指令。计算机可读指令可以载入储存器308中以由例如处理单元306执行。
本文使用的术语“计算机可读媒体”包括计算机存储媒体。计算机存储媒体包括以用于存储信息(如计算机可读指令或其它数据)的任何方法和技术来实施的易失性和非易失性、可去除和不可去除的媒体。存储器308和储存器310是计算存储媒体的实例。计算存储媒体包括但不限于RAM、ROM、EEPROM、快闪存储器或其它存储器技术、CD-ROM、数字化通用磁盘(DVD)或其它光学储存器、磁带盒、磁带、磁盘储存器或其它磁性存储设备,或者可用以存储所期望的信息并可以由设备302访问的任何其它媒体。任何此类计算机存储媒体可以是设备302的部分。
设备302也可以包括允许设备302与其它设备通信的通信连接316。通信连接316可以包括但不限于调制解调器、网络接口卡(NIC)、集成式网络接口、射频发送器/接收器、红外端口、USB连接,或者用于将计算设备302连接到其它计算设备的其它接口。通信连接316可以包括有线连接或无线连接。通信连接316可以发送和/或接收通信媒体。
术语“计算机可读媒体”可以包括通信媒体。通信媒体通常包括如载波或其它传送机构的“已调制数据信号”中的计算机可读指令或其它数据,并且包括任何信息传递媒体。术语“已调制数据信号”可以包括如下的信号,该信号具有其特征组中的一个或多个或以此方式改变以对信号中的信息进行编码。
设备302可以包括输入设备314,如键盘、鼠标、笔、声音输入设备、触摸输入设备、红外相机、视频输入设备和/或任何其它输入设备。设备302中也可以包括输出设备312,如一个或多个显示器、扬声器、打印机和/或任何其它输出设备。输入设备314和输出设备312可以通过有线连接、无线连接或其任何组合连接到设备302。在一个实施例中,来自另一计算设备的输入设备或输出设备可以用作计算设备302的输入设备314或输出设备312。
计算设备302的组件可以通过各种互连(如总线)连接。这些互连可以包括外部组件互连(PCI) (如高速PCI (PCI Express))、通用串行总线(USB)、火线(firewire)(IEEE 1394)、光学总线结构等。在另一个实施例中,计算设备302的组件可以通过网络互连。例如,存储器308可以包括位于由网络互连的不同物理位置中的多个物理存储器单元。
本领域技术人员将认识到,用以存储计算机可读指令的存储设备可以跨网络分布。例如,可通过网络318访问的计算设备320可以存储计算机可读指令以实施本文提供的一个或多个实施例。计算设备302可以访问计算设备320并下载计算机可读指令的一部分或所有以供执行。或者,计算设备302可以在需要时下载计算机可读指令片,或者一些指令可以在计算设备302处执行而一些指令在计算设备320处执行。
F. 术语的使用
如本申请中所使用,术语“组件”、“模块”、“系统”、“接口”等通常旨在指代计算机相关实体,或硬件、硬件与软件的组合、软件或执行中的软件。例如,组件可以为但不限于运行在处理器上的程序、处理器、对象、可执行程序、执行的线程、程式和/或计算机。通过示例的方式,运行在控制器上的应用和控制器都可以为组件。一个或多个组件可以常驻在程序和/或执行的线程内,并且组件可以位于一个计算机上和/或分布在两个或两个以上计算机之间。
另外,所主张的主题可以被实施为使用标准编程和/工程技术来产生软件、固件、硬件或其任何组合来控制计算机以实施所公开的主题的方法、装置或制品。如本文使用的术语“制品”旨在涵盖可从任何计算机可读设备、载体或媒体访问的计算机程序。当然,本领域技术人员将认识到,在不脱离所主张的主题的范围或精神的情况下可以对此配置进行许多修改。
本文提供实施例的各种操作。在一个实施例中,所描述的操作中的一个或多个可以构成存储在一个或多个计算机可读媒体上的计算机可读指令,所述指令如果由计算设备执行,将使得计算设备执行所描述的操作。描述操作的一些或所有的次序不应被解释为暗示这些操作必须依赖于次序。本领域技术人员将了解,替代性次序具有本描述的益处。另外,将理解,并非所有操作必须出现在本文提供的每个实施例中。
此外,本文使用词“示例性”来意指用作实例、例子或说明。本文描述为“示例性”的任何方面或设计不必被解释为优于其它方面或设计。相反,词语示例性的使用旨在以具体方式呈现概念。如本申请中所使用,术语“或”旨在意指包含性“或”而非排他性“或”。也就是说,除非另有说明,或者从上下文清楚看出,“X使用A或B”旨在意指自然包含性排列中的任一个。也就是说,如果X使用A;X使用B;或者X使用A和B,那么在上述任一种情况下都满足“X使用A或B”。此外,除非另有说明或者从上下文清楚看出是针对单数形式,本申请和所附权利要求书中使用的冠词“一”和“一个”通常可以解释为意指“一个或多个”。
另外,尽管已经相对于一个或多个实施例展示和描述了本公开,但是本领域技术人员基于对本说明书和附图的阅读和理解将会发现等同变更和修改。本公开包括所有这些修改和变更,并且仅由以上权利要求书的范围来限制本公开。具体来说,关于由上述组件(例如,元件、资源等)执行的各种功能,除非另有指示,用以描述这些组件的术语旨在对应于执行所述组件的指定功能的任何组件(例如,在功能上等同),即使在结构上不等同于执行本公开的本文所述示例性实施例中的功能的所公开结构,也是如此。此外,虽然本公开的具体特征可能已相对于几个实施中的仅一个实施进行公开,但是此特征可以与其它实施例的一个或多个其它特征组合,因为对于任何给定或具体应用来说,这可能是所期望的和有利的。此外,就具体实施方式或权利要求书中使用的术语“包含”、“具有”或其变形的范围来说,这些术语在形式上旨在是包含性的,类似于术语“包括”。