CN114637693A - 存储器系统及控制方法 - Google Patents
存储器系统及控制方法 Download PDFInfo
- Publication number
- CN114637693A CN114637693A CN202110947692.0A CN202110947692A CN114637693A CN 114637693 A CN114637693 A CN 114637693A CN 202110947692 A CN202110947692 A CN 202110947692A CN 114637693 A CN114637693 A CN 114637693A
- Authority
- CN
- China
- Prior art keywords
- buffer
- data
- area
- buffers
- allocated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0626—Reducing size or complexity of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Debugging And Monitoring (AREA)
- Read Only Memory (AREA)
Abstract
本发明的一个实施方式提供能够削减所需的存储器资源的量的存储器系统及控制方法。控制器从主机接收用于向第1区顺序写入数据的第1命令。在存在被分配了第1区的第1缓冲器的情况下,控制器向第1缓冲器保存第1数据。在不存在第1缓冲器而且存在空闲的缓冲器的情况下,控制器将第1区分配至空闲的缓冲器,向被分配了第1区的空闲的缓冲器保存第1数据。在不存在第1缓冲器而且不存在空闲的缓冲器的情况下,控制器向多个缓冲器之中的为了保存数据的最后更新最早的缓冲器追加分配第1区,向被追加分配了第1区的缓冲器保存第1数据。
Description
关联申请:
本申请以日本专利申请2020-207741号(申请日:2020年12月15日)作为在先申请享受优先权。本申请通过参照该在先申请从而包含在先申请的全部内容。
技术领域
本发明的实施方式涉及具备非易失性存储器的存储器系统及非易失性存储器的控制方法。
背景技术
近年来,具备非易失性存储器的存储器系统广为普及。作为这样的存储器系统之一,已知具备NAND型闪存的固态驱动器(SSD)。
作为用于像SSD那样的存储器系统与主机之间的通信的逻辑性的接口的规范,已知NVM ExpressTM(NVMeTM)。在NVMe规范的接口中,规定了分区命名空间。在分区命名空间中,存储器系统的逻辑地址范围被分割为多个区(zone)。
在存储器系统中,为了按每个区缓冲应该向不同区分别写入的数据,有时准备数量与区的数量相同的缓冲器。在该情况下,在存储器系统中需要管理的区的数量较多的情况下,为了这些区而消耗大量的存储器资源。
因此,在存储器系统中,要求实现能够削减所需的存储器资源的量的新技术。
发明内容
本发明的一个实施方式所要解决的课题在于,提供能够削减所需的存储器资源的量的存储器系统及控制方法。
根据实施方式,存储器系统具备:非易失性存储器;以及控制器,构成为与非易失性存储器电连接,使用由非易失性内存主机控制器接口规范NVM express规定的被分割为多个区的分区命名空间,对非易失性存储器进行控制。控制器对多个缓冲器进行管理。多个缓冲器的数量比多个区的数量少。控制器从主机接收与第1数据建立了关联的第1命令,所述第1命令是用于向多个区之中的第1区顺序写入数据的命令。控制器根据接收到第1命令的情况,在多个缓冲器之中存在被分配了第1区的第1缓冲器的情况下,向第1缓冲器保存第1数据。控制器根据接收到第1命令的情况,在多个缓冲器之中不存在第1缓冲器,而且多个缓冲器之中存在未被分配任何区的空闲的缓冲器的情况下,将第1区分配至空闲的缓冲器,并向被分配了第1区的空闲的缓冲器保存第1数据。控制器根据接收到第1命令的情况,在多个缓冲器之中不存在第1缓冲器,而且多个缓冲器之中不存在未被分配任何区的空闲的缓冲器的情况下,向多个缓冲器之中的为了保存数据的最后更新最早的缓冲器追加分配第1区,并向被追加分配了第1区的缓冲器保存第1数据。
附图说明
图1是表示包含实施方式所涉及的存储器系统的信息处理系统的构成例的框图。
图2是表示由NVMe规范规定的分区命名空间的构成例的图。
图3是表示在实施方式所涉及的存储器系统中执行的写指针的更新动作的图。
图4是表示在比较例所涉及的存储器系统中执行的缓冲处理的图。
图5是表示在比较例所涉及的存储器系统中执行的其他缓冲处理的图。
图6是表示实施方式所涉及的存储器系统中设置的多个缓冲器、数据/缓冲器分配控制部、数据/区分配控制部之间的关系的图。
图7A是表示在实施方式所涉及的存储器系统中执行的缓冲处理的第一个处理的图。
图7B是表示在实施方式所涉及的存储器系统中执行的缓冲处理的第二个处理的图。
图7C是表示在实施方式所涉及的存储器系统中执行的缓冲处理的第三个处理的图。
图7D是表示在实施方式所涉及的存储器系统中执行的缓冲处理的第四个处理的图。
图8A是表示在实施方式所涉及的存储器系统中执行的超越处理的第一个处理的图。
图8B是表示在实施方式所涉及的存储器系统中执行的超越处理的第二个处理的图。
图8C是表示在实施方式所涉及的存储器系统中执行的超越处理的第三个处理的图。
图8D是表示在实施方式所涉及的存储器系统中执行的超越处理的第四个处理的图。
图8E是表示在实施方式所涉及的存储器系统中执行的超越处理的第五个处理的图。
图9是表示在实施方式所涉及的存储器系统中执行的命令处理的过程的流程图。
图10是表示在实施方式所涉及的存储器系统中执行的数据/缓冲器分配处理的过程的流程图。
图11是表示在实施方式所涉及的存储器系统中执行的超越处理的过程的流程图。
附图标记说明
1……信息处理系统,2……主机,3……SSD,4……控制器,5……NAND型闪存,6……DRAM,10……总线,11……主机接口,12……CPU,13……NAND接口,14……DRAM接口,15……DMAC,16……缓冲器电路,17……ECC编码/解码部,21……数据/缓冲器分配控制部,22……数据/区分配控制部,31……L2P表,32……缓冲器更新履历管理表。
具体实施方式
以下参照附图说明实施方式。
图1是表示包含实施方式所涉及的存储器系统的信息处理系统1的构成例的框图。信息处理系统1包含主机(主机设备)2和SSD3。
存储器系统是构成为向非易失性存储器写入数据并从非易失性存储器读取数据的半导体存储设备。存储器系统例如可以作为包含NAND型闪存5的SSD3实现。
SSD3也可以与主机2经由线缆或者网络连接。或者,SSD3也可以被内置于主机2。作为用于连接主机2与SSD3的逻辑接口的规范,可以使用NVMe规范。
主机2是构成为对SSD3进行控制的信息处理装置。主机2的例子包含个人计算机、服务器计算机、便携终端、车载设备。
主机2包含处理器101和存储器102。处理器101是构成为对主机2内的各组件的动作进行控制的CPU(中央处理单元(Central Processing Unit))。处理器101执行从与主机2连接的其他存储设备或者从SSD3加载到存储器102中的软件(主机软件)。主机软件包含操作系统、文件系统、设备驱动器、应用程序等。
存储器102是被设置于主机2的主存储器。存储器102例如通过像DRAM(动态随机存取存储器(Dynamic Random Access Memory))那样的随机存取存储器来实现。存储器102的存储区域的一部分被用于保存一个以上的SQ/CQ对。各SQ/CQ对包含一个以上的子任务队列(SQ)以及与该一个以上的子任务队列(SQ)建立了关联的完成队列(CQ)。
子任务队列(SQ)是被用于向SSD3发行命令的队列。完成队列(CQ)是被用于从SSD3接收表示已完成的命令的状态的命令完成的队列。
主机2经由各SQ/CQ对中包含的一个以上的子任务队列(SQ)向SSD3发送各种命令。
SSD3构成为依据NVMe规范来执行与主机2的通信。
该NVMe规范的接口包含经由PCI expressTM(PCIeTM)总线的接口(NVMe overPCIe)、以及经由像以太网TM那样的网络的接口(NVMe over Fabrics:NVMe-oF)。SSD3所依据的接口规范既可以是NVMe over PCIe,也可以是NVMe-oF。
在NVMe规范中,可以使用多个命名空间。多个命名空间是相互独立的逻辑地址范围。逻辑地址是为了逻辑性地在SSD3的存储器空间内进行地址指定而由主机2使用的地址。作为该逻辑地址,可以使用逻辑块地址(logical block address)。各命名空间被主机2用于访问SSD3。通过使用多个命名空间,能够使一个存储设备如同多个存储设备那样动作。
进而,在NVMe规范中,规定了分区命名空间。分区命名空间是被分割为多个区的命名空间。各区包含连续的逻辑地址。
SSD3支持由NVMe规范规定的分区命名空间。SSD3构成为向分区命名空间中包含的多个区中的各个区顺序写入数据。
SSD3具备控制器4和非易失性存储器(例如NAND型闪存5)。SSD3也可以还具备随机存取存储器、例如DRAM6。
NAND型闪存5包含存储器单元阵列,该存储器单元阵列包含以矩阵状配置的多个存储器单元。NAND型闪存5既可以是2维构造的闪存,也可以是3维构造的闪存。
NAND型闪存5的存储器单元阵列包含多个块BLK0~BLKx-1。块BLK0~BLKx-1各自包含多个页(page)(在此为页P0~Py-1)。各页包含与同一字线连接的多个存储器单元。块BLK0~BLKx-1各自是删除数据的数据删除动作的单位。页P0~Py-1各自是数据写入动作及数据读取动作的单位。
控制器4也可以通过像System-on-a-chip(片上系统(SoC))那样的电路实现。
控制器4通过对NAND型闪存5进行控制,对数据写入动作和数据读取动作进行控制,数据写入动作将从主机2接收的数据向NAND型闪存5写入,数据读取动作从NAND型闪存5读取由主机2请求的读取对象数据。控制器4经由依据Toggle NAND(切换NAND)闪存接口或者开放NAND闪存接口(ONFI)的NAND接口13,与NAND型闪存5电连接,但不限定于此。控制器4作为构成为对NAND型闪存5进行控制的存储器控制器进行动作。
控制器4可以作为构成为执行NAND型闪存5的数据管理及块管理的闪存转换层(FTL)发挥功能。
由FTL执行的数据管理包含(1)表示各个逻辑地址与NAND型闪存5的各个物理地址之间的对应关系的映射信息的管理、(2)用于隐藏NAND型闪存5的制约(例如,页单位的读/写动作和块单位的删除动作)的处理等。与某逻辑地址对应的物理地址表示被写入了与该逻辑地址对应的数据的非易失性存储器5内的物理性的存储位置。控制器4使用逻辑物理地址转换表(logical-to-physical address translation table:L2P表)31,对各个逻辑地址与各个物理地址之间的对应关系进行管理。如上所述,作为逻辑地址,可以使用逻辑块地址(LBA)。
进而,控制器4构成为使用由NVMe规范规定的分区命名空间,对NAND型闪存5进行控制。
图2是表示由NVMe规范规定的一个分区命名空间的构成例的图。
各分区命名空间的逻辑块地址范围从LBA 0开始。例如,图2的分区命名空间的逻辑块地址范围包含LBA 0到LBAz-1的连续z个LBA。该分区命名空间被分割为区0到区k的k+1个区。这些区各自包含连续的非重复的逻辑块地址。
更详细而言,区0、区1、……、区k被分配至分区命名空间。LBA0表示区0的最小的LBA,LBAz-1表示区k的最大的LBA。区1包含LBAm、LBA m+1、……、LBAn-2、LBAn-1。LBA m表示区1的最小的LBA,LBA n-1表示区1的最大的LBA。
控制器4例如可以对NAND型闪存5内的多个存储区域(物理存储区域)中的各个存储区域与多个区中的各个区之间的映射进行管理。在该情况下,控制器4也可以将NAND型闪存5中包含的多个块之中的至少一个块分配为一个区用的物理存储区域。
在控制器4从主机2接收了请求向特定的区写入数据的命令的情况下,控制器4向被分配给通过所接收的命令被指定的区即该特定的区的、NAND型闪存5内的特定的物理存储区域,顺序写入数据。其结果,与该特定的区中包含的连续的LBA对应的数据,被写入至被分配给该特定的区的、特定的物理存储区域内的连续的物理存储位置。
因此,在进行与某区中包含的连续的LBA对应的数据的顺序读时,控制器4仅通过对被分配为该区用的物理存储区域的至少一个块进行读访问,就能够高效地执行这些数据的顺序读。
图3是表示在SSD3中执行的写指针的更新动作的图。
SSD3的控制器4对与多个区分别对应的多个写指针进行管理。各写指针表示与该写指针对应的区内的下一能够写入的LBA。如果向某区顺序写入数据,则控制器4使与该区对应的写指针的值增加与被写入了数据的逻辑块的数量相应的量。
在此,以区1为例说明写指针的更新动作。区1包含LBA m至LBA n-1的逻辑块地址范围。LBA m是区1的最小的逻辑块地址、即区1的区开始逻辑块地址(ZSLBA)。
在区1为不包含有效数据的空状态的情况下,与区1对应的写指针表示作为区1的区开始逻辑块地址的LBA m。在通过用于向区1写入数据的命令被指定的写入目的地位置(开始LBA)等于区1的写指针(在此为LBAm)的情况下,控制器4向从该被指定的开始LBA开始的LBA范围、例如LBA m和LBA m+1写入数据。控制器4对区1的写指针进行更新,以使区1的写指针的值增加与被写入了数据的逻辑块的数量相应的量。例如,在向LBA m和LBA m+1写入了数据的情况下,控制器4将写指针的值更新为LBA m+2。LBA m+2表示区1内的未写入LBA之中的最小的LBA、即区1内的下一能够写入的LBA。
返回图1的说明。控制器4不仅包含上述的NAND接口13,而且还包含主机接口11、CPU12、DRAM接口14、直接存储器访问控制器(DMAC)15、缓冲器电路16和ECC(纠错码(ErrorCorrection Code))编码/解码部17。这些主机接口11、CPU12、NAND接口13、DRAM接口14、DMAC15、缓冲器电路16、ECC编码/解码部17经由总线10被相互连接。
主机接口11是构成为执行与主机2的通信的主机接口电路。主机接口11例如是PCIe控制器。或者,在SSD3是内置网络接口控制器的构成的情况下,主机接口11也可以作为网络接口控制器的一部分来实现。
主机接口11依据NVMe规范执行与主机2的通信。主机接口11包含仲裁机构。该仲裁机构是用于从主机2的存储器102上存在的多个子任务队列中选择应该获取命令的子任务队列的机构。仲裁机构既可以是轮询仲裁机构,也可以是加权轮询仲裁机构。
主机接口11从主机2接收(获取)各种命令。这些命令包含由NVMe规范规定的分区命名空间命令集。分区命名空间命令集包含多个种类的命令,该多个种类的命令用于使得主机2能够使用分区命名空间对SSD3进行控制。
这多个种类的命令包含用于向区顺序写入数据的命令。该命令至少包含指定数据应该被写入的区的参数。
例如,通过NVMe规范的分区命名空间命令集规定的地址特定写命令,对数据应该被写入的区以及该区内的写入目的地位置(开始LBA)这双方进行指定。地址特定写命令的例子包含写命令、写零命令、复制命令。
例如,作为地址特定写命令而被使用的写命令,是用于将应该写入的数据(用户数据)向NAND型闪存5写入的命令(写请求)。该写命令包含:指定数据应该被写入的命名空间的命名空间标识符、开始LBA、该数据的大小(应该被写入的逻辑块的数量)、以及表示保存着该数据的主机2的存储器102内的位置的数据指针(缓冲器地址)等。写命令不包含指定区开始逻辑块地址(ZSLBA)的专用的参数(字段),因此写命令中包含的开始LBA作为指定数据应该被写入的区以及该区内的写入目的地位置这双方的参数被使用。在该情况下,写命令中包含的开始LBA的高位比特部作为与该写命令建立了关联的写数据应该被写入的区的ZSLBA被使用。写命令中包含的开始LBA的低位比特部表示该区内的写入目的地位置。以下,将作为地址特定写命令被使用的写命令简称为写命令。
在通过请求向区1写入的写命令被指定的开始LBA不等于区1的写指针所表示的LBA的情况下,控制器4终止该写命令的处理。在该情况下,控制器4向主机2返回表示与该写命令对应的写处理的错误的命令完成。由此,能够防止在各区中执行非顺序的写处理。
主机2在向SSD3发行了请求向某区写入的写命令的情况下,直到从SSD3接收与该写命令对应的命令完成为止,不能发行向与该区相同的区的下一写命令。这是因为,在NVMe规范中允许存储设备以任意的顺序执行命令,所以如果多个写命令被处理的顺序由存储设备调换,则在该区内的写处理中有时发生错误。
接下来,说明通过NVMe规范的分区命名空间命令集规定的区附加命令。
区附加命令与写命令同样是用于将应该写入的数据(用户数据)向NAND型闪存5写入的命令(写请求)。但是,区附加命令与写命令不同,仅指定数据应该被写入的区,而不指定该区内的写入目的地位置。
由SSD3的控制器4以该区内的写入被顺序执行的方式自动地决定区内的写入目的地位置。主机2被允许同时向SSD3发行指定相同区的多个区附加命令。因此,与使用写命令的情况相比,能够提高写入性能。
区附加命令例如包含:指定数据应该被写入的命名空间的命名空间标识符、表示数据应该被写入的区的最小LBA的区开始逻辑块地址(ZSLBA)、该数据的大小(应该被写入的逻辑块的数量)、以及表示保存着该数据的主机2的存储器102内的位置的数据指针(缓冲器地址)等。主机2能够经由一个以上的子任务队列向SSD3同时发行指定相同区的多个区附加命令。
在从主机2接收了某区附加命令的情况下,控制器4参照与通过该接收的区附加命令被指定的区对应的写指针。然后,控制器4将通过该写指针表示的下一能够写入逻辑块地址,决定作为该被指定的区内的写入目的地位置。控制器4将与该接收的区附加命令建立了关联的数据,向该被指定的区内的被决定的写入目的地位置写入。然后,控制器4向主机2发送包含表示该数据被写入的写入目的地位置(LBA)的信息的命令完成。控制器4由此向主机2通知与所接收的区附加命令建立了关联的数据被写入的LBA。
在以后的说明中,主要说明使用区附加命令作为用于向区顺序写入数据的命令的情况。此外,也可以代替区附加命令,而使用指定区和区内的写入目的地位置这双方的写命令,作为用于向该区顺序写入数据的命令。
NAND接口13是构成为在CPU12的控制之下对NAND型闪存5进行控制的NAND控制器。在NAND型闪存5由多个NAND型闪存芯片(NAND型闪存颗粒)构成的情况下,NAND接口13也可以经由多个通道(Ch)而与这些NAND型闪存芯片分别连接。
缓冲器电路16包含多个缓冲器(缓冲器#0、缓冲器#1、……、缓冲器#q)。缓冲器#0~#q例如是SRAM(静态随机存取存储器(Static Random Access Memory))。缓冲器#0~#q被分配于缓冲器电路16的存储区域内。或者,缓冲器#0~#q也可以被分配于DRAM6的存储区域内。
缓冲器#0~#q的数量可以被设定为比分区命名空间中包含的区的数量少的数量。各个缓冲器#0~#q被用于临时地保存应该向任意的一个以上的区写入的数据。
DRAM接口14是构成为在CPU12的控制之下对DRAM6进行控制的DRAM控制器。
DRAM6的存储区域的一部分也可以作为存储L2P表31及缓冲器更新履历表32的区域被利用。缓冲器更新履历表32被用于对履历信息进行管理。履历信息表示缓冲器#0~#q为了保存数据而被更新的顺序。
DMAC15在CPU12的控制之下,执行主机2的存储器102与各个缓冲器#0~#q之间的数据转发。
在应该向NAND型闪存5写数据时,ECC编码/解码部17通过对数据(应该写入的数据)进行编码,从而向该数据附加纠错码(ECC)作为冗余码。在从NAND型闪存5读数据时,ECC编码/解码部17使用对所读的数据附加的ECC,进行该数据的纠错。
CPU12是构成为对主机接口11、NAND接口13、DRAM接口14、DMAC15、缓冲器电路16和ECC编码/解码部17进行控制的处理器。CPU12向DRAM6加载NAND型闪存5或者未图示的ROM中保存的控制程序(固件),然后通过执行该固件来进行各种处理。
CPU12能够作为数据/缓冲器分配控制部21及数据/区分配控制部22发挥功能。上述数据/缓冲器分配控制部21及数据/区分配控制部22各自的一部分或者全部也可以由控制器4内的专用的硬件实现。
在控制器4从主机2接收了区附加命令时,数据/缓冲器分配控制部21决定为了临时地保存与所接收的区附加命令建立了关联的数据而应该被使用的缓冲器(保存目的地缓冲器)。在该情况下,为了能够使数据不偏向于特定的缓冲器而在缓冲器#0~#q中分散,而且能够使应该向相同的区写入的数据被保存至相同的缓冲器,数据/缓冲器分配控制部21执行以下的处理。
在缓冲器#0~#q之中不存在已经被分配了通过所接收的区附加命令指定的区的缓冲器,而且缓冲器#0~#q之中存在空闲的缓冲器的情况下,数据/缓冲器分配控制部21将该空闲的缓冲器决定作为保存目的地缓冲器,并向该空闲的缓冲器分配通过所接收的区附加命令指定的区。空闲的缓冲器是未被分配任何区的缓冲器。然后,数据/缓冲器分配控制部21从主机2的存储器102取得与所接收的区附加命令建立了关联的数据,并将所取得的数据向被决定作为保存目的地缓冲器的该空闲的缓冲器保存。
在缓冲器#0~#q之中存在已经被分配了通过所接收的区附加命令指定的区的缓冲器的情况下,数据/缓冲器分配控制部21将该缓冲器决定作为保存目的地缓冲器。然后,数据/缓冲器分配控制部21从主机2的存储器102取得与所接收的区附加命令建立了关联的数据,并将所取得的数据向被决定作为保存目的地缓冲器的该缓冲器保存。
在各个缓冲器#0~#q已经被分配了区,而且缓冲器#0~#q之中不存在已经被分配了通过所接收的区附加命令指定的区的缓冲器的情况下,数据/缓冲器分配控制部21在缓冲器#0~#q之中,将为了保存数据的最后更新最早的缓冲器,决定作为与所接收的区附加命令建立了关联的数据应该被保存至的保存目的地缓冲器。在此,为了保存数据的最后更新最早的缓冲器,意味着缓冲器#0~#q之中的从用于保存数据的最后的更新经过了最长时间的缓冲器。数据/缓冲器分配控制部21向所决定的保存目的地缓冲器,追加分配通过所接收的区附加命令指定的区。然后,数据/缓冲器分配控制部21从主机2的存储器102取得与所接收的区附加命令建立了关联的数据,并将所取得的数据向所决定的保存目的地缓冲器保存。
数据/区分配控制部22选择(i)缓冲器#0~#q的某一个中保存的数据的总大小成为向NAND型闪存5的写入单位(以后简称为写入单位)以上的区、或者(ii)所对应的数据保存在满状态的缓冲器中的全部区之中所对应的数据的总大小最大的区,作为清空(flush)对象区。
在此,满状态的缓冲器是该缓冲器整体被数据充满的缓冲器。如果在缓冲器#0~#q之中的某一个缓冲器中积蓄了与该缓冲器大小相应的量的数据,则该缓冲器成为满状态的缓冲器。清空对象区意味着应该被执行清空(flush)处理的区。清空处理是从缓冲器读取缓冲器中保存的数据,并向NAND型闪存5写入的处理。
写入单位例如可以被设定为示出页大小的倍数的大小。页大小表示一个页能够保存的数据的大小。写入单位既可以被设定为与页大小相同的大小,也可以被设定为页大小的2倍的大小,或者还可以被设定为页大小的3倍以上的大小。
或者,写入单位例如也可以被设定为块大小的倍数。块大小表示一个块能够保存的数据的大小。写入单位既可以被设定为与块大小相同的大小,也可以被设定为块大小的2倍的大小,或者还可以被设定为块大小的3倍以上的大小。
各个缓冲器#0~#q的大小被设定为比写入单位大的大小。在某缓冲器中保存的某区的数据的总大小成为写入单位以上的情况下,数据/区分配控制部22选择该区作为清空对象区。
在某缓冲器内的任何区的数据的大小都低于写入单位的状态下,也存在该缓冲器变满的情况。在该情况下,数据/区分配控制部22在该满状态的缓冲器中保存的全部区之中,选择所对应的数据的总大小最大的区作为清空对象区。
在选择了清空对象区之后,数据/区分配控制部22从保存了所选择的清空对象区的数据的缓冲器中保存的全部区的数据中,仅提取清空对象区的数据。在该情况下,数据/区分配控制部22在该缓冲器中维持了清空对象区以外的其他区的数据的状态下,仅提取清空对象区的数据。然后,数据/区分配控制部22向被分配给清空对象区的NAND型闪存5内的特定的物理存储区域,写入所提取的数据。
为了实现在缓冲器中维持了清空对象区以外的其他区的数据的状态下仅提取清空对象区的数据的处理,各个缓冲器#0~#q也可以作为带超越控制功能的先进先出缓冲器(FIFO缓冲器)实现。
带超越控制功能的FIFO缓冲器例如包含:用于输入数据的输入端口、用于输出数据的输出端口、以及用于将输出端口与输入端口连接的路径。该路径也被称为回环路径。
在某FIFO缓冲器为满状态的情况下,或者在某FIFO缓冲器中保存的特定的区的数据的总大小成为写入单位以上的情况下,数据/区分配控制部22判断从该FIFO缓冲器能够读取的下一数据是否为清空对象区的数据。从该FIFO缓冲器能够读取的下一数据意味着该FIFO缓冲器中保存的数据之中最早的数据。
在从FIFO缓冲器能够读取的下一数据是清空对象区以外的其他区的数据的情况下,数据/区分配控制部22执行用于将其他区的数据写回至FIFO缓冲器的处理。在该情况下,数据/区分配控制部22在使FIFO缓冲器的回环路径有效的状态下执行针对FIFO缓冲器的读取动作及写入动作。由此,数据/区分配控制部22并行地执行从FIFO缓冲器读取其他区的数据的动作以及将读取的该其他区的数据写回至FIFO缓冲器的动作。
在从FIFO缓冲器能够读取的下一数据是清空对象区的数据的情况下,数据/区分配控制部22不将清空对象区的数据写回至FIFO缓冲器,而执行用于从FIFO缓冲器读取清空对象区的数据的通常的读取。在该情况下,数据/区分配控制部22在使FIFO缓冲器的回环路径无效的状态下执行读取动作,从而从FIFO缓冲器读取清空对象区的数据。
直到从该FIFO缓冲器读取清空对象区的全部数据为止,数据/区分配控制部22根据需要,选择性地执行上述的用于写回的处理和上述的通常的读取处理。
像这样,通过使FIFO缓冲器的回环路径有效或者无效,数据/区分配控制部22能够执行在FIFO缓冲器中维持了比清空对象区的数据更早的数据的状态下仅将清空对象区的数据从FIFO缓冲器读取的处理(超越处理)。通过该超越处理,能够在FIFO缓冲器中维持了清空对象区以外的其他区的数据的状态下,从FIFO缓冲器仅提取清空对象区的数据。
接下来,说明本实施方式的缓冲处理的详细情况。在说明本实施方式的缓冲处理的详细情况之前,首先说明比较例所涉及的缓冲处理。
图4表示在比较例所涉及的存储器系统中执行的缓冲处理。在此,说明使用数量与区的数量相同的缓冲器的缓冲处理,作为在比较例所涉及的存储器系统(SSD)中执行的缓冲处理。
如图4所示,在比较例中,多个区与多个缓冲器一一对应。在比较例所涉及的SSD中管理的区是区0至区k的k+1个区。在该情况下,在比较例所涉及的SSD内需要准备缓冲器#0至缓冲器#k的k+1个缓冲器。
缓冲器#0被用于仅保存应该向区0写入的数据。缓冲器#1被用于仅保存应该向区1写入的数据。缓冲器#2被用于仅保存应该向区2写入的数据。缓冲器#3被用于仅保存应该向区3写入的数据。缓冲器#k被用于仅保存应该向区k写入的数据。
如果从主机向比较例所涉及的SSD发行了指定区0的区附加命令,则比较例所涉及的SSD的输入控制部将与该区附加命令建立了关联的数据向缓冲器#0保存。同样,如果从主机向SSD发行了指定区1的区附加命令,则输入控制部将与该区附加命令建立了关联的数据向缓冲器#1保存。如果在缓冲器#0~#k之中的某一个缓冲器中积蓄了规定量以上的数据,则开始向与该某一个缓冲器对应的区进行顺序写。
在图4所示的比较例的缓冲处理中,需要数量与区的数量相同的缓冲器,因此在SSD中需要管理的区的数量多的情况下,需要大量的缓冲器即大量的存储器资源。
接下来,说明采用了简单地减少在SSD内应该准备的缓冲器的数量的构成的情况下的缓冲处理,作为比较例所涉及的其他缓冲处理。图5表示在比较例所涉及的存储器系统中执行的其他缓冲处理。
如图5所示,在比较例中,在SSD中管理的区是区0至区k的k+1个区。在SSD中准备的缓冲器是缓冲器#0至缓冲器#3的4个缓冲器。在此,缓冲器的数量(=4)设为比区的数量(k+1)少。因此,各个缓冲器#0~#3被几个区共享。
作为用于使得能够由几个区共享各个缓冲器#0~#3的方法,有以较小的单位将各区的数据向NAND型闪存写入的第1方法、以及等待直到规定量的数据被积蓄在缓冲器中再以规定量的数据的单位将各区的数据向NAND型闪存写入的第2方法。
在第1方法中,例如,在区0~3的数据被分别保存在缓冲器#0~#3中的状态下,从主机2接收了指定区0~3以外的区(例如区#k)的区附加命令的情况下,需要针对缓冲器#0~#3的某一个中保存的数据执行清空处理。
例如,在区#k的数据应该被保存至缓冲器#0的情况下,输出控制部针对缓冲器#0中已经保存的区0的数据执行清空处理。在该情况下,即使例如在缓冲器#0中已经保存的区0的数据的大小比较小的情况下,该区0的数据也被从缓冲器#0读取。然后,被读取的区0的数据被写入至对区0分配的NAND型闪存5内的块中。
在第1方法中,能够防止在一个缓冲器中不同区的数据混合存在。但是,在第1方法中,各区的数据以较小的单位被写入至NAND型闪存的块中。因此,从开始向某块写入起,直到该块整体被数据充满为止,有可能需要比较多的时间。如果该块被部分写入的状态长时间维持,则该块中写入的数据的可靠性有时会降低。另外,如果被部分写入的状态的块的数量增加,还会担心能够作为新的写入目的地块来利用的块发生枯竭。
在第2方法中,在各缓冲器中蓄积了规定量的数据之后向NAND型闪存进行写入。因此,在一个缓冲器中不同区的数据混合存在。在该情况下,不同区的数据混合存在有可能引起相同区的数据被分散在一个缓冲器内的不同的各种位置这样的片断化。如果发生了这样的片断化,则与第1方法同样,输出控制部需要以较小的单位将各区的数据写入至NAND型闪存。
接下来,说明实施方式所涉及的缓冲处理。图6是表示在实施方式所涉及的SSD3中执行的缓冲处理的图。
在图6中,由SSD3管理的区是区0至区7的8个区。在SSD3中准备的缓冲器是缓冲器#0至缓冲器#3的4个缓冲器。在此示出的区的数量及缓冲器的数量为例示,区的数量及缓冲器的数量既可以是比在此示出的数量大的数量,也可以是更小的数量。其中,缓冲器的数量比区的数量少。
缓冲器#0包含先进先出(FIFO)缓冲器201、清空(flush)控制部202和分配管理表203。同样,缓冲器#1包含FIFO缓冲器211、清空控制部212和分配管理表213。缓冲器#2包含FIFO缓冲器221、清空控制部222和分配管理表223。缓冲器#3包含FIFO缓冲器231、清空控制部232和分配管理表233。
各个FIFO缓冲器201~231被用于临时地保存应该向区0~7之中的任意的一个以上的区写入的数据。各个FIFO缓冲器201~231可以作为带超越控制功能的FIFO缓冲器实现。
各个清空控制部202~232与数据/区分配控制部22共同执行用于将FIFO缓冲器中保存的数据向NAND型闪存5写入的清空处理。在本实施方式中,在缓冲器#0~#3之中的任意的一个缓冲器中保存的一个区的数据的总大小成为写入单位以上的情况下,也就是说,在缓冲器#0~#3分别包含的FIFO缓冲器201~231之中的任意的一个FIFO缓冲器中保存的一个区的数据的总大小成为写入单位以上的情况下,开始清空处理。
清空处理也在缓冲器#0~#3之中的某缓冲器变满的情况下,也就是说在缓冲器#0~#3分别包含的FIFO缓冲器201~231之中的某FIFO缓冲器变满的情况下被执行。也就是说,在任意的一个FIFO缓冲器变满的情况下,在该FIFO缓冲器中保存的全部区的数据之中,对应的数据的总大小最大的区的数据被写入至NAND型闪存5。
各个清空控制部202~232可以判断缓冲器#0~#3之中的对应的缓冲器是否满足清空开始条件。在本实施方式中,在满足缓冲器#0~#3之中的某缓冲器中保存的一个区的数据的总大小为写入单位以上的条件的情况下,该缓冲器被判断为满足了清空开始条件。另外,在缓冲器#0~#3之中的某缓冲器整体成为被数据充满的满状态的情况下,该缓冲器也被判断为满足了清空开始条件。
此外,各个缓冲器#0~#3构成为向该缓冲器内包含的FIFO缓冲器保存数据,因此缓冲器#0~#3各自的状态与缓冲器#0~#3所包含的FIFO缓冲器201~231各自的状态是相同的。因此,判断各个缓冲器#0~#3是否满足清空条件的处理,也可以通过判断各个FIFO缓冲器201~231是否满足清空条件来执行。以下,主要例示各个清空控制部202~232判断FIFO缓冲器201~231之中的对应的FIFO缓冲器是否满足清空开始条件的情况,来说明本实施方式的缓冲处理。
也就是说,各个清空控制部202~232判断对应的FIFO缓冲器是否满足清空开始条件。在本实施方式中,在某FIFO缓冲器中保存的一个区的数据的总大小为写入单位以上的条件被满足的情况下,该FIFO缓冲器被判断为满足清空开始条件。另外,在某FIFO缓冲器整体成为被数据充满的满状态的情况下,该FIFO缓冲器也被判断为满足清空开始条件。
各个分配管理表203~233是用于对被分配至对应的FIFO缓冲器的一个以上的区的标识符进行管理的管理表。例如,如果FIFO缓冲器201被决定作为区0的数据应该被保存至的保存目的地缓冲器,则区0被分配至FIFO缓冲器201。然后,表示区0的标识符被保存至与FIFO缓冲器201对应的分配管理表203。
在初始状态下,各个缓冲器#0~#3是空闲的缓冲器。也就是说,缓冲器#0~#3所包含的各个FIFO缓冲器201~231是空闲的FIFO缓冲器。空闲的FIFO缓冲器是未被分配任何区的FIFO缓冲器。
在各个FIFO缓冲器201~231空闲的状态下,也就是说在各个缓冲器#0~#3空闲的状态下,控制器4从主机2接收了指定某特定的区的区附加命令的情况下,数据/缓冲器分配控制部21将某一个空闲的缓冲器、例如缓冲器#0,决定作为该特定的区的数据应该被保存至的保存目的地缓冲器。数据/缓冲器分配控制部21向缓冲器#0分配该特定的区。然后,数据/缓冲器分配控制部21将与所接收的区附加命令建立了关联的数据向缓冲器#0的FIFO缓冲器201保存。进而,数据/缓冲器分配控制部21向缓冲器#0的分配管理表203保存表示该特定的区的标识符。再者,数据/缓冲器分配控制部21向缓冲器更新履历管理表32保存表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#0的标识符)。
在控制器4从主机2接收了指定别的特定的区的新的区附加命令的情况下,数据/缓冲器分配控制部21将某一个空闲的缓冲器、例如缓冲器#1,决定作为该别的特定的区的数据应该被保存至的保存目的地缓冲器。数据/缓冲器分配控制部21向缓冲器#1分配该别的特定的区。然后,数据/缓冲器分配控制部21将与所接收的新的区附加命令建立了关联的数据向缓冲器#1的FIFO缓冲器211保存。进而,数据/缓冲器分配控制部21向缓冲器#1的分配管理表213保存表示该别的特定的区的标识符。再者,数据/缓冲器分配控制部21向缓冲器更新履历管理表32保存表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#1的标识符)。
像这样,4个区被分别分配至4个缓冲器#0~#3、也就是说4个FIFO缓冲器201~231。
在控制器4从主机2接收了指定已经被分配至缓冲器#0~#3中的某一个缓冲器的特定的区的区附加命令的情况下,数据/缓冲器分配控制部21将与所接收的区附加命令建立了关联的数据,向已经被分配了该特定的区的缓冲器的FIFO缓冲器保存。
例如,在控制器4从主机2接收了指定与已经被分配至缓冲器#0的区相同的区的区附加命令的情况下,数据/缓冲器分配控制部21将与该所接收的区附加命令建立了关联的数据向缓冲器#0的FIFO缓冲器201保存。然后,数据/缓冲器分配控制部21向缓冲器更新履历管理表32保存表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#0的标识符)。
在控制器4从主机2接收了指定与已经被分配至4个缓冲器#0~3的4个区不同的新的区的区附加命令的情况下,数据/缓冲器分配控制部21通过参照缓冲器更新履历表32,决定为了保存数据的最后更新最早的缓冲器。数据/缓冲器分配控制部21向该被决定的缓冲器追加分配该新的区。
例如,在为了保存数据的最后更新最早的缓冲器是缓冲器#0的情况下,数据/缓冲器分配控制部21向缓冲器#0追加分配该新的区。然后,数据/缓冲器分配控制部21将与所接收的区附加命令建立了关联的数据向缓冲器#0的FIFO缓冲器201保存。进而,数据/缓冲器分配控制部21向缓冲器#0的分配管理表203保存表示该新的区的标识符。再者,数据/缓冲器分配控制部21向缓冲器更新履历管理表32保存表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#0的标识符)。
像这样,通过向为了保存数据的最后更新最早的缓冲器追加分配新的区,能够防止被用于保存数据的缓冲器偏向于特定的缓冲器,结果,能够使应该向区0~7写入的数据分散于缓冲器#0~#3中。
在FIFO缓冲器201~231的某一个满足了清空开始条件的情况下,数据/区分配控制部22在该FIFO缓冲器中维持了该FIFO缓冲器中保存的除了清空对象区以外的区的数据的状态下,从该FIFO缓冲器中保存的数据中,仅提取清空对象区的数据。清空对象区的数据是与指定清空对象区的一个以上的区附加命令建立了关联的写数据。然后,数据/区分配控制部22将被提取的数据、即与指定清空对象区的几个区附加命令建立了关联的写数据,向清空对象区的从下一能够写入的LBA开始的逻辑块范围写入。由此,针对清空对象区执行顺序写。
如上所述,对各个区0~7分配了NAND型闪存5内的物理存储区域中的一个。因此,在针对清空对象区的写入动作中,数据/区分配控制部22首先决定被分配给清空对象区的物理存储区域、以及该物理存储区域内的写入目的地位置。然后,数据/区分配控制部22将该写数据向该物理存储区域内的从写入目的地位置开始的连续的物理存储位置写入,以使与这些区附加命令建立了关联的数据按照与这些区附加命令被发行的顺序相同的顺序配置在该物理存储区域上。
接下来,参照图7A~图7D,说明实施方式所涉及的缓冲处理的例子。以下,与图6同样,例示由SSD3管理的区是区0至区7的8个区、且在SSD3中准备的缓冲器是缓冲器#0至缓冲器#3的4个缓冲器的情况,说明实施方式所涉及的缓冲处理。
图7A是表示在SSD3中执行的缓冲处理的第一个处理的图。
在此,设想控制器4从主机2依次接收了指定区1的两个区附加命令、指定区0的三个区附加命令、指定区3的一个区附加命令和指定区4的一个区附加命令的情况。
数据/缓冲器分配控制部21将通过这些所接收的区附加命令被指定的最初的四个区、即区1、区0、区3及区4,分别分配至缓冲器#0、缓冲器#1、缓冲器#2及缓冲器#3。
更详细而言,控制器4首先从主机2接收指定区1的第一个区附加命令。不存在已经被分配了区1的缓冲器。因此,数据/缓冲器分配控制部21向未被分配任何区的缓冲器#0分配区1。数据/缓冲器分配控制部21向缓冲器#0的分配管理表203追加表示区1的标识符。然后,数据/缓冲器分配控制部21从主机2的存储器102取得与指定区1的第一个区附加命令建立了关联的数据即“zone1-D1”,并将所取得的数据“zone1-D1”向FIFO缓冲器201保存。其后,数据/缓冲器分配控制部21向缓冲器更新履历表32追加表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#0的标识符)。
控制器4从主机2接收指定区1的第二个区附加命令。由于已经对缓冲器#0分配了区1,因此数据/缓冲器分配控制部21将缓冲器#0,决定作为与指定区1的第二个区附加命令建立了关联的数据用的保存目的地缓冲器。数据/缓冲器分配控制部21从主机2的存储器102取得与指定区1的第二个区附加命令建立了关联的数据即“zone1-D2”,并将所取得的数据“zone1-D2”向FIFO缓冲器201保存。此时,向缓冲器更新履历表32最后追加的缓冲器的标识符是缓冲器#0的标识符。因此,在此可以省略将保存了数据“zone1-D2”的缓冲器#0的标识符向缓冲器更新履历表32追加的处理。
此外,即使在为了保存数据而最后更新的缓冲器的标识符与向缓冲器更新履历表32最后追加的缓冲器的标识符相同的情况下,也可以将为了保存数据而最后更新的缓冲器的标识符向缓冲器更新履历表32追加。以下设想如下情况,但不限定于此:仅在为了保存数据而最后更新的缓冲器的标识符与向缓冲器更新履历表32最后追加的缓冲器的标识符不同的情况下,将为了保存数据而最后更新的缓冲器的标识符向缓冲器更新履历表32追加。
控制器4从主机2接收指定区0的第一个区附加命令。由于不存在已经被分配了区0的缓冲器,因此数据/缓冲器分配控制部21向未被分配任何区的缓冲器#1分配区0。数据/缓冲器分配控制部21向缓冲器#1的分配管理表213追加表示区0的标识符。然后,数据/缓冲器分配控制部21从主机2的存储器102取得与指定区0的第一个区附加命令建立了关联的数据即“zone0-D1”,并将所取得的数据“zone0-D1”向FIFO缓冲器211保存。其后,数据/缓冲器分配控制部21向缓冲器更新履历表32追加表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#1的标识符)。
控制器4从主机2接收指定区0的第二个区附加命令。区0已经被分配给缓冲器#1,因此数据/缓冲器分配控制部21将缓冲器#1,决定作为与指定区0的第二个区附加命令建立了关联的数据用的保存目的地缓冲器。数据/缓冲器分配控制部21从主机2的存储器102取得与指定区0的第二个区附加命令建立了关联的数据即“zone0-D2”,并将所取得的数据“zone0-D2”向FIFO缓冲器211保存。
控制器4从主机2接收指定区0的第三个区附加命令。区0已经被分配给缓冲器#1,因此数据/缓冲器分配控制部21将缓冲器#1,决定作为与指定区0的第三个区附加命令建立了关联的数据用的保存目的地缓冲器。数据/缓冲器分配控制部21从主机2的存储器102取得与指定区0的第三个区附加命令建立了关联的数据即“zone0-D3”,并将所取得的数据“zone0-D3”向FIFO缓冲器211保存。
控制器4从主机2接收指定区3的第一个区附加命令。由于不存在已经被分配了区3的缓冲器,因此数据/缓冲器分配控制部21向未被分配任何区的缓冲器#2分配区3。数据/缓冲器分配控制部21向缓冲器#2的分配管理表223追加表示区3的标识符。然后,数据/缓冲器分配控制部21从主机2的存储器102取得与指定区3的第一个区附加命令建立了关联的数据即“zone3-D1”,并将所取得的数据“zone3-D1”向FIFO缓冲器221保存。其后,数据/缓冲器分配控制部21向缓冲器更新履历表32追加表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#2的标识符)。
控制器4从主机2接收指定区4的第一个区附加命令。不存在已经被分配了区4的缓冲器,因此数据/缓冲器分配控制部21向未被分配任何区的缓冲器#3分配区4。数据/缓冲器分配控制部21向缓冲器#3的分配管理表233追加表示区4的标识符。然后,数据/缓冲器分配控制部21从主机2的存储器102取得与指定区4的第一个区附加命令建立了关联的数据即“zone4-D1”,并将所取得的数据“zone4-D1”向FIFO缓冲器231保存。其后,数据/缓冲器分配控制部21向缓冲器更新履历表32追加表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#3的标识符)。
图7B是表示实施方式所涉及的缓冲处理的第二个处理的图。
在此,设想如下情况:在接收了图7A中说明的七个区附加命令之后,控制器4从主机2依次接收了指定区1的一个区附加命令、指定区3的一个区附加命令、指定区4的一个区附加命令、以及指定区3的一个区附加命令。
区1、区3及区4已经分别被分配至缓冲器#0、缓冲器#2及缓冲器#3。因此,数据/缓冲器分配控制部21通过执行与图7A中说明的过程同样的过程,将与指定区1的区附加命令建立了关联的数据“zone1-D3”、与指定区3的区附加命令建立了关联的数据“zone3-D2”、与指定区4的区附加命令建立了关联的数据“zone4-D2”以及与指定区3的区附加命令建立了关联的数据“zone3-D3”,分别向缓冲器#0的FIFO缓冲器201、缓冲器#2的FIFO缓冲器221、缓冲器#3的FIFO缓冲器231及缓冲器#2的FIFO缓冲器221保存。然后,数据/缓冲器分配控制部21将缓冲器#0的标识符、缓冲器#2的标识符、缓冲器#3的标识符及缓冲器#2的标识符依次向缓冲器更新履历表32追加。
接下来,设想控制器4从主机2接收了指定区2的第一个区附加命令的情况。
不存在已经被分配了区2的缓冲器,而且也不存在空闲的缓冲器。因此,数据/缓冲器分配控制部21通过参照缓冲器更新履历表32,决定为了保存数据的最后更新最早的缓冲器。在缓冲器更新履历表32中,保存着表示“最后的更新最早的缓冲器是缓冲器#1,最后的更新次早的缓冲器是缓冲器#0,最后的更新进一步次早的缓冲器是缓冲器#3,最后的更新最新的缓冲器是缓冲器#2”的信息,作为履历信息。
因此,数据/缓冲器分配控制部21向为了保存数据的最后更新最早的缓冲器即缓冲器#1,追加分配区2。在该情况下,数据/缓冲器分配控制部21向缓冲器#1的分配管理表213追加表示区2的标识符。然后,数据/缓冲器分配控制部21将与指定区2的第一个区附加命令建立了关联的数据即“zone2-D1”向FIFO缓冲器211保存。其后,数据/缓冲器分配控制部21向缓冲器更新履历表32追加表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#1的标识符)。
接下来,设想控制器4从主机2接收了指定区2的第二个区附加命令的情况。
区2已经被分配给缓冲器#1。因此,数据/缓冲器分配控制部21将缓冲器#1,决定作为与指定区2的第二个区附加命令建立了关联的数据的保存目的地缓冲器。数据/缓冲器分配控制部21从主机2的存储器102取得与指定区2的第二个区附加命令建立了关联的数据即“zone2-D2”,并将所取得的数据“zone2-D2”向FIFO缓冲器211保存。
图7C是表示实施方式所涉及的缓冲处理的第三个处理的图。
在此,设想如下情况:在接收了图7A中说明的七个区附加命令及图7B中说明的六个区附加命令之后,控制器4首先从主机2依次接收了指定区1的两个区附加命令、指定区4的两个区附加命令、以及指定区2的一个区附加命令。
区1、区4及区2已经分别被分配至缓冲器#0、缓冲器#3及缓冲器#1。因此,数据/缓冲器分配控制部21将与指定区1的两个区附加命令分别建立了关联的数据“zone1-D4”及数据“zone1-D5”向缓冲器#0的FIFO缓冲器201保存,将与指定区4的两个区附加命令分别建立了关联的数据“zone4-D3”及数据“zone4-D4”向缓冲器#3的FIFO缓冲器231保存,将与指定区2的一个区附加命令建立了关联的数据“zone2-D3”向缓冲器#1的FIFO缓冲器211保存。然后,数据/缓冲器分配控制部21将缓冲器#0的标识符、缓冲器#3的标识符及缓冲器#1的标识符依次向缓冲器更新履历表32追加。
接下来,设想控制器4从主机2接收了指定区5的第一个区附加命令的情况。
不存在已经被分配了区5的缓冲器,而且也不存在空闲的缓冲器。因此,数据/缓冲器分配控制部21通过参照缓冲器更新履历表32,决定为了保存数据的最后更新最早的缓冲器。为了保存数据的最后更新最早的缓冲器是缓冲器#2。
因此,数据/缓冲器分配控制部21向为了保存数据的最后更新最早的缓冲器即缓冲器#2,追加分配区5。在该情况下,数据/缓冲器分配控制部21向缓冲器#2的分配管理表223追加表示区5的标识符。然后,数据/缓冲器分配控制部21将与指定区5的第一个区附加命令建立了关联的数据即“zone5-D1”向FIFO缓冲器221保存。其后,数据/缓冲器分配控制部21向缓冲器更新履历表32追加表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#2的标识符)。
接下来,控制器4从主机2接收指定区5的第二个区附加命令、以及指定区5的第三个区附加命令。
区5已经被分配给缓冲器#2。因此,数据/缓冲器分配控制部21将与指定区5的第二个区附加命令建立了关联的数据即“zone5-D2”、以及与指定区5的第三个区附加命令建立了关联的数据即“zone5-D3”,向FIFO缓冲器221保存。
接下来,设想控制器4从主机2接收了指定区0的两个区附加命令的情况。
区0已经被分配至缓冲器#1。因此,数据/缓冲器分配控制部21将与指定区0的2个区附加命令分别建立了关联的数据“zone0-D4”及“zone0-D5”向FIFO缓冲器211保存。其后,数据/缓冲器分配控制部21向缓冲器更新履历表32追加表示为了保存数据而最后更新的缓冲器的信息(在此为表示缓冲器#1的标识符)。
通过该数据“zone0-D5”被保存于缓冲器#1的FIFO缓冲器221,FIFO缓冲器221成为无法再保存更多数据的满状态。由于FIFO缓冲器221成为满状态,FIFO缓冲器221满足清空开始条件。
图7D是表示实施方式所涉及的缓冲处理的第四个处理的图。
数据/区分配控制部22从缓冲器#1选择清空对象区,从缓冲器#1中保存的全部数据之中,仅提取与清空对象区建立了关联的数据。
在缓冲器#1(即FIFO缓冲器221)中,保存着与区0建立了关联的数据“zone0-D1”~“zone0-D5”、以及与区2建立了关联的数据“zone2-D1”~“zone2-D3”。在缓冲器#1中,区0是建立了关联的数据的总大小最大的区。因此,数据/区分配控制部22将区0决定作为清空对象区。
数据/区分配控制部22从缓冲器#1之中仅提取与区0建立了关联的数据。此时,数据/区分配控制部22进行控制以使与清空对象区以外的区建立了关联的数据被维持在缓冲器#1中。也就是说,数据/区分配控制部22在缓冲器#1中维持了数据“zone2-D1”~“zone2-D3”的状态下,从缓冲器#1提取数据“zone0-D1”~“zone0-D5”。然后,数据/区分配控制部22决定写入目的地的区,并向所决定的写入目的地的区(在此为区0)顺序写入数据“zone0-D1”~“zone0-D5”。如果区0的数据从缓冲器#1消失,则数据/区分配控制部22从分配管理表213删除区0的标识符。由此,区0针对缓冲器#1的分配被解除。
因此,在区0的数据从缓冲器#1消失之后,接收了指定区0的区附加命令的情况下,不存在已经被分配了区0的缓冲器。因此,数据/缓冲器分配控制部21通过参照缓冲器更新履历表32,决定为了保存数据的最后更新最早的缓冲器,向该被决定的缓冲器保存与该被接收的区附加命令建立了关联的数据。
接下来,参照图8A~图8E,说明用于从缓冲器#1提取与区0建立了关联的数据的超越处理的例子。
图8A是表示在SSD3中执行的超越处理的第一个处理的图。
缓冲器#1的FIFO缓冲器211包含输入端口211A、输出端口211B、回环路径211C、输入选择器211D和输出选择器211E。回环路径211C是对FIFO缓冲器211的输出端口211B与FIFO缓冲器211的输入端口211A进行连接的路径。输入选择器211D及输出选择器211E是用于使回环路径211C有效或者无效的开关电路。
FIFO缓冲器211的输入端口211A与输入选择器211D连接。FIFO缓冲器211的输出端口211B与输出选择器211E连接。输入选择器211D选择外部输入或者回环路径211C中的某一方,将选择的外部输入或者回环路径211C中的某一方与输入端口211A连接。输出选择器211E选择回环路径211C或者外部输出中的某一方,将输出端口211B与选择的回环路径211C或者外部输出中的某一方连接。外部输出经由图1的NAND接口13而与NAND型闪存5连接。
数据/区分配控制部22在从FIFO缓冲器211能够读取的下一数据、即FIFO缓冲器211内的最早的数据是清空对象区以外的区的数据的情况下,通过对输入选择器211D和输出选择器211E进行控制来使回环路径211C有效,将输出端口211B与输入端口211A连接。另外,在从FIFO缓冲器211能够读取的下一数据是清空对象区的数据的情况下,数据/区分配控制部22通过对输出选择器211E进行控制来使回环路径211C无效,将输出端口211B与外部输出连接。在该情况下,数据/区分配控制部22也可以通过对输入选择器211D进行控制,来将输入端口211A与回环路径211C连接。
在开始清空处理时,如图8A所示,数据/区分配控制部22首先为了防止向FIFO缓冲器211保存新的数据,而对输入选择器211D进行控制来将输入端口211A与外部输入的连接解除,将输入端口211A与回环侧即回环路径211C连接。
图8B是表示实施方式所涉及的超越处理的第二个处理的图。
数据/区分配控制部22判断从FIFO缓冲器211能够读取的下一数据是否为清空对象区的数据。直到数据“zone0-D1”~“zone0-D3”的读取完成为止,能够读取的下一数据是与作为清空对象区的区0建立了关联的数据。因此,数据/区分配控制部22通过对输出选择器211E进行控制来将输出端口211B与外部输出连接,而使回环路径211C无效。其后,数据/区分配控制部22从FIFO缓冲器211读取数据“zone0-D1”、数据“zone0-D2”及数据“zone0-D3”。
图8C是表示实施方式所涉及的超越处理的第三个处理的图。
在数据“zone0-D1”~“zone0-D3”被读取之后,直到数据“zone2-D1”~“zone2-D3”被从FIFO缓冲器211读取为止,能够从FIFO缓冲器211读取的下一数据不是清空对象区的数据。因此,数据/区分配控制部22通过对输出选择器211E进行控制来将输出端口211B与回环路径211C连接,使回环路径211C有效。
在使回环路径211C有效的状态下,数据/区分配控制部22执行从FIFO缓冲器211读取数据的读取动作以及向FIFO缓冲器211写入数据的写入动作。由此,并行执行从FIFO缓冲器211的输出端口211B读取数据“zone2-D1”~“zone2-D3”的动作、以及将被读取的数据“zone2-D1”~“zone2-D3”经由回环路径211C及输入端口211A写回至FIFO缓冲器211的动作。结果,数据“zone2-D1”~“zone2-D3”被维持在FIFO缓冲器211中。
图8D是表示实施方式所涉及的超越处理的第四个处理的图。
在数据“zone2-D1”~“zone2-D3”被读取之后,能够从FIFO缓冲器211读取的下一数据是清空对象区的数据。
由于从FIFO缓冲器211能够读取的下一数据是清空对象区的数据,因此数据/区分配控制部22对输出选择器211E进行控制来使回环路径211C无效,将输出端口211B与外部输出连接。其后,数据/区分配控制部22对FIFO缓冲器211进行控制,从输出端口211B读取数据“zone0-D4”及数据“zone0-D5”。
图8E是表示实施方式所涉及的超越处理的第五个处理的图。
数据/区分配控制部22对在FIFO缓冲器211之中未残留清空对象区的数据的情况进行确认。如果知晓在FIFO缓冲器211中未残留清空对象区的数据,则数据/区分配控制部22对输入选择器211D进行控制,将输入端口211A与外部输入连接。由此,FIFO缓冲器211成为能够从外部输入受理新的数据的状态。
通过在此说明的超越处理,数据/区分配控制部22从缓冲器#1仅提取清空对象区的数据。另外,与清空对象区以外的区建立了关联的数据被维持于保存在缓冲器#1中的状态。
在此,关于在某缓冲器变满的情况下执行的超越处理进行了说明,但在某缓冲器中保存的特定的区的数据的总大小成为写入单位以上的情况下,也以同样的过程执行仅提取特定的区的数据的超越处理。
图9是表示在实施方式所涉及的SSD3中执行的命令处理的过程的流程图。
该命令处理是用于执行向分区命名空间的多个区之中的任意的区顺序写入数据的命令的处理。该命令既可以是区附加命令,也可以是作为地址特定写命令而被使用的写命令。以下,例示针对区附加命令的处理,说明命令处理的过程。
首先,控制器4从主机2接收区附加命令(步骤S11)。控制器4通过数据/缓冲器分配控制部21,决定与所接收的区附加命令建立了关联的数据应该被保存至的保存目的地缓冲器,向所决定的保存目的地缓冲器保存数据(步骤S12)。关于在此的数据/缓冲器分配控制部21所进行的数据/缓冲器分配处理的详细过程,在图10中进行说明。
控制器4对缓冲器更新履历表32进行更新(步骤S13)。在步骤S13中,控制器4将步骤S12中决定的保存目的地缓冲器的标识符,作为表示为了保存数据而最后更新的缓冲器的信息而追加到缓冲器更新履历表32中。此外,此时在应该向缓冲器更新履历表32追加的标识符与向缓冲器更新履历表最后追加的缓冲器的标识符相同的情况下,也可以省略将缓冲器的标识符向缓冲器更新履历表32追加的处理。
控制器4判断某缓冲器是否已满,或者在某缓冲器中某区的数据的总大小是否成为写入单位以上(步骤S14)。也就是说,控制器4判断是否存在满足了清空开始条件的缓冲器。
在不存在满状态的缓冲器,而且也不存在某区的数据的总大小成为写入单位以上的缓冲器的情况下(步骤S14:否),控制器4等待直到从主机2接收下一区附加命令。
在存在满状态的缓冲器,或者存在某区的数据的总大小成为写入单位以上的缓冲器的情况下(步骤S14:是),控制器4通过超越处理,从该缓冲器中保存的全部数据中,仅提取清空对象区的数据(步骤S15)。在该缓冲器已满的情况下,建立了关联的数据的总大小最大的区被决定作为清空对象区。在存在与某区建立了关联的数据的总大小成为写入单位以上的缓冲器的情况下,建立了关联的数据的总大小成为写入单位以上的该区被决定作为清空对象区。关于超越处理的详细过程,在图11中进行说明。
控制器4通过数据/区分配控制部22,决定在步骤S15中提取的数据的写入目的地的物理存储区域(步骤S16)。写入目的地的物理存储区域是被分配给所决定的清空对象区的、NAND型闪存5内的特定的存储区域。
其后,控制器4将从缓冲器提取的清空对象区的数据,向写入目的地的物理存储区域、即被分配给清空对象区的NAND型闪存5内的特定的存储区域(物理存储区域)写入(步骤S17)。
如果清空对象区的数据被写入至NAND型闪存5内的特定的存储区域,则与被写入的数据对应的一个以上的区附加命令的处理完成。在步骤S17中,控制器4可以向主机2发送与完成的各区附加命令对应的命令完成。此外,控制器4不一定需要在步骤S17中数据被写入至NAND型闪存5之前等待进行命令完成的发送。仅在所接收的区附加命令中包含的强制单元访问(Force Unit Access(FUA))被设置为1的情况下,需要等待进行命令完成的发送,直到数据被写入至NAND型闪存5为止。在所接收的区附加命令中包含的FUA为0的情况下,控制器4可以在与所接收的区附加命令建立了关联的数据被写入至NAND型闪存5之前不进行等待而将与所接收的区附加命令对应的命令完成向主机2发送。例如,控制器4可以在与所接收的区附加命令建立了关联的数据已被保存至缓冲器时,将与所接收的区附加命令对应的命令完成向主机2发送。各命令完成包含:表示与对应于该命令完成的区附加命令建立了关联的数据被写入的区内的写入目的地位置(LBA)的信息。
图10是表示实施方式所涉及的数据/缓冲器分配处理的过程的流程图。在此说明的数据/缓冲器分配处理是图9中的步骤S12的处理的详细情况。
如图9的步骤S11中说明的那样,控制器4从主机2接收区附加命令。
数据/缓冲器分配控制部21通过参照多个缓冲器各自中设置的分配管理表,判断是否存在已经被分配了通过步骤S11中接收的区附加命令而指定的区的缓冲器(步骤S21)。
在不存在已经被分配了通过所接收的区附加命令指定的区的缓冲器的情况下(步骤S21:否),数据/缓冲器分配控制部21通过参照多个缓冲器各自中设置的分配管理表,判断是否存在空闲的缓冲器(步骤S22)。
在不存在空闲的缓冲器的情况下(步骤S22:否),数据/缓冲器分配控制部21将为了保存数据的最后更新最早的缓冲器,决定作为保存目的地缓冲器(步骤S23)。数据/缓冲器分配控制部21参照缓冲器更新履历表32,决定为了保存数据的最后更新最早的缓冲器。保存目的地缓冲器是与所接收的区附加命令建立了关联的数据应该被保存至的缓冲器。
数据/缓冲器分配控制部21向保存目的地缓冲器分配通过步骤S11中接收的区附加命令而指定的区(步骤S24)。数据/缓冲器分配控制部21向保存目的地缓冲器中设置的分配管理表,追加表示通过区附加命令而指定的区的标识符,从而向保存目的地缓冲器追加分配区。
控制器4将与步骤S11中接收的区附加命令建立了关联的数据,向被决定的保存目的地缓冲器保存(步骤S28)。即,数据/缓冲器分配控制部21从主机2的存储器102取得与步骤S11中接收的区附加命令建立了关联的数据,并将所取得的数据向被决定的保存目的地缓冲器保存。其后,处理前进到图9中说明的步骤S13。在步骤S13中,控制器4对缓冲器更新履历表32进行更新。
在存在一个以上的空闲的缓冲器的情况下(步骤S22:是),数据/缓冲器分配控制部21从空闲的缓冲器之中选择任意的缓冲器,决定作为保存目的地缓冲器(步骤S25)。
数据/缓冲器分配控制部21向保存目的地缓冲器分配通过步骤S11中接收的区附加命令而指定的区(步骤S26)。
其后,处理移至步骤S28,控制器4将与步骤S11中接收的区附加命令建立了关联的数据向被决定的保存目的地缓冲器保存。
在存在已经被分配了通过步骤S11中接收的区附加命令而指定的区的缓冲器的情况下(步骤S21:是),数据/缓冲器分配控制部21将该缓冲器决定为保存目的地缓冲器(步骤S27)。
其后,处理移至步骤S28,控制器4将与步骤S11中接收的区附加命令建立了关联的数据向被决定的保存目的地缓冲器保存。
图11是表示实施方式所涉及的超越处理的过程的流程图。在此,关于图9中的步骤S15的处理的详细情况进行说明。
在某缓冲器(FIFO缓冲器)满足了清空开始条件的情况下,数据/区分配控制部22从被分配至该FIFO缓冲器的区之中,决定清空对象区(步骤S31)。
数据/区分配控制部22判断:与从满足清空开始条件的FIFO缓冲器应该读取的下一数据(即,该FIFO缓冲器内的下一能够读取的数据)建立了关联的区,是否为清空对象区(步骤S32)。
在与下一能够读取的数据建立了关联的区不是清空对象区的情况下(步骤S32:否),数据/区分配控制部22使该FIFO缓冲器的回环路径有效,进行控制以使该FIFO缓冲器的输入端口和输出端口与回环侧连接(步骤S33)。
在与下一能够读取的数据对应的区是清空对象区的情况下(步骤S32:是),数据/区分配控制部22在该FIFO缓冲器的输入端口和输出端口与回环侧连接了的情况下进行控制以将该连接解除(步骤S34)。
数据/区分配控制部22从FIFO缓冲器读取下一能够读取的数据(步骤S35)。数据/区分配控制部22判断在FIFO缓冲器中保存的数据之中是否残留着清空对象区的数据(步骤S36)。
在FIFO缓冲器中保存的数据之中残留着清空对象区的数据的情况下(步骤S36:是),数据/区分配控制部22的处理为了读取下一能够读取的数据而再次移至步骤S32。
在FIFO缓冲器中保存的数据之中未残留清空对象区的数据的情况下(步骤S36:否),数据/区分配控制部22从该FIFO缓冲器的分配管理表中,删除表示清空对象区的标识符(步骤S37)。由此,针对该FIFO缓冲器的清空对象区的分配被解除。
如以上说明的那样,根据本实施方式,在存在被分配了通过所接收的区附加命令指定的区的缓冲器的情况下,控制器4将该缓冲器,决定作为与所接收的区附加命令建立了关联的数据应该被保存到的保存目的地缓冲器。另外,在不存在被分配了通过所接收的区附加命令指定的区的缓冲器,而存在空闲的缓冲器的情况下,控制器4将空闲的缓冲器之中的任意的缓冲器决定作为保存目的地缓冲器。另外,在不存在被分配了通过所接收的区附加命令指定的区的缓冲器,而且不存在空闲的缓冲器的情况下,控制器4将为了保存数据的最后更新最早的缓冲器,决定作为保存目的地缓冲器。
通过这些处理,数据不偏向于特定的缓冲器,而能够使数据的保存目的地在多个缓冲器中分散。进而,能够将应该向相同的区写入的数据保存到相同的缓冲器。
另外,控制器4选择多个缓冲器的某一个中保存的数据的总大小成为写入单位以上的区、或者所对应的数据为满状态的缓冲器中保存的全部区之中所对应的数据的总大小最大的区,作为清空对象区。由此,能够选择缓冲器中积蓄的数据量比较多的区作为清空对象区,因此与以较小的单位将各区的数据向NAND型闪存5写入的情况相比,能够提高顺序写的效率。
进而,控制器4在缓冲器中维持了清空对象区以外的区的数据的状态下,仅提取清空对象区的数据。由此,例如即使发生了相同区的数据被分散在一个缓冲器内的不同的各种位置这样的片断化,也不用针对清空对象区以外的区的数据进行清空处理,而能够仅针对清空对象区的数据进行清空处理。因此,不用将缓冲器内的数据以较小的单位向NAND型闪存5写入,而能够仅将其数据量比较多的清空对象区的数据向NAND型闪存5写入。
像这样,在本实施方式中,能够使用数量比分区命名空间中包含的区的数量少的缓冲器,高效地缓冲应该向不同区写入的数据。进而,在本实施方式中,能够从不同区的数据混合存在的缓冲器中,仅将清空对象区的数据向NAND型闪存5写入。由此,与使用数量与区的数量相同的缓冲器的构成相比,能够削减为了控制多个区所需的SSD3内的存储器资源的量。
此外,在从主机2接收了被作为地址特定写命令使用的写命令的情况下,控制器4也可以在向缓冲器保存了与该写命令建立了关联的数据时,向主机2发送该写命令的命令完成。
由此,主机2能够向SSD3发行指定与通过该写命令而指定的区相同的区的下一写命令。结果,在指定某区的写命令的处理实际上完成之前,即在与该写命令建立了关联的数据向NAND型闪存5的写入完成之前,就能够从主机2接收指定与该区相同的区的下一写命令。由此,即使在各个写命令请求写入大小较小的数据的情况下,也能够在将与相同的区建立了关联的数据向相同的缓冲器积蓄了一定量之后开始写处理,能够改善向NAND型闪存5的写入效率。
以上说明了本发明的几个实施方式,但这些实施方式作为例子来提示,其意图不在于对发明的范围进行限定。这些新的实施方式能够以其他各种方式被实施,在不脱离发明的主旨的范围内,能够进行各种省略、置换、变更。这些实施方式及其变形与发明的范围或主旨中包含的方式,均被包含在权利要求书所记载的发明及其等同的范围中。
Claims (10)
1.一种存储器系统,其中,具备:
非易失性存储器;以及
控制器,构成为与所述非易失性存储器电连接,使用由非易失性内存主机控制器接口规范NVM express规定的被分割为多个区的分区命名空间,对所述非易失性存储器进行控制,
所述控制器构成为:
对多个缓冲器进行管理,所述多个缓冲器的数量比所述多个区的数量少,
根据从主机接收到用于向所述多个区之中的第1区顺序写入数据且与第1数据建立了关联的第1命令这一情况,
在所述多个缓冲器之中存在被分配了所述第1区的第1缓冲器的情况下,向所述第1缓冲器保存所述第1数据,
在所述多个缓冲器之中不存在所述第1缓冲器,而且所述多个缓冲器之中存在未被分配任何区的空闲的缓冲器的情况下,将所述第1区分配至所述空闲的缓冲器,向被分配了所述第1区的所述空闲的缓冲器保存所述第1数据,
在所述多个缓冲器之中不存在所述第1缓冲器,而且所述多个缓冲器之中不存在未被分配任何区的空闲的缓冲器的情况下,向所述多个缓冲器之中的为了保存数据的最后更新最早的缓冲器追加分配所述第1区,向被追加分配了所述第1区的所述缓冲器保存所述第1数据。
2.如权利要求1所述的存储器系统,其中,
所述控制器构成为:
对履历信息进行管理,该履历信息表示所述多个缓冲器为了保存数据而被更新的顺序,
在所述多个缓冲器之中不存在所述第1缓冲器,而且所述多个缓冲器之中不存在未被分配任何区的空闲的缓冲器的情况下,通过参照所述履历信息,决定所述多个缓冲器之中的为了保存数据的最后更新最早的缓冲器。
3.如权利要求1所述的存储器系统,其中,
所述控制器还构成为:
在所述多个缓冲器之中的第2缓冲器中保存着与所述多个区之中的第2区建立了关联的第2数据、以及与所述多个区之中的不同于所述第2区的第3区建立了关联的第3数据,而且所述第2数据的大小为向所述非易失性存储器的写入单位以上的情况下,
在所述第2缓冲器中维持了所述第3数据的状态下,从所述第2缓冲器提取所述第2数据,
向被分配给所述第2区的所述非易失性存储器内的存储区域,写入提取的所述第2数据。
4.如权利要求3所述的存储器系统,其中,
所述控制器还构成为:
在所述多个缓冲器之中的作为满状态的第3缓冲器中保存着与所述多个区之中的第4区建立了关联的第4数据、以及与所述多个区之中的不同于所述第4区的第5区建立了关联的第5数据,而且所述第4数据的大小比所述第5数据的大小大的情况下,
在所述第3缓冲器中维持了所述第5数据的状态下,从所述第3缓冲器提取所述第4数据,
向被分配给所述第4区的所述非易失性存储器内的存储区域,写入提取的所述第4数据。
5.如权利要求3所述的存储器系统,其中,
所述多个缓冲器各自包含:先进先出缓冲器、用于向所述先进先出缓冲器输入数据的输入端口、用于从所述先进先出缓冲器输出数据的输出端口、以及用于将所述输出端口与所述输入端口连接的路径,
所述控制器还构成为:
在从所述第2缓冲器的所述先进先出缓冲器能够读取的下一数据是所述第3数据的情况下,使所述路径有效,执行从所述第2缓冲器的所述先进先出缓冲器读取所述第3数据的动作、以及将所述读取的所述第3数据写回至所述第2缓冲器的所述先进先出缓冲器的动作,从而在所述第2缓冲器中维持所述第3数据。
6.如权利要求5所述的存储器系统,其中,
所述控制器还构成为:
在从所述第2缓冲器的所述先进先出缓冲器能够读取的所述下一数据是所述第2数据的情况下,使所述路径无效,执行从所述第2缓冲器的所述先进先出缓冲器的读取动作,从而从所述第2缓冲器提取所述第2数据。
7.如权利要求3所述的存储器系统,其中,
所述非易失性存储器包含多个块,该多个块各自包含多个页,所述多个块各自是数据删除动作的单位,所述多个页各自是数据写入动作及数据读取动作的单位,
所述写入单位是所述多个页各自的大小的倍数、或者所述多个块各自的大小的倍数。
8.如权利要求1所述的存储器系统,其中,
所述第1命令是在所述非易失性内存主机控制器接口规范NVM express中规定的区附加命令。
9.如权利要求1所述的存储器系统,其中,
所述第1命令是在所述非易失性内存主机控制器接口规范NVM express中作为地址特定写命令被规定的写命令。
10.一种控制方法,其中,使用通过非易失性内存主机控制器接口规范NVM express规定的被分割为多个区的分区命名空间,对非易失性存储器进行控制,具备:
对数量比所述多个区的数量少的多个缓冲器进行管理;
从主机接收用于向所述多个区之中的第1区顺序写入数据且与第1数据建立了关联的第1命令;
在所述多个缓冲器之中存在被分配了所述第1区的第1缓冲器的情况下,向所述第1缓冲器保存所述第1数据;
在所述多个缓冲器之中不存在所述第1缓冲器,而且所述多个缓冲器之中存在未被分配任何区的空闲的缓冲器的情况下,将所述第1区分配至所述空闲的缓冲器,向被分配了所述第1区的所述空闲的缓冲器保存所述第1数据;
在所述多个缓冲器之中不存在所述第1缓冲器,而且所述多个缓冲器之中不存在未被分配任何区的空闲的缓冲器的情况下,向所述多个缓冲器之中的为了保存数据的最后更新最早的缓冲器追加分配所述第1区,向被追加分配了所述第1区的所述缓冲器保存所述第1数据;
在所述多个缓冲器之中的第2缓冲器中保存着与所述多个区之中的第2区建立了关联的第2数据、以及与所述多个区之中的不同于所述第2区的第3区建立了关联的第3数据,而且所述第2数据的大小为向所述非易失性存储器的写入单位以上的情况下,在所述第2缓冲器中维持了所述第3数据的状态下,从所述第2缓冲器提取所述第2数据,向被分配给所述第2区的所述非易失性存储器内的存储区域,写入提取的所述第2数据;
在所述多个缓冲器之中的作为满状态的第3缓冲器中保存着与所述多个区之中的第4区建立了关联的第4数据、以及与所述多个区之中的不同于所述第4区的第5区建立了关联的第5数据,而且所述第4数据的大小比所述第5数据的大小大的情况下,在所述第3缓冲器中维持了所述第5数据的状态下,从所述第3缓冲器提取所述第4数据,向被分配给所述第4区的所述非易失性存储器内的存储区域,写入提取的所述第4数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020-207741 | 2020-12-15 | ||
JP2020207741A JP2022094705A (ja) | 2020-12-15 | 2020-12-15 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114637693A true CN114637693A (zh) | 2022-06-17 |
Family
ID=81942459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110947692.0A Pending CN114637693A (zh) | 2020-12-15 | 2021-08-18 | 存储器系统及控制方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11520520B2 (zh) |
JP (1) | JP2022094705A (zh) |
CN (1) | CN114637693A (zh) |
TW (1) | TWI792322B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736769B (zh) * | 2020-06-05 | 2022-07-26 | 苏州浪潮智能科技有限公司 | 一种稀释缓存空间的方法、设备以及介质 |
KR20220060372A (ko) * | 2020-11-04 | 2022-05-11 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
KR20220104511A (ko) * | 2021-01-18 | 2022-07-26 | 에스케이하이닉스 주식회사 | 컨트롤러 및 이를 포함하는 메모리 시스템 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4498426B2 (ja) * | 2008-03-01 | 2010-07-07 | 株式会社東芝 | メモリシステム |
JP5404483B2 (ja) * | 2010-03-17 | 2014-01-29 | 株式会社東芝 | メモリシステム |
US9690695B2 (en) * | 2012-09-20 | 2017-06-27 | Silicon Motion, Inc. | Data storage device and flash memory control method thereof |
TWI650764B (zh) * | 2016-04-27 | 2019-02-11 | 慧榮科技股份有限公司 | 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 |
US10642488B2 (en) | 2017-10-23 | 2020-05-05 | Micron Technology, Inc. | Namespace size adjustment in non-volatile memory devices |
JP6967959B2 (ja) * | 2017-12-08 | 2021-11-17 | キオクシア株式会社 | メモリシステムおよび制御方法 |
KR102503177B1 (ko) | 2018-03-05 | 2023-02-24 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작 방법 |
US10949120B2 (en) * | 2019-02-19 | 2021-03-16 | Intel Corporation | Host defined bandwidth allocation for SSD tasks |
US11797433B2 (en) | 2019-12-20 | 2023-10-24 | Sk Hynix Nand Product Solutions Corp. | Zoned namespace with zone grouping |
JP7346311B2 (ja) * | 2020-01-16 | 2023-09-19 | キオクシア株式会社 | メモリシステム |
JP7366795B2 (ja) * | 2020-02-14 | 2023-10-23 | キオクシア株式会社 | メモリシステムおよび制御方法 |
KR20210108107A (ko) * | 2020-02-25 | 2021-09-02 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
US11137920B1 (en) * | 2020-04-30 | 2021-10-05 | Micron Technology, Inc. | Storing zones in a zone namespace on separate planes of a multi-plane memory device |
-
2020
- 2020-12-15 JP JP2020207741A patent/JP2022094705A/ja active Pending
-
2021
- 2021-05-25 TW TW110118823A patent/TWI792322B/zh active
- 2021-08-18 CN CN202110947692.0A patent/CN114637693A/zh active Pending
- 2021-09-03 US US17/446,875 patent/US11520520B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
TWI792322B (zh) | 2023-02-11 |
US11520520B2 (en) | 2022-12-06 |
JP2022094705A (ja) | 2022-06-27 |
US20220188020A1 (en) | 2022-06-16 |
TW202225981A (zh) | 2022-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5296041B2 (ja) | メモリシステムおよびメモリシステムの制御方法 | |
EP2396729B1 (en) | Memory system and method of controlling memory system | |
JP5404483B2 (ja) | メモリシステム | |
CN114637693A (zh) | 存储器系统及控制方法 | |
US11726707B2 (en) | System and method of writing to nonvolatile memory using write buffers | |
US11762591B2 (en) | Memory system and method of controlling nonvolatile memory by controlling the writing of data to and reading of data from a plurality of blocks in the nonvolatile memory | |
US20190087323A1 (en) | Memory system and method for controlling nonvolatile memory | |
JP2021033849A (ja) | メモリシステムおよび制御方法 | |
US11762580B2 (en) | Memory system and control method | |
US11210226B2 (en) | Data storage device and method for first processing core to determine that second processing core has completed loading portion of logical-to-physical mapping table thereof | |
US20230091792A1 (en) | Memory system and method of controlling nonvolatile memory | |
JP2021033845A (ja) | メモリシステムおよび制御方法 | |
US7969781B2 (en) | Method of controlling memory system | |
US11886727B2 (en) | Memory system and method for controlling nonvolatile memory | |
KR101549569B1 (ko) | 가비지 컬렉션 수행 방법 및 그 방법을 이용한 플래시 메모리 장치 | |
CN114461132B (zh) | 存储器系统以及控制方法 | |
US20240201904A1 (en) | Memory system and method of controlling nonvolatile memory | |
US20240069747A1 (en) | Memory system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |