信息处理系统、存储系统和数据传输方法
技术领域
本发明涉及信息处理系统、存储系统和数据传输方法,例如适用于装载有闪存驱动器的系统。
背景技术
以往,存储系统的驱动器箱是JBOD(Just a Bunch Of Disks:简单磁盘捆绑),在驱动器槽中装载SAS/SATA驱动器,作为外部I/F可与SAS(Serial Attached SCSI:串行连接SCSI)网络连接的是主流。SAS是以连接单位占有总线的通信I/F,适于多数的驱动器连接,而连接处理的开销高,因而不适于性能提高。此外,支持面向高速的SSD的NVMe协议的JBOD中,也因为存储系统的存储控制器与JBOD的连接为以PCI Express(PCIe)直接连结的结构,所以驱动器连接的扩展性低,不能与多数的驱动器连接。最近,伴随SSD(Solid StateDrive:固态驱动器)等闪存驱动器的高性能化,作为JBOD的替代出现了具有高性能的I/F的FBOF(Fabric-attached Bunch of Flash:网络化闪存簇)。FBOF可与以太网(Ethernet)、无线宽带(Infiniband)等高性能的网络连接,有支持NVMe over Fabrics(NVMeoF)这样的特征。NVMeoF是指,能够在网络上使用NVMe协议的规范。在这样的背景之下,为了引出SSD的高性能,在存储系统中要求高速的数据传输和基于网络连接的驱动器连接的高扩展性。
(以往存储中的数据传输频带的问题)
以往存储中,存储的前端(Frontend。以后,略记为FE)网络连接主机,与前端网络彼此独立的后端(Backend。以后,略记为BE)网络连接驱动器箱。FE网络中,FC(FibreChannel:光纤通道)网络和以太网络是主流,BE网络中,SAS网络是主流。当存储控制器接收到来自主机的命令时,例如在为读取命令的情况下,存储控制器从驱动器箱内的驱动器读出数据,对主机进行数据传输。通过将存储的BE网络变更成支持FBOF的高性能的I/F的网络,与SAS网络相比有能够扩大BE网络的数据传输频带的优点。不过,上述的数据传输的路径与以往相比未作改变,存储控制器对主机进行数据传输,因此有以下问题:即使将多台FBOF连接,存储控制器的数据传输频带也会成为瓶颈,不能引出FBOF的性能。
(高速数据传输的实现方法)
近年来,主机和存储主要在以太网络端与FBOF同样地进行着支持NVMe overFabrics规范的努力。FBOF具有可与以太网络连接的I/F,支持NVMe over Fabrics规范,因此在存储的FE网络中,主机与FBOF间能够不通过存储控制器地进行直接数据传输(以后,记为直传输)。通过该直传输,能够消除存储控制器的性能瓶颈,实现高速的数据传输。
(直传输实现的技术问题)
在实现直传输时,有以下的2个技术问题。
(技术问题1)就存储系统提供的逻辑卷而言,从主机看到的地址空间和FBOF内的驱动器的地址空间不同,主机无法识别期望的数据存储在FBOF内的驱动器的哪个地址。
(技术问题2)在通过使用存储系统的缓存进行数据访问的高性能化的情况下,缓存有新数据时,需要从存储的缓存读取数据,但主机无法判断有无新数据。
对于这样的技术问题,例如专利文献1中公开了以下发明:在主机中运行的代理软件向存储控制器询问与主机的访问目标数据对应的FBOF内的驱动器及其地址,根据得到的信息,直接访问FBOF内的驱动器。
现有技术文献
专利文献
专利文献1:US9,800,661号说明书
发明内容
发明要解决的技术问题
专利文献1公开的发明中,主机能够直接访问FBOF的驱动器,但代理软件中必须进行用于RAID等的数据保护的计算,有对主机侧产生用于进行高可靠性的处理的计算负荷的问题。
此外,为了避免在存储控制器中工作的Snapshot、Thin Provisioning等程序产品(存储装置的功能)的工作和代理软件的工作的竞争,需要进行经网络的排他控制,有使性能降低的问题。
本发明是在考虑了以上问题点的基础上完成的,其目的在于提出一种不需要向主机导入代理软件这样的进行存储的数据处理的特殊软件,就实现从FBOF的直传输带来的高速数据传输的信息处理系统、存储系统和数据传输方法。
此外,本发明的目的还在于,提出一种能够提供基于存储装置的数据保护和程序产品功能,实现从FBOF的直传输带来的高速数据传输的信息处理系统、存储系统和数据传输方法。
用于解决技术问题的技术方案
为了解决该技术问题,本发明的信息处理系统的一个方面包括:至少一个主机;经由第一网络与主机连接且设置有存储装置的至少一个驱动器壳体;和与驱动器壳体连接的存储控制器,其中,驱动器壳体按照来自存储控制器的指示生成逻辑卷,对主机提供存储系统的存储区域,接收从主机对提供存储系统的存储区域的驱动器壳体发出的读取命令,在接收到读取命令时,向存储控制器传输读取命令,在响应读取命令的数据不位于存储控制器的缓存上的情况下,从存储控制器接收对驱动器壳体发送的数据传输需要的卸载命令,按照卸载命令从存储装置读出数据并将其传输至主机。
此外,为了解决技术问题,本发明的存储系统的一个方面包括:经由第一网络与至少一个主机连接的至少一个驱动器壳体和与驱动器壳体连接的存储控制器,存储控制器对驱动器壳体指示逻辑卷的生成,驱动器壳体按照来自存储控制器的指示生成逻辑卷,对主机提供存储系统的存储区域,驱动器壳体从主机接收对存储系统的存储区域的IO命令。
此外,为了解决技术问题,本发明的信息处理系统的数据传输方法的一个方面,该信息处理系统包括:至少一个主机;经第一网络与主机连接且设置有存储装置的至少一个驱动器壳体;和与驱动器壳体连接的存储控制器,在该数据传输方法中,驱动器壳体按照来自存储控制器的指示生成逻辑卷,对主机提供存储系统的存储区域,接收从主机对提供存储系统的存储区域的驱动器壳体发出的读取命令,在接收到读取命令时,向存储控制器传输读取命令,在响应读取命令的数据不位于存储控制器的缓存上的情况下,从存储控制器接收对驱动器壳体发送的数据传输需要的卸载命令,按照卸载命令从存储装置读取数据并将其传输至主机。
发明效果
根据本发明,能够实现可构筑高可靠性和高性能的信息处理系统的信息处理系统、存储系统和数据传输方法。
附图说明
图1是实施例1的信息处理系统结构图。
图2是实施例1的驱动器壳体的结构图。
图3是实施例1的主机、存储控制器、驱动器盒的程序的结构图。
图4是表示NVMe over Fabrics中的主机和NVM子系统的标识符的图。
图5是用户数据的地址映射的概念图。
图6是表示实施例1的存储控制器中的主机命令的处理次序的流程图。
图7是表示实施例1的驱动器盒中的数据传输的卸载命令的处理次序的流程图。
图8是表示传输方法的判定中使用的数据传输条件的图。
图9A是表示主机命令的格式的图。
图9B是表示存储控制器的主机信息表的图。
图9C是表示驱动器信息表的图。
图9D是表示卸载命令的格式的图。
图10是表示实施例2的无缓存的存储控制器中的主机命令的处理次序的流程图。
图11是表示实施例1的存储控制器中的主机命令(通常的命令)处理的流程图。
图12是表示实施例1的存储控制器中的离台(destage)的处理次序的流程图。
图13是表示实施例2的无缓存的存储控制器中的主机命令的处理次序的流程图。
图14是表示实施例3的驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式中的主机、存储控制器、驱动器盒的程序结构的图。
图15是表示实施例3的NVMe over Fabrics中的主机和NVM子系统的标识符的图。
图16是表示实施例3的驱动器盒中的主机命令和卸载命令的处理次序的流程图。
图17是表示实施例3的存储控制器中的盒命令的处理次序的流程图。
图18是实施例3的存储控制器中的离台的处理次序的流程图。
图19是表示实施例4的信息处理系统的结构的框图。
图20是表示实施例1的驱动器盒中的控制器命令的处理次序的流程图。
图21是表示实施例3的驱动器盒中的控制器命令的处理次序的流程图。
图22是表示驱动器盒的主机信息表的图。
图23是表示盒命令的格式的图。
图24是实施例5的主机、存储控制器、驱动器盒的程序的结构图。
图25是表示实施例5的驱动器盒中的主机命令的处理次序的流程图。
图26是表示实施例5的驱动器盒中的控制器命令的处理次序的流程图。
图27是表示实施例5的存储控制器中的盒命令的处理次序的流程图。
图28是表示实施例5的驱动器盒中的双重化区域和奇偶校验已生成区域的图。
图29是实施例5的驱动器盒中的双重写入的对应关系的图。
图30是实施例7的主机、存储控制器、驱动器盒的程序的结构图。
图31是表示实施例7的驱动器盒中的主机命令的处理次序的流程图。
图32是表示实施例7的存储控制器中的盒命令的处理次序的流程图。
图33是实施例9的主机、存储控制器、驱动器盒的程序的结构图。
图34是表示实施例9的存储控制器中的主机命令的处理次序的流程图。
图35是表示实施例9的驱动器盒中的卸载命令的处理次序的流程图。
图36A是表示地址变换表的一例的图。
图36B是表示数据保护驱动器组表的一例的图。
具体实施方式
以下,参照附图,对本发明的实施方式进行说明。以下的记载和附图是用于说明本发明的示例,为了说明的明确化,适当进行了省略和简化。本发明也能够以其他各种方式实施。只要没有特别限定,各构成要素就既可以为单数也可以为多数。
以下的说明中,有时用“表”、“列表”、“队列”等的表述来说明各种信息,但各种信息也可以用这些以外的数据构造来表述。在对识别信息进行说明时,使用“识别信息”、“识别符”、“名”、“ID”、“号码”等的表述,但这些可以相互置换。
在有多个具有同一或同样的功能的构成要素的情况下,基本上标注同一标记进行说明。
此外,以下的说明中,存在执行通过执行程序而进行的处理的情况,程序通过由作为中央处理部的处理器(例如CPU)执行,一边适当地使用存储资源(例如存储器)和/或接口装置(例如通信端口)等一边进行规定的处理,因此处理的主体可以为处理器。
程序也可以从程序源安装到计算机那样的装置中。程序源可以是例如程序分发服务器或计算机可读取的存储介质。在程序源为程序分发服务器的情况下,程序分发服务器也可以包含处理器和存储分发对象的程序的存储资源,程序分发服务器的处理器将分发对象的程序分发至其他计算机。此外,以下的说明中,可以是2个以上的程序作为1个程序实现,也可以是1个程序作为2个以上的程序实现。
(发明的概要)
FBOF基于从存储控制器提供来的数据传输信息,将从存储系统的驱动器读出的数据向主机传输(直传输)。数据传输信息包括由来自主机的读取命令指定的逻辑卷的地址所对应的FBOF内的驱动器和驱动器内的地址。上述的逻辑卷的地址与FBOF内的驱动器和驱动器内的地址的对应关系由存储装置基于结构信息导出。另外,存储控制器在附图上有时记为CTL。此外,为了与包含驱动器的存储系统进行对比,有时将存储控制器称为存储装置。
在存储控制器从主机接收到命令的情况下,数据传输信息包含主机的数据存储目的地的地址等的信息。在装载缓存的存储控制器中,存储控制器进行缓存命中、未命中的判定,对于缓存命中的数据,存储控制器向主机传输数据,对于缓存未命中的数据,FBOF向主机传输数据。
根据本实施方式的存储装置和数据传输方法,不使用存储控制器的通信I/F和缓存控制、缓冲区,在FBOF与主机之间直接进行数据传输,从而有望实现读取IO性能的提高和延迟的削减(响应性能提高)。进一步,关于读取IO性能,有望实现FBOF追加带来的性能调节。
【实施例1】
以下,参照附图对本发明的一个实施方式进行详述。
(1)实施例1的信息处理系统的结构
图1是实施例1的信息处理系统结构图。图1示出与主机、存储控制器在同一网络连接驱动器壳体的方式(连接方式1:实施例1、实施例2、实施例3)的信息处理系统的结构。
该信息处理系统100包括1个或多个的主机110、存储装置120和驱动器壳体140,它们通过由LAN(Local Area Network:局域网)或因特网等构成的网络150而彼此连接。驱动器壳体140是FBOF。驱动器壳体由于附图的记载的关系,有时称为ENC或驱动器盒。由存储装置120和驱动器壳体140构成存储系统。网络150例如是以太网(Ethernet,注册商标)、无线宽带(Infiniband,注册商标)等的高性能的网络,支持NVMe over Fabrics(NVMeoF)。
主机110是具有CPU(Central Processing Unit:中央处理器)和存储器等的信息资源的计算机装置,例如由开放的服务器、云服务器等构成。主机110响应用户操作或来自已安装的程序的请求,经网络150向存储装置120发送写入命令和/或读取命令。
存储装置120是安装有用于向主机110提供作为存储的功能的必要软件的装置,由冗余化的存储控制器121和存储控制器122构成。存储控制器121包括微处理器123、存储器125、前端接口(网络I/F)126和存储装置129。存储控制器122的结构与存储控制器121相同。
微处理器123是进行存储控制器121整体的工作控制的硬件,具有1个或多个处理器内核124。各处理器内核124响应从主机110赋予的读取命令、写入命令,向对应的驱动器壳体(FBOF)140读写数据。
此外,存储器125例如由SDRAM(Synchronous Dynamic Random Access Memory:同步动态随机存取存储器)等的半导体存储器构成,用于存储保持必要的程序(包含OS(Operating System:操作系统))和数据。存储器125是微处理器123的主存储,存储微处理器123执行的程序(存储控制程序等)、微处理器123参照的管理表等。此外,存储器125也作为存储控制器121的磁盘缓存(缓存存储器)使用。
通过由微处理器123的处理器内核124执行存储于存储器125的程序(图3、图14、图23所示的程序),执行用于向主机110提供存储功能的各种处理。不过,以下为了容易理解,以由微处理器123执行该程序的方式继续说明。
网络I/F126是针对主机110的接口,进行经网络150与主机110进行通信时的协议控制。
存储装置129存储OS、存储控制程序、管理表的备份等。存储装置129是例如HDD、SSD(Solid State Drive:固态硬盘)。
存储控制器122的内部结构与存储控制器121相同,因此省略图示。存储控制器121与存储控制器122之间由非透明桥(Non transparent bridge)等的MP间I/F134连接,对包含用户数据、存储结构信息等的控制信息进行通信。存储控制器122的工作也与存储控制器121相同,为了简化说明,只要没有特别说明,以后就仅说明存储控制器121。
(2)驱动器壳体的结构
图2是驱动器壳体的结构图。驱动器壳体140是安装有用于提供驱动器的控制和从外部对作为存储装置的驱动器进行读写的功能的必要软件的装置。此外,驱动器壳体由冗余化的驱动器盒200、驱动器盒201和1个或多个驱动器218构成。驱动器盒的冗余化为了驱动器壳体的可用性和可靠性的提高而优选,但不是必须的。也可以由无冗余化的单一驱动器盒构成驱动器壳体。
驱动器盒200包括:微处理器202、存储器204、网络I/F205及PCIe开关214;和存储装置208。驱动器218是双端口的NVMe驱动器,包括PCIe连接端口219和222。PCIe连接端口219和222各自由PCIe链路220和PCIe链路223分别与驱动器盒200的PCIe SW(开关)214的PCIe连接端口221和驱动器盒201的PCIe SW214的PCIe连接端口221连接。驱动器218是构成存储系统的存储区域,存储来自主机的数据的存储装置。另外,驱动器218不需要必须是NVMe驱动器,也可以为例如SAS驱动器或SATA驱动器。此外,驱动器218也不需要必须是双端口,也可以为单端口。
微处理器202是负责驱动器盒200整体的工作控制的硬件,具有1个或多个处理器内核203。各处理器内核203根据从存储装置120提供的读取命令或写入命令,向对应的驱动器218读写数据,并且根据从存储装置120提供的数据传输命令,进行与主机110之间的数据传输。
此外,存储器204例如由SDRAM(Synchronous Dynamic Random Access Memory:同步动态随机存取存储器)等的半导体存储器构成,用于存储保持必要的程序(包含OS(Operating System:操作系统))和数据,用作缓存存储器。
存储器204是微处理器202的主存储,存储微处理器207执行的程序(驱动器盒控制程序等)、微处理器202参照的管理表等。通过由微处理器202的处理器内核203执行存储器204中存储的程序,执行用于向存储装置120和主机110提供包含FBOF的驱动器盒功能的各种处理。不过,以下为了容易理解,以由微处理器202执行该程序的方式继续说明。
网络I/F205和PCIe SW214的PCIe端口215各自由PCIe链路206和PCIe链路216分别与微处理器202的PCIe端口207和PCIe端口217连接。
存储装置208中存储OS、驱动器盒控制程序、管理表的备份等。存储装置208例如是HDD、SSD。
驱动器盒201具有与驱动器盒200相同的内部结构,因而省略图示。驱动器盒200与驱动器盒201之间由非透明桥(Non transparent bridge)等的MP间I/F213连接,对用户数据、包含驱动器盒结构信息等的控制信息进行通信。驱动器盒201的工作也与驱动器盒200相同,为了简化说明,只要没有特别说明,以后就仅说明驱动器盒200。
(3)主机、存储控制器、驱动器盒的程序结构
图3是实施例1的主机、存储控制器、驱动器盒中的直接参与实施例1的程序的结构的图,示出存储控制器对于主机作为NVMe over Fabrics的目标进行工作的方式(目标结构方式1:实施例1、实施例2)。
主机110的程序包括应用程序300、启动器驱动程序301和未图示的OS(OperationSystem:操作系统)。
应用程序300例如是数值计算程序、数据库、Web服务等的程序。启动器驱动程序301识别目标驱动程序所提供的支持NVMeoF(NVMe over Fabrics)的存储区域,对应用程序提供读取、写入等命令的应用I/F。实施例1中,主机110的启动器驱动程序301识别存储控制器121的目标驱动程序302和驱动器盒200的目标驱动程序308提供的支持NVMeoF的存储区域。
存储控制器121的程序包括目标驱动程序302、启动器驱动程序303、主机命令处理部304、数据传输控制部(主机与存储控制器之间)305、缓存控制部306、数据传输卸载部307、卸载命令通信部(启动器)315、离台处理部314、地址变换部318和未图示的OS。
目标驱动程序302对启动器驱动程序301提供支持NVMeoF的存储区域,进行主机命令的接受、命令的完成响应的发送。
启动器驱动程序303识别目标驱动程序308提供的支持NVMeoF的存储区域,与驱动器盒200之间进行命令的发送、命令的完成响应的接收。将存储控制器121发给驱动器盒200的命令称为控制器命令。驱动器盒200相当于图2的驱动器壳体140。
主机命令处理部304经目标驱动程序302接收主机发出的命令,进行:命令的分析;读取命令、写入命令、管理命令的处理;命令的完成响应的生成;经目标驱动程序302进行的命令的完成响应的发送等。
数据传输控制部(主机与存储控制器之间)305按照主机命令处理部304的指示,进行支持NVMeoF的存储控制器与主机之间的数据传输处理。
缓存控制部306进行:基于缓存数据的检索的缓存命中、未命中的判定;脏数据(写入物理驱动器前的状态)与干净数据(写入物理驱动器后的状态)的各状态间的转换;以及缓存区域的保留和释放等的控制。缓存命中、未命中的判定是对响应来自主机的IO命令的数据是否存在于存储控制器的缓存存储器204中进行判定。例如,在来自主机的IO命令为读取命令的情况下,判定响应读取命令的数据是否存在于缓存存储器204上。这些缓存控制的各处理是广为人知的技术,在此省略详细说明。
数据传输卸载部307生成数据传输的卸载命令(数据传输参数),以卸载命令对驱动器盒(200或201)指示向主机进行数据传输。卸载命令通信部(启动器)315在与驱动器盒之间进行卸载命令的发送、响应的接收。
离台处理部314经启动器驱动程序303进行将缓存内的数据写入驱动器的离台处理。地址变换部318具有存储控制器管理的名字空间504的数据范围505与作为数据的存储目的地的驱动器盒200、驱动器508、驱动器508内的存储区域509之间的映射表,将数据范围505的地址变换为对应的驱动器盒200、驱动器、驱动器内的存储区域的地址。
驱动器盒200的程序包括目标驱动程序308、控制器命令处理部309、数据传输控制部(主机与驱动器盒之间)310、数据传输控制部(存储控制器与驱动器盒之间)316、卸载命令通信部(目标)313、卸载命令处理部311、驱动器控制部312、缓冲区控制部317和未图示的OS。
目标驱动程序308对启动器驱动程序301和启动器驱动程序303提供支持NVMeoF的存储区域,并且与主机之间进行主机命令的接收、命令的完成响应的发送,与存储控制器之间进行控制器命令的接收、命令的完成响应的发送。
控制器命令处理部309使用目标驱动程序308接收存储控制器发出的命令,进行命令的分析、读取写入处理、命令的完成响应的生成、经目标驱动程序308的对启动器驱动程序303进行的命令的完成响应的发送等。
数据传输控制部(主机与盒之间)310按照控制器命令处理部309和卸载命令处理部311的指示,进行支持NVMeoF的主机与驱动器盒之间的数据传输处理。数据传输控制部(存储控制器与盒之间)316按照控制器命令处理部309的指示,进行支持NVMeoF的存储控制器与驱动器盒之间的数据传输处理。
卸载命令通信部(目标)313进行来自存储控制器的卸载命令的接收和响应的发送。卸载命令处理部311接收来自存储控制器121的数据传输的卸载命令,进行卸载命令的分析、读取处理、卸载命令的完成响应的生成、卸载命令的完成响应的发送等。
驱动器控制部312进行驱动器218的管理,按照控制器命令处理部309和卸载命令处理部311的指示,对驱动器218进行读取、写入处理。缓冲区控制部317进行用于进行数据传输的暂时性存储区域即缓冲区的确保和释放。
(4)NVMe over Fabrics中的主机和NVM子系统的标识符
图4是表示NVMe over Fabrics中的主机和NVM子系统的标识符的图。即,是表示目标结构方式1涉及的NVMe over Fabrics中的主机和NVM子系统的标识符的图。
标识符是指NVMe over Fabrics规范的NQN(NVMe Qualified Name:NVMe限定名),在网络(Fabric)内是独一无二的。NVM子系统是指具有存储区域(NVMe规范中称为名字空间)和管理命令及读取写入等IO命令的处理功能的逻辑驱动器。图4的NQN为了容易理解,以非规范中规定的格式的简化的字符串表示。
主机110具有至少1个标识符401(主机NQN)。主机110也可以是多个,省略图示。驱动器盒200具有至少1个标识符402(NVM子系统NQN)。例如,驱动器壳体140的每个驱动器218具有1个标识符402。在此,驱动器218是NVMe驱动器,驱动器218也是NVM子系统,在NVM子系统内具有1个或多个名字空间。例如,在上述标识符402的NVM子系统内对对应的驱动器218的名字空间进行分配,对主机110或存储装置120提供存储区域。上述方式对驱动器盒201也同样,省略说明。驱动器盒200和驱动器盒201可以为二个以上,省略图示。
存储控制器121具有至少1个标识符403(NVM子系统NQN)。与该标识符403对应的NVM子系统中,对存储池的一部分进行分配而得到的逻辑性存储区域作为名字空间被分配。存储池是指,由多个驱动器218的存储区域构筑,实施了RAID等的数据保护的存储区域。上述方式对于存储控制器122的NVM子系统也同样,省略说明。
存储装置120和驱动器壳体140起动后,驱动器盒200(和驱动器盒201)创建具有上述标识符402的NVM子系统。此外,存储控制器121(和存储控制器122)对驱动器盒200(和驱动器盒201)发送连接(connect)命令,由此使得能够对驱动器盒200(和驱动器盒201)的NVM子系统进行命令发送和数据传输,并且创建具有上述标识符403的NVM子系统。
主机110对存储控制器121(和存储控制器122)与驱动器盒200(和驱动器盒201)发送连接命令,由此使得能够对存储控制器121(和存储控制器122)和驱动器盒200(和驱动器盒201)的NVM子系统进行命令发送和数据传输。
(5)用户数据的地址映射
图5是用于说明用户数据的地址映射的概念图。即,是用于说明用户数据的地址映射的概念图。
主机110包括OS向应用程序提供的连续的虚拟存储器500和作为实际的数据的存储目的地的物理存储器502。
主机110的应用程序例如在向存储控制器121发出读取命令时,在虚拟存储器500内确保虚拟存储器区域501作为读取数据的存储目的地。虚拟存储器区域501以存储器管理单位即页面单位,与物理存储器内的物理存储器区域503对应。应用程序300向存储装置120发出的读取命令具有指定以下内容的字段,即,读取对象的名字空间504(在存储装置中相当于逻辑卷)、与名字空间504内的数据范围505对应的名字空间504内的地址、数据传输长度、在主机110内用于数据传输的物理存储器区域503的信息。
数据范围505“a”-“d”的数据存储于存储控制器121内的缓存506的缓存管理单位即缓存区段507中,或者与驱动器盒200连接的驱动器508内的存储区域509中。缓存506用于数据的暂时存储。1个缓存区段中能够存储例如64KB的数据。实施例1中,将缓存管理单位作为缓存区段进行说明,但也可以以将1个或多个缓存区段关联起来的缓存槽的单位进行管理。
图5中,作为一例,示出在数据范围505内的“a”部位写入数据,缓存区段507中存储新数据,驱动器508内的存储区域509的“a”部位的数据成为旧数据的状态。通过存储控制器121的离台处理,缓存区段507的数据写入存储区域509的“a”部位从而被更新为新数据时,缓存区段507被释放,成为可再利用的状态。
与和名字空间504内的数据范围505对应的缓存区段507的映射,或与驱动器盒200、驱动器508和存储区域509的地址的映射,由存储控制器121管理。
与和名字空间504内的数据范围505对应的缓存区段507的映射,与以往的缓存存储器相同,省略说明。
与和名字空间504内的数据范围505对应的驱动器盒200、驱动器508和存储区域509的地址的映射,用图36A进行说明。
(36)地址变换表、数据保护驱动器组表
图36A是表示地址变换表的图,图36B是表示数据保护驱动器组表的图。这些地址变换表和数据保护驱动器组表由存储控制器121管理。
图36A是表示名字空间504内的数据范围505与数据存储目的地的地址的映射信息即地址变换表3600的图。地址变换表3600在从逻辑卷的地址变换至数据存储目的地的地址的地址变换处理中使用。地址变换表3600包含逻辑地址3601、驱动器区域号码3602、驱动器地址3603的项目。
实际的存储系统中,存在逻辑卷、存储池、缓存、被RAID或镜像等保护的存储区域、驱动器这样的多个阶层,地址变换处理成为多级。本实施例中,为了简化说明,省略实施例的说明所必须的阶层以外的阶层,作为例子仅叙述逻辑卷与驱动器的地址的对应关系。逻辑卷对应于NVM子系统和名字空间的对。例子中,设按每个逻辑卷存在1个地址变换表3600。逻辑地址3601是逻辑卷内的逻辑地址。驱动器区域号码3602是驱动器508的识别号码。
驱动器区域号码3602用图9C说明详细情况。驱动器地址3603是驱动器508内的数据存储目的地的地址。以后的说明中,有时将驱动器地址称为物理地址。驱动器地址3603的表要素的方式依赖于数据的存储方式。本实施例中,使数据保护方式为RAID,在地址变换表3600中将逻辑地址3601与驱动器区域号码3602、驱动器地址3603对应起来。数据保护方式为镜像的情况下,在地址变换表3600中将逻辑地址3601与镜像源和镜像目的地各自的驱动器区域号码3602、驱动器地址3603对应起来。
地址变换表中的地址的管理单位、即逻辑地址与驱动器地址的对应的单位,例如是RAID条带单位。逻辑卷的块大小为例如512B,RAID条带大小为例如512KB(=1024块)。本实施例中,为了能够容易地理解逻辑地址与数据存储目的地的对应关系,使用地址变换表对地址变换处理进行了说明。RAID、镜像等的数据保护方式中,能够通过计算进行地址变换,地址变换处理不限定于本方法。例如,RAID中,以奇偶校验周期(parity cycle)的单位在逻辑地址和驱动器地址的对应中存在周期性,使用RAID组的驱动器结构和周期性,能够从逻辑地址3601计算驱动器区域号码3602、驱动器地址3603。RAID组的驱动器结构用图36B进行说明。
图36B是表示数据保护中使用的驱动器组的管理信息即数据保护驱动器组表3610的图。数据保护驱动器组表3610包含驱动器组号码3611、数据保护方式3612、驱动器结构3612的项目。
驱动器组号码3611是驱动器组的识别号码。数据保护方式3612示出驱动器组的数据保护方式。例如为RAID5(3D+1P)、RAID6(6D+2P)、镜像等。“D”表示数据驱动器,“P”表示奇偶校验驱动器。例如“3D+1P”表示由3台数据驱动器、1台奇偶校验驱动器,共4台的驱动器构成。驱动器结构3612表示构成驱动器组的驱动器的驱动器区域号码。数据保护驱动器组表3610作为存储系统的结构信息之1,由存储装置120管理并保存。
(6)存储控制器中的主机命令的处理次序
图6是表示实施例1的存储控制器中的主机命令的处理次序的流程图。即,是表示目标结构方式1涉及的存储控制器中的主机命令的处理次序的流程图。
当存储控制器121的目标驱动程序302从主机110接收到命令时,主机命令处理部304开始步骤600以后的处理。
首先,主机命令处理部304使用存储控制器的主机信息表920的信息,获取作为NVM子系统NQN的标识符923(图4的403)(参照图9B),并且对接收到的NVMe命令进行分析(接收到的NVMe命令参照图9A),读入命令类别912、作为名字空间的识别符的NID(名字空间ID)913、起始地址914、数据传输长度的字段915(步骤601)。
接着,以命令的类别将处理分支(步骤613)。在命令类别912为IO命令(读取命令或写入命令)的情况下,进入步骤602。在命令类别为管理命令(名字空间的创建或删除的命令、NVM子系统的信息获取命令、NVM子系统的设定命令等)的情况下,进入步骤614。以下,对在步骤613中命令类别为IO命令的情况下的流程进行说明。
当处理从步骤613分支到步骤602时,基于从目标驱动程序302得到的存储控制器的标识符403、接收到的NVMe命令的NID、起始地址和数据传输长度的信息,缓存控制部306进行缓存命中、未命中判定(步骤602)。
接着,当进行上述缓存命中、未命中判定时,基于上述命令类别和数据传输长度的信息,进行数据传输方法的判定(步骤603)。数据传输方法的判定是按照图8所示的表,判定是进行通常的数据传输还是向驱动器壳体卸载数据传输。
接着,以数据传输方法将处理分支(步骤604)。在数据传输方法为通常的数据传输的情况下进入步骤605,在数据传输方法为卸载的情况下进入步骤606。在进行通常的数据传输的情况下,进行通常的命令处理(步骤605)。通常的命令处理用图11进行说明。最后,结束处理(步骤610)。
以下,返回流程图的步骤606以后的说明,对向驱动器壳体卸载数据传输的处理的流程进行说明。
当处理从步骤604分支到步骤606时,数据传输卸载部307基于起始地址和数据传输长度的信息,参照地址变换表3600生成数据传输所需要的数据传输参数(卸载命令)(步骤606)。即,存储控制器参照地址变换表3600,对与从主机接收到的命令对应的数据的存储目的地的驱动器,生成包含物理地址的卸载命令。
卸载命令包含识别主机的主机NQN、主机的数据存储目的地的地址等信息、数据存储目的地的上述存储装置的地址和数据传输长度。卸载命令中包含必要的控制数据,其生成方法在图9A-D的说明中进行说明。
接着,数据传输卸载部307通过参照地址变换表3600,由地址变换部318识别在步骤601中得到的标识符923(图4的403)、NID、与起始地址对应的数据存储目的地的驱动器盒200,使用卸载命令通信部(启动器)315向驱动器盒200发送卸载命令(步骤607)。
接着,等待来自驱动器盒200的卸载命令的完成(步骤608)。接着,数据传输卸载部307使用卸载命令通信部(启动器)315接收来自驱动器盒200的卸载命令的完成响应,对卸载命令的命令的完成响应进行分析(步骤611)。NVMe协议中,由队列处理一个命令,因此处理命令的设备必须对命令发出源进行完成响应。即,这是因为在来自主机的命令为读取命令的情况下,完成响应必须从作为命令的委托目标的存储控制器返回主机。在完成响应出错的情况下,进行异常产生时的处理,但在此省略说明。以后假设完成响应成功地继续说明。
接着,主机命令处理部304生成对于主机的读取命令的命令的完成响应(步骤612)。接着,使用目标驱动程序302向主机110发送读取命令的完成响应(步骤609),完成处理(步骤610)。另外,在传输对象的数据跨多个驱动器盒200的驱动器218的情况下,对多个驱动器盒200进行步骤606和步骤607的处理。此外,在步骤608中,等待来自所有作为发送卸载命令的目标的驱动器盒200的卸载命令的完成。
以下,返回流程图的步骤614以后的说明,对步骤613中命令类别为管理命令的情况下的流程进行说明。
处理从步骤613分支到步骤614时,按照由管理命令指定的内容,主机命令处理部304进行管理命令的处理(步骤614)。接着,生成包含管理命令的处理的结果在内的命令的完成响应(步骤615)。接着,使用目标驱动程序302向主机110发送命令的完成响应(步骤616)。
像这样,当收到IO命令、例如读取命令时,在缓存命中的情况下,存储控制器对主机传输读取数据,在缓存未命中的情况下,参照地址变换表生成卸载命令,控制驱动器壳体(FBOF)使其直接将读取数据向主机传输。另外,虽然读取数据直接从驱动器壳体向主机传输,但命令的完成响应需要由从主机收到了命令的存储控制器的主机命令处理部304进行。
(11)存储控制器中的主机命令的处理次序的后续(通常的命令处理)。
图11是实施例1的存储控制器中的主机命令的处理次序的后续,是表示通常的命令处理的处理次序的流程图。即,是表示目标结构方式1涉及的存储控制器中的主机命令的处理次序的流程图中的步骤605的处理(通常的命令处理)。
首先,主机命令处理部304以命令类别将处理分支(步骤1101)。在命令类别为读取命令的情况下,进入步骤1102。在命令类别为写入命令的情况下,进入步骤1113。
在处理从步骤1101分支到步骤1102的情况下,处理以缓存命中/未命中来分支(步骤1102)。在缓存命中的情况下,进入步骤1103。在未命中的情况下,进入步骤1106。在此,缓存命中、未命中的判定是对响应来自主机的IO命令的数据是否存在于存储控制器的缓存存储器204中来进行判定的。例如,在来自主机的IO命令为读取命令的情况下,判定响应读取命令的数据是否存在于缓存存储器204。
接着,对在流程图的步骤1101中命令类别为读取命令且在步骤1102中为缓存命中的情况下的流程进行说明。当处理分支到步骤1103时,数据传输控制部(主机与存储控制器之间)305将由读取命令指定的地址范围的数据从缓存506向由读取命令指定的主机110内的物理存储器区域503传输(步骤1103)。
接着,主机命令处理部304生成命令的完成响应(步骤1104)。接着,使用目标驱动程序302向主机发送命令的完成响应(步骤1105)。最后,结束处理(步骤1118)。
接着,对在流程图的步骤1101中命令类别为读取命令且在步骤1102中为缓存未命中的情况下的流程进行说明。当处理从步骤1101分支到步骤1102,并且处理又从步骤1102分支到步骤1106时,缓存控制部306进行用于存储读取数据的缓存区域的确保(步骤1106)。接着,主机命令处理部304通过参照地址变换表3600来由地址变换部318识别在步骤601中获得的标识符403、NID、与起始地址对应的数据存储目的地的驱动器盒200和驱动器508,使用启动器驱动程序303向驱动器盒200发出控制器命令的读取命令(步骤1107)。
读取命令的读入目的地是由地址变换部318的地址变换而得到,其是与数据范围505对应的驱动器盒200、驱动器508、驱动器508内的存储区域509。作为读取数据的传输目的地,命令中指定在步骤1106中确保的缓存区域的地址。另外,在NVMe传输使用RDMA的情况下,NVMeoF规范中,作为数据传输需要的信息,指定命令发出源的存储器区域的地址。此外,NVMeoF规范中,通过连接命令在主机与NVM子系统之间创建管理(Admin)队列和IO队列,经这些队列进行命令和完成响应的收发。以后,为了使说明简单,将与对应于驱动器508的NVM子系统进行的命令和完成响应的收发仅记载为与驱动器508进行的命令和完成响应的收发。
接着,等待来自驱动器盒200的读取命令完成(步骤1108)。接着,主机命令处理部304使用启动器驱动程序303接收来自驱动器盒200的读取命令的完成响应,对读取命令的命令的完成响应进行分析(步骤1109)。在完成响应出错的情况下进行异常发生时的处理,但在此省略说明。以后设完成响应成功地继续说明。
接着,数据传输控制部(主机与存储控制器之间)305将存储在缓存内的读取数据从缓存506向由读取命令指定的主机110内的物理存储器区域503传输(步骤1110)。
数据传输完成后,主机命令处理部304生成对于主机的读取命令的命令的完成响应(步骤1111)。接着,使用目标驱动程序302向主机110发送命令的完成响应(步骤1112)。最后完成处理(步骤1118)。
接着,对流程图的步骤1101中命令类别为写入命令的情况下的流程进行说明。当处理从步骤1101分支到步骤1113时,缓存控制部306进行用于存储写入数据的缓存区域的确保(步骤1113)。
接着,数据传输控制部(主机与存储控制器之间)305将由写入命令指定的主机110内的物理存储器区域503的数据传输到确保的缓存区域(步骤1114)。接着,将传输到缓存区域中的写入数据再传输到另一个存储控制器,在两个存储控制器的缓存区域存储写入数据(步骤1115)。将此称为缓存的双重写入。
接着,数据传输控制部(主机与存储控制器之间)305生成与主机110的写入命令对应的命令完成响应(步骤1116)。接着,使用目标驱动程序302向主机110发送命令的完成响应(步骤1116)。最后完成处理(步骤1118)。
(12)存储控制器中的离台的处理次序
图12是表示存储控制器中的离台的处理次序的流程图。即,是表示目标结构方式1涉及的存储控制器中的离台的处理次序的流程图。
当离台处理部314判定为满足离台条件(例如,脏缓存量为阈值以上等)时,离台处理部314开始步骤1200以后的处理。
离台处理部314直到将存储于缓存内的离台对象数据写入驱动器为止,反复以后的处理(步骤1201)。离台对象数据的选择方法不是本实施例的本质,因此省略说明。离台处理部314生成写入离台对象数据的控制器命令的写入命令(步骤1202)。
写入命令的写入目的地由地址变换部318的地址变换得到,其是与数据范围505对应的驱动器盒200、驱动器508、驱动器508内的存储区域509。接着,经启动器驱动程序303向驱动器盒200发送写入命令(步骤1203)。接着,等待来自驱动器盒200的命令完成(步骤1204)。接着,经启动器驱动程序303接收来自驱动器盒200的命令的完成响应,进行命令的完成响应的分析(步骤1205)。在完成响应出错的情况下,进行异常发生时的处理,在此省略说明。以后,设完成响应成功地继续说明。
接着,在步骤1201的反复继续的情况下,进入步骤1202。当步骤1201的反复结束时,进行离台完成的缓存区域的释放(步骤1206)。最后结束处理(步骤1207)。
(20)驱动器盒中的控制器命令的处理次序
图20是表示驱动器盒中的控制器命令的处理次序的流程图。当驱动器盒200的目标驱动程序308从存储控制器121接收到控制器命令时,控制器命令处理部309开始步骤2000以后的处理。
首先,控制器命令处理部309对从存储控制器121接收到的命令进行分析,读入命令类别、作为名字空间的识别符的NID(名字空间ID)、起始地址、数据传输长度的字段(步骤2001)。
接着,以命令类别将处理分支(步骤2002)。在命令类别为读取命令的情况下,进入步骤2003。在命令类别为写入命令的情况下,进入步骤2009。在命令类别为管理命令的情况下,进入步骤2015。
以下,对步骤2002中命令类别为读取命令的情况下的流程进行说明。当处理从步骤2002分支到步骤2003时,控制器命令处理部309确保用于存储读取数据的缓冲区域(步骤2003)。接着,从驱动器向确保的缓冲区域读出读取对象的数据(步骤2004)。存储有读取对象的数据的驱动器508以控制器命令的发送目标的标识符402识别。对向驱动器发出的读取命令的名字空间ID和起始地址、数据传输长度,指定步骤2001的字段的值。即,驱动器盒按照来自存储控制器的卸载命令,从作为存储装置的驱动器读出数据。驱动器盒从自身的驱动器读取数据的方法是一般的方法,省略详细。
接着,将存储于缓冲区域的读取数据向存储控制器进行数据传输(步骤2005)。本实施例中,NVMeoF规范中以NVMe传输使用RDMA(Remote Direct Memory Access:远程直接存储器存取)为前提。即,数据传输以对于由命令指定的命令发出源的存储器区域的RDMA写入(RDMA Write)的方式进行。接着,生成与来自存储控制器121的读取命令对应的命令的完成响应(步骤2007)。接着,经目标驱动程序308向存储控制器121发送命令的完成响应(步骤2008)。最后结束处理(步骤2018)。
接着,返回流程图的步骤2009以后的说明,对命令类别为写入命令的情况下的处理的流程进行说明。当处理从步骤2002分支到步骤2009时,确保存储写入数据的缓冲区域(步骤2009)。接着,从存储控制器121传输写入数据(步骤2010)。数据传输,按照NVMe传输中使用RDMA的情况下的NVMeoF的规范,以对于由命令指定的命令发出源的存储器区域的RDMA读取(RDMA Read)的方式进行。
接着,将存储于缓冲区域的写入数据向驱动器写入(步骤2011)。写入对象的驱动器508以控制器命令的发送目标的标识符402识别。对向驱动器发出的写入命令的名字空间ID和起始地址、数据传输长度,指定步骤2001的字段的值。驱动器盒对自身的驱动器写入数据的方法是一般的方法,省略详细。
接着,生成与来自存储控制器121的写入命令对应的命令的完成响应(步骤2012)。接着,经目标驱动程序308向存储控制器121发送命令的完成响应(步骤2014)。最后结束处理(步骤2018)。
接着,返回流程图的步骤2015以后的说明,对命令类别为管理命令的情况下的处理流程进行说明。当处理从步骤2002分支到步骤2015时,进行管理命令的处理(步骤2015)。接着,生成与来自存储控制器121的管理命令对应的命令的完成响应(步骤2016)。接着,经目标驱动程序308向存储控制器121发送命令的完成响应(步骤2017)。最后结束处理(步骤2018)。
(7)驱动器盒中的数据传输的卸载命令的处理次序
图7是表示实施例1的驱动器盒中的数据传输的卸载命令的处理次序的流程图。即,是表示目标结构方式1涉及的驱动器盒中的数据传输的卸载命令的处理次序的流程图。
驱动器盒200的卸载命令处理部311当经卸载命令通信部(目标)313从存储控制器121接收到卸载命令时,开始步骤700以后的处理。
首先,卸载命令处理部311读入卸载命令的各字段(步骤701)。各字段用图9D说明。接着,在存储器204中确保用于存储读取数据的缓冲区(步骤708)。接着,从步骤701中读入的字段的NVM子系统NQN和NID的信息、驱动器盒内的NVM子系统NQN和驱动器218的映射信息,识别对应的驱动器218,向驱动器218发出读取命令。对该读取命令的起始地址和数据传输长度,指定步骤701中读入的字段的起始地址和数据传输长度,并指定步骤708中确保的缓冲区的地址作为数据的存储目的地(步骤702)。驱动器按照卸载命令,从存储数据的存储装置读出数据。
接着,等待来自驱动器218的读取命令的完成(步骤703)。接着,接收来自驱动器218的读取命令的完成响应,对完成响应的内容进行分析(步骤707)。在完成响应出错的情况下进行异常产生时的处理,但在此省略说明。之后以完成响应已成功为前提继续说明。
接着,数据传输控制部(主机与盒之间)310将缓冲区的读取数据向主机110进行数据传输(步骤704)。数据传输控制部(主机与盒之间)310在驱动器盒220与主机110之间进行经网络I/F205的基于RDMA的数据传输。
数据传输控制部(主机与盒之间)310生成用于读取数据的数据传输的RDMA写入命令,将命令排入用于RDMA通信的队列。对RDMA写入命令,指定数据传输长度、成为数据传输源的缓冲区的地址,以及步骤701中读入的字段的存储器地址和R_key,作为对成为数据传输目标的主机110的物理存储器区域503进行识别的信息。用于RDMA通信的队列通过上述的连接命令在主机的网络I/F与网络I/F205之间事先生成。
NVMe协议中,由队列处理一个命令,因此处理命令的设备必须对命令发出源进行完成响应。即,这是因为,在来自主机的命令为读取命令的情况下,完成响应需要从作为命令的委托目标的存储控制器返回主机。不过,响应命令的数据不需要必须从由队列连结的命令的委托目标的设备传输,因此从驱动器盒直接向主机传输数据,从而消除存储控制器的瓶颈。
接着,数据传输控制部(主机与盒之间)310的数据传输完成后,卸载命令处理部311释放缓冲区(步骤709)。接着,经卸载命令通信部(目标)313向存储控制器121发送卸载命令的完成响应(步骤705),结束处理(步骤706)。
(8)数据传输方法的判定
图8是表示传输方法的判定中使用的数据传输条件和数据传输类别的图。数据传输类别以IO模式800的方式表示,IO模式被分类为数据传输长度小于阈值或大于阈值的情况,以及读取或写入的命令类别。关于各分类,在缓存命中的情况801和缓存未命中的情况802下决定传输条件。
实施例1中,能够从驱动器壳体140直接向主机110进行数据传输的条件是,命令类别为读取并且缓存未命中的情况。另外,在数据传输长度大的情况下,顺序存取的可能性高,由直接数据传输带来的性能提高好处大。另一方面,在数据传输长度小的情况下,随机存取的可能性高,由缓存命中带来的性能提高好处大,因此在通常的命令处理中进行数据向缓存506的拷贝。
另外,上述数据传输长度的阈值不需要是固定的,可以设计成能够根据存储装置的工作负荷进行变更。
(9)主机命令的格式、存储控制器的主机信息表、驱动器信息表、卸载命令的格式
图9A是表示主机命令的格式的图,图9B是表示存储控制器的主机信息表的图,图9C是表示驱动器信息表的图,图9D是表示卸载命令的格式的图。
图9A中示出的主机命令的字段包括命令识别符911、命令类别912、NID913、起始地址914、数据传输长度915、存储器地址916和R_key917。
命令识别符911是用于识别各个命令的识别符。例如,在将多个命令多重执行的结构中,用于使发出的命令与命令的完成响应对应。基于命令识别符的命令识别是命令执行中广为人知的方法,省略详细的说明。
命令类别912是表示读取命令、写入命令、管理命令的编码(符号)。
NID913是NVM子系统内的名字空间ID。实施例1中,是存储控制器121的NVM子系统。此外,该NVM子系统的NQN登记在图9B的主机信息表的NVM子系统NQN923中。
起始地址914和数据传输长度915是数据传输对象的数据的、名字空间内的地址和数据传输长度。
存储器地址916是主机110指定的数据传输目标的主机内存储器区域的地址。R_key917是上述主机内存储器区域的识别符。另外,主机命令中的、实施例1的说明中重要度低的字段,即元数据指针等,从图中省略。元数据是指,分配至驱动器、逻辑卷的逻辑块单位(例如512B)的附加的数据。无论有无元数据,实施例1都能够适用,因此省略说明。
此外,为了使说明简单,图9A中,只有1个存储器地址916和R_key917的组,但也可以是由多个组构成的列表。同样地,包括以后的卸载命令的说明在内,以后将存储器地址和R_key作为1个组进行说明,但也可以为由多个组构成的列表。
图9B是存储控制器的主机信息表。主机信息表920包含队列号码921、主机NQN922、NVM子系统NQN923的项目。
队列号码921是主机与NVM子系统之间的IO队列的号码。存储控制器121为了在内部管理IO队列,从主机110接收连接命令而生成IO队列时,对该队列号码进行编号。队列号码在存储控制器121的内部是唯一的值。主机NQN922和NVM子系统NQN923分别是由上述IO队列连接的主机110的NQN和存储控制器121的NVM子系统的NQN。
图9C中示出的驱动器信息表930包含驱动器区域号码931、驱动器盒(ENC)号码932、NVM子系统NQN933、NID934的项目。
驱动器区域号码931是存储控制器121中使用的驱动器218的区域的号码。驱动器218在图5中与驱动器508对应。存储控制器121为了以名字空间单位对驱动器218的区域进行管理,对该驱动器区域号码进行编码。驱动器区域号码在存储控制器121的内部是唯一的值。
驱动器盒号码932是内部具有该驱动器218的驱动器盒200的号码。存储控制器121为了管理驱动器盒200,对该驱动器盒号码932进行编码。驱动器盒号码932在存储控制器121的内部是唯一的值。NVM子系统NQN933和NID934是与驱动器218对应的标识符402和驱动器218内的名字空间ID。
图9D表示卸载命令的格式。卸载命令900的字段包含命令识别符908、主机NQN901、存储器地址902、R_key903、数据传输方向909、NVM子系统NQN904、NID905、起始地址906和数据传输长度907。
命令识别符908是用于识别各个命令的识别符。主机NQN901是驱动器壳体140进行数据传输的目标的主机110的主机NQN。存储器地址902是主机110指定的数据传输目标的主机内存储器区域的地址。R_key903是上述主机内存储器区域的识别符。数据传输方向909表示从驱动器盒200向主机110的数据传输,和从主机110向驱动器盒200的数据传输中的某一者。NVM子系统NQN904和NID905分别是驱动器盒200的NVM子系统的NVM子系统NQN和NVM子系统内的名字空间ID。起始地址906和数据传输长度907是数据传输对象的数据的名字空间内的地址和数据传输长度。NID905、起始地址906、数据传输长度907是参照地址变换表3600从主机命令的逻辑地址得到的信息。
上述卸载命令的字段901~909的值由主机命令处理部304如下设定。
主机命令处理部304将存储控制器121的目标驱动程序302从主机110接收到命令的IO队列与存储控制器的主机信息表920的条目进行对照,将与IO队列对应的主机NQN922设定为主机NQN901,将NVM子系统NQN923作为标识符403识别。该处理在图6的步骤601中进行。
主机命令处理部304将主机110在主机命令内指定的存储器地址916和R_key917设定为存储器地址902和R_key903。主机命令处理部304使用地址变换部318,根据步骤601中得到的标识符403(与NVM子系统NQN923对应)、主机命令的NID913、起始地址914和数据传输长度915的信息,识别数据存储目的地的驱动器508和数据存储目的地的地址。
具体而言,如以下这样进行。首先,地址变换部318使用地址变换表3600将步骤601中得到的“(A)标识符403(NVM子系统NQN)”、“(B)主机命令的NID913”(存储装置中相当于逻辑卷)、“(C)起始地址914”(相当于名字空间内的逻辑地址)变换为“(D)驱动器区域号码3602”、“(E)驱动器地址3603”。
接着,地址变换部318使用驱动器信息表930,从“(D)驱动器区域号码3602”变换为“(F)ENC号码932”、“(G)NVM子系统NQN933”、“(H)NID934”。
卸载命令的传输目标的驱动器盒200以“(F)ENC号码”识别。卸载命令的NVM子系统NQN904、NID905、起始地址906分别与“(G)NVM子系统NQN”、“(H)NID”、“(E)驱动器地址”对应。
命令识别符908在执行中的卸载命令之间为唯一的值。实施例1中,仅在读取命令时进行卸载,因此数据传输方向909仅为从驱动器盒200向主机110。
另外,图9D的卸载命令的各字段的信息不限定于上述的顺序。例如,也能够汇总可从主机命令设定的信息来设定。
以上,根据实施例1,在接收到来自主机的读取命令的存储控制器判定为缓存未命中,读取命令的数据传输长度长于阈值的情况下,从作为FBOF的驱动器壳体对主机直接传输读取数据。因此,即使在存储控制器连接有多个驱动器壳体的情况下,也能够消除存储控制器的瓶颈,实现高速的数据传输。
【实施例2】
实施例1中说明了存储控制器具有缓存的方式,在实施例2中,说明不具有缓存的方式。无缓存的存储控制器中,信息处理系统的结构和存储控制器、驱动器盒的处理的类似点多,因此以后对与实施例1的不同进行说明。实施例2中,除了实施例2中说明的不同点以外,与实施例1的说明相同,因此省略说明。
无缓存的存储控制器中,作为结构上的差异,有不存在图3的缓存控制部306和图5的缓存506这样的差异。因此,写入数据被传输(离台)至与驱动器盒200连接的驱动器508内的存储区域509,由此驱动器508内的存储区域509的数据被即刻反映。不过,离台中,驱动器508内的存储区域509中混合存在新数据和旧数据,图6的控制的一部分步骤变更,使得作为存储装置能够向主机响应具有一致性的数据。为了判断驱动器508内的存储区域509是否离台,存储控制器121可以具有按每个存储区域509表示离台状态的位图进行管理。
关于数据传输方法的判定,由于成为无缓存,所以图8中,成为仅有缓存未命中的情况802,并且在读取的情况下,总是为直传输。即,图8中没有缓存命中801的情况,而且相当于阈值为0字节的情况下的数据传输方法的判定。
(10)无缓存的存储控制器中的主机命令的处理次序
图10是表示无缓存的存储控制器中的主机命令的处理次序的流程图。
除了步骤1002之外,步骤600~步骤610和步骤1000~步骤1010的内容相同。步骤1002中,基于从目标驱动程序302得到的标识符403、步骤1001中得到的NID、起始地址和数据传输长度的信息,主机命令处理部304判定该区域的数据是否已经离台,离台中的情况下,等待离台完成。离台完成后,成为最新的数据反映在驱动器中的状态。
(13)无缓存的存储控制器(实施例2)中的主机命令的处理次序(通常的命令处理)
图13是无缓存的存储控制器(实施例2)中的主机命令的处理次序的后续,是表示通常的命令处理的处理次序的流程图。
首先,主机命令处理部304以命令类别将处理分支(步骤1301)。命令类别为读取命令的情况下,进入步骤1302。命令类别为写入命令的情况下,进入步骤1309。以下,对步骤1301中命令类别为读取命令的情况下的流程进行说明。
当处理从步骤1301分支到步骤1302时,主机命令处理部304进行用于存储读取数据的缓冲区域的确保(步骤1302)。
接着,由地址变换部318识别标识符403、NID、与起始地址对应的数据存储目的地的驱动器盒200和驱动器508,主机命令处理部304使用启动器驱动程序303向驱动器盒200发出读取命令(步骤1303)。向驱动器发出的读取命令的名字空间ID和起始地址通过地址变换部318的地址变换得到,对数据传输长度指定步骤1001的字段的值。
接着,等待来自驱动器盒200的读取命令完成(步骤1304)。接着,接收读取命令完成响应,对完成响应进行分析(步骤1305)。在完成响应出错的情况下,进行异常产生时的处理,在此省略说明。以后以完成响应已成功为前提继续说明。
接着,数据传输控制部(主机与存储控制器之间)305将由读取命令指定的地址范围的数据从确保的缓冲区域向由读取命令指定的主机110内的物理存储器区域503传输(步骤1305)。在数据传输完成后,主机命令处理部304生成对于主机110的读取命令的命令的完成响应(步骤1307)。接着,经目标驱动程序302向主机110发送命令的完成响应(步骤1308)。最后,完成处理(步骤1322)。
接着,返回流程图的步骤1309以后的说明,对命令类别为写入命令的情况下的处理的流程进行说明。处理与图11的主要不同是,向主机发送写入命令的完成响应的时机。即,在有缓存的情况下,在写入数据的缓存双重写入后,向主机发送写入命令的完成响应,在满足离台的条件时进行向驱动器的写入,而在无缓存的情况下,将写入数据写入驱动器完成后,向主机发送写入命令的完成响应。
当处理从步骤1301分支到步骤1309时,进行用于存储写入数据和RAID条带的缓冲区域的确保(步骤1309)。接着,数据传输控制部(主机与存储控制器之间)305将由写入命令指定的主机110内的物理存储器区域503的数据传输到确保的缓冲区域(步骤1310)。数据传输按照NVMe传输使用RDMA的情况下的NVMeoF的规范,以RDMA读取(RDMA Read)的方式进行。
接着,生成从驱动器读取与写入命令的写入目的地对应的RAID条带的控制器命令的读取命令(步骤1311)。写入命令的写入目的地由地址变换部318的地址经变换得到,其是与数据范围505对应的驱动器盒200、驱动器508、驱动器508内的存储区域509。接着,主机命令处理部304使用启动器驱动程序303将读取命令向驱动器盒发送(步骤1312)。RAID条带有时跨构成RAID的多个驱动器盒200中的多个驱动器。在此情况下,对各驱动器盒的各驱动器如上所述发出读取命令。
接着,等待读取命令的完成(步骤1313)。接着,进行读取命令的完成响应的接收和完成响应的分析(步骤1314)。在完成响应出错的情况下进行异常发生时的处理,但在此省略说明。以后假设完成响应成功地继续说明。
接着,从读出的RAID条带计算奇偶校验(步骤1315)。接着,生成将RAID条带的更新数据和奇偶校验写入驱动器的写入命令(步骤1316)。接着,向驱动器盒200发送控制器命令的写入命令(步骤1317)。如前所述,在RAID条带跨多个驱动器盒200中的多个驱动器的情况下,对各驱动器盒的各驱动器如上所述发出写入命令。接着,等待写入命令的完成(步骤1318)。接着,接收写入命令的完成响应,进行完成响应的分析(步骤1319)。在完成响应出错的情况下进行异常发生时的处理,但在此省略说明。以后以完成响应已成功为前提继续说明。
接着,生成与来自主机110的写入命令对应的命令的完成响应(步骤1320)。接着,向主机110发送命令的完成响应(步骤1321)。最后结束处理(步骤1322)。
实施例2中,图10的步骤S1004中,对于来自主机的读取命令,因为成为无缓存,所以图8中变成仅有缓存未命中的情况802,并且判定为相当于阈值为0字节的情况下的数据传输方法,在读取的情况下,总是为直传输。
根据实施例2,在读取的情况下总是为直传输,因此即使在存储控制器连接有多个驱动器壳体的情况下,也能够消除存储控制器的瓶颈,实现高速的数据传输。
【实施例3】
(14)代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式下(目标结构方式2:实施例3)的主机、存储控制器、驱动器盒的程序结构。
图14是表示代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式下(目标结构方式2:实施例3)的主机、存储控制器、驱动器盒的程序结构的图。
存储控制器121的程序包括盒命令通信部(目标)1401、盒命令处理部1402、数据传输控制部(存储控制器与盒之间)1403、缓存控制部1404、数据传输卸载部1405、卸载命令通信部(启动器)1406、离台处理部1407、控制器命令发送部(启动器)1408、地址变换部1419和未图示的OS。
盒命令通信部(目标)1401对盒命令通信部(启动器)1411提供支持NVMeoF的存储区域。
盒命令处理部1402使用盒命令通信部(目标)1401接收驱动器盒200发出的命令,进行命令的分析、读取写入处理、命令的完成响应的生成、经盒命令通信部(目标)1401进行的命令的完成响应的发送等。
数据传输控制部(存储控制器与盒之间)1403按照盒命令处理部1402的指示,进行存储控制器与驱动器盒之间的数据传输处理。缓存控制部1404进行:基于缓存数据的检索的缓存命中、未命中的判定;脏数据(写入物理驱动器前的状态)和干净数据(写入物理驱动器后的状态)的各状态间的转换;以及缓存区域的保留和释放等的控制。这些缓存控制的各处理是广为人知的技术,省略在此的详细说明。
数据传输卸载部1405生成数据传输的卸载命令,对驱动器盒200指示向主机进行数据传输。卸载命令是根据从主机接收的IO命令,基于地址变换表等的存储的结构信息生成,用于在驱动器壳体侧进行IO命令处理的命令,因此,包含如图9D中所示的主机识别符、存储器地址、驱动器的识别符、驱动器的NS、起始地址、数据长度等的数据传输参数。
卸载命令通信部(启动器)1406在与驱动器盒之间进行卸载命令的发送、响应的接收。离台处理部1407进行将缓存内的数据写入驱动器的离台处理。控制器命令发送部(启动器)1408在与驱动器盒之间进行存储命令的发送和完成响应的接收。地址变换部1419具有数据范围505与作为数据的存储目的地的驱动器盒200、驱动器508、驱动器508内的存储区域509之间的映射表,将数据范围505的地址变换为对应的驱动器盒200、驱动器508、驱动器508内的存储区域509的地址。
驱动器盒200的程序包括目标驱动程序1409、主机命令处理部1410、盒命令通信部(启动器)1411、数据传输控制部(存储控制器与盒之间)1413、数据传输控制部(主机与盒之间)1414、卸载命令通信部(目标)1415、卸载命令处理部1416、控制器命令通信部(目标)1417、驱动器控制部1418、缓冲区控制部1412、控制器命令处理部1420和未图示的OS。
目标驱动程序1409对主机110的启动器驱动程序301提供支持NVMeoF的存储区域。主机命令处理部1410使用目标驱动程序1409接收主机或存储控制器发出的命令,进行命令的分析、读取写入处理、命令的完成响应的生成、经目标驱动程序1409进行的命令的完成响应的发送等。盒命令通信部1411识别盒命令通信部(目标)1401提供的支持NVMeoF的存储区域。数据传输控制部1413(控制器与盒之间)进行存储控制器与驱动器盒之间的数据传输处理。数据传输控制部(主机与盒之间)1414按照主机命令处理部1410和卸载命令处理部1416的指示,进行支持NVMeoF的主机与驱动器盒之间的数据传输处理。
卸载命令通信部(目标)1415接收来自存储控制器121的数据传输的卸载命令。卸载命令处理部1416进行卸载命令的分析、读取处理、卸载命令的完成响应的生成、卸载命令的完成响应的发送等。控制器命令通信部(目标)1417在与存储控制器121之间进行存储命令的接收和完成响应的发送。
驱动器控制部1418进行驱动器218的管理,按照主机命令处理部1410和卸载命令处理部1416的指示,对驱动器218进行读取、写入处理。缓冲区控制部1412进行用于进行数据传输的暂时性存储器区域即缓冲区的确保和释放。控制器命令处理部1420使用目标驱动程序1409接收存储控制器发出的命令,进行命令的分析、读取写入处理、命令的完成响应的生成、经目标驱动程序1409进行的命令的完成响应的发送等。
(15)目标结构方式2涉及的NVMe over Fabrics中的主机和NVM子系统的标识符
图15是表示目标结构方式2涉及的NVMe over Fabrics中的主机和NVM子系统的标识符的图。
主机110具有至少1个标识符401(主机NQN)。主机110也可以是多个,省略图示。驱动器盒200具有至少1个标识符1503(NVM子系统NQN)。与该标识符1503对应的NVM子系统中,对存储池的一部分进行分配而得到的逻辑性存储区域作为名字空间被分配。存储池是指,由多个驱动器218的存储区域构筑,实施了RAID等的数据保护的存储区域。上述方式对于驱动器盒201也同样,省略说明。驱动器盒200和驱动器盒201也可以是2个以上,省略图示。本目标结构方式中,驱动器盒接收主机的命令,因此不再需要存储控制器的NVM子系统,没有存储控制器的NVM子系统这一点与图4不同。
驱动器盒的NVM子系统的生成以主从方式进行。存储装置120为主,驱动器盒200(和驱动器盒201)为从。这是为了将定义驱动器盒的NVM子系统的信息作为存储装置的结构信息,由具有数据保护功能的存储装置120管理并保存。由此,能够提供存储控制器的数据保护功能、在存储控制器中进行工作的Snapshot、Thin Provisioning等的程序产品(存储装置的功能)的功能。定义NVM子系统的信息是指,NVM子系统NQN(在此是指标识符1503)、NVM传输的信息(定义主机与NVM子系统之间的连接的信息。在此是指驱动器盒的IP地址、TCP/UDP端口等)、序列号或型号等。
至存储装置120识别驱动器盒的驱动器,对主机提供存储区域为止的主要流程如下所述。首先,存储装置120从驱动器盒获取驱动器508的安装信息,生成图9C的驱动器信息表930。接着,存储装置120将驱动器信息表930的驱动器508的存储区域组合,根据数据保护方式构筑由RAID、镜像等保护的存储区域。存储区域的组合和数据保护方式的设定可以自动也可以手动。在此所说的自动的意思是存储装置120自动设定,手动的意思是按照用户指示由存储装置120设定。数据保护中使用的存储区域组合在数据保护驱动器组表3610中管理并保存。存储系统中的数据保护方式是众所周知的技术,省略说明。接着,存储装置120汇总由RAID、镜像等保护的存储区域而构筑存储池。接着,存储装置120提取出存储池的一部分存储区域,构筑逻辑卷。接着,存储装置120生成NVM子系统,分配逻辑卷作为名字空间。存储装置120中,将逻辑卷的逻辑地址与驱动器的物理地址的对应作为地址变换表3600进行管理。
NVM子系统的生成中,存储装置120将上述的定义NVM子系统的信息作为参数进行指定,对驱动器盒200(和驱动器盒201)指示NVM子系统的生成,使得驱动器盒能够对主机提供存储装置120的逻辑性存储区域。驱动器盒200(和驱动器盒201)按照指示生成NVM子系统。NVM子系统的生成例如在起动时、驱动器盒的增设时、结构变更时进行。
由此,驱动器盒能够对主机提供自身的存储区域,存储控制器能够例如以RAID技术等对各驱动器盒的存储区域进行数据保护。即,基于存储控制器的结构信息,对各驱动器盒指示NVM子系统的生成,由此基于来自存储控制器的指示,生成了NVM子系统的驱动器盒将所生成的NVM子系统作为存储区域向主机提供。
主机110通过对驱动器盒200(和驱动器盒201)发送连接命令,能够对驱动器盒200(和驱动器盒201)的NVM子系统进行命令发送和数据传输。
(16)目标结构方式2涉及的驱动器盒中的主机命令和卸载命令的处理次序
图16是表示目标结构方式2涉及的驱动器盒中的主机命令和卸载命令的处理次序的流程图。
当驱动器盒200的目标驱动程序1409从主机110接收到命令时,主机命令处理部1410开始步骤1600以后的处理。
首先,主机命令处理部1410对接收到的NVMe命令进行分析(命令的格式参照主机命令的图9A的格式910),读入命令类别912、作为名字空间的识别符的NID(名字空间ID)913、起始地址914、数据传输长度915的字段(步骤1601)。
接着,以命令的类别将处理分支(步骤1602)。在命令类别为读取命令的情况下,进入步骤1603。在命令类别为写入命令的情况下,进入步骤1623。在命令类别为管理命令的情况下,进入步骤1617。以下,对步骤1601中命令类别为读取命令的情况下的流程进行说明。
当处理分支到步骤1603时,主机命令处理部1410进行用于存储读取数据的缓冲区域的确保(步骤1603)。接着,生成盒命令的读取命令(读取请求)(步骤1604)。该读取命令读入由主机110的读取命令指定的地址范围的数据,将数据存储在确保的缓冲区域中。将驱动器盒对存储控制器发出的命令称为盒命令。盒命令的格式和生成方法用图22说明。
接着,使用盒命令通信部(启动器)1411将生成的盒命令向存储控制器121发送(步骤1605)。接着,等待来自存储控制器121的命令完成响应(步骤1606)。接着,经盒命令通信部(启动器)1411接收来自存储控制器121的读取命令的完成响应,对读取命令的命令的完成响应进行分析(步骤1607)。步骤S1607中,存储控制器基于地址变换表,在接收到主机命令的驱动器盒200的目标驱动程序1409将主机命令的对象数据存储在同一驱动器壳体140内连接的驱动器218中的情况下,向盒发送包含通常的读取响应在内的完成响应,在存储到另一驱动器壳体内的驱动器中的情况下,发送包含卸载指示在内的完成响应。在完成响应出错的情况下进行异常发生时的处理,但在此省略说明。以后假设完成响应成功地继续说明。
接着,以完成响应的类别将处理分支(1608)。在完成响应为读取响应的情况下,进入步骤1609。在完成响应为有卸载指示的读取响应的情况下,进入步骤1613。以下,对步骤1608中命令的响应类别为读取响应的情况下的流程进行说明。
当处理从步骤1608分支到步骤1609时,向主机110传输读取数据(步骤1609)。接着,数据传输控制部(主机与驱动器盒之间)1414将存储在缓冲区中的读取数据传输到由读取命令指定的主机110内的物理存储器区域503(步骤1609)。在此,与实施例1同样,设以对由命令指定的命令发出源的存储器区域的RDMA写入的方式进行数据传输来进行说明。不过,在代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的本实施例中,作为NVMe传输,不仅能够使用RDMA,而且能够使用TC、光纤通道(FibreChennel)等。因此,数据传输不限定于RDMA写入,也可以使用由NVMe传输规定的数据传输。
接着,主机命令处理部1410生成与来自主机110的读取命令对应的命令的完成响应(步骤1610)。接着,使用目标驱动程序1409向主机110发送命令的完成响应(步骤1611)。接着,将确保的缓冲区域释放(步骤1612)。最后完成处理(步骤1635)。
接着,返回流程图的步骤1608以后的说明,对命令的响应类别为有卸载指示的读取响应的情况下的处理的流程进行说明。当处理从步骤1608分支到步骤1613时,主机命令处理部1410按照卸载指示将读取对象的数据从驱动器读取到确保的缓冲区域(步骤1613)。存储有读取对象的数据的驱动器508用由卸载指示指定的标识符402识别。对向驱动器发出的读取命令的名字空间ID和起始地址、数据传输长度,指定卸载指示的值。驱动器盒按照卸载命令从作为存储装置的驱动器读出数据。驱动器盒从自身的驱动器读取数据的方法是一般的方法,省略详细。
接着,数据传输控制部(主机与驱动器盒之间)1414将存储在缓冲区的读取数据向由读取命令指定的主机110内的物理存储器区域503传输(步骤1614)。响应命令的数据不需要必须从由队列连结的命令的委托目标的设备传输,因此从驱动器盒直接向主机传输数据,消除存储控制器的瓶颈。
接着,生成卸载命令的完成响应(步骤1615)。接着,使用卸载命令通信部(目标)1415向存储控制器121发送卸载命令的完成响应(步骤1616)。以后,步骤1610、1611、1612、1635如上述中所说明。因为需要对作为卸载命令发出源的存储控制器通知处理的完成。
接着,返回流程图的步骤1623以后的说明,对命令类别为写入命令的情况下的处理的流程进行说明。当处理从步骤1602分支到步骤1623时,主机命令处理部1410确保用于存储写入数据的缓冲区域(步骤1623)。接着,数据传输控制部(主机与驱动器盒之间)1414将由写入命令指定的主机110内的物理存储器区域503的数据向确保的缓冲区域传输(步骤1624)。接着,主机命令处理部1410生成将缓冲区域的写入数据写入由主机110的写入命令指定的地址范围的盒命令的写入命令(步骤1625)。
接着,使用盒命令通信部(启动器)1411向存储控制器121发送盒命令(步骤1626)。接着,等待来自存储控制器121的XFER RDY(步骤1627)。XFER RDY是意味着已完成写入准备的消息。接着,经盒命令通信部(启动器)1411接收来自存储控制器121的XFER RDY(步骤1628)。
接着,数据传输控制部(存储控制器与驱动器盒之间)1413将存储于缓冲区域的写入数据向存储控制器传输(1629)。接着,等待存储控制器121的命令完成(步骤1630)。接着,经盒命令通信部(启动器)1411从存储控制器121接收写入命令的命令完成响应,对写入命令的命令完成响应进行分析(步骤1631)。接着,生成与来自主机110的写入命令对应的命令的完成响应(步骤1632)。接着,使用目标驱动程序1409向主机110发送命令的完成响应(步骤1633)。接着,将确保的缓冲区域开放(步骤1634)。最后,完成处理(步骤1635)。
接着,返回流程图的步骤1617以后的说明,对命令类别为管理命令的情况下的处理的流程进行说明。当处理从步骤1602分支到步骤1617时,接着,将主机110的管理命令的内容拷贝,生成盒命令的管理命令(步骤1617)。接着,使用盒命令通信部(启动器)1411向存储控制器121发送盒命令(步骤1618)。接着,等待存储控制器121的命令完成(步骤1619)。接着,经盒命令通信部(启动器)1411从存储控制器121接收管理命令的命令完成响应,对管理命令的命令完成响应进行分析(步骤1620)。接着,生成与来自主机110的管理命令对应的命令的完成响应(步骤1621)。接着,使用目标驱动程序1409向主机110发送命令的完成响应(步骤1622)。
(17)目标结构方式2涉及的存储控制器中的盒命令的处理次序
图17是表示目标结构方式2涉及的存储控制器中的盒命令的处理次序的流程图。当存储控制器121的盒命令通信部(目标)1401从驱动器盒200接收到盒命令时,盒命令处理部1402开始步骤1700以后的处理。
首先,盒命令处理部1402对接收到的盒命令进行分析,读入命令类别、作为名字空间的识别符的NID(名字空间ID)、起始地址、数据传输长度的字段(步骤1701)。接着,以命令的类别将处理分支(步骤1702)。在命令类别为读取命令的情况下,进入步骤1703。在命令类别为写入命令的情况下,进入步骤1717。在命令类别为管理命令的情况下,进入步骤1714。以下,对步骤1702中命令类别为读取命令的情况下的流程进行说明。
当处理分支到步骤1703时,基于由盒命令通信部(目标)1401得到的标识符403、步骤1701中得到的NID、起始地址和数据传输长度的信息,进行缓存命中、未命中判定(步骤1703)。接着,以缓存命中还是未命中将处理分支(步骤1705)。在缓存命中的情况下进入步骤1706,在未命中的情况下进入步骤1709。在此,缓存命中、未命中的判定是对响应来自主机的IO命令的数据是否存在于存储控制器的缓存存储器204中进行判定。例如,在来自主机的IO命令为读取命令的情况下,对响应读取命令的数据是否在缓存存储器204上进行判定。
在缓存命中的情况下,使用数据传输处理部(存储控制器与驱动器盒之间)1403向驱动器盒200传输缓存内的数据(步骤1706)。接着,生成盒命令的读取命令的完成响应(步骤1707)。接着,使用盒命令通信部1401(目标)向驱动器盒200发送命令的完成响应(步骤1708)。最后完成处理(步骤1723)。
以下,返回流程图的步骤1709以后的说明,对未命中的情况下的处理的流程进行说明。当处理从步骤1705分支到步骤1709时,数据传输卸载部1405通过参照地址变换表等生成数据传输所需要的卸载命令(步骤1709)。卸载命令需要的控制数据及其生成方法如图9A-D的说明所述。
接着,生成盒命令的读取命令的完成响应(步骤1710)。接着,根据从盒命令通信部(目标)1401得到的标识符403、步骤1701中得到的NID、起始地址和数据传输长度的信息,识别数据存储目的地的驱动器盒200,使用卸载命令通信部(启动器)1406向驱动器盒200发送卸载命令和读取命令的完成响应(步骤1711)。
接着,等待来自驱动器盒200的卸载命令的完成(步骤1712)。接着,经卸载命令通信部(启动器)1406接收来自驱动器盒200的卸载命令的完成响应,对卸载命令的命令的完成响应进行分析(步骤1713)。最后完成处理(步骤1723)。
以下,返回流程图的步骤1702以后的说明,对命令类别为写入命令的情况下的处理的流程进行说明。当处理从步骤1702分支到步骤1717时,盒命令处理部1402进行用于存储写入数据的缓存区域的确保(步骤1717)。接着,经盒命令通信部(目标)1401向驱动器盒200发送XFER RDY(步骤1718)。接着,数据传输控制部(存储控制器与盒之间)1403接收来自驱动器盒的传输数据(步骤1720)。
接着,将写入数据传输到另一个存储控制器,进行缓存的双重写入(步骤1720)。接着,生成与驱动器盒的写入命令对应的命令完成响应(步骤1721)。接着,使用盒命令通信部(目标)1401向驱动器盒200发送命令的完成响应(步骤1722)。最后完成处理(步骤1723)。
以下,返回流程图的步骤1714以后的说明,对命令类别为管理命令的情况下的处理的流程进行说明。当处理分支到步骤1714时,按照由管理命令指定的内容,盒命令处理部1402进行管理命令的处理(步骤1714)。接着,生成包含管理命令的处理的结果在内的命令的完成响应(步骤1715)。接着,使用盒命令通信部(目标)1401向驱动器盒200发送命令的完成响应(步骤1716)。最后完成处理(步骤1723)。
(18)目标结构方式2涉及的存储控制器中的离台的处理次序
图18是表示目标结构方式2涉及的存储控制器中的离台的处理次序的流程图。因为与图12的共同点多,所以为了容易理解,仅说明差异。差异是图12中以驱动器盒200的RDMA读取的方式进行写入数据的数据传输的部分变成从存储控制器121发送传输数据这一点。
变更部分为从步骤1801到步骤1803。即,步骤1203之后,离台处理部1407等待来自驱动器盒200的XFER RDY(步骤1801)。接着,经卸载命令通信部(启动器)1406从驱动器盒接收XFER RDY(步骤1802)。接着,数据传输处理部(存储控制器与盒之间)1403向驱动器盒发送传输数据(步骤1803)。步骤1204以后与图12相同。
(21)目标结构方式2涉及的驱动器盒中的控制器命令的处理次序
图21是表示目标结构方式2涉及的驱动器盒中的控制器命令的处理次序的流程图。
因为与图20的共同点多,所以为了易于理解,仅说明差异。差异是与存储控制器之间的数据传输。步骤2005的基于RDMA写入的数据传输变为以数据传输控制部(存储控制器与驱动器盒之间)1413进行的数据传输(步骤2101)。此外,步骤2010的基于RDMA读取的数据传输变为从驱动器盒200向存储控制器121发送XFER RDY(步骤2102)和由数据传输控制部(存储控制器与驱动器盒之间)1413接收来自存储控制器的传输数据(步骤2103)。这以外的步骤与图20相同。
(22)驱动器盒的主机信息表和盒命令的格式
图22是表示驱动器盒的主机信息表的图。图23是表示盒命令的格式的图。
图22的主机信息表包括队列号码2201、主机NQN2202、NVM子系统NQN2203的项目。实施例3中,驱动器盒200相对于主机110作为NVMe over Fabrics的目标来工作。因此,驱动器盒200将主机的信息存储于主机信息表,使得在主机命令的处理中能够参照主机的信息。
队列号码2201是主机与NVM子系统之间的IO队列的号码。驱动器盒200为了在内部管理IO队列,在从主机110接收到连接命令而生成IO队列时,编排该队列号码。队列号码在驱动器盒200的内部是唯一的值。主机NQN2202和NVM子系统NQN2203分别是由上述IO队列连接的主机110的NQN和驱动器盒200的NVM子系统的NQN。NVM子系统NQN2203与标识符1503对应。
图23所示的盒命令的字段包括命令识别符2211、主机NQN2212、驱动器盒号码2213、驱动器盒存储器地址2214、NVM子系统NQN2215、命令类别2216、NID(名字空间ID)2217、起始地址2218、数据传输长度2219、存储器地址2220和R_key2221。
命令识别符2211是用于识别各个命令的识别符。主机NQN2212是命令发出源的主机110的NQN(与主机NQN2202对应)。盒号码2213是用于识别盒命令的发送源的号码,是驱动器盒200自身的号码。该驱动器盒号码是为了管理驱动器盒200而由存储控制器121编排的号码。编号的时机例如是存储装置的起动时、驱动器盒的增设时。
存储器地址2214是驱动器盒200在与存储控制器121的数据传输中使用的数据缓冲区的地址。驱动器盒200与存储控制器121之间的数据通信能够使用RDMA通信,在存储装置中能够使用一般的FC(Fibre Channel:光纤通道)。在使用RDMA通信的情况下,存储器地址2214之外还需要R_key,在此不限定于RDMA通信,因此省略记载。
NVM子系统NQN2215是主机命令的访问对象的NVM子系统的NQN(与标识符1503对应)。
命令类别2216、NID2217、起始地址2218、数据传输长度2219、存储器地址2220、R_key2221是主机命令的命令识别符911、命令类别912、NID913、起始地址914、数据传输长度915、存储器地址916、R_key917。
上述盒命令的字段2211~2221的值由主机命令处理部1410如下所述设定。
主机命令处理部1410对命令识别符2211设定在执行中的盒命令之间唯一的值。
主机命令处理部1410将驱动器盒200的目标驱动程序1409从主机110接收到命令的IO队列与驱动器盒的主机信息表2200的条目进行对照,将与IO队列对应的主机NQN2202和NVM子系统NQN2203设定为主机NQN2212和NVM子系统NQN2215(与标识符1503对应)。
主机命令处理部1410将自身的盒号码设定为盒号码2213,将驱动器盒200在与存储控制器121的数据传输中使用的数据缓冲区的地址设定为盒存储器地址2214。
主机命令处理部1410对命令类别2216、NID2217、起始地址2218、数据传输长度2219、存储器地址2220、R_key2221设定从主机接收到的主机命令的命令识别符911、命令类别912、NID913、起始地址914、数据传输长度915、存储器地址916、R_key917的值。
实施例3中,与实施例1、2不同,经网络与主机连接的驱动器盒直接从主机接收IO命令。在IO命令为读取命令的情况下,驱动器盒直接向主机传输读取数据,也进行完成报告。即,驱动器盒对于主机,将生成的NVM子系统提供给主机作为存储区域。
根据实施例3,能够在维持存储控制器的数据保护技术的同时,通过驱动器盒的卸载功能减轻存储控制器的处理负荷,并且针对读取命令,对主机直接传输读取数据。
【实施例4】
(19)实施例4的信息处理系统的结构
图19是存储控制器在另一网络与主机连接的方式(连接方式2:实施例4)中的目标结构方式2的方式涉及的信息处理系统的连接结构的图。
因为与图1的共同点多,所以为了易于理解,仅说明差异。与图1的不同在于,驱动器壳体140与网络150及网络1901这2个不同的网络连接。网络150是主机110与驱动器壳体140连接的网络,网络1901是存储装置120与驱动器壳体140连接的网络。在此,驱动器壳体140经网络I/F205与网络150和网络1901连接。此外,存储装置120经网络I/F126与网络1901连接。
实施例4中的存储装置120和驱动器壳体140的控制方法与实施例3相同,因此省略说明。
另外,网络1901也可以是PCIe的网络。在此情况下,驱动器壳体140没有网络I/F205,取而代之的是经PCIe端口206与网络1901连接。此外,存储装置120没有网络I/F126,取而代之的是经PCIe端口126与网络1901连接。存储装置120和驱动器壳体140的控制方法除了变成经PCIe的网络进行的数据传输方法(例如DMA)以外,与实施例3相同,因此省略说明。
根据实施例4,与实施例3同样,能够为更适于驱动器盒140从主机接收IO命令等的方式的网络结构。
【实施例5】
对实施例5的概要进行说明。实施例5相当于使实施例3的写入IO高速化的实施例。实施例5的信息处理系统的结构如图1所示。实施例5是与实施例3同样,代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式(目标结构方式2)。
写入IO的高速化通过从主机不经存储控制器地向驱动器壳体传输写入数据,驱动器壳体将写入数据写入驱动器来实现。写入数据的写入目的地由存储控制器决定,驱动器壳体通过向存储控制器询问而获得写入数据的写入目的地(写入IO处理的协作方式1)。NVMe over Fabrics中的主机和NVM子系统的标识符如图15所示,与实施例3相同,因此省略说明。
(23)代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式(与目标结构方式2:实施例3相同)中,写入IO的高速化中由存储控制器决定写入数据的写入目的地,向存储控制器询问写入数据的写入目的地的方式(写入IO处理的协作方式1)中的主机、存储控制器、驱动器盒的程序结构。
图24是表示代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标来工作的方式中,写入IO的高速化中由存储控制器基于地址变换表决定写入数据的写入目的地,向存储控制器询问写入数据的写入目的地的方式(写入IO处理的协作方式1)中的主机、存储控制器、驱动器盒的程序结构的图。
存储控制器121的程序包括盒命令通信部(目标)2301、盒命令处理部2302、数据传输卸载部2303、卸载命令通信部(启动器)2304、双重化解除指示部2305、控制器命令发送部(启动器)2306、写入目的地地址决定部2307、地址变换部2308、逻辑物理地址管理部2309、结构信息管理部2310、双重化信息管理部2311和未图示的OS。
盒命令通信部(目标)2301对盒命令通信部(启动器)2314提供支持NVMeoF的存储区域。
盒命令处理部2302使用盒命令通信部(目标)2301接收驱动器盒200发出的命令,进行命令的分析、读取写入处理、命令的完成响应的生成、经盒命令通信部(目标)2301进行的命令的完成响应的发送等。
数据传输卸载部2303生成数据传输的卸载命令,对驱动器盒200指示主机与驱动器盒之间的数据传输。
卸载命令通信部(启动器)2304在与驱动器盒之间进行卸载命令的发送、响应的接收。双重化解除指示部2305以存储命令对驱动器盒200指示双重化区域的释放。控制器命令发送部(启动器)2306在与驱动器盒之间进行存储命令的发送和完成响应的接收。写入目的地地址决定部2307决定向驱动器盒内的驱动器写入的写入数据的写入目的地地址。地址变换部2308具有数据范围505与作为数据的存储目的地的驱动器盒200、驱动器508、驱动器508内的存储区域509之间的地址变换表(映射表),将数据范围505的地址转换为对应的驱动器盒200、驱动器508、驱动器508内的存储区域509的地址。
逻辑物理地址管理部2309进行与数据范围505对应的存储区域509的访问排他状态和排他解除状态、存储区域509的双重写入状态和双重写入解除状态的各状态的转换的控制。
结构管理部2310具有将存储系统的结构信息初始化、更新、保存的作用。结构信息包含存储控制器的硬件结构、结构设定、驱动器壳体的节点信息、硬件结构、结构设定。双重化信息管理部2311具有将奇偶校验已生成区域2801、双重化区域2802、双重化区域2802内的初级区域2803和次级区域2804的配置初始化、更新、保存的作用。各区域用图28和图29进行说明。
驱动器盒200的程序包括目标驱动程序2312、主机命令处理部2313、盒命令通信部(启动器)2314、数据传输控制部(主机与盒之间)2316、卸载命令通信部(目标)2317、卸载命令处理部2318、控制器命令通信部(目标)2319、驱动器控制部2320、缓冲区控制部2315、控制器命令处理部2321、驱动器双重写入部2322、双重化解除处理部2323和未图示的OS。
目标驱动程序2312对主机110的启动器驱动程序301提供支持NVMeoF的存储区域。主机命令处理部2313使用目标驱动程序2312接收主机发出的命令,进行命令的分析、读取写入处理、命令的完成响应的生成、经目标驱动程序2312进行的命令的完成响应的发送等。盒命令通信部(启动器)2314对存储控制器121的盒命令通信部(目标)发出盒命令。数据传输控制部(主机与盒之间)2316按照主机命令处理部2313和卸载命令处理部2318的指示,进行支持NVMeoF的主机与驱动器盒之间的数据传输处理。
卸载命令通信部(目标)2317接收来自存储控制器121的数据传输的卸载命令。卸载命令处理部2318进行卸载命令的分析、读取处理、写入处理、卸载命令的完成响应的生成、卸载命令的完成响应的发送等。控制器命令通信部(目标)2319在与存储控制器121之间进行存储命令的接收和完成响应的发送。控制器命令处理部2321使用控制器命令处理部(目标)2319接收存储控制器发出的命令,进行命令的分析、双重化解除处理的执行、命令的完成响应的生成、经控制器命令处理部(目标)2319进行的命令的完成响应的发送等。
驱动器控制部2320进行驱动器218的管理,按照主机命令处理部2313和卸载命令处理部2318、驱动器双重写入部2322、双重化解除处理部2323的指示,对驱动器218进行读取写入处理。缓冲区控制部2315进行用于进行数据传输的暂时性存储器区域即缓冲区的确保和释放。
驱动器双重写入部2322进行将写入数据写入2个驱动器的处理。通过写入2个驱动器,防止驱动器故障导致的用户数据的丢失。双重化解除处理部2323进行从基于双重写入的数据保护向基于RAID的数据保护切换的处理。
(25)目标结构方式2、写入IO处理的协作方式1涉及的驱动器盒中的主机命令的处理次序
图25是表示目标结构方式2、写入IO处理的协作方式1涉及的驱动器盒中的主机命令的处理次序的流程图。另外,一部分的处理与图16的处理相同,因此对相同的处理的步骤记载了图16的步骤号码。
当驱动器盒200的目标驱动程序2312从主机110接收到命令时,主机命令处理部2313开始步骤2500以后的处理。
首先,主机命令处理部2313对接收到的NVMe命令进行分析(命令的格式参照主机命令的图9A的格式910),读入命令类别912、作为名字空间的识别符的NID(名字空间ID)913、起始地址914、数据传输长度915的字段(步骤2501)。
接着,以命令的类别将处理分支(步骤2502)。在命令类别为读取命令的情况下,进入步骤1603。在命令类别为写入命令的情况下,进入步骤2503。在命令类别为管理命令的情况下,进入步骤1617。以下,对步骤2502中命令类别为读取命令的情况下的流程进行说明。
当分支到步骤1603时,与图16中命令类别为读取命令且响应类别为卸载的情况下的处理相同。由于处理相同,所以省略以后的说明。
接着,返回流程图的步骤2502以后的说明,对命令类别为写入命令的情况下的处理的流程进行说明。当处理从步骤2502分支到步骤2503时,主机命令处理部2313使用缓冲区控制部2315确保用于存储写入数据的缓冲区域(步骤2503)。接着,主机命令处理部2313对存储控制器121通知接收到的写入命令,并且生成询问与由写入命令指定的地址范围对应的写入目的地地址的盒命令(步骤2504)。
接着,主机命令处理部2313经盒命令通信部(启动器)2314向存储控制器121发送盒命令(步骤2505)。
接着,主机命令处理部2313等待来自存储控制器121的写入目的地地址的响应(步骤2506)。在此,写入目的地地址是由存储控制器121参照地址变换表求得的地址。接着,主机命令处理部2313经盒命令通信部(启动器)2314从存储控制器121接收写入目的地地址的通知,对通知进行分析,获取写入目的地地址(步骤2607)。
接着,数据传输控制部(主机与驱动器盒之间)2316将由写入命令指定的主机110内的物理存储器区域503的数据传输至确保的缓冲区域(步骤2508)。
接着,驱动器双重写入部2322将缓冲区域的写入数据双重写入到步骤2607中接收到的写入目的地地址(步骤2509)。双重写入是写入2个驱动器的意思,详细用图28和图29进行说明。
接着,驱动器双重写入部2322等待双重写入的完成,即来自与双重写入目的地对应的驱动器的写入完成(步骤2510)。接着,驱动器双重写入部2322接收双重写入的完成响应(步骤2511)。
接着,主机命令处理部2313经盒命令通信部(启动器)2314向存储控制器121通知写入完成(步骤2512)。接着,主机命令处理部2313等待来自存储控制器121的控制器命令(与写入命令对应)的完成响应(步骤2513)。
接着,主机命令处理部2313经盒命令通信部(启动器)2314从存储控制器121接收写入命令的命令完成响应,对写入命令的命令完成响应进行分析(步骤2514)。
接着,生成与来自主机110的写入命令对应的命令的完成响应(步骤2515)。接着,使用目标驱动程序2312向主机110发送命令的完成响应(步骤2516)。接着,将确保的缓冲区域开放(步骤2517)。最后完成处理(步骤2518)。
接着,返回流程图的步骤2502以后的说明,对命令类别为管理命令的情况下的处理的流程进行说明。当处理从步骤2502分支到步骤1617时,与图16中命令类别为管理命令的情况相同。由于处理相同,所以省略以后的说明。
(27)目标结构方式2、写入IO处理的协作方式1涉及的存储控制器中的盒命令的处理次序
图27是表示目标结构方式2、写入IO处理的协作方式1涉及的存储控制器中的盒命令的处理次序的流程图。另外,一部分处理与图17的处理相同,因此对相同的处理的步骤记载了图17的步骤号码。
当存储控制器121的盒命令通信部(目标)2301从驱动器盒200接收到盒命令时,盒命令处理部2302开始步骤2700以后的处理。
首先,盒命令处理部2302对接收到的盒命令进行分析,读入命令类别、作为名字空间的识别符的NID(名字空间ID)、起始地址、数据传输长度的字段(步骤2701)。接着,以命令的处理将处理分支(步骤2702)。在命令类别为读取命令的情况下,进入步骤1709。在命令类别为写入命令的情况下,进入步骤2703。在命令类别为管理命令的情况下,进入步骤1714。
当分支到步骤1709时,与图17中卸载的情况下的处理相同。由于处理相同,所以省略以后的说明。
以下,对步骤2702中命令类别为写入命令的情况下的流程进行说明。当分支到步骤2703时,盒命令处理部2302基于从盒命令通信部(目标)2301得到的标识符403、步骤2301中得到的NID、起始地址和数据传输长度的信息,进行对逻辑卷的写入范围的访问排他(步骤2703)。进行访问排他的理由是,即使在接收到访问同一逻辑地址的多个写入命令的情况下,也保障数据的一致性。
接着,决定写入数据的写入目的地的地址、即双重写入目的地的驱动器和物理地址(步骤2704)。该处理流程中,不由存储控制器而由驱动器壳体决定写入数据的写入目的地,因此在写入后需要更新由存储控制器管理的地址变换表。
接着,经卸载命令通信部(启动器)2304向驱动器盒200发送写入目的地地址(步骤2705)。接着,等待来自驱动器盒200的写入完成(步骤2706)。
接着,经卸载命令通信部(启动器)2304接收来自驱动器盒200的写入完成(步骤2707)。接着,地址变换部2308对地址变换表的对应关系进行更新(步骤2708)。即,将双重写入目的地的驱动器的识别符和物理地址映射到写入命令指定的逻辑卷的写入范围的逻辑地址。
接着,写入目的地地址决定部2307对追加写入指针进行更新(步骤2709)。追加写入指针是表示追加写入处理进行到哪里的指针。指针例如是驱动器的物理地址、与驱动器的物理地址对应的索引。接着,生成盒命令的完成响应(步骤2710)。
接着,经盒命令通信部(目标)2301向驱动器盒200发送命令的完成响应(步骤2711)。由此,对驱动器壳体通知地址变换表的更新的完成。接着,解除访问排他(2712)。驱动器壳体中,对主机进行写入命令的完成通知,完成处理(步骤2713)。
接着,回到流程图的步骤2702以后的说明,对命令类别为管理命令的情况下的处理的流程进行说明。当处理从步骤2702分支到步骤1714时,与图17中命令类别为管理命令的情况相同。由于处理相同,所以省略以后的说明。
(26)目标结构方式2、写入IO处理的协作方式1涉及的驱动器盒中的控制器命令的处理次序
图26是表示目标结构方式2、写入IO处理的协作方式1涉及的驱动器盒中的控制器命令的处理次序的流程图。
当存储控制器121的双重化解除指示部2305判定为满足离台条件(例如,双重化区域的写入完成量为阈值以上等)时,双重化解除指示部2305开始步骤2600以后的处理。
首先,双重化解除指示部2305决定双重化解除对象(步骤2601)。作为双重化解除对象的决定方法,例如至双重化区域的写入完成量到阈值以下为止,优先从写入时刻早的数据开始选择双重化解除对象的RAID条带。接着,至将双重化解除对象全部解除为止,反复以后的处理(步骤2602)。
接着,双重化解除对象中选择1个初级区域2803的RAID条带(步骤2603)。接着,经控制器命令通信部(启动器)2306对驱动器盒200指示所选择的RAID条带的双重化解除,即奇偶校验生成和写入(2604)。
接着,等待来自驱动器盒200的响应(步骤2605)。接着,驱动器盒200的控制器命令处理部2321经控制器命令通信部(目标)2319接收来自存储控制器121的双重化解除指示,对指示进行分析(步骤2606)。接着,双重化解除处理部2323读入由双重化解除指示指定的RAID条带的数据(2607)。
接着,生成读入的数据的奇偶校验(步骤2608)。接着,写入生成的奇偶校验(步骤2609)。接着,控制器命令处理部2321生成双重化解除指示的完成响应,经控制器命令通信部(目标)2319向存储控制器121发送完成响应(步骤2610)。
接着,双重化解除指示部2305经控制器命令通信部(启动器)2306从驱动器盒200接收完成响应(步骤2611)。接着,双重化信息管理部2311进行选择的RAID条带的次级区域的释放和双重化信息的更新,逻辑物理地址管理部2309将对应的存储区域509的状态更新为双重写入解除状态(步骤2612)。接着,在步骤2602的重复继续的情况下,进入步骤2603。当步骤2602的重复结束时,最后结束处理(步骤2613)。
(28)驱动器盒中的双重化区域和奇偶校验已生成区域
图28是表示驱动器盒中的双重化区域和奇偶校验已生成区域的图。
驱动器2805是属于驱动器盒内的RAID组的驱动器218。图中,作为例子,示出由4台驱动器构成的、RAID级别为RAID5的RAID组。另外,驱动器数不限定于4台,RAID级别不限定于RAID5。例如,RAID组的驱动器能够是RAID5的N+1台(N台数据驱动器和1台奇偶校验驱动器)、RAID6的N+2台(N台数据驱动器和2台奇偶校验驱动器)等的结构。
奇偶校验已生成区域2801由奇偶校验已生成的奇偶校验周期构成。图中,条带2806的“m”、“n”、“o”、“P”为奇偶校验周期。条带2806为RAID条带。条带“P”是将条带“m”、“n”、“o”的数据冗余化而得到的奇偶校验。
双重化区域2802是写入数据的写入目的地,由初级区域2803和次级区域2804构成。
双重化区域内的初级区域2803包括存储有写入数据的条带2806(“a”~“f”)、未写入且没有存储写入数据的条带2806(无字符的记载)和奇偶校验未生成的条带2806(被画为灰色,并且无字符的记载)。
双重化区域内的次级区域2804是初级区域2803的拷贝,具有相同的结构。图中,条带2806(“a”~“f”)与条带2806(“a’”~“f’”)对应于拷贝的关系。对应于拷贝的关系的各条带,作为应对驱动器故障导致的用户数据消失的对策,以成为各自不同的驱动器的区域的方式配置。例如,条带2806的“a”配置于驱动器0,条带2806的“a’”配置于驱动器1这样,配置于错开1个的驱动器。由此,即使1台驱动器发生故障,至少双重化的某一者的用户数据也会留存,因此能够防止用户数据消失。
作为初级区域2803与次级区域2804的不同,两者在以下方面不同,即,初级区域2803的奇偶校验周期在奇偶校验生成后成为奇偶校验已生成区域2801,次级区域2904的奇偶校验周期在奇偶校验生成后作为写入数据的存储目的地,被作为双重化区域2802再利用。
奇偶校验已生成区域2801、双重化区域2802是逻辑性管理区域。因此,即使条带2806所属的区域变更,也仅是条带2806的管理信息(元数据)变更,不进行向驱动器进行的施加IO负荷的数据移动。
此外,属于RAID组的驱动器的存储区域中存在空白区域,省略图示。
(29)驱动器盒中的双重化区域的对应关系。
图29是表示驱动器盒中的双重化区域的对应关系的图。
写入数据向双重化区域的写入以追加记录型的写入(也被称为日志结构化写入)进行。追加记录型的写入是将接收到的用户数据按顺序写入的方式,写入性能优异。写入目的地是未写入且没有存储写入数据的初级区域2803和次级区域2804的条带2806。图中,将初级区域2803的条带用条带2806“g”表示,将次级区域的条带用条带2806“g’”表示。图中,条带2806“g”和条带2806“g’”以外的记载已省略。条带2806“g”和条带2806“g’”如前所述,为拷贝的关系,配置在不同的驱动器。驱动器双重写入部2322按照主机的写入要求将用户数据2901按顺序写入(图中,“g1”、“g2”、“g3”)。条带2806“g”和“g’”存满用户数据,不能再写入用户数据的情况下,移至下一条带2806继续写入。
根据实施例5,能够在维持存储控制器的数据保护技术的同时,通过驱动器盒的卸载功能减轻存储控制器的处理负荷,并且对于写入命令,在驱动器壳体中进行双重写入处理,由此减轻存储控制器的处理负荷。
【实施例6】
实施例6是实施例5中的存储控制器在另一网络与主机连接的方式(连接方式2)的实施例。连接方式2如实施例4中所说明。
实施例6中的存储装置120和驱动器壳体140的控制方法与实施例5相同,因此省略说明。
【实施例7】
实施例7和实施例5,在代替存储控制器由驱动器壳体相对于主机作为NVMe overFabrics的目标进行工作,写入数据从主机直接被数据传输至驱动器控制器这一点相同。另一方面,实施例7和实施例5不同的是,在哪里决定写入数据的写入目的地。具体而言,实施例5中,由存储控制器121决定写入数据的写入目的地,更新逻辑物理地址的映射,而在实施例7中,由驱动器盒200决定写入数据的写入目的地,存储控制器121基于驱动器盒200通知的逻辑物理地址的映射,更新逻辑物理地址的映射,这一点两者不同。实施例7与实施例5相比,不需要向存储控制器121询问写入数据的写入目的地,有能够缩短写入命令处理的响应时间的优点。另一方面,实施例7中,为了用控制信息会因停电等的故障而丢失的可靠性低的驱动器盒200来实现高可靠性的存储处理,需要向存储控制器通知追加写入指针的机制。NVMe over Fabrics中的主机和NVM子系统的标识符如图15所示,由于与实施例5相同,所以省略说明。
(30)代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式(与目标结构方式2:实施例3相同)中,写入IO的高速化下由驱动器盒决定写入数据的写入目的地的方式(写入IO处理的协作方式2)中的主机、存储控制器、驱动器盒的程序结构。
图30是表示代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式中,写入IO的高速化下由驱动器盒决定写入数据写入目的地的方式(写入IO处理的协作方式2)中的主机、存储控制器、驱动器盒的程序结构的图。
存储控制器121的程序有与图24的结构要素相同的部分,因此主要对差异进行说明。3001~3006和2301~2306、3008~3011和2308~2311是分别相同的结构要素。存储控制器121的程序中,图30与图24的不同在于,取消图24的写入目的地地址决定部,并增加追加写入指针管理部3007。追加写入指针是表示追加写入处理进行到哪里的指针,是在驱动器盒中发生故障时,用户数据的完整性保障、数据的恢复、存储处理的再开始所需要的控制信息。追加写入指针管理部3007具有代替可靠性低的驱动器盒200在高可靠性的存储控制器中保存追加写入指针的拷贝的作用。
驱动器盒200的程序有与图24的结构要素相同的部分,因此主要对差异进行说明。3012~3023和2312~2323是分别相同的结构要素。驱动器盒200的程序中,图30和图24的不同在于,增加追加写入指针更新部3024、逻辑物理对应参数生成部3025、双重化信息的拷贝3026。追加写入指针更新部3024具有将追加写入指针更新的作用。逻辑物理对应参数生成部具有生成逻辑物理对应参数(相当于地址变换表的信息)的作用,该逻辑物理对应参数是用于将写入命令指定的逻辑卷的写入范围的逻辑地址与双重写入目的地的驱动器的识别符和物理地址的对应关系通知给存储控制器121的参数。双重化信息的拷贝3026是存储控制器3011的双重化信息管理部3011管理的双重化信息的拷贝。通过在驱动器盒200内具有双重化信息的拷贝,有减少在写入命令处理中向存储控制器121询问双重化信息的频率,提高处理效率的意义。
(31)目标结构方式2、写入IO处理的协作方式2涉及的驱动器盒中的主机命令的处理次序
图31是表示目标结构方式2、写入IO处理的协作方式2涉及的驱动器盒中的主机命令的处理次序的流程图。另外,一部分处理与图16的处理相同,因此对相同的处理的步骤记载图16的步骤号码。
当驱动器盒200的目标驱动程序3012从主机110接收到命令时,主机命令处理部3013开始步骤3100以后的处理。
首先,主机命令处理部3013对接收到的NVMe命令进行分析(命令的格式参照主机命令的图9A的格式910),读入命令类别912、作为名字空间的识别符的NID(名字空间ID)913、起始地址914、数据传输长度915的字段(步骤3101)。
接着,以命令的类别将处理分支(步骤3102)。在命令类别为读取命令的情况下,进入步骤1603。在命令类别为写入命令的情况下,进入步骤3103。在命令类别为管理命令的情况下,进入步骤1617。以下,对步骤3102中命令类别为读取命令的情况下的流程进行说明。
当分支到步骤1603时,与图16中命令类别为读取命令且响应类别为卸载的情况下的处理相同。由于处理相同,所以省略以后的说明。
接着,返回流程图的步骤3102以后的说明,对命令类别为写入命令的情况下的处理的流程进行说明。当处理从步骤3102分支到步骤3103时,主机命令处理部2313使用缓冲区控制部3015确保用于存储写入数据的缓冲区域(步骤3103)。
接着,数据传输控制部(主机与驱动器盒之间)3016将由写入命令指定的主机110内的物理存储器区域503的数据传输至确保的缓冲区域(步骤3104)。
接着,主机命令处理部3013获取追加记录目的地地址(步骤3105)。追加记录目的地地址是追加写入指针示出的地址。接着,驱动器双重写入部3022将缓冲区域的写入数据双重写入步骤3105中决定的写入目的地地址(步骤3106)。
接着,驱动器双重写入部3022等待双重写入的完成,即来自与双重写入目的地对应的驱动器的写入完成(步骤3107)。接着,驱动器双重写入部2322接收双重写入的完成响应(步骤3108)。
接着,追加写入指针更新部3024将追加写入指针更新为下一个写入目的地的起始地址(步骤3109)。追加写入指针按照图28和图29的双重写入方法决定。接着,逻辑物理对应参数生成部3025生成逻辑物理对应参数,主机命令处理部3013生成包含接收到的写入命令的信息和逻辑物理对应参数的盒命令(步骤3110)。
接着,主机命令处理部3013经盒命令通信部(启动器)3014向存储控制器121发送盒命令(步骤3111)。接着,主机命令处理部3013等待来自存储控制器121的控制器命令(与写入命令对应)的完成响应(步骤3112)。接着,主机命令处理部3013经盒命令通信部(启动器)3014从存储控制器121接收完成响应,对完成响应进行分析(步骤3113)。
接着,生成与来自主机110的写入命令对应的命令的完成响应(步骤3114)。接着,使用目标驱动程序3012向主机110发送命令的完成响应(步骤3115)。接着,将确保的缓冲区域开放(步骤3116)。最后完成处理(步骤3117)。
接着,返回流程图的步骤2502以后的说明,对命令类别为管理命令的情况下的处理的流程进行说明。当处理从步骤3102分支到步骤1617时,与图16中命令类别为管理命令的情况相同。由于处理相同,所以省略以后的说明。
(32)目标结构方式2、写入IO处理的协作方式2涉及的存储控制器中的盒命令的处理次序
图32是表示目标结构方式2、写入IO处理的协作方式2涉及的存储控制器中的盒命令的处理次序的流程图。另外,一部分处理与图17的处理相同,因此对相同的处理的步骤记载图17的步骤号码。
当存储控制器121的盒命令通信部(目标)3001从驱动器盒200接收到盒命令时,盒命令处理部3002开始步骤3200以后的处理。
首先,盒命令处理部3002对接收到的盒命令进行分析,读入命令类别、作为名字空间的识别符的NID(名字空间ID)、起始地址、数据传输长度的字段(步骤3201)。
接着,以命令的处理将处理分支(步骤3202)。在命令类别为读取命令的情况下,进入步骤1709。在命令类别为写入命令的情况下,进入步骤3203。在命令类别为管理命令的情况下,进入步骤1714。
当分支到步骤1709时,与图17中卸载的情况下的处理相同。由于处理相同,所以省略以后的说明。
以下,对步骤3202中命令类别为写入命令的情况下的流程进行说明。当分支到步骤3203时,盒命令处理部3002基于从盒命令通信部(目标)3001得到的标识符403、步骤2301中得到的NID、起始地址和数据传输长度的信息,进行对逻辑卷的写入范围的访问排他(步骤3203)。进行访问排他的理由是,即使在接收到访问同一逻辑地址的多个读取和写入命令的情况下,也保障数据的一致性。
接着,对由命令指定的逻辑物理对应参数、即双重写入目的地的驱动器和物理地址的参数进行分析(步骤3204)。接着,按照分析得到的参数的结果,地址变换部3008更新地址变换表的对应关系(逻辑物理地址的映射)(步骤3205)。接着,按照由命令指定的追加写入指针的内容,追加写入指针管理部3007更新与命令发送源的驱动器盒对应的追加写入指针(步骤3206)。接着,盒命令处理部300生成盒命令的完成响应(步骤3207)。
接着,盒命令处理部300经盒命令通信部(目标)3001向驱动器盒200发送完成响应(步骤3208)。接着,盒命令处理部300解除访问排他(步骤3209)。最后完成处理(步骤3210)。
接着,返回流程图的步骤3202以后的说明,对命令类别为管理命令的情况下的处理的流程进行说明。当处理从步骤3202分支到步骤1714时,与图17中命令类别为管理命令的情况相同。由于处理相同,所以省略以后的说明。
【实施例8】
实施例8是实施例7中的存储控制器在另一网络与主机连接的方式(连接方式2)的实施例。连接方式2如实施例4中所说明。
实施例8中的存储装置120和驱动器壳体140的控制方法与实施例7相同,因此省略说明。
【实施例9】
实施例9和实施例5在存储控制器决定写入数据的写入目的地这一点相同。另一方面,在实施例9中,存储控制器相对于主机作为NVMe over Fabrics的目标进行工作这一点,与实施例5不同。NVMe over Fabrics中的主机和NVM子系统的标识符如图4所示,与实施例1、2相同,因此省略说明。
(33)存储控制器相对于主机作为NVMe over Fabrics的目标进行工作的方式(与目标结构方式1:实施例1、2相同)中,写入IO的高速化下由存储控制器决定写入数据的写入目的地,向存储控制器询问写入数据的写入目的地的方式(写入IO处理的协作方式1)中的主机、存储控制器、驱动器盒的程序结构。
图33是表示代替存储控制器由驱动器壳体相对于主机作为NVMe over Fabrics的目标进行工作的方式中,写入IO的高速化下由存储控制器决定写入数据的写入目的地,向存储控制器询问写入数据的写入目的地的方式(写入IO处理的协作方式1)中的主机、存储控制器、驱动器盒的程序结构的图。
存储控制器121的程序有与图24的结构要素相同的部分,因此主要对差异进行说明。3303~3011和2303~2311是分别相同的结构要素。存储控制器121的程序中,图33与图24的不同在于,取消图24的盒命令通信部(目标)2301和盒命令处理部2302,增加目标驱动程序3301和主机命令处理部3302。
驱动器盒200的程序有与图24的结构要素相同的部分,因此主要对差异进行说明。3312~3323和2312~2323是分别相同的结构要素。驱动器盒200的程序中,图33与图24的不同在于,取消盒命令通信部(启动器)2314。
(34)目标结构方式1、写入IO处理的协作方式1涉及的存储控制器中的主机命令的处理次序
图34是表示目标结构方式1、写入IO处理的协作方式1涉及的存储控制器中的主机命令的处理次序的流程图。是表示实施例1的存储控制器中的主机命令的处理次序的流程图。另外,一部分处理与图6的处理相同,因此对相同的处理的步骤记载图6的步骤号码。
当存储控制器121的目标驱动程序3301从主机110接收到命令时,主机命令处理部3302开始步骤3400以后的处理。
首先,主机命令处理部3302使用存储控制器的主机信息表920的信息,获得作为NVM子系统NQN的标识符923(图4的403)(参照图9B),并且对接收到的NVMe命令进行分析(接收到的NVMe命令参照图9A),读入命令类别912、作为名字空间的识别符的NID(名字空间ID)913、起始地址914、数据传输长度的字段915(步骤3401)。
接着,以命令的类别将处理分支(步骤3402)。在命令类别912为读取命令的情况下,进入步骤606。在命令类别为管理命令的情况下,进入步骤614。在命令类别为写入命令的情况下,进入步骤3403。
当分支到步骤606时,与图6中命令类别为IO命令且数据传输方法为卸载的情况下的处理相同。由于处理相同,所以省略以后的说明。
接着,回到流程图的步骤3402以后的说明,对命令类别为管理命令的情况下的处理的流程进行说明。当处理从步骤3402分支到步骤614时,与图6中命令类别为管理命令的情况相同。由于处理相同,所以省略以后的说明。
接着,返回流程图的步骤3402以后的说明,对命令类别为写入命令的情况下的处理的流程进行说明。当处理从步骤3402分支到步骤3403时,主机命令处理部3302基于从目标驱动程序3301得到的标识符403、步骤2301中得到的NID、起始地址和数据传输长度的信息,进行对逻辑卷的写入范围的访问排他(步骤3403)。
接着,写入目的地地址决定部3307参照地址变换表决定写入数据的写入目的地地址(步骤3404)。接着,主机命令处理部3302为了使驱动器盒进行写入命令处理,生成包含决定的写入目的地地址在内的卸载命令(3405)。
接着,主机命令处理部3302经卸载命令通信部(启动器)3306向驱动器盒200发送卸载命令(3406)。接着,等待卸载命令的完成(步骤3407)。接着,主机命令处理部3302经卸载命令通信部(启动器)3306从驱动器盒200接收卸载命令的完成响应,并对其进行分析(3408)。
接着,地址变换部3308对逻辑物理地址的映射进行更新(地址变换表的对应关系的更新)(步骤3409)。即,将双重写入目的地的驱动器的识别符和物理地址映射到写入命令指定的逻辑卷的写入范围的逻辑地址。接着,写入目的地地址决定部3307对追加写入指针进行更新(步骤3410)。接着,主机命令处理部3302解除访问排他(步骤3411)。
接着,生成与来自主机110的写入命令对应的命令的完成响应(步骤3412)。接着,使用目标驱动程序3301向主机110发送命令的完成响应(步骤3413)。最后完成处理(步骤3414)。
(35)目标结构方式1、写入IO处理的协作方式1涉及的驱动器盒中的数据传输的卸载命令的处理次序
图35是表示目标结构方式1、写入IO处理的协作方式1涉及的驱动器盒中的数据传输的卸载命令的处理次序的流程图。另外,一部分处理与图7的处理相同,因此对相同的处理的步骤记载图7的步骤号码。
驱动器盒200的卸载命令处理部3318当经卸载命令通信部(目标)313从存储控制器121接收到卸载命令时,开始步骤3500以后的处理。
首先,卸载命令处理部3318读入卸载命令的各字段(步骤3501)。各字段用图9D进行说明。
接着,以命令的类别将处理进行分支(步骤3502)。在数据传输方向909为从存储系统向主机的情况下,将命令类别判定为读取命令的卸载,在数据传输方向909为从主机向存储系统的情况下,将命令类别判定为写入命令的卸载。在命令类别为读取命令的卸载的情况下,进入步骤708。在命令类别为写入命令的卸载的情况下,进入步骤3503。
当分支到步骤708时,与图7的步骤8以后的处理相同。由于处理相同,所以省略以后的说明。
接着,回到流程图的步骤3502以后的说明,对命令类别为写入命令的卸载的情况下的处理的流程进行说明。当处理从步骤3502分支到步骤3503时,卸载命令处理部3318使用缓冲区控制部3315确保缓冲区(步骤3504)。接着,数据传输控制部(主机与驱动器盒之间)3316将由写入命令指定的主机110内的物理存储器区域503的数据传输到确保的缓冲区域(步骤3505)。接着,驱动器双重写入部3322将缓冲区域的写入数据双重写入到由卸载命令指定的写入目的地地址(3506)。接着,驱动器双重写入部3322等待双重写入的完成响应,即来自与双重写入目的地对应的驱动器的写入完成(步骤3507)。接着,驱动器双重写入部2322接收双重写入的完成响应(步骤3508)。接着,卸载命令处理部3318将步骤3504中确保的缓冲区释放(步骤3509)。接着,卸载命令处理部3318生成卸载命令的完成响应,发送完成响应(3510)。最后完成处理(步骤3511)。
附图标记说明
110:主机、120:存储装置、121:存储控制器、140:驱动器壳体、150:网络、200:驱动器盒、218:驱动器。