一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法转让专利

申请号 : CN201580003127.1

文献号 : CN107209719B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蒋培军薛强黄克骥

申请人 : 华为技术有限公司

摘要 :

本发明实施例提供了一种阵列控制器,包括通信接口和处理器。通信接口用于和固态硬盘通信。处理器用于接收固态硬盘发送的逻辑块的信息,逻辑块的信息包括逻辑块的容量和逻辑块的指示信息。所述逻辑块包括一个或多个块。所述处理器还用于向所述固态硬盘发送多个写数据请求,每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。当所述固态硬盘将每个目标数据写入所述逻辑块之后,可以将该逻辑块写满。在所述固态硬盘进行垃圾回收操作时,可以减小写放大。

权利要求 :

1.一种阵列控制器,所述阵列控制器位于存储系统中,所述存储系统包括所述阵列控制器和固态硬盘,所述固态硬盘包括闪存芯片,所述闪存芯片包括多个块,其特征在于,所述阵列控制器包括通信接口和处理器;

所述通信接口,用于与所述固态硬盘进行通信;

所述处理器,用于接收所述固态硬盘发送的逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息,所述逻辑块包括一个或多个块;

向所述固态硬盘发送多个写数据请求,每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。

2.根据权利要求1所述的阵列控制器,其特征在于,所述逻辑块包含的每个块位于不同的通道。

3.根据权利要求1或2所述的阵列控制器,其特征在于,所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被所述固态硬盘分配用于存储数据的逻辑块。

4.根据权利要求1-2任一所述的阵列控制器,其特征在于,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的标识,每个写数据请求包括所述逻辑块的标识。

5.根据权利要求1-2任一所述的阵列控制器,其特征在于,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的逻辑地址区间,每个写数据请求包括所述逻辑地址区间的子区间。

6.一种固态硬盘,其特征在于,包括:闪存芯片和固态硬盘控制器;

所述闪存芯片包括多个块;

所述固态硬盘控制器,用于向阵列控制器发送逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息,所述逻辑块包括一个或多个块;

接收所述阵列控制器发送的多个写数据请求,其中每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量;

将所述每个写数据请求携带的目标数据写入所述指示信息所指示的所述逻辑块中。

7.根据权利要求6所述的固态硬盘,其特征在于,所述逻辑块包含的每个块位于不同的通道。

8.根据权利要求6或7所述的固态硬盘,其特征在于,

所述固态硬盘控制器,还用于确定所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被分配用于存储数据的逻辑块;

为所述处于待写入状态的逻辑块分配所述指示信息。

9.根据权利要求6-7任一所述的固态硬盘,其特征在于,所述逻辑块的指示信息包括所述逻辑块的标识,每个写数据请求包括所述逻辑块的标识;

所述固态硬盘控制器,具体用于根据所述逻辑块的标识将所述每个写数据请求中的目标数据写入所述标识对应的所述逻辑块中。

10.根据权利要求6-7任一所述的固态硬盘,其特征在于,所述逻辑块的指示信息包括所述逻辑块的逻辑地址区间,每个写数据请求包括所述逻辑地址区间的子区间;

所述固态硬盘控制器,具体用于根据所述每个写数据请求中的所述逻辑地址区间的子区间以及所述逻辑块的逻辑地址区间确定所述每个写数据请求中的目标数据对应的所述逻辑块;

将所述每个写数据请求中的目标数据写入所述对应的逻辑块中。

11.根据权利要求8所述的固态硬盘,其特征在于,在所述将所述目标数据写入所述指示信息所指示的所述逻辑块中之后,所述固态硬盘控制器还用于,回收所述为所述逻辑块分配的指示信息。

12.一种控制固态硬盘写数据的方法,其特征在于,所述方法应用于存储系统中,所述存储系统包括阵列控制器和所述固态硬盘,所述固态硬盘包括闪存芯片,所述闪存芯片包括多个块,所述方法由所述阵列控制器执行,包括:接收所述固态硬盘发送的逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息,所述逻辑块包括一个或多个块;

向所述固态硬盘发送多个写数据请求,每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。

13.根据权利要求12所述的方法,其特征在于,所述逻辑块包含的每个块位于不同的通道。

14.根据权利要求12或13所述的方法,其特征在于,所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被所述固态硬盘分配用于存储数据的逻辑块。

15.根据权利要求12-13任一所述的方法,其特征在于,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的标识,每个写数据请求包括所述逻辑块的标识。

16.根据权利要求12-13任一所述的方法,其特征在于,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的逻辑地址区间,每个写数据请求包括所述逻辑地址区间的子区间。

17.一种控制固态硬盘写数据的方法,其特征在于,所述方法应用于存储系统中,所述存储系统包括阵列控制器和所述固态硬盘,所述固态硬盘包括闪存芯片和固态硬盘控制器;所述闪存芯片包括多个块;所述方法由所述固态硬盘控制器执行,包括:向所述阵列控制器发送逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息,所述逻辑块包括一个或多个块;

接收所述阵列控制器发送的多个写数据请求,其中每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量;

将所述每个写数据请求携带的目标数据写入所述指示信息所指示的所述逻辑块中。

18.根据权利要求17所述的方法,其特征在于,所述逻辑块包含的每个块位于不同的通道。

19.根据权利要求17或18所述的方法,其特征在于,所述方法还包括:

确定所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被分配用于存储数据的逻辑块;

为所述处于待写入状态的逻辑块分配所述指示信息。

20.根据权利要求17-18任一所述的方法,其特征在于,所述逻辑块的指示信息包括所述逻辑块的标识,每个写数据请求包括所述逻辑块的标识;

所述将所述每个写数据请求携带的目标数据写入所述指示信息所指示的所述逻辑块中包括:根据所述逻辑块的标识将所述每个写数据请求中的目标数据写入所述标识对应的所述逻辑块中。

21.根据权利要求17-18任一所述的方法,其特征在于,所述逻辑块的指示信息包括所述逻辑块的逻辑地址区间,每个写数据请求包括所述逻辑地址区间的子区间;

所述将所述每个写数据请求携带的目标数据写入所述指示信息所指示的所述逻辑块中包括:根据所述每个写数据请求中的所述逻辑地址区间的子区间以及所述逻辑块的逻辑地址区间确定所述每个写数据请求中的目标数据对应的所述逻辑块;将所述每个写数据请求中的目标数据写入所述对应的逻辑块中。

22.根据权利要求19所述的方法,其特征在于,在所述将所述目标数据写入所述指示信息所指示的所述逻辑块中之后,所述方法还包括回收所述为所述逻辑块分配的指示信息。

23.一种控制固态硬盘写数据的装置,其特征在于,所述固态硬盘位于存储系统中,所述固态硬盘包括闪存芯片,所述闪存芯片包括多个块,所述存储系统还包括阵列控制器,所述装置位于所述阵列控制器中,包括:接收模块,用于接收所述固态硬盘发送的逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息所述逻辑块包括一个或多个块;

处理模块,用于向所述固态硬盘发送多个写数据请求,每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。

24.根据权利要求23所述的装置,其特征在于,所述逻辑块包含的每个块位于不同的通道。

25.根据权利要求23或24所述的装置,其特征在于,所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被所述固态硬盘分配用于存储数据的逻辑块。

26.根据权利要求23-25任一所述的装置,其特征在于,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的标识,每个写数据请求包括所述逻辑块的标识。

27.根据权利要求23-25任一所述的装置,其特征在于,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的逻辑地址区间,每个写数据请求包括所述逻辑地址区间的子区间。

28.一种控制固态硬盘写数据的装置,其特征在于,所述固态硬盘包括闪存芯片和固态硬盘控制器,所述闪存芯片多个块;所述装置位于所述固态硬盘控制器中,包括:收发模块,用于向阵列控制器发送逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息,所述逻辑块包括一个或多个块;以及接收所述阵列控制器发送的多个写数据请求,其中每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量;

写入模块,用于将所述每个写数据请求携带的目标数据写入所述指示信息所指示的所述逻辑块中。

29.根据权利要求28所述的装置,其特征在于,所述逻辑块包含的每个块位于不同的通道。

30.根据权利要求28或29所述的装置,其特征在于,所述装置还包括分配模块,用于确定所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被分配用于存储数据的逻辑块;为所述处于待写入状态的逻辑块分配所述指示信息。

31.根据权利要求28-29任一所述的装置,其特征在于,所述逻辑块的指示信息包括所述逻辑块的标识,每个写数据请求包括所述逻辑块的标识;

所述写入模块具体用于根据所述逻辑块的标识将所述每个写数据请求中的目标数据写入所述标识对应的所述逻辑块中。

32.根据权利要求28-29任一所述的装置,其特征在于,所述逻辑块的指示信息包括所述逻辑块的逻辑地址区间,每个写数据请求包括所述逻辑地址区间的子区间;

所述写入模块具体用于根据所述每个写数据请求中的所述逻辑地址区间的子区间以及所述逻辑块的逻辑地址区间确定所述每个写数据请求中的目标数据对应的所述逻辑块;

将所述每个写数据请求中的目标数据写入所述对应的逻辑块中。

33.根据权利要求30所述的装置,其特征在于,在所述将所述目标数据写入所述指示信息所指示的所述逻辑块中之后,所述分配模块还用于回收所述为所述逻辑块分配的指示信息。

说明书 :

一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法

技术领域

[0001] 本发明实施例涉及存储技术领域,特别是一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法。

背景技术

[0002] Flash Memory(闪存)装置是一种非易失性存储器,其存储介质是Flash颗粒,具有断电后数据不消失的特点,因此,被广泛的作为外部和内部存储器使用。以Flash颗粒为存储介质的闪存装置可能是固态硬盘(全称:Solid State Device,简称:SSD),又名固态驱动器(全称:Solid State Drive,简称:SSD),还可能是其他存储器。
[0003] 一个SSD通常由多个闪存芯片组成,每个闪存芯片包含若干个块(block)。通常情况下,SSD在存储从外部接收的数据时,可以并发地将数据写入多个block中以提高数据处理的效率。当SSD进行垃圾回收处理时,需要从多个block中获取有效数据并搬移到空闲的block,从而导致写放大。

发明内容

[0004] 本发明实施例提出了一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法,能够将一段相当于块的标准容量的整数倍大小的数据写入一个或多个块中,以将这一个或多个块写满,从而减小固态硬盘垃圾回收时的写放大。
[0005] 本实施例第一方面提供了一种阵列控制器。该阵列控制器位于存储系统中,所述存储系统还包括固态硬盘。阵列控制器包括通信接口和处理器。其中,通信接口用于和固态硬盘进行通信。处理器用于接收所述固态硬盘发送的逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息。所述处理器向所述固态硬盘发送多个写数据请求,每个写数据请求携带目标数据。所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。所述固态硬盘在接收所述多个写数据请求之后,根据每个写数据请求中的指示信息将其携带的目标数据写入该指示信息所指示的逻辑块中。需要说明的是,由于逻辑块包括一个或多个块,因此将目标数据写入逻辑块中实际上是将目标数据写入逻辑块包括的一个或多个块中。
[0006] 按照这种实施方式,由于处理器向固态硬盘发送的多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量,并且每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中。所以固态硬盘可以根据所述指示信息将多个写数据请求携带的目标数据均写入同一个逻辑块中,并且将所述逻辑块写满。由于在本实施例中一个逻辑块包括一个或多个块,也就意味着这些目标数据被写入一个或多个块中,并且将这些块写满了。本领域技术人员可以理解的是,固态硬盘在进行垃圾回收时是块为单位进行回收的,那么由于这些目标数据全部写入到一个或多个块中且这一个或多个块中没有其它数据,如果后续这些目标数据全部被阵列控制器释放掉,即被标记无效数据,则SSD可以直接对该逻辑块中的所有块进行擦除,无需进行有效数据的搬移。从而减小了垃圾回收时的写放大。
[0007] 结合第一方面,在第一方面的第一种实施方式中,所述逻辑块包含的每个块位于不同的通道。通常情况下,在固态硬盘内部,通道之间可以进行并发读写。因此当所述逻辑块包含的每个块位于不同的通道时,在将目标数据写入该逻辑块时可以实现并发地将所述目标数据写入该逻辑块,提高了写数据的效率。
[0008] 结合第一方面,在第一方面的第二种实施方式中,所述逻辑块包含的每个块属于同一个通道。在某些情况下,一个通道内的多个块之间也可以实现并发读写,因此当所述逻辑块包含的每个块属于同一个通道时,在将目标数据写入该逻辑块时可以实现并发地将所述目标数据写入该逻辑块,也可以提高写数据的效率。
[0009] 结合第一方面的以上任意一种实施方式,在第一方面的第三种实施方式中,所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被所述固态硬盘分配用于存储数据的逻辑块。在本实施例中,逻辑块具有四种状态,分别是空闲的、待写入的、写满的和损坏的。而固态硬盘报告给阵列控制器的是处于待写入状态的逻辑块,而处于写入状态的逻辑块可以直接被写入数据。因此当固态硬盘接收阵列控制器发送的写数据请求时可以根据写数据请求中携带的指示信息,直接将目标数据写入该处于待写入状态的逻辑块。
[0010] 结合第一方面的以上任意一种实施方式,在第一方面的第四种实施方式中,对于逻辑块的指示信息而言,一种具体的实现方式就是该指示信息为所述固态硬盘为所述逻辑块分配的标识。当所述指示信息是逻辑块的标识时,阵列控制器发给固态硬盘的每个写数据请求都携带所述标识,那么固态硬盘在接收写数据请求之后,就可以根据该标识将每个写数据请求中的目标数据写入标识对应的逻辑块中,从而将所述标识对应的逻辑块填满。
[0011] 结合第一方面的以上任意一种实施方式,本实施例还提供了一种与第一方面的第四种实施方式并列的实施方式,即第一方面的第五种实施方式。在这种实施方式中逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的逻辑地址区间。当所述指示信息是逻辑地址区间时,阵列控制器发给固态硬盘的每个写数据请求都携带所述逻辑地址区间的一个子区间,那么固态硬盘在接收写数据请求之后,就可以根据该子区间确定将每个写数据请求中的目标数据对应的逻辑块,将目标数据写入该逻辑块中,从而将所述逻辑块填满。
[0012] 结合第一方面的以上任意一种实施方式,在第一方面的第六种实施方式中,所述阵列控制器还包括缓存。所述处理器还用于从缓存中读取多个目标数据。由于所述阵列控制器包括缓存,因此阵列控制器在接收外部的数据后可以不必直接发送给固态硬盘存储,而是暂时将这些数据存放在缓存中,待缓存中的数据量达到一定水位线(例如逻辑块的容量)时,再将数据发送给固态硬盘。
[0013] 结合第一方面的第六种实施方式,在第一方面的第七种实施方式中,所述存储系统还包括主机,所述阵列控制器位于所述主机和所述固态硬盘之间。那么,在这种实施方式中,阵列控制器可以接收来自所述主机的数据,并将其写入缓存。
[0014] 本实施例第二方面提供了一种固态硬盘,该固态硬盘包括闪存芯片和固态硬盘控制器。其中,所述闪存芯片包括多个通道,每个通道包括多个块。所述固态硬盘控制器,用于向阵列控制器发送逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息。另外,所述固态硬盘控制器还用于接收所述阵列控制器发送的多个写数据请求。每个写数据请求携带目标数据,并且每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中。另外,所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。固态硬盘控制器再将所述每个写数据请求携带的目标数据写入所述指示信息所指示的所述逻辑块中。需要说明的是,由于逻辑块包括一个或多个块,因此将目标数据写入逻辑块中实际上是将目标数据写入逻辑块包括的一个或多个块中。
[0015] 按照这种实施方式,固态硬盘将逻辑块的信息报告给阵列控制器。所述逻辑块的信息包括逻辑块的容量以及逻辑块的指示信息。那么就可以使得阵列控制器在向所述固态硬盘发送写数据请求时,根据所述逻辑块的信息来发。具体的,阵列控制器向固态硬盘发送的多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量,并且每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中。所以固态硬盘可以根据所述指示信息将多个写数据请求携带的目标数据均写入同一个逻辑块中,并且将所述逻辑块写满。由于在本实施例中一个逻辑块包括一个或多个块,也就意味着这些目标数据被写入一个或多个块中,并且将这些块写满了。本领域技术人员可以理解的是,固态硬盘在进行垃圾回收时是块为单位进行回收的,那么由于这些目标数据全部写入到一个或多个块中且这一个或多个块中没有其它数据,如果后续这些目标数据全部被阵列控制器释放掉,即被标记无效数据,则SSD可以直接对该逻辑块中的所有块进行擦除,无需进行有效数据的搬移。从而减小了垃圾回收时的写放大。结合第二方面,在第二方面的第一种实施方式中,所述逻辑块包含的每个块位于不同的通道。通常情况下,在固态硬盘内部,通道之间可以进行并发读写。因此当所述逻辑块包含的每个块位于不同的通道时,在将目标数据写入该逻辑块时可以实现并发地将所述目标数据写入该逻辑块,提高了写数据的效率。
[0016] 结合第二方面,在第二方面的第二种实施方式中,所述逻辑块包含的每个块属于同一个通道。在某些情况下,一个通道内的多个块之间也可以实现并发读写,因此当所述逻辑块包含的每个块属于同一个通道时,在将目标数据写入该逻辑块时可以实现并发地将所述目标数据写入该逻辑块,也可以提高写数据的效率。
[0017] 结合第二方面的以上任意一种实施方式,在第二方面的第三种实施方式中,所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被所述固态硬盘分配用于存储数据的逻辑块。在本实施例中,逻辑块具有四种状态,分别是空闲的、待写入的、写满的和损坏的。而固态硬盘报告给阵列控制器的是处于待写入状态的逻辑块,而处于写入状态的逻辑块可以直接被写入数据。因此当固态硬盘接收阵列控制器发送的写数据请求时可以根据写数据请求中携带的指示信息,直接将目标数据写入该处于待写入状态的逻辑块。
[0018] 结合第二方面的以上任意一种实施方式,在第二方面的第四种实施方式中,对于逻辑块的指示信息而言,一种具体的实现方式就是该指示信息为所述固态硬盘为所述逻辑块分配的标识。当所述指示信息是逻辑块的标识时,固态硬盘接收到的每个写数据请求都携带所述标识,那么固态硬盘在接收写数据请求之后,就可以根据该标识将每个写数据请求中的目标数据写入标识对应的逻辑块中,从而将所述标识对应的逻辑块填满。
[0019] 结合第二方面的以上任意一种实施方式,本实施例还提供了一种与第二方面的第四种实施方式并列的实施方式,即第二方面的第五种实施方式。在这种实施方式中逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的逻辑地址区间。当所述指示信息是逻辑地址区间时,固态硬盘接收的每个写数据请求都携带所述逻辑地址区间的一个子区间,那么固态硬盘在接收写数据请求之后,就可以根据该子区间确定将每个写数据请求中的目标数据对应的逻辑块,将目标数据写入该逻辑块中,从而将所述逻辑块填满。
[0020] 结合第二方面的第三种至第五种实施方式,在第二方面的第六种实施方式中,在所述将所述目标数据写入所述指示信息所指示的所述逻辑块中之后,所述固态硬盘控制器还用于,回收所述为所述逻辑块分配的指示信息。由于所述指示信息只会分配给处于待写入状态的逻辑块。因此当所述逻辑块被写满时,可以将其指示信息回收起来供其他处于待写入状态的逻辑块使用。
[0021] 结合第二方面的以上任意一种实施方式,在第二方面的第七种实施方式中,所述固态硬盘控制器具体用于向阵列控制器发送SCSI WRITE命令。该命令包括GROUP NUMBER字段,该字段用于携带所述逻辑块的指示信息。在该种实施方式提供了一种私有命令来报告逻辑块的指示信息。在传统的SCSI命令中,没有包含GROUP NUMBER字段。那么本实施例在SCSI WRITE命令中增加了GROUP NUMBER字段专门用于报告逻辑块的指示信息。
[0022] 本发明实施例第三方面提供了一种控制固态硬盘写数据的方法,该方法应用于第一方面提供的阵列控制器中。
[0023] 本发明实施例第四方面提供了一种控制固态硬盘写数据的方法,该方法应用于第二方面提供的阵列控制器中。
[0024] 本发明实施例第五方面提供了一种控制固态硬盘写数据的装置,该装置位于第一方面提供的阵列控制器中。
[0025] 本发明实施例第六方面提供了一种控制固态硬盘写数据的装置,该装置位于第二方面提供的阵列控制器中。
[0026] 本发明实施例第三方面至第六方面提供的控制固态硬盘写数据的方法或者控制固态硬盘写数据的装置都能够将一段相当于块的标准容量的整数倍大小的数据写入一个或多个块中,以将这一个或多个块写满,从而减小固态硬盘垃圾回收时的写放大。
[0027] 本发明实施例提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可以由上述第一方面的阵列控制器执行,并用于执行上述第三方面的至少一种方法。
[0028] 本发明实施例提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可以由上述第二方面的阵列控制器执行,并用于执行上述第四方面的至少一种方法。
[0029] 本发明实施例提供的以上一种计算机程序产品,都能够将一段相当于块的标准容量的整数倍大小的数据写入一个或多个块中,以将这一个或多个块写满,从而减小固态硬盘垃圾回收时的写放大。

附图说明

[0030] 为了更清楚地说明本发明实施例的技术方案,下面将对现有技术或实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0031] 图1是本发明实施例提供的应用场景图;
[0032] 图2是本发明实施例提供的闪存芯片的示意图;
[0033] 图3是本发明实施例提供的块的示意图;
[0034] 图4是本发明实施例提供的现有技术中固态硬盘存储数据的示意图;
[0035] 图5是本发明实施例提供的逻辑块的示意图;
[0036] 图6是本发明实施例提供的阵列控制器的结构示意图;
[0037] 图7是本发明实施例提供的一种控制固态硬盘写数据方法的流程示意图;
[0038] 图8是本发明实施例提供的固态硬盘存储数据的示意图;
[0039] 图9是本发明实施例提供的另一种控制固态硬盘写数据方法的流程示意图;
[0040] 图10是本发明实施例提供的再一种控制固态硬盘写数据方法的流程示意图;
[0041] 图11是本发明实施例提供的一种控制固态硬盘写数据装置的结构示意图;
[0042] 图12是本发明实施例提供的另一种控制固态硬盘写数据装置的结构示意图。

具体实施方式

[0043] 本发明实施例提出了一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法,能够将一段相当于块的标准容量的整数倍大小的数据写入一个或多个块中,以将这一个或多个块写满,从而减小固态硬盘垃圾回收时的写放大。
[0044] 图1描绘了本发明实施例提供的存储系统的组成图,图1所示的存储系统包括主机33、阵列控制器11和固态硬盘22。其中,主机33可以为服务器、台式计算机等终端设备。
[0045] 阵列控制器11位于主机33和固态硬盘22之间,可以是一种计算设备,如服务器、台式计算机等等。在阵列控制器11上安装有操作系统以及其他应用程序。阵列控制器11可以接收来自主机33的输入输出(I/O)请求,存储I/O请求中携带的数据,并在满足一定条件时将其保存的数据写入固态硬盘22中。
[0046] 固态硬盘(Solid State Device,SSD)22是以Flash颗粒为存储介质的存储器,又名固态驱动器(Solid State Drive,SSD),还可能包括其他存储器。本实施例中,固态硬盘22以SSD为例说明。
[0047] 图1仅是示例性说明,并不限定具体的组网方式,如:级联树形组网、环状组网都可以。只要阵列控制器11和固态硬盘22之间能够相互通信。
[0048] 固态硬盘22包括SSD控制器220和存储介质221。其中,SSD控制器220用于执行阵列控制器11发送的写数据请求或者读数据请求等操作。
[0049] 存储介质221通常由若干个闪存(Flash)芯片组成。每个闪存芯片包括多个通道,每个通道包括若干个块(block)(如图2所示)。通常情况下闪存芯片可以按照固定尺寸划分为若干个block,因此block具有标准容量。所谓block的标准容量是指一个空闲且不包含坏页(bad page)的block所能存储数据的容量。通常情况下block的标准容量可以是2的N次方(M),其中,N为正整数。SSD进行的擦除操作就是以block为单位来执行的。例如,当SSD需要进行垃圾回收时,可以先将一个block中的有效数据搬移到另一个新的block中去,然后再将原来的block中存储的所有数据(包括有效数据和无效数据)擦除掉。在本发明实施例中,block中的有效数据是指block中保存的没有被修改过的数据,这部分数据可能会被读取;block中的无效数据是指block中保存的已经被修改过的数据,这部分数据不可能会被读取。本领域技术人员可知,由于闪存颗粒的擦除特性,保存在block中的数据不会像普通机械硬盘那样直接被修改。当需要对某个block中的数据进行修改时,SSD控制器220会找到一个新的block将修改后的数据写入该新的block,那么,原来的block中的数据则变为无效数据。待SSD进行垃圾回收时,这些无效数据将会被擦除。
[0050] 另外,如图3所示,每个block包含若干个页(page)。SSD在执行写数据请求时,是以page为单位来写数据的。举例来说,阵列控制器11向SSD控制器220发送一个写数据请求,其中,所述写数据请求携带有逻辑块地址(逻辑块Address,LBA)和数据,所述LBA是阵列控制器11能看到并且访问的地址。SSD在接收所述写数据请求之后,按照设定的策略将所述数据写入一个或多个block中的page中。所述写入的page的地址才是实际存储所述数据的地址,又称物理地址。SSD中包括一个闪存翻译层(Flash Translation Layer,FTL),用于建立并保存所述LBA与物理地址之间的对应关系。当后续阵列控制器11向SSD控制器220发送读数据请求,要求读取所述数据时,所述读数据请求中携带所述LBA,此时,SSD控制器220可以根据所述LBA、以及所述LBA与物理地址之间的对应关系读取出所述数据,并发送给阵列控制器11。
[0051] 当阵列控制器11从缓存中读取一段数据时,并发送给SSD时,通常情况下,这是一段逻辑地址连续的数据。然而,当SSD控制器220接收到所述写数据请求时,是按照自己设定的策略将所述数据写入一个或多个block的page(即物理地址)中。本领域技术人员可以理解的是,这些物理地址实际上并不一定是连续的。也就是说,在阵列控制器11看来一段逻辑地址连续的数据实际上被分散地写到SSD的物理空间了。下面将结合图4对现有技术中SSD如何写入数据进行说明。
[0052] 图4是现有技术中SSD如何写入数据的示意图。通常情况下,由于固态硬盘22可以在各通道之间并发地写入数据,当阵列控制器11在将数据发送固态硬盘22后,SSD控制器220通常从每个通道中选择一个block,将所述数据并行写入所述多个block中。可以理解的是,固态硬盘22也可以在一个通道内的多个block之间并发地写入数据。如图4所示,在将该数据写入多个block后,每个block均提供一部分空间用来存储部分数据。图5中block中白色部分代表该block的空闲空间,灰色部分代表所述数据的一部分写入block后,所述block的已使用空间。因此,在阵列控制器11看来,就是一段逻辑地址连续的数据被分散地保存在多个block里面了,且每个block中写入了分别属于不同逻辑地址段的数据。本领域技术人员可以知道,SSD内部会定期进行垃圾回收操作,并且在进行垃圾回收操作时是以block为单位擦除的。那么,一段逻辑地址连续的数据被分散地保存在多个block中了且每个block中写入了分别属于不同逻辑地址段的数据。垃圾回收时就需要从多个block中获取有效数据搬移到空闲的块中,这样会增大垃圾回收导致的写放大。所谓写放大是指写入闪存芯片的数据多于主机写入SSD的数据。
[0053] 在本实施例中,如图5所示,在本实施例中可以从每个通道中取出一个block,组成一个逻辑块(logic block)。也就是说,本实施例中逻辑块包括多个block,每个block位于不同的通道。可以理解的是,也可以从部分通道中各取出一个block组成一个逻辑块,同样的,逻辑块包括的多个block分别位于不同的通道。逻辑块的容量是block的标准容量的整数倍,这取决于逻辑块包含的block的个数。本实施例中逻辑块的容量可以预先保存在阵列控制器11中。阵列控制器11在接收主机33发送的写数据请求之后,可以暂时将写数据请求保存在其缓存中,待缓存中的数据达到所述逻辑块的容量时,再将这些数据发送给SSD存储。
[0054] 在本实施例中,按照其状态划分,逻辑块可分为四种,分别是空闲(free)、待写入(writing)、写满(full)和损坏(bad)。空闲状态的逻辑块是指经过擦除干净的逻辑块;待写入状态的逻辑块是指已经被分配出来可用于写入数据的逻辑块;写满状态的逻辑块是指全部空间均已被写满的逻辑块,对于写满状态的逻辑块经过擦除之后可以重新成为空闲状态的逻辑块;损坏状态的逻辑块是指发生损坏不能使用的逻辑块。本实施例中所提到的用于存储数据的逻辑块实际上是处于待写入状态的逻辑块,因此在后面的介绍中如无特别说明,逻辑块都是指处于待写入状态的逻辑块。
[0055] 为了标识那些处于待写入状态的逻辑块,一种可选的实施方式是,在SSD中给每个逻辑块分配一个标识。所述标识可以是数字、字母或者其他用于唯一标识所述逻辑块的符号,也可以是数字、字母或者其他符号之间的任意组合。例如一个逻辑块的标识为0,另一个逻辑块的标识为1,再一个逻辑块的标识为2,依此类推。
[0056] 另一种可选的实施方式是,在SSD中给每个逻辑块分配一段逻辑地址区间。例如,一个逻辑块对应的逻辑地址区间是0MB-1023MB;另一个逻辑块对应的逻辑地址区间是1024MB-2047MB;再一个逻辑块对应的逻辑地址区间是2048MB-3071MB,依此类推。
[0057] SSD控制器220需要将逻辑块的标识或者逻辑块的逻辑地址区间报告给阵列控制器11,使得阵列控制器11在发送数据给SSD存储的时候,可以将所述处于逻辑块的标识携带在写数据请求中发送给SSD,指定SSD将数据写入所述标识对应的逻辑块中。或者,根据逻辑块的逻辑地址区间指定写数据请求的起始逻辑地址和长度。如果处于待写入状态的逻辑块有多个,那么阵列控制器11也就会接收多个逻辑块的标识或者多个逻辑块的逻辑地址区间,然后从多个逻辑块中任意选择一个,根据其标识或者逻辑地址区间发送写数据请求给SSD。
[0058] 下面介绍阵列控制器11的硬件结构,图6是本发明实施例阵列控制器11的结构示意图。如图6所示,阵列控制器11主要包括处理器(processor)118、缓存(cache)120、存储器(memory)122、通信总线(简称总线)126以及通信接口(Communication Interface)128。处理器118、缓存120、存储器122以及通信接口128通过通信总线126完成相互间的通信。
[0059] 通信接口128,用于与主机33或固态硬盘22通信。
[0060] 处理器118可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。在本发明实施例中,处理器118可以用于接收来自主机33的写数据请求或者读数据请求、处理所述写数据请求或者读数据请求、将所述写数据请求或者读数据请求发送给固态硬盘22以及其他操作。
[0061] 存储器122,用于存放程序124,存储器122可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可以理解的是,存储器122可以为随机存储器(Random-Access Memory,RAM)、磁碟、硬盘、光盘、固态硬盘(Solid State Disk,SSD)或者非易失性存储器等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
[0062] 程序124可以包括程序代码,所述程序代码包括计算机操作指令。
[0063] 缓存120(Cache)用于缓存从主机33接收的数据或从固态硬盘22读取的数据。缓存120可以是RAM、ROM、闪存(Flash memory)或固态硬盘(Solid State Disk,SSD)等各种可以存储数据的非短暂性的(non-transitory)机器可读介质,在此不做限定。举例来说,当阵列控制器11接收主机33发送的写数据请求时,可以将所述写数据请求保存在缓存120中,由处理器118对其进行处理。可选的,当阵列控制器11接收主机33发送的多个写数据请求时,可以暂时将所述多个写数据请求保存在缓存120中,当缓存120的容量达到水位线(例如,缓存
120中存储的数据的容量达到逻辑块的容量)时,再从缓存120中读取出相当于逻辑块的容量的数据,将其发送给固态硬盘22进行持久化存储。
[0064] 另外,存储器122和缓存120可以合设或者分开设置,本发明实施例对此不做限定。
[0065] 下面介绍本发明实施例将数据写入固态硬盘的方法流程,本发明实施例中的数据写入闪存装置的方法可以应用在图1所示的存储系统、图6所示的阵列控制器11中。如图7所示,所述方法包括如下步骤。
[0066] 在步骤S301中,SSD控制器220将逻辑块的指示信息发送给阵列控制器11。
[0067] 具体的,SSD控制器220将逻辑块的指示信息发送给阵列控制器11的处理器118。所述逻辑块的指示信息可以是固态硬盘22为所述逻辑块分配的标识,也可以是固态硬盘22为所述逻辑块分配的逻辑地址区间,或者其他用于指示一个特定逻辑块的信息。
[0068] 在步骤S302中,SSD控制器220将逻辑块的容量发送给阵列控制器11。
[0069] 具体的,SSD控制器220将逻辑块的容量发送给阵列控制器11的处理器118,由处理器118接收所述逻辑块的容量。需要说明的是,步骤S302与步骤S301之间并没有先后顺序之分。也就是说,在本实施例中只要SSD控制器220将所述逻辑块的容量发送给阵列控制器11即可,并不限于在什么时段或者哪个步骤发送给阵列控制器11,而且,该信息可以是单独发送,也可以是跟其他的信息,比如逻辑块的标识一起发送。
[0070] 在步骤S303中,阵列控制器11将多个目标数据发送给SSD控制器220,所述多个目标数据的长度的总和等于所述逻辑块的容量。
[0071] 具体的,阵列控制器11中的处理器118将所述多个目标数据携带在多个写数据请求中发送给SSD控制器220。
[0072] 当所述指示信息是所述逻辑块的标识时,每个写数据请求还需要携带所述逻辑块的标识。当所述指示信息是所述逻辑块的逻辑地址区间时,每个写数据请求还需要携带所述逻辑地址区间的一个子区间。图9以及图10所示的实施方式将针对这两种情况进行详细描述。
[0073] 在步骤S304中,SSD控制器220将所述多个目标数据写入所述逻辑块。
[0074] 具体的,SSD控制器220在接收步骤S303中的多个写数据请求后,可以根据每个写数据请求中的指示信息确定所述指示信息所指示的逻辑块,然后将每个写数据请求中的目标数据写入所述逻辑块中。
[0075] 在现有技术中,阵列控制器11发送给固态硬盘22的写数据请求并没有包含所述逻辑块的指示信息,所以现有技术中的SSD控制器220在接收到写数据请求通常自行选择多个block并行地写入所述数据,这就会导致这些数据被分散地保存在各个block中。然而,在本实施例中,处理器118将所述逻辑块的标识携带在所述多个写数据请求中发送给固态硬盘22,是为了指示固态硬盘22将这些写数据请求中的目标数据都写入所述指示信息所指示的逻辑块中。需要说明的是,由于所述逻辑块包含一个或多个块。将目标数据写入逻辑块中实际上是将目标数据写入所述逻辑块包含的一个或多个块中。
[0076] 那么在步骤S304中,SSD控制器220在接收所述多个写数据请求之后就可以将所述每个写数据请求携带的目标数据写入所述指示信息所指示的逻辑块中。并且,由于所述目标数据的长度的总和等于所述逻辑块的容量,所以在SSD控制器220将所述写数据请求所携带的目标数据写入所述逻辑块之后,所述逻辑块刚好被写满(如图8所示)。
[0077] 按照图7所述的实施方式,所述多个目标数据被存储在一个逻辑块中,也就是一个或多个block中。那么由于这些目标数据全部写入到一个或多个块中且这一个或多个块中没有其它数据,如果后续这些目标数据全部被阵列控制器释放掉,即被标记为无效数据,那么可以直接对所述block进行擦除操作,无需进行有效数据的搬移,减小了垃圾回收的写放大问题。
[0078] 具体来讲,当阵列控制器11需要对固态硬盘进行垃圾回收操作时,通常情况下可以发一个读命令给固态硬盘22,要求读取固态硬盘22的某个逻辑块中的有效数据。在固态硬盘22将有效数据发送给阵列控制器11之后,阵列控制器11再向固态硬盘22发送一个写命令,要求将所述有效数据写入一个新的逻辑块。然后,阵列控制器11向固态硬盘22发送trim命令,指示原来的逻辑块无效。那么当固态硬盘自己内部进行垃圾回收操作时,发现所述逻辑块无效,则可以认为其存储的数据都是无效数据,从而直接擦除该逻辑块中包含的块,无需从中再获取有效数据,并搬移该有效数据。因此减小了固态硬盘垃圾回收时的写放大问题。
[0079] 下面介绍本发明实施例将数据写入固态硬盘的方法流程,本发明实施例中的数据写入闪存装置的方法可以应用在图1所示的存储系统、图6所示的阵列控制器11中。如图9所示,所述方法包括如下步骤。
[0080] 在步骤S101中,SSD控制器220从SSD包含的多个逻辑块中确定处于待写入状态的逻辑块。
[0081] 如前面所述,逻辑块通常处于四种状态:空闲、待写入、写满和损坏。本实施例从这些逻辑块中将处于待写入状态的逻辑块挑选出来,放入逻辑块队列中。当需要写入数据时,可以直接从所述逻辑块队列中获取其中任意一个逻辑块,将数据写入。所谓逻辑块队列是一种用于管理处于待写入状态的数据结构。可以理解的是,除了队列之外本实施例也可以采用其他数据结构,例如链表等来管理逻辑块。所述逻辑块队列可以保存在SSD控制器220的缓存或者闪存芯片中。
[0082] 所述确定出的处于待写入状态的逻辑块可能是一个,也可能是多个。
[0083] 在步骤S102中,SSD控制器220为处于待写入状态的逻辑块分配标识。
[0084] 所述标识可以是编号,例如0、1、2……,也可以是其他用于唯一标识所述待写入状态的逻辑块的符号,也可以是数字、字母或者其他符号之间的任意组合。
[0085] 在步骤S103中,SSD控制器220将步骤S102中为所述逻辑块分配的标识发送给阵列控制器11。
[0086] 在本实施例中,SSD控制器220可以通过SCSI WRITE命令将所述标识发送给阵列控制器11。所述SCSI WRITE命令包含GROUP NUMBER字段,该字段可用于携带所述标识。
[0087] 在步骤S104中,SSD控制器220将所述逻辑块的容量发送给阵列控制器11。
[0088] 该步骤与图7所示的步骤S302类似,这里不再赘述。
[0089] 在步骤S105中,阵列控制器11接收主机33发送的多个数据。
[0090] 所述多个数据可能是主机33通过多个写命令发送给阵列控制器11的。具体的,是由阵列控制器11中的处理器118接收主机33发送的所述多个数据。其中每个写命令携带至少一个数据,以及所述数据的主机逻辑地址区间。所谓主机逻辑地址是指阵列控制器11对主机33呈现的存储空间的地址。而每个数据的主机逻辑地址区间可能是不连续的。例如,一个数据的主机逻辑地址区间是0x40000-0x40020;另一个数据的主机逻辑地址区间是0x10010-0x10020。那么这两个数据的主机逻辑地址区间之间是不连续的。需要说明的是,在实际应用中所述写命令中携带的可能是起始主机逻辑地址和长度,所述主机逻辑地址区间是根据起始主机逻辑地址和长度得到的。
[0091] 在步骤S106中,阵列控制器11将接收到的多个数据写入缓存120中。
[0092] 具体的,阵列控制器11中的处理器118将接收到的多个数据写入缓存120中。
[0093] 通常的做法是,阵列控制器11在接收主机33发送的数据之后不直接写入固态硬盘22,而是暂时写入缓存120中。待缓存120的存储空间达到一定水位线时,处理器118从缓存
120中读取出部分或全部数据,发送给SSD22进行持久化存储。
[0094] 需要说明的是,步骤S105-步骤106和步骤S101-步骤104之间没有先后顺序之分。也就是说,阵列控制器11接收主机33发送的目标数据并缓存下来的过程与接收SSD22发送的逻辑块的信息的过程并不冲突,没有先后顺序之分,也可以并行执行。
[0095] 在步骤S107中,阵列控制器11从缓存120中读取出多个目标数据。
[0096] 具体的,阵列控制器11中的处理器118从缓存120中读取出所述多个目标数据。
[0097] 所述多个目标数据的长度的总和等于所述逻辑块的容量。在本实施例中,为了和阵列控制器11从主机33接收的数据相区别,将所述从缓存120中读取出的数据称为目标数据。这些目标数据的长度的总和等于所述逻辑块的容量。当处理器118生成多个写数据请求中发送给固态硬盘22时,可视为每个写数据请求中携带一个目标数据。可以理解的是当阵列控制器11从主机33处接收并保存在缓存120中的数据超过所述逻辑块的容量时,处理器118也只需要从缓存120中读取出大小等于所述逻辑块的容量的多个目标数据。并且,当处理器118从主机33处接收并保存在缓存120中的数据未到达所述逻辑块的容量时,处理器
118可以暂时不从缓存120中读取数据,待缓存120中的数据达到所述逻辑块的容量时再进行处理。
[0098] 在步骤S108中,阵列控制器11向固态硬盘22发送多个写数据请求。每个写数据请求携带目标数据,然而所述多个写数据请求所携带的目标数据的长度的总和需等于所述逻辑块的容量。并且,所述每个写数据均携带有所述逻辑块的标识。
[0099] 具体的,阵列控制器11中的处理器118向固态硬盘22发送所述多个写数据请求。
[0100] 可以理解的是,如果固态硬盘22发送给阵列控制器11有多个逻辑块的标识,那么阵列控制器11可以从中任意选择一个标识,并携带在所述多个写数据请求中。
[0101] 另外,在本实施例中,阵列控制器11发送给固态硬盘22的写数据请求还可以包括每个目标数据的起始逻辑地址和长度(也可以是逻辑地址区间)。这里的逻辑地址与步骤S105中的主机逻辑地址不同,这里的逻辑地址是固态硬盘22呈现给阵列控制器11的存储空间的地址,而步骤S105中的主机逻辑地址是阵列控制器11呈现给主机33的存储空间的逻辑地址。另外,需要说明的是,阵列控制器11在指定逻辑地址区间时,所述每个目标数据的逻辑地址区间是连续的。阵列控制器11将每个目标数据的起始逻辑地址和长度发送给固态硬盘22,那么SSD控制器220在将目标数据写入所述逻辑块所包含的块之后,可以将所述起始逻辑地址与所述目标数据实际写入的物理地址之间的对应关系保存在FTL中。那么后续如果阵列控制器11需要读取所述目标数据,则可以将所述目标数据的起始逻辑地址和长度携带在读数据请求中发送给固态硬盘22。SSD控制器220可以根据所述逻辑地址和长度,以及FTL中保存的对应关系获取所述目标数据的物理地址,从而读取出所述目标数据并发送给阵列控制器11。
[0102] 在步骤S110中,SSD控制器220回收所述逻辑块的标识。
[0103] 由于此时所述逻辑块已被写满数据,处于写满(full)状态,因此SSD控制器220可以回收所述标识,将所述逻辑块从逻辑块队列中删除,并且将所述标识分配给其他处于待写入状态的逻辑块。
[0104] 下面介绍本发明实施例将数据写入固态硬盘的另一个方法流程,本发明实施例中的数据写入闪存装置的方法可以应用在图1所示的存储系统、图6所示的阵列控制器11中。如图10所示,所述方法包括如下步骤。
[0105] 在步骤S201中,阵列控制器11接收主机33发送的多个数据。该步骤与图9所示的步骤S105类似,可参见步骤S105的描述,这里不再赘述。
[0106] 在步骤S202中,阵列控制器11将接收到的多个数据写入缓存120中。该步骤与图9所示的步骤S106类似,可参见步骤S106的描述,这里不再赘述。
[0107] 在步骤S203中,阵列控制器11接收SSD控制器220发送的逻辑块的逻辑地址区间。
[0108] 具体的,阵列控制器11中的处理器118接收逻辑块的逻辑地址区间。在本实施例中,每个逻辑块对应一段逻辑地址区间。例如,一个逻辑块对应的逻辑地址区间是0MB-1023MB;另一个逻辑块对应的逻辑地址区间是1024MB-2047MB;再一个逻辑块对应的逻辑地址区间是2048MB-3071MB。
[0109] 这些逻辑块都是处于待写入状态的逻辑块,SSD控制器220需要将这些逻辑块的逻辑地址区间报告给阵列控制器11。
[0110] 在步骤S204中,阵列控制器11接收SSD控制器220发送的逻辑块的容量。该步骤与图9所示的步骤S104类似,可参加步骤S104的描述,这里不再赘述。
[0111] 同样的,步骤S201-S203与步骤S204之间并没有先后顺序之分。
[0112] 在步骤S205中,阵列控制器11从缓存120中读取所述目标数据。该步骤与图9所示的步骤S107类似,可参见步骤S107的描述,这里不再赘述。
[0113] 在步骤S206中,阵列控制器11向固态硬盘22发送多个写数据请求。
[0114] 具体的,阵列控制器11中的处理器118向固态硬盘22发送多个写数据请求。每个写数据请求可以携带目标数据,然而所述多个写数据请求所携带的目标数据的长度的总和需等于所述逻辑块的容量。并且,所述每个写数据均携带有所述目标数据的起始逻辑地址和长度。其中,所述目标数据的所述起始逻辑地址以及所述目标数据的末尾逻辑地址均属于同一个逻辑块的逻辑地址区间,所述末尾逻辑地址是由所述起始逻辑地址和长度获得的。因此,可以认为每个写数据请求所携带的目标数据的逻辑地址区间是所述逻辑块的逻辑地址区间的一个子区间。当阵列控制器11接收到多个逻辑块的逻辑地址区间时,可以从中任意选择一个用来确定所述目标数据的起始逻辑地址和长度。
[0115] 在步骤S207中,SSD控制器220接收所述多个写数据请求后,确定每个写数据请求中携带的目标数据对应的逻辑块。
[0116] 在本实施例中,由于每个逻辑块对应一段逻辑地址区间。因此,SSD控制器220可以根据每个写数据请求中携带的起始逻辑地址和长度,以及每个逻辑块对应的逻辑地址区间确定每个目标数据对应的逻辑块。例如,其中一个写数据请求携带的目标数据的起始逻辑地址是1010KB,长度是10KB,那么所述目标数据对应的逻辑块就是逻辑地址区间为0MB-1023MB的逻辑块。
[0117] 在步骤S208中,SSD控制器220将每个写数据请求中携带的目标数据写入对应的逻辑块中。
[0118] 按照图10所示的实施方式,阵列控制器11也可以将一段逻辑地址连续的数据写入一个或几个块中。
[0119] 结合图9以及图10所示的实施方式,在本发明另一种实施方式中,固态硬盘22可以将其闪存芯片222的存储空间划分为至少两个部分。每个部分均包含若干逻辑块,对于其中一个部分,固态硬盘22为其包含的每个逻辑块分配标识;对于另一个部分,固态硬盘22为其包含的每个逻辑块分配逻辑地址区间。分别将第一部分中每个逻辑块的标识以及第二部分中每个逻辑块的逻辑地址区间报告给阵列控制器11。阵列控制器11从缓存120中读取出长度等于逻辑块的容量的多个目标数据后,将所述多个目标数据携带在多个写数据请求中发送给固态硬盘22。所述多个写数据请求中的每个写数据请求可以包括逻辑块的标识,也可以包括起始逻辑地址和长度(可认为是逻辑地址区间的一个子区间)。也就是说,在这种实施方式中,阵列控制器11既可以按照图9所示的实施方式向固态硬盘22发送多个写数据请求,也可以提供图10所示的实施方式向固态硬盘22发送多个写数据请求。对于固态硬盘22来说,当它接收到的写数据请求中携带逻辑块的标识时,则根据所述标识确定逻辑块并写入数据;当它接收到的写数据请求中携带逻辑地址区间的一个子区间时,也可以根据所述子区间以及每个逻辑块对应的逻辑地址区间来确定逻辑块并写入数据。
[0120] 可选的,在上述实施方式中,闪存芯片222的存储空间还可以包括另一个部分。在该部分中,固态硬盘22可以自行决定将阵列控制器11发送的数据写入哪个block。也就是说,阵列控制器11向固态硬盘22发送的写数据请求可以不携带逻辑块的标识或者逻辑块的逻辑地址区间,在这种情况下就由固态硬盘22自行选择一个或多个block来写入数据,而不是写入阵列控制器11指定的逻辑块中。
[0121] 可以理解的是,上述三种存储空间划分以及实施方式,也可以任意两种随意组合。相对于单独实施图9或者图10所示的实施方式而言,会更加灵活,可以满足多种需求。
[0122] 如图11所示,本发明实施例还提供了一种控制固态硬盘写数据的装置700。所述固态硬盘位于存储系统中,所述存储系统还包括阵列控制器,所述装置位于所述阵列控制器中。具体的,所述装置包括接收模块701和处理模块702。
[0123] 其中,接收模块701用于接收所述固态硬盘发送的逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息。
[0124] 所述处理模块702,用于向所述固态硬盘发送多个写数据请求,每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。
[0125] 可选的,所述固态硬盘包括闪存芯片,所述闪存芯片包括多个通道,每个通道包括多个块,所述逻辑块包括一个或多个块,并且所述逻辑块包含的每个块位于不同的通道。
[0126] 可选的,所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被所述固态硬盘分配用于存储数据的逻辑块。
[0127] 可选的,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的标识。每个写数据请求包括所述逻辑块的标识。
[0128] 可选的,所述逻辑块的指示信息包括所述固态硬盘为所述逻辑块分配的逻辑地址区间。每个写数据请求包括所述逻辑地址区间的子区间。
[0129] 如图12所示,本实施例还提供了另一种控制固态硬盘写数据的装置800,所述固态硬盘包括闪存芯片和固态硬盘控制器,所述闪存芯片包括多个通道,每个通道包括多个块;所述装置位于所述固态硬盘控制器中。所述装置具体包括收发模块801和写入模块802。
[0130] 收发模块801,用于向阵列控制器发送逻辑块的信息,所述逻辑块的信息包括所述逻辑块的容量以及所述逻辑块的指示信息;以及接收所述阵列控制器发送的多个写数据请求,其中每个写数据请求携带目标数据,所述每个写数据请求用于指示所述固态硬盘将所述目标数据写入所述逻辑块的指示信息所指示的所述逻辑块中,并且所述多个写数据请求携带的目标数据的长度的总和等于所述逻辑块的容量。
[0131] 写入模块802用于将所述每个写数据请求携带的目标数据写入所述指示信息所指示的所述逻辑块中。
[0132] 可选的,所述逻辑块包括一个或多个块,并且所述逻辑块包含的每个块位于不同的通道。
[0133] 可选的,装置800还包括分配模块803,用于确定所述逻辑块是处于待写入状态的逻辑块,所述处于待写入状态的逻辑块是指已经被分配用于存储数据的逻辑块;为所述处于待写入状态的逻辑块分配所述指示信息。
[0134] 可选的,所述逻辑块的指示信息包括所述逻辑块的标识。每个写数据请求包括所述逻辑块的标识,所述写入模块具体用于根据所述逻辑块的标识将所述每个写数据请求中的目标数据写入所述标识对应的所述逻辑块中。
[0135] 可选的,所述逻辑块的指示信息包括所述逻辑块的逻辑地址区间。每个写数据请求包括所述逻辑地址区间的子区间。所述写入模块具体用于根据所述每个写数据请求中的所述逻辑地址区间的子区间以及所述逻辑块的逻辑地址区间确定所述每个写数据请求中的目标数据对应的所述逻辑块;将所述每个写数据请求中的目标数据写入所述对应的逻辑块中。
[0136] 可选的,在所述将所述目标数据写入所述指示信息所指示的所述逻辑块中之后,所述分配模块803还用于回收所述为所述逻辑块分配的指示信息。