固态驱动器(SSD)是用于持久性数据存储的非易失性数据存储设备,但是不同于硬盘驱动器,不包含可动零件。一些SSD驱动器使用闪速存储器(flash memory),其能够在不被供电的情况下保存数据。闪速存储器的一个缺陷在于,基于闪速存储器的SSD的每个存储器单元在该存储器单元失效之前仅能被写有限次数。为了延长基于闪速存储器的SSD的寿命,采用各种技术来延长驱动器的寿命,诸如耗损均衡(wear leveling),其将写操作更均匀地散布于驱动器的存储器单元之间。
附图说明
在下面的具体实施方式中并且参考附图来描述一些示范性的实施例,其中:
图 1是具有能够被配置为将备用存储空间用于超量配置(over-provisioning)的数据存储驱动器的存储系统的框图;
图2是示出为诸如图1所示的驱动器之一的驱动器进行的两个示例的存储器分配的框图;
图3是操作数据存储驱动器的方法的过程流程图;以及
图4是示出对被配置为操作数据存储驱动器的代码进行存储的有形、非暂态计算机可读介质的框图。
具体实施方式
闪速存储器的一个特征在于,闪速存储器单元不能被直接覆写。因此,当数据被写到SSD存储器单元时,单元必须先被擦除然后被写。在一些情况下,这会导致对于待存储到设备的数据的每个实际的位(bit)进行两次写。在大多数的闪速存储器中,数据是以被称为页(page)的单位来被写的,但数据却是以更大的被称为块(block)的单位来被擦除的。如果块内的足够数据是不需要的(即,失效页),则整个块被擦除,块中的任何好数据被重新写入新的块。新块的被剩下的其余部分能够被写以新数据。擦除块以及将好数据移入新块的过程称为“垃圾收集”。大多数SSD包括一定量的存储空间,其是为垃圾收集、耗损均衡以及重新映射坏块以及其它而预留的。存储容量的物理量与呈现给用户的逻辑容量之间的差异被称为超量配置(over-provisioning)。
诸如耗损均衡和垃圾收集等技术影响驱动器的写放大率(write amplification),这是如下现象:其中在驱动器内写的物理信息的实际量是打算写的数据的逻辑量的倍数。对于给定量的数据存储使用,驱动器的写放大率越高,驱动器的单元就将经受越多次的写。
本公开提供了通过增大驱动器上的可供用于超量配置的存储空间量来降低闪速驱动器的写放大率的技术。为超量配置提供更多存储空间增进了耗损均衡以及垃圾收集算法的效率,这对写放大率具有直接影响。
许多存储系统使用驱动器阵列,并且通过以冗余方式存储数据来提供容错。驱动器的故障会导致控制器将驱动器标识为故障,并且发起将故障驱动器的数据从其它驱动器再生的备用重建过程。同时,坏驱动器能够由消费者更换。在这样的系统中,一定量的系统存储空间被预留用于备用重建过程。例如,一些系统可以包括这样的一个或多个整体驱动器(whole drive):其被预留作为在驱动器故障的情况下使用的备用驱动器。在一些系统中,用于备用重建的存储资源分布遍及多个驱动器。在这样的存储系统中,存储系统的多个驱动器可以包括作为备用存储而被预留的一定量的存储空间,而其余大多数的存储空间是空闲空间——其用于存储主机数据(host data)。
如上所述,可通过提供更多的用于超量配置的存储空间,来降低存储驱动器的写放大率。本文公开的技术通过使得驱动器能够使用被指定作为在不用于备用重建操作时用于超量配置的“备用”存储空间的存储空间,来提供更多的用于超量配置的存储空间。为超量配置提供更多的存储降低了驱动器的写放大率,这减少了驱动器的存储器单元经受的总的写次数并且因此延长了驱动器的可用寿命。
图1是具有可被配置为将备用存储空间用于超量配置的数据存储驱动器的存储系统的框图。将意识到,图1所示的存储系统100仅是根据实施例的存储系统的一个示例。在实际的实现方式中,存储系统100可以包括各种附加的存储设备和网络,其可以通过任何适合的方式互连,取决于具体实现方式的设计考虑。例如,大存储系统将经常具有比在该图示中所示的更多的客户端计算机和存储设备。
存储系统100将数据存储资源提供给任意数量的客户端计算机102,其可以是通用计算机、工作站、移动计算设备等。存储系统100包括存储控制器,在本文称为节点104。存储系统100还包括存储阵列106,其通过节点104来控制。客户端计算机102能够直接与存储系统100耦合或者通过网络108与存储系统100耦合,该网络108可以是局域网(LAN)、广域网(WAN)、存储局域网(SAN)或其它适合类型的网络。
客户端计算机102能够通过将包含了写请求和读请求的输入/输出(I/O)请求发送到节点104,来访问存储阵列106的存储空间。节点104处理I/O请求,使得用户数据被写入存储阵列106中的适当的存储位置或者从存储阵列106中的适当的存储位置读出。如本文所使用的,术语“用户数据”是指一个人在商业过程中、执行工作功能或用于个人用途时可能使用的数据,诸如商业数据和报告、网页、用户文件、图像文件、视频文件、音频文件、软件应用或任何其它用户可能希望保存以便长期存储的相似类型的数据。每个节点104能够与每个存储阵列106通信耦合。每个节点104还能够通过节点间通信网络110与每个其它节点通信耦合。
存储阵列106可以包括各种类型的持久性存储,包括固态驱动器112,其在本文中简称为驱动器112。在一些示例中,驱动器112是闪速驱动器。然而,驱动器112还可以使用其它类型的持久性存储器,包括例如电阻存储器。每个存储阵列106包括多个驱动器112,其中每个驱动器均被配置为使得每个驱动器上的一定量的存储空间被指定为待要用于备用重建操作的备用存储。被指定为备用存储的存储空间的量可以是由节点104设定的参数。存储网络系统100还可以包括除了图1所示的之外的存储设备。
每个节点104可以包括执行备用重建操作的备用重建引擎114。备用重建引擎114能够以硬件或以硬件和编程代码的组合来实现。例如,备用重建引擎114可以包括用于存储指令的非暂态的、计算机存储介质,用于执行指令的一个或多个处理器,或其组合。在一些示例中,备用重建引擎114实现为存储在诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它类型的处理器等集成电路上的计算机可读指令。
备用重建引擎114被配置为重建驱动器数据。如果节点104检测到故障条件,则节点104能够触发备用重建引擎114来进行备用重建操作。在备用重建操作期间,故障的驱动器的数据被重新创建于被指定为备用存储空间的存储空间上。备用重建引擎114能够使用任何适合用于在备用存储空间上重建故障驱动器的数据的技术。
每个节点104还可以包括存储器分配控制器116,其控制存储阵列106中的存储空间在备用存储与超量配置存储之间的分配。存储器分配控制器116能够实现为备用重建引擎114的部分或者实现为单独的组件。每个节点104控制对于驱动器112的某子集的存储器分配。在一些示例中,存储系统100能够被配置为使得每个节点104可以控制特定的存储阵列106的全部驱动器。例如,节点A能够被配置为控制存储阵列A中的驱动器112,节点B能够被配置为控制存储阵列B中的驱动器112,节点C能够被配置为控制存储阵列C中的驱动器112。其它布置方式也是可能的,取决于具体实现方式的设计考虑。另外,存储系统配置的某些细节能够由管理员来规定,包括例如用于备用存储的存储空间的量以及哪些节点104控制哪些驱动器112。
如上所述,驱动器112中的多个或全部具有被指定为备用存储空间的一定量的存储空间。在存储阵列106的正常操作期间,对应的节点104的存储器分配控制器116能够指示每个驱动器112在其控制之下将备用存储用于超量配置。如果备用重建操作被发起,则存储器分配控制器116指示那些在备用重建操作中所涉及的驱动器112停止将备用存储空间用于超量配置,并且空间变得对于备用重建操作是可用的。当备用重建操作完成且备用存储空间不再被使用时,存储器分配控制器116指示驱动器112再次将备用存储空间用于超量配置。
图2是示出应用于诸如图1所示的驱动器之一的驱动器的两个示例的存储器分配的框图。存储器映射200示出在正常操作期间驱动器112的存储器分配,并且存储器映射202示出在备用重建操作期间驱动器112的存储器分配。如图2所示,可用的存储空间的某部分被映射为用户数据区206。用户数据区206代表了暴露于文件系统且对于客户端计算机102可见的存储空间。客户端计算机102的用户能够存储数据到用户数据区206以及接收来自用户数据区206的数据。
另外,存储空间的某部分被映射以便存储系统100内部使用。该使用的示例可以是但不限于,驱动器标识标签、内容标识符的存储系统表或者诊断和测试区。
存储空间的某部分被映射为内部超量配置区域210。内部超量配置区域210是由驱动器本身为超量配置过程预留的,超量配置过程诸如垃圾收集、耗损均衡、坏块再映射,等等。超量配置过程是由驱动器本身来执行的。例如,驱动器的处理器能够运行被编程为用于超量配置过程的固件。在一些示例中,超量配置区域210对于外部设备存储控制器诸如图1的节点104而言是不可见的或者是不能访问的。在此意义上,超量配置区域210是隐藏存储空间。内部超量配置区域210的大小可由驱动器制造商来确定。
如存储器映射202所示,驱动器的可视存储空间的某部分被指定为备用存储空间区域214。备用存储空间区域214能够由节点104访问且由节点104预留和控制。备用存储空间区域214的配置能够由存储系统100的管理员来确定。例如,管理员能够规定由每个驱动器留出多少备用存储空间。该相同的区域在存储器映射200中被显示作为空闲空间212。在使驱动器在线的同时,在驱动器的控制下的节点能够指示驱动器将备用存储空间区域214作为空闲空间212使用,以用于超量配置。驱动器固件被配置为能够接收指令以将正常可见的存储空间用于超量配置。因此,用于超量配置的存储空间不是由驱动器的制造商固定的。如果备用重建操作被发起,则在驱动器的控制下的节点能够通过指示驱动器停止将备用存储空间区域214用于超量配置,来回收空闲空间212。
图3是操作数据存储驱动器的方法的过程流程图。方法300能够由诸如图1所示的节点104之一的存储控制器来执行。存储驱动器可以是图1所示的驱动器112之一。
在框302处,驱动器上的存储空间的可见区域被指定为备用存储空间。该操作能够根据从系统管理员处接收到的输入来执行。
在框304处,驱动器被指示将备用存储空间用于超量配置操作。如上所述,超量配置操作是降低驱动器中的写放大率并且延长驱动器的使用寿命的操作。这样的超量配置操作包括耗损均衡和垃圾收集。
在框306处,数据存储请求被发送到驱动器。数据存储请求包括在存储系统的常规操作期间接收到的写请求和读请求。例如,数据存储请求可以是从客户端计算机接收到的I/O请求,其请求将用户数据存储到为用户数据预留的驱动器区域中。在存储系统的常规操作期间,驱动器将使用所述备用存储空间和由驱动器为超量配置操作预留的固定的内部存储空间两者来执行超量配置操作。在一些示例中,由驱动器为超量配置操作预留的存储空间是不能由外部存储控制器访问的隐藏存储空间。
在框308处,发生了将对备用存储空间的使用触发的一些事件或动作。例如,驱动器的故障可能被检测到,或者管理员可能执行将对备用存储空间的需求触发的动作。
在框310处,固态驱动器被指示停止将备用存储空间的全部或部分用于超量配置操作。接下来驱动器将停止将备用存储空间用于超量配置操作,并且将任何所需数据从备用存储空间移到驱动器的另一区域(诸如隐藏存储空间)。在一些示例中,在驱动器已经释放了备用存储空间且移动了任何所需的数据之后,驱动器可以向控制器发送确认,表明备用存储空间是可用的。
在框312处,备用存储空间被用于执行备用重建。在一些示例中,控制器可以等待驱动器确认备用存储空间是可用的。
在框314处,备用重建完成,并且被存储到备用存储空间的任何数据已经被擦除或者不再被需要。此时,驱动器被指示继续将备用存储空间用于超量配置操作。
图4是示出了对被配置为操作数据存储驱动器的代码进行存储的有形的、非暂态的计算机可读介质的框图。计算机可读介质由附图标记400来指代。计算机可读介质400可以包括RAM、硬盘驱动器、硬盘驱动器阵列、光学驱动器、光学驱动器阵列、非易失性存储器、闪速驱动器、数字多功能盘(DVD)或压缩盘(CD)以及其它。计算机可读介质400可以由处理器402经由计算机总线404来访问。此外,计算机可读介质400可以包括被配置为执行本文所描述的方法的代码。例如,计算机可读介质400可以包括由诸如图1的节点104的存储控制器执行的固件。
本文所论述的各个软件组件可以存储在计算机可读介质400中。计算机可读介质400上的区域406可以包括对从客户端计算机处接收到的I/O请求进行处理的I/O处理引擎。例如,处理I/O请求可以包括将数据存储到存储驱动器,或者从存储驱动器取回数据并且将其发送到请求它的客户端计算机。区域408可以包括备用重建引擎,备用重建引擎将故障磁盘的数据在一个或多个驱动器的备用存储空间上进行重建。区域410可以包括存储器分配控制器,存储器分配控制器被配置为将驱动器上的存储空间的可视区域指定为备用存储空间。存储器分配控制器还可以指示驱动器将备用存储空间在不被用于备用重建操作时用于超量配置操作。软件组件虽然被图示为毗邻的块,但是可以按任何次序或配置来被存储。例如,如果有形的、非暂态的计算机可读介质是硬盘驱动器,则软件组件可以存储在非毗邻的或者甚至是交叠的扇区中。
虽然本公开的技术可以容许各种修改和替代的形式,但上述示范性的示例也只是为了示例的方式而示出。应当理解,该技术不旨在限于本文公开的具体示例。事实上,本技术包括落入随附权利要求的真正的精神和范围内的全部的替代、修改和等同方案。