存储系统以及控制非易失性存储器的控制方法与流程

文档序号:16667104发布日期:2019-01-18 23:20阅读:141来源:国知局
存储系统以及控制非易失性存储器的控制方法与流程

本发明的实施方式涉及存储系统以及对非易失性存储器进行控制的控制方法。



背景技术:

近年来,作为各种信息处理装置的主储存器,具备非易失性存储器的存储系统被广泛利用。作为这样的存储系统之一,已知基于nand闪速(flash)技术的固态驱动器(ssd)。

在如ssd的存储系统中,用于将逻辑地址变换为非易失性存储器的物理地址的地址变换使用地址变换表来执行变换。

在通常的地址变换表中,对与各个逻辑地址对应的各个物理地址进行管理。

但是,在通常的ssd中,与一个逻辑地址对应的数据是固定长度的,无法向任意的逻辑地址写入任意长度的数据。



技术实现要素:

本发明提供一种能够对任意的逻辑地址写入任意长度的数据的存储系统以及对非易失性存储器进行控制的控制方法。

根据实施方式,能够与主机连接的存储系统具备非易失性存储器和与所述非易失性存储器电连接、并构成为控制所述非易失性存储器的控制器。所述控制器对包含与多个逻辑地址对应的多个条目的逻辑物理地址变换表进行管理。所述控制器从所述主机接收指定第1数据应写入的第1逻辑地址和所述第1数据的长度的写入请求。所述控制器将所述第1数据写入所述非易失性存储器,将表示被写入了所述第1数据的所述非易失性存储器上的物理存储位置的第1物理地址和所述第1数据的所述长度储存于与所述第1逻辑地址对应的所述逻辑物理地址变换表的条目。所述控制器在从所述主机接收到指定所述第1逻辑地址的读出请求的情况下,从所述逻辑物理地址变换表取得所述第1物理地址和所述长度,基于所述取得的第1物理地址和所述取得的长度,从所述非易失性存储器读出所述第1数据。

附图说明

图1是表示实施方式涉及的存储系统的构成例的框图。

图2是表示由该实施方式的存储系统管理的可变长度查找表的构成例的图。

图3是表示固定长度查找表的构成例的图。

图4是表示应用于该实施方式的存储系统的可变长度数据用的写入请求的例子的图。

图5是表示应用于该实施方式的存储系统的可变长度数据用的读出请求的例子的图。

图6是表示由该实施方式的存储系统执行的写入工作的步骤的时序(sequence)图。

图7是表示由该实施方式的存储系统管理的空闲块池、活性块池、写入目的地块的关系的图。

图8是表示由该实施方式的存储系统管理的可变长度查找表的其他构成例的图。

图9是表示由该实施方式的存储系统执行的读出工作的步骤的时序图。

图10是表示由该实施方式的存储系统管理的可变长度查找表的又一构成例的图。

图11是表示由该实施方式的存储系统管理的分级查找表(多层查找表)的构成例的图。

图12是表示该实施方式的存储系统的硬件构成例的框图。

图13是表示该实施方式的存储系统内的nand接口和多个nand型闪速存储芯片的关系的框图。

图14是表示在该实施方式的存储系统中使用的逻辑块(超级块)的构成例的图。

图15是用于对通过将该实施方式的存储系统的非易失性存储器在逻辑上进行分割来得到的多个区域进行说明的图。

图16是表示该实施方式的存储系统内的多个区域、与这些区域对应的逻辑地址空间以及与这些区域对应的查找表的关系的框图。

具体实施方式

以下,参照附图对实施方式进行说明。

首先,参照图1,对包含实施方式涉及的存储系统的信息处理系统1的构成进行说明。

该存储系统是构成为在非易失性存储器写入数据、从非易失性存储器读入数据的半导体储存器件。该存储系统例如作为具备nand型闪速存储器的固态驱动器(ssd)3来实现。

信息处理系统1包括主机(主装置)2和ssd3。主机2是对ssd3进行访问的信息处理装置(计算装置)。主机2既可以是执行各种用户的应用程序的服务器计算机,也可以是个人计算机。ssd3可以被用作作为主机2发挥功能的信息处理装置的主储存器。ssd3既可以内置于该信息处理装置,也可以经由线缆或者网络与该信息处理装置连接。

作为用于将主机2和ssd3相互连接的接口,可以使用scsi、serialattachedscsi(sas)、ata、serialata(sata)、pciexpress(pcie)、ethernet(注册商标)、fibrechannel、nvmexpress(nvme)(注册商标)等。

主机2包括可变长度数据读写部101。可变长度数据读写部101也可以作为在主机2(例如服务器计算机)上工作的软件来实现。例如,在将ssd3用于文件的储存或者块设备(blockdevice)的数据的储存的情况下,可变长度数据读写部101既可以作为由主机2执行的操作系统的一部分来实现,也可以作为由主机2执行的设备驱动的一部分来实现。或者,可变长度数据读写部101也可以作为特定的应用程序的一部分来实现。

ssd3具备控制器4以及非易失性存储器(nand型闪速存储器)5。控制器4是对nand型闪速存储器5进行控制的存储控制器,例如也可以由被称为系统lsi(大规模集成电路)的电路(也称为“控制电路”或者“处理电路”)来实现。

进一步,ssd3也具备随机访问存储器(ram)6。ram6既可以是与控制器4连接的dram,也可以是内置于控制器4的sram。

控制器4具备主机请求处理部21和可变长度查找表(lut)管理部22。主机请求处理部21以及可变长度lut管理部22分别可以由通过控制器4内的cpu执行的固件来实现。或者,主机请求处理部21以及可变长度lut管理部22各自的全部或者一部分也可以由控制器4内的硬件来实现。

nand型闪速存储器5的各个区域(存储区域)大致区分为数据区域5a和管理区域5b。数据区域5a是用于储存来自主机2的数据(用户数据的区域。管理区域5b是用于储存用于对ssd3的工作进行管理的管理信息的区域。管理信息的例子包括可变长度查找表(lut)32。

该可变长度lut32是包括与多个逻辑地址对应的多个条目(entry)的逻辑物理地址变换表,用于对多个逻辑地址的各个逻辑地址与nand型闪速存储器5上的各个物理地址之间的对应关系进行管理。该可变长度lut32储存在nand型闪速存储器5的管理区域5b内。为了高速地执行对可变长度lut32的读/写访问,可变长度lut32的全部或者一部分的复制也可以作为高速缓存(逻辑物理地址变换表高速缓存)放置于ram6。ram6的区域的其他一部分也可以作为用于将写数据暂时进行储存的写缓存31来被利用。

为了对作为在写入顺序上有限制的非易失存储器的nand型闪速存储器5高效地进行写入,需要动态地改变由主机2指定的逻辑存储位置(逻辑地址)与nand型闪速存储器5上的物理存储位置(物理地址)之间的对应关系。因此,一般而言,各个逻辑地址与各个物理地址之间的对应关系由被称为查找表(逻辑物理地址变换表)的表来管理。在数据写入时,查找表被更新,写入了数据的nand型闪速存储器5上的物理存储位置(物理地址)与由主机指定的逻辑地址建立关联。在数据读出时,参照查找表,由此从查找表取得储存着应该被读取的数据的nand型闪速存储器5上的物理存储位置(物理地址)。作为逻辑地址,例如可使用逻辑块地址(lba,logicalblockaddress)。

通常的查找表以固定长度单位(例如4kb单位)对各个lba与各个物理地址的对应关系进行管理。这是因为,现有的ssd提供了由来于硬盘的固定长度的扇区的lba来作为接口。因此,在现有的ssd中,能够向与一个lba对应的逻辑存储位置写入的数据被限定为固定长度数据。所谓固定长度数据,意味着与一个逻辑地址对应的数据的长度为固定的数据。例如,在一个逻辑地址(例如一个lba)表示固定长度(例如4k字节)的逻辑扇区的情况下,能够向与该lba对应的逻辑存储位置写入的数据被限定为具有该固定尺寸(例如4k字节)的固定长度数据。在用户要向一个逻辑地址记录固定尺寸的数据、也即是固定长度数据的情况下,用该接口是足够的。

但是,在处理可变长度数据的系统中,主机需要进行将可变长度数据变换为固定长度数据的处理、对表示哪个可变长度数据被记录在哪个固定长度数据内的哪个位置的元数据(metadata)进行管理的处理等。

所谓可变长度数据,意味着与一个逻辑地址对应的数据的长度可变的数据。

例如,在keyvaluestore(键值存储)系统中,value的长度是可变的。另外,在主机压缩数据、将被压缩的数据储存于ssd的情况下,被压缩了的数据的长度根据该压缩率而成为可变长度。在ssd具有压缩功能的情况下,同样地,被压缩了的数据的长度也成为可变长度。

因此,在这些系统中,主机需要进行(1)将大的可变长度数据分割为多个固定长度数据(多个的块数据)的处理、(2)通过对多个小的可变长度数据进行汇集或者通过对小的可变长度数据附加虚设数据来将小的可变长度数据变换为固定长度数据的处理、(3)另外地管理表示将哪个可变长度数据记录在了哪个固定长度数据的哪个位置的元数据的处理这样的繁杂的处理。

另外,在通常的文件系统中,由于文件的尺寸按各文件而不同,因此,需要执行上述繁杂的处理。

由于这些处理,会发生(1)主机的cpu的处理时间增加、(2)由元数据的读写引起的存储器访问时间增加、(3)由元数据/虚设数据的写入引起的存储器资源的消耗量增加、(4)由存储器资源的消耗量增加引起的写应用的增加、(5)由写应用的增加引起的ssd的寿命减少这样的非效率。

在本实施方式中,ssd3能够将从nand型闪速存储器5上的哪个物理存储位置储存了何种长度的数据储存在可变长度lut32,由此,能够向任意的逻辑地址储存任意长度的数据。换言之,可变长度lut32能够向与某逻辑地址对应的ssd3内的逻辑存储位置分配具有与由主机2指定的任意的数据长度对应的尺寸(size)的物理存储区域。由此,即使在写入比固定长度数据小的可变长度数据的情况下,不需要执行通过对该可变长度数据附加虚设数据来将该可变长度数据变换为固定长度数据的处理,就能够将该可变长度数据写入任意的逻辑地址。因此,在nand型闪速存储器5中,能够仅分配数据的储存所需的物理存储区域。

一般而言,如果实现了将可变长度数据以这样的形式进行储存的存储系统系统,则在与某lba对应的以前的数据(旧的数据)和与该lba对应的新数据(更新数据)的尺寸不同的情况下,会产生如下问题:(1)在储存着以前的数据的区域无法存下新数据;(2)在储存着以前的数据的区域的一部产生空闲。因此,在通常的文件系统中,多会通过前述的繁杂的处理将写数据分割为多个固定长度数据,将这些多个固定长度数据储存到存储系统。

但是,在nand型闪速存储器5中,数据只能从nand型闪速存储器5内的块的开头开始写入。因此,在数据的更新时,会进行如下控制:将旧的数据遗弃在原来的物理存储位置而将新数据写入其他的物理存储位置,进一步,根据需要通过无用存储单元收集(garbagecollection)来消去旧的数据。因此,在向nand型闪速存储器5写入数据的ssd中,(1)无法在储存着以前的数据的区域存下新数据、(2)会在储存着以前的数据的区域的一部产生空闲这些的上述问题原本就不会产生。这可以说是使用在写入顺序上有限制的非易失存储器来管理可变长度数据的系统所独有的优点。

在图1的信息处理系统1中,主机2的可变长度数据读写部101向ssd3请求可变长度数据的写入或者读出。如上所述,可变长度数据意味着与一个逻辑地址对应的数据的长度可变的数据。可变长度数据用的写入请求指定数据(写数据)应写入的逻辑地址和该写数据的长度(也即是,应写入该逻辑地址的数据的长度)。可变长度数据用的读出请求仅指定应读出的数据的逻辑地址即可。

在ssd3中,控制器4的主机请求处理部21从主机2接收写入请求。主机请求处理部21将从主机2接收到的写数据(可变长度数据dx)写入nand型闪速存储器5。

更详细而言,主机请求处理部21向从nand型闪速存储器5的空闲块群分配的当前的写入目的地块写入写数据(可变长度数据dx)。

并且,主机请求处理部21与可变长度lut管理部22共同地将表示写入了写数据(可变长度数据dx)的nand型闪速存储器5上的物理存储位置的物理地址、和由写入请求指定的数据长度(写数据的长度)储存到与由写入请求指定的逻辑地址对应的可变长度lut32内的条目中。

在从主机2接收到指定该逻辑地址的读出请求的情况下,主机请求处理部21从可变长度lut32取得表示储存着可变长度数据dx的nand型闪速存储器5上的物理存储位置的物理地址、和可变长度数据dx的数据长度。储存着可变长度数据dx的物理存储位置是储存有可变长度数据dx的nand型闪速存储器5内的区域的开始位置。主机请求处理部21根据所取得的物理地址和所取得的数据长度,从nand型闪速存储器5读出可变长度数据dx,并将读出的可变长度数据dx返回到主机2。

图2表示可变长度lut32的构成例。

可变长度lut32具有逻辑地址(例如,在此为lba0-lbamax)的个数相应的多个lut条目。多个lut条目可以与多个lba分别关联,各lut条目可以包括用于管理储存了数据的nand型闪速存储器5上的位置(物理存储位置)的位置字段和用于管理该数据的长度的长度字段。

nand型闪速存储器5上的位置也可以由表示块编号和块内的位置的物理地址(pba)表示。块编号表示写入了该数据的nand型闪速存储器5内的块。块内的位置表示写入了该数据的该块内的位置(块内的偏置位置)。

块内的位置也可以由从该块的开头到该块内的该位置为止的字节数来表示。由此,能够以字节为单位的小的粒度来管理块内的位置,其结果,能够向nand型闪速存储器5密集地配置数据。当然,为了减少需要储存到lut条目的数据量,也可以例如256字节单位这样的粒度来管理块内的位置。

或者,nand型闪速存储器5上的位置也可以由表示块编号、块内的页(page)编号、页内的位置的物理地址(pba)来表示。块内的页编号表示写入了该数据的最初的页。页内的位置表示写入了该数据的该页内的位置(页内的偏置位置)。

页内的位置也可以由从该页的开头到该页内的该位置为止的字节数来表示。由此,能够向nand型闪速存储器5密集地配置数据。当然,为了减少需要储存到lut条目的数据量,也可以以例如256字节单位这样的粒度来管理页内的位置。

在与未写入数据的逻辑地址对应的lut条目中,也可以存储预先确定的常数(null)来作为位置。

由写入请求指定的数据的长度既可以由字节数来表示,也可以以256字节单位这样的单位来表示。

如图2所示,在与lba9对应的可变长度数据d11被写入到从块blk1的开头开始的区域的情况下,在与lba9对应的lut条目储存表示块blk1的开头位置x1的物理地址(pba)和可变长度数据d11的长度(在此,长度表示为“5”)。

在与lba0对应的可变长度数据d12被写入到了从块blk1的位置x2开始的区域的情况下,在与lba0对应的lut条目储存表示位置x2的物理地址(pba)和可变长度数据d12的长度(在此,长度表示为“7”)。位置x2也可以是通过在位置x1加上可变长度数据d11的长度而得到的块blk1内的位置。

在与lba12对应的可变长度数据d13被写入到了从块blk1的位置x3开始的区域的情况下,在与lba12对应的lut条目储存表示位置x3的物理地址和可变长度数据d13的长度(在此,长度表示为“2”)。位置x3也可以是通过在位置x2加上可变长度数据d12的长度而得到的块blk1内的位置。

在与lba3对应的可变长度数据d21被写入到了从块blk2的开头开始的区域的情况下,在与lba3对应的lut条目储存表示块blk2的开头位置y1的物理地址和可变长度数据d21的长度(在此,长度表示为“3”)。

在与lba7对应的可变长度数据d22被写入到了从块blk2的位置y2开始的区域的情况下,在与lba7对应的lut条目储存表示块blk2的位置y2的物理地址和可变长度数据d22的长度(在此,长度表示为“9”)。

可变长度lut32也可以由包括分级化的多个表的多级地址变换表(分级lut)来实现。在该情况下,不是在nand型闪速存储器5上或者ram6上确保需要储存可变长度lut32整体的区域,而能够在nand型闪速存储器5上或者ram6上仅确保对存储与实际储存着数据的逻辑地址范围对应的可变长度lut32内的各个表数据部所需的区域。由此,不需要分配用于储存与未储存数据的逻辑地址范围对应的地址变换信息的物理资源。由此,在如keyvaluestore(键值存储)这样的可变长度数据只是疏松地配置的系统中,使用分级lut的优点特别大。

一般而言,多会在可变长度数据的基础上也希望进行固定长度数据的读写。因此,也可以不以一个lut来管理ssd3整体,而设置多个lut,使固定长度lut和可变长度lut混合存在。ssd3也可以具有多命名空间控制功能。为了使将一个存储系统装置好像是多个驱动器那样进行对待处理成为可能,多命名空间控制功能能够向ssd3分配多个逻辑地址空间(lba空间)。多个命名空间能够好像是彼此独立的多个ssd(多个假想ssd)那样发挥功能。在主机2向ssd3请求生成某命名空间时,主机2也可以指定应生成的命名空间的类型(用于处理固定长度数据的类型#1-命名空间、或者用于处理可变长度数据的类型#2-命名空间)。

在ssd3中,可管理与多个命名空间对应的多个lut。用于处理可变长度数据的各类型#2-命名空间所用的lut可由可变长度lut32来实现。用于处理固定长度数据的各类型#1-命名空间所用的lut可由图3所示的固定长度lut33来实现。

在类型#1-命名空间(namespace)中,能在与一个lba对应的逻辑存储位置储存的数据长度是固定的。在图3,设想了能在与一个lba对应的逻辑存储位置储存的数据长度是4k字节(4kb)的情况。

如图3所示,固定长度lut33具有与逻辑地址(例如,在此为lba0-lbamax)的个数相应的多个lut条目。多个lut条目分别与多个lba相关联,在各lut条目中储存有储存了数据的nand型闪速存储器5上的位置(物理地址(pba))。

用固定长度lut33管理的nand型闪速存储器5上的位置(物理存储位置)分别是匹配于4k字节分界的位置。

在lba9对应的4kb数据被写入到了从块blk11的开头开始的4kb区域的情况下,在与lba9对应的lut条目储存有表示块blk11的开头位置x11的物理地址。

在与lba0对应的4kb数据被写入到了从块blk11的位置x12开始的4kb区域的情况下,在与lba0对应的lut条目储存有表示位置x12的物理地址。

在与lba12对应的4kb数据被写入到了从块blk11的位置x13开始的4kb区域的情况下,在与lba12对应的lut条目储存有表示位置x13的物理地址。

在与lba3对应的4kb数据被写入到了从块blk12的开头开始的4kb区域的情况下,在与lba3对应的lut条目储存有表示块blk12的开头位置y11的物理地址。

在与lba7对应的4kb数据被写入到了从块blk12的位置y12开始的4kb区域的情况下,在与lba7对应的lut条目储存有表示块blk12的位置y12的物理地址。

图4表示通常的写入请求(通常的写命令)和可变长度数据用的写入请求(可变长度数据用的写命令)。

通常的写命令请求ssd3进行每逻辑地址的数据的长度是固定的固定长度数据的写入。

如图4的上部所示,通常的写命令包括指定开始lba的参数、和指定逻辑扇区的数量的参数。开始lba是应进行写入的最初的逻辑扇区的地址。逻辑扇区的数量表示应进行写入的逻辑扇区的数量、也即是与写数据对应的lba的数量。主机2能够送到ssd3的写数据的尺寸限定为固定长度(例如4kb)的倍数。

可变长度数据用的写命令请求ssd3进行每逻辑地址的数据的长度可变的可变长度数据的写入。

如图4的下部所示,可变长度数据用的写命令包括指定逻辑地址的参数和指定数据长度的参数。逻辑地址是数据(可变长度数据)应写入的一个逻辑存储位置(可变长度逻辑存储位置)的地址。数据长度表示应写入到一个逻辑存储位置的数据的长度。该数据长度能够以比固定长度数据的长度(例如4kb)小的单位、例如字节单位或者如256字节单位这样的单位来指定。

图5表示通常的读出请求(通常的读命令)和可变长度数据用的读出请求(可变长度数据用的读命令)。

通常的读命令请求ssd3进行每逻辑地址的数据的长度固定的固定长度数据的读出。

如图5的上部所示,通常的读命令包括指定开始lba的参数和指定逻辑扇区的数量的参数。开始lba是应被读取的最初的逻辑扇区的地址。逻辑扇区的数量表示应被读取的逻辑扇区的数量、也即是与应被读取的数据对应的lba的数量。主机2能够从ssd3读取的数据的尺寸限于固定长度(例如4kb)的倍数。

可变长度数据用的读命令请求ssd3进行每逻辑地址的数据的长度可变的可变长度数据的读出。

如图5的下部所示,可变长度数据用的读命令包括指定逻辑地址(例如lba)的参数。逻辑地址(例如lba)是应读取数据(可变长度数据)的一个逻辑存储位置(可变长度逻辑存储位置)的地址。储存在该一个逻辑存储位置的可变长度数据(该数据的长度由可变长度lut32管理)被从nand型闪速存储器5中读出。

作为可变长度数据用的写入请求以及可变长度数据用的读出请求,也可以利用对由nvme、scsi等现有的协议规定的写命令以及读命令进行了扩展的新的扩展写命令以及新的扩展读命令。或者,也可以为了可变长度数据用的写入请求以及可变长度数据用的读出请求而定义独自的协议。

图6的时序图表示写入工作的步骤。

在主机2希望进行可变长度数据的写入的情况下,可变长度数据读写部101向ssd3发送应写入写数据(可变长度数据)的逻辑地址和指定该写数据的长度(数据长度)的可变长度数据用的写入请求。该写入请求既可以还包括写数据,或者也可以代替写数据而还仅包括表示该写数据所存在的主机存储器(主机2内的存储器)上的位置的参数。

在ssd3的主机请求处理部21从主机2接收到该可变长度数据用的写入请求时,主机请求处理部21向写缓存31写入逻辑地址、数据长度以及写数据(步骤s11)。并且,主机请求处理部21将包括表示对该写入请求的处理是否已正常进行了的返回值的命令完成的响应返回给主机2。

然后,在适当的定时(例如写缓存31因应写入的数据而满了时、在接收到写入请求之后经过了一定时间时、或者从主机2接收到请求nand型闪速存储器5将未写入的数据写入到nand型闪速存储器5的闪速命令时等),主机请求处理部21将写缓存31的写数据写入到nand型闪速存储器5的数据区域5a(步骤s12)。在步骤s12中,写数据被写入到从当前的写入目的地块内的接下来的可利用物理存储位置开始的区域。

当前的写入目的地块内的接下来的可利用物理存储位置也可以由可变长度lut管理部22管理。可变长度lut管理部22决定应写入写数据的物理存储位置,以使得从当前的写入目的地块的开头开始依次配置数据。在写数据的长度大于当前的写入目的地块的剩余的可利用区域的容量的情况下,从nand型闪速存储器5内的空闲块群选择一个空闲块,该所选择的空闲块被分配作为新的写入目的地块。在步骤s12中,主机请求处理部21也可以向可变长度lut管理部22通知由写入请求指定的逻辑地址以及数据长度,从可变长度lut管理部22取得应写入写数据的nand型闪速存储器5上的物理存储位置。

接着,执行向lut条目储存表示写入了写数据的nand型闪速存储器5上的物理存储位置的物理地址和表示写数据的长度的处理的(步骤s13)。该处理也可以由可变长度lut管理部22执行。

此外,也可以代替在紧接着步骤s11的处理之后将命令完成的响应返回给主机2,而在紧接着步骤s13的处理之后将命令完成的响应返回给主机2。

另外,在希望无浪费地使用写入目的地块的情况下、希望应对比一个块的容量大的写数据(可变长度数据)的写入的情况下,也可以在可变长度lut32的一个lut条目储存多个位置和多个长度,以使得能够跨多个块写入写数据(可变长度数据)。

另外,在向已写入了可变长度数据的逻辑地址重写新的可变长度数据的情况下,以前的可变长度数据被无效化。若空闲块的数量低到了某个数以下,则可对无效化数据的量多的几个块实施无用存储单元收集(gc)。在gc中,仅无效化数据的量多的这些块(gc源块)内的有效数据被复制到gc目标块(空闲块),由此,这些gc源块成为空闲块。

图7表示空闲块池(freeblockpool)、活性块池(activeblockpool)以及写入目的地块的关系。

图7表示由ssd3控制器4管理的活性块池51、空闲块池52以及写入目的地块的关系。

各块的状态大致分为储存着有效数据的活性块和未储存有效数据的空闲块。作为活性块的各块由被称为活性块池51的列表管理。另一方面,作为空闲块的各块由被称为空闲块池52的列表管理。

在本实施方式中,控制器4将从空闲块池52选择的一个块(空闲块)分配为应写入从主机2接收到的写数据的写入目的地块。在该情况下,控制器4首先执行对所选择的块(空闲块)的消去工作,由此,将该块设为能够写入的消去状态。在当前的写入目的地块整体因来自主机2的写数据而满了时,控制器4将当前的写入目的地块移动到活性块池51,从空闲块池52分配新的一个块(空闲块)作为新的写入目的地块。

当活性块池51内的某块内的全部有效数据通过数据更新、卸载(unmap)、无用存储单元收集等被无效化时,控制器4将该块移动到空闲块池52。

图8表示可变长度lut32的其他构成例。

该可变长度lut32构成为能够在各lut条目储存多个位置和多个长度。在图8中例示了如下的可变长度lut32的构成:为了使得能够跨两个块而写入某数据(可变长度数据),能够在各lut条目储存两个位置和两个长度。此外,储存在各lut条目的位置和长度的对数不限定于2,也可以是3以上。

在与lba9对应的可变长度数据d100被写入到了从块blk1的开头开始的区域的情况下,在与lba9对应的lut条目储存有表示块blk1的开头位置x1的物理地址和可变长度数据d100的长度(在此,长度表示为“5”)。

在与lba0对应的可变长度数据d101的长度大于块blk1的剩余区域的尺寸的情况下,仅可变长度数据d101的一部分(可变长度数据d101a)被写入到从块blk1的位置x2开始的区域。在该情况下,在与lba0对应的lut条目储存有表示位置x2的物理地址和可变长度数据d101a的长度(在此,长度表示为“12”)。可变长度数据d101的剩余部分(可变长度数据d101b)被写入到其他块blk2。在可变长度数据d101b被写入到了从块blk2的开头开始的区域的情况下,在与lba0对应的lut条目还储存有表示块blk2的开头位置y1的物理地址和可变长度数据d101b的长度(在此,长度表示为“3”)。

即,主机请求处理部21首先对由写入请求指定的可变长度数据d101的长度和块blk1的剩余区域的尺寸进行比较。块blk1是当前的写入目的地块。若可变长度数据d101的长度超过块blk1的剩余区域的尺寸,主机请求处理部21将可变长度数据d101分割为可变长度数据d101a和可变长度数据d101b。可变长度数据d101a是具有与块blk1的剩余区域的尺寸对应的数据长度的数据。可变长度数据d101b是可变长度数据d101内的剩余数据。主机请求处理部21将可变长度数据d101a写入到块blk1,并且,将可变长度数据d101b写入到分配为新的写入目的地块的块blk2。并且,主机请求处理部21对可变长度lut32进行更新,将表示写入了可变长度数据d101a的位置(物理存储位置)x2的物理地址、可变长度数据d101a的长度、表示写入了可变长度数据d101a的位置(物理存储位置)y1的物理地址、可变长度数据d101b的长度储存到与lba0对应的lut条目。

若接收到指定lba0的读出请求,则主机请求处理部21从可变长度lut32取得表示储存着可变长度数据d101a的位置x1的物理地址、可变长度数据d101a的长度、表示储存着可变长度数据d101b的位置y1的物理地址、可变长度数据d101b的长度。并且,主机请求处理部21从块blk1以及块blk2分别读出可变长度数据d101a以及可变长度数据d101b,通过将可变长度数据d101a以及可变长度数据d101b结合从而再次生成数据d101,将该再次生成的数据d101返回到主机2。

图9是时序图表示读出工作的步骤。

在主机2希望进行可变长度数据的读出的情况下,可变长度数据读写部101将指定与该可变长度数据对应的逻辑地址的读出请求发送给ssd3。

当ssd3的主机请求处理部21从主机2接收到该可变长度数据用的读出请求时,主机请求处理部21参照可变长度lut32,从与由读出请求指定的逻辑地址对应的lut条目,取得表示nand型闪速存储器5上的位置(物理存储位置)的物理地址和该可变长度数据的长度(步骤s21)。在步骤s21中,主机请求处理部21也可以将由读出请求指定的逻辑地址送到可变长度lut管理部22,由此,向可变长度lut管理部22询问nand型闪速存储器5上的位置和应该读取的数据长度。

主机请求处理部21基于所取得的物理地址和所取得的数据长度,从nand型闪速存储器5读出数据(步骤s22)。在步骤s22中,主机请求处理部21从nand型闪速存储器5读出由所取得的物理地址和所取得的数据长度指定的nand型闪速存储器5上的区域中所储存的数据。

并且,主机请求处理部21将所读出的数据、数据长度、命令完成的响应返回到主机2。

图10表示可变长度查找表32的又一其他的构成例。

在图10的可变长度lut32中,作为表示ssd3的逻辑存储位置的逻辑地址,可利用keyvaluestore(键值存储)的键(key)。从主机2发送到ssd3的写入请求/读出请求所包含的逻辑地址表示某键。

可变长度lut32的各lut条目包括用于管理由主机2指定的键的键字段、用于管理储存了与该键对应的可变长度数据(仅值或者键值对)的nand型闪速存储器5上的位置(物理存储位置)的位置字段、用于管理该可变长度数据的长度的长度字段。

在与键“ddd”对应的可变长度数据d11被写入到了从块blk1的开头开始的区域的情况下,在某lut条目中储存有键“ddd”、表示块blk1的开头位置x1的物理地址、可变长度数据d11的长度(在此,长度表示为了“5”)。

在与键“aaa”对应的可变长度数据d12被写入到了从块blk1的位置x2开始的区域的情况下,在某lut条目中储存有键“aaa”、表示位置x2的物理地址、可变长度数据d12的长度(在此,长度表示为了“7”)。

在与键“xxx”对应的可变长度数据d13被写入到了从块blk1的位置x3开始的区域的情况下,在某lut条目储存有键“xxx”、表示位置x3的物理地址、可变长度数据d13的长度(在此,长度表示为“2”)。

在与键“bbb”对应的可变长度数据d21被写入到了从块blk2的开头开始的区域的情况下,在某lut条目储存有键“bbb”、表示块blk2的开头位置y1的物理地址、可变长度数据d21的长度(在此,长度表示为“3”)。

在与键“ccc”对应的可变长度数据d22被写入到了从块blk2的位置y2开始的区域的情况下,在某lut条目储存有键“ccc”、表示块blk2的位置y2的物理地址、可变长度数据d22的长度(在此,长度表示为“9”)。

在利用图10的可变长度lut32的情形中,基于读出请求或者写入请求所包含的键,检索与该键对应的lut条目。并且,参照或更新所检索到的lut条目。在数据写入时,若不存在与写入请求所包含的键对应的lut条目,则表示写入了与该键对应的可变长度数据的nand型闪速存储器5的物理存储位置的物理地址以及该可变长度数据的长度被储存到未使用的lut条目。

图11表示分级查找表(多层查找表)的构成例。

图11的分级查找表包括分级化的多个表。这些多个表被使用于多等级的逻辑物理地址变换。分级查找表所包含的表的数量与用于逻辑物理地址变换的等级(stage)的数量对应。分级查找表所包含的表的数量既可以为两个(地址变换的等级的数量为2),也可以为三个(地址变换的等级的数量为3),还可以为四个以上(地址变换的等级的数量为4以上)。

例如,分级查找表也可以为通过3等级的地址变换将逻辑地址变换为物理地址的3级地址变换表。在该情况下,分级查找表也可以包含由3等级的地址变换分别使用的分级化的3个表、也就是级别1表(l1表)73、级别2表(l2表)72以及级别3表(l3表)71。

l3表71是包含与逻辑地址分别对应的多个lut条目的地址变换表。该l3表71包括多个数据部(数据部#0、数据部#1、…数据部#128、…)。换言之,l3表71被分割为这些多个数据部(数据部#0、数据部#1、…数据部#128、…)。这些数据部具有相同的固定的尺寸。

l3表71的一个数据部(表数据部)可以例如包括128个lut条目(也即是,128个物理地址以及128个数据长度)。也即是,在l3表71中,由一个lut条目覆盖(cover)一个lba。

储存有l3表71的各个数据部(数据部#0、数据部#1、…数据部#128、…)的nand型闪速存储器5上的位置由l2表72个别地进行管理。

l2表72也包含各自具有与l3表71的各数据部相同的固定尺寸的多个数据部(数据部#0、数据部#1、…数据部#128、…)。换言之,l2表72被分割为这些多个数据部(数据部#0、数据部#1、…数据部#128、…)。

l2表72的这些数据部各自包含多个lut条目、例如128个lut条目。各lut条目表示储存有l3表71内的某一个数据部的nand型闪速存储器5上的位置。也即是,在l2表72中,由一个lut条目覆盖128个lba。

储存有l2表72的各个数据部(数据部#0、数据部#1、…数据部#128、…)的nand存储器5上的位置由l1表7个别地进行管理。

l1表73也包含各自具有与l3表71的各数据部相同的固定尺寸的多个数据部(数据部#0、数据部#1、…)。换言之,l1表73被分割为这些多个数据部(数据部#0、数据部#1、…)。

l1表73的这些数据部各自包含多个lut条目、例如128个lut条目。各lut条目表示储存有l2表72内的某一个数据部的nand型闪速存储器5上的位置。也即是,在l1表73中,由一个lut条目覆盖1282个lba。

储存有l1表73的各个数据部(数据部#0、数据部#1、…)的nand存储器5上的位置由被称为路由表74的系统管理信息进行管理。路由表74例如也可以在sd3接受到电源供给时从nand型闪速存储器5被加载到ram6,也可以在以后总是维持在ram6上。

路由表7也可以包括多个条目。各条目表示储存有l1表73内的某一个数据部的nand型闪速存储器5上的位置。

变换对象的逻辑地址被分割为4个子字段、也即是子字段200a、子字段200b、子字段200c、子字段200d。

接着,对使用图11的分级查找表执行的逻辑物理地址变换处理的概要进行说明。在此,为了使说明简单,设想各表从nand型闪速存储器5取得的情况。

<最初的等级的逻辑物理地址变换>

最初,使用变换对象的逻辑地址内的子字段200a来参照路由表74,由此,得到l1表73内的特定的数据部的物理地址(nand型闪速存储器5上的位置)。基于该物理地址,l3表73的特定的数据部被从nand型闪速存储器5进行读取。

并且,使用子字段200b,参照l1表73内的该特定的数据部,由此,从l1表73内的该特定的数据部选择一个条目。在该所选择的条目中储存有l2表72内的一个数据部的物理地址(nand型闪速存储器5上的位置)。基于该物理地址,l2表72的该数据部被从nand型闪速存储器5读取。

<接着的等级的逻辑物理地址变换>

接着,使用变换对象的逻辑地址内的子字段200c,参照l2表72的该数据部,由此从l2表72内的该数据部选择一个条目。在该所选择的条目存储有l3表71内的一个数据部的物理地址(nand型闪速存储器5上的位置)。基于该物理地址,l3表71的该数据部被从nand型闪速存储器5读取。

<最后的等级的地址变换>

接着,使用子字段200d,参照l3表71内的该数据部,由此,从l3表71内的该数据部选择一个条目。在该所选择的条目储存有表示储存有由读出请求内的逻辑地址指定的可变长度数据的nand型闪速存储器5上的位置的物理地址、该可变长度数据的长度。基于该物理地址和长度,该可变长度数据被从nand型闪速存储器5读出。

该分级查找表的构成能够减少用于存储该分级查找表的存储区域的尺寸。这是因为,在nand型闪速存储器5或者ram6上仅确保与实际储存着物理地址和长度的数据部各自对应的存储区域即可。

图12表示ssd3的硬件构成例。

ssd3具备控制器4a以及nand型闪速存储器5。ssd3也可以具备随机访问存储器、例如dram6a。

nand型闪速存储器5包括存储单元阵列,该存储单元阵列包含配置为矩阵状的多个存储器单元。nand型闪速存储器5既可以是二维构造的nand型闪速存储器,也可以是三维构造的nand型闪速存储器。

nand型闪速存储器5的存储单元阵列包含多个块blk0~blkm-1。块blk0~blkm-1各自由大量的页(在此为页p0~pn-1)组成。块blk0~blkm-1作为消去单位发挥功能。块有时也被称为“物理块”或者“块”。页p0~pn-1各自包含与同一字线连接的多个存储器单元。页p0~pn-1是数据写入工作以及数据读入工作的单位。

控制器4a是控制nand型闪速存储器5的lsi。控制器4a经由如toggle、opennandflashinterface(onfi)的nand接口(nandi/f)13,与nand型闪速存储器5电连接。nand接口13作为控制nand型闪速存储器5的nand控制电路发挥功能。

如图13所示,nand型闪速存储器5包含多个nand型闪速存储芯片(裸片)。各个nand型闪速存储芯片能够独立工作。因此,nand型闪速存储芯片作为能够并行工作的单位发挥功能。在图13中例示了如下的情况:与nand接口13连接有16个通道ch.1~ch.16,与16个通道ch.1~ch.16各自连接有两个nand型闪速存储芯片。在该情况下,与通道ch.1~ch.16连接的16个nand型闪速存储芯片#1~#16也可以组成为组(bank)#0,另外,与通道ch.1~ch.16连接的其余的16个nand型闪速存储芯片#17~#32也可以组成为组#1。组(bank)作为用于通过组交错使多个存储模块并行工作的单位发挥功能。在图13的构成例中,通过16通道和使用了两个组(bank)的组(bank)交错,能够使最大32个nand型闪速存储芯片并行工作。

控制器4a将多个块(block)分组化为一个大的单位(作为“逻辑块”或者“超级块(superblock)”来参照)。例如,一个逻辑块不限定于此,但也可以包含从nand型闪速存储芯片#1~#32每个芯片一个地选择的共计32个块。在图13中,通过阴影线表示的块分别表示了某一个逻辑块所包含的块(物理块)。各nand型闪速存储芯片能够通过通道编号以及组(bank)编号来识别。另外,各块(物理块)能够通过物理块编号来识别。

此外,nand型闪速存储芯片#1~#32各自也可以具有多面(multiplane)构成。例如,在nand型闪速存储芯片#1~#32各自具有包含两个面(plane)的多面构成的情况下,一个逻辑块也可以包含从与nand型闪速存储芯片#1~#32对应的64个面每个面一个地选择的共计64个块。

在此,如图14所示,设想某一个逻辑块包含32个块(nand型闪速存储芯片#1内的块blk2、nand型闪速存储芯片#2内的块blk3、nand型闪速存储芯片#3内的块blk7、nand型闪速存储芯片#4内的块blk4、nand型闪速存储芯片#5内的块blk6、…nand型闪速存储芯片#32内的块blk3)的情况。

在向该逻辑块的数据写入中,控制器4a也可以按照nand型闪速存储芯片#1内的块blk2的页0(page0)、nand型闪速存储芯片#2内的块blk3的页0、nand型闪速存储芯片#3内的块blk7的页0、nand型闪速存储芯片#4内的块blk4的页0、nand型闪速存储芯片#5内的块blk6的页0、…nand型闪速存储芯片#32内的块blk3的页0这一顺序来写入数据。由此,能够并行地执行向最大32页的数据写入。另外,在从该逻辑块开始的数据读入中,也能够并行地执行最大来自32页的数据读入。

由各lut条目管理的物理存储位置既可以由逻辑块编号、块编号(物理块)编号、块内的位置表示,也可以由逻辑块编号、块编号(物理块)编号、页编号、页内的位置表示,还可以由逻辑块编号、逻辑块内的位置表示。

接着,对图12的控制器4a的构成进行说明。

控制器4a也可以作为构成为执行nand型闪速存储器5的数据管理以及块管理的闪存转换层(ftl,flashtranslationlayer))发挥功能。在由ftl执行的数据管理中,包含(1)表示各个逻辑地址与nand型闪速存储器5的各个物理地址之间的对应关系的映射(mapping)信息的管理、(2)用于隐藏页单位的读取/写入和块单位的消去工作的处理等。逻辑地址是为了对ssd3进行地址指定而由主机2使用的地址。作为该逻辑地址,可以使用lba(logicalblockaddress(addressing))。

对于各个逻辑地址与各个物理地址之间的映射的管理,使用可变长度lut32来执行。控制器4a使用可变长度lut32,管理各个逻辑地址与各个物理地址之间的映射。可变长度lut32也可以在ssd的电源接通时被从nand型闪速存储器5加载到dram6a。

向页的数据写入能够每1个消去周期仅进行1次。因此,控制器4a将与某逻辑地址对应的更新数据不是写入到与该逻辑地址对应的存储有以前的数据的物理存储位置,而是写入到其他物理存储位置。并且,控制器4更新可变长度lut32来将该逻辑地址关联到该其他物理存储位置,并且,使以前的数据无效化。

在块管理中包含坏块(badblock)的管理、均衡损耗(wearlevelling)、无用存储单元收集等。均衡损耗是用于使块(物理块)各自的消耗均匀化的工作。无用存储单元收集为了增加能够写入数据的空闲块的个数,将混合存在有效数据和无效数据的几个对象块内的有效数据复制到其他块(例如空闲块)。在此,有效数据是指从可变长度lut32参照的数据(即从逻辑地址作为最新的数据所关联的数据)、且然后有可能被从主机2读取的数据。无效数据是指已经没可能被从主机2读取的数据。例如,与某逻辑地址关联的数据是有效数据,与任何逻辑地址都不关联的数据是无效数据。

并且,控制器4更新查找表(lut)32,将所复制的有效数据的逻辑地址分别映射到复制目的地物理地址。通过有效数据被复制到其他块,成为了仅是无效数据的块作为空闲块被释放。由此,该块能够在其消去之后再次被加以利用。

控制器4a也可以包含主机接口11、cpu12、nand接口13、dram接口14等。这些cpu12、nand接口13、dram接口14也可以经由总线10相互连接。

主机接口11从主机2接收各种命令。这些命令也包含可变长度数据用的写命令、可变长度数据用的读命令。

cpu12是构成为控制主机接口11、nand接口13以及dram接口14的处理器。cpu12响应ssd3的电源接通,将nand型闪速存储器5中储存的控制程序(固件)加载到dram6上,执行该固件,由此进行各种处理。该cpu12例如在上述的ftl的处理之外,还能够执行用于处理来自主机2的各种命令的命令处理等。cpu12的工作由通过cpu12执行的上述的固件来控制。此外,ftl处理以及命令处理的一部分或者全部也可以由控制器4内的专用硬件来执行。

cpu12能够作为主机请求处理部21a、可变长度lut管理部22a、命名空间管理部23a发挥功能。

主机请求处理部21a执行与由图1的主机请求处理部21执行的处理相同的处理。可变长度lut管理部22a执行与由图1的可变长度lut管理部22执行的处理相同的处理。

命名空间管理部23a执行上述的多命名空间控制功能。命名空间管理部23a能够生成用于处理固定长度数据的类型#1-命名空间、以及用于处理可变长度数据的类型#2-命名空间。类型#1-命名空间用的逻辑物理地址变换使用固定长度lut33来被执行。类型#2-命名空间的逻辑物理地址变换使用可变长度lut32来被执行。

dram接口14是构成为对dram6进行访问控制的dram控制器。dram6的存储区域被利用于对写缓存(wb)31、lut32、33进行储存。

接着,对主机2的构成进行说明。

主机2是执行各种程序的信息处理装置。由信息处理装置执行的程序包括应用软件层41、操作系统(os)42、设备驱动43等。

如一般已知的那样,操作系统(os)42是构成为对主机2整体进行管理、对主机2内的硬件进行控制、执行用于使得应用能够使用硬件以及ssd3的控制的软件。

各种应用软件线程在应用软件层41上运行。作为应用软件线程的例子,具有客户软件、数据库软件、虚拟机等。

在应用软件层41需要向ssd3发送如读命令或者写命令的请求时,应用软件层41向os42发送该请求。os42将其请求发送到设备驱动43。设备驱动43将其请求转化为命令(读命令、写命令等)。设备驱动43将命令发送给ssd3。在接收到来自ssd3的响应时,设备驱动43将该响应发送给os42。os42将该响应发送给应用软件层41。

设备驱动43的可变长度数据读写部101a执行与图1的可变长度数据读写部101相同的处理。

图15表示由控制器4a管理的多个区域。

控制器4a对nand型闪速存储器5内的多个区域、也即是区域#1、区域#2、…区域#31、区域#32、区域#33进行管理。各区域能够由命名空间实现。各命名空间是nand型闪速存储器5内的一种区域(存储区域),分配有逻辑地址空间(lba空间)。各个命名空间由这些命名空间的识别符来识别。在各区域由命名空间实现的情况下,在各区域分配lba范围(lba0~lban-1)。lba范围的尺寸(也即是lba的数量)按每个区域(命名空间)是可变的。各lba范围从lba0开始。

例如,区域#1(命名空间ns#1)、区域#2(命名空间ns#2)、…的每一个可以被使用于储存可变长度数据。另外,区域#31(命名空间ns#31)、区域#32(命名空间ns#32)、区域#33(命名空间ns#33)各自也可以被使用于储存固定长度数据。

图16表示多个区域、与这些区域对应的逻辑地址空间(lba空间)、与这些区域对应的查找表的关系。

在与命名空间ns#1对应的区域#1分配有0~n-1的逻辑地址空间(lba空间)a1。在与命名空间ns#2对应的区域#2分配有0~n-1的逻辑地址空间(lba空间)a2。在与命名空间ns#31对应的区域#31分配有0~n-1的逻辑地址空间(lba空间)a31。在与命名空间ns#32对应的区域#32分配有0~n-1的逻辑地址空间(lba空间)a32。在与命名空间ns#33对应的区域#33分配有0~n-1的逻辑地址空间(lba空间)a33。

在本实施方式中,查找表lut按照每个区域、也即是每个命名空间被分割。也即是,用于区域#1(ns#1)的逻辑物理地址变换使用可变长度lut#1来执行,用于区域#2(ns#2)的逻辑物理地址变换使用可变长度lut#2来执行。另外,用于区域#31(ns#31)的逻辑物理地址变换使用固定长度lut#31来执行,用于区域#32(ns#32)的逻辑物理地址变换使用固定长度lut#32来执行,用于区域#33(ns#33)的逻辑物理地址变换使用固定长度lut#33来执行。

在区域#1(ns#1)以及区域#2(ns#2)各自中,能够对任意的逻辑地址写入任意长度的数据。

如以上说明的那样,根据本实施方式,ssd3能够在可变长度lut32中储存是从nand型闪速存储器5上的那个物理存储位置开始储存了什么长度的数据,由此,能够在与任意的逻辑地址对应的逻辑存储位置储存任意长度的数据。换言之,可变长度lut32能够对与某逻辑地址对应的ssd3内的逻辑存储位置分配具有与由主机2指定的任意的数据长度对应的尺寸的物理存储区域。

由此,能够解决(1)主机的cpu的处理时间的增加、(2)由元数据的读写所引起的存储器访问时间的增加、(3)由元数据/虚设数据的写入引起的存储器资源的消耗量的增加、(4)由存储器资源的消耗量的增加引起的写应用的增加、(5)由写应用的增加引起ssd的寿命的减少这样的非效率。

此外,在本实施方式中,作为非易失性存储器例示了nand型闪速存储器。但是,本实施方式的功能也可以应用于例如mram(magnetoresistiverandomaccessmemory,磁阻式随机访问存储器)、pram(phasechangerandomaccessmemory,相变随机访问存储器)、reram(resistiverandomaccessmemory,电阻式随机访问存储器)、或者feram(ferroelectricrandomaccessmemory,铁电随机访问存储器)这样的其他各种非易失性存储器。

另外,ssd3也可以作为设在储存器阵列内的多个ssd之一来利用。储存器阵列也可以经由线缆或者网络与如服务器计算机这样的信息处理装置连接,储存器阵列包括对该储存器阵列内的多个ssd进行控制的控制器。在ssd3被应用于储存器阵列的情况下,该储存器阵列的控制器也可以作为ssd3的主机2发挥功能。

另外,也可以在各lut条目追加用于储存表示固定长度数据/可变长度数据的标志的字段。由此,能够以一个lut对固定长度数据的读写和可变长度数据的读写进行控制。

以上对本发明的几个实施方式进行了说明,但这些实施方式是作为例子提示的,并不意在对发明的范围进行限定。这些新的实施方式可以用其他的各种形态来实施,可以在不脱离发明的主旨的范围内进行各种省略、置换、变更。这些实施方式及其变形包含在发明的范围和主旨中,并且,包含在记载于权利要求书的发明及其等同的范围内。

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