在存储设备中存储数据的制作方法

文档序号:14203850阅读:124来源:国知局
在存储设备中存储数据的制作方法



背景技术:

在计算设备中,使用文件系统来管理和组织如何将数据存储在存储设备中以及如何从存储设备中检索数据。文件系统始终监视存储设备中存储数据的区域和存储设备中的空闲区域。文件系统还可以管理从不同类型的存储设备中(例如,在融合堆栈存储阵列中)的数据的存储和检索。

附图说明

参考附图提供了详细描述,在附图中:

图1a图示出根据本公开内容的示例技术的用于存储数据的系统实现。

图1b图示出根据本公开内容的示例技术的用于存储数据的系统实现。

图2(a)-2(d)图示出根据本公开内容的示例技术的用于存储数据的示例场景。

图3和4图示出根据本公开内容的示例技术的用于存储数据的示例方法实现。

图5图示出根据本公开内容的示例技术的实现用于存储数据的非暂时性计算机可读介质的示例计算环境。

具体实施方式

在计算设备中使用文件系统来将数据存储在存储设备中以及从存储设备中检索数据。为此,存储设备将可用存储空间暴露给文件系统。在从应用接收到针对用于存储数据的存储空间的分配的请求时,文件系统利用存储设备所暴露的存储空间来进行分配并存储数据。

文件系统一般地在块中对数据进行寻址,并基于由提供数据的应用指定的逻辑偏移量来存储数据。文件系统使用的块大小可以是预定义的。例如,一个文件系统可以使用4kb的块大小,而另一文件系统可以使用8kb的块大小。由应用指定的逻辑偏移量可能是也可能不是块大小的倍数。因此,逻辑偏移量——即要存储的数据的起始逻辑地址——可能出现在块内,并且可能不与块起始地址对齐。

另一方面,存储设备将存储空间作为区块来管理。对于给定的存储设备,区块可以具有固定的大小,但在存储设备之间可能有所不同。例如,一个存储设备可以使用512字节的区块大小,而另一存储设备可以使用16kb的区块大小。存储设备可能具有碎片化的空闲区域和已使用区域。每个空闲区域都可以由其在其处起始的设备偏移量来进行标识。设备偏移量可能是也可能不是区块大小的倍数。因此,设备偏移量——即空闲区域的起始地址——可能出现在区块内,并且可能不与区块起始地址对齐。

此外,因为文件系统块大小和存储设备区块大小可以彼此不同,所以逻辑偏移量相对于文件系统块大小和相比于设备偏移量的存储设备区块大小可以不同地对齐。在一些场景中,文件系统可以使用具有不同区块大小的不同类型的存储设备。例如,对于必须要实时更新的在线事务,可以使用快速固态驱动器,而周期性增量备份可以使用较慢的硬盘来满足。因为不同的存储设备可以具有不同的区块大小,所以逻辑偏移量和设备偏移量的对齐也可以跨不同的存储设备而变化。

对齐方面的差异可以影响存储设备所利用的容量优化技术(诸如精简配置、重复数据删除、压缩和精简回收)的效率。精简配置允许文件系统根据需要进行存储配置,而精简回收使文件系统能够根据需要通知存储设备可以对存储进行重新分配(deallocate)。重复数据删除和压缩通过例如用指向原始数据的指针替换重复数据来防止存储原始数据的副本。因为这些容量优化技术由存储设备所应用,所以它们在区块级上来实行。因此,假使重复数据不在区块级上同样地对齐,则这些技术的效率会降低。同样地,如果空闲区域在区块级上不对齐,则这些技术的效率会降低。因为文件系统以可能与区块大小不同的块大小来组织数据,并且由于逻辑偏移量和设备偏移量的对齐方面的差异,所以容量优化技术的效率被降低。

本公开内容涉及用于在存储设备中存储数据的系统和方法。所描述的方法和系统有助于改善存储设备中使用的容量优化技术的效率。所描述的系统和方法可以在包括独立计算设备、联网计算设备以及在虚拟环境中操作或提供虚拟环境的计算设备的各种计算设备中实现。

在一个示例中,可以通过由系统和方法实现的自适应文件系统来实行将数据存储在存储设备中。为此,自适应文件系统可以使用基于文件系统块大小和设备区块大小确定的对齐参考值来分配存储。对齐参考值是将设备偏移量和逻辑偏移量的对齐与之进行比较的参考值。自适应文件系统分配存储,使得逻辑偏移量和设备偏移量二者都与对齐参考值对齐或者逻辑偏移量和设备偏移量二者都同样地对偏(misalign)对齐参考值,例如对偏相同的字节数。

在一个示例中,基于文件系统块大小和设备区块大小的最小公倍数来确定对齐参考值。为了分配存储,自适应文件系统通过将设备偏移量偏移基于逻辑偏移量、设备偏移量和对齐参考值计算出的偏移量值来确定用于要存储数据的设备起始地址。因此,自适应文件系统将块大小、区块大小、逻辑偏移量和设备偏移量纳入考虑来确定设备起始地址。如稍后将例示的,这有助于在存储设备中在区块级上对齐重复数据和空闲区域。

因此,自适应文件系统确保存储被分配成使得可以高效地利用容量优化技术。此外,自适应文件系统可以针对具有不同区块大小的不同存储设备实行对齐,而不必实现可变分块模型或可变大小的文件系统块支持。因此,实现自适应文件系统中涉及到的处理开销是最小限度的。此外,因为对齐适用于每个数据存储请求,而不是仅仅将文件的开头对齐到区块的开头,因此本公开内容可以通过允许容量优化技术在更细粒度的数据级上高效地工作而不是仅仅在文件级上工作来随着文件的增长而更高效地管理存储空间。

参考附图进一步描述以上提到的系统和方法。应当注意的是,描述和附图仅仅例示出本公开内容的原理以及本文中描述的示例,并且不应该被解释为对本主题的限制。因此要理解的是,可以设想出体现本公开内容的原理的各种布置,即使它们没有在本文中明确地描述或示出。此外,在本文中列举原理、方面及其示例的所有陈述旨在包含其等同物。此外,为了简单起见,且不受限制,在整个附图中使用相同的数字来引用相同的特征和组件。

图1a图示出根据本公开内容的示例技术的用于存储数据的示例系统实现。如图所示,系统100包括(一个或多个)处理器102和文件系统对齐模块104。文件系统对齐模块104在下文中也称为fs对齐模块104。可以将系统100实现为诸如台式计算机、膝上型计算机、服务器、平板等的各种计算系统中的任何。

可以将处理器102实现为微处理器、微计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令操纵信号的任何设备。除其它能力之外,处理器102可以提取并执行存储在存储器中的计算机可读指令。可以通过使用专用硬件以及能够执行机器可读指令的硬件来提供处理器102的功能。

fs对齐模块104可以被耦合到(一个或多个)处理器102和/或可由(一个或多个)处理器102执行,并且除其它外还可以包括实行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。

在操作中,fs对齐模块104可以接收用于存储数据的存储分配的请求。存储分配请求可以由应用生成,并且可以包括要在其处存储数据的逻辑偏移量和要存储的数据的大小。如可以理解的,逻辑偏移量是要在其处存储数据的文件中的位置。fs对齐模块104可以确定数据要被存储在存储设备106中,并且可以接收存储设备106的区块大小以及存储设备106上的空闲区域的设备偏移量。为了便于讨论,在后文中,设备区块大小也称为区块大小,并且文件系统块大小也称为块大小。在一个示例中,fs对齐模块104例如在映射表中维持区块大小和对其可用的存储设备的空闲区域的记录,并且因此可以从映射表中读取所述信息。在另一示例中,fs对齐模块104可以查询存储设备106以确定空闲区域的区块大小和设备偏移量。在另一示例中,fs对齐模块104可以从其与之一起操作的文件系统接收区块大小和设备偏移量。此外,fs对齐模块104还可以知道或从文件系统接收由所述文件系统用于存储数据的块大小。

然后,fs对齐模块104基于设备区块大小、文件系统块大小、设备偏移量和逻辑偏移量来计算偏移量值,以响应于存储分配请求来确定用于存储数据的设备起始地址。在一个示例中,将设备起始地址设置成所述设备偏移量移位所述偏移量值。

在一个实现中,为了计算偏移量值,fs对齐模块104可以基于区块大小和文件系统块大小来确定对齐参考值。例如,对齐参考值可以是区块大小和文件系统块大小的最小公倍数。在另一示例中,对齐参考值可以是区块大小和文件系统块大小的最小公倍数的倍数。在又另一示例中,对齐参考值可以是区块大小和文件系统块大小的某其它函数。

然后,fs对齐模块104可以计算偏移量值,使得当逻辑偏移量与对齐参考值对齐时,设备起始地址与对齐参考值对齐,并且当逻辑偏移量对偏对齐参考值时,设备起始地址以同样的大小对偏对齐参考值。换言之,偏移量值是设备偏移量将要移位的字节数,使得在移位之后,设备偏移量和逻辑偏移量二者对齐或者二者同样地对偏。将要理解的是,同样地对偏是指设备偏移量和逻辑偏移量以相同的字节数对偏对齐参考值。因此,假使确定了设备偏移量和逻辑偏移量二者已经对齐或已经同样地对偏对齐参考值,则偏移量值可以为零。这样计算出的设备起始地址可以用于将数据存储在存储设备106中。

因此,随着文件的增长,数据以这样的方式进行存储:使得在文件中的相同逻辑偏移量处的数据在区块中同样地对齐。因此,可以在数据级上更高效地实行诸如重复数据删除、压缩和精简回收之类的容量优化。

图1b图示出根据本公开内容的示例技术的用于存储数据的另一示例系统实现。如图所示,除了(一个或多个)处理器102之外,系统100还可以包括(一个或多个)接口108、存储器110、模块112和系统数据114。

接口108可以包括各种各样的基于机器可读指令的接口和硬件接口,其允许与用户以及与其它通信和计算设备(诸如网络实体、网络服务器、和外部存储库以及外围设备)进行交互。存储器110可以包括任何非暂时性计算机可读介质,包括例如易失性存储器(例如,ram)和/或非易失性存储器(例如,eprom、闪速存储器、忆阻器等)。存储器110也可以是外部存储器单元,诸如闪速驱动器、紧凑盘驱动器、外部硬盘驱动器等。

模块112可以被耦合到(一个或多个)处理器102和/或可由(一个或多个)处理器102执行,并且除其它外还可以包括实行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。系统数据114可以用作存储库,其用于存储可由模块112提取、处理、接收或创建或者从连接的计算系统和存储设备接收的数据。

此外,模块112可以包括fs对齐模块104、文件系统模块116和其它模块118。其它模块118可以包括补充计算系统100的应用和功能(例如,操作系统中的程序)的程序或编码指令。虽然被示出为分离的模块,但将理解的是,在其它实现中,可以将fs对齐模块104实现为文件系统模块116的一部分。在一个实现中,文件系统模块116本身可以是系统100的操作系统的一部分。将理解的是,fs对齐模块104和文件系统模块116可以一起形成根据本主题的自适应文件系统。

此外,如图所示,存储设备106可以是存储阵列120的一部分。存储阵列可以包括多个其它存储设备,诸如第二存储设备122等。在一个示例中,第二存储设备122可以具有与存储设备106相同的类型,并且可以具有相同的区块大小。在另一示例中,第二存储设备122可以具有与存储设备106不同的类型,并且可以具有不同的区块大小。在一个示例中,存储阵列120可以是具有不同分块属性的异构存储设备池的融合堆栈。fs对齐模块104可以如本文中讨论的那样根据各种存储设备的各自的区块大小来自适应地处理各种存储设备中的数据存储。

在各种实现中,系统100可以与存储阵列120位于一处,或可以通过通信网络(图中未示出)与存储阵列120通信。如果使用,则通信网络可以是无线网络、有线网络或其组合。通信网络也可以是个体网络或彼此互连并且起到单个大型网络(例如,互联网或内联网)的作用的许多这样的个体网络的集合,并且可以被实现为诸如内联网、局域网(lan)、广域网(wan)等的不同类型的网络中的任何。通信网络还可以包括个体网络,诸如但不限于全球通信系统(gsm)网络、通用电信系统(umts)网络、长期演进(lte)网络等。此外,存储阵列120可以包括作为例如通过互联网小型计算机系统接口(iscsi)或光纤信道实现的存储区域网络(san)而连接的存储设备、直接附接的存储等。

在又另一示例实现中,系统100可以在虚拟机环境中实现,并且在这样的情况下,fs对齐模块104和文件系统模块116可以由虚拟机主机操作系统(诸如管理程序)来实现。虚拟机主机操作系统可以与存储阵列120通信,并管理存储空间的分配以及针对托管在其上的虚拟机的数据的存储和检索。将显而易见的是,可以基于本公开内容得出各种其它示例实现,并且所有这样的实现旨在被覆盖在本公开内容的范围内,尽管在本文中并未明确地讨论。

在操作中,如所讨论的,fs对齐模块104可以接收包括要存储的数据的逻辑偏移量的存储分配请求。此外,fs对齐模块104可以接收要在其中存储数据的存储设备106的区块大小和存储设备中的空闲区域的设备偏移量。在一个示例中,fs对齐模块104从文件系统模块116接收存储分配请求和关于存储设备106的信息。文件系统模块116始终监视暴露给它的存储设备(诸如存储阵列120中的存储设备106和122)的空闲区域和已使用区域。文件系统模块116还始终监视存储在存储设备上的文件,并允许应用从存储阵列120中存储、修改和检索数据。在一个实现中,文件系统模块116可以将关于文件和存储设备区域的信息存储在系统数据114中。在一个实现中,文件系统模块116可以使用存储阵列120上的代理(图中未示出)来提取所述信息以将其提供给fs对齐模块104。

对于存储分配请求,fs对齐模块104可以确定设备起始地址,使得设备起始地址与逻辑偏移量相对于对齐参考值同样地对齐。如上所讨论的,设备起始地址可以通过将设备偏移量偏移偏移量值来确定。

此外,fs对齐模块104可以通过将设备起始地址与数据的大小相加来确定用于存储分配请求的设备结束地址。在一个示例中,当设备结束地址超过空闲区域的结束地址时,fs对齐模块104可以确定小于或等于空闲区域的结束地址的对齐设备结束地址,并且可以将设备结束地址设置为该对齐设备结束地址。此外,可以在该对齐设备结束地址处截断数据,并且可以将剩余的数据存储在新的空闲区域中。

对于新的空闲区域,可以以与上文讨论的同样的方式来计算新的设备起始地址和新的设备结束地址。新的空闲区域可以在存储设备106或第二存储设备122中。此外,如果在新的设备起始地址和新的设备结束地址之间不能容纳剩余的数据,则所述剩余的数据可以被进一步截断并存储在下一空闲区域中。下一空闲区域可以在存储设备106或第二存储设备122或者存储阵列120中的又另一存储设备上。因此,数据也可以跨不同的存储设备分布,同时每次使设备起始地址适应于相应的存储设备分块属性。

因此,fs对齐模块104可以通过基于要存储的数据的大小针对每个空闲区域来计算设备起始地址和设备结束地址并且将设备起始地址和设备结束地址提供给文件系统模块116以相应地存储数据来促进数据的存储。结合如图2(a)-(d)中例示的各种场景来进一步解释这些和其它方面。

图2(a)-2(d)图示出根据本公开内容的示例技术的用于存储数据的示例场景s1-s4。将参考下面表1中示出的示例来讨论示例场景。对于这些示例场景,文件系统块大小被认为是8kb,而设备区块大小被认为是16kb。因此,当按照块大小和区块大小的lcm来计算时,对齐参考值可以被确定为16kb。示例场景s5虽然未在附图中示出,但是可以参考下面提供的描述来理解。

在图2(a)-2(d)中,b01,b1,...用于表示文件系统块大小,而c0,c1,...用于表示设备区块大小。在本示例中,每个区块都具有两个块的大小,并因此相应地进行表示。此外,lo表示逻辑偏移量,do表示设备偏移量,并且dsa表示在将do移位偏移量值之后计算出的设备起始地址。

考虑图2(a)中表示的场景s1,其中存储分配请求请求在128kb的文件逻辑偏移量处存储64kb数据。可用空闲区域的设备偏移量可以是480kb,并且空闲区域的大小可以是100kb,其结果是,空闲区域的结束将在580kb处。在这种情况下,逻辑偏移量和设备偏移量二者是对齐参考值的倍数。因此,计算出的偏移量值将为0kb,并且设备起始地址将与设备偏移量相同。此外,因为设备起始地址和数据大小的总和(544kb)小于空闲区域的结束,所以数据将不会被截断并可以从所述设备起始地址开始存储在空闲区域中。因此,如场景s1中所示,lo在块b16的偶数块边界处开始,并因此与lcm对齐。do也在区块c30的区块边界处开始,并也与lcm对齐。因此,偏移量值为零,并且dsa与do相同。数据以从c30开始的对齐方式进行存储。

考虑图2(b)中表示的场景s2,其中存储分配请求请求在128kb的文件逻辑偏移量处存储64kb数据。可用空闲区域的设备偏移量可以是488kb,并且空闲区域的大小可以是100kb,其结果是,空闲区域的结束将在588kb处。在这种情况下,虽然逻辑偏移量是对齐参考值的倍数,但设备偏移量不是。因此,计算出的偏移量值将是8kb,并且设备起始地址将是496kb,即设备偏移量移位8kb。此外,因为设备起始地址和数据大小的总和(560kb)小于空闲区域的结束,所以数据将不会被截断并可以从所述设备起始地址开始存储在空闲区域中。因此,如场景s2中所示,lo在块b16的偶数块边界处开始并与lcm对齐,而do在区块c29的区块边界内开始并且不与lcm对齐。因此,dsa被计算为将do移位所述偏移量值以便与下一区块c30的起始对齐。

考虑图2(c)中表示的场景s3,其中存储分配请求请求在200kb的文件逻辑偏移量处存储64kb数据。可用空闲区域的设备偏移量可以是256kb,并且空闲区域的大小可以是100kb,其结果是,空闲区域的结束将在356kb处。在这种情况下,虽然逻辑偏移量不是对齐参考值的倍数,但设备偏移量是倍数。因此,计算出的偏移量值将是8kb,并且设备起始地址将是264kb,即设备偏移量移位8kb。此外,因为设备起始地址和数据大小的总和(328kb)小于空闲区域的结束,所以数据将不会被截断并可以从所述设备起始地址开始存储在空闲区域中。因此,如场景s3中所示,lo在块b17的奇数块边界处开始并因此不与lcm对齐。另一方面,do在区块c30的区块边界处开始并与lcm对齐。因此,dsa是将do移位所述偏移量值以便在区块c30内开始并且不与lcm对齐。

考虑图2(d)中表示的场景s4,其中存储分配请求请求在600kb的文件逻辑偏移量处存储64kb数据。可用空闲区域的设备偏移量可以是200kb,并且空闲区域的大小可以是100kb,其结果是,空闲区域的结束将在300kb处。在这种情况下,逻辑偏移量和设备偏移量二者都不是对齐参考值的倍数。因此,计算出的偏移量值将为0kb,并且设备起始地址将与设备偏移量相同。此外,因为设备起始地址和数据大小的总和(264kb)小于空闲区域的结束,所以数据将不会被截断并可以存储在空闲区域中。因此,如场景s4中所示,lo在块b17的奇数块边界处开始并且因此不与lcm对齐。do在区块c30内开始并且也不与lcm对齐。因此,偏移量值为零,并且dsa与do相同。

在未在附图中示出的又另一示例中,考虑场景s5,其中存储分配请求请求在256kb的文件逻辑偏移量处存储4096kb数据。第一可用空闲区域的设备偏移量可以是1000kb,并且空闲区域的大小可以是1024kb,其结果是,第一空闲区域的结束将在2024kb处。在这种情况下,虽然逻辑偏移量是对齐参考值的倍数,但设备偏移量不是。因此,计算出的偏移量值将是8kb,并且设备起始地址将是1008kb,即设备偏移量移位8kb。此外,因为设备起始地址和数据大小的总和(5104kb)大于第一空闲区域的结束,所以数据将被截断。为此,可以将对齐结束地址计算为作为对齐参考值的倍数的小于或等于空闲区域的结束的最高地址。在这种情况下,对齐结束地址将是2016kb。因此,1008kb的数据将从1008kb的设备起始地址开始被存储在第一空闲区域中,而剩余的3088kb数据将被截断。

因此,剩余的3088kb的数据将在等于第一空闲区域中的数据的逻辑偏移量与存储在第一空闲区域中的数据的大小的总和的文件逻辑偏移量处开始,所述文件逻辑偏移量将是1264kb。考虑第二空闲区域的设备偏移量在3000kb处并且可用的第二空闲区域的大小是1024kb,使用上面讨论的逻辑,可以计算出第二空闲区域的设备起始地址和设备结束地址分别为3008kb和4016kb。相应地,另一1008kb的数据将被存储在第二空闲区域中,并且剩余的2080kb数据将被截断以存储在下一空闲区域中。

同样地,考虑在5000kb的设备偏移量处具有1024kb大小的第三空闲区域,可以计算出第三空闲区域的设备起始地址和设备结束地址分别为5008kb和6016kb。相应地,另一1008kb的数据将被存储在第三空闲区域中,并且剩余的1072kb数据将被截断以存储在下一空闲区域中。

同样地,考虑在7000kb的设备偏移量处具有1024kb大小的第四空闲区域,可以计算出第四空闲区域的设备起始地址和设备结束地址分别为7008kb和8016kb。相应地,另一1008kb的数据将被存储在第三空闲区域中,并且剩余的64kb数据将被截断以存储在下一空闲区域中。

在第五空闲区域中,考虑在9000kb的设备偏移量处可用的1024kb大小,可以计算出第五空闲区域的设备起始地址和设备结束地址分别为9008kb和9072kb,以存储剩余的64kb数据。

因此,可以基于要存储的数据的逻辑偏移量来实行设备起始地址的对齐。如果逻辑偏移量是对齐的,则空闲区域的设备起始地址可能在尚未对齐时被有意地对齐。另一方面,如果逻辑偏移量未对齐,则空闲区域的设备起始地址可能在尚未不对齐时被有意地以同样的大小不对齐。此外,当数据的大小超过可用空闲区域时,结束地址也可以被有意地对齐。因此,容量优化技术(诸如重复数据删除和精简回收)可以更高效地工作,因为同样的数据和空闲区域将在区块中被同样地对齐。

此外,由于设备偏移量的移位或设备结束地址的对齐而产生的跳过的空闲区域可以用于存储小的文件或元数据,从而减少有效的磁盘碎片。

图3和图4分别图示出根据本公开内容的示例技术的用于存储数据的示例方法实现300和400。

描述方法300和400的顺序不意图被解释为限制,并且可以以任何顺序组合任何数量的所描述的方法块来实现方法300和400或者替代方法。此外,方法300和400可以由(一个或多个)处理器或(一个或多个)计算设备通过任何合适的硬件、非暂时性机器可读指令或其组合来实现。

可以理解的是,方法300和400的步骤可以由已编程的计算设备来实行,并且可以基于存储在非暂时性计算机可读介质中的指令来执行。非暂时性计算机可读介质可以包括例如数字存储器、诸如一个或多个磁盘和磁带的磁性存储介质、硬驱动器或光学可读数字数据存储介质。此外,虽然方法300和400可以在各种系统中实现;但是为了便于解释,关于前述系统100来解释方法300和400。

参考方法300,在块302处,接收用以将数据写入在存储设备上的存储分配请求。存储分配请求可以包括数据的逻辑偏移量和数据的大小。在一个示例中,该请求可以由fs对齐模块104来接收。

在块304处,基于数据的逻辑偏移量、存储设备上的空闲区域的设备偏移量、文件系统块大小和存储设备的区块大小来确定设备起始地址。在一个示例中,通过将设备偏移量偏移一偏移量值(其是设备偏移量和对齐参考值的模运算)来确定设备起始地址。对齐参考值进而是文件系统块大小和存储设备区块大小的函数。在一个示例中,文件系统对齐模块104可以确定设备起始地址。

在块306处,基于设备起始地址、要存储的数据的大小和空闲区域的大小来确定设备结束地址。在一个示例中,如果设备起始地址和要存储的数据的大小的总和位于该空闲区域内,那么将设备结束地址设置成该总和。在另一示例中,如果总和超过空闲区域,那么可以将设备结束地址设置成该空闲区域内的地址,并且可以在设备结束地址处截断数据。然后,可以将截断的数据存储在新的空闲区域中。在一个示例中,文件系统对齐模块104可以确定设备结束地址。

在块308处,将数据的至少一部分存储在存储设备上在设备起始地址与设备结束地址之间。此外,可以将数据的起始的逻辑偏移量与设备起始地址之间的映射以及存储在设备起始地址与设备结束地址之间的数据的大小存储在映射表中以用于随后的数据检索。在一个示例中,文件系统对齐模块104可以向文件系统模块116提供设备起始地址和设备结束地址以用于数据的存储。

参考图4,其图示出根据本公开内容的技术的用于确定用以存储数据的设备起始地址和设备结束地址的另一方法400,在块402处,将文件系统块大小和设备区块大小的最小公倍数(lcm)确定为对齐参考值。虽然在方法400中讨论的这一实现中使用lcm作为参考值,但在其它实现中,可以使用文件系统块大小和设备区块大小的其它函数作为用于对齐的参考值。

在块404处,基于逻辑偏移量和lcm来确定文件对齐值。同样地,基于设备偏移量和lcm来确定设备对齐值。在一个示例中,文件对齐值被计算为逻辑偏移量和lcm的模运算。同样地,设备对齐值被计算为设备偏移量和lcm的模运算。将理解的是,模是当第一值除以第二值时提供余数的函数。在示例方法400中,所述第二值是lcm。

在块406处,确定文件对齐值和设备对齐值是否相等。如果二者相等,则指示逻辑偏移量和设备偏移量的对齐状态是相同的,即设备偏移量和逻辑偏移量二者对齐或都以相同的字节数对偏。

如果在块406处,发现两个对齐值不相等,则方法400跟随“否”分支前进至块408,其中将设备起始地址计算为对齐设备偏移量和文件对齐值的总和。对齐设备偏移量是作为lcm倍数的小于或等于设备偏移量的最大地址。作为结果,设备起始地址变得与逻辑偏移量同样地对齐。

如果在块406处,发现两个对齐值相等,则方法400跟随“是”分支前进至块410,其中将设备起始地址设置为所述设备偏移量,即不再进行进一步的偏移。

一旦在块408或块410处计算出设备起始地址,方法400就前进至块412,其中将结束地址计算为起始地址和要存储的数据大小的总和。

在块414处,确定结束地址是否大于空闲区域的结束。如果否,那么方法400前进至块422,其中不在结束地址中进行改变。

如果是,那么方法400前进至块416,确定空闲区域的结束是否是lcm的倍数。如果是,那么方法400前进至块420,其中将结束地址重置为空闲区域的结束。如果否,那么方法400前进至块418,其中将结束地址设置为空闲区域中的针对其对lcm的模运算为零(即,其是lcm的倍数)的最高地址。

相应地,一旦设置了结束地址,就可以将数据的至少一部分存储在起始地址与结束地址之间。另外,当数据的大小超过起始地址与结束地址之间的区域时,数据可以在结束地址处被截断。然后,可以将截断的数据存储在新的空闲区域中,并且可以使用方法400针对新的空闲区域来计算新的设备起始地址和新的设备结束地址。另外,当截断数据的大小超过从新的设备起始地址开始可用的新的空闲区域的大小时,数据可以被进一步截断并分布在一个或多个存储设备中。

因此,本公开内容允许跨(例如,存储阵列或融合堆栈中的)分布式存储设备的自适应数据存储,同时还允许高效的容量优化。

图5图示出根据本主题的示例的实现用于将数据存储在存储设备中的非暂时性计算机可读介质的示例计算环境500。

在一个实现中,非暂时性计算机可读介质502可以由诸如系统100的计算系统来利用。系统100可以实现在公共联网环境或专用联网环境中。在一个实现中,计算环境500可以包括通过通信链路506通信耦合到非暂时性计算机可读介质502的处理资源504。

例如,处理资源504可以在诸如先前描述的系统100的计算系统中实现。计算机可读介质502可以是例如内部存储器设备或外部存储器设备。在一个实现中,通信链路506可以是直接通信链路,诸如任何存储器读/写接口。在另一实现中,通信链路506可以是间接通信链路,诸如网络接口。在这样的情况下,处理资源504可以通过网络508访问计算机可读介质502。网络508可以是单个网络或多个网络的组合,并且可以使用各种不同的通信协议。

此外,处理资源504和计算机可读介质502还可以与各种存储设备510(诸如存储阵列中的存储设备)通信。存储设备510可以通过任何的不同方式进行连接,诸如通过互联网小型计算机系统接口(iscsi)或光纤信道实现的存储区域网络(san)、直接附接的存储等。

在一个实现中,计算机可读介质502包括计算机可读指令集,诸如对应于fs对齐模块104和文件系统模块116的指令。处理资源504可以通过通信链路506访问所述计算机可读指令集,并且随后执行所述计算机可读指令集以用于将数据存储在存储设备510中。

例如,所述指令可以是可执行以引起处理资源504接收包括要存储的数据的逻辑偏移量的存储分配请求,并且接收要在其中存储数据的存储设备的区块大小以及存储设备中的空闲区域的设备偏移量。此外,所述指令可以引起处理资源504将逻辑偏移量的对齐状态与设备偏移量的对齐状态进行比较。可以基于区块大小和文件系统块大小来确定对齐状态。如先前所讨论的,可以使用区块大小和文件系统块大小来确定对齐参考值,例如为两个大小的最小公倍数。逻辑偏移量的对齐状态指示逻辑偏移量是否与对齐参考值对齐。

在一个示例中,如果逻辑偏移量是对齐参考值的倍数,那么逻辑偏移量的对齐状态是“真”,指示逻辑偏移量与对齐参考值对齐。否则,逻辑偏移量的对齐状态是“假”。同样地,在一个示例中,如果设备偏移量是对齐参考值的倍数,那么设备偏移量的对齐状态是“真”,指示设备偏移量与对齐参考值对齐。否则,设备偏移量的对齐状态是“假”。

此外,可以计算偏移量值,并且可以基于所述比较来将设备偏移量移位所述偏移量值以获得用于存储分配请求的设备起始地址。在一个示例中,如果逻辑偏移量和设备偏移量二者的对齐状态相同,那么所述偏移量值可以是零。否则,所述偏移量值可以是当设备偏移量除以对齐参考值时的余数的函数。然后,所述指令可以引起处理资源504促进将数据的至少一部分从设备起始地址开始存储在存储设备的空闲区域中。

在一个示例中,如果数据的大小超过从设备起始地址开始可用的空闲区域,则可以截断数据并且可以将剩余的数据存储在具有新的设备偏移量的新的空闲区域中。在一个示例中,数据可以被截断成使得在其处截断数据的结束地址与对齐参考值对齐。此外,对于截断的数据,可以与以上讨论的同样的方式计算新的设备起始地址以用于将所述截断的数据存储在新的空闲区域中。

在一个示例中,新的空闲区域可以位于存储数据的先前部分的相同存储设备中。在另一示例中,新的空闲区域可以位于第二存储设备的存储空间中。相应地,如上所讨论的,所述指令可以引起处理资源504基于截断的数据的逻辑偏移量与用于新的空闲区域的设备偏移量的对齐状态的比较来获得新的起始地址,其中所述对齐状态是基于第二存储设备的区块大小和文件系统块大小来确定的。

在一个示例中,如果截断的数据的大小还超过从新的起始地址开始可用的新的空闲区域的大小,那么可以进一步截断数据并将其存储在下一空闲区域中。因此,要存储的数据可以被多次截断,并跨各种存储设备中的多个空闲区域分布和存储,同时确保每次被截断的数据相对于其逻辑偏移量和从其处开始存储被截断的数据的设备起始地址对齐。此外,如上所讨论的,数据可以相对于在其处截断所述数据的其结束地址对齐。

因此,所存储的数据可以以最小限度的处理开销跨不同的存储设备以细粒度级别进行对齐,并且可以提高由存储设备实现的容量优化技术的有效性。

虽然已经用特定于结构特征和/或方法的语言描述了用于在存储设备上存储数据的系统和方法的实现,但是要理解的是,本主题并不一定局限于所描述的具体特征或方法。相反,所述具体的特征和方法是作为示例实现来公开和解释的。

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