具体实施方式
以下,参照附图说明实施方式。
首先,参照图1,说明包括一实施方式涉及的存储***的信息处理***1的构成。
该存储***是构成为向非易失性存储器写入数据、并从非易失性存储器读出数据的半导体存储设备。该存储***例如作为基于NAND闪存技术的固态硬盘(SSD)3而实现。
信息处理***1包括主机(主机设备)2和SSD3。主机2是服务器、个人计算机这样的信息处理装置。作为一个作为主机2发挥功能的服务器的典型例,可列举数据中心内的服务器。
在利用数据中心内的服务器实现主机2的事例中,该主机(服务器)2可以经由网络50与多个最终用户(end user,终端用户)终端90连接。主机2能够对这些最终用户终端90提供各种服务。
能够由主机(服务器)2提供的服务的例子有:(1)向各客户端(最终用户终端90)提供***开发平台的平台即服务(platform as a service)、(2)向客户端(最终用户终端90)提供虚拟服务器这样的基础设施的基础设施即服务(infrastructure as a service)等。
多个虚拟机41、42、43、…47可以在作为该主机(服务器)2发挥功能的物理服务器上执行。这些虚拟机41、42、43、…47能够作为构成为向对应的客户端(最终用户终端90)提供各种服务的虚拟服务器发挥功能。
此外,容器型虚拟化环境可以应用于主机(服务器)2。在该情况下,在主机(服务器)2的操作***上分别配置多个容器(多个用户空间)。这些容器的每一个包括用于执行应用的独立的资源,能够执行与虚拟机(虚拟服务器)同等的功能。
SSD3可作为信息处理装置的主存储器使用,所述信息处理装置作为主机2发挥功能。SSD3既可以内置于信息处理装置,也可以经由线缆或网络与信息处理装置连接。
作为用于将主机2和SSD3相互连接的接口,可使用SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(注册商标)、Fibre channel以及NVM Express(NVMe)(注册商标)等。
SSD3具备控制器4和非易失性存储器(NAND型闪速存储器)5。SSD3也可以具备随机存取存储器例如DRAM6。
NAND型闪速存储器5包括存储单元阵列,所述存储单元阵列包括呈矩阵状配置的多个存储单元。NAND型闪速存储器5既可以是二维构造的NAND型闪速存储器,也可以是三维构造的NAND型闪速存储器。
NAND型闪速存储器5的存储单元阵列包括多个物理块B0~Bm-1。物理块B0~Bm-1的每一个由多个页(在这里为页P0~Pn-1)组成。物理块B0~Bm-1作为可寻址(addressable)的最小擦除单位发挥功能。物理块有时也称为“擦除块”、“物理擦除块”或仅称为“块”。页P0~Pn-1的每一个包括与同一字线连接的多个存储单元。页P0~Pn-1是数据写入工作和数据读入工作的单位。
控制器4经由Toggle、ONFI这样的NAND接口13,与作为非易失性存储器的NAND型闪速存储器5电连接。NAND接口13作为NAND控制电路发挥功能,所述NAND控制电路构成为控制NAND型闪速存储器5。
如图2所示,NAND型闪速存储器5可以包括多个NAND型闪速存储器芯片。各个NAND型闪速存储器芯片能够独立地工作。因此,NAND型闪速存储器芯片作为能够并列工作的最小单位发挥功能。在图2中,例示了如下情况:在NAND接口13连接有8个信道Ch.1~Ch.8,并在8个信道Ch.1~Ch.8的每一个连接有四个NAND型闪速存储器芯片。在该情况下,最多能够使32个NAND型闪速存储器芯片并列工作。
在本实施方式中,为了支援由主机2进行的存储管理,SSD3内的控制器4具有虚拟化支援机构。该虚拟化支援机构是用于支援由主机2进行的存储虚拟化的机构。该虚拟化支援机构能够使得虚拟机41、42、43、…47这样的多个虚拟服务器共有SSD3的物理资源,进而,还能够使得虚拟机41、42、43、…47这样的多个虚拟服务器直接地访问SSD3的物理资源。
该虚拟化支援机构在SSD3内配置能够自由地设定容量/性能/可用性/个数的多个存储区域,并将这些存储区域分别提供给主机(服务器)2上的虚拟机。通过将NAND型闪速存储器5进行逻辑上分割而得到这些存储区域。虚拟机与SSD3内存储区域之间的映射既可以是1:1,也可以是1:n(n为2以上)。也就是说,对一个虚拟机分配SSD3内的一个以上存储区域,作为该虚拟机专用的存储资源(storage resource)(虚拟盘)。
在这里,虚拟盘是指在虚拟机上执行的客户操作***作为物理盘而识别的一种文件。各虚拟机能够将分配给该虚拟机的虚拟盘作为物理盘进行处理。
具有虚拟化支援机构的SSD3能够制作和管理与容量/性能/可用性等相关的特征相互不同的各种存储区域(以下,也称为虚拟SSD(VSSD))。另外,具有虚拟化支援机构的SSD3也能够删除由主机2请求删除(移除)的虚拟SSD(VSSD)。通过虚拟SSD(VSSD)的删除而增加的NAND型闪速存储器5内的自由存储区可利用于新的虚拟SSD(VSSD)的制作。
虚拟SSD(VSSD)具有与虚拟盘同等的功能。因此,具有虚拟化支援机构的SSD3能够将用于制作和管理虚拟盘的仿真功能从主机2卸载(off-load)到SSD3。由此,能够降低主机2为了存储管理而需要执行的处理量,其结果,能够实现主机2的I/O性能的提高。
另外,控制器4也能够作为闪存转换层(FTL)发挥功能,所述闪存转换层构成为执行NAND型闪速存储器5的数据管理和NAND型闪速存储器5的块管理。
由该FTL执行的数据管理包括(1)表示每一个逻辑地址与每一个NAND型闪速存储器5的物理地址之间的对应关系的映射信息的管理,(2)用于隐藏以页为单位的读出/写入和以物理块为单位的擦除工作的处理等。逻辑地址是为了寻址SSD3而由主机2使用的地址。作为该逻辑地址,通常使用逻辑块地址(LBA)。
使用作为地址转换表(逻辑物理地址转换表)发挥功能的查找表(LUT),执行每一个逻辑块地址(LBA)与每一个物理地址之间的映射的管理。
在本实施方式中,控制器4使用与多个虚拟SSD(VSSD#1、VSSD#2、…VSSD#n)分别对应的多个查找表(LUT)31C、32C、…37C,按每个虚拟SSD(VSSD)管理每一个LBA与每一个物理地址之间的映射。
与某LBA对应的物理地址表示写入了该LBA的数据的NAND型闪速存储器5内的物理存储位置。查找表(LUT)31C、32C、…37C可以在SSD3的电源接通时从NAND型闪速存储器5加载到DRAM6。一般来说,各查找表(地址转换表)的大小比较大。因此,各查找表的至少一部分可以在DRAM6中作为地址转换表缓存而存储。
如果在地址转换表缓存中存在包括目的物理地址的缓存行(缓存命中),则立刻从由该目的物理地址指定的NAND型闪速存储器5内的物理存储位置读出数据,所述目的物理地址对应于由来自主机2的读命令指定的逻辑地址。
另一方面,如果在地址转换表缓存中不存在包括目的物理地址的缓存行(缓存失效),则从NAND型闪速存储器5读出包括目的物理地址的查找表内的一部分(地址转换表部)。然后,将地址转换表缓存内的置换对象缓存行的内容从地址转换表缓存中逐出,取而代之,从NAND型闪速存储器5读出的地址转换表部被存储在该缓存行中。然后,从由该目的物理地址指定的NAND型闪速存储器5内的物理存储位置读出数据。
在各虚拟SSD(VSSD)中,每一个擦除循环仅能够进行一次向页的数据写入。因此,控制器4将与某LBA对应的更新数据不是写入存储有与该LBA对应的以前的数据的物理存储位置,而是写入其他物理存储位置。然后,控制器4更新与该VSSD对应的查找表(LUT)并将该LBA与该其他物理存储位置进行关联,然后将以前的数据无效化。
块管理包括坏块的管理、损耗均衡以及垃圾回收等。
损耗均衡是用于使每一个物理块的消耗均匀化的工作。
为了增加能够写入数据的空闲块的个数,垃圾回收将有效数据和无效数据并存的几个对象块(对象物理块)内的有效数据复制到其他物理块(例如空闲块)。在这里,有效数据是指之后有可能会被参照的数据。无效数据是指已经不会被参照的数据。例如,与某LBA关联的数据是有效数据,与哪个LBA都不关联的数据是无效数据。然后,垃圾回收将被复制的有效数据的LBA的每一个映射到正确的物理地址。通过将有效数据复制到其他物理块而变成仅存在无效数据的物理块作为空闲块而被释放(解放)。由此,该物理块能够在执行了该擦除工作之后再利用。
在本实施方式中,垃圾回收能够按每个虚拟SSD(VSSD)独立地执行。由此,即使正在执行某虚拟SSD(VSSD)的垃圾回收,也能够大幅地减小该垃圾回收给对其他虚拟SSD(VSSD)的通常访问带来不良影响的可能性。其结果,能够解决所谓的相邻干扰(noisyneighbor)问题。
接着,说明控制器4的构成。
控制器4包括主机接口11、CPU12、NAND接口13以及DRAM接口14等。这些CPU12、NAND接口13以及DRAM接口14经由总线10相互连接。
该主机接口11是构成为执行与主机2的通信的主机接口电路。该主机接口11例如可以是PCIe控制器(NVMe控制器)。主机接口11从主机2接收各种命令(写命令、读命令、VSSD管理命令、取消映射(UNMAP)命令等)。
写命令对SSD3请求写入由该写命令指定的数据。写命令可以包括开始LBA、传送长度以及VSSDID。写命令内的VSSDID是用于唯一地识别应写入数据的VSSD的识别符。读命令对SSD3请求读出由该读命令指定的数据。读命令可以包括开始LBA、传送长度以及VSSDID。读命令内的VSSDID是用于唯一地识别应读出数据的VSSD的识别符。
此外,在多个VSSD的每一个与主机2上的虚拟机的每一个进行预先关联的事例中,写命令/读命令可以包括虚拟机ID来取代VSSD的ID。虚拟机ID是发行了写入请求(写命令)/读出请求(读命令)的虚拟机的识别符。在控制器4接收到包括某虚拟机ID的写命令时,控制器4向与该虚拟机ID进行了关联的VSSD写入数据。
VSSD管理命令是对SSD3请求VSSD的制作或删除的命令。VSSD管理命令包括用于向虚拟机提供与各个用户(最终用户)的存储(storage)要件相适合的VSSD的各种参数。这些参数能够向主机2提供用于进行每一个VSSD的QoS控制的功能。更详细而言,这些参数用于自由设定VSSD的容量/性能/可用性等。主机2能够通过使用该VSSD管理命令,指定与应制作的VSSD的容量/性能/可用性相关的要件。SSD3能够制作满足与由主机2指定的容量/性能/可用性相关的要件的VSSD。因此,数据中心从业者能够根据各个最终用户的需要(needs),自由设定向这些最终用户提供的存储(VSSD)的性能等。
CPU12是构成为控制主机接口11、NAND接口13以及DRAM接口14的处理器。CPU12除了上述FTL的处理外,还执行用于处理来自主机2的各种命令的命令处理等。
这些FTL处理和命令处理可以受由CPU12执行的固件(farmware)控制。该固件使CPU12作为VSSD制作部21、写入数据总量测定部22、写入限制部23、NAND处理执行时间控制部24、主机侧访问带宽控制部25以及存储器(memory)资源量分配部26而发挥功能。
VSSD制作部21具有用于管理多个VSSD的多(multi)VSSD管理功能。各VSSD相当于作为非易失性存储器的NAND型闪速存储器5内的一种存储区域。各VSSD由分配给该VSSD用的几个物理块构成。在分配给某VSSD用的物理块的每一个中,仅存储与该VSSD进行了关联的数据(来自与该VSSD进行了关联的虚拟机的数据),不存储与其他VSSD进行了关联的数据(来自其他虚拟机的数据)。换句话说,NAND型闪速存储器5内的各个物理块仅存储与单一的VSSD对应的数据。
VSSD制作部21基于来自主机2的每一个VSSD的制作请求,制作多个VSSD即多个存储区域。换句话说,VSSD制作部21基于来自主机2的每一个VSSD的制作请求,将NAND型闪速存储器5逻辑上分割为多个存储区域(VSSD)。
主机2能够使用上述VSSD管理命令,向SSD3请求制作每一个VSSD。VSSD制作部21能够制作满足与由主机2指定的容量/性能/可用性等相关的要件的每一个VSSD。
主机2能够通过向SSD3发行几个VSSD管理命令,按每个VSSD指定与容量/性能/可用性等相关的参数。
在与VSSD的可用性等相关的参数的例子中,可以包含能够向VSSD写入的数据的总量。向VSSD能够写入的数据的总量表示能够向VSSD写入的数据的总量的上限值。
通常,向某VSSD写入的数据的总量的增加会引起该VSSD内的每一个物理块的改写次数(编程/擦除循环的数量)的增加。也就是说,向VSSD写入的数据的总量越大,则使该VSSD的消耗度越增加。其原因在于,向VSSD写入的数据的总量越大,则该VSSD内的各物理块的编程/擦除循环的数量越容易增加,由此,该VSSD的消耗度增加。
因此,如果完全不限制写入的数据的总量,则由于特定VSSD的消耗度的过度增加,无法利用的物理块(称为“坏块”)增加,由此,有时会引起SSD3的寿命的劣化。
另外,如果完全不限制写入的数据的总量,则用于SSD3与主机2之间的通信的带宽由从特定的虚拟机面向特定的VSSD的大量I/O所专有,由此,有时其他各个虚拟机的I/O性能也会降低。
主机2通过将能够写入的数据的总量分配给每一个VSSD,能够进行各个VSSD的QoS控制。
例如,也可以是,在请求制作对被频繁地更新的类型的数据(热数据)进行处理的虚拟机用的VSSD的情况下,主机2指定大的能够写入数据总量。这是由于,关于被写入具有高更新频率的数据的VSSD,写入该VSSD的数据的总量很有可能增加。另一方面,例如,在请求制作对更新频率低的类型的数据(冷数据)进行处理的虚拟机用的VSSD的情况下,主机2可以指定小的能够写入数据总量。此外,也可以是,数据中心从业者对请求能够写入的数据的总量大的VSSD即容许大的写入总量的VSSD的最终用户收取高昂的VSSD使用费(租金),对请求能够写入的数据的总量少的VSSD即只容许少的写入总量的VSSD的最终用户收取便宜的VSSD使用费(租金)。各个最终用户能够利用具有与自身的工作负载相适合的写入总量的VSSD。
VSSD制作部21基于来自按每个VSSD指定能够写入的数据的总量(写入总量)的主机2的请求,按各个VSSD管理表示能够写入的数据的总量的上限(写入总量的上限)的上限值。
写入数据总量测定部22测定写入到各VSSD的数据的总量。在SSD3内制作有VSSD#1、VSSD#2、…VSSD#n的情况下,写入数据总量测定部22分别独立地测定写入到VSSD#1的数据的总量、写入到VSSD#2的数据的总量…以及写入到VSSD#n的数据的总量。
例如,也可以是,写入数据总量测定部22测定从主机2写入到VSSD#1的数据的总量与通过VSSD#1的垃圾回收写入到VSSD#1的数据的总量的合计量来作为写入到VSSD#1的数据的总量。同样地,也可以是,写入数据总量测定部22测定从主机2写入到VSSD#2的数据的总量与通过VSSD#2的垃圾回收写入到VSSD#2的数据的总量的合计量来作为写入到VSSD#2的数据的总量。由此,能够也考虑各VSSD的垃圾回收,限制能够写入到各VSSD的数据的总量的上限。
此外,也可以是,写入数据总量测定部22测定从主机2写入到VSSD#1的数据的总量来作为写入到VSSD#1的数据的总量,测定从主机2写入到VSSD#2的数据的总量来作为写入到VSSD#2的数据的总量。
另外,也可以是,VSSD管理命令选择性地使用能够指定向VSSD能够写入的数据的总量的上限值的以下两个参数。
(1)指定SSD内总写入量的参数
(2)指定写入请求总量的参数
指定SSD内总写入量的参数指定从主机2能够向该VSSD写入的数据的总量与通过该VSSD的垃圾回收能够向该VSSD写入的数据的总量的合计上限值。该参数用于也考虑各VSSD的垃圾回收,限制能够向各VSSD写入的数据的总量的上限。也可以是,仅在指定了对某VSSD的SSD内总写入量的情况下,写入数据总量测定部22测定从主机2写入到该VSSD的数据的总量与通过该VSSD的垃圾回收写入到该VSSD的数据的总量的合计量来作为写入到该VSSD的数据的总量。
指定写入请求总量的参数指定从主机2能够向该VSSD写入的数据的总量的上限值。该参数用于限制从主机2能够向各VSSD写入的数据的总量的上限。也可以是,仅在指定了对某VSSD的写入请求总量的情况下,写入数据总量测定部22测定从主机2写入到该VSSD的数据的总量来作为写入到该VSSD的数据的总量。
在写入到VSSD#1的数据的被测定到的总量达到VSSD#1的能够写入数据的总量的上限值的情况下,写入限制部23限制从主机2向VSSD#1的数据的写入(进一步的写入)。由此,能够防止超过由主机2指定的VSSD#1用的写入总量的量的数据被向该VSSD#1写入。与使用VSSD#1的虚拟机对应的最终用户可以对数据中心从业者请求能够写入数据的总量的增加。数据中心从业者可以对该最终用户收取追加的使用费,然后,向SSD3发送用于再设定VSSD#1的VSSD管理命令,以使得能够向VSSD#1写入的数据的总量增加。
在写入到VSSD#2的数据的被测定到的总量达到VSSD#2的能够写入数据的总量的上限值的情况下,写入限制部23限制从主机2向VSSD#2的数据的写入。由此,能够防止超过由主机2指定的VSSD#2的写入总量的量的数据被向VSSD#2写入。
同样地,在写入到VSSD#n的数据的被测定到的总量达到VSSD#n的能够写入数据的总量的上限值的情况下,写入限制部23限制从主机2向VSSD#n的数据的写入。由此,能够防止超过由主机2指定的VSSD#n的写入总量的量的数据被向VSSD#n写入。
此外,SSD3的控制器4也能够向主机2报告按每个VSSD测定出的写入总量(SSD内总写入量和/或写入请求总量)。例如,在请求取得从主机2向某VSSD的写入总量(SSD内总写入量和/或写入请求总量)的情况下,控制器4向主机2报告写入总量(SSD内总写入量和/或写入请求总量)。
与VSSD的容量相关的参数的例子包括用户容量和预留空间(over provisioning)容量。用户容量相当于用户可访问LBA空间。预留空间是指:分配不视为主机2可利用的用户空间(用户可访问LBA空间)的SSD3内的存储容量。预留空间容量是不视为主机2可利用的用户空间的SSD3内的存储容量。用户容量越增加,则最终用户可访问的用户空间就变得越大。另外,预留空间容量相对于用户容量的比例越高,则VSSD的性能和耐久性就越提高。
也可以是,在请求制作需要高耐久性的VSSD的情况下,主机2指定相对于用户容量具有例如百分之50~100的容量的预留空间容量。另一方面,也可以是,在请求制作不需要高耐久性的VSSD的情况下,主机2指定相对于用户容量具有例如百分之零~百分之几的容量的预留空间容量。
也可以是,为了指定VSSD的用户容量和该VSSD的预留空间容量的组,主机2指定VSSD的用户容量和表示预留空间容量相对于该用户容量的比例的百分比。或者,也可以是,为了指定VSSD的用户容量和VSSD的预留空间容量的组,主机2指定VSSD的用户容量和应分配给该VSSD的物理块的个数。在后者的情况下,通过从与分配给VSSD的物理块的个数相当的容量减去用户容量而得到的剩余容量成为实际的预留空间容量。
也可以是,数据中心从业者对请求具有高耐久性的VSSD的最终用户收取高昂的VSSD租金,对请求不需要高耐久性的VSSD的最终用户收取便宜的VSSD租金。
VSSD制作部21基于按每个VSSD指定用户容量和预留空间容量的组的来自主机2的请求,向各个VSSD分配用户容量与预留空间容量的合计容量。在主机2指定了应分配给VSSD的物理块的个数的情况下,VSSD制作部21将所指定的个数的物理块确保(预约)为该VSSD用即可。与所确保(预约)的物理块的个数对应的总容量成为分配给该VSSD的、用户容量与预留空间容量的合计容量。
与VSSD的性能相关的参数的例子包括NAND处理执行时间(NAND带宽)。NAND处理执行时间是指每单位时间的NAND型闪速存储器5的擦除、写入或读出工作的执行时间的上限值。也可以是,主机2在请求制作需要高速访问性能的VSSD的情况下,指定大的上限值(长的NAND处理执行时间),在请求制作不需要高速访问性能的VSSD的情况下,指定小的上限值(短的NAND处理执行时间)。
也可以是,数据中心从业者对请求具有高速访问性能的VSSD的最终用户收取高昂的VSSD租金,对请求不需要高速访问性能的VSSD的最终用户收取便宜的VSSD租金。
VSSD制作部21基于按每个VSSD指定NAND处理执行时间的上限值的来自主机2的请求,按各个VSSD管理NAND处理执行时间的上限值,也就是每单位时间的NAND型闪速存储器5的擦除、写入或读出工作的时间的上限值。
NAND处理执行时间控制部24以使得每单位时间的各VSSD的擦除、写入或读出工作的执行时间保持在所指定的各VSSD的NAND处理执行时间的上限值以内的方式执行面向各VSSD的每一个命令。
与VSSD的性能相关的参数的例子也包括主机2与各VSSD之间的带宽(主机侧访问带宽)。
主机2能够按每个VSSD指定用于与主机2通信的带宽。例如,在将主机2与SSD3连接的接口为PCIe的情况下,主机2与SSD3之间的最大带宽为3.2Gbps。现在,假设在SSD3内制作VSSD#1、#2、#3这三个的情况。例如,主机2可以将2Gbps的带宽指定为VSSD#1与主机2(与VSSD#1进行了关联的虚拟机#1)之间的带宽,将1.2Gbps的带宽指定为VSSD#2与主机2(与VSSD#2进行了关联的虚拟机#2)之间的带宽,将1Gbps的带宽指定为VSSD#3与主机2(与VSSD#3进行了关联的虚拟机#3)之间的带宽。
主机侧访问带宽控制部25基于按每个VSSD指定用于与主机2通信的带宽的来自主机2的请求,按每个VSSD设定用于与主机2通信的带宽。在该情况下,主机侧访问带宽控制部25以使得各VSSD与主机2之间的实际的访问带宽保持在指定的各VSSD的主机侧访问带宽内的方式执行面向各VSSD的每一个命令。
例如,也可以是,主机接口11(例如PCIe控制器)通过与主机2协作,控制经由一个VSSD与一个虚拟机之间的路径的传送速率。或者,也可以是,控制器4按各个VSSD的每一个,控制对来自多个命令发行队列的命令进行取得的速率,所述多个命令发行队列与放置在主机2的存储器上的多个VSSD对应。或者,也可以是,控制器4按各个VSSD的每一个,控制执行命令队列内的命令的速率,所述命令队列存储有从主机2接收的命令。
与VSSD的性能相关的参数的例子也包括能够用于存储各个VSSD的管理数据的DRAM6的存储器(memory)资源量。例如,在制作了多个VSSD(VSSD#1、VSSD#2、…VSSD#n)的情况下,在DRAM6中,确保了与这些多个VSSD对应的多个存储区域31、32、…37。
在存储区域31中,存储VSSD#1用的管理数据的至少一部分。VSSD#1用的管理数据包括VSSD#1用的查找表(逻辑物理地址转换表)31C。存储区域31作为存储NAND型闪速存储器5内的查找表31C的至少一部分的缓存区域发挥功能。因此,存储区域31的大小越大,则缓存命中率就越提高,对VSSD#1的访问速度就变得越快。另外,存储区域31可以包括写入缓冲器31A和读出缓冲器31B,所述写入缓冲器31A用于暂时存储来自主机2的面向VSSD#1的写入数据,所述读出缓冲器31B用于暂时存储从VSSD#1读出的数据。
在存储区域32中,存储VSSD#2用的管理数据的至少一部分。VSSD#2用的管理数据包括VSSD#2用的查找表(逻辑物理地址转换表)32C。存储区域32作为存储NAND型闪速存储器5内的查找表32C的至少一部分的缓存区域发挥功能。因此,存储区域32的大小越大,则缓存命中率就越提高,对VSSD#2的访问速度就变得越快。另外,存储区域32可以包括写入缓冲器32A和读出缓冲器32B,所述写入缓冲器32A用于暂时存储来自主机2的面向VSSD#2的写入数据,所述读出缓冲器32B用于暂时存储从VSSD#2读出的数据。
在存储区域37中,存储VSSD#n用的管理数据的至少一部分。VSSD#n用的管理数据包括VSSD#n用的查找表(逻辑物理地址转换表)37C。存储区域37作为存储NAND型闪速存储器5内的查找表37C的至少一部分的缓存区域发挥功能。因此,存储区域37的大小越大,则缓存命中率就越提高,对VSSD#n的访问速度就变得越快。另外,存储区域37可以包括写入缓冲器37A和读出缓冲器37B,所述写入缓冲器37A用于暂时存储来自主机2的面向VSSD#n的写入数据,所述读出缓冲器37B用于暂时存储从VSSD#n读出的数据。
存储器资源量分配部26基于按每个VSSD指定DRAM6的存储器(memory)资源的量的来自主机2的请求,确保DRAM6内的第一大小的存储区域31来作为存储VSSD#1的管理数据的至少一部分的存储区域,确保DRAM6内的第二大小的存储区域32来作为存储VSSD#2的管理数据的至少一部分的存储区域。
NAND接口13在CPU12的控制之下控制NAND型闪速存储器5。DRAM接口14是构成为在CPU12的控制之下控制DRAM6的DRAM控制器。DRAM6的存储区域的一部分用于存储VSSD管理表30,所述VSSD管理表30用于管理多个VSSD的每一个。
图3表示使用了以往类型SSD的虚拟化环境和使用了包括虚拟化支援机构3A的SSD3的虚拟化环境。
图3的左部表示使用了以往类型SSD的虚拟化环境。在使用了以往类型SSD的虚拟化环境中,在主机(服务器)侧CPU上工作的软件包括虚拟盘服务软件,该虚拟盘服务软件通过仿真,从物理存储(storage)(在这里为SSD)中生成虚拟盘#1、#2、#3。也就是说,虚拟盘服务软件将物理存储(在这里为SSD)的资源作为逻辑存储池而管理,使用该存储池生成虚拟盘#1、#2、#3,并将这些虚拟盘#1、#2、#3分别提供给虚拟机#1、#2、#3。
图3的右部表示使用了包括虚拟化支援机构3A的SSD3的虚拟化环境。
在使用了包括虚拟化支援机构3A的SSD3的虚拟化环境中,利用SSD3内的虚拟化支援机构3A在SSD3内制作VSSD51、VSSD52以及VSSD53。
这些VSSD51、VSSD52以及VSSD53具有与虚拟盘#1、#2、#3同等的功能。因此,能够从在主机(服务器)侧CPU上工作的软件中除去制作虚拟盘#1、#2、#3的仿真功能。其结果,由于能够简化在主机(服务器)侧CPU上工作的软件的构成,所以能够缩短软件内的处理的延迟,由此,能够实现主机(服务器)的I/O性能的提高。SSD3的物理资源由虚拟机41、42、43共有。虚拟机41、42、43能够经由设备驱动器40,直接地访问SSD3内的VSSD51、VSSD52以及VSSD53。
图4表示SSD3内的VSSD的数量与主机(服务器)侧的虚拟机的数量的关系。
在图4中,假设在主机(服务器)侧执行6个虚拟机41~46,在SSD3中制作与虚拟机41~46对应的6个VSSD51~56的情况。在使用了包括虚拟化支援机构3A的SSD3的虚拟化环境中,由于能够简化在主机(服务器)侧CPU上工作的软件的构成,所以能够容易地增加主机(服务器)侧的虚拟机的数量。由此,能够容易地增加每一个主机(服务器)的用户的数量。
接着,参照图5,说明在SSD3内制作的VSSD。
SSD3的虚拟化支援机构3A制作与虚拟机41、42、…47分别对应的多个VSSD51、52、…57。在该情况下,虚拟化支援机构3A能够管理与多个VSSD51、52、…57的每一个对应的多个逻辑地址空间(LBA空间)。
各VSSD可以利用命名空间(name space)而实现。在该情况下,为了将NAND型闪速存储器5的存储区域逻辑上分割为多个区域,利用多个命名空间。各命名空间是NAND型闪速存储器5内的存储区域,并被分配逻辑地址范围(LBA范围)。各个命名空间利用这些命名空间的识别符而识别。在利用命名空间实现了各VSSD的情况下,向各VSSD分配LBA范围(LBA0~LBAn-1)。LBA范围的大小(即LBA的数量)按每个VSSD(命名空间)可变。各LBA范围从LBA0开始。
图6表示由SSD3执行的VSSD管理。
在这里,假设利用多个命名空间实现多个VSSD的情况。向VSSD51分配有0~n-1的逻辑地址空间(LBA空间)A1。向VSSD52分配有0~n-1的逻辑地址空间(LBA空间)A2。同样地,向VSSD57分配有0~n-1的逻辑地址空间(LBA空间)An。
在本实施方式中,查找表LUT按每个VSSD分割。也就是说,利用SSD3的控制器4管理与VSSD51~57对应的查找表LUT31C~37C。
查找表LUT31C管理VSSD51的LBA空间A1与NAND型闪速存储器5的物理地址之间的映射。查找表LUT32管理VSSD52的LBA空间A2与NAND型闪速存储器5的物理地址之间的映射。查找表LUT37C管理VSSD57的LBA空间An与NAND型闪速存储器5的物理地址之间的映射。
控制器4能够通过使用查找表LUT31C~37C,按每个VSSD(存储区域)独立地进行垃圾回收。在某VSSD的垃圾回收中,从分配给该VSSD的每一个物理块选择作为垃圾回收对象的一个以上物理块,该选择出的各物理块内的有效数据被复制到分配给该VSSD的物理块(空闲块)。然后,更新与VSSD对应的查找表LUT,对与被复制的数据对应的每一个LBA关联正确的物理地址。通过按该VSSD(存储区域)的每一个而独立的垃圾回收,能够防止与不同的VSSD进行了关联的数据由于垃圾回收而存储在相同的物理块中这一情况的发生。
也可以是,管理数据100保持表示VSSD51~57与分配给这些VSSD51~57的物理块的个数之间的关系的信息。
在本实施方式中,通过垃圾回收生成的空闲块被放入在VSSD51~57间共有的空闲块池。由此,能够在VSSD51~57间共有每一个空闲块。
图7表示VSSD管理命令。
VSSD管理命令是用于VSSD管理的命令,所述VSSD管理包括VSSD的制作和删除。VSSD管理命令可以包括以下参数。
(1)制作(创建)/删除(移除)
(2)capacity(用户容量)
(3)over-provisioning(预留空间)
(4)NAND处理执行时间
(5)存储器(memory)资源量
(6)SSD内写入总量
(7)写入请求总量
(8)主机侧访问带宽
制作/删除的参数的值0h向SSD3请求VSSD的制作。制作/删除的参数的值1h向SSD3请求VSSD的删除。也可以是,在请求VSSD的删除的情况下,指定作为删除对象的VSSD的识别符(VSSDID)的参数被设定为VSSD管理命令。
capacity、over-provisioning、NAND处理执行时间、存储器资源量、SSD内写入总量、写入请求总量以及主机侧访问带宽是用于自由设定VSSD的容量/性能/可用性的参数。VSSD管理命令既能够指定这些参数的全部,也能够指定这些参数中的至少一个。
capacity参数指定应分配给作为制作对象的VSSD的容量(用户容量)。如上所述,用户容量相当于用户可访问LBA空间。该用户容量相当于应分配给该VSSD的LBA的数量。该用户容量既可以利用字节指定,也可以利用应分配给该VSSD的LBA的数量指定。
over-provisioning参数指定应分配给作为制作对象的VSSD的预留空间容量。
NAND处理执行时间参数指定NAND型闪速存储器5内的处理的执行时间的上限值,也就是每单位时间的制作对象VSSD的擦除、写入或读出工作的执行时间的上限值。
存储器资源量参数指定应分配给作为制作对象的VSSD的存储器资源(DRAM6)的量。
SSD内写入总量参数和写入请求总量参数是用于指定向作为制作对象的VSSD能够写入的数据的总量的上限值的参数。能够写入的数据的总量例如可以是在每个设定的期间(例如一天、一个月等)中能够写入的数据的总量。
为了指定能够向作为制作对象的VSSD写入的数据的总量的上限值,主机2既可以指定SSD内写入总量参数和写入请求总量参数双方,也可以仅指定SSD内写入总量参数和写入请求总量参数中的一方。
SSD内写入总量参数指定能够从主机2向制作对象VSSD写入的数据的总量、和通过该VSSD的垃圾回收能够向该VSSD写入的数据的总量的合计的上限值。
写入请求总量参数指定能够从主机2向作为制作对象的VSSD写入的数据的总量的上限值。
主机侧访问带宽参数指定用于与主机2通信的、主机2与制作对象VSSD之间的带宽。
图8表示存储区域(VSSD)管理表30。
VSSD管理表30包括由VSSD制作部21制作而成的VSSD51~57所对应的多个条目。各条目包括“VSSDID”字段、“capacity”字段、“over-provisioning”字段、“NAND处理执行时间”字段、“存储器资源量”字段、“SSD内写入总量”字段、“写入请求总量”字段以及“主机侧访问带宽”字段。
在“VSSDID”字段中存储有对应的VSSD的识别符(VSSDID)。
在“capacity”字段中,存储有对应的VSSD的capacity(用户容量)。
在“over-provisioning”字段中,存储有对应的VSSD的预留空间容量。
在“NAND处理执行时间”字段中,存储有对应的VSSD的处理执行时间的上限值。
在“存储器资源量”字段中,存储有应分配给对应的VSSD的DRAM6的存储器资源的量。
在“SSD内写入总量”字段中,存储有能够向对应的VSSD写入的数据的总量的上限值。
在“写入请求总量”字段中,存储有能够由主机2向对应的VSSD写入的数据的总量的上限值。
在“主机侧访问带宽”字段中,存储有对应的VSSD与主机2之间的带宽。
接着,参照图9,说明基于按每个VSSD指定用户容量和预留空间容量的组的来自主机2的请求,向各个VSSD分配用户容量和预留空间容量的工作。
控制器4的VSSD制作部21基于按每个VSSD指定用户容量和预留空间容量的组的来自主机2的请求,向各个VSSD分配所指定的用户容量与所指定的预留空间容量的合计的容量。
在主机2向SSD3请求某VSSD(在这里为VSSD#n)的制作的情况下,主机2指定应分配给该VSSD#n用的用户容量和应分配给该VSSD#n用的预留空间容量。控制器4的VSSD制作部21将所指定的用户容量与所指定的预留空间容量的合计的容量分配给该VSSD#n用。如图9所示,所分配的用户容量与预留空间容量的合计成为该VSSD#n的总容量。如平时那样,预留空间容量相对于用户容量的比例越大,则该VSSD#n的性能和耐久性越提高。主机2通过使用capacity参数和over-provisioning参数,能够向SSD3请求制作具有与用户的要件相符的性能和耐久性的VSSD。SSD3通过将由capacity参数指定的用户容量与由over-provisioning参数指定的预留空间容量的合计容量分配给VSSD,制作具有与用户的要件相符的性能和耐久性的VSSD。
此外,也可以是,主机2将应分配给VSSD#n的物理块的个数指定为VSSD#n的预留空间容量。在该情况下,也可以是,VSSD制作部21将所指定的物理块的个数确保(预约)为VSSD#n用,并向VSSD#n分配与这些物理块的个数对应的容量来作为其总容量。通过从总容量减去用户容量而得到的剩余容量成为预留空间容量。
图10表示由控制器4执行的NAND处理执行时间控制处理。
在NAND型闪速存储器5中,执行以块为单位的擦除工作、以页为单位的写入工作以及以页为单位的读出工作。SSD3的控制器4按照从主机2接收的读请求(读命令)/写请求(写命令),控制NAND型闪速存储器5的读出工作和写入工作。另外,为了执行NAND型闪速存储器5的垃圾回收(GC),控制器4控制NAND型闪速存储器5的擦除工作、写入工作以及读出工作。
在本实施方式中,将来自主机2的数据向写入目的地块写入的写入工作(主机写入工作)和用于垃圾回收的数据复制工作同步地进行。例如,当某设定的量的数据复制完成时,许可某设定的量的主机写入工作。另外,当写入来自主机2的数据的写入目的地块被数据填满时,在SSD3内,执行某空闲块的擦除工作,该空闲块被分配为新的写入目的地块。因此,根据来自主机2的每一个命令的执行的进展,分别执行所需要的NAND型闪速存储器5的擦除工作、写入工作以及读出工作。
NAND型闪速存储器5的擦除工作所需的擦除时间例如为2ms。NAND型闪速存储器5的读出工作所需的读出时间例如为100μs。NAND型闪速存储器5的写入工作所需的编程时间例如为1ms。
控制器4基于从主机2按每个VSSD指定的NAND处理执行时间,按每个VSSD管理每单位时间的NAND型闪速存储器5的擦除、写入或读出工作的执行时间的上限值。
每单位时间的NAND型闪速存储器5的擦除、写入或读出工作的执行时间的上限值是指:在每单位时间(例如一秒钟)中,许可占有某一个NAND型闪速存储器芯片的时间(NAND处理执行时间)。
在图10中,假设有如下情况:由主机2指定的VSSD#1用的NAND处理执行时间为100ms,由主机2指定的VSSD#2用的NAND处理执行时间为200ms,由主机2指定的VSSD#n用的NAND处理执行时间为150ms。
关于VSSD#1,每一个循环(例如一秒钟)中的擦除、写入或读出工作的总执行时间的上限被限制为最大100ms。在该情况下,关于VSSD#1,例如,能够在每一个循环(一秒钟)中执行一次擦除工作和98次写入工作。或者,例如,也能够在每一个循环(一秒钟)中执行一次擦除工作和980次读出工作。
控制器4的NAND处理执行时间控制部24控制来自主机2的面向VSSD#1的每一个命令的执行,以使得每一个循环(例如一秒钟)中的VSSD#1的擦除、写入或读出工作的执行时间保持在100ms的范围内。换句话说,NAND处理执行时间控制部24在每一个循环中执行正在排队的面向VSSD#1的命令组内的预定数的每一个命令,以使得每一个循环(例如一秒钟)中的VSSD#1的擦除、写入或读出工作的执行时间保持在100ms的范围内。
例如,也可以是,NAND处理执行时间控制部24在每个循环中向VSSD#1分发与100ms的执行时间对应的100个令牌(token)。每当执行VSSD#1的一次擦除工作时,从VSSD#1回收与擦除时间对应的数量的令牌(例如20个令牌)。另外,每当执行VSSD#1的一次读出工作时,从VSSD#1回收与读出时间对应的数量的令牌(例如1个令牌)。另外,每当执行VSSD#1的一次写入工作时,从VSSD#1回收与编程时间对应的数量的令牌(例如10个令牌)。当VSSD#1用的剩余令牌消失时,停止面向VSSD#1的命令的执行。然后,在下一个循环的开始时,NAND处理执行时间控制部24再次向VSSD#1分发与100ms的执行时间对应的100个令牌。由此,能够调度(scheduling)正在排队的面向VSSD#1的命令组的执行定时,以使得每一个循环(例如一秒钟)中的VSSD#1的擦除、写入或读出工作的执行时间保持在100ms的范围内。
关于VSSD#2,每一个循环(例如一秒钟)中的擦除、写入或读出工作的总执行时间的上限被限制为最大200ms。控制器4的NAND处理执行时间控制部24控制来自主机2的面向VSSD#2的每一个命令的执行,以使得每一个循环(例如一秒钟)中的VSSD#2的擦除、写入或读出工作的执行时间保持在200ms的范围内。换句话说,NAND处理执行时间控制部24在每一个循环中执行正在排队的面向VSSD#2的命令组内的预定数的每一个命令,以使得每一个循环(例如一秒钟)中的VSSD#2的擦除、写入或读出工作的执行时间保持在200ms的范围内。
例如,也可以是,NAND处理执行时间控制部24在每个循环中向VSSD#2分发与200ms的执行时间对应的200个令牌。每当执行VSSD#2的一次擦除工作时,从VSSD#2回收与擦除时间对应的数量的令牌(例如20个令牌)。另外,每当执行VSSD#2的一次读出工作时,从VSSD#2回收与读出时间对应的数量的令牌(例如1个令牌)。另外,每当执行VSSD#2的一次写入工作时,从VSSD#2回收与编程时间对应的数量的令牌(例如10个令牌)。当VSSD#2用的剩余令牌消失时,停止面向VSSD#2的命令的执行。然后,在下一个循环的开始时,NAND处理执行时间控制部24再次向VSSD#2分发与200ms的执行时间对应的200个令牌。由此,能够执行正在排队的面向VSSD#2的命令组,以使得每一个循环(例如一秒钟)中的VSSD#2的擦除、写入或读出工作的执行时间保持在200ms的范围内。
关于VSSD#n,每一个循环(例如一秒钟)中的擦除、写入或读出工作的总执行时间的上限被限制为最大150ms。控制器4的NAND处理执行时间控制部24控制来自主机2的面向VSSD#n的每一个命令的执行,以使得每一个循环(例如一秒钟)中的VSSD#n的擦除、写入或读出工作的执行时间保持在150ms的范围内。换句话说,NAND处理执行时间控制部24在每一个循环中执行正在排队的面向VSSD#n的命令组内的预定数的每一个命令,以使得每一个循环(例如一秒钟)中的VSSD#n的擦除、写入或读出工作的执行时间保持在150ms的范围内。
例如,也可以是,NAND处理执行时间控制部24在每个循环中向VSSD#n分发与150ms的执行时间对应的150个令牌。每当执行VSSD#n的一次擦除工作时,从VSSD#n回收与擦除时间对应的数量的令牌(例如20个令牌)。另外,每当执行VSSD#n的一次读出工作时,从VSSD#n回收与读出时间对应的数量的令牌(例如1个令牌)。另外,每当执行VSSD#n的一次写入工作时,从VSSD#n回收与编程时间对应的数量的令牌(例如10个令牌)。当VSSD#n用的剩余令牌消失时,停止面向VSSD#n的命令的执行。然后,在下一个循环的开始时,NAND处理执行时间控制部24再次向VSSD#n分发与150ms的执行时间对应的150个令牌。由此,能够执行正在排队的面向VSSD#n的命令组,以使得每一个循环(例如一秒钟)中的VSSD#n的擦除、写入或读出工作的执行时间保持在150ms的范围内。
也可以是,上述令牌分发和回收处理用于按各个VSSD控制对来自主机2的存储器上的多个命令队列(命令发行队列)的命令进行取得的速率。在该情况下,在主机2的存储器上,配置有与多个VSSD对应的多个命令队列(命令发行队列)。来自虚拟机#1的命令放置在与VSSD#1对应的命令队列,来自虚拟机#2的命令放置在与VSSD#2对应的命令队列,来自虚拟机#n的命令放置在与VSSD#n对应的命令队列。在令牌分发和回收处理中,将与每一个VSSD对应的处理执行时间的上限值所对应的个数的令牌分配给这些VSSD。在各个VSSD中,从主机2的存储器上的命令队列取得面向该VSSD的命令并执行。从该VSSD回收伴随着该命令的执行而需要执行的NAND工作(写入工作、读出工作或擦除工作)的执行时间的长度所对应的数量的令牌。当剩余令牌消失时,停止取得和执行来自主机2的存储器上的命令队列的面向该VSSD的命令。然后,在下一个循环的开始时,再次将与每一个VSSD对应的处理执行时间的上限值所对应的个数的令牌分配给这些VSSD。
也可以是,主机侧访问带宽控制部25也通过使用与上述令牌分发和回收处理同样的机制,执行面向各VSSD的命令的每一个,以使得针对各VSSD的带宽保持在所指定的主机侧访问带宽内。
图11表示VSSD制作处理的时序图。
VSSD制作部21基于从主机2接收到的最初的VSSD管理命令,制作VSSD51(VSSD#1),将利用该VSSD管理命令指定的VSSD51(VSSD#1)用的设定参数存储在VSSD管理表30中(步骤S101)。
接着,VSSD制作部21参照VSSD管理表30,从NAND型闪速存储器5的全部容量之中,确保由capacity参数指定的用户容量与由over-provisioning参数指定的预留空间容量的合计容量,并将该确保的容量分配给VSSD51(VSSD#1)(步骤S102)。也可以是,在步骤S102中,VSSD制作部21确保(预约)由over-provisioning参数指定的个数的物理块,并将该确保(预约)的数量的物理块分配给VSSD51(VSSD#1)。
接着,控制器4的存储器资源量分配部26参照VSSD管理表30,在DRAM6上确保用于存储VSSD51(VSSD#1)用的管理数据的存储区域(VSSD#1用存储区域31),并将该确保的存储区域(VSSD#1用存储区域31)分配给VSSD51(VSSD#1)(步骤S103)。
步骤S101~步骤S103的处理完成后,控制器4向主机2返回命令完成的应答(response)。在命令完成的应答中包括VSSD#1的ID。在主机2中,虚拟机41将包括该VSSD#1的ID的命令发送给SSD3。对包括VSSD#1的ID的命令的接收进行响应,控制器4执行对VSSD#1的访问。
VSSD制作部21基于第2个从主机2接收到的VSSD管理命令制作VSSD52(VSSD#2),并将VSSD52(VSSD#2)用的设定参数存储在VSSD管理表30中(步骤S104)。
接着,VSSD制作部21参照VSSD管理表30,从NAND型闪速存储器5的全部容量之中,确保由capacity参数指定的用户容量与由over-provisioning参数指定的预留空间容量的合计容量,并将该确保的容量分配给VSSD52(VSSD#2)(步骤S105)。也可以是,在步骤S105中,VSSD制作部21确保(预约)由over-provisioning参数指定的个数的物理块,并将该确保(预约)的数量的物理块分配给VSSD52(VSSD#2)。
接着,存储器资源量分配部26参照VSSD管理表30,在DRAM6上确保用于存储VSSD52(VSSD#2)用的管理数据的存储区域(VSSD#2用存储区域32),并将该确保的存储区域(VSSD#2用存储区域32)分配给VSSD52(VSSD#2)(步骤S106)。
步骤S104~步骤S106的处理完成后,控制器4向主机2返回命令完成的应答(response)。在命令完成的应答中包括VSSD#2的ID。在主机2中,虚拟机42将包括该VSSD#2的ID的命令发送给SSD3。对包括VSSD#2的ID的命令的接收进行响应,控制器4执行对VSSD#2的访问。
同样地,VSSD制作部21基于第n个从主机2接收到的VSSD管理命令制作VSSD57(VSSD#n),并将VSSD57(VSSD#n)用的设定参数存储在VSSD管理表30中(步骤S107)。
接着,VSSD制作部21参照VSSD管理表30,从NAND型闪速存储器5的全部容量之中,确保由capacity参数指定的用户容量与由over-provisioning参数指定的预留空间容量的合计容量,并将该确保的容量分配给VSSD57(VSSD#n)(步骤S108)。也可以是,在步骤S108中,VSSD制作部21确保(预约)由over-provisioning参数指定的个数的物理块,并将该确保(预约)的数量的物理块分配给VSSD57(VSSD#n)。
接着,存储器资源量分配部26参照VSSD管理表30,在DRAM6上确保用于存储VSSD57(VSSD#n)用的管理数据的存储区域(VSSD#n用存储区域37),并将该确保的存储区域(VSSD#n用存储区域37)分配给VSSD57(VSSD#n)(步骤S109)。
步骤S107~步骤S109的处理完成后,控制器4向主机2返回命令完成的应答(response)。在命令完成的应答中包括VSSD#n的ID。在主机2中,虚拟机47将包括该VSSD#n的ID的命令发送给SSD3。对包括VSSD#n的ID的命令的接收进行响应,控制器4执行对VSSD#n的访问。
接着,参照图12,说明由控制器4执行的写入数据量计数处理。
控制器4按每个VSSD具备用于对由主机2写入的数据的量进行计数的计数器和用于对通过垃圾回收工作写入的数据的量进行计数的计数器这两种计数器。
向写入缓冲器31A写入来自主机2的面向VSSD51(VSSD#1)的写入数据。计数器61对从写入缓冲器31A写入到VSSD51(VSSD#1)的数据的量进行计数。计数器62对通过VSSD51(VSSD#1)的垃圾回收写入到VSSD51(VSSD#1)的数据的总量进行计数。也可以是,通过VSSD51(VSSD#1)的垃圾回收生成的空闲块放置于在VSSD间共有的空闲块池60。
向写入缓冲器32A写入来自主机2的面向VSSD52(VSSD#2)的写入数据。计数器63对从写入缓冲器32A写入到VSSD52(VSSD#2)的数据的量进行计数。计数器64对通过VSSD52(VSSD#2)的垃圾回收写入到VSSD52(VSSD#2)的数据的总量进行计数。也可以是,通过VSSD52(VSSD#2)的垃圾回收生成的空闲块放置于在VSSD间共有的空闲块池60。
向写入缓冲器37A写入来自主机2的面向VSSD57(VSSD#n)的写入数据。计数器65对从写入缓冲器37A写入到VSSD57(VSSD#n)的数据的量进行计数。计数器66对通过VSSD57(VSSD#n)的垃圾回收写入到VSSD57(VSSD#n)的数据的总量进行计数。也可以是,通过VSSD57(VSSD#n)的垃圾回收生成的空闲块放置于在VSSD间共有的空闲块池60。
图13的流程图表示由控制器4执行的写入数据量计数处理的步骤。
在SSD3的控制器4从主机2接收到写命令时,控制器4基于写命令内所包含的VSSDID,决定应写入写入数据的对象VSSD。然后,控制器4将写入数据写入到对象VSSD(步骤S201、步骤S203、步骤S205),并且对被写入的数据的量进行计数(步骤S202、步骤S204、步骤S206)。
在进行向VSSD51(VSSD#1)的数据的写入的情况下(步骤S201为是),控制器4向VSSD51(VSSD#1)写入数据,并且使用计数器61对写入到VSSD51(VSSD#1)的数据的量进行计数(步骤S202)。
在进行向VSSD52(VSSD#2)的数据的写入的情况下(步骤S203为是),控制器4向VSSD52(VSSD#2)写入数据,并且使用计数器63对写入到VSSD52(VSSD#2)的数据的量进行计数(步骤S204)。
在进行向VSSD57(VSSD#n)的数据的写入的情况下(步骤S205为是),控制器4向VSSD57(VSSD#n)写入数据,并且使用计数器65对写入到VSSD57(VSSD#n)的数据的量进行计数(步骤S206)。
另外,当执行垃圾回收时,控制器4按每个VSSD对通过垃圾回收写入的数据的量进行计数。
在执行VSSD51(VSSD#1)的垃圾回收的情况下(步骤S207为是),控制器4使用计数器62,对通过该垃圾回收写入到VSSD51(VSSD#1)的数据的量进行计数(步骤S210)。
在执行VSSD52(VSSD#2)的垃圾回收的情况下(步骤S208为是),控制器4使用计数器64,对通过该垃圾回收而被写入到VSSD52(VSSD#2)的数据的量进行计数(步骤S211)。
在执行VSSD57(VSSD#n)的垃圾回收工作的情况下(步骤S209为是),控制器4使用计数器66,对通过该垃圾回收而被写入到VSSD57(VSSD#n)的数据的量进行计数(步骤S212)。
图14的流程图表示由控制器4执行的、限制向各个VSSD写入的数据的总量(写入总量)的处理的步骤。
控制器4的写入限制部23判定VSSD51(VSSD#1)的写入总量的测定值是否达到VSSD51(VSSD#1)用的写入总量的上限值(步骤S301)。在VSSD51(VSSD#1)的写入总量的测定值达到VSSD51(VSSD#1)用的写入总量的上限值的情况下(步骤S301为是),写入限制部23限制从主机2向VSSD51的数据的写入(步骤S302)。在步骤S302中,写入限制部23可以禁止从主机2向VSSD51(VSSD#1)的数据的写入,或者,也可以使从主机2向VSSD51(VSSD#1)的数据的写入性能降低。
写入限制部23判定VSSD52(VSSD#2)的写入总量的测定值是否达到VSSD52(VSSD#2)用的写入总量的上限值(步骤S303)。在VSSD52(VSSD#2)的写入总量的测定值达到VSSD52(VSSD#2)用的写入总量的上限值的情况下(步骤S303为是),写入限制部23限制从主机2向VSSD52(VSSD#2)的数据的写入(步骤S304)。在步骤S304中,写入限制部23可以禁止从主机2向VSSD52(VSSD#2)的数据的写入,或者,也可以使从主机2向VSSD52(VSSD#2)的数据的写入性能降低。
写入限制部23判定VSSD57(VSSD#n)的写入总量的测定值是否达到VSSD57(VSSD#n)用的写入总量的上限值(步骤S305)。在VSSD57(VSSD#n)的写入总量的测定值达到VSSD57(VSSD#n)用的写入总量的上限值的情况下(步骤S305为是),写入限制部23限制从主机2向VSSD57(VSSD#n)的数据的写入(步骤S306)。在步骤S306中,写入限制部23可以禁止从主机2向VSSD57(VSSD#n)的数据的写入,或者,也可以使从主机2向VSSD57(VSSD#n)的数据的写入性能降低。
图15的流程图表示由控制器4执行的NAND处理执行时间控制处理的步骤。
在控制器4从主机2接收到命令的情况下(步骤S401为是),控制器4基于该命令内所包含的VSSDID,决定应执行该命令的对象VSSD(步骤S402、步骤S406、步骤S410)。
在对象VSSD为VSSD51(VSSD#1)的情况下,也就是说,接收到的命令是面向VSSD51(VSSD#1)的命令的情况下(步骤S402为是),控制器4判定当前的循环中的VSSD51(VSSD#1)的处理执行时间的累计是否达到VSSD51(VSSD#1)用的处理执行时间的上限值(步骤S403)。当前的循环中的VSSD51(VSSD#1)的处理执行时间的累计表示在当前的循环中VSSD#1的擦除、写入或读出工作所使用的总时间。另外,VSSD51(VSSD#1)用的处理执行时间的上限值表示由VSSD管理命令指定的VSSD#1用的“NAND处理执行时间”。
在当前的循环中的VSSD51(VSSD#1)的处理执行时间的累计未达到VSSD51(VSSD#1)用的处理执行时间的上限值的情况下(步骤S403为否),控制器4执行接收到的面向VSSD51(VSSD#1)的命令(步骤S404)。另一方面,在当前的循环中的VSSD51(VSSD#1)的处理执行时间的累计达到VSSD51(VSSD#1)用的处理执行时间的上限值的情况下(步骤S403为是),控制器4不执行接收到的面向VSSD51(VSSD#1)的命令(步骤S405),待机到下一个循环后执行该命令。
步骤S403~S405的处理例如可以通过上述令牌分发和回收来实现。在该情况下,控制器4将VSSD#1用的处理执行时间的上限值所对应的数量的令牌分配给VSSD#1用。然后,每当执行来自主机2(虚拟机#1)的面向VSSD#1的命令时,从VSSD#1回收与该命令的种类对应的数量的令牌。在VSSD#1用的剩余令牌消失时或减少到某数量以下时,控制器4判定为当前的循环中的VSSD#1的处理执行时间的累计达到VSSD#1用的处理执行时间的上限值。
在对象VSSD为VSSD52(VSSD#2)的情况下,也就是说接收到的命令是面向VSSD52(VSSD#2)的命令的情况下(步骤S406为是),控制器4判定当前的循环中的VSSD52(VSSD#2)的处理执行时间的累计是否达到VSSD52(VSSD#2)用的处理执行时间的上限值(步骤S407)。当前的循环中的VSSD52(VSSD#2)的处理执行时间的累计表示在当前的循环中VSSD#2的擦除、写入或读出工作所使用的总时间。另外,VSSD52(VSSD#2)用的处理执行时间的上限值表示由VSSD管理命令指定的VSSD#2用的“NAND处理执行时间”。
在当前的循环中的VSSD52(VSSD#2)的处理执行时间的累计未达到VSSD52(VSSD#2)用的处理执行时间的上限值的情况下(步骤S407为否),控制器4执行接收到的面向VSSD52(VSSD#2)的命令(步骤S408)。另一方面,在当前的循环中的VSSD52(VSSD#2)的处理执行时间的累计达到VSSD52(VSSD#2)用的处理执行时间的上限值的情况下(步骤S407为是),控制器4不执行接收到的面向VSSD52(VSSD#2)的命令(步骤S409),待机到下一个循环后执行该命令。
步骤S407~S409的处理例如可以通过上述令牌分发和回收来实现。在该情况下,控制器4将VSSD#2用的处理执行时间的上限值所对应的数量的令牌分配给VSSD#2用。然后,每当执行来自主机2(虚拟机#2)的面向VSSD#2的命令时,从VSSD#2回收与该命令的种类对应的数量的令牌。在VSSD#2用的剩余令牌消失时或减少到某数量以下时,控制器4判定为当前的循环中的VSSD#2的处理执行时间的累计达到VSSD#2用的处理执行时间的上限值。
在对象VSSD为VSSD57(VSSD#n)的情况下,也就是说接收到的命令是面向VSSD57(VSSD#n)的命令的情况下(步骤S410为是),控制器4判定当前的循环中的VSSD57(VSSD#n)的处理执行时间的累计是否达到VSSD57(VSSD#n)用的处理执行时间的上限值(步骤S411)。当前的循环中的VSSD57(VSSD#n)的处理执行时间的累计表示在当前的循环中VSSD#n的擦除、写入或读出工作所使用的总时间。另外,VSSD57(VSSD#n)用的处理执行时间的上限值表示由VSSD管理命令指定的VSSD#n用的“NAND处理执行时间”。
在当前的循环中的VSSD57(VSSD#n)的处理执行时间的累计未达到VSSD57(VSSD#n)用的处理执行时间的上限值的情况下(步骤S411为否),控制器4执行接收到的面向VSSD57(VSSD#n)的命令(步骤S412)。另一方面,在当前的循环中的VSSD57(VSSD#n)的处理执行时间的累计达到VSSD57(VSSD#n)用的处理执行时间的上限值的情况下(步骤S411为是),控制器4不执行接收到的面向VSSD57(VSSD#n)的命令(步骤S413),待机到下一个循环后执行该命令。
步骤S411~S413的处理例如可以通过上述令牌分发和回收来实现。在该情况下,控制器4将VSSD#n用的处理执行时间的上限值所对应的数量的令牌分配给VSSD#n用。然后,每当执行来自主机2(虚拟机#n)的面向VSSD#n的命令时,从VSSD#n回收与该命令的种类对应的数量的令牌。在VSSD#n用的剩余令牌消失时或减少到某数量以下时,控制器4判定为当前的循环中的VSSD#n的处理执行时间的累计达到VSSD#n用的处理执行时间的上限值。
接着,参照图16、图17,说明上述令牌分发和回收处理的例子。
在令牌分发和回收处理中,将与每一个VSSD对应的处理执行时间的上限值所对应的个数的令牌分配给这些VSSD。在各个VSSD中,每当执行面向该VSSD的命令时,从该VSSD回收伴随着该命令的执行而需要执行的NAND工作(写入工作、读出工作或擦除工作)的执行时间的长度所对应的数量的令牌。当剩余令牌消失时,停止执行面向该VSSD的命令。然后,在下一个循环的开始时,再次将与每一个VSSD对应的处理执行时间的上限值所对应的个数的令牌分配给这些VSSD。
在图16、图17的处理例中,假设有写命令用的令牌和读命令用的令牌分别独立的情况。写命令用的令牌也可以被GC用的令牌所共用。
图16表示用于执行写命令(主机写入工作)或GC(Garbage Collection)命令(用于数据复制的写入工作或擦除工作)的令牌分发和回收处理的例子。
也可以是,来自主机2的面向VSSD51(VSSD#1)的每一个命令存储在VSSD#1用的命令队列71A中。也可以是,来自主机2的面向VSSD52(VSSD#2)的每一个命令存储在VSSD#2用的命令队列72A中。来自主机2的面向VSSD53(VSSD#3)的每一个命令存储在VSSD#3用的命令队列73A中。同样地,也可以是,来自主机2的面向VSSD57(VSSD#n)的每一个命令存储在VSSD#n用的命令队列77A中。
如上所述,向各VSSD分发与该VSSD的处理执行时间对应的个数的令牌。控制器4的令牌分配部79向VSSD#1用的令牌管理部71C分发与VSSD#1的处理执行时间的上限值对应的个数的令牌。同样地,令牌分配部79向VSSD#2用的令牌管理部72C分发与VSSD#2的处理执行时间的上限值对应的个数的令牌,向VSSD#3用的令牌管理部73C分发与VSSD#3的处理执行时间的上限值对应的个数的令牌,向VSSD#n用的令牌管理部77C分发与VSSD#n的处理执行时间的上限值对应的个数的令牌。
也可以是,在VSSD#1用的令牌管理部71C具有写入(或GC)的执行所需的个数的令牌的情况下,令牌管理部71C许可VSSD#1用的命令发行部71B发行写命令或GC命令。也可以是,每当许可写命令或GC命令的发行时,控制器4的令牌回收部80从令牌管理部71C回收写入(或GC)的执行所需的个数的令牌。当在令牌管理部71C中令牌消失时,禁止VSSD#1用的命令的发行。
在许可了VSSD#1用的写命令或GC命令的发行的情况下,VSSD#1用的命令发行部71D可以基于由空闲管理部71E管理的VSSD#1用的当前的空闲块的个数等,决定发行写命令或GC命令中的任一个,然后可以发行写命令或GC命令的某一个。由此,执行对VSSD#1的写入工作、擦除工作等。所发行的命令可以放入发行完成队列78。
也可以是,在VSSD#2用的令牌管理部72C具有写入(或GC)的执行所需的个数的令牌的情况下,令牌管理部72C许可VSSD#2用的命令发行部72B发行写命令或GC命令。也可以是,每当许可写命令或GC命令的发行时,控制器4的令牌回收部80从令牌管理部72C回收写入(或GC)的执行所需的个数的令牌。当在令牌管理部72C中令牌消失时,禁止VSSD#2用的命令的发行。
在许可了VSSD#2用的写命令或GC命令的发行的情况下,VSSD#2用的命令发行部72D可以基于由空闲管理部72E管理的VSSD#2用的当前的空闲块的个数等,决定发行写命令或GC命令中的任一个,然后可以发行写命令或GC命令的某一个。由此,执行对VSSD#2的写入工作、擦除工作等。所发行的命令可以放入发行完成队列78。
也可以是,在VSSD#3用的令牌管理部73C具有写入(或GC)的执行所需的个数的令牌的情况下,令牌管理部73C许可VSSD#3用的命令发行部73B发行写命令或GC命令。也可以是,每当许可写命令或GC命令的发行时,控制器4的令牌回收部80从令牌管理部73C回收写入(或GC)的执行所需的个数的令牌。当在令牌管理部73C中令牌消失时,禁止VSSD#3用的命令的发行。
在许可了VSSD#3用的写命令或GC命令的发行的情况下,VSSD#3用的命令发行部73D可以基于由空闲管理部73E管理的VSSD#3用的当前的空闲块的个数等,决定发行写命令或GC命令中的任一个,然后可以发行写命令或GC命令的某一个。由此,执行对VSSD#3的写入工作、擦除工作等。所发行的命令可以放入发行完成队列78。
也可以是,在VSSD#n用的令牌管理部77C具有写入(或GC)的执行所需的个数的令牌的情况下,令牌管理部77C许可VSSD#n用的命令发行部77B发行写命令或GC命令。也可以是,每当许可写命令或GC命令的发行时,控制器4的令牌回收部80从令牌管理部77C回收写入(或GC)的执行所需的个数的令牌。当在令牌管理部77C中令牌消失时,禁止VSSD#n用的命令的发行。
在许可了VSSD#n用的写命令或GC命令的发行的情况下,VSSD#n用的命令发行部77D可以基于由空闲管理部77E管理的VSSD#n用的当前的空闲块的个数等,决定发行写命令或GC命令中的任一个,然后可以发行写命令或GC命令的某一个。由此,执行对VSSD#n的写入工作、擦除工作等。所发行的命令可以放入发行完成队列78。
图17示出了用于执行读命令的令牌分发和回收处理的例子。
也可以是,在VSSD#1用的令牌管理部71C具有读出的执行所需的个数的令牌的情况下,令牌管理部71C许可VSSD#1用的命令发行部71B发行读命令。也可以是,每当许可读命令的发行时,控制器4的令牌回收部80从令牌管理部71C回收读出的执行所需的个数的令牌。当在令牌管理部71C中令牌消失时,禁止VSSD#1用的命令的发行。
也可以是,在VSSD#2用的令牌管理部72C具有读出的执行所需的个数的令牌的情况下,令牌管理部72C许可VSSD#2用的命令发行部72B发行读命令。也可以是,每当许可读命令的发行时,控制器4的令牌回收部80从令牌管理部72C回收读出的执行所需的个数的令牌。当在令牌管理部72C中令牌消失时,禁止VSSD#2用的命令的发行。
也可以是,在VSSD#3用的令牌管理部73C具有读出的执行所需的个数的令牌的情况下,令牌管理部73C许可VSSD#3用的命令发行部73B发行读命令。也可以是,每当许可读命令的发行时,控制器4的令牌回收部80从令牌管理部73C回收读出的执行所需的个数的令牌。当在令牌管理部73C中令牌消失时,禁止VSSD#3用的命令的发行。
也可以是,在VSSD#n用的令牌管理部77C具有读出的执行所需的个数的令牌的情况下,令牌管理部77C许可VSSD#n用的命令发行部77B发行读命令。也可以是,每当许可读命令的发行时,控制器4的令牌回收部80从令牌管理部77C回收读出的执行所需的个数的令牌。当在令牌管理部77C中令牌消失时,禁止VSSD#n用的命令的发行。
图18表示作为主机2发挥功能的信息处理装置(计算设备)的硬件构成例。
该信息处理装置作为服务器这样的计算设备而实现。该信息处理装置包括处理器(CPU)101、主存储器102、BIOS-ROM103、网络控制器105、周边接口控制器106、控制器107以及嵌入控制器(EC)108等。
处理器101是构成为控制该信息处理装置的各部件的工作的CPU。该处理器101执行从多个SSD3中的任一个加载到主存储器102的各种程序。主存储器102由DRAM这样的随机存取存储器构成。由处理器101执行的程序包括上述虚拟机、设备驱动器等。另外,也可以是,该程序包括用于通过发行上述VSSD管理命令从而设定各个VSSD的容量/性能/可用性的设定程序。该设定程序向SSD3请求与各个用户(最终用户)的存储要件匹配的VSSD的制作。
另外,处理器101也执行存储在作为非易失性存储器的BIOS-ROM103中的基本输入输出***(BIOS)。BIOS是用于硬件控制的***程序。
网络控制器105是有线LAN控制器、无线LAN控制器这样的通信设备。周边接口控制器106构成为执行与USB设备这样的***设备的通信。
控制器107构成为执行与分别连接到多个连接器107A的设备的通信。多个SSD3可以分别与多个连接器107A连接。控制器107是SAS expander、PCIe Switch、PCIe expander、闪存阵列控制器或RAID控制器等。
EC108作为***控制器发挥功能,所述***控制器构成为执行信息处理装置的电力管理。
图19表示包括多个SSD3和主机2的信息处理装置(服务器)的构成例。
该信息处理装置(服务器)具备能够收容于架子(rack)的薄的箱形的框体201。很多SSD3可以配置在框体201内。在该情况下,也可以是,各SSD3以能够从设置在框体201的前面201A的槽卸下的方式***该槽中。
***板(母板)202配置在框体201内。在***板(母板)202上,组装有包括CPU101、存储器102、网络控制器105以及控制器107的各种电子部件。这些电子部件作为主机2发挥功能。
如以上说明地,根据本实施方式,将SSD3内的NAND型闪速存储器5逻辑上分割为多个存储区域(VSSD#1、VSSD#2、…),进而,基于按每个VSSD指定能够写入的数据的总量(写入总量)的来自主机2的请求,按每个VSSD管理所指定的写入总量的上限值。进而,写入到VSSD#1的数据的总量和写入到VSSD#2的数据的总量由SSD3内的控制器4测定。而且,在写入到VSSD#1的数据的总量的测定值达到VSSD#1用的写入总量的上限值的情况下,利用控制器4限制从主机2向VSSD#1的数据的写入。另外,在写入到VSSD#2的数据的总量的测定值达到VSSD#2用的写入总量的上限值的情况下,利用控制器4限制从主机2向VSSD#2的数据的写入。
因此,能够根据各个最终用户的需要,在一台SSD3内实现诸如容许大的写入总量的VSSD、仅容许少的写入总量的VSSD这样的各种存储区域(各种VSSD),而无需完全地控制主机2向各个VSSD的写入总量。因此,能够利用一台SSD3实现与各个用户的存储要件相适合的灵活的存储服务。
也可以是,数据中心从业者以对正在使用数据写入被限制的VSSD的最终用户收取追加的使用费为条件,再设定该VSSD的写入总量的上限值以使得该VSSD的写入总量的上限值变高。
或者,也可以是,数据中心从业者以对正在使用数据写入被限制的VSSD的用户收取追加的使用费为条件,增加该VSSD的预留空间容量。
另外,在本实施方式中,也能够按各个VSSD的每一个设定用户容量与预留空间容量的组、NAND处理执行时间或主机侧访问带宽。因此,能够容易地提供与各个用户的存储要件相适合的灵活的存储服务。
此外,在本实施方式中,作为非易失性存储器,例示了NAND型闪速存储器。但是,本实施方式的功能例如也能应用于MRAM(Magnetoresistive Random Access Memory:磁阻式随机存取记忆体)、PRAM(Phase change Random Access Memory:相变随机存储器)、ReRAM(Resistive Random Access Memory:电阻式记忆体)或FeRAM(Ferroelectric RandomAccess Memory:铁电随机存取存储器)这样的其他各种非易失性存储器。
以上说明了本发明的几个实施方式,但是这些实施方式作为例子而出示,并不意在限定发明的范围。这些新颖的实施方式能以其他各种方式实施,在不脱离发明的要旨的范围内,能够进行各种省略、置换以及变更。这些实施方式及其变形包含在发明的范围和要旨内,并包含在权利要求书所记载的发明及与之等同的范围内。