优化数据存储系统性能的方法转让专利

申请号 : CN202010258484.5

文献号 : CN111796765A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李舒

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本公开提供了用于优化数据存储系统的性能的方法、系统和非暂时性计算机可读介质。该方法包括:从连接到数据存储系统的多个二级存储单元中选择一个或更多个二级存储单元,其中所述选择一个或更多个二级存储单元基于对所述多个二级存储单元的垃圾回收活动一个或更多个影响的评估,所述影响预测源自将所述数据有效负载存储在所述多个二级存储单元上;和,将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上。

权利要求 :

1.一种用于优化数据存储系统的性能的方法,该方法包括:

接收写数据有效负载的I/O请求;

从连接到数据存储系统的多个二级存储单元中选择一个或更多个二级存储单元,其中所述选择一个或更多个二级存储单元基于对所述多个二级存储单元的垃圾回收活动一个或更多个影响的评估,所述影响预测源自将所述数据有效负载存储在所述多个二级存储单元上;和将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上。

2.根据权利要求1所述的方法,还包括:将接收到的数据有效负载划分为两个或更多个数据子有效负载,并且其中:从所述多个二级存储单元中选择一个或更多个二级存储单元包括:针对所述两个或多个数据子有效负载中的每一个,从所述多个二级存储单元中选择一个或更多个二级存储单元;

对预测因存储数据有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于,针对对所述两个或更多个数据子有效负载的每一个,对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估,所述影响预测源自将所述数据子有效负载存储在所述多个二级存储单元上;和将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上包括:将数据的每个子有效负载存储在一个或更多个选择用于所述数据子有效负载的二级存储单元上。

3.如权利要求1所述的方法,还包括:响应于从所述多个二级存储单元中选择一个以上的二级存储单元,将接收的数据有效负载划分为两个或更多个数据子有效负载,其中:对预测由于存储数据有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于:对所述数据有效负载的一个或更多个特征或对所述数据有效负载的可划分而成的可能子有效负载的一个或更多个特征的评估;和将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上包括将每个数据子有效负载存储在所述一个或更多个选择的二级存储单元上。

4.根据权利要求3所述的方法,其中:

为特定的数据子有效负载选择所述一个或更多个选择的二级存储单元中的每一个二级存储单元;和将每个数据子有效负载存储在所述一个或更多个选择的二级存储单元上包括:将每个数据子有效负载仅存储在选择用于该数据子有效负载的一个或更多个选择的二级存储单元上。

5.根据权利要求1所述的方法,还包括:监视所述多个二级存储单元的垃圾回收活动,并且其中:基于所监视的所述多个二级存储单元的垃圾回收活动来选择所述一个或更多个二级存储单元;和对预测由于存储数据有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估基于:所监视的所述多个二级存储单元的垃圾回收活动。

6.根据权利要求5所述的方法,其中监视所述多个二级存储单元的垃圾回收活动是基于对以下的评估:(1)所述多个二级存储单元的当前或历史I/O负担;

(2)所述多个二级存储单元的当前或历史I/O队列;

(3)所述多个二级存储单元的当前或历史容量利用率;

(4)向所述多个二级存储单元发布的当前或历史TRIM命令;或

(5)当前或历史I/O请求以覆盖存储在所述多个二级存储单元上的数据。

7.根据权利要求1所述的方法,其中:

所述数据有效负载由一个或更多个逻辑块组成;和

对预测由于存储数据有效负载而导致的多个二级存储单元的垃圾回收活动的一个或更多个影响的评估包括:确定当前在多个二级存储单元上是否存储有数据有效负载的逻辑块中的任何一个。

8.如权利要求7所述的方法,其特征在于,还包括向当前存储数据有效负载的逻辑块的多个二级存储单元中的任何二级存储单元发出TRIM命令。

9.如权利要求8所述的方法,其特征在于,还包括更新元数据,所述元数据记录将数据有效负载的逻辑块存储在所述多个二级存储单元中的哪些二级存储单元上。

10.根据权利要求1所述的方法,其中:

写入数据有效负载的I/O请求涉及覆盖先前的数据有效负载,其中所述先前的数据有效负载当前存储在所述多个二级存储单元上;和从所述多个二级存储单元中选择一个或更多个二级存储单元包括:选择其先前的数据有效负载当前未存储在其上的一个或更多个二级存储单元。

11.如权利要求10所述的方法,其特征在于,还包括更新元数据,所述元数据记录将所述数据的有效负载存储在所述多个二级存储单元中的哪些二级存储单元上。

12.如权利要求10所述的方法,其特征在于,还包括向存储所述先前的数据有效负载的二级存储单元发出TRIM命令。

13.一种非暂时性计算机可读介质,其存储有指令集,该指令集可由计算机系统的至少一个处理器执行,以使所述计算机系统执行用于优化数据存储系统的性能的方法,该方法包括:接收写数据有效负载的I/O请求;

从连接到数据存储系统的多个二级存储单元中选择一个或更多个二级存储单元,其中所述选择一个或更多个二级存储单元基于对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估,所述影响预测源自将数据有效负载存储在所述多个二级存储单元上;和将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上。

14.根据权利要求13所述的非暂时性计算机可读介质,其中,所述指令集可由所述计算机系统的所述至少一个处理器执行,以使所述计算机系统进一步执行将所接收的数据有效负载划分为两个或多个子数据有效负载,其中:从所述多个二级存储单元中选择一个或更多个二级存储单元包括:针对所述两个或多个数据子有效负载中的每一个,从所述多个二级存储单元中选择一个或更多个二级存储单元;

对预测因存储数据有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于,针对对两个或多个子有效负载的每一个,对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估,所述影响预测源自将所述数据子有效负载存储在所述多个二级存储单元上;和将所述数据的有效负载存储在所述一个或更多个选择的二级存储单元上包括:将数据的每个子有效负载存储在一个或更多个选择用于所述数据子有效负载的二级存储单元上。

15.根据权利要求13所述的非暂时性计算机可读介质,其中,所述指令集可由所述计算机系统的所述至少一个处理器执行,以使所述计算机系统进一步执行:以响应于从所述多个二级存储单元中选择一个以上的二级存储单元,将接收到的数据有效负载划分为两个或更多个数据子有效负载,其中:对预测由于存储数据有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于:对所述数据有效负载的一个或更多个特征或对所述数据有效负载的可划分而成的可能子有效负载的一个或更多个特征的评估;和将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上包括将每个数据子有效负载存储在所述一个或更多个选择的二级存储单元上。

16.根据权利要求13所述的非暂时性计算机可读介质,其中所述指令集可由所述计算机系统的所述至少一个处理器执行以使所述计算机系统进一步执行:监视所述多个二级存储单元的垃圾回收活动,其中:基于所监视的所述多个二级存储单元的垃圾回收活动来选择所述一个或更多个二级存储单元;和对预测由于存储数据的有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于所监视的所述多个二级存储单元的垃圾回收活动。

17.根据权利要求13所述的非暂时性计算机可读介质,其中:

所述数据有效负载由一个或更多个逻辑块组成;和

对预测由于存储数据有效负载而导致的多个二级存储单元的垃圾回收活动的一个或更多个影响的评估包括:确定当前在多个二级存储单元上是否存储有数据有效负载的逻辑块中的任何一个。

18.根据权利要求13所述的非暂时性计算机可读介质,其中:

写入数据有效负载的I/O请求涉及覆盖数据的先前的数据有效负载,其中所述先前的数据有效负载当前存储在所述多个二级存储单元上;和从所述多个二级存储单元中选择一个或更多个二级存储单元包括:选择其先前的数据有效负载当前未存储在其上的一个或更多个二级存储单元。

19.一种用于优化数据存储的系统,包括:

存储器,所述存储器存储有指令集;

一个或更多个处理器,所述一个或更多个处理器被配置为执行所述指令集以使所述系统执行:接收写数据有效载荷的I/O请求;

从连接到数据存储系统的多个二级存储单元中选择一个或更多个二级存储单元,其中所述选择一个或更多个二级存储单元基于对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估,所述影响预测源自将数据有效负载存储在所述多个二级存储单元上;和将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上。

20.根据权利要求19所述的系统,其中,所述一个或更多个处理器被配置为执行所述指令集,以使所述系统进一步执行将所接收的数据有效负载划分为两个或更多个数据的子有效负载,并且其中:从所述多个二级存储单元中选择一个或更多个二级存储单元包括:针对所述两个或多个数据子有效负载中的每一个,从所述多个二级存储单元中选择一个或更多个二级存储单元;

对预测因存储数据有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于,针对对两个或多个子有效负载的每一个,对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估,所述影响预测源自将所述数据子有效负载存储在所述多个二级存储单元上;和将所述数据的有效负载存储在所述一个或更多个选择的二级存储单元上包括:将数据的每个子有效负载存储在一个或更多个选择用于所述数据子有效负载的二级存储单元上。

21.根据权利要求19所述的系统,其中,所述一个或更多个处理器被配置为执行所述指令集,以使所述系统进一步执行:响应于从所述多个二级存储单元中选择一个以上的二级存储单元,将接受的数据的有效负载划分成两个或更多个数据子有效负载,其中:对预测由于存储数据有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于对所述数据有效负载的一个或更多个特征或对所述数据有效负载的可划分而成的可能子有效负载的一个或更多个特征的评估;和将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上包括将每个数据子有效负载存储在所述一个或更多个选择的二级存储单元上。

22.根据权利要求19所述的系统,其中,所述一个或更多个处理器被配置为执行所述指令集,以使所述系统进一步执行监视所述多个二级存储单元的垃圾回收活动,并且其中:基于所监视的所述多个二级存储单元的垃圾回收活动来选择所述一个或更多个二级存储单元;和对预测由于存储数据的有效负载而导致的对所述多个二级存储单元的垃圾回收活动的一个或更多个影响的评估是基于所监视的所述多个二级存储单元的垃圾回收活动。

23.根据权利要求19所述的系统,其中:

数据的有效负载由一个或更多个逻辑块组成;和

对预测由于存储数据有效负载而导致的多个二级存储单元的垃圾回收活动的一个或更多个影响的评估包括:确定当前在多个二级存储单元上是否存储有数据有效负载的逻辑块中的任何一个。

24.根据权利要求19所述的系统,其中:

写入数据有效负载的I/O请求涉及覆盖数据的先前的数据有效负载,其中所述先前的数据有效负载当前存储在所述多个二级存储单元上;和从所述多个二级存储单元中选择一个或更多个二级存储单元包括:选择其先前的数据有效负载当前未存储在其上的一个或更多个二级存储单元。

25.一种优化数据存储系统性能的方法,包括:

接收读取数据有效负载的I/O请求,其中,所述有效负载存储在与数据存储系统连接的多个二级存储单元中的一个或更多个二级存储单元上;

对于正在存储数据有效负载的一个或更多个二级存储单元,确定是否停止所述一个或更多个二级存储单元的任何垃圾回收活动,其中,确定是否停止该一个或更多个二级存储单元的任何垃圾回收活动基于对数据有效载荷的检索的一种或多种影响的评估,所述影响预测源自所述多个二级存储单元的垃圾回收活动;和从一个或更多个二级存储单元中检索数据的有效负载。

说明书 :

优化数据存储系统性能的方法

相关申请的交叉引用

[0001] 本公开要求于2019年4月3日提交的第62/829,011号美国临时专利申请的优先权,该临时申请的全部内容通过引用合并于此。

技术领域

[0002] 本公开总体上涉及数据存储,并且更具体地,涉及用于优化数据存储系统性能的方法、系统和非暂时性计算机可读介质。

背景技术

[0003] 所有现代计算机都具有某种形式的二级存储,用于长期存储数据。传统上,硬盘驱动器(HDD)即用于此目的。但是,计算机系统越来越多地将固态驱动器(SSD)用作其二级存储单元。尽管与HDD相比,SSD具有明显的优势,但它们具有几个必须正确管理的重要设计特征。特别是,SSD可以执行垃圾回收,以使以前写入数据的物理页面可以重新使用。垃圾回收是资源密集型的,但是会消耗大量的SSD资源,从而降低了SSD从其附加系统响应I/O命令的能力。这继而降低了系统性能并增加了系统成本。

发明内容

[0004] 本公开提供了用于数据存储系统的性能优化的方法、系统和非暂时性计算机可读介质。该方法包括:从连接到数据存储系统的多个二级存储单元中选择一个或更多个二级存储单元,其中所述选择一个或更多个二级存储单元基于对所述多个二级存储单元的垃圾回收活动一个或更多个影响的评估,所述影响预测源自所述数据有效负载存储在所述多个二级存储单元上;和,将所述数据有效负载存储在所述一个或更多个选择的二级存储单元上。
[0005] 所公开的实施例的其他目的和优点将在下面的描述中部分地阐述,并且部分地从该描述中将变得显而易见,或者可以通过实施例的实施而获知。所公开的实施例的目的和优点可以通过权利要求中阐述的要素和组合来实现和获得。
[0006] 应当理解,前面的一般描述和下面的详细描述仅是示例性和说明性的,并且不限制本发明。

附图说明

[0007] 在以下详细描述和附图中示出了本公开的实施例和各个方面。图中所示的各种特征未按比例绘制。
[0008] 图1是根据本公开的一些实施例的SSD的简化内部结构的示意图。
[0009] 图2是根据本公开的一些实施例的SSD的NAND子组件的示例内部结构的基本布局的示意图。
[0010] 图3示出并比较了文件到文件系统级逻辑块的映射,文件系统级逻辑块到驱动器级逻辑块的映射以及驱动器级逻辑块到物理块的映射。
[0011] 图4示出了根据本公开的一些实施例的数据存储系统的简化结构及其与应用程序和二级存储单元的交互。
[0012] 图5示出了根据本公开的一些实施例的数据存储系统的替代视图,并且示出了通用二级存储单元的内部结构的简化视图。
[0013] 图6示出了TRIM命令的影响和操作的简化图。
[0014] 图7是根据本公开的一些实施例的示例性数据存储系统的示意图。
[0015] 图8是根据本公开的一些实施例的示例性数据存储系统的替代示意图。
[0016] 图9是示出根据本公开的一些实施例的用于使用远程二级存储单元来响应于I/O请求以写入数据的有效负载的示例方法的流程图。
[0017] 图10是示出根据本公开的一些实施例的用于响应于I/O请求以读取数据的有效负载的示例方法的流程图。具体实施例
[0018] 现在将详细参考示例性实施例,其示例在附图中示出。以下描述参考附图,其中除非另外表示,否则不同附图中的相同数字表示相同或相似的元件。在示例性实施例的以下描述中阐述的实施方式并不代表与本发明一致的所有实施方式。相反,它们仅是与如所附权利要求中所述的与本发明有关的方面一致的装置和方法的示例。下面更详细地描述本公开的特定方面。如果与通过引用并入的术语和/或定义冲突,则本文提供的术语和定义为准。
[0019] 现代计算机是基于冯·诺伊曼架构的。这样,从广义上讲,现代计算机的主要组件可以概念化为两个组件:用于处理数据的组件(称为处理单元)和用于存储数据的组件(称为主存储单元)。处理单元(例如,CPU)从主存储单元(例如,RAM)获取要执行的指令和要使用的数据,执行所请求的计算,并将数据写回到主存储单元。因此,在某些情况下,在每个指令周期之后,都需要从主存储单元中提取数据并将数据写入主存储单元。这意味着处理单元可以读写主存储单元的速度对于系统性能很重要。如果速度不足,则来回移动数据将成为系统性能的瓶颈。此瓶颈称为冯·诺依曼瓶颈。
[0020] 因此,高速和低等待时间是选择应用于主存储单元的适当技术的考虑因素。现代系统通常使用DRAM。DRAM可以以数十GB/s的速度传输数据,而延迟仅为几纳秒。但是,在最大化速度和响应时间时,可能会有一个折衷。DRAM具有三个缺点。就绝对和相对度量而言,在存储的数据量方面,DRAM具有相对较低的密度。与其他存储技术相比,DRAM每单位大小的数据比率要低得多,并且要占用大量空间才能满足当前的数据存储需求。从每GB的价格来看,DRAM也比其他存储介质贵得多。最后,最重要的是,DRAM是易失性的,这意味着如果断电,它不会保留数据。综上,这三个因素使DRAM不适合长期存储数据。拥有主存储设备所需的速度和延迟的大多数其他技术也具有与DRAM相同的局限。
[0021] 因此,现代计算机除了具有处理单元和主存储单元外,还具有二级存储单元。主存储和二级存储的区别在于,处理单元可以直接访问主存储单元中的数据,而不能直接访问二级存储单元中的数据。而是,为了访问二级存储单元中的数据,首先将来自第二存储单元的数据传送到主存储单元。这形成了一个存储层次结构,其中数据从二级存储单元(非易失性,大容量,高延迟,低带宽)移动到主存储单元(易失性,小容量,低延迟,高带宽),以使得数据可处理。然后,将数据从主存储单元传输到处理器,可能需要几次传输,然后再将数据最终传输回二级存储单元。因此,像处理单元和主存储单元之间的连接一样,主存储单元和二级存储单元之间的连接的速度和响应时间也有助于系统性能。如果其速度和响应能力不足,则在主存储单元和二级存储单元之间来回移动数据也可能成为系统性能的瓶颈。
[0022] 传统上,计算机系统中的二级存储单元是HDD。HDD是一种机电设备,通过操纵由铁磁材料组成的快速旋转磁盘的一小部分的磁场来存储数据。但是HDD具有一些局限性,使其在现代系统中不那么受欢迎。特别是,HDD的传输速度很大程度上停滞了。HDD的传输速度在很大程度上取决于旋转磁盘的速度,旋转磁盘的速度在每秒一定转数以上开始面临物理限制(例如,旋转磁盘面临机械故障和碎裂)。HDD的速度在很大程度上已经达到了目前旋转磁盘所能承受的角速度的极限,并且基本上已经稳定。但是,CPU并没有面临类似的限制。随着访问的数据量持续增加,HDD速度越来越成为系统性能的瓶颈。这导致寻找并最终引入了新的内存存储技术。
[0023] 最终选择的存储技术是闪存。闪存由电路组成,主要是由晶体管组成的逻辑门。由于闪存是通过电路存储数据的,因此闪存是一种固态存储技术,是一种不具有(机械地)移动组件的存储技术。基于固态的设备相对于诸如HDD之类的机电设备具有优势,因为固态设备不会面临物理限制或通常通过使用机械运动而导致的故障几率增加。闪存存储更快,更可靠,并且更能抵抗物理冲击。随着每千兆字节(GB)成本的下降,闪存已变得越来越普及,已成为闪存驱动器、SD卡、智能手机和平板电脑的非易失性存储单元等基础技术。在过去的十年中,闪存以SSD的形式在PC和服务器中变得越来越重要。
[0024] SSD是通常使用的基于闪存技术的二级存储单元。从技术上讲,SSD是指任何不涉及机械移动组件的二级存储单元,几乎都是使用闪存技术制造的。因此,SSD不会面临HDD遇到的机械限制。与HDD相比,SSD具有许多与闪存相同的优势,例如具有显着更高的速度和更低的延迟。但是,SSD具有一些特殊的特征,如果管理不当,会导致系统性能下降。特别是,SSD必须执行称为垃圾回收的过程,然后SSD才能覆盖任何先前写入的数据。垃圾回收过程可能资源密集型的,从而会降低SSD的性能。
[0025] 需要执行垃圾回收是SSD的架构的局限所在。作为基本概述,SSD是使用串在一起的浮栅晶体管制成。然后,将串彼此并排放置,以形成称为块的浮栅晶体管的二维矩阵。横跨块的多个串(因此包括每个串的一部分)成为页面。然后将多个块连接在一起以形成平面,然后将多个平面形成在一起以形成SSD的NAND裸芯片(die),裸芯片是SSD最终存储数据的部分。块和页面通常在概念上被视为SSD的构建块,因为页面是可以写入到读取源的最小数据单元,而块是可以擦除的最小数据单元。
[0026] 图1是示出SSD的基本布局的简化示意图。具体地,图1示出了SSD如何由I/O接口103组成,通过该I/O接口103与主机系统通信。存储控制器104连接到I/O接口103,存储控制器104包含控制SSD功能的处理器。存储控制器104连接到RAM 105,RAM 105包含多个缓存,此处显示为缓存106、107、108和109。然后,存储控制器104被示出为连接到物理块110、115、
120和125。如物理块110所示出的,每个物理块具有物理块地址(PBA),其唯一地标识该物理块。如物理块110还示出的,每个物理块由物理页面组成,对于物理块110,物理页面是物理页面111、112、113和114。每个页面还具有自己的物理页面地址(PPA),这在其块内是唯一的。物理块地址与物理页面地址一起唯一地标识一个页面-类似于将7位电话号码与其区号组合在一起。在图1中省略了块平面。在实际的SSD中,存储控制器不是连接到物理块,而是连接到平面,每个平面由物理块而组成。
[0027] 图2是SSD的示例性内部NAND闪存结构的图示。如上所述,SSD的存储控制器(例如,图1的存储控制器104)与一个或更多个NAND闪存集成电路(IC)连接,该SSD接收的任何数据最终都存储在该NAND闪存IC中。每个NAND IC 202、205和208通常包含一个或更多个平面。以NAND IC 202为例,NAND IC 202由平面203和204组成。如上所述,每个平面由多个物理块组成。例如,平面203由物理块211、215和219组成。然后,每个物理块还由物理页面组成,对于物理块211,其物理页面是物理页面212、213和214。
[0028] 在操作中,SSD通常使用展示的电压电平(高或地)来指示0或1,以将一位存储在晶体管中。某些SSD通过使用更多的电压电平来指示更多值(例如,两位的00、01、10和11),也可以在晶体管中存储一位以上的位。为了简单起见,假设SSD仅存储单个位,则SSD可以将1(例如,可以将晶体管的电压设置为高)写入页中的一位。SSD无法将0(例如,无法将晶体管的电压设置为低)写入页面中的某位。相反,SSD可以在块级别写入零。换句话说,要将页面的某个位设置为零,SSD可以将一个块内每个页面的每个位设置为零。通过将每个位设置为零,SSD确保将数据写入页面时,SSD只需将1写入要写入的数据所指示的位,而将要设置为零的任何位保持不变(因为它们被清零,因此已经设置为零)。将块中每个页面的每个位设置为零以完成将单个页面的位设置为零的任务的过程称为垃圾回收,因为通常导致页面具有非零条目的是该页面存储有不再有效的数据(“垃圾数据”)并且将被清零(类似于“收集垃圾”),以便该页面可以重新使用。
[0029] 但是,使垃圾回收的过程进一步复杂化的是,要清零的块内的某些页面可能存储有有效数据–在最坏的情况下,除需要被垃圾回收处理的页面之外的所有其它页面都存储有有效数据。由于SSD必须保留有效数据,因此在擦除包含有效数据的任何页面之前,SSD(通常是通过其存储控制器)必须将每个有效页面的数据传输到不同块中的新页面。SSD的存储控制器将每个有效页面的内容传输到缓存,然后再将内容从缓存传输到新页面,因此,传输块中每个有效页面的数据是一项资源密集型过程。只有在完成每个有效页面的数据的传输过程之后,SSD才可以将原始页面(以及同一块中的每个其他页面)清零。因此,通常,垃圾回收过程涉及将同一块中任何有效页面的内容读取到缓存,再将缓存中的内容写入不同块中的新页面,然后将当前块的每个页面清零。
[0030] 垃圾回收对SSD的性能的影响因SSD的架构施加的其他两个限制而变的更加复杂。第一个限制是一次只能读取一个块的单个页面。一次只能读取一个块的单个页面使得读取和传输仍然有效的页面的过程只能强制顺序的执行,从而大大延长了垃圾回收完成的时间。第二个限制是一次只能读取一个平面的单个块。SSD整个持续过程是,移动这些页面-然后将块清零-同一平面中的其他页面或块无法被访问。
[0031] 由于垃圾回收对I/O性能的严重影响,但是对于确保SSD的连续功能是必要的,因此经常设法管理垃圾回收的时间以减轻其影响。考虑到大量的资源消耗,在理想情况下垃圾回收可以在停止运行期间完成,该期间传入的I/O请求数量最少。由于在停止运行期间执行垃圾回收意味着当需要大部分SSD资源来响应I/O请求时不会执行垃圾回收,因此减少了垃圾回收对SSD性能的影响。
[0032] 但是,仅当SSD知道页面中包含的数据不再有效时,它才能执行垃圾回收。在SSD上存储数据的设备而非SSD本身没有某些专门的通信通道(例如专门的命令)知道某个事件(例如,当数据被修改或删除时)已使存储的数据无效。如果没有专门的方法通知SSD所存储的数据已变为无效,则SSD仅在存储数据的设备尝试用新数据覆盖存储的数据时才知道存储的数据无效。这种信息不对称会加剧并导致设备(例如,操作系统的文件系统)认为存在大量未使用的存储容量,而SSD认为大多数存储容量未使用。在这种情况下,SSD很可能会得知,在大量的I/O操作期间,由设备重用该设备知道的可用(逻辑)数据块而引起的许多字符串都是无效的,而SSD认为这些数据块仍然有效。让SSD快速了解大量字符串无效会导致SSD立即执行大量垃圾回收,这可能会严重降低SSD的性能。为了帮助减轻SSD和其连接的设备之间关于什么数据有效的信息不匹配,引入了一种称为TRIM的特殊I/O操作。TRIM I/O操作允许设备与SSD进行通信,表明已存储数据的特定部分不再有效。TRIM I/O操作,也称为TRIM命令,使SSD可以将相应的页面标记为无效,并更好地调度垃圾回收。
[0033] 为了理解TRIM如何工作,理解计算机系统如何处理和存储数据是有用的,因为计算机系统如何处理数据会影响如何使用TRIM命令。一般而言,现代计算机系统可以被认为有三个主要组件:构成设备(硬件)的物理组件,在设备上运行的程序(应用程序)以及管理硬件并充当硬件和应用程序(OS)的媒介的专门程序。操作系统的主要目的是管理应用程序的硬件,从而使他们不必彼此了解或了解各自运行的硬件的详细信息。为了减轻应用程序之间的相互了解或了解底层硬件,操作系统通常通过提供应用程序可以使用的通用的统一接口来抽象这些细节,然后操作系统将视情况透明地映射到实际物理细节。OS提供这种抽象的一种特定方式是提供文件系统。
[0034] 文件系统的主要功能是使应用程序不必管理低级结构细节,而这些细节是正确跟踪存储在二级存储单元上的数据所必需的。相反,文件系统使应用程序可以处理称为文件的逻辑数据分组。由此来看,其中数据表示为文件是数据的逻辑表示,其中文件被视为数据的基本单位。但是,逻辑表示本质上是一种错觉,因为文件并非实际存储在二级存储单元上的文件。而是,文件系统将每个文件转换为一个或更多个通常固定大小的数据块,该数据块称为逻辑块。这是数据的中间表示。文件和逻辑块之间的映射被分解,并在该文件(已存储)的元数据中维护。对于OS或OS的文件系统子组件,逻辑块是要操作并存储在二级存储单元上的基本数据单元。每当应用程序请求从文件读取数据或向文件写入数据时,文件系统都会使用与文件关联的元数据将读取/写入操作映射到适当的逻辑块。然后,文件系统将数据发送到二级存储单元,并在必要时对响应接收到的任何数据执行反向映射(数据块到文件)。
[0035] 在更复杂的设备中,可以作为数据存储系统或数据存储引擎的一部分的文件系统执行两种映射:一种是通过逻辑文件系统,另一种是通过逻辑卷管理系统-也称为逻辑卷管理器。逻辑文件系统将每个文件转换为一个或更多个数据块,(为清楚起见)称为LFS逻辑块。逻辑文件系统还创建并维护元数据,该元数据记录哪个LFS逻辑块映射到每个文件,逻辑文件系统将该元数据与文件实际数据一起记录。如前所述,此元数据通常采用长度和偏移量的形式,唯一地标识每个LFS逻辑块。这是数据的逻辑文件系统表示。从此,逻辑文件系统将LFS逻辑块“写入”到被认为的逻辑卷。尽管对逻辑文件系统看起来是物理二级存储单元,但是逻辑卷本质上是由逻辑卷管理系统维护的虚拟二级存储单元。逻辑卷作为一个整体出现时,也可能会分布在多个物理二级存储单元上。
[0036] 当逻辑卷管理系统接收到“写入”LFS逻辑块的请求时,逻辑卷管理器将每个LFS逻辑块转换为一个或更多个数据块(为清楚起见,称为LVM逻辑块)。逻辑卷管理系统还创建并维护元数据,该元数据记录哪个LVM逻辑块映射到每个LFS逻辑块。像上面一样,此元数据通常是唯一标识每个LFS逻辑块的长度和偏移量。这是数据的逻辑卷管理系统(或逻辑卷管理器)表示。从此,逻辑卷管理系统(或文件系统的其他部分)最终将LVM逻辑块写入适当的二级存储单元。LVM通常写入LVM块的方式是通过向适当的二级存储单元发送I/O写入请求,该I/O写入请求包含要写入的LVM逻辑块和LVM逻辑块的标识符,例如其长度和偏移量。这种两阶段映射的原因是在用于存储数据的逻辑容器和实际存储数据的物理设备(即二级存储单元)之间提供了透明的抽象。
[0037] 最后,通常在许多二级存储单元(尤其是SSD)中存在第三映射。在执行此第三映射的二级存储上发生的是,在所述单元收到LVM逻辑块后,该单元将执行一第二内部映射。具体来说,二级存储单元的存储控制器或子组件(称为SSD上的闪存转换层)通常执行与所描述的上述文件系统类似的功能。即,存储控制器将传入的LVM逻辑块转换为称为物理块的数据块,然后将其存储在二级存储单元的实际物理硬件上。这是数据的物理表示,其中物理块被视为数据的基本单位。二级存储单元维护记录逻辑块及其对应物理块之间映射的元数据,该元数据也存储在物理硬件上。每当文件系统或OS请求读取或写入数据块时,二级存储单元都会使用与LVM逻辑块关联的元数据将读取/写入操作映射到适当的物理块。
[0038] 图3示出了由存储系统和所连接的二级存储单元执行的三个映射之间的相似性。图3示出了文件301如何经由逻辑文件系统302映射到文件系统级逻辑块(File System Level Logical Block,FSLLB)(显示为303、304、305和306)。图3还示出了文件系统级逻辑块307如何经由数据存储系统的逻辑卷管理系统308映射到驱动器级逻辑块(Drive Level Logical Block,DLLB)(显示为309、310、311和312)。然后,图3示出了驱动器级逻辑块313如何通过二级存储单元的存储控制器314映射到物理块(显示为315、316、317和318)。图3还示出了文件301到文件系统逻辑块的映射,文件系统级逻辑块307到驱动器级逻辑块的映射,以及驱动器级逻辑块313到物理块的映射如何分解为数据319和记录所述映射的元数据
320。
[0039] 二级存储单元(特别是SSD)执行此第三内部映射的原因在很大程度上是为了减轻使用SSD的设备不必了解二级存储单元的内部结构和特性的特殊之处和细节。无论底层技术或实现特征如何,几乎每个二级存储单元都被设计为呈现一组基本的原语操作(例如READ或WRITE)。OS然后可以利用提供的通用I/O操作来使用二级存储单元。存储控制器处理通用I/O操作与二级存储单元内部物理硬件的特定细节之间进行转换的细节,包括底层存储技术的特定细节和任何制造商特定的特点。
[0040] 图4是示出通常由数据存储系统执行的映射的基本概述的示意图。根据图4,文件401、402和403由数据存储系统404映射。以文件401为例,文件401首先由逻辑文件系统405映射为包含文件401内容的文件系统级逻辑块(FSLLB)406,和包含元数据的文件系统级逻辑块407,该元数据记录了文件系统级逻辑块406如何映射到文件401。接着,文件系统级逻辑块406和407由数据存储系统404的逻辑卷管理系统409映射到驱动器级逻辑块(DLLB)。具体地,逻辑卷管理系统409使用文件系统级逻辑块406和407的文件系统级逻辑块地址(FSLLBA)408将文件系统级逻辑块406和407映射到包含文件系统级逻辑块406和407的内容的驱动器级逻辑块410中,和映射到包含所述元数据的驱动器级逻辑块411,所述元数据记录了驱动器级逻辑块410如何映射到文件系统级逻辑块406和407。接着,使用驱动器级逻辑块地址(DLLBA)412、413和414,将驱动器级逻辑块410和411发送到二级存储单元415、418和
421进行最终存储。二级存储单元415、418和421的存储控制器416、419和422执行从驱动级逻辑块到物理块417、420和423的第三映射。
[0041] 图5是示出了数据存储系统和连接的二级存储单元的基本概述的简化示意图。如图5所示,应用程序501、502和503与数据存储系统504交互以获得文件。数据存储系统504执行各种映射,这里着重于逻辑卷505、506和507到二级存储单元(SSU)508、509和510的映射。每个逻辑卷505、506和507可以以各种方式分布在一个或更多个二级存储单元。图5还示出了二级存储单元的内部布局的简化视图。以二级存储单元508为例,图5示出了二级存储单元508由I/O接口511组成,该I/O接口511发送和接收数据以及I/O请求。连接到I/O接口511的是存储控制器512,存储控制器512在物理上处理传入的I/O请求,读取和写入从物理块
514、515和516数据,并且可以存储和从DRAM缓存513取回数据。物理块514、515和516可以基于各种技术,例如闪存、铁磁盘或基于磁带的系统。
[0042] 如上所述,当SSD知道字符串无效时,它只能对字符串执行垃圾回收。当字符串存储的数据不再被设备使用时,字符串无效。从逻辑角度看数据,字符串通常在两种情况下无效:在修改文件时和在编辑文件时。无论哪种情况,二级存储单元都不知道文件映射到的页面(或其中的一部分)不再有效。而是,SSD仅在设备尝试写入LVM逻辑块(由其唯一标识符(例如其长度和偏移)标识)时才知道SSD当前已写入。如果是已删除的文件,当操作系统将已删除文件的前一个和(从操作系统的角度来看)用于新数据的现在未使用的逻辑块中的一个重用时,SSD会意识到页面无效。对于修改后的文件,当OS尝试使用新的更新数据写入逻辑块时,SSD会意识到发生页面无效。
[0043] 然而,无论是否删除或修改逻辑块,仍然存在很大的效率低下。通常可以在将逻辑块重新写入SSD之前,通知SSD当前存储的逻辑块具有无效数据,这就是创建TRIM命令的原因。由于二级存储单元不参与设备的文件系统,因此二级存储单元无法得知文件已被删除,因此二级存储单元无法知道其可以在相应页面上执行垃圾回收。TRIM通过使设备能够在特定文件已被删除或修改时向二级存储单元报告来减轻设备和耦合的(例如,连接的)二级存储单元之间的信息不对称。具体来说,TRIM命令允许设备通知二级存储单元特定的LVM逻辑块不再有效。设备知道哪些LVM逻辑块是有效的,因为设备可以确定修改或删除的文件到对应的LFS逻辑块,然后再到对应的LVM逻辑块之间的映射。通知二级存储单元特定的LVM逻辑块无效允许二级存储单元将与LVM逻辑块相对应的页面标记为无效。然后,二级存储单元可以在某些时候在标记为无效的页面上执行垃圾回收。
[0044] 图6示出了TRIM命令的影响和操作的简化图。图6示出了当文件601被删除时,文件系统602将文件601映射到的逻辑块606、607和608如何被标记为空闲(可供其他数据再使用)。接下来,文件系统602(或文件系统602所属的OS)可以向(该文件系统602写入逻辑块606、607和608的)二级存储单元(SSU)613发出TRIM命令612。在接收到TRIM命令612之后,二级存储单元613然后可以对二级存储单元613将逻辑块606、607和608映射到的物理块执行垃圾回收(Garbage Collection,GC)。在此,逻辑块606、607和608被映射到物理块617、618和619。应当注意,通常,文件系统602可以跨多个二级存储单元写入与文件601相对应的逻辑块。还应注意,二级存储单元613的物理块不一定与文件系统602的逻辑块具有相同的大小,或具有一对一的映射关系。
[0045] 为了解决这些问题,所公开的实施例提出了优化数据存储系统的性能的方法。所公开的实施例减少并避免了垃圾回收对二级存储单元的I/O性能的不利影响。反过来,减少垃圾回收的影响可提高I/O速度和容量,减少延迟,并改善数据存储系统的响应时间。
[0046] 为了实现该优化,本公开的一些实施例可以接收用于存储数据的有效负载的I/O请求。在接收到写请求之后,一些实施例可以选择二级存储单元来存储数据的有效负载。该选择可以基于预测将数据的有效负载存储在二级存储单元会有什么影响。例如,在某些实施例中,被预测的影响之一可能是存储数据的有效负载是否会触发二级存储单元的垃圾回收活动。这可能涉及评估存储数据的有效负载可能触发多个二级存储单元中的任何一个开始垃圾回收的可能性。评估在第二存储单元上存储数据的有效负载的可能性可能导致需要执行垃圾回收的第二存储单元可能涉及跟踪数据存储系统当前已存储的所有有效逻辑块。当数据存储系统收到用数据的有效负载覆盖已经存储的逻辑块的请求时,数据存储系统可以评估当前存储逻辑块的二级存储单元可能需要对当前存储逻辑块的数据的物理页执行垃圾回收。通过评估存储数据的有效负载是否可能触发垃圾回收,系统可以更好地预测数据的有效负载应写入哪个二级存储单元。
[0047] 在选择了二级存储单元之后,然后可以将数据的有效负载写入该二级存储单元。通常,将数据的有效负载写入二级存储单元涉及将数据的有效负载写入二级存储单元的一个或更多个物理块。将数据的有效负载分成要存储在物理块上的块的过程可以直接由数据存储系统处理,也可以由所选的二级存储单元处理。
[0048] 图7示出了根据一些实施例的系统的示意图。如图7所示,应用程序701、702和703与数据存储系统704交互以获得文件。数据存储系统704执行各种映射,这里着重于逻辑卷705、706和707到二级存储单元(SSU)708、709和710的映射。每个逻辑卷705、706和707可以以各种方式分布在一个或更多个二级存储单元。根据一些实施例,当将数据写入二级存储单元会涉及在二级存储单元708上覆盖数据时,数据存储系统707可以选择不将数据写入二级存储单元708。相反,数据存储系统707可以向二级存储单元708(如X所示)发出TRIM命令,而可以将数据写入另一个已耦合(例如,已连接)的二级存储单元709或710,如复选标记(√)所示。
[0049] 在图7中还示出了数据存储系统704如何可以将已经写入到另一二级存储单元的数据写入的另一视图。具体地,当删除文件711时,数据存储系统704可以将文件711的新数据写入与其数据先前所存储的不同的二级存储单元712。数据存储系统704可以通过改变(文件711修改的数据映射到的)逻辑卷705的驱动器级逻辑块映射到哪个二级存储单元来确保将文件711的新数据写入不同的存储单元。大约在同一时间,数据存储系统704可以向先前存储逻辑卷705的驱动级逻辑块的二级存储单元708发出trim命令。
[0050] 在一些实施例中,数据存储系统在选择二级存储单元时还可以考虑其他标准,例如耦合(例如,连接到)数据存储系统的二级存储单元的总数。一些实施例还可以考虑二级存储单元自身的特征,例如二级存储单元的类型(例如,HDD与SSD),二级存储单元的当前或历史I/O利用率,二级存储单元的诸如速度的性能特征,或二级存储单元的容量利用率。
[0051] 一些实施例可以在不同于每个数据有效负载的基础上选择二级存储单元。例如,一些实施例可以选择将接下来的x个数据有效负载存储在所选的二级存储单元上。其他实施例可以选择将在特定时间范围内接收到的所有数据有效负载存储在所选二级存储单元上。一些实施例可以选择将直到一定数据量的所有数据有效负载存储在所选二级存储单元上。一些实施例可以组合多个标准,例如选择一存储单元以存储在一定时间内最多达到最大数据量接下来的x个数据有效负载。
[0052] 一些实施例还可以考虑数据有效负载的特性,例如数据有效负载是否频繁写入。可以使用数据的有效负载的特征的一种方式是确保将更频繁写入的信息存储在更快的二级存储单元上。这样做可以提高数据存储系统的有效速度,提高其对连接的系统以及最终对任何终端用户的表观上的性能。类似地,数据存储系统可以考虑数据有效负载的特征以确定任何写请求的特征。例如,以较小的随机碎片写入的数据可以存储在更快的二级存储单元中,该二级存储单元能够更好地处理此类较小的写入请求。数据存储系统还可以考虑将读取数据负载的频率与写入数据负载的频率相比。如果读取数据负载比写入数据负载更为频繁,则数据存储系统可以将数据负载与相似地较少读取频率的数据一起存储在二级存储单元上,以最小化对数据负载的读取请求被正在进行的任何垃圾回收活动中断或降级的机会。
[0053] 本公开的一些实施例可以监视多个二级存储单元的垃圾回收活动。监视多个二级存储单元的垃圾活动可以涉及例如跟踪数据存储系统当前已存储的所有有效逻辑块。每当数据存储系统用新数据覆盖有效逻辑块时,数据存储系统就会知道存储该逻辑块的二级存储单元可能需要执行垃圾回收。其他实施例可以跟踪由二级存储单元或二级存储单元连接到的计算机系统发出的TRIM命令。其他实施例可以监视二级存储单元的性能指标,并使用性能指标,特别是它们在它们的基准之间的差异程度,作为正在进行的垃圾回收活动的替代指标。例如,正在监视的性能指标可以包括二级存储单元的响应延迟,读取或写入速度或当前功耗。相反,一些实施例可以直接访问或直接获悉二级存储单元的垃圾回收活动。最终,通过监视垃圾回收活动,无论是直接还是间接,数据存储系统都可以在数据存储系统确定如何响应传入的用于写入数据的I/O请求(I/O写入请求)时,考虑二级存储单元的当前/实时I/O性能。
[0054] 一些实施例可以基于耦合的(例如,连接的)二级存储单元的过去或当前的垃圾回收活动来选择二级存储单元。例如,一些实施例可以选择当前不执行垃圾回收的二级存储单元,或者,如果所有二级存储单元都在执行垃圾回收,则选择执行最少数量的垃圾回收的二级存储单元。可替代地,一些实施例在选择二级存储单元时可以涉及其他指标。例如,一些实施例可以考虑由于正在进行的垃圾回收而导致的任何性能降低,选择具有最高的有效写入速度的二级存储单元。其他实施例可能涉及不同的,更复杂的方案,这些方案将正在进行的垃圾回收与其他信息进行加权,以确定选择哪个二级存储单元。
[0055] 一些实施例可以将数据有效负载分割为多个子有效负载,随后每个子有效负载被写入其自己的二级存储单元。一些实施例可以基于关于数据存储系统的各种特征和信息,例如耦合的二级存储单元的正在进行的垃圾回收活动,来确定将数据的有效负载划分为多少子有效负载。一些实施例还可以考虑连接到数据存储系统的二级存储单元的特性,例如连接到数据存储系统的二级存储单元的总数。实施例还可以考虑二级存储单元本身的特征,例如二级存储单元的类型(例如,HDD与SSD),二级存储单元的当前或历史I/O利用率,二级存储单元的诸如速度的性能特征,二级存储单元的容量利用率。
[0056] 一些实施例还可以考虑数据有效负载的特性,例如是否频繁地写入数据有效负载,是否经常读取数据有效负载以及任何写入和读取数据有效负载的特定特性。特别是通过尝试仅将部分有效负载的真实特性集中在子有效负载中。例如,一些实施例可以尝试将频繁读取但未写入到子有效负载中的数据集中,从而使数据存储系统能够更有效地存储和处理集中到子有效负载中的数据,而不会受到频繁写入(对所述子有效负载读取请求有妨碍的)其它子有效负载的干扰。出于多种原因,可以将数据包分割为子包。一些实施例可以将数据的有效负载分成子包以用于数据冗余,例如在RAID 1配置中。其他实施例可以跨多个单元分割数据块,以使得能够跨多个二级存储单元进行并行读取和写入,例如在RAID 0配置中。
[0057] 一些实施例可以将数据包分割成均匀大小的数据子包。其他实施例可以将数据包分割成大小不相等的子数据包。分割数据块可能涉及考虑数据的各种特性,数据存储系统本身的特性,连接的二级存储单元的特性,或者是否可以将具有给定读写模式的数据最大化的集中到各自的子包中。
[0058] 在将数据包分割成子包之后,一些实施例接着可以为每个子包选择要存储的二级存储单元。一些实施例可以在为子包选择二级存储单元时考虑多个连接的二级存储单元的垃圾回收活动。在选择每个子包的二级存储单元时,一些实施例还可以考虑每个子包中包含的数据的特性以及所连接的二级存储单元的特性。
[0059] 一些实施例还可以进一步的基于最小化将来I/O请求(例如覆盖数据的请求或TRIM命令的可能性)的可能性的尝试来选择二级存储单元以存储数据有效负载,所述将来I/O请求导致与读取特定数据有效负载的I/O请求干涉的垃圾回收活动。作为示例,一些实施例可能倾向于将频繁重写或删除的数据写入某些二级存储单元或特定二级存储单元中的特定平面,并且更倾向于将频繁读取的数据写入不同的二级存储单元。这样做可以帮助减少二级存储单元执行垃圾回收的可能性,该垃圾回收会干扰传入的读取请求。
[0060] 一些实施例可以进一步基于数据存储系统、其二级存储单元的子集、或基于单独的二级存储单元来考虑当前读取数据的I/O请求的数量。一些实施例还可以考虑代替当前状态或除了当前状态之外的最近和历史趋势。例如,一些实施例可以对当前不经常从其读取的二级存储单元进行优先级排序。其他实施例可以尝试通过延迟写请求来优先处理读取请求,例如通过将写请求保持在缓存中。一些实施例还可以更广泛地考虑任何动作对可能的写请求的影响,诸如评估采取该动作(诸如发出TRIM命令)对垃圾回收(例如,触发垃圾回收)的影响。
[0061] 一些实施例还可以选择对经常被读取或写入的数据的有效负载采取特殊操作。在一些实施例中,所述特殊操作可以基于关于系统或数据的历史模式。在一些实施例中,所述特殊操作可以基于对相同数据的最近一系列读取或写入请求。在一些实施例中,对某些数据有效负载采取特殊操作可能涉及选择将数据存储在高速缓存或缓存中,而不是将数据存储在二级存储单元上一段时间,所述持续一段时间例如可以是直到读取或写入请求变得不太频繁为止。由于将数据存储在高速缓存或缓存中可以避免将数据写入二级存储单元,因此将数据存储在缓存中还可以避免需要频繁进行垃圾回收活动的频繁读取。将数据存储在高速缓存或缓存中还可以加快数据存储系统相对于读取请求的表观速度,因为所请求的数据可立即在RAM中使用,而RAM通常是在数据被传输到所附的系统之前读取来自二级存储单元中数据的地方。
[0062] 在一些实施例中,连接的二级存储单元可以物理地附接到设备,诸如通过USB、Thunderbolt、InfiniBand、光纤通道、SAS或SATA连接至设备。在某些实施例中,连接的二级存储单元可以不物理连接到设备,而是通过网络连接至设备,这意味着它们可以通过设备的网络连接访问。例如,SAN、NAS、云存储以及使用其他设备作为远程目标。一些实施例可以通过前述两种类型的来访问二级存储单元,例如,一些二级存储单元可以被物理地连接,以及一些二级存储单元可以通过网络连接。特别地,一些实施例可以仅具有一个连接的二级存储单元,但是可以通过网络访问附接到附属于其他系统的二级存储单元。
[0063] 图8示出了根据一些实施例的示例性系统的示意图。具体地,图8示出了使用二级存储单元的系统,该二级存储单元未物理地耦合(例如,连接)到该系统,而是通过网络连接访问。如图8所示,服务器801、802和803彼此联网。以服务器801为例,每个服务器具有与数据存储系统807交互以获得文件的几个应用804、805和806。数据存储系统807执行各种映射,首先与逻辑文件系统808映射,然后逻辑卷管理系统809映射。数据存储系统807可以访问一个物理连接的二级存储单元810。数据存储系统807也可以经由服务器801的网络接口卡(CID)通过网络820访问其他协作服务器的二级存储单元。
[0064] 根据一些实施例,当数据存储系统807将覆盖二级存储单元810上的数据时,可以选择不将数据写入二级存储单元810。相反,数据存储系统810可以向二级存储单元810(如X所示)发布TRIM命令,而可以将数据写入参与服务器的二级存储单元,此处为服务器802。如√所示,数据存储系统807可以通过网络820将数据写入二级存储单元818。
[0065] 图9是示出根据本公开的一些实施例的使用远程二级存储单元来响应于I/O请求以写入数据的有效负载的示例方法的流程图。该方法可以由数据存储系统(例如,图8的数据存储系统807)执行。
[0066] 如图9所示,在第一步902中,应用程序(例如,图8的应用程序804)可以写入具有数据的文件,所述数据最终映到二级存储单元(例如,图8的二级存储单元810)上的被TRIM的文件系统级逻辑块。接着,在步骤903,确定数据存储系统(例如,图8的数据存储系统807)是否仅具有单个物理连接的二级存储单元。如果在步骤903中确定数据存储系统不只仅具有单个物理连接的二级存储单元,则该方法前进到步骤908。
[0067] 可选地,如果在步骤903中确定数据存储系统确实仅具有单个物理连接的二级存储单元,则在步骤904中,作为替代,数据存储系统(例如,图8的数据存储系统807)的逻辑卷管理系统(LVM)(例如,图8的逻辑卷管理系统809)将新数据写入远程二级存储单元(例如,图8的二级存储单元818)。然后,在步骤905,数据存储系统(例如,图8的数据存储系统807)的逻辑文件系统(例如,图8的逻辑文件系统808)创建从修改的文件的逻辑空间到目标驱动器(选择远程二级存储单元作为写目的地,例如图8的二级存储单元818)的映射。在步骤905之后,在步骤906中,目标驱动器使用其闪存转换层(FTL)将传入的(驱动器级别)逻辑块映射到其NAND闪存中的物理块(以及那些物理块内的物理页面)。接着,在步骤907中,目标驱动器将逻辑块写入逻辑块被映射到的相应物理块,并创建适当的元数据,所述元数据记录所存储的逻辑块和相应物理块之间的映射。该方法从步骤907前进到步骤912。
[0068] 替代地,如果在步骤903中确定数据存储系统不仅仅具有单个物理连接的二级存储单元,则在步骤908中,数据存储系统(例如,图4的数据存储系统404)识别具有最小业务量的二级存储单元(例如,图4的二级存储单元415)。然后,在步骤909,逻辑卷管理系统(例如,图4的逻辑卷管理系统409)创建将逻辑块映射到所选目标驱动器(例如,图4的二级存储单元415)的元数据。在步骤909之后,在步骤910中,目标驱动器(例如,图4的二级存储单元415)然后在其NAND闪存中使用其闪存转换层(FTL)将进入的逻辑块映射到物理块(例如,图
4的物理块417的一部分)。接下来,在步骤911中,目标驱动器(例如,图4的二级存储单元
415)将逻辑块写入其分配的物理块,并创建记录逻辑块和物理块之间的映射的适当的(FTL)元数据。该方法从步骤911前进至步骤912。最后,目标驱动器成功在步骤907和911任一步骤中成功写入逻辑块(数据)之后,在步骤912中,目标驱动器(例如,图4的二级存储单元415)向数据存储系统确认写入成功。
[0069] 一些实施例可能能够直接控制、中止或调度连接的二级存储单元的垃圾回收活动。在一些实施例中,直接控制垃圾活动可以允许在密集的I/O期间(特别是密集的读取请求期间)延迟垃圾回收活动。一些实施例可以尝试等待到有系统停机时间时开始垃圾回收,这可以基于I/O请求的历史趋势的I/O请求的当前/最近模式,例如历史上在晚上或某些特定的数据访问模式之后具有较少的I/O请求。一些实施例可以根据单个二级存储单元,基于涉及二级存储单元的I/O请求的当前/最近模式或涉及二级存储单元的访问请求中的历史模式来判定停机时间。一些实施例对连接的二级存储单元在确定是否以及在多大程度上延迟垃圾回收时还可以考虑在没有执行垃圾回收的二级存储单元的容量,需要执行的垃圾回收量,以及由于延迟垃圾回收而可能或实际的性能降低。。
[0070] 一些实施例还可以执行维护操作,特别是在停机期间或当数据存储系统或其连接的二级存储单元的某个子集的利用率低时。其中一个示例是跨二级存储单元动态地重新平衡数据。可以完成跨二级存储单元的动态重新平衡数据,以实现各种目标,例如在二级存储单元之间平均分配数据。数据也可以动态地重新平衡,以将具有特定访问特征的数据分组或分发,例如,经常读取但不经常写入,反之亦然。例如,在一些实施例中,可以通过记录关于特定数据段的访问趋势的历史信息,基于数据的特性来动态地重新平衡数据。
[0071] 一些实施例还可以监视垃圾回收活动来优化数据存储系统响应于读取数据请求的性能。一些实施例可以例如确定是否存储读取请求所请求的数据的二级存储单元当前是否正在进行垃圾回收。如果不是,则实施例照常简单的读取数据。如果确定二级存储单元可能正在执行垃圾回收,则一些实施例然后确定所述垃圾回收是否正在以很可能干扰二级存储单元响应读取请求的效率的方式进行。如果不干扰,则可以正常发出读取请求。然而,如果干扰,则一些实施例可以例如通过为读取请求分配最高的QoS来停止垃圾回收活动。所述实施例然后可以照常发出读取请求,此后可以重新启动垃圾回收。一些实施例还可以在停止垃圾回收之前确定要读取的数据是否在垃圾回收过程中碰巧已被读取到缓存。如果已被读取到缓存,则一些实施例可以简单地从缓存读取数据而不会中断垃圾回收的过程。
[0072] 图10是示出根据本公开的一些实施例的用于响应于I/O请求以读取数据有效负载的示例方法的流程图。该方法可以由数据存储系统(例如,图5的数据存储系统504)执行。
[0073] 如图10所示,在第一步骤1002中,应用程序(例如,图5的应用程序501)可以尝试读取文件。接着,在步骤1003中,数据存储系统(例如,图5的数据存储系统504)可以接收相应于所述尝试读取文件的I/O读取请求,并且可以查询元数据以确定存储与所述文件(逻辑块)相对应的数据的二级存储单元(SSU)(例如,图5的SSU 508)。然后,在步骤1004中,查询目标驱动器的元数据(例如,图5的SSU 508)–存储请求数据的二级存储单元–确定数据在目标驱动器的NAND闪存上的位置。这可以通过目标驱动器的闪存转换层(FTL)(例如,图5的存储控制器512的一部分)查阅其元数据来确定存储请求的数据的物理块(例如,图5的物理块514)来实现。接下来,在步骤1005中,确定存储所请求的数据的一个或更多个物理块是否位于被垃圾回收的平面上。如果在步骤1005中确定该物理块不在被垃圾回收的平面上,则该方法前进到步骤1010。
[0074] 可选地,如果在步骤1005中确定一个或更多个物理块位于被垃圾回收的平面上,则在步骤1006中确定是否在存储所请求的数据的一个或更多个物理块在被垃圾回收(与仅位于被垃圾回收的其他一些物理块的平面中相反)。如果在步骤1006中确定该物理块未被垃圾回收,则该方法前进至步骤1009。或者,如果在步骤1006中确定该物理块在被垃圾回收,则在步骤1007中确定物理块的数据已被读取到数据缓存(例如,图5的DRAM缓存513)(也称为页面缓存,因为它可以存储从物理块读取的一个或更多个页面)。如果在步骤1007中确定物理块的数据没有被读取到一数据缓存(例如,图5的DRAM缓存513),则该方法前进到步骤1009。可替换地,如果在步骤1007中确定物理块的数据已经被读取到一数据缓存例如,图5的DRAM缓存513)则在步骤1008中,目标驱动器(例如,图5的SSU 508)使用数据缓存中的数据来响应所述读取请求。在步骤1088之后,该方法进行到步骤1011。
[0075] 可替代地,如果步骤1006或1007确定该物理块未被垃圾回收,并且不位于被垃圾回收的平在面上,则在步骤1009中,停止目标物理块上的垃圾回收并刷新数据缓存。在步骤1009之后,该方法然后前进到步骤1010。在步骤1010中,目标驱动器(例如,图5的SSU 508)正常执行读取操作以从物理块(例如,图5的多个物理块514中的一个)中检索所请求的数据)。在步骤1010之后,该方法然后前进至步骤1011。在步骤1011中,在从数据缓存中读取数据之后(步骤1008)或者在从物理块正常地读取数据之后(步骤1010),数据存储系统(例如,图5的数据存储系统504)发送读取的数据以响应I/O请求。
[0076] 一些实施例还可以选择以与接收请求的顺序不同的顺序来响应I/O请求。例如,一些实施例可以选择将读请求优先于写请求,或基于的更细粒度的特征优先某些请求。例如,可以优先读取请求,以避免可能的垃圾回收活动影响读取请求。一些实施例还可以出于效率原因而选择将某些请求分组在一起,例如能够在一次操作中写入更大的数据块,或者需要向连接的二级存储单元发出更少的I/O命令。
[0077] 在一些实施例中,还提供了一种包括指令的非暂时性计算机可读存储介质,并且该指令可以设备(诸如所公开的编码器和解码器)执行,以执行上述的方法。非暂时性介质的常见形式包括,例如,软盘、软盘、硬盘、SSD、磁带或任何其他磁数据存储介质、CD-ROM、任何其他光学数据存储介质、任何带有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM或任何其他闪存、NVRAM、高速缓存、寄存器、任何其他存储芯片或盒带以及它们的网络版本。该设备可以包括一个或更多个处理器(CPU)、输入/输出接口,网络接口和/或存储器。
[0078] 应当注意,本文中的诸如“第一”和“第二”的关系术语仅用于将一个实体或操作与另一个实体或操作区分开,并且不要求或暗示这些实体或操作之间的任何实际关系或顺序。此外,词语“包含”、“具有”,“包含”和“包含”以及其他类似形式在含义上是等同的,并且以无限制的方式开放,因为在这些词语中的任何一个之后的一个或更多个项目并非表示这些项目的详尽清单,或者仅限于所列项目。
[0079] 如本文所用,除非另有明确说明,否则术语“或”涵盖所有可能的组合,除非不可行。例如,如果声明数据库可以包括A或B,则除非另有明确说明或不可行,否则数据库可以包括A,或B,或A和B。作为第二个示例,如果声明一数据库可能包含A,B或C,则除非另有说明或不可行,否则数据库可能包含A,或B,或C,或A和B,或A和C,或B和C,或A和B和C。
[0080] 应当理解,上述实施例可以通过硬件或软件(程序代码)或硬件和软件的组合来实现。如果通过软件实现,则可以将其存储在上述计算机可读介质中。该软件在由处理器执行时可以执行所公开的方法。本公开中描述的主机系统、操作系统、文件系统和其他功能单元可以通过硬件或软件或硬件和软件的组合来实现。本领域普通技术人员还将理解,可以将多个上述功能单元组合为一个功能单元,并且每个上述功能单元可以进一步划分为多个功能子单元。
[0081] 在前述说明书中,已经参考了可以随实施方式而变化的许多具体细节来描述实施例。可以对所描述的实施例进行某些改变和修改。通过考虑本文公开的发明的说明书和实践,其他实施例对于本领域技术人员而言是显而易见的。说明书和实施例仅被认为是示例性的,本发明的真实范围和精神由所附权利要求书指示。附图中所示的步骤顺序仅出于说明目的,并且不旨在限于任何特定的步骤顺序。这样,本领域技术人员可以理解,在实现相同方法的同时,可以以不同顺序执行这些步骤。
[0082] 在附图和说明书中,已经公开了示例性实施例。但是,可以对这些实施例进行许多变化和修改。因此,尽管采用了特定术语,但是它们仅在一般和描述性意义上使用,而不是出于限制的目的。