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

文档序号:29741185发布日期:2022-04-21 19:17阅读:196来源:国知局
存储器系统及控制非易失性存储器的控制方法与流程
存储器系统及控制非易失性存储器的控制方法
1.分案申请的相关信息
2.本案是分案申请。该分案的母案是申请日为2018年1月10日、申请号为201810021746.9、发明名称为“存储器系统及控制非易失性存储器的控制方法”的发明专利申请案。
3.[相关申请案]
[0004]
本技术案享有以日本专利申请案2017-181425号(申请日:2017年9月21日)作为基础申请案的优先权。本技术案通过参照该基础申请案而包含基础申请案的所有内容。
技术领域
[0005]
本发明的实施方式涉及一种存储器系统及控制非易失性存储器的控制方法。


背景技术:

[0006]
近年来,具备非易失性存储器的存储器系统广泛普及。
[0007]
作为这种存储器系统之一,已知基于nand(not and,与非)闪存技术的固态硬盘(ssd)。
[0008]
在数据中心的服务器中,也使用ssd作为存储器。对于利用于像服务器这样的主机计算机中的存储器,要求较高的i/o(input/output,输入/输出)性能。因此,最近开始提出主机与存储器之间的新颖的接口。
[0009]
然而,一般来说,因为nand型闪速存储器的控制较为复杂,所以当实现用来改善i/o性能的新颖的接口时,必须考虑主机与存储器(存储器系统)之间适当的作用分配。


技术实现要素:

[0010]
本发明提供一种能够实现i/o性能改善的存储器系统及控制非易失性存储器的控制方法。
[0011]
根据实施方式,能够连接于主机的存储器系统具备:非易失性存储器,包含分别包含多个页的多个区块;及控制器,电连接于所述非易失性存储器,且控制所述非易失性存储器。所述控制器当从所述主机接收到指定第1逻辑地址的写入请求时,执行如下动作:决定应被写入来自所述主机的数据的第1区块与所述第1区块的第1位置的两者,将来自所述主机的数据写入到所述第1区块的所述第1位置,且对所述主机通知所述第1逻辑地址、指定所述第1区块的第1区块编号、及第1区块内偏移,所述第1区块内偏移是以具有与页尺寸不同尺寸的粒度的倍数来表示所述第1区块的前端至所述第1位置的偏移。所述控制器当执行所述非易失性存储器的无用信息收集时,执行如下动作:从所述多个区块选择用于所述无用信息收集的复制源区块及复制目标区块,决定应被写入所述复制源区块内所存储的有效数据的所述复制目标区块的第2位置,将所述有效数据复制到所述复制目标区块的所述第2位置,对所述主机通知所述有效数据的逻辑地址、指定所述复制目标区块的第2区块编号、及以所述粒度的倍数来表示所述复制目标区块的前端至所述第2位置的偏移的第2区块内偏
移。
附图说明
[0012]
图1是表示主机与实施方式的存储器系统(闪速存储装置)的关系的框图。
[0013]
图2是用来对现有型ssd与主机之间的作用分配、及该实施方式的闪速存储装置与主机之间的作用分配进行说明的图。
[0014]
图3是表示经由网络机器来执行多个主机与多个闪速存储装置之间的数据传输的计算机系统的构成例的框图。
[0015]
图4是表示该实施方式的存储器系统的构成例的框图。
[0016]
图5是表示设置在该实施方式的存储器系统的nand接口与多个nand型闪速存储器芯片块的关系的框图。
[0017]
图6是表示多利用个区块的集合所构筑的超级区块的构成例的图。
[0018]
图7是用来对该实施方式的存储器系统所应用的写入命令进行说明的图。
[0019]
图8是用来对针对图7的写入命令的响应进行说明的图。
[0020]
图9是用来对该实施方式的存储器系统所应用的trim(修整)命令进行说明的图。
[0021]
图10是用来对图8的响应所包含的规定实体地址的区块编号及偏移进行说明的图。
[0022]
图11是用来对根据写入命令执行的写入动作与对该写入命令的响应所包含的返回值的关系进行说明的图。
[0023]
图12是用来对跳过不良页的写入动作进行说明的图。
[0024]
图13是用来对跳过不良页的写入动作的另一例进行说明的图。
[0025]
图14是用来对将逻辑地址与数据的配对写入区块内的页的动作进行说明的图。
[0026]
图15是用来对将数据写入到区块内的页的用户数据区域,并将该数据的逻辑地址写入到该页的冗余区域的动作进行说明的图。
[0027]
图16是用来对使用超级区块时的区块编号与偏移的关系进行说明的图。
[0028]
图17是表示利用主机与该实施方式的存储器系统所执行的写入动作处理的顺序的顺序图。
[0029]
图18是表示写入针对已写入数据的更新数据的数据更新动作的图。
[0030]
图19是用来对更新利用该实施方式的存储器系统所管理的区块管理表格的动作进行说明的图。
[0031]
图20是用来对更新利用主机所管理的查找表格(逻辑实体地址转换表格)的动作进行说明的图。
[0032]
图21是用来对根据表示与应无效化的数据相对应的实体地址的来自主机的通知而更新区块管理表格的动作进行说明的图。
[0033]
图22是用来对该实施方式的存储器系统所应用的读取命令进行说明的图。
[0034]
图23是用来对利用该实施方式的存储器系统所执行的读取动作进行说明的图。
[0035]
图24是用来对根据来自主机的读取命令,读取不同实体存储位置分别存储的数据部的动作进行说明的图。
[0036]
图25是表示利用主机与该实施方式的存储器系统所执行的读取处理的顺序的顺
序图。
[0037]
图26是用来对该实施方式的存储器系统所应用的无用信息收集(gc)控制命令进行说明的图。
[0038]
图27是用来对该实施方式的存储器系统所应用的gc用回调命令进行说明的图。
[0039]
图28是表示利用该实施方式的存储器系统所执行的无用信息收集(gc)动作的程序的顺序图。
[0040]
图29是用来对为了无用信息收集(gc)而执行的数据复制动作的示例进行说明的图。
[0041]
图30是用来对基于图29的数据复制动作的结果而更新的主机的查找表格的内容进行说明的图。
[0042]
图31是用来对针对写入命令的响应与gc用回调处理的关系进行说明的图。
[0043]
图32是用来对该实施方式的存储器系统所应用的无用信息收集(gc)控制命令的另一例进行说明的图。
[0044]
图33是用来对该实施方式的存储器系统所应用的gc用回调命令的另一例进行说明的图。
[0045]
图34是用来对利用该实施方式的存储器系统所执行的写入/读取/gc动作进行说明的图。
[0046]
图35是表示用来管理参照计数的区块管理表格的构成例的图。
[0047]
图36是用来对该实施方式的存储器系统所应用的重复命令进行说明的图。
[0048]
图37是用来对使参照计数减少1的trim命令进行说明的图。
[0049]
图38是表示利用主机与该实施方式的存储器系统所执行的参照计数增加/减少处理的顺序图。
具体实施方式
[0050]
以下,参照附图,对实施方式进行说明。
[0051]
首先,参照图1,对一实施方式的包含存储器系统的计算机系统的构成进行说明。
[0052]
该存储器系统是以对非易失性存储器写入数据,且从非易失性存储器读出数据的方式构成的半导体存储装置。该存储器系统是作为基于nand闪存技术的闪速存储装置3而实现的。
[0053]
该计算机系统可包含主机(主机装置)2、及多个闪速存储装置3。主机2可以是以将包含多个闪速存储装置3的闪存阵列用作存储器的方式构成的服务器。主机(服务器)2与多个闪速存储装置3经由接口50而相互连接(内部相互连接)。作为用于该内部相互连接的接口50,可使用pci express(pcie,peripheral component interconnect express,外围组件互连高速)(注册商标),nvm express(nvme,non-volatile memory express,非易失性存储器高速)(注册商标),ethernet(以太网,注册商标),nvme over fabrics(nvmeof)等,但并不限定于此。
[0054]
作为主机2而发挥功能的服务器的典型例可列举数据中心内的服务器。
[0055]
在主机2是利用数据中心内的服务器而实现的实例中,该主机(服务器)2可经由网络51而连接于多个终端用户终端(用户端)61。主机2能够对这些终端用户终端61提供各种
服务。
[0056]
能够利用主机(服务器)2提供的服务的例子有:(1)向各用户端(各终端用户终端61)提供系统开发平台的平台即服务(paas)、及(2)向各用户端(各终端用户终端61)提供像虚拟服务器这样的基础设施的基础设施即服务(iaas)等。
[0057]
多个虚拟机器可在作为该主机(服务器)2而发挥功能的实体服务器上执行。在主机(服务器)2上运行的这些虚拟机器各自能够作为以向所对应的若干个用户端(终端用户终端61)提供各种服务的方式构成的虚拟服务器而发挥功能。
[0058]
主机(服务器)2包含管理构成闪存阵列的多个闪速存储装置3的存储器管理功能、及对终端用户终端61分别提供包含存储器存取的各种服务的前端功能。
[0059]
在现有型ssd中,nand型闪速存储器的区块/页的阶层构造是利用ssd内的闪存转换层(ftl)来隐藏。也就是说,现有型ssd的ftl具有如下等功能:(1)使用作为逻辑实体地址转换表格而发挥功能的查找表格,来自管理逻辑地址各自与nand型闪速存储器的实体地址各自之间的映射,(2)用来隐藏以页为单位的读取/写入及以区块为单位的删除动作,(3)执行nand型闪速存储器的无用信息收集(gc)。逻辑地址各自与nand型闪速存储器的实体地址之间的映射无法从主机看到。nand型闪速存储器的区块/页构造也无法从主机看到。
[0060]
另一方面,有在主机中也执行一种地址转换(应用程序级地址转换)的情况。该地址转换使用应用程序级地址转换表格来管理应用程序用逻辑地址各自与ssd用逻辑地址各自之间的映射。另外,在主机中,也为了消除ssd用逻辑地址空间上所产生的碎片,而执行用来变更该逻辑地址空间上的数据配置的一种gc(应用程序级gc)。
[0061]
然而,在主机及ssd分别具有地址转换表格这样冗余的构成(ssd具有作为逻辑实体地址转换表格而发挥功能的查找表格,主机具有应用程序级地址转换表格)中,为了保存这些地址转换表格而要消耗庞大的存储器资源。进而,包含主机侧的地址转换与ssd侧的地址转换的双重地址转换也成为使i/o性能降低的因素。
[0062]
进而,主机侧的应用程序级gc成为使向ssd的数据写入量增加到即时用户数据量的数倍(例如2倍)程度的因素。这种数据写入量的增加虽然不会使ssd的写入放大增加,但会使系统整体的存储性能降低,另外,也使ssd的寿命变短。
[0063]
为了消除这种问题点,也提出了将现有型ssd的ftl的功能全部转移到主机的对策。
[0064]
然而,为了实现该对策,必须使主机直接处理nand型闪速存储器的区块及页。nand型闪速存储器的容量于每一代nand型闪速存储器都在增加,伴随于此,每一代nand型闪速存储器的区块尺寸/页尺寸也不同。因此,想到了在主机2中混合使用不同区块尺寸、页尺寸的nand型闪速存储器的情况。对主机来说难以处理不同的区块尺寸/页尺寸。另外,假定由于可能存在因各种制造上的理由等而产生的数量无法预测的不良页(bad page),所以在每个区块中,区块内实质上能够利用的页数不同,从而可能存在该nand型闪速存储器内的区块尺寸在每个区块中不同的情况。对主机来说,处理不良页及不均等的区块尺寸变得更加困难。
[0065]
因此,在本实施方式中,在主机2与闪速存储装置3之间分担ftl的作用。主机2管理作为逻辑实体地址转换表格而发挥功能的查找表格,但应使用于写入的区块的选择不由主机2而由闪速存储装置3来执行。另外,gc也不由主机2而由闪速存储装置3来执行。以下,将
转移至主机2的ftl功能称为全局ftl。
[0066]
主机2的全局ftl可具有执行存储服务的功能、管理查找表格(lut)的功能、损耗控制功能、用来实现高可用性的功能、防止存储器中存储具有相同内容的多个重复数据部的重复排除(de-duplication)功能等。
[0067]
另一方面,闪速存储装置3能够执行低级抽象(lla)。lla为用于nand型闪速存储器的抽象的功能。lla包含吸收区块尺寸的不均等性、吸收区块/页构造、及辅助数据配置的功能等。辅助数据配置的功能包含决定用于无用信息收集的复制源区块与复制目标区块的功能、对上位阶层(主机2)通知有效数据的复制目标位置的功能、决定用户数据的写入目标位置(区块编号、该区块内的位置)的功能、及对上位阶层(主机2)通知已写入用户数据的该写入目标位置(区块编号、该区块内的位置)的功能等。另外,lla具有执行gc的功能。进而,lla也具有对每个域(qos(quality of service,服务质量)域)执行闪速存储装置3的资源管理的qos控制功能。
[0068]
qos控制功能包含对每个qos域(或每个区块)决定存取单位的功能。存取单位表示主机2能够进行写入/读取的最小数据尺寸(grain)。闪速存储装置3支持单一或多种存取单位(grain),主机2在闪速存储装置3支持多种存取单位的情况下,对闪速存储装置3指示每个qos域(或每个区块)应使用的存取单位。
[0069]
另外,qos控制功能包含用来尽量防止qos域间的性能干扰的功能。该功能基本上是用来保持稳定的时延的功能。
[0070]
为了实现该功能,闪速存储装置3可以使nand型闪速存储器内的多个区块分别只属于一个组的方式将nand型闪速存储器内的多个区块分类成多个组。在该情况下,各组包含多个区块,但不存在不同组共有同一区块的情况。这多个组作为所述多个qos域而发挥功能。
[0071]
或者,闪速存储装置3可以使闪速存储装置3内的多个nand型闪速存储器芯片块分别只属于一个组(一个qos域)的方式将闪速存储装置3内的多个nand型闪速存储器芯片块分类成多个组(多个qos域)。在该情况下,各组(qos域)包含多个芯片块,但不存在不同qos域共有同一芯片块的情况。
[0072]
图2表示现有型ssd与主机之间的作用分配、及本实施方式的闪速存储装置3与主机2之间的作用分配。
[0073]
图2的左侧表示包含现有型ssd与执行虚拟磁盘服务的主机的计算机系统整体的阶层构造。
[0074]
在主机(服务器)中,执行用来对多个终端用户提供多个虚拟机器的虚拟机器服务101。在虚拟机器服务101上的各虚拟机器中,执行由对应的终端用户使用的操作系统及用户应用程序102。
[0075]
另外,在主机(服务器)中,执行与多个用户应用程序102相对应的多个虚拟磁盘服务103。各虚拟磁盘服务103将现有型ssd内的存储资源的容量的一部分作为对应的用户应用程序102用存储资源(虚拟磁盘)分配。在各虚拟磁盘服务103中,也执行使用应用程序级地址转换表格来将应用程序级的逻辑地址转换为ssd用逻辑地址的应用程序级地址转换。进而,在主机中,也执行应用程序级gc104。
[0076]
命令从主机(服务器)向现有型ssd的发送、及命令结束的响应从现有型ssd向主机
(服务器)的回传是经由主机(服务器)及现有型ssd各自存在的i/o队列200来执行的。
[0077]
现有型ssd包含写入缓冲区(wb)301、查找表格(lut)302、无用信息收集功能303、及nand型闪速存储器(nand闪存阵列)304。现有型ssd只管理一个查找表格(lut)302,nand型闪速存储器(nand闪存阵列)304的资源由多个虚拟磁盘服务103所共有。
[0078]
在该构成中,由于包含虚拟磁盘服务103下的应用程序级gc104与现有型ssd内的无用信息收集功能303(lut级gc)的重复的gc,而使写入放大变大。另外,在现有型ssd中,可能会产生相邻干扰问题,即由于来自某一终端用户或某一虚拟磁盘服务103的数据写入量的增加而使gc的频率增加,由此导致对于其它终端用户或其它虚拟磁盘服务103的i/o性能劣化。
[0079]
另外,由于存在包含各虚拟磁盘服务内的应用程序级地址转换表格与现有型ssd内的lut302的重复资源,而消耗了大量存储器资源。
[0080]
图2的右侧表示包含本实施方式的闪速存储装置3与主机2的计算机系统整体的阶层构造。
[0081]
在主机(服务器)2中,执行用来对多个终端用户提供多个虚拟机器的虚拟机器服务401。在虚拟机器服务401上的各虚拟机器中,执行由对应的终端用户所使用的操作系统及用户应用程序402。
[0082]
另外,在主机(服务器)2中,执行与多个用户应用程序402相对应的多个i/o服务403。在这些i/o服务403中,可包含基于lba(logical block address,逻辑区块地址)的区块i/o服务、键值存储服务等。各i/o服务403包含管理逻辑地址各自与闪速存储装置3的实体地址各自之间的映射的查找表格(lut)。这里,逻辑地址意思是能够识别存取对象的数据的标识符。该逻辑地址可以是指定逻辑地址空间上的位置的逻辑区块地址(lba),或者也可以是键值存储的键(标签)。
[0083]
在基于lba的区块i/o服务中,也可以使用管理逻辑地址(lba)各自与闪速存储装置3的实体地址各自之间的映射的lut。
[0084]
在键值存储服务中,也可以使用管理逻辑地址(即像键的那样的标签)各自与闪速存储装置3的实体地址各自之间的映射的lut,该闪速存储装置3存储着与这些逻辑地址(即像键的那样的标签)相对应的数据。在该lut中,也可以管理标签、存储着利用该标签进行识别的数据的实体地址、及该数据的数据长度的对应关系。
[0085]
各终端用户可选择应使用的寻址方法(lba、键值存储的键等)。
[0086]
这些各lut不是将来自用户应用程序402的逻辑地址各自转换成各个闪速存储装置3用逻辑地址,而是将来自用户应用程序402的逻辑地址各自转换成各个闪速存储装置3的实体地址。也就是说,这些各lut是整合(合并)了将闪速存储装置3用逻辑地址转换成实体地址的表格、与应用程序级地址转换表格的表格。
[0087]
在主机(服务器)2中,在所述每个qos域中存在i/o服务403。属于某一qos域的i/o服务403管理逻辑地址各自与实体地址各自之间的映射,该逻辑地址是由所对应的qos域内的用户应用程序402所使用逻辑地址,该实体地址是属于分配至所对应的qos域的资源组的区块群的实体地址。
[0088]
命令从主机(服务器)2向闪速存储装置3的发送及命令结束的响应等从闪速存储装置3向主机(服务器)2的回传是经由存在于主机(服务器)2及闪速存储装置3各自的i/o队
列500而执行的。这些i/o队列500也可以被分类成与多个qos域相对应的多个队列组。
[0089]
闪速存储装置3包含与多个qos域相对应的多个写入缓冲区(wb)601、与多个qos域相对应的多个无用信息收集(gc)功能602、及nand型闪速存储器(nand闪存阵列)603。
[0090]
在该图2的右侧所示的构成中,将现有型ssd内的lut302与应用程序级地址转换表格合并为i/o服务403内的一个lut,因此能够减少地址转换信息的存储所消耗的存储器资源的量。另外,地址转换阶段的数量减少,因此能够使i/o性能提升。
[0091]
进而,不执行包含应用程序级gc与lut级gc的重复gc,而只由闪速存储装置3执行用于gc(统一gc)的数据复制。因此,与执行重复gc的构成相比,能够大幅减少系统整体的写入放大。其结果为,能够改善i/o性能,且能够使闪速存储装置3的寿命最大化。
[0092]
图3表示图1的系统构成的变化例。
[0093]
在图3中,多个主机2a与多个闪速存储装置3之间的数据传输是经由网络机器(这里为网络开关1)而执行的。
[0094]
也就是说,在图3的计算机系统中,将图1的服务器2的存储器管理功能转移到管理器2b,且将服务器2的前端功能转移到多个主机(终端用户服务用主机)2a。
[0095]
管理器2b管理多个闪速存储装置3,根据来自各主机(终端用户服务用主机)2a的要求,将这些闪速存储装置3的存储资源分配到各主机(终端用户服务用主机)2a。
[0096]
各主机(终端用户服务用主机)2a经由网络而连接于一个以上的终端用户终端61。各主机(终端用户服务用主机)2a管理作为所述经整合(合并)的逻辑实体地址转换表格的查找表格(lut)。各主机(终端用户服务用主机)2a使用自身的lut,只管理由对应的终端用户所使用的逻辑地址各自与分配给自身的资源的实体地址各自之间的映射。因此,该构成能够使系统容易地横向扩展。
[0097]
各主机2a的全局ftl具有管理查找表格(lut)的功能、用来实现高可用性的功能、重复排除(de-duplication)功能、及qos策略控制功能等。
[0098]
管理器2b是用来管理多个闪速存储装置3的专用装置(计算机)。管理器2b具有预约由各主机2a所要求的容量的存储资源的全局资源预约功能。进而,管理器2b具有监视各闪速存储装置3的消耗程度的损耗监视功能、将预约的存储资源(nand资源)分配到各主机2a的nand资源分配功能、qos策略控制功能、及全局时钟管理功能等。
[0099]
各闪速存储装置3具有本地ftl。该本地ftl为用来与各主机2a的全局ftl联合的功能。该本地ftl可包含qos控制功能、管理各qos域的写入缓冲区的功能、在qos域内或qos域间执行gc数据复制的功能、用于恢复的lut复制功能、管理用于重复排除(de-duplication)的参照计数的功能、工作量解析功能、及内务处理功能等。
[0100]
根据图3的系统构成,各闪速存储装置3的管理是利用管理器2b来执行的,因此各主机2a只要执行对分配到自身的一个以上的闪速存储装置3发送i/o要求的动作、及接收来自闪速存储装置3的响应的动作即可。也就是说,多个主机2a与多个闪速存储装置3之间的数据传输只经由开关1来执行,管理器2b与该数据传输无关。另外,如上所述,由主机2a各自管理的lut的内容相互独立。因此,能够容易地增加主机2a的数量,所以能够实现横向扩展型的系统构成。
[0101]
图4表示闪速存储装置3的构成例。
[0102]
闪速存储装置3包含控制器4及非易失性存储器(nand型闪速存储器)5。闪速存储
装置3也可以还包含随机存取存储器例如dram(dynamic random access memory,动态随机存取存储器)6。
[0103]
nand型闪速存储器5包含存储单元阵列,该存储单元阵列包含配置为矩阵状的多个存储单元。nand型闪速存储器5可以是二维构造的nand型闪速存储器,也可以是三维构造的nand型闪速存储器。
[0104]
nand型闪速存储器5的存储单元阵列包含多个区块blk0~blkm-1。区块blk0~blkm-1各自是利用多个页(这里为页p0~pn-1)编成的。区块blk0~blkm-1作为删除单位而发挥功能。区块有时也称为“删除区块”、“实体区块”、或“实体删除区块”。页p0~pn-1各自包含连接于同一字线的多个存储单元。页p0~pn-1是数据写入动作及数据读入动作的单位。
[0105]
控制器4经由像toggle、开放式nand闪存接口(onfi)这样的nand接口13,电连接于作为非易失性存储器的nand型闪速存储器5。控制器4是以控制nand型闪速存储器5的方式构成的存储器控制器(控制电路)。
[0106]
如图5所示,nand型闪速存储器5包含多个nand型闪速存储器芯片块。各nand型闪速存储器芯片块是包括包含多个区块blk的存储单元阵列、及控制该存储单元阵列的周边电路的非易失性存储器芯片块。各个nand型闪速存储器芯片块能够独立地进行动作。因此,nand型闪速存储器芯片块作为并联动作单位而发挥功能。nand型闪速存储器芯片块也称为“nand型闪速存储器芯片”或“非易失性存储器芯片”。在图5中,例示如下情况:在nand接口13连接着16个信道ch1、ch2、

ch16,且在这些信道ch1、ch2、

ch16各自分别连接着相同数量(例如每个信道2个芯片块)的nand型闪速存储器芯片块。各信道包含用来与对应的nand型闪速存储器芯片块进行通信的通信线(存储器总线)。
[0107]
控制器4经由信道ch1、ch2、

ch16来控制nand型闪速存储器芯片块#1~#32。控制器4能够同时驱动信道ch1、ch2、

ch16。
[0108]
连接在信道ch1~ch16的16个nand型闪速存储器芯片块#1~#16可编成第1存储体,另外,连接在信道ch1~ch16的其余16个nand型闪速存储器芯片块#17~#32可编成第2存储体。存储体作为用来使多个存储器模块通过存储体交叉来进行并联动作的单位而发挥功能。在图5的构成例中,利用16信道及使用2个存储体的存储体交叉,而能够使最多32个nand型闪速存储器芯片块进行并联动作。
[0109]
在本实施方式中,控制器4可管理各自包含多个区块blk的多个区块(以下称为超级区块),也可以超级区块为单位来执行删除动作。
[0110]
超级区块并不限定于此,也可以包含从nand型闪速存储器芯片块#1~#32各选择一个共计32个区块blk。此外,nand型闪速存储器芯片块#1~#32各自也可以具有多平面构成。例如,当nand型闪速存储器芯片块#1~#32各自具有包含两个平面的多平面构成时,一个超级区块可包含从与nand型闪速存储器芯片块#1~#32相对应的64个平面各选择一个共计64个区块blk。在图6中,例示一个超级区块sb包含从nand型闪速存储器芯片块#1~#32各选择一个共计32个区块blk(在图5中以粗框包围的区块blk)的情况。
[0111]
如图4所示,控制器4包含主机接口11、cpu12、nand接口13、及dram接口14等。这些cpu12、nand接口13、dram接口14经由总线10而相互连接。
[0112]
该主机接口11是以执行与主机2的通信的方式构成的主机接口电路。该主机接口
11例如也可以是pcie控制器(nvme控制器)。主机接口11从主机2接收各种要求(命令)。这些要求(命令)中包含写入请求(写入命令)、读取请求(读取命令)、及其它各种要求(命令)。
[0113]
cpu12是以控制主机接口11、nand接口13、dram接口14的方式构成的处理器。cpu12响应于闪速存储装置3的电源接通,从nand型闪速存储器5或未图示的rom(read only memory,只读存储器)将控制程序(固件)载入dram6,然后执行该固件,由此进行各种处理。此外,固件也可以载入于控制器4内的未图示的sram(static random access memory,静态随机存取存储器)上。该cpu12能够执行用来处理来自主机2的各种命令的命令处理等。cpu12的动作是由利用cpu12而执行的所述固件控制的。此外,也可以利用控制器4内的专用硬件来执行一部分或全部命令处理。
[0114]
cpu12能够作为写入动作控制部21、读取动作控制部22、及gc动作控制部23而发挥功能。在这些写入动作控制部21、读取动作控制部22、及gc动作控制部23中,安装了用来实现图2的右侧所示的系统构成的应用程序程序接口(api)。
[0115]
写入动作控制部21从主机2接收指定逻辑地址的写入请求(写入命令)。逻辑地址是能够识别应写入的数据(用户数据)的标识符,例如可以是lba,或者也可以是像键值存储的键那样的标签。当接收到写入命令时,写入动作控制部21首先决定应被写入来自主机2的数据的区块(写入目标区块)及该区块内的位置(写入目标位置)。接下来,写入动作控制部21将来自主机2的数据(写入数据)写入该写入目标区块的写入目标位置。在该情况下,写入动作控制部21不仅写入来自主机2的数据,还可以将该数据与该数据的逻辑地址的两者写入到写入目标区块。
[0116]
然后,写入动作控制部21将所指定的逻辑地址、及表示被写入了数据(写入数据)的nand型闪速存储器5内的位置(实体存储位置)的实体地址回传到主机2。
[0117]
在该情况下,该实体地址是利用(1)该写入目标区块的区块编号、及(2)表示该写入目标区块内的写入目标位置的区块内偏移来表示的。区块编号是指定被写入数据的区块的标识符。作为区块编号可使用能够唯一地识别多个区块内的任意一个的各种值。
[0118]
区块内偏移表示写入目标区块的前端至写入目标位置的偏移、即写入目标位置相对于写入目标区块的前端的偏移。写入目标区块的前端至写入目标位置的偏移的尺寸以具有与页尺寸不同尺寸的粒度(grain)的倍数来表示。粒度(grain)是所述存取单位。粒度(grain)的尺寸的最大值限制到区块尺寸。换句话说,区块内偏移是以具有与页尺寸不同尺寸的粒度的倍数来表示写入目标区块的前端至写入目标位置的偏移。
[0119]
粒度(grain)可具有小于页尺寸的尺寸。例如,当页尺寸为16k字节时,粒度(grain)的尺寸可以是4k字节。在该情况下,在某一区块中,规定各自的尺寸为4k字节的多个偏移位置。与区块内的最初的偏移位置相对应的区块内偏移例如为0,与区块内的下一个偏移位置相对应的区块内偏移例如为1,与区块内的再下一个偏移位置相对应的区块内偏移例如为2。
[0120]
或者,粒度(grain)也可以具有大于页尺寸的尺寸。例如,粒度(grain)可以是页尺寸的数倍的尺寸。当页尺寸为16k字节时,粒度可以是32k字节的尺寸。
[0121]
这样一来,写入动作控制部21自行决定应被写入数据的区块及该区块内的位置的两者,然后对主机2通知区块编号及区块内偏移作为表示写入了来自主机2的数据(用户数据)的位置的实体地址,而并非通知区块编号及页编号。由此,主机2能够将用户数据写入到
nand型闪速存储器5而无需在意区块尺寸、页写入顺序制约、不良页、页尺寸等,进而,能够将由区块编号及区块内偏移所表示的实体地址映射到该用户数据的逻辑地址。
[0122]
读取动作控制部22当从主机2接收到指定实体地址(即区块编号及区块内偏移)的读取请求(读取命令)时,基于这些区块编号及区块内偏移,从nand型闪速存储器5读取数据。读取对象的区块是利用区块编号来特定的。该区块内的读取对象的实体存储位置是利用区块内偏移来特定的。通过使用该区块内偏移,而主机2无需处理nand型闪速存储器的每个世代的不同页尺寸。
[0123]
为了获得读取对象的实体存储位置,读取动作控制部22首先使该区块内偏移除以表示页尺寸的粒度的数(这里是4),然后将由该除法所得的商及余数分别决定为读取对象的页编号及读取对象的页内偏移。
[0124]
gc动作控制部23当执行nand型闪速存储器5的无用信息收集时,从nand型闪速存储器5内的多个区块选择用于该无用信息收集的复制源区块(gc源区块)及复制目标区块(gc目的地区块)。在该情况下,gc动作控制部23通常选择多个复制源区块(gc源区块)、及一个以上的复制目标区块(gc目的地区块)。用于选择复制源区块(gc源区块)的条件(gc策略)可由主机2来指定。例如,既可以使用优先选择有效数据量最少的区块作为复制源区块(gc源区块)的gc策略,也可以使用其它gc策略。这样一来,复制源区块(gc源区块)及复制目标区块(gc目的地区块)的选择并非由主机2而是由闪速存储装置3的控制器4(gc动作控制部23)来执行的。控制器4也可以使用各区块管理表格来管理各区块的有效数据量。
[0125]
当从主机2接收到指定无用信息收集的复制源组(源qos域)及复制目标组(目的地qos域)的命令(gc控制命令)时,gc动作控制部23从属于复制源组区块群中选择无用信息收集的复制源区块,并从属于复制目标组的区块群中选择无用信息收集的复制目标区块。
[0126]
有效数据/无效数据的管理也可以使用区块管理表格32来执行。该区块管理表格32例如可以存在于每个区块。在与某一区块相对应的区块管理表格32中,存储着表示该区块内的数据各自的有效/无效的位图旗标。这里,有效数据意思是被从lut参照的数据(即作为最新的数据与逻辑地址建立关联的数据),且之后有可能被从主机2读取的数据。无效数据意思是已经不可能被从主机2读取的数据。例如,与某一逻辑地址建立关联的数据是有效数据,与任何逻辑地址均未建立关联的数据是无效数据。
[0127]
gc动作控制部23决定应被写入复制源区块(gc源区块)内所存储的有效数据的复制目标区块(gc目的地区块)内的位置(复制目标位置),将有效数据复制到复制目标区块(gc目的地区块)的该被决定的位置(复制目标位置)。在该情况下,gc动作控制部23可将有效数据与该有效数据的逻辑地址的两者复制到复制目标区块(gc目的地区块)。gc动作控制部23可通过参照与复制源区块(gc源区块)相对应的区块管理表格32而特定出gc源区块内的有效数据。或者,在另一实施方式中,也可以由主机2来执行有效数据/无效数据的管理。在该情况下,gc动作控制部23可从主机2接收表示gc源区块内的各数据的有效/无效的信息,并基于该接收到的信息来特定出gc源区块内的有效数据。
[0128]
然后,gc动作控制部23对主机2通知被复制的有效数据的逻辑地址、复制目标区块(gc目的地区块)的区块编号、及以所述粒度的倍数来表示复制目标区块(gc目的地区块)的前端至复制目标位置的偏移的区块内偏移。
[0129]
在本实施方式中,如上所述,写入动作控制部21能够将来自主机2的数据(写入数
据)与来自主机2的逻辑地址的两者写入到写入目标区块。因此,gc动作控制部23能够从该复制源区块(gc源区块)容易地获得复制源区块(gc源区块)内的各数据的逻辑地址,所以能够对主机2容易地通知被复制的有效数据的逻辑地址。
[0130]
nand接口13是以在cpu12的控制下,控制nand型闪速存储器5的方式构成的存储器控制电路。dram接口14是以在cpu12的控制下,控制dram6的方式构成的dram控制电路。dram6的存储区域的一部分用于写入缓冲区(wb)31的存储。另外,dram6的存储区域的另一部分用于区块管理表格32的存储。此外,这些写入缓冲区(wb)31及区块管理表格32也可以存储在控制器4内的未图示的sram中。
[0131]
图7表示闪速存储装置3所应用的写入命令。
[0132]
写入命令是对闪速存储装置3要求数据的写入的命令。该写入命令可包含命令id(identity,标识)、qos域id、逻辑地址、长度等。
[0133]
命令id是表示该命令为写入命令的id(命令代码),写入命令中包含写入命令用命令id。
[0134]
qos域id是能够唯一地识别应写入数据的qos域的标识符。根据来自某一终端用户的写入请求而从主机2发送的写入命令可包含指定与该终端用户相对应的qos域的qos域id。名字空间id可视为qos域id。
[0135]
逻辑地址是用来识别应写入的写入数据的标识符。如上所述,该逻辑地址既可以是lba,也可以是键值存储的键。当逻辑地址是lba时,该写入命令所包含的逻辑地址(起始lba)表示应被写入写入数据的逻辑位置(最初的逻辑位置)。
[0136]
长度表示应写入的写入数据的长度。该长度(数据长度)既可以由粒度(grain)的数量指定,也可以由lba的数量指定,或者,其尺寸也可以由字节指定。
[0137]
如上所述,控制器4能够以使nand型闪速存储器5内的多个区块各自只属于一个组的方式将nand型闪速存储器5内的多个区块分类成多个组(多个qos域)。然后,控制器4能够针对每个组(qos域)管理闲置区块列表(闲置区块池)与有源区块列表(有源区块池)。
[0138]
各区块的状态大致分为存储着有效数据的有源区块、与未存储有效数据的闲置区块。作为有源区块的各区块由有源区块列表管理。另一方面,作为闲置区块的各区块由闲置区块列表管理。
[0139]
当从主机2接收到写入命令时,控制器4决定应被写入来自主机2的数据的区块(写入目标区块)及该写入目标区块内的位置(写入目标位置)。控制器4可将属于与qos域id相对应的qos域的闲置区块群中的一个决定为写入目标区块。写入目标位置是考虑页写入顺序的制约及不良页等而决定的。然后,控制器4将来自主机2的数据写入到写入目标区块内的写入目标位置。
[0140]
此外,如果该写入目标区块整体已被用户数据占满,那么控制器4将该写入目标区块移动到有源区块列表(有源区块池)。然后,控制器4从与该qos域相对应的闲置区块列表再次选择闲置区块,并将该所选择的闲置区块分配为新的写入目标区块。
[0141]
如果当由闲置区块列表所管理的剩余闲置区块的数量下降到由规定的策略所决定的阈值以下时,或者从主机2指示实施无用信息收集时,控制器4可开始该qos域的无用信息收集。
[0142]
在该qos域的无用信息收集时,控制器4从与该qos域相对应的有源区块群中选择
复制源区块(gc源区块)与复制目标区块(gc目的地区块)。选择哪个区块作为gc候补(复制源区块)既可按照由主机2所指定的所述策略来决定,也可以由主机2指定。在也基于策略来决定的情况下,例如可选择有效数据量最少的区块作为gc候补(复制源区块)。
[0143]
图8表示对图7的写入命令的响应。
[0144]
该响应包含逻辑地址、实体地址、及长度。
[0145]
逻辑地址是图7的写入命令所包含的逻辑地址。
[0146]
实体地址表示根据图7的写入命令而被写入数据的nand型闪速存储器5内的实体存储位置。在本实施方式中,该实体地址并非由区块编号与页编号的组合指定,而是如上所述般,由区块编号与偏移(区块内偏移)的组合指定。区块编号是能够唯一地识别闪速存储装置3内的所有区块中的任意一个的标识符。在对所有区块赋予了不同区块编号的情况下,也可以直接使用这些区块编号。或者,区块编号也可以利用芯片块编号与芯片块内区块编号的组合来表现。长度表示应写入的写入数据的长度。该长度(数据长度)既可由粒度(grain)的数量来指定,也可以由lba的数量来指定,或者,其尺寸也可以由字节来指定。
[0147]
图9表示闪速存储装置3所应用的trim命令。
[0148]
该trim命令是包含表示存储着应设为无效的数据的实体存储位置的区块编号及区块内偏移的命令。也就是说,该trim命令并非指定像lba那样的逻辑地址,而能够指定实体地址。该trim命令包含命令id、实体地址、及长度。
[0149]
命令id是表示该命令为trim命令的id(命令代码),trim命令中包含trim命令用命令id。
[0150]
实体地址表示存储着应无效化的数据的最初的实体存储位置。在本实施方式中,该实体地址由区块编号与偏移(区块内偏移)的组合指定。
[0151]
长度表示应无效化的数据的长度。该长度(数据长度)可以由粒度(grain)的数量指定,也可以由字节指定。
[0152]
控制器4使用区块管理表格32来管理表示多个区块分别包含的数据各自的有效/无效的旗标(位图旗标)。当从主机2接收到包含表示存储着应设为无效的数据的实体存储位置的区块编号及偏移(区块内偏移)的trim命令时,控制器4更新区块管理表格32,将与trim命令所包含的区块编号及区块内偏移相对应的实体存储位置的数据所对应的旗标(位图旗标)变更为表示无效的值。
[0153]
图10表示规定实体地址的区块编号及偏移。
[0154]
区块编号指定某一个区块blk。如图10所示,各区块blk包含多个页(这里为页0~页n)。
[0155]
在页尺寸(各页的用户数据存储区域)为16k字节,且粒度(grain)为4kb的尺寸的实例中,该区块blk逻辑上被分割为4
×
(n+1)个区域。
[0156]
偏移+0表示页0的最初4kb区域,偏移+1表示页0的第2个4kb区域,偏移+2表示页0的第3个4kb区域,偏移+3表示页0的第4个4kb区域。
[0157]
偏移+4表示页1的最初4kb区域,偏移+5表示页1的第2个4kb区域,偏移+6表示页1的第3个4kb区域,偏移+7表示页1的第4个4kb区域。
[0158]
图11表示根据写入命令而执行的写入动作与对该写入命令的响应所包含的返回值的关系。
[0159]
闪速存储装置3的控制器4利用闲置区块列表来管理不包含有效数据的闲置区块群,从这些闲置区块群中选择一个区块(闲置区块),将所选择的区块分配为写入目标区块。现在,假定将区块blk#1分配为写入目标区块的情况。控制器4以页0、页1、页2、

页n的顺序将数据以页为单位写入区块blk#1。
[0160]
在图11中,假定在已将16k字节数据写入到区块blk#1的页0的状态下,从主机2接收到指定逻辑地址(lbax)及长度(=4)的写入命令的情况。控制器4将区块blk#1的页1决定为写入目标位置,将从主机2接收的16k字节写入数据写入到区块blk#1的页1。然后,控制器4将对该写入命令的响应(逻辑地址、区块编号、偏移(区块内偏移)、长度)回传到主机2。在该实例中,逻辑地址为lbax,区块编号为blk#1,偏移(区块内偏移)为+5,长度为4。
[0161]
图12表示跳过不良页(bad page)的写入动作。
[0162]
在图12中,假定在已经对区块blk#1的页0、页1写入数据的状态下,从主机2接收到指定逻辑地址(lbax+1)及长度(=4)的写入命令的情况。如果区块blk#1的页2是不良页,那么控制器4将区块blk#1的页3决定为写入目标位置,将从主机2接收的16k字节写入数据写入到区块blk#1的页3。然后,控制器4将对该写入命令的响应(逻辑地址、区块编号、偏移(区块内偏移)、长度)回传到主机2。在该实例中,逻辑地址为lbax+1,区块编号为blk#1,偏移(区块内偏移)为+12,长度为4。
[0163]
图13表示跳过不良页的写入动作的另一例。
[0164]
在图13中,假定跨隔着不良页的2个页写入数据的情况。现在,假定已经对区块blk#2的页0、页1写入数据,且在写入缓冲区31残留着未写入的8k字节写入数据的情况。在该状态下,如果接受到指定逻辑地址(lbay)及长度(=6)的写入命令,那么控制器4使用未写入的8k字节写入数据、及从主机2新接收的24k字节写入数据内的最初的8k字节写入数据,准备与页尺寸相对应的16k字节写入数据。然后,控制器4将该准备好的16k字节写入数据写入到区块blk#2的页2。
[0165]
如果区块blk#2的下一个页3是不良页,那么控制器4将区块blk#2的页4决定为下一写入目标位置,将从主机2接收到的24k字节写入数据内的剩余16k字节写入数据写入到区块blk#2的页4。
[0166]
然后,控制器4将对该写入命令的响应(逻辑地址、区块编号、偏移(区块内偏移)、长度)回传到主机2。在该实例中,该响应可包含lbay、区块编号(=blk#2)、偏移(=+10)、长度(=2)、区块编号(=blk#2)、偏移(=+16)、长度(=4)。
[0167]
图14、图15表示将逻辑地址与数据的配对写入区块内的页的动作。
[0168]
在各区块中,各页可包含用来存储用户数据的用户数据区域、及用来存储管理数据的冗余区域。页尺寸为16kb+α。
[0169]
控制器4将4kb用户数据及与该4kb用户数据相对应的逻辑地址(例如lba)的两者写入到写入目标区块blk。在该情况下,如图14所示,可将各自包含lba与4kb用户数据的4个数据集合写入同一页。区块内偏移也可以表示集合边界。
[0170]
或者,也可以如图15所示,将4个4kb用户数据写入到页内的用户数据区域,并将与这4个4kb用户数据相对应的4个lba写入该页内的冗余区域。
[0171]
图16表示使用超级区块的实例中的区块编号与偏移(区块内偏移)的关系。以下,也将区块内偏移简称为偏移。
[0172]
这里,为了简化图示,假定某一个超级区块sb#1包含4个区块blk#11、blk#21、blk#31、blk#41的情况。控制器4以区块blk#11的页0、区块blk#21的页0、区块blk#31的页0、区块blk#41的页0、区块blk#11的页1、区块blk#21的页1、区块blk#31的页1、区块blk#41的页1、

的顺序写入数据。
[0173]
偏移+0表示区块blk#11的页0的最初4kb区域,偏移+1表示区块blk#11的页0的第2个4kb区域,偏移+2表示区块blk#11的页0的第3个4kb区域,偏移+3表示区块blk#11的页0的第4个4kb区域。
[0174]
偏移+4表示区块blk#21的页0的最初4kb区域,偏移+5表示区块blk#21的页0的第2个4kb区域,偏移+6表示区块blk#21的页0的第3个4kb区域,偏移+7表示区块blk#21的页0的第4个4kb区域。
[0175]
同样地,偏移+12表示区块blk#41的页0的最初4kb区域,偏移+13表示区块blk#41的页0的第2个4kb区域,偏移+14表示区块blk#41的页0的第3个4kb区域,偏移+15表示区块blk#41的页0的第4个4kb区域。
[0176]
偏移+16表示区块blk#11的页1的最初4kb区域,偏移+17表示区块blk#11的页1的第2个4kb区域,偏移+18表示区块blk#11的页1的第3个4kb区域,偏移+19表示区块blk#11的页1的第4个4kb区域。
[0177]
偏移+20表示区块blk#21的页1的最初4kb区域,偏移+21表示区块blk#21的页1的第2个4kb区域,偏移+22表示区块blk#21的页1的第3个4kb区域,偏移+23表示区块blk#21的页1的第4个4kb区域。
[0178]
同样地,偏移+28表示区块blk#41的页1的最初4kb区域,偏移+29表示区块blk#41的页1的第2个4kb区域,偏移+30表示区块blk#41的页1的第3个4kb区域,偏移+31表示区块blk#41的页1的第4个4kb区域。
[0179]
例如,当将与指定某一lba(lbax)的写入命令相对应的4k字节数据写入到与偏移+8相对应的位置时,控制器4可将逻辑地址(=lbax)、区块编号(=sb#1)、偏移(=+8)、长度(=1)作为对该写入命令的响应回传到主机2。
[0180]
图17表示利用主机2与闪速存储装置3所执行的写入动作处理的顺序。
[0181]
主机2将包含qos域id、lba、长度的写入命令发送到闪速存储装置3。当闪速存储装置3的控制器4接收到该写入命令时,控制器4决定应被写入来自主机2的写入数据的写入目标区块及该写入目标区块内的位置。更详细来说,控制器4从闲置区块列表选择一个闲置区块,将所选择的闲置区块分配为写入目标区块(步骤s12)。也就是说,将该所选择的闲置区块及该所选择的闲置区块内的可利用的最初的页决定为应被写入来自主机2的写入数据的写入目标区块及该写入目标区块内的位置。在已经分配写入目标区块的情况下,无需执行该步骤12中的写入目标区块分配处理。将已经分配的写入目标区块内的可利用的下一页决定为应被写入来自主机2的写入数据的写入目标区块内的位置。
[0182]
控制器4可管理与多个qos域相对应的多个闲置区块列表。也可以在与某一qos域相对应的闲置区块列表中,只注册对该qos域预约的区块群。在该情况下,在步骤s12中,控制器4也可以选择与由写入命令的qos域id所指定的qos域相对应的闲置区块列表,从该所选择的闲置区块列表选择一个闲置区块,将该所选择的闲置区块分配为写入目标区块。由此,能够防止与不同qos域相对应的数据混合存在于相同区块。
[0183]
控制器4将从主机2接收的写入数据写入到写入目标区块(步骤s12)。在步骤s12中,控制器4将逻辑地址(这里为lba)与写入数据的两者写入到写入目标区块。
[0184]
控制器4更新区块管理表格32,将与写入的数据相对应的位图旗标(即与写入该数据的实体存储位置的实体地址相对应的位图旗标)从0变更为1(步骤s13)。例如,如图18所示,假定将起始lba为lbax的16k字节更新数据写入到与区块blk#1的偏移+4~+7相对应的实体存储位置的情况。在该情况下,如图19所示,在区块blk#1用区块管理表格中,将与偏移+4~+7相对应的位图旗标分别从0变更为1。
[0185]
控制器4将对该写入命令的响应回传到主机2(步骤s14)。例如,如图18所示,如果将起始lba为lbax的16k字节更新数据写入到与区块blk#1的偏移+4~+7相对应的实体存储位置,那么将包含lbax、区块编号(=blk1)、偏移(=+4)、长度(=4)的响应从控制器4发送到主机2。
[0186]
当主机2接收到该响应时,主机2更新由主机2所管理的lut,将与被写入的写入数据相对应的逻辑地址分别映射到实体地址。如图20所示,lut包含与多个逻辑地址(例如lba)各自相对应的多个条目。在与某一逻辑地址(例如某一lba)相对应的条目中,存储表示存储着与该lba相对应的数据的nand型闪速存储器5内的位置(实体存储位置)的实体地址pba,即区块编号及偏移(区块内偏移)。如图18所示,如果将起始lba为lbax的16k字节更新数据写入到与区块blk#1的偏移+4~+7相对应的实体存储位置,那么如图20所示,更新lut,在与lbax相对应的条目中存储blk#1、偏移+4,在与lbax+1相对应的条目中存储blk#1、偏移+5,在与lbax+2相对应的条目中存储blk#1、偏移+6,在与lbax+3相对应的条目中存储blk#1、偏移+7。
[0187]
其后,主机2对闪速存储装置3发送用来使因所述更新数据的写入而成为无用的过往数据无效化的trim命令(步骤s21)。如图18所示,当过往数据存储在与区块blk#0的偏移+0、偏移+1、偏移+2、偏移+3相对应的位置时,如图21所示,从主机2对闪速存储装置3发送指定区块编号(=blk#0)、偏移(=+0)、长度(=4)的trim命令。闪速存储装置3的控制器4根据该trim命令来更新区块管理表格32(步骤s15)。在步骤s15中,如图21所示,在区块blk#0用区块管理表格中,将与偏移+0~+3相对应的位图旗标分别从1变更为0。
[0188]
图22表示闪速存储装置3所应用的读取命令。
[0189]
读取命令是对闪速存储装置3要求数据的读出的命令。该读取命令包含命令id、实体地址pba、长度、传输目标指示器。
[0190]
命令id是表示该命令为读取命令的id(命令代码),读取命令中包含读取命令用命令id。
[0191]
实体地址pba表示应被读出数据的最初的实体存储位置。实体地址pba是由区块编号、偏移(区块内偏移)指定的。
[0192]
长度表示应被读取的数据的长度。该数据长度可由grain的数量来指定。
[0193]
传输目标指示器表示应被传输所读出的数据的主机2内的存储器上的位置。
[0194]
一个读取命令能够指定多个实体地址pba(区块编号、偏移)与长度的组。
[0195]
图23表示读取动作。
[0196]
这里,假定从主机2接收到指定区块编号(=blk#2)、偏移(=+5)、长度(=3)的读取命令的情况。闪速存储装置4的控制器5基于区块编号(=blk#2)、偏移(=+5)、长度(=3)
从blk#2读取数据d1~d3。在该情况下,控制器4从blk#2的页1读取1页尺寸的数据,并从该读取数据提取数据d1~数据d3。接下来,控制器4将数据d1~数据d3传输到由传输目标指示器所指定的主机存储器上。
[0197]
图24表示根据来自主机2的读取命令,读取不同实体存储位置分别存储的数据部的动作。
[0198]
这里,假定从主机2接收到指定区块编号(=blk#2)、偏移(=+10)、长度(=2)、区块编号(=blk#2)、偏移(=+16)、长度(=4)的读取命令的情况。闪速存储装置4的控制器5基于区块编号(=blk#2)、偏移(=+10)、长度(=2),从blk#2的页2读取1页尺寸的数据,并从该读取数据提取数据d1~数据d2。接下来,控制器5基于区块编号(=blk#2)、偏移(=+16)、长度(=4),从blk#2的页4读取1页尺寸的数据(数据d3~数据d4)。然后,控制器5将通过结合数据d1~数据d2与数据d3~数据d4所获得的长度(=6)的读取数据传输到由读取命令内的传输目标指示器所指定的主机存储器上。
[0199]
由此,即便在区块内存在不良页的情况下,也不会发生读取错误,而能够从个别的实体存储位置读取数据部。另外,即便在数据是跨2个区块被写入的情况下,也能够通过发出一个读取命令来读取该数据。
[0200]
图25表示利用主机2与闪速存储装置3所执行的读取处理的顺序。
[0201]
主机2参照由主机2所管理的lut,将来自用户应用程序的读取请求所包含的逻辑地址转换成区块编号、偏移。然后,主机2将指定该区块编号、偏移、长度的读取命令发送到闪速存储装置3。
[0202]
当闪速存储装置3的控制器4从主机2接收到读取命令时,控制器4将与由读取命令所指定的区块编号相对应的区块决定为读取对象的区块,并且基于由该读取命令所指定的偏移而决定读取对象的页(步骤s31)。在步骤s31中,控制器4可首先使由读取命令所指定的偏移除以表示页尺寸的粒度的数量(这里是4)。然后,控制器4可将由该除法所得的商及余数分别决定为读取对象的页编号及读取对象的页内偏移位置。
[0203]
控制器4从nand型闪速存储器5读取由区块编号、偏移、长度所规定的数据(步骤s32),将该读取数据发送到主机2。
[0204]
图26表示闪速存储装置3所应用的gc控制命令。
[0205]
gc控制命令可包含命令id、策略、源qos域id、目的地qos域id等。
[0206]
命令id是表示该命令为gc控制命令的id(命令代码),gc控制命令中包含gc控制命令用命令id。
[0207]
策略是指定用来选择gc候补区块(gc源区块)的条件(gc策略)的参数。闪速存储装置3的控制器4支持多种gc策略。
[0208]
由控制器4所支持的gc策略中,可包含优先选择有效数据量较少的区块作为gc候补区块(gc源区块)的策略(greedy,贪婪法)。
[0209]
另外,由控制器4所支持的gc策略中,也可以包含如下策略:与具有较高更新频率的数据(热数据)集中的区块相比,优先选择具有较低更新频率的数据(冷数据)集中的区块作为gc候补区块(gc源区块)。
[0210]
进而,gc策略也可以指定gc开始条件。gc开始条件例如可表示剩余闲置区块的个数。
[0211]
控制器4利用有源区块列表来管理包含有效数据的区块群,在执行gc的情况下,基于由gc控制命令所指定的gc策略,从利用有源区块列表所管理的区块群中选择一个以上gc候补区块(gc源区块)。
[0212]
源qos域id是指定应将哪个qos域设为gc源的参数。控制器4从属于由源qos域id所指定的qos域的区块群、即与该qos域相对应的有源区块列表,选择一个以上gc候补区块(gc源区块)。
[0213]
目的地qos域id是指定应将哪个qos域设为gc目的地的参数。控制器4可选择属于由目的地qos域id所指定的qos域的闲置区块群内的一个以上闲置区块作为gc目的地区块。
[0214]
源qos域id及目的地qos域id既可以指定相同qos域,也可以指定互不相同的qos域。也就是说,源qos域id及目的地qos域id各自是指定多个qos域的任意的一个的参数。
[0215]
控制器4可在与源qos域相对应的剩余闲置区块的数量成为由策略所指定的阈值以下的情况下,开始gc。如果接收到包含指定强制执行gc的策略的gc控制命令,那么控制器4可在从主机2接收到该gc控制命令时立刻开始gc。
[0216]
图27表示gc用回调命令。
[0217]
gc用回调命令用于对主机2通知通过gc所复制的有效数据的逻辑地址、及表示该有效数据的复制目标位置的区块编号及偏移。
[0218]
gc用回调命令可包含命令id、逻辑地址、长度、目的地实体地址、源实体地址(可选)。
[0219]
命令id是表示该命令为gc用回调命令的id(命令代码),gc用回调命令中包含gc用回调命令用命令id。
[0220]
逻辑地址表示通过gc而从gc源区块复制到gc目的地区块的有效数据的逻辑地址。
[0221]
长度表示该被复制的数据的长度。该数据长度可由粒度(grain)的数量来指定。
[0222]
目的地实体地址表示被复制了有效数据的gc目的地区块内的位置。目的地实体地址是由区块编号、偏移(区块内偏移)来指定的。
[0223]
源实体地址(可选)表示曾存储有效数据的gc源区块内的位置。源实体地址是由区块编号、偏移(区块内偏移)来指定的。
[0224]
图28表示无用信息收集(gc)动作的程序。
[0225]
闪速存储装置3的控制器4基于由主机2所指定的策略,从属于由源qos域id所指定的qos域的区块群,选择有效数据与无效数据混合存在的一个以上的gc源区块(复制源区块)(步骤s41)。接下来,控制器4从属于由目的地qos域id所指定的qos域的闲置区块群中选择一个以上的闲置区块,将所选择的闲置区块分配为gc目的地区块(复制目标区块)(步骤s42)。
[0226]
控制器4将gc源区块(复制源区块)内的所有有效数据复制到gc目的地区块(复制目标区块)(步骤s44)。在步骤s44中,控制器4不仅复制gc源区块(复制源区块)内的有效数据,而是将该有效数据及与该有效数据相对应的逻辑地址的两者从gc源区块(复制源区块)复制到gc目的地区块(复制目标区块)。由此,能够在gc目的地区块(复制目标区块)内保存数据与逻辑地址的配对。
[0227]
然后,控制器4使用gc用回调命令,对主机2通知被复制的有效数据的逻辑地址、及表示被复制了该有效数据的gc目的地区块(复制目标区块)内的位置的目的地实体地址(区
块编号、偏移(区块内偏移))(步骤s44)。此外,在步骤s44中,控制器4也可以不仅通知被复制的有效数据的逻辑地址及目的地实体地址,还对主机2通知源实体地址。
[0228]
当主机2接收到该gc用回调命令时,主机2更新由主机2所管理的lut,将与被复制的有效数据相对应的逻辑地址分别映射到目的地实体地址(步骤s51)。
[0229]
图29表示为了进行gc而执行的数据复制动作的示例。
[0230]
在图29中,假定如下情况:将与gc源区块(这里为区块blk#50)的偏移+4相对应的位置所存储的有效数据(lba=10)复制到与gc目的地区块(这里为区块blk#100)的偏移+0相对应的位置,且将与gc源区块(这里为区块blk#50)的偏移+10相对应的位置所存储的有效数据(lba=20)复制到与gc目的地区块(这里为区块blk#100)的偏移+1相对应的位置。在该情况下,控制器4对主机通知{lba10、blk#100、偏移(=+0)、lba20、blk#100、偏移(=+1)}(gc用回调处理)。
[0231]
图30表示基于图29的数据复制动作的结果而更新的主机2的lut的内容。
[0232]
在该lut中,与lba10相对应的区块编号及偏移从blk#50、偏移(=+4)更新为blk#100、偏移(=+0)。同样地,与lba20相对应的区块编号及偏移从blk#50、偏移(=+10)更新为blk#100、偏移(=+1)。
[0233]
lut更新后,主机2可对闪速存储装置3发送指定blk#50及偏移(=+4)的trim命令,将与blk#50的偏移(=+4)相对应的位置所存储的数据无效化。进而,主机2可对闪速存储装置3发送指定blk#50及偏移(=+10)的trim命令,将与blk#50的偏移(=+10)相对应的位置所存储的数据无效化。
[0234]
图31表示对写入命令的响应与gc用回调处理的关系。
[0235]
有时,会发生在控制器4复制与某一逻辑地址相对应的有效数据期间,从主机2接收到指定该逻辑地址的写入命令的状况。
[0236]
在图31中,假定在执行图29的数据复制动作(与lba10相对应的数据复制动作)中,从主机2接收到指定lba10的写入命令的情况。
[0237]
控制器4将从主机2接收的写入数据写入到写入目标区块(这里为写入与blk#3的偏移+0相对应的位置)。然后,控制器4对主机2通知{lba10、blk#3、偏移(=+0)}。
[0238]
主机2更新lut,将与lba10相对应的区块编号及偏移从blk#50、偏移(+4)变更为blk#3、偏移(+0)。
[0239]
如果之后从控制器4对主机2通知lba10的目的地实体地址,那么表示与lba10相对应的存储着最新数据的位置的区块编号及偏移(blk#3、偏移(+0))可能会被错误地变更为与lba10相对应的目的地实体地址(这里为blk#100、偏移(=+0))。
[0240]
在本实施方式中,控制器4可不仅对主机2通知lba10及目的地实体地址(blk#100、偏移(=+0)),还通知源实体地址(blk#50、偏移(=+4))。主机2当源实体地址(blk#50、偏移(=+4))与根据lut而当前映射到lba10的区块编号、偏移不一致时,不更新lut。由此,能够防止表示存储着与lba10相对应的最新数据的位置的区块编号及偏移(blk#3、偏移(+0))被错误地变更为与lba10相对应的目的地实体地址(这里为blk#100、偏移(=+0))。
[0241]
图32表示gc控制命令的另一例。
[0242]
该图32的gc控制命令可指定源装置id与源qos域id的配对来代替源qos域id。进而,该图32的gc控制命令可指定目的地装置id与目的地qos域id的配对来代替目的地qos域
id。由此,能够使某一闪速存储装置3作为gc源而进行动作,并使另一闪速存储装置3作为gc目的地而进行动作。在源装置id与目的地装置id相同的情况下,在一个闪速存储装置3内执行gc。
[0243]
图33表示与图32的gc控制命令相对应的gc用回调命令的示例。
[0244]
图33的gc用回调命令包含目的地装置id与目的地实体地址的配对来代替目的地实体地址。另外,图33的gc用回调命令可包含源装置id与源实体地址的配对(可选)来代替源实体地址(可选)。
[0245]
现在,摄像使装置id为1的闪速存储装置3作为gc源而进行动作,且使装置id为2的闪速存储装置3作为gc目的地而进行动作的情况。主机2可将指定源装置id#1及目的地装置id#2的gc控制命令发送到装置id#1的闪速存储装置3及装置id#2的闪速存储装置3。
[0246]
装置id#1的闪速存储装置3从属于由源qos域id所指定的qos域的区块群中选择gc源区块,向由目的地装置id所指定的闪速存储装置(装置id#2的闪速存储装置)发送gc源区块内的有效数据与该有效数据的逻辑地址。gc源区块内的有效数据与该有效数据的逻辑地址例如是经由图3的开关1而从装置id#1的闪速存储装置3传输到装置id#2的闪速存储装置3。
[0247]
装置id#2的闪速存储装置3从属于由目的地qos域id所指定的qos域的闲置区块群中选择gc目的地区块,将经由开关1而接收的有效数据及逻辑地址写入(复制)到gc目的地区块。
[0248]
装置id#2的闪速存储装置3利用gc用回调命令来对主机2通知被复制的有效数据的逻辑地址、及被复制了该有效数据的目的地实体地址(区块编号、偏移)。
[0249]
装置id#1的闪速存储装置3利用gc用回调命令来对主机2通知被复制的有效数据的逻辑地址、及曾存储该有效数据的源实体地址(区块编号、偏移)。
[0250]
图34表示写入/读取/gc动作。
[0251]
首先,对写入来自主机2的数据的主机写入动作进行说明。
[0252]
(1)控制器4从主机2接收lba及写入数据。
[0253]
(2)控制器4将lba与写入数据的两者写入到写入目标区块。在未分配写入目标区块的情况下,控制器4从闲置区块列表选择一个闲置区块,将该所选择的闲置区块分配为新写入目标区块。然后,控制器4将lba与写入数据的两者写入该新写入目标区块。
[0254]
(3)控制器4对主机2通知该lba、及表示被写入该写入数据的写入目标区块内的位置的实体地址pba。该实体地址pba是由区块编号及偏移表示的。当写入目标区块整体被数据占满时,控制器4将该写入目标区块注册到有源区块列表。
[0255]
其次,对读取动作进行说明。
[0256]
(4)主机2参照由主机2管理的lut,将来自用户应用程序的读取请求所包含的lba转换成读取用实体地址pba(区块编号、偏移)。
[0257]
(5)基于从主机2接收的读取用实体地址pba(区块编号、偏移),控制器4将具有该区块编号的区块决定为读取对象的区块。读取对象的区块为由有源区块列表所管理的区块群(有源区块)中的任一个、或当前的gc源区块、或当前的写入目标区块。然后,控制器4基于偏移而从读取对象的区块读取数据。
[0258]
其次,对gc动作进行说明。
[0259]
(6)控制器4选择gc源区块(复制源区块)及gc目的地区块(复制目标区块),将gc源区块内所存储的有效数据与该有效数据的lba的两者复制到gc目的地区块。
[0260]
(7)控制器4对主机2通知被复制的有效数据的lba、及表示被复制了该有效数据的gc目的地区块内的位置的pba(区块编号、偏移)的两者。
[0261]
或者,控制器4也可以对主机2通知被复制的有效数据的lba、表示被复制了该有效数据的gc目的地区块内的位置的pba(区块编号、偏移)、及表示曾存储该有效数据的gc源区块内的位置的pba(区块编号、偏移)。
[0262]
图35表示用来管理参照计数的区块管理表格的构成例。
[0263]
主机2支持重复排除功能。因此,当与由用户应用程序要求写入的数据一致的重复数据已经存在于闪速存储装置3(nand型闪速存储器5)中时,主机2不将该数据写入到闪速存储装置3,而仅将指代存储着该数据的位置(区块编号、偏移)的指示器与被要求写入的数据的lba建立关联。因此,闪速存储装置3(nand型闪速存储器5)中所存储的各4k字节数据可能不仅被一个逻辑地址参照,而且被多个逻辑地址参照。
[0264]
在本实施方式中,闪速存储装置3具有针对每4k字节数据管理参照计数的功能。这里,与某一数据相对应的参照计数表示参照了该数据的逻辑地址的数量。
[0265]
在图35中,例示了区块blk#1用区块管理表格。
[0266]
区块blk#1用区块管理表格包含与区块blk#1的多个偏移值各自相对应的多个条目。
[0267]
例如,在与偏移+0相对应的条目中,存储与区块blk#1的偏移+0相对应的位置所存储的4kb数据所对应的参照计数。同样地,在与偏移+1相对应的条目中,存储与区块blk#1的偏移+1相对应的位置所存储的4kb数据所对应的参照计数。
[0268]
参照计数为1以上的数据为有效数据,参照计数为0的数据为无效数据。
[0269]
闪速存储装置3基于从主机2接收的重复命令/ttim命令,来使参照计数增加/减少。
[0270]
图36表示为了管理参照计数而应用于闪速存储装置3的重复命令。
[0271]
重复命令是对闪速存储装置3要求将某一实体地址(区块编号、偏移)中所存储的数据的参照计数增加1的命令。
[0272]
该重复命令可包含命令id、实体地址pba、及长度等。
[0273]
命令id是表示该命令为重复命令的id(命令代码),重复命令中包含重复命令用命令id。
[0274]
实体地址pba表示存储着应使参照计数增加1的数据的最初的实体存储位置。实体地址pba是由区块编号、偏移(区块内偏移)来指定的。
[0275]
长度表示应使参照计数增加1的数据的长度。该数据长度能够由粒度(grain)的数量来指定。
[0276]
控制器4当从主机2接收到包含表示存储着应使参照计数增加的数据的实体存储位置的区块编号及区块内偏移的重复命令时,更新区块管理表格32,使与重复命令所包含的区块编号及区块内偏移相对应的实体存储位置的数据所对应的参照计数增加1。
[0277]
图37表示为了管理参照计数而应用于闪速存储装置3的trim命令。
[0278]
该trim命令为对闪速存储装置3要求使某一实体地址(区块编号、偏移)中所存储
的数据的参照计数减少1的命令。
[0279]
该trim命令可包含命令id、实体地址pba、及长度等。
[0280]
命令id是表示该命令为trim命令的id(命令代码),trim命令中包含trim命令用命令id。
[0281]
实体地址pba表示存储着应使参照计数减少1的数据的最初的实体存储位置。实体地址pba是由区块编号、偏移(区块内偏移)来指定的。
[0282]
长度表示应使参照计数减少1的数据的长度。该数据长度能够由粒度(grain)的数量来指定。
[0283]
控制器4当从主机2接收到包含表示存储着应使参照计数减少的数据的实体存储位置的区块编号及区块内偏移的trim命令时,更新区块管理表格32,使与trim命令所包含的区块编号及区块内偏移相对应的实体存储位置的数据所对应的参照计数减少1。
[0284]
图38表示参照计数增加/减少处理。
[0285]
当闪速存储装置3的控制器4从主机2接收到重复命令时,控制器4使与由重复命令所指定的实体地址pba(区块编号、偏移)相对应的参照计数、即与由该区块编号及偏移所指定的nand型闪速存储器5内的实体存储位置所存储的数据相对应的参照计数增加1(步骤s61)。在该情况下,控制器4更新与具有由重复命令所指定的区块编号的区块相对应的区块管理表格32。在该区块管理表格32的更新中,使与由重复命令所指定的偏移相对应的区块管理表格32内的条目中所存储的参照计数增加1。在由重复命令所指定的长度为2以上的情况下,不仅使与由重复命令所指定的偏移相对应的参照计数增加1,也使与该偏移后续的若干个偏移相对应的参照计数增加1。
[0286]
在闪速存储装置3的控制器4从主机2接收到trim命令时,控制器4使与由trim命令所指定的实体地址pba(区块编号、偏移)相对应的参照计数、即与由该区块编号及偏移所指定的nand型闪速存储器5内的实体存储位置所存储的数据相对应的参照计数减少1(步骤s62)。在该情况下,控制器4更新与具有由trim命令所指定的区块编号的区块相对应的区块管理表格32。在该区块管理表格32的更新中,使与由trim命令所指定的偏移相对应的区块管理表格32内的条目中所存储的参照计数减少1。在由trim命令所指定的长度为2以上的情况下,不仅使与由trim命令所指定的偏移相对应的参照计数减少1,也使与该偏移后续的若干个偏移相对应的参照计数减少1。
[0287]
在gc中,控制器4参照与gc源区块相对应的区块管理表格,以尺寸为4kb的数据为单位,判定gc源区块内的数据为有效数据或是无效数据。控制器4判定参照计数为0的数据是无效数据,且判定参照计数为1以上的数据是有效数据。然后,控制器4将有效数据(参照计数为1以上的数据)及与该有效数据相对应的逻辑地址从gc源区块复制到gc目的地区块。
[0288]
更详细来说,控制器4在执行nand型闪速存储器5的无用信息收集的情况下,选择用于无用信息收集的复制源区块及复制目标区块。控制器4将复制源区块内所存储的参照计数为1以上的第1数据(有效数据)与第1数据的逻辑地址的两者复制到复制目标区块。然后,控制器4对主机2通知第1数据的逻辑地址、复制目标区块的区块编号、及以粒度的倍数表示被复制了第1数据的相对于复制目标区块前端的偏移位置的区块内偏移。
[0289]
如以上说明,根据本实施方式,并非由主机2而是由闪速存储装置3来决定应被写入来自主机2的数据(用户数据)的写入目标区块及该写入目标区块内的位置(写入目标位
置)。闪速存储装置3将用户数据写入到写入目标区块内的写入目标位置,然后,对主机2通知写入目标区块的区块编号及区块内偏移,该区块内偏移是以具有与页尺寸不同尺寸的粒度的倍数来表示写入目标区块的前端至写入目标位置的偏移。由此,主机2无需在意区块尺寸、页写入顺序制约、不良页、页尺寸等便能够将用户数据写入到nand型闪速存储器5,进而,能够将由区块编号及区块内偏移所表示的实体地址(抽象化的实体地址)映射到该用户数据的逻辑地址。
[0290]
这样一来,闪速存储装置3能够利用决定写入目标区块及该写入目标区块内的位置,且将区块编号与区块内偏移回传到主机2的这一构成,来实现上位阶层(主机2)的应用程序级地址转换表格与现有型ssd的lut级地址转换表格的合并,而且,闪速存储装置3能够考虑nand型闪速存储器5的特征/制约来控制nand型闪速存储器5。因此,能够实现主机2与闪速存储装置3之间适当的作用分配,由此,能够实现包含主机2与闪速存储装置3的系统整体的i/o性能的提升。
[0291]
另外,根据本实施方式,并非由管理地址转换表格的主机2而是由闪速存储装置3来选择用于无用信息收集的复制源区块及复制目标区块,并将复制源区块内所存储的有效数据复制到复制目标区块。然后,闪速存储装置3对主机2通知被复制的有效数据的逻辑地址、复制目标区块的区块编号、及表示被复制了有效数据的复制目标区块内的位置的区块内偏移。这样一来,利用闪速存储装置3来执行无用信息收集,并且从闪速存储装置3对主机2通知逻辑地址、区块编号、及区块内偏移,因此主机2能够使用地址转换表格(lut)来正确地管理逻辑地址各自与nand型闪速存储器5的实体地址(即区块编号与区块内偏移的配对)各自之间的映射。另外,能够将应用程序级gc与闪速存储装置3的gc合并,因此能够大幅降低写入放大。
[0292]
此外,闪速存储装置3也可以用作设置在存储器阵列内的多个闪速存储装置3的一个。存储器阵列可经由缆线或网络而连接于像服务器计算机这样的信息处理装置。存储器阵列包含控制该存储器阵列内的多个闪速存储装置3的控制器。在将闪速存储装置3应用于存储器阵列的情况下,可使该存储器阵列的控制器作为闪速存储装置3的主机2而发挥功能。
[0293]
另外,在本实施方式中,例示了nand型闪速存储器作为非易失性存储器。然而,本实施方式的功能也能够应用于例如mram(magnetoresistive random access memory,磁阻式随机存取存储器)、pram(phase change random access memory,相变随机存取存储器),reram(resistive random access memory,可变电阻式随机存取存储器)、或feram(ferroelectric random access memory,铁电随机存取存储器)这样的其它各种非易失性存储器。
[0294]
对本发明的若干个实施方式进行了说明,但这些实施方式是作为示例而提出的,并非意在限定发明的范围。这些新颖的实施方式能够以其它各种方式实施,且能够在不脱离发明的主旨的范围内进行各种省略、置换、变更。这些实施方式及其变化包含在发明的范围或主旨内,并且包含在权利要求书所记载的发明及其均等的范围内。
[0295]
[符号的说明]
[0296]2ꢀꢀꢀꢀꢀꢀꢀ
主机
[0297]3ꢀꢀꢀꢀꢀꢀꢀ
闪速存储装置
[0298]4ꢀꢀꢀꢀꢀꢀꢀ
控制器
[0299]5ꢀꢀꢀꢀꢀꢀꢀ
nand型闪速存储器
[0300]
21
ꢀꢀꢀꢀꢀꢀ
写入动作控制部
[0301]
22
ꢀꢀꢀꢀꢀꢀ
读取动作控制部
[0302]
23
ꢀꢀꢀꢀꢀꢀ
gc动作控制部
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1