一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

信息处理装置的制作方法

2023-04-04 22:58:19 来源:中国专利 TAG:

信息处理装置
1.本技术将日本专利申请2021-144701(申请日:2021年9月6日)作为基础申请,享受其优先权。本技术通过参考此基础申请包括基础申请的全部内容。
技术领域
2.本发明的实施方式涉及控制非易失性存储器的技术。


背景技术:

3.近年来,具备非易失性存储器的存储系统广泛普及。作为这样的存储系统之一,已知有具备nand型闪存的固态驱动器(ssd)。ssd被用作各种计算设备的主存储器。
4.存储系统例如在从主机受理了1个写入请求的情况下,将伴随着该写入请求而从主机接收到的用户数据写入到非易失性存储器,并向主机返回响应。
5.或者,存储系统有时在通过从主机受理到的多个写入请求而请求写入的用户数据的总量达到了特定的数据单位之后,将该特定的数据单位的用户数据写入到非易失性存储器,并将与多个写入请求分别对应的响应返回给主机。特定的数据单位例如是能够通过1次数据写入动作写入到非易失性存储器的数据量。即,存储系统能够使用如下机制:不立即执行与所受理的1个写入请求对应的写入,而在通过多个写入请求而请求写入的用户数据的总量达到了特定的数据单位之后,执行与这多个写入请求相应的写入。以下,该机制也被称为延迟写完成(delayedwrite completion)。
6.在延迟写完成中,例如,将包括与多个写入请求分别对应的多个用户数据在内的特定的数据单位(例如,写入单位)的用户数据写入到非易失性存储器,因此能够高效地利用非易失性存储器的存储区域。但是,在延迟写完成中,能够在受理与写入单位的用户数据对应的多个写入请求之前,延迟与各个写入请求对应的写入及响应。
7.然而,在存储系统中,有时设置有暂时存储从主机请求写入的用户数据的存储区域(即,缓冲器)。在这种情况下,用户数据从缓冲器被传送到非易失性存储器,并被写入到非易失性存储器中。
8.另外,存储系统有时具有掉电保护(plp,power-loss protection)功能。plp功能是用于在从外部电源向存储系统供给的电力被切断的情况下,使用在存储系统内的蓄电装置中蓄积的电荷的能量,将存储在缓冲器中、且未被写入到非易失性存储器中的用户数据等写入到非易失性存储器的功能。通过plp功能,存储系统在发生了不正当电源断开等的情况下,也能够将从主机请求写入并被存储在缓冲器中的用户数据写入到非易失性存储器中。
9.另一方面,存储系统有时也不具有能够通过plp功能保护所存储的数据的缓冲器。在该情况下,存储系统如果在从主机受理写入请求起到将与该写入请求建立关联的用户数据写入到非易失性存储器为止的期间异常结束或者非意图的重启,则无法完成与受理到的写入请求对应的写入处理。进而,如果进行基于延迟写完成的写入,则存储系统有可能无法完成与所受理的多个写入请求对应的写入处理。


技术实现要素:

10.本发明的实施方式提供一种信息处理装置,能够恢复针对异常结束或非意图地重启的存储系统的未完成的写入。
11.根据实施方式,信息处理装置能够与存储系统连接。信息处理装置具备非易失性存储器和处理器。处理器在非易失性存储器中保存第一数据。处理器进行与第一数据建立关联的第一写入请求的向存储系统的第一次的发送。处理器将包括与第一写入请求相当的信息在内的第一管理数据存储于非易失性存储器。处理器根据从存储系统接收到针对第一次被发送的第一写入请求的第一响应这一情况,将对已接收到针对第一次被发送的第一写入请求的第一响应这一情况进行表示的信息追加到第一管理数据。处理器在接收到第一响应之后,根据从存储系统接收到针对第一次被发送的第一写入请求的第二响应这一情况,从非易失性存储器中删除第一数据和第一管理数据。
附图说明
12.图1是表示包括实施方式的信息处理装置(主机)和存储系统在内的信息处理系统的结构例的框图。
13.图2是表示在该实施方式的信息处理装置中使用的锁定数据列表的结构例的图。
14.图3是表示在图1的存储系统中使用的逻辑物理地址转换表的结构例的图。
15.图4是表示在图1的存储系统中使用的写管理表的结构例的图。
16.图5是表示图1的信息处理系统中的绑定(bind)动作的例子的框图。
17.图6是表示图1的信息处理系统中的写入动作的例子的框图。
18.图7是表示在图6的写入动作中更新后的锁定数据列表的第一例的图。
19.图8是表示在图6的写入动作中更新后的锁定数据列表的第二例的图。
20.图9是表示图6后续的写入动作的例子的框图。
21.图10是表示在图9的写入动作中更新后的锁定数据列表的例子的图。
22.图11是表示图1的信息处理系统中的关闭(shut down)动作的例子的框图。
23.图12是表示图11后续的关闭动作的例子的框图。
24.图13是表示图1的信息处理系统中的解绑动作的例子的框图。
25.图14是表示图1的信息处理系统中的恢复动作的例子的框图。
26.图15是表示图14后续的恢复动作的例子的框图。
27.图16是表示图15后续的恢复动作的例子的框图。
28.图17是表示在该实施方式的信息处理装置中执行的绑定处理的步骤的例子的流程图。
29.图18是表示在图1的存储系统中执行的绑定处理的步骤的例子的流程图。
30.图19是表示在该实施方式的信息处理装置中执行的写入请求处理的步骤的例子的流程图。
31.图20是表示在图1的存储系统中执行的写入控制处理的步骤的例子的流程图。
32.图21是表示在该实施方式的信息处理装置中执行的响应接收处理的步骤的例子的流程图。
33.图22是表示在该实施方式的信息处理装置中执行的解绑处理的步骤的例子的流
程图。
34.图23是表示在图1的存储系统中执行的解绑处理的步骤的例子的流程图。
35.图24是表示在该实施方式的信息处理装置中执行的关闭处理的步骤的例子的流程图。
36.图25是表示在图1的存储系统中执行的关闭处理的步骤的例子的流程图。
37.图26是表示在该实施方式的信息处理装置中执行的启动处理的步骤的例子的流程图。
38.图27是表示在该实施方式的信息处理装置中执行的恢复写入请求处理的步骤的例子的流程图。
39.图28是表示在图1的存储系统中执行的启动处理的步骤的例子的流程图。
40.图29是表示在该实施方式的信息处理装置中执行的、使用了闪存指令(flash command)的情况下的恢复写入请求处理的步骤的例子的流程图。
41.图30是表示在图1的存储系统中执行的、使用了闪存指令的情况下的写入控制处理的步骤的例子的流程图。
具体实施方式
42.以下,参照附图对实施方式进行说明。
43.首先,参照图1对包括实施方式的信息处理装置的信息处理系统1的结构进行说明。信息处理系统1包括信息处理装置2和存储系统3。
44.信息处理装置2既可以是将大量且多样的数据保存在存储系统3中的存储服务器,也可以是个人计算机。以下,也将信息处理装置2称为主机2。
45.存储系统3是构成为向nand型闪存这样的非易失性存储器写入数据,并从非易失性存储器读出数据的半导体存储器件。存储系统也被称为存储器件。存储系统例如作为固态驱动器(ssd)来实现。
46.存储系统3可以用作主机2的存储器。存储系统3可以内置于主机2,也可以经由电缆或网络与主机2连接。
47.用于将主机2与存储系统3连接的接口依据pci express(pcie)(注册商标)、ethernet(注册商标)、fibre channel、nvm express(nvme)(注册商标)等标准。
48.以下对主机2和存储系统3各自的结构例进行说明。
49.(主机2的结构例)
50.主机2例如具备cpu21、随机存取存储器(ram)22、存储器接口(存储器i/f)23、以及非易失性随机存取存储器(nvram)24。这些cpu21、ram22、存储i/f23以及nvram24也可以经由总线20连接。
51.cpu21例如是至少1个处理器。cpu21控制主机2内的各种组件的动作。
52.ram22是易失性存储器。ram22例如作为动态随机存取存储器(dram)、静态随机存取存储器(sram)来实现。ram22的存储区域例如被分配为操作系统(os)221、驱动器222、各种应用程序的保存区域。以下,也将应用程序简称为应用。
53.存储器i/f23作为控制主机2与存储系统3之间的通信的控制电路而发挥功能。存储器i/f23向主机2发送各种指令,例如输入输出(i/o)指令、各种控制指令。i/o指令包括例
如写指令和读指令。控制指令包括例如闪存(flush)指令、虚拟plp驱动模式转移指令、虚拟plp驱动模式解除指令、恢复模式转移指令和恢复模式解除指令。虚拟plp驱动模式转移指令也被称为第一模式转移指令。虚拟plp驱动模式解除指令也被称为第一模式解除指令。恢复模式转移指令也被称为第二模式转移指令。恢复模式解除指令也被称为第二模式解除指令。
54.闪存指令是用于将未被写入存储系统3的nand型闪存5中的用户数据从主机2或存储系统3内的存储区域写入到存储系统3的nand型闪存5中的指令。
55.第一模式转移指令是用于使存储系统3从通常驱动模式转移为虚拟掉电保护驱动模式(虚拟plp驱动模式)的指令。第一模式转移指令例如包括发出了该第一模式转移指令的主机2的识别信息(主机id)。主机id是存储系统3能够唯一地确定1个主机的信息。作为主机id,例如使用由nvme标准规定的主机标识符(host identifier)。
56.在存储系统3中,通常驱动模式和虚拟plp驱动模式中的某一方被设置为第一动作模式。主机2向使转移为虚拟plp驱动模式的存储系统3(即,第一动作模式为虚拟plp驱动模式的存储系统3)提供虚拟的掉电保护功能(虚拟plp功能)。虚拟plp功能是使用nvram24中保存的数据来使由主机2的异常结束、存储系统3的不正常断电等引起的异常结束、或者存储系统3的非意图的重新启动而无法完成的向存储系统3(更详细而言是nand型闪存5)的用户数据的写入恢复的功能。
57.以下,也将主机2通过第一模式转移指令而使转移为虚拟plp驱动模式的存储系统3称为相对于主机2而在虚拟plp驱动模式下进行动作的存储系统3。此外,主机2对于未使转移为虚拟plp驱动模式的存储系统3(即,第一动作模式为通常驱动模式的存储系统3)不提供虚拟plp功能。
58.第一模式解除指令是用于使存储系统3从虚拟plp驱动模式转移为通常驱动模式的指令。
59.第二模式转移指令是用于使存储系统3从通常写入模式转移为恢复写入模式的指令。在存储系统3中,通常写入模式和恢复写入模式中的某一方被设定为第二动作模式。在转移为恢复写入模式的存储系统3(即,第二动作模式为恢复写入模式的存储系统3)中,保证了与从主机2受理的写指令对应的写入处理按照写指令的受理顺序被执行。此外,在未转移为恢复写入模式的存储系统3(即,第二动作模式为通常写入模式的存储系统3)中,有可能无法保证与从主机2受理的写指令对应的写入处理按照写指令的受理顺序被执行。
60.第二模式解除指令是用于使存储系统3从恢复写入模式转移为通常写入模式的指令。
61.nvram24是非易失性存储器。作为nvram24,例如使用mram(magnetoresistive randomaccess memory,磁阻随机存取存储器)、pram(phase change randomaccess memory,相变随机存取存储器)、reram(resistive randomaccess memory,电阻随机存取存储器)、或者feram(ferroelectric randomaccess memory,铁电随机存取存储器)。nvram24的存储区域被分配为用于主机2的处理的各种数据的保存区域、用作数据缓冲器242的缓冲器区域、提交队列(sq)243的区域、完成队列(cq)244的区域、指针列表246的保存区域。
62.数据缓冲器242是暂时存储应向存储系统3的nand型闪存5写入的用户数据的存储区域。
63.提交队列243是为了从主机2向存储系统3发送指令而保存指令的队列。
64.完成队列244是为了从存储系统3向主机2返回响应(完成)而保存响应的队列。存储系统3能够针对1个写指令而响应多个完成。
65.此外,主机2也可以针对1个存储系统3,按照指令的每个种类、例如管理指令用、读指令、写指令那样的输入输出指令用,而安装其他的提交队列243、完成队列244。另外,主机2也可以对1个存储系统3安装多个输入输出指令用的提交队列243/完成队列244。在本实施方式中,提交队列243/完成队列244设置于nvram24,但写指令以外的提交队列243/完成队列244也可以设置于ram22。
66.指针列表246是表示与写指令或读指令建立关联的用户数据在数据缓冲器242上的位置的指针的列表。在本实施方式中,设为指针列表246保存在nvram24中,但指针列表246也可以存储在ram22中。
67.主机2的处理中使用的各种数据例如有虚拟plp驱动器id241、锁定数据列表(locked data list)245。
68.虚拟plp驱动器id241表示主机2使转移为虚拟plp驱动模式的存储系统3的识别信息(驱动器id)。驱动器id是主机2能够唯一地确定1个存储系统3的信息。另外,在主机2使多个存储系统3分别转移为虚拟plp驱动模式的情况下,在nvram24中保存与多个存储系统3分别对应的多个虚拟plp驱动器id241。
69.锁定数据列表245是用于对从主机2对存储系统3发出的写指令的处理状况进行管理的数据。1个锁定数据列表245例如对应于1个存储系统3。更详细而言,1个锁定数据列表245例如与对应的1个存储系统3的虚拟plp驱动器id241建立关联。
70.与多个存储系统3分别对应的多个锁定数据列表245也可以保存在nvram24中。在该情况下,多个锁定数据列表245分别与对应的1个存储系统3的虚拟plp驱动器id241建立关联。即,主机2能够使用存储系统3的虚拟plp驱动器id241,确定应该对该存储系统3使用的1个锁定数据列表245。
71.图2表示在主机2中被使用的锁定数据列表245的结构例。锁定数据列表245可包括与从主机2向存储系统3发送的1个以上的写指令分别对应的1个以上的条目。各条目例如包括sq条目信息字段、完成顺序字段、数据区域管理信息字段以及完成状态字段。
72.sq条目信息字段对表示对应的写指令的信息(sq条目信息)进行表示。sq条目信息包括指令的类别、内容、执行时所需的参数等信息。具体而言,sq条目信息字段例如表示指令操作码、数据指针、指令id、命名空间id、lba(逻辑块地址)以及数据长度。
73.指令操作码是表示对应的指令(在此为写指令)的种类的代码。作为指令操作码,例如使用由nvme标准决定的opcode。
74.数据指针是表示在主机2中存储有应根据对应的写指令而被写入的用户数据的场所的信息。作为数据指针,例如使用由nvme标准规定的物理区域页(prp:physical region page)条目或其列表、分散聚合表(sgl:scatter gather list)。在数据量多的情况下使用prp的情况下,prp的条目的列表的指针保存在sq条目信息字段中。在使用sgl的情况下,仅sgl的最初的段被保存在sq条目信息字段中。另外,prp条目的列表、sgl的第二个以后的段被保存在指针列表246中。
75.指令id是对应的写指令的识别信息。
76.命名空间id是应执行对应的写指令的命名空间的识别信息。为了访问存储系统3而由主机2所使用的逻辑地址空间(lba空间)可存在多个。各逻辑地址空间有时被称为命名空间。多个命名空间中的1个能够通过命名空间id来确定。
77.lba是由对应的写指令指定的lba。该lba表示根据写指令而应被写入用户数据的lba范围的开头的lba。
78.数据长度是由对应的写指令指定的数据长度。该数据长度表示根据写指令而应被写入的用户数据的长度。因此,通过用写指令指定lba和数据长度,能够确定根据该写指令应被写入用户数据的lba范围。
79.完成顺序字段表示接收到针对对应的写指令的第一次的完成的顺序。对由主机2接收的1个以上的完成分别按照被接收的顺序为分配序列编号。完成顺序字段表示对针对对应的写指令的第一次的完成所分配的序列编号。
80.数据区域管理信息字段表示能够确定保存了根据对应的写指令而应被写入的用户数据的nvram24内的存储区域(例如,页面)的信息。例如,该信息可以用于使用os221的功能来锁定或解锁所确定的nvram24中的存储区域。
81.完成状态字段表示是否接收到针对对应的写指令的第一次的完成。另外,也可以省略完成状态字段,以在完成顺序字段中保存有序列编号的情况,表示接收到针对对应的写指令的第一次的完成。
82.在以下的与锁定数据列表245有关的说明中,将sq条目信息字段中所示的值也简称为sq条目信息。关于锁定数据列表245的其他各字段所示的值、以及其他表的各字段所示的值也是同样的。
83.返回图1。在此,对cpu21执行的程序进行说明。
84.cpu21执行例如从nvram24加载到ram22的各种程序。由cpu21执行的程序包括os221、驱动器222以及各种应用。
85.os221是用于控制主机2内的各种组件的基本动作的程序。执行os221的cpu21例如控制输入输出、文件管理、存储器管理、通信。
86.驱动器222是用于控制与主机2连接的设备的程序。例如,执行驱动器222的cpu21经由存储器i/f23将指令或数据发送至存储系统3。执行驱动器222的cpu21经由存储器i/f23从存储系统3接收针对指令的响应或数据。
87.cpu21通过执行驱动器222,例如作为指令发出部211、写管理部212以及恢复控制部213而发挥功能。参考图5至图16对指令发出部211、写管理部212和恢复控制部213的具体动作。指令发出部211、写管理部212和恢复控制部213可以通过主机2中的专用硬件来实现。
88.(存储系统3的结构例)
89.存储系统3例如具备控制器4、nand型闪存5及dram6。控制器4可以通过片上系统(soc:system-on-a-chip)那样的电路来实现。控制器4也可以内置sram。另外,dram6也可以内置于控制器4。
90.dram6是易失性存储器。在dram6等ram中,例如设置固件(fw)61的保存区域、逻辑物理地址转换表62的高速缓存区域、写管理表63的保存区域。
91.fw61是用于对控制器4的动作进行控制的程序。fw61例如从nand型闪存5被加载到dram6中。
92.逻辑物理地址转换表62对各个逻辑地址与nand型闪存5的各个物理地址之间的映射进行管理。
93.写管理表63管理与接收到的写指令有关的信息。
94.nand型闪存5包括多个块。每个块包括多个页面。块用作数据擦除操作的最小单元。块有时也被称为“擦除块”或“物理块”。每个页面包括与单个字线连接的多个存储单元。页面作为数据写入动作及数据读出动作的单位而发挥功能。另外,字线也可以作为数据写入动作及数据读出动作的单位而发挥功能。
95.对各块的编程/擦除循环数(p/e循环数)有上限,被称为最大p/e循环数。某个块的1次p/e周期包括用于使该块内的全部存储单元成为擦除状态的擦除动作、和对该块的各个页写入数据的写入动作(编程动作)。
96.nand型闪存5例如可被写入用户数据和管理数据。用户数据是与从主机2受理的写指令建立关联的应写入到nand型闪存5的数据。管理数据是用于管理存储系统3的动作的数据。管理数据例如包括虚拟plp主机id51、第一模式信息52、指令日志53。
97.虚拟plp主机id51表示使存储系统3转移为虚拟plp驱动模式的主机2的主机id。虚拟plp主机id51在存储系统3以虚拟plp驱动模式进行动作的期间,被保存在nand型闪存5中。
98.第一模式信息52表示存储系统3的第一动作模式是通常驱动模式和虚拟plp驱动模式中的哪一个。当存储系统3从通常驱动模式转移为虚拟plp驱动模式的情况下,第一模式信息52被更新为表示虚拟plp驱动模式。另外,在存储系统3从虚拟plp驱动模式转移为通常驱动模式的情况下,第一模式信息52被更新为表示通常驱动模式。
99.指令日志53表示对应的处理已完成的指令的指令id。指令日志53用于存储系统3的调试。控制器4将指令id保存在指令日志53中,以便能够管理与指令对应的处理完成的顺序。
100.控制器4作为构成为对nand型闪存5进行控制的存储器控制器而发挥功能。
101.控制器4也可以作为构成为执行nand型闪存5的数据管理及块管理的闪存转换层(ftl)而发挥功能。由该ftl执行的数据管理包括:(1)对各逻辑地址与nand型闪存5的各物理地址之间的对应关系进行表示的映射信息的管理、及(2)用于将页单位的读/写动作与块单位的擦除(erase)动作的差异隐藏的处理。在块管理中包括不良块的管理、损耗均衡(wear levelling)以及垃圾回收。
102.逻辑地址是为了指定存储系统3的地址而由主机2使用的。逻辑地址例如是逻辑块地址(lba)。以下,主要例示使用lba作为逻辑地址的情况。
103.各lba与各物理地址之间的映射的管理使用逻辑物理地址转换表62来执行。控制器4使用逻辑物理地址转换表62,以特定的管理尺寸单位来管理各lba与各物理地址之间的映射。与某lba对应的物理地址表示写入有该lba的数据的nand型闪存5内的物理存储位置。控制器4使用逻辑物理地址转换表62,对将nand型闪存5的存储区域逻辑地分割而成的多个存储区域进行管理。这多个存储区域分别与多个lba对应。即,这多个存储区域分别由1个lba确定。逻辑物理地址转换表62也可以在存储系统3的电源接通时从nand型闪存5加载到dram6。
104.向1个页的数据写入能够在每1次的p/e循环中仅进行1次。因此,控制器4b不是将
与某lba对应的更新数据写入到与该lba对应的以前的数据的物理存储位置,而是写入其他的物理存储位置。然后,控制器4通过以将该lba与该其他物理存储位置建立关联的方式更新逻辑物理地址转换表62,从而使以前的数据无效化。从逻辑物理地址转换表62参照的数据(即与lba建立关联的数据)被称为有效数据。另外,与哪个lba均未建立关联的数据被称为无效数据。有效数据是在后面有可能从主机2读取的数据。无效数据是没有从主机2读取的可能性的数据。
105.控制器4也可以包括主机接口(主机i/f)11、cpu12、nand接口(nand i/f)13、dram接口(dram i/f)14以及定时器15。这些主机i/f11、cpu12、nand i/f13、dram i/f14以及定时器15也可以经由总线10连接。
106.主机i/f11作为从主机2接收各种指令、例如i/o指令、各种控制指令的电路而发挥功能。另外,主机i/f11作为向主机2发送针对指令的响应或数据的电路而发挥功能。
107.nand i/f13将控制器4与nand型闪存5电连接。nand i/f13与toggle ddr、open nand flash interface(onfi)等接口标准相对应。
108.nand i/f13作为构成为控制nand型闪存5的nand控制电路而发挥功能。nand i/f13也可以经由多个通道(ch)分别与nand型闪存5内的多个存储器芯片连接。通过并行地驱动多个存储器芯片,能够使对nand型闪存5整体的访问宽带化。
109.dram i/f14作为构成为控制对dram6的访问的dram控制电路而发挥功能。
110.计时器15测量时间。计时器15能够将测量出的时间提供给控制器4内的各部。
111.cpu12是构成为对主机i/f11、nand i/f13、dram i/f14以及定时器15进行控制的处理器。cpu12通过执行从nand型闪存5加载到dram6的fw61,进行各种处理。fw61是包括用于使cpu12执行各种处理的命令组的控制程序。cpu12能够执行用于处理来自主机2的各种指令的指令处理等。cpu12的动作通过由cpu12执行的fw61来控制。
112.控制器4内的各部的功能可以通过控制器4内的专用硬件来实现,也可以通过cpu12执行fw61来实现。
113.cpu12例如作为指令受理部121、模式控制部122以及写控制部123而发挥功能。cpu12例如通过执行fw61来作为这些各部而发挥功能。关于指令受理部121、模式控制部122以及写控制部123的具体的动作,参照图5至图16在后面叙述。
114.接着,参照图3以及图4,对在存储系统3中使用的2个表进行说明。
115.图3表示逻辑物理地址转换表62的结构例。逻辑物理地址转换表62对各lba与nand型闪存5的各物理地址之间的映射进行管理。控制器4能够使用逻辑物理地址转换表62将lba转换为物理地址。另外,控制器4能够使用逻辑物理地址转换表62将物理地址转换为lba。
116.在图3所示的例子中,物理地址“x”被映射到lba“0”,物理地址“y”被映射到lba“1”,物理地址“z”被映射到lba“2”。
117.图4表示写管理表63的结构例。写管理表63可包括分别与1个以上的写指令对应的1个以上的条目。各条目例如包括指令id字段、lba字段、数据长度字段、以及数据指针字段。
118.指令id字段表示对应的写指令的指令id。
119.lba字段表示由对应的写指令指定的lba。该lba表示根据写指令而应被写入用户数据的lba范围的开头的lba。
120.数据长度字段表示由对应的写指令指定的数据长度。该数据长度表示根据写指令而应被写入的用户数据的长度。因此,使用由写指令指定的lba和数据长度,能够确定根据写指令而应被写入用户数据的lba范围。
121.数据指针字段表示由对应的写指令指定的数据指针。该数据指针表示存储有根据写指令而应被写入到nand型闪存5的用户数据的、主机2内的场所。即,控制器4从由数据指针所表示的主机2内的存储场所,将用户数据传送至存储系统3。
122.接着,参照图5至图16,对信息处理系统1中进行的几个动作的例子进行说明。
123.图5是表示信息处理系统1中的绑定动作的例子的框图。绑定动作是用于进行使与主机2连接的存储系统3以虚拟plp驱动模式进行动作的初始设定的动作。
124.具体而言,首先,主机2的指令发出部211经由提交队列243向与主机2连接的存储系统3发送第一模式转移指令(图5中的(1))。第一模式转移指令能够包括主机2的主机id。此外,主机2也可以与第一模式转移指令的发送分开地将主机id通知给存储系统3。
125.在存储系统3中,指令受理部121接收第一模式转移指令。指令受理部121将接收到的第一模式转移指令送出至模式控制部122(图5中的(2))。
126.模式控制部122确认第一模式转移指令中包括的主机id是否作为虚拟plp主机id51保存在nand型闪存5中(图5中的(3))。
127.在nand型闪存5中没有存储主机id的情况下,模式控制部122使存储系统3转移为虚拟plp驱动模式,更新第一模式信息52,以表示虚拟plp驱动模式(图5中的(4))。然后,模式控制部122将第一模式转移指令中包括的主机id写入nand型闪存5。由此,使存储系统3转移为虚拟plp驱动模式的主机2的主机id作为虚拟plp主机id51而被登记到nand型闪存5(图5中的(5))。并且,模式控制部122将对向虚拟plp驱动模式的转移完成这一情况和存储系统3的驱动器id进行表示的响应经由指令受理部121以及完成队列244发送至指令发出部211(图5中的(6))。
128.主机2的指令发出部211接收由存储系统3发送的响应。指令发出部211将包括在接收到的响应中的驱动器id保存在nvram24中(图5中的(7))。由此,主机2转移为虚拟plp驱动模式的存储系统3的驱动器id作为虚拟plp驱动器id241被登记在nvram24中。另外,指令发出部211将接收到的响应送出至写管理部212(图5中的(8))。基于表示向虚拟plp驱动模式的转移完成的响应,写管理部212生成与虚拟plp驱动器id241建立关联的锁定数据列表245,并且保存在nvram24中(图5中的(9))。
129.此外,在与第一模式转移指令中包括的主机id不同的主机id作为虚拟plp主机id51已经保存在nand型闪存5中的情况下,存储系统3相对于具有该主机id的其他主机以虚拟plp驱动模式进行动作。在这种情况下,模式控制部122不将所接收的第一模式转移指令转换为虚拟plp驱动模式。模式控制部122经由指令受理部121和完成队列244将表示未转移为虚拟plp驱动模式这一情况的错误通知返回给指令发出部211(图5中的(10))。
130.通过以上的绑定动作,如果存储系统3未相对于其他主机在虚拟plp驱动模式下动作,则主机2能够使存储系统3转移为虚拟plp驱动模式。并且,在存储系统3中,主机2的主机id和表示存储系统3以虚拟plp驱动模式进行动作这一情况的第一模式信息52被保存在nand型闪存5中。此外,在主机2中,存储系统3的驱动器id和与驱动器id建立关联的锁定数据列表245保存在nvram24中。这样,在主机2和存储系统3中,能够进行用于使存储系统3以
虚拟plp驱动模式进行动作的初始设定。
131.(写入动作)
132.接着,参照图6至图10,对信息处理系统1中的写入动作的例子进行说明。写入动作是用于从主机2向存储系统3发送写指令,并将与写指令建立关联的用户数据写入nand型闪存5的动作。写入动作例如在参照图5所述的绑定动作之后进行。
133.在此,对在主机2的nvram24中设置的提交队列243以及完成队列244进行说明。主机2经由提交队列243向存储系统3发送指令。此外,存储系统3经由完成队列244向主机2返回针对指令的完成。
134.提交队列243包括主机2分别保存针对存储系统3发出的指令的多个槽(slot)。主机2应保存指令的提交队列243内的位置(即槽)由sq tail指针表示。存储系统3应取出(fetch)指令的提交队列243内的位置由sq head指针表示。
135.完成队列244包括存储系统3分别保存针对指令的响应的多个槽。存储系统3应保存响应的完成队列244内的位置由cq tail指针表示。主机2应取出响应的完成队列244内的位置由cq head指针表示。
136.以下,对主机2及存储系统3中的具体的写入动作例进行说明。在图6至图10所示的例子中,为了容易理解说明,例示写入到提交队列243的指令仅是写指令的情况。
137.图6是表示信息处理系统1中的写入动作的例子的框图。在此,例示主机2的指令发出部211以及写管理部212接收了将用户数据71写入nand型闪存5的写入请求的情况。该写入请求例如是由cpu21执行的应用的写入请求。
138.首先,在主机2中,写管理部212使用应用程序或os221的功能锁定被保存在数据缓冲器242中、且被请求写入的用户数据71(图6中的(1))。更具体地,写管理部212使用os221的功能锁定保存有用户数据71的存储区域(例如,页面)。由此,防止保存有用户数据71的存储区域非意图地被释放或被页面调出(page out)。另外,用户数据71也可以使用应用程序或os221的功能被保存在ram22中。当用户数据71被保存在ram22中时,写管理部212将用户数据71从ram22复制到nvram24。
139.指令发出部211发出用于写入用户数据71的写指令。也就是说,指令发出部211生成与用于写入用户数据71的写指令相当的sq条目信息。指令发出部211将所生成的sq条目信息送出至写管理部212(图6中的(2))。
140.写管理部212使用由指令发出部211送出的sq条目信息来生成锁定数据列表245的条目。所生成的条目例如包括相当于所发出的写指令的sq条目信息和数据区域管理信息。该数据区域管理信息是能够确定保存有用户数据71的数据缓冲器242内的存储区域的信息。写管理部212将所生成的条目追加到锁定数据列表245(图6中的(3))。
141.图7表示在图6中的(3)的动作中追加了条目的锁定数据列表245的例子。锁定数据列表245包括追加的条目81。
142.在图7所示的例子中,条目81包括与发出的写指令相当的sq条目信息“sqentry_info1”和对存储有与该写指令建立关联的用户数据71的数据缓冲器242内的存储区域进行表示的数据区域管理信息“region_info1”。此外,条目81还不包括完成顺序和完成状态。
143.返回图6。接下来,指令发出部211将所发出的写指令(sq条目信息)保存在提交队列243中(图6中的(4))。更具体地说明将指令保存到提交队列243的动作。首先,指令发出部
211向提交队列243内的sq tail指针所表示的槽写入指令(在此为写指令)。指令发出部211对sq tail指针加1。此外,在对sq tail指针加上1而得到的值达到提交队列243的槽数(即队列尺寸)的情况下,指令发出部211对sq tail指针设定0。然后,指令发出部211将更新后的sq tail指针的值写入存储系统3的sq tail doorbell寄存器中。这样,将指令保存到提交队列243的动作包括将指令写入到提交队列243的动作和用于更新sq tail指针的动作。
144.当更新了sq tail doorbell寄存器时,存储系统3的指令受理部121受理该更新,从提交队列243取得写指令(图6中的(5))。然后,指令受理部121将所取得的写指令送出至写控制部123(图6中的(6))。在此,更具体地说明从提交队列243取得指令的动作。首先,在sq head指针与sqtail指针存在差的情况下,指令受理部121从提交队列243内的sq head指针所表示的槽中取出指令(在此为写指令)。指令受理部121对sq head指针加1。此外,在对sq head指针加上1而得到的值达到提交队列243的槽数的情况下,指令受理部121对sq head指针设定0。这样,从提交队列243取得指令的动作包括从提交队列243取出指令的动作和用于更新sq head指针的动作。
145.接着,写控制部123使用由指令受理部121送出的写指令,更新写管理表63(图6中的(7))。具体而言,写控制部123将包括由写指令指定的指令id、lba、数据长度及数据指针的条目追加到写管理表63中。另外,写控制部123在确认了由写指令指定的lba为有效的情况、或者能够向该lba写入数据的情况、数据指针有效的情况之后,将对应的条目追加到写管理表63中。数据指针例如在数据指针未表示主机2内的无法访问的区域,而表示与数据长度相称的区域的情况下被视为有效。然后,写控制部123向指令受理部121通知基于写指令的写管理表63的更新已完成(图6中的(8))。
146.指令受理部121根据写控制部123的通知,将针对写指令的第一次的完成(表示正常结束的完成)保存到完成队列244(图6中的(9))。该第一次的完成包括写指令的指令id。对将完成保存到完成队列244中的动作进行更具体的说明。首先,指令受理部121在完成队列244内的cq tail指针所表示的槽中写入完成。指令受理部121将cq tail指针加1。此外,在cq tail指针加上1而得到的值达到完成队列244的槽数的情况下,指令受理部121对cq tail指针设定0。指令受理部121发出中断。指令受理部121通过发出中断,向主机2通知应该处理的新的完成在完成队列244中。这样,将完成保存到完成队列244中的动作包括:在完成队列244中写入完成的动作、用于更新cq tail指针的动作、以及发出中断的动作。
147.另外,指令受理部121也可以在从提交队列243取得的写指令是不能执行的指令的情况下,将表示错误结束的完成作为第一次的完成,保存到完成队列244中。
148.接着,主机2的指令发出部211从完成队列244取得针对写指令的第一次的完成(图6中的(10))。然后,指令发出部211向写管理部212送出所取得的第一次的完成(图6中的(11))。在此,更具体地说明从完成队列244取得完成的动作。首先,指令发出部211根据由存储系统3的指令受理部121发出的中断,从完成队列244内的cq head指针所示的槽中取出完成。指令发出部211对cq head指针加1。此外,在对cq head指针加上1而得到的值达到完成队列244的槽数的情况下,指令发出部211对cq head指针设定0。指令发出部211将更新了的cq head指针写入存储系统3的cq head doorbell寄存器中。然后,指令发出部211清除从存储系统3接收到的中断。如上所述,从完成队列244取得完成的操作包括从完成队列244取出完成的动作、用于更新cq head指针的动作以及清除中断的动作。
149.在第一次的完成是表示正常结束的完成的情况下,写管理部212从指令发出部211接收第一次的完成,在锁定数据列表245中,更新与接收到的第一次的完成对应的条目(图6中的(12))。具体而言,写管理部212对接收到的第一次的完成,分配表示接收到的顺序的序列编号。例如,写管理部212对接收到的第一次的完成分配每当从存储系统3经由完成队列244接收针对写指令的第一次的完成时每次增加1的序列编号。另外,写管理部212取得接收到的第一次的完成所包括的指令id。写管理部212在锁定数据列表245中,确定包括与所取得的指令id对应的sq条目信息的条目。然后,写管理部212向所确定的条目追加被分配的序列编号(即,表示接收到的顺序的信息)和对已接收到第一次的完成这一情况进行表示的信息。
150.在第一次的完成是表示错误结束的完成的情况下,写管理部212解除与接收到的第一次的完成对应的数据缓冲器242内的用户数据71的锁定(图6中的(13))。然后,写管理部212从锁定数据列表245中删除与接收到的第一次的完成对应的条目(图6中的(14))。更具体而言,写管理部212取得接收到的第一次的完成所包括的指令id。写管理部212在锁定数据列表245中,确定包括与所取得的指令id对应的sq条目信息的条目。写管理部212使用所确定的条目内的数据区域管理信息,解除用户数据71的锁定。另外,写管理部212在制作了prp条目的列表、sgl的第二个以后的段的情况下,也释放保存有它们的指针列表246的区域。然后,写管理部212从锁定数据列表245中删除所指定的条目(即,从nvram24中删除)。另外,被解除了锁定的用户数据71从数据缓冲器242中删除。具体而言,在保存有被解除了锁定的用户数据71的数据缓冲器242内的存储区域中,能够保存其他的数据。
151.图8表示在图6中的(12)的动作中条目被更新后的锁定数据列表245的例子。锁定数据列表245包括更新后的条目81。
152.在图8所示的例子中,在条目81中追加了对接收到的第一次的完成的接收顺序进行表示的完成顺序“cseq1”和对已接收第一次的完成这一情况进行表示的完成状态“completed”。即,条目81用完成顺序“cseq1”对已接收到第一次的完成这一情况进行表示。
153.如果锁定数据列表245的更新完成,则写管理部212针对从应用或os221产生的写入请求,第一次的完成在正常结束的情况下返回写入完成的响应,在错误结束的情况下返回错误响应。
154.另外,如上所述,应用或os 221将用户数据71保存在ram22中,并且写管理部212将用户数据71从ram22复制到nvram24的情况存在。在该情况下,应用或者os221能够根据接收到表示错误结束的第一次的完成这一情况,释放ram22的保存有用户数据71的区域,并利用于其他用途。写管理部212可以释放保存有用户数据71的nvram24。
155.图9是表示图6后续的写入动作的例子的框图。在此,例示存储系统3通过从主机2受理的多个写指令而请求写入的用户数据71的总量达到特定的数据单位的情况。特定的数据单位例如是能够通过1次数据写入动作而写入nand型闪存5的数据量(即,写入单位)。
156.在存储系统3中,指令受理部121及写控制部123在通过从主机2受理的多个写指令而请求写入的用户数据71的总量达到特定的数据单位之后,将该特定的数据单位的用户数据71写入nand型闪存5,将与多个写指令分别对应的第二次的完成返回给主机2。即,指令受理部121以及写控制部123不立即执行与所受理的1个写指令相应的写入,而是以在通过多个写指令而请求写入的用户数据71的总量达到特定的数据单位之后、执行与这多个写指令
相应的写入的机制(delayedwrite completion)进行动作。
157.具体而言,写控制部123将写入单位的用户数据71从数据缓冲器242传送至nand型闪存5,将所传送的写入单位的用户数据71写入至nand型闪存5(编程)(图9中的(1))。然后,写控制部123在存在对应的用户数据71能够从nand型闪存5读出的写指令的情况下,将与该写指令对应的处理的完成通知给指令受理部121(图9中的(2))。写控制部123将与和写入单位的用户数据71对应的多个写指令分别对应的处理的完成通知给指令受理部121。写控制部123从写管理表63中删除与多个写指令分别对应的条目(图9中的(3))。另外,写控制部123将多个写指令各自的指令id追加到指令日志53(图9中的(4))。
158.指令受理部121在每次接收来自写控制部123的通知时,向主机2发送对与对应的写指令对应的处理已完成这一情况进行表示的第二次的完成(图9中的(5))。更具体而言,指令受理部121根据写控制部123的通知,将针对对应的写指令的第二次的完成保存在完成队列244中。来自写控制部123的通知例如包括处理完成的写指令的指令id。
159.此外,指令受理部121在与写指令相应的处理中发生了错误的情况下,将表示错误的完成作为第二次的完成而发送至主机2。
160.接着,主机2的指令发出部211从完成队列244取得第二次的完成(图9中的(6))。然后,指令发出部211向写管理部212发送所取得的第二次的完成(图9中的(7))。
161.写管理部212从指令发出部211接收第二次的完成,并解除与接收到的第二次的完成相对应的数据缓冲器242中的用户数据71的锁定(图9中的(8))。然后,写管理部212从锁定数据列表245中删除与接收到的第二次的完成对应的条目(图9中的(9))。更具体地,写管理部212取得在接收到的第二次的完成中包括的指令id。写管理部212在锁定数据列表245中,确定包括与所取得的指令id对应的sq条目信息的条目。写管理部212使用所确定的条目内的数据区域管理信息,解除写入已完成的用户数据71的锁定。另外,写管理部212在制作了prp条目的列表、sgl的第二个以后的段的情况下,也释放保存有它们的指针列表246的区域。然后,写管理部212从锁定数据列表245中删除所确定的条目(即,从nvram24中删除)。另外,被解除了锁定的用户数据71从数据缓冲器242中被删除。具体而言,在存储有被解除了锁定的用户数据71的数据缓冲器242内的存储区域中,能够保存其他的数据。
162.此外,在第二次的完成表示错误的情况下,主机2(具体而言,写管理部212)视为存储系统3的故障。写管理部212中止针对该存储系统3的处理,进行作为信息处理系统1的异常处理。例如,写管理部212删除与该存储系统3有关联的一切数据。被删除的数据包括与该存储系统3对应的数据缓冲器242内的用户数据71以及与该存储系统3对应的锁定数据列表245。另外,写管理部212至少停止向视为故障的存储系统3发送写指令。此外,写管理部212对于来自应用或os221的写入请求,全部用错误进行响应。
163.图10表示在图9中的(9)的动作中被删除条目的锁定数据列表245的例子。锁定数据列表245包括与接收到的第二次的完成对应的条目81。
164.在图10所示的例子中,条目81包括sq条目信息“sqentry_info1”、完成顺序“cseq1”、数据区域管理信息“region_info1”以及完成状态“completed”。即,条目81是对已接收第一次的完成这一情况进行表示的条目。条目81根据从存储系统3接收到针对对应的写指令(即,相当于sq条目信息“sqentry_info1”的写指令)的第二次的完成这一情况而被删除。
165.此外,保存在提交队列243中的写指令(sq条目信息)例如根据接收到针对该写指令的第一次的完成而被清除。因此,在锁定数据列表245的条目内保存有与写指令相当的sq条目信息。此外,在该情况下,也可以将在nvram24的提交队列243中保存的写指令(sq条目信息)保存在ram22中。
166.另外,被保存在提交队列243中的写指令也可以在接收到针对该写指令的第二次的完成之前不被清除。在该情况下,在锁定数据列表
167.245的条目内,代替sq条目信息而保存表示提交队列243的条目的
168.指针。并且,保存在提交队列243中的写指令本身被用作sq条目信息。此外,由于未从提交队列243清除写指令,由此sq head指针不被更新,提交队列243容易变满,有可能无法发出读指令那样的其他指令。因此,提交队列243优选作为用于发出写指令的专用的提交队列而设置。
169.通过以上的写入动作,在存储系统3基于从主机2受理的写指令而进行基于delayed write completion的用户数据的写入的期间,主机2能够使用锁定数据列表245管理与发出的写指令对应的处理的状况。
170.具体而言,主机2在向存储系统3发送写指令的情况下,将与该写指令对应的条目追加到锁定数据列表245中。在追加的条目中,例如不包括完成顺序和完成状态。因此,主机2能够通过追加的条目来管理未接收针对对应的写指令的第一次的完成及第二次的完成这一情况。换言之,主机2能够通过追加的条目,向存储系统3发出(发送)对应的写指令,并且对处于未接收到第一次的完成的状态这一情况进行管理。
171.存储系统3在从主机2受理写指令并将对应的条目追加到写管理表63中的情况下,将针对该写指令的第一次的完成返回给主机2。主机2基于从存储系统3接收到的第一次的完成,更新对应的锁定数据列表245内的条目。在更新后的条目中,例如追加完成顺序和完成状态。因此,主机2能够通过更新后的条目,管理处于已接收针对对应的写指令的第一次的完成、并且未接收第二次的完成的状态这一情况。换言之,主机2能够通过更新后的条目来对处于存储系统3受理了对应的写指令的状态这一情况进行管理。
172.另外,存储系统3在以delayed write completion完成了与写指令对应的用户数据的写入的情况下,向主机2返回针对该写指令的第二次的完成。主机2基于从存储系统3接收到的第二次的完成,删除对应的锁定数据列表245内的条目。因此,主机2通过删除条目,能够结束与对应的写指令有关的管理。
173.此外,存储系统3的写控制部123也可以在从受理写指令起经过的时间超过了阈值的情况下,将与已受理的写指令对应的用户数据带填充(padding)写入到nand型闪存5。在此,将用户数据带填充写入是指写入由用户数据和填充用的数据构成的写入单位的数据。该阈值例如基于由主机2期待的、到得到针对写指令的第二次的完成为止的时间的上限。从受理写指令起经过的时间例如使用计时器15来测量。更具体而言,写控制部123在从受理写指令起经过的时间超过了阈值的情况下,将与已受理的写指令对应的用户数据从主机2的数据缓冲器242传送至nand型闪存5。然后,写控制部123将传送来的用户数据带填充写入nand型闪存5。由此,指令受理部121能够在由主机2期待的时间内,通知针对写指令的第二次的完成。
174.(关闭动作)
175.接下来,参照图11及图12描述信息处理系统1中的关闭动作的例子。关闭动作是用于在与从主机2发送至存储系统3的全部写指令对应的用户数据的写入完成之后,使存储系统3的动作结束的动作。
176.图11是表示信息处理系统1中的关闭动作的例子的框图。在此,例示为了完成与从主机2发送至存储系统3的全部写指令对应的用户数据71的写入而使用闪存指令的情况。另外,为了容易理解说明,假设主机2已接收到针对从主机2向存储系统3发送的全部写指令的第一次的完成、且还未接收到针对至少1个写指令的第二次的完成。
177.首先,在主机2中,写管理部212停止从应用等受理新i/o请求。然后,写管理部212请求指令发出部211发出闪存指令(图11中的(1))。指令发出部211根据写管理部212的请求,发出闪存指令,并保存到提交队列243中(图11中的(2))。
178.接着,在存储系统3中,指令受理部121从提交队列243取得闪存指令(图11中的(3))。指令受理部121将所取得的闪存指令送出至写控制部123(图11中的(4))。
179.写控制部123基于从指令受理部121接收到的闪存指令,使用写管理表63判定是否存在应写入到nand型闪存5的用户数据71(图11中的(5))。具体而言,在写管理表63中有至少1个条目的情况下,写控制部123判断为存在应写入nand型闪存5的用户数据71。在写管理表63中没有条目的情况下,写控制部123判断为没有应写入nand型闪存5的用户数据71。
180.在存在应写入nand型闪存5的用户数据71的情况下,写控制部123将用户数据71从数据缓冲器242传送至nand型闪存5,将传送来的用户数据71带填充写入nand型闪存5(图11中的(6))。然后,写控制部123对于能够从nand型闪存5读出对应的用户数据71的写指令,将与该写指令对应的处理的完成通知给指令受理部121(图11中的(7))。写控制部123将与写入的用户数据71对应的1个以上的写指令分别对应的处理的完成通知给指令受理部121。写控制部123从写管理表63中删除与1个以上的写指令分别对应的条目(图11中的(8))。另外,写控制部123将1个以上的写指令各自的指令id追加到指令日志53(图11中的(9))。
181.然后,指令受理部121在每次接收到写控制部123的通知时,将对与对应的写指令对应的处理完成这一情况进行表示的第二次的完成保存到完成队列244中(图11中的(10))。
182.这样,在存储系统3中,根据闪存指令,完成与从主机2发送至存储系统3的全部写指令对应的用户数据71的写入。由此,针对全部的写指令向主机2返回第二次的完成。
183.以后的主机2中的图11中的(11)至(14)的动作与参照图9所述的写入动作的(6)至(9)的动作相同。通过针对从主机2发送至存储系统3的全部写指令接收第二次的完成,锁定数据列表245内的条目全部被删除。即,锁定数据列表245成为孔。写管理部212基于锁定数据列表245内的条目全部被删除这一情况,判断为与从主机2发送至存储系统3的全部写指令对应的用户数据71的写入已完成。然后,写管理部212向指令发出部211通知与全部的写指令对应的用户数据71的写入已完成(图11中的(15))。
184.图12表示图11后续的关闭动作的例子。
185.在被通知了与全部的写指令对应的用户数据71的写入已完成的情况下,指令发出部211经由提交队列243向存储系统3发送关闭命令(图12中的(1))。
186.在存储系统3中,指令受理部121从主机2接收关闭命令。指令受理部121将接收到的关闭命令送出至模式控制部122(图12中的(2))。
187.模式控制部122根据从指令受理部121接收到的关闭命令,使存储系统3的动作模式从虚拟plp驱动模式转移为通常驱动模式。然后,模式控制部122将nand型闪存5内的第一模式信息52更新为表示通常驱动模式(图12中的(3))。另外,模式控制部122根据关闭命令,删除被保存在nand型闪存5中的主机2的虚拟plp主机id51(图12中的(4))。
188.之后,指令受理部121向主机2的指令发出部211通知关闭已完成(图12中的(5))。
189.收到通知后,指令发出部211并且删除被保存在nvram24中的存储系统3的虚拟plp驱动器id241(图12中的(6))。然后,指令发出部211删除被保存在nvram24中的提交队列243、完成队列244和锁定数据列表245(图12中的(7))。指令发出部211例如释放保存有虚拟plp驱动器id241和锁定数据列表245的nvram24内的存储区域。
190.通过以上的关闭动作,主机2能够在与从主机2发送至存储系统3的全部写指令对应的用户数据的写入完成之后,使存储系统3转移为通常驱动模式。此外,可以删除用于使存储系统3在虚拟plp驱动模式下操作的数据(更具体地,虚拟plp驱动器id241、锁定数据列表245和虚拟plp主机id51)。因此,能够根据关闭命令,正常地结束存储系统3的动作。
191.(启动动作)
192.接着,对信息处理系统1中的启动动作进行说明。启动动作可以包括在存储系统3异常结束后启动的情况下、或者非意图地重启的情况下、或者在主机2异常结束后启动的情况下用于恢复存储系统3的解绑动作以及恢复动作。这里,存储系统3的异常结束是指在完成与存储系统3接收到的全部写指令对应的用户数据的写入之前,存储系统3结束动作。另外,存储系统3的非意图的重启表示存储系统3不完成上述的关闭动作而重启。主机2的异常结束表示在存储系统3完成与主机2向存储系统3发出的全部写指令对应的用户数据的写入之前主机2结束动作。
193.解绑动作例如是用于在存储系统3异常结束或者非意图地重启而无法完成的向存储系统3的用户数据的写入不存在的情况下,强制性地使存储系统3从虚拟plp驱动模式返回到通常驱动模式的动作。恢复动作是用于使用nvram24中保存的数据来恢复因存储系统3异常结束或非意图地重启而无法完成的向存储系统3的用户数据的写入的动作。以下,对解绑动作和恢复动作各自的具体例进行说明。
194.(解绑动作)
195.图13是表示信息处理系统1中的解绑动作的例子的框图。在此,假设在虚拟plp驱动模式下动作的存储系统3在本次即将启动之前异常结束或者非意图地重启。在该情况下,存储系统3在本次启动后也以虚拟plp驱动模式进行动作。另外,假设没有通过存储系统3异常结束或者非意图地重启而无法完成的向存储系统3的用户数据的写入。即,假设对接收到第一次的完成这一情况进行表示的条目不包括在锁定数据列表245中。
196.首先,主机2的恢复控制部213判定与主机2连接的存储系统3的驱动器id是否与保存在nvram24中的虚拟plp驱动器id241一致(图13中的(1))。
197.当存储系统3的驱动器id与nvram24中的虚拟plp驱动器id241不同的情况下,推定为存储系统3相对于与主机2不同的主机以虚拟plp驱动模式动作。因此,主机2在存储系统3返回通常驱动模式之前,不访问存储系统3。存储系统3例如基于主机2的操作员的操作而在其与该其他主机之间进行解绑动作,由此从虚拟plp驱动模式返回通常驱动模式。
198.另外,主机2的nvram24发生故障而被更换从而保存在nvram24中的数据全部丢失
的情况下、其他主机发生故障并不能修复而将存储系统3连接到主机2的情况下,虚拟plp驱动器id241与存储系统3的驱动器id不一致。在该情况下,例如基于主机2的操作员的操作,主机2也能够对存储系统3发出第一模式解除指令,暂时使存储系统3恢复为通常模式之后,按照参照图5说明的步骤使存储系统3转移为虚拟plp驱动模式。
199.在存储系统3的驱动器id与nvram24中的虚拟plp驱动器id241一致的情况下,即,当存储系统3的驱动器id保存在nvram24中的情况下,恢复控制部213判定在nvram24中的锁定数据列表
200.245中是否包括对接收到第一次的完成这一情况进行表示的条目(图
201.13中的(2))。锁定数据列表245是与存储系统3的虚拟plp驱动器
202.id241建立关联的锁定数据列表。
203.对接收到第一次的完成这一情况进行表示的条目例如是包括完成顺序和对已接收第一次的完成这一情况进行表示的完成状态的条目。在锁定数据列表245中不包括对接收到第一次的完成这一情况进行表示的条目的情况下,恢复控制部213判断为不存在因主机2或者存储系统3异常结束或者非意图地重启而无法完成的向存储系统3的用户数据的写入。在锁定数据列表245中包括对接收到第一次的完成这一情况进行表示的条目的情况下,恢复控制部213判定为存在因存储系统3异常结束或者非意图地重启、尽管对应用或者os221的写入请求正常响应但无法完成的向存储系统3的用户数据的写入。
204.如上所述,在图13所示的例子中,假设在锁定数据列表245中不包括对接收到第一次的完成这一情况进行表示的条目。在这种情况下,恢复控制部213从nvram24删除与存储系统3有关联的异常结束前的数据。被删除的数据包括被保存在提交队列243中的写指令(sq条目信息)、被保存在完成队列244中的完成、锁定数据列表245、指针列表246、以及残留在数据缓冲器242上的用户数据71。恢复控制部213通过在恢复处理完成后重新制作这些数据,从而能够在虚拟plp驱动模式下使用该存储系统3。恢复控制部213向指令发出部211请求发出第一模式解除指令(图13中的(3))。然后,恢复控制部213删除被保存在nvram24中的存储系统3的虚拟plp驱动器id241(图13中的(4))。
205.指令发出部211根据恢复控制部213的请求,将第一模式解除指令发送至存储系统3(图13中的(5))。
206.在被启动(或重启)后的存储系统3中,模式控制部122判定与存储系统3连接的主机2的主机id是否与保存在nand型闪存5中的虚拟plp主机id51一致(图13中的(6))。另外,模式控制部122使用被保存在nand型闪存5中的第一模式信息52,判定存储系统3被设定为通常驱动模式和虚拟plp驱动模式中的哪一个(图13中的(7))。如上所述,在图13所示的例子中,假设存储系统3被设定为虚拟plp驱动模式。
207.在主机2的主机id与nand型闪存5内的虚拟plp主机id51不同的情况下,推定为存储系统3相对于与主机2不同的主机以虚拟plp驱动模式进行动作。在该情况下,指令受理部121例如等待来自其他主机的第一模式解除指令。
208.在主机2的主机id与nand型闪存5内的虚拟plp主机id51一致的情况下,指令受理部121从主机2接收第一模式解除指令。指令受理部121将接收到的第一模式解除指令送出至模式控制部122(图13中的(8))。
209.模式控制部122根据从指令受理部121接收到的第一模式解除指令,使存储系统3
从虚拟plp驱动模式转移为通常驱动模式。然后,模式控制部122将nand型闪存5内的第一模式信息52更新为表示通常驱动模式(图13中的(9))。另外,模式控制部122根据第一模式解除指令,删除被保存在nand型闪存5中的主机2的虚拟plp主机id51(图13中的(10))。
210.通过以上的解绑动作,在虚拟plp驱动模式下进行动作的存储系统3在本次即将启动之前异常结束的情况下或者在虚拟plp驱动模式下动作的存储系统3与以前不同的主机2连接的情况下,或者主机2丢失了在nvram24中保持的、为了使存储系统3以虚拟plp驱动模式动作而使用的数据(更详细而言,虚拟plp驱动器id241、锁定数据列表245)的情况下,主机2能够强制地使存储系统3从虚拟plp驱动模式返回到通常驱动模式。转移为通常驱动模式的存储系统3通过与主机2的绑定动作,能够相对于主机2再次以虚拟plp驱动模式进行动作。或者,转移为通常驱动模式的存储系统3也能够通过与不同于主机2的主机之间的绑定动作,相对于该其他主机以虚拟plp驱动模式进行动作。另外,解绑动作也可以在不限定于存储系统3的启动时的任意的定时进行。
211.(恢复动作)
212.图14是表示信息处理系统1中的恢复动作的例子的框图。在此,假设在虚拟plp驱动模式下进行动作的存储系统3在本次即将启动之前异常结束或者非意图地重启。在该情况下,存储系统3在本次启动后也以虚拟plp驱动模式进行动作。另外,假设存在因存储系统3异常结束或者非意图地重启而无法完成的向存储系统3的用户数据的写入。即,假设对接收到第一次的完成这一情况进行表示的条目包括在锁定数据列表245中。
213.首先,主机2的恢复控制部213判定与主机2连接的存储系统3的驱动器id是否与保存在nvram24中的虚拟plp驱动器id241一致(图14中的(1))。
214.在存储系统3的驱动器id与nvram24中的虚拟plp驱动器id241不同的情况下,推定为存储系统3相对于与主机2不同的主机以虚拟plp驱动模式动作。因此,主机2在存储系统3返回通常驱动模式之前,不访问存储系统3。在存储系统3中,例如,在与该其他主机之间进行恢复动作。
215.在存储系统3的驱动器id与nvram24中的虚拟plp驱动器id241一致的情况下,恢复控制部213判定在nvram24内的锁定数据列表245中是否包括对接收到第一次的完成这一情况进行表示的条目(图14中的(2))。
216.如上所述,在图14所示的例子中,假设在锁定数据列表245中包括对已接收到第一次的完成这一情况进行表示的条目。在该情况下,恢复控制部213向指令发出部211请求第二模式转移指令的发出(图14中的(3))。另外,恢复控制部213在nvram24内重新制作提交队列243和完成队列244。
217.指令发出部211根据恢复控制部213的请求,经由新生成的提交队列243,或者经由管理用指令专用的提交队列将第二模式转移指令发送至存储系统3(图14中的(4))。
218.在已启动的存储系统3中,模式控制部122判定与存储系统3连接的主机2的主机id是否与保存在nand型闪存5中的虚拟plp主机id51一致(图14中的(5))。另外,模式控制部122参照被保存在nand型闪存5中的第一模式信息52,判定存储系统3被设定为通常驱动模式和虚拟plp驱动模式中的哪一个(图14中的(6))。如上所述,在图14所示的例子中,假设存储系统3被设置为虚拟plp驱动模式。
219.在主机2的主机id与nand型闪存5内的虚拟plp主机id51不同的情况下,认为主机2
正在进行异常动作,因此存储系统3对主机2通知第二模式转移指令发生了错误这一情况。
220.在主机2的主机id与nand型闪存5内的虚拟plp主机id51一致的情况下,指令受理部121将接收到的第二模式转移指令送出至模式控制部122(图14中的(7))。
221.模式控制部122根据从指令受理部121接收到的第二模式转移指令,使存储系统3从通常写入模式转移为恢复写入模式。指令受理部121对主机2通知第二模式转移指令正常完成、存储系统3转移为恢复写入模式这一情况(图14中的(8))。
222.图15表示图14后续的恢复动作的例子。在图15所示的恢复动作中,对于转移为恢复写入模式的存储系统3,通过主机2再次请求写入因异常结束或非意图地重启而无法完成的用户数据的写入。
223.具体而言,主机2的恢复控制部213在与存储系统3的虚拟plp驱动器id241建立关联的锁定数据列表245中,确定分别对接收到第一次的完成这一情况进行表示的n个条目(图15中的(1))。n为1以上的整数。
224.恢复控制部213使用所确定的n个条目各自所包括的完成顺序,按照完成顺序的升序选择n个条目中的1个。以下,将所选择的条目也称为对象条目。在图15所示的以后的动作中,n个条目以完成顺序的升序逐个地作为对象条目使用。
225.恢复控制部213使用对象条目所包括的数据区域管理信息,将对应的数据缓冲器242内的用户数据71锁定(图15中的(2))。然后,恢复控制部213使用对象条目所包括的sq条目信息,向指令发出部211请求对应的写指令的发出(图15中的(3))。
226.另外,恢复控制部213在锁定数据列表245中存在对未接收到第一次的完成这一情况进行表示的条目的情况下,删除该条目。对未接收到第一次的完成这一情况进行表示的条目例如是不包括完成顺序和完成状态的条目。恢复控制部213未接收到第一次的完成,所以判断为与该条目对应的写指令未被存储系统3受理。另外,由于未接收到第一次的完成,所以对于请求了与该条目对应的用户数据的写入的应用等,没有通知写入的完成。因此,不需要将与对未接收到第一次的完成这一情况进行表示的条目对应的写指令再次发送至存储系统3。因此,恢复控制部213从锁定数据列表245中删除对未接收到第一次的完成这一情况进行表示的条目。
227.指令发出部211根据基于恢复控制部213的写指令的发出的请求,将与对象条目内的sq条目信息相当的写指令保存到提交队列243中(图15中的(4))。
228.然后,恢复控制部213在对象条目中删除完成顺序和完成状态(图15中的(5))。由此,对象条目表示处于对应的写指令已向存储系统3发出(发送)、而未接收到第一次的完成的状态这一情况。
229.以后的图15中的从(6)到(10)的动作与参照图6所述的写入动作的从(5)到(9)的动作相同。即,存储系统3的指令受理部121以及写控制部123基于从提交队列243取得的写指令来更新写管理表63,将第一次的完成保存到完成队列244。
230.然后,主机2的指令发出部211从完成队列244取得针对写指令的第一次的完成(图15中的(11))。指令发出部211向恢复控制部213送出所取得的第一次的完成(图15中的(12))。
231.恢复控制部213从指令发出部211接收第一次的完成,在锁定数据列表245中,更新与接收到的第一次的完成对应的条目(图15中的(13))。具体而言,写管理部212在与接收到
的第一次的完成对应的条目中,追加对受理完成的顺序进行表示的序列编号和对已接收到第一次的完成这一情况进行表示的信息。
232.通过以上的图15所示的恢复动作,主机2能够使用锁定数据列表245中分别对接收到第一次的完成这一情况进行表示的n个条目,按照完成顺序的升序,将请求对应的用户数据的写入的写指令再次发送至存储系统3。因此,能够考虑由存储系统3受理的顺序来再现因存储系统3异常结束或者非意图地重启而未能完成处理的写指令的发送。
233.存储系统3的写控制部123由于存储系统3以恢复写入模式进行动作,因此保证按照受理写指令的顺序进行对应的用户数据的写入。
234.图16表示图15后续的恢复动作的例子。
235.主机2的恢复控制部213在将与n个对象条目分别对应的n个写指令全部发送至存储系统3之后,向指令发出部211请求发出闪存指令(图16中的(1))。指令发出部211根据恢复控制部213的请求,发出闪存指令,并保存到提交队列243中(图16中的(2))。
236.以后的图16中的从(3)到(10)的动作与参照图11所述的关闭动作的从(3)到(10)的动作相同。即,存储系统3的指令受理部121以及写控制部123根据从提交队列243取得的闪存指令,完成与从主机2发送至存储系统3的全部的写指令对应的用户数据71的写入,将第二次的完成保存到完成队列244。
237.接着,主机2的指令发出部211从完成队列244取得第二次的完成(图16中的(11))。然后,指令发出部211向恢复控制部213送出所取得的第二次的完成(图16中的(12))。
238.恢复控制部213从指令发出部211接收第二次的完成,解除与接收到的第二次的完成对应的数据缓冲器242内的用户数据71的锁定(图16中的(13))。然后,恢复控制部213从锁定数据列表245中删除与接收到的第二次的完成对应的条目(图16中的(14))。
239.通过针对从主机2发送至存储系统3的全部写指令而接收到第二次的完成,由此锁定数据列表245内的条目全部被删除。即,锁定数据列表245成为孔。恢复控制部213基于锁定数据列表245内的条目全部被删除这一情况,判断为与从主机2发送至存储系统3的全部写指令对应的用户数据71的写入已完成。然后,恢复控制部213向指令发出部211通知与全部的写指令对应的用户数据的写入已完成这一情况(图16中的(15))。
240.指令发出部211根据恢复控制部213的通知,经由提交队列243向存储系统3发送第二模式解除指令(图16中的(16))。
241.存储系统3的指令受理部121从主机2接收第二模式解除指令。指令受理部121将接收到的第二模式解除指令送出至写控制部123(图16中的(17))。
242.写控制部123根据第二模式解除指令,使存储系统3从恢复写入模式转移为通常写入模式。另外,存储系统3的第一模式保持虚拟plp驱动模式不变。
243.通过以上的恢复动作,能够完成因存储系统3异常结束或者非意图地重启而无法完成的用户数据的写入。即,主机2能够使用对发出的写指令的处理状况进行管理的锁定数据列表245,恢复针对异常结束或未意图地重启的存储系统3的未完成的写入。然后,主机2能够开始受理来自应用程序的新i/o请求。新i/o请求是针对存储系统3的新的数据读出请求或数据写入请求。即,主机2能够对存储系统3新发出与所受理的新i/o请求对应的读指令、写指令。另外,不仅在存储系统3中,在主机2异常结束或非意图地重启的情况下,锁定数据列表245也被非易失性地存储,因此能够进行同样的恢复动作。
244.另外,与参照图9所述的写入动作同样地,写控制部123也可以在从受理写指令起经过的时间超过了阈值的情况下,将与已受理的写指令对应的用户数据带填充写入到nand型闪存5。在该情况下,在主机2中,能够在所期待的时间内接收第二次的完成,因此恢复控制部213以及指令发出部211也可以不将闪存指令发送至存储系统3。
245.此外,恢复控制部213以及指令发出部211也可以在针对从主机2向存储系统3发送的全部写指令而接收到第一次的完成的时刻,将第二模式解除指令发送至存储系统3。即,恢复控制部213在针对所发送的全部的写指令而接收到第一次的完成的情况下,能够判断为存储系统3异常结束或者非意图地重启而无法完成的用户数据的写入已被恢复。在该情况下,恢复控制部213以及指令发出部211根据针对所发送的全部写指令而接收到第一次的完成这一情况,经由提交队列243向存储系统3发送第二模式解除指令,并开始受理来自应用的新i/o请求。
246.接下来,参照图17至图30的流程图,对在主机2以及存储系统3中执行的处理的顺序进行说明。
247.(主机2中的绑定处理)
248.图17是表示由主机2的cpu21执行的绑定处理的步骤的例子的流程图。该绑定处理是用于进行使与主机2连接的存储系统3以虚拟plp驱动模式进行动作的初始设定的处理。cpu21例如在存储系统3与主机2连接的情况下,执行绑定处理。
249.首先,cpu21将第一模式转移指令发送至存储系统3(步骤s101)。第一模式转移指令是用于使存储系统3转移为虚拟plp驱动模式的指令。第一模式转移指令包括主机id。
250.然后,cpu21从存储系统3接收针对第一模式转移指令的响应(步骤s102)。接收到的响应包括表示存储系统3是否转移为虚拟plp驱动模式的信息。另外,接收到的响应也可以包括存储系统3的驱动器id。cpu21基于接收到的响应,判定存储系统3是否转移为虚拟plp驱动模式(步骤s103)。
251.在存储系统3未转移为虚拟plp驱动模式的情况下(步骤s103中,否),cpu21结束绑定处理。存储系统3例如在通过由与主机2不同的主机进行的绑定处理而转移为虚拟plp驱动模式的情况下,针对来自主机2的第一模式转移指令,将对未转移为虚拟plp驱动模式这一情况进行表示的响应返回给主机2。在这种情况下,cpu21结束绑定处理。
252.在存储系统3转移为虚拟plp驱动模式的情况下(步骤s103中,是),cpu21将存储系统3的驱动器id作为虚拟plp驱动器id241而保存在nvram24中(步骤s104)。例如,cpu21将从存储系统3接收到的响应中包括的驱动器id保存在nvram24中。或者,cpu21也可以将与存储系统3的连接处理、认证处理中得到的驱动器id保存在nvram24中。然后,cpu21生成与存储系统3的驱动器id建立关联的锁定数据列表245,并将其保存在nvram24中(步骤s105),并结束绑定处理。
253.通过以上的绑定处理,cpu21能够进行使与主机2连接的存储系统3以虚拟plp驱动模式进行动作的初始设定。具体地,当存储系统3根据第一模式转移指令而转移为虚拟plp驱动模式时,cpu21可以将与存储系统3相对应的虚拟plp驱动器id241和锁定数据列表245保存在nvram24中。
254.(存储系统3中的绑定处理)
255.图18是表示由存储系统3的cpu12执行的绑定处理的步骤的例子的流程图。cpu12
根据从主机2接收到第一模式转移指令这一情况,执行该绑定处理。
256.首先,cpu12取得从主机2接收到的第一模式转移指令中包括的主机id(步骤s201)。将第一模式转移指令中包括的主机id称为第一主机id。
257.cpu12判定与第一主机id不同的主机id是否已经登记在存储系统3中(步骤s202)。具体而言,cpu12判定在nand型闪存5中是否保存有与第一主机id不同的主机id作为虚拟plp主机id51。cpu12在nand型闪存5中保存有与第一主机id不同的主机id的情况下,判断为与第一主机id不同的主机id已经登记在存储系统3中。另外,cpu12在nand型闪存5中没有保存任意的主机id的情况下,以及在nand型闪存5中保存有第一主机id的情况下,判断为与第一主机id不同的主机id未被登记在存储系统3中。
258.在与第一主机id不同的主机id已经登记在存储系统3中的情况下,cpu12向主机2通知错误(步骤s203),结束绑定处理。即,由于存储系统3已经相对于具有所登记的主机id的其他主机在虚拟plp驱动模式下动作,所以cpu12向主机2通知根据无法接收到的第一模式转移指令而转移为虚拟plp驱动模式这一情况。
259.另外,在存储系统3中没有登记与第一主机id不同的主机id的情况下,cpu12将第一主机id保存在nand型闪存5中(步骤s204)。cpu12使存储系统3从通常驱动模式转移为虚拟plp驱动模式(步骤s205)。具体而言,cpu12将nand型闪存5内的表示通常驱动模式的第一模式信息52改写为表示虚拟plp驱动模式的第一模式信息52。然后,cpu12向主机2发送包括对已转移为虚拟plp驱动模式(模式转移完成)这一情况进行表示的信息的响应(步骤s206)。响应中还可以包括存储系统3的驱动器id。
260.通过以上的绑定处理,存储系统3在从主机2接收到第一模式转移指令的情况下,如果未相对于其他主机以虚拟plp驱动模式进行动作,则能够从通常驱动模式转移为虚拟plp驱动模式。
261.(用于向主机2中的存储系统3写入用户数据的处理)
262.图19是表示由主机2的cpu21执行的写入请求处理的步骤的例子的流程图。写入请求处理是用于主机2向存储系统3请求用户数据的写入的处理。cpu21例如通过参照图17所述的绑定处理,使存储系统3转移为虚拟plp驱动模式之后,执行写入请求处理。
263.首先,cpu21将应写入nand型闪存5的用户数据保存在数据缓冲器242中(步骤s301)。另外,cpu21也可以在应写入nand型闪存5的用户数据被保存在ram22中的情况下,将该用户数据复制到数据缓冲器242。然后,cpu21锁定被保存在数据缓冲器242中的用户数据(步骤s302)。更详细而言,cpu21使用所执行的os221的功能,将保存有由驱动器222使用的用户数据的存储区域(例如页面)的状态锁定。由此,防止存储有用户数据的存储区域非意图地被释放。
264.cpu21发出用于将数据缓冲器242中保存的用户数据写入nand型闪存5的写指令(以下,称为第一写指令)(步骤s303)。
265.接着,cpu21将与第一写指令对应的条目追加到锁定数据列表245(步骤s304)。追加的条目例如包括与第一写指令对应的sq条目信息和数据区域管理信息。与第一写指令对应的sq条目信息是表示第一写指令的信息。更具体而言,与第一写指令对应的sq条目信息是为了使存储系统3执行与第一写指令相应的处理而保存在提交队列243中的信息。另外,与第一写指令对应的数据区域管理信息是能够确定存储有与第一写指令对应的用户数据
的数据缓冲器242内的存储区域的信息。
266.然后,cpu21将第一写指令(即,表示第一写指令的sq条目信息)保存到提交队列243(步骤s305)。
267.另外,cpu21也可以在将第一写指令保存到提交队列243中的步骤s305的步骤之后,执行将与第一写指令对应的条目追加到锁定数据列表245中的步骤s304的步骤。另外,cpu21也可以并行地执行步骤s304的步骤和步骤s305的步骤。
268.通过以上的写入请求处理,cpu21能够向存储系统3请求写入在数据缓冲器242中保存的用户数据。另外,cpu21能够使用锁定数据列表245来管理与向存储系统3请求的写入有关的信息(即,与所发出的写指令有关的信息)。
269.(存储系统3中的用户数据写入所用的处理)
270.图20是表示由存储系统3的cpu12执行的写入控制处理的步骤的例子的流程图。写入控制处理是受理由主机2发出的写指令,并对与已受理的写指令对应的用户数据的写入进行控制所用的处理。在此,为了容易理解说明,例示了cpu12从主机2的提交队列243受理的指令仅是写指令的情况。
271.首先,cpu12从提交队列243取得写指令(以下,称为第二写指令)(步骤s401)。cpu12基于第二写指令来更新写管理表63(步骤s402)。具体而言,cpu12从第二写指令中取得例如指令id、lba、数据长度以及数据指针。cpu12将表示所取得的指令id、lba、数据长度及数据指针的条目追加到写管理表63中。
272.然后,cpu12将针对第二写指令的第一次的完成保存到完成队列244中(步骤s403)。针对第二写指令的第一次的完成包括第二写指令的指令id。
273.接着,cpu12判定在主机2的数据缓冲器242中保存的未写入的用户数据的总量是否达到了写入单位(步骤s404)。cpu12使用写管理表63,取得数据缓冲器242中保存的未写入的用户数据的总量。
274.在数据缓冲器242中保存的未写入的用户数据的总量未达到写入单位的情况下(步骤s404,否),cpu12的处理返回到步骤s401。即,cpu12继续执行用于受理新的写指令的处理。
275.在数据缓冲器242中保存的未写入的用户数据的总量达到写入单位的情况下(步骤s404,是),cpu12从主机2的数据缓冲器242向存储系统3的nand型闪存5传送写入单位的用户数据(步骤s405)。cpu12将传送的用户数据写入nand型闪存5(步骤s406)。
276.接着,cpu12判定是否存在能够从nand型闪存5读出对应的用户数据的写指令(步骤s407)。在不存在能够读出对应的用户数据的写指令的情况下(步骤s407,否),cpu12的处理返回到步骤s407。即,由于无法向主机2通知对与写指令相应的用户数据的写入已完成这一情况进行表示的第二次的完成,所以cpu12的处理返回到步骤s407。
277.在存在能够读出对应的用户数据的写指令的情况下(步骤s407中,是),cpu12将针对该写指令的第二次的完成保存到完成队列244中(步骤s408)。以下,将能够读出对应的用户数据的写指令称为对象写指令。针对对象写指令的第二次的完成包括对象写指令的指令id。然后,cpu12更新写管理表63(步骤s409)。具体而言,cpu12从写管理表63中删除与对象写指令对应的条目。另外,cpu12以追加对象写指令的指令id的方式更新指令日志53(步骤s410)。
278.接着,cpu12针对与在步骤s406中写入的写入单位的用户数据对应的全部写指令,判定是否已将第二次的完成保存到完成队列244中(步骤s411)。在针对与写入单位的用户数据对应的至少1个写指令没有将第二次的完成保存到完成队列244中的情况下(步骤s411,否),cpu12的处理返回到步骤s407。
279.另一方面,在针对与写入单位的用户数据对应的全部的写指令将第二次的完成保存到完成队列244的情况下(步骤s411,是),cpu12的处理返回到步骤s401。即,cpu12继续进行如下处理:从主机2受理新的写指令,并对与已受理的写指令对应的用户数据的写入进行控制。
280.通过以上的写入控制处理,cpu12能够从主机2受理写指令,控制与已受理的写指令对应的用户数据的写入。具体而言,cpu12在从主机2受理了写指令的情况下,将第一次的完成返回给主机2。另外,cpu12在数据缓冲器242中保存有写入单位的用户数据的情况下,将该写入单位的用户数据写入nand型闪存5。然后,cpu12向主机2返回针对与写入完成的用户数据对应的写指令的第二次的完成。
281.因此,cpu12通过向主机2返回第一次的完成和第二次的完成,能够将写指令的处理状态通知给主机2。另外,cpu12通过基于delayed write completion的写入,能够高效地利用nand型闪存5的存储区域。
282.另外,cpu12不仅在步骤s404中的主机2的数据缓冲器242中保存的未写入的用户数据的总量达到写入单位的情况下,也可以在从受理写指令起经过的时间超过阈值的情况下,将与已受理的写指令对应的用户数据带填充写入到nand型闪存5。具体而言,cpu12在从受理写指令起经过的时间超过了阈值的情况下,将与已受理的写指令对应的用户数据从主机2的数据缓冲器242传送至nand型闪存5。然后,cpu12将传送的用户数据带填充写入nand型闪存5。由此,cpu12能够在由主机2期待的时间内,通知针对写指令的第二次的完成。
283.(主机2中的基于来自存储系统3的响应的处理)
284.图21是表示由主机2的cpu21执行的响应接收处理的步骤的例子的流程图。响应接收处理是基于从存储系统3接收到的响应(完成)的处理。cpu21根据接收到由存储系统3发出的中断这一情况,执行响应接收处理。
285.首先,cpu21从完成队列244取得完成(步骤s501)。cpu21取得所取得的完成所包括的指令id(步骤s502)。然后,cpu21在锁定数据列表245中确定与所取得的指令id对应的条目(步骤s503)。
286.cpu21使用所确定的条目,判定接收到的完成是否是第一次的完成(步骤s504)。具体而言,cpu21例如在作为所确定的条目内的完成状态而没有被设定任何值的情况下,判断为接收到的完成是第一次的完成。另外,cpu21在作为所确定的条目内的完成状态而被设定了对已接收到第一次的完成这一情况进行表示的值的情况下,判断为接收到的完成是第二次的完成。
287.在接收到的完成是第一次的完成的情况下(步骤s504,是),cpu21对在针对完成分配序列编号时使用的变量cseq加上1(即递增)(步骤s505)。然后,cpu21使用变量cseq对所确定的条目进行更新(步骤s506),并结束响应接收处理。具体而言,cpu21追加(设定)由变量cseq所表示的序列编号作为所确定的条目内的完成顺序。由此,对接收到的完成分配由变量cseq表示的序列编号。另外,cpu21追加对已接收到第一次的完成这一情况进行表示的
值,作为所确定的条目内的完成状态。
288.在接收到的完成是第二次的完成的情况下(步骤s504,否),cpu21解除与所取得的指令id建立关联的数据缓冲器242内的用户数据的锁定(步骤s507)。应用或os221在数据缓冲器242的锁定被解除后,删除用户数据71。cpu21例如能够使用所确定的条目内的数据管理区域信息,确定应解除锁定的数据缓冲器242内的用户数据。在用户数据的锁定被解除的情况下,删除该用户数据。即,存储有该用户数据的数据缓冲器242内的存储区域(即nvram24内的存储区域)被释放。然后,cpu21从锁定数据列表245中删除所确定的条目(步骤s508),并结束响应接收处理。
289.通过以上的响应接收处理,cpu21能够根据接收到的完成是针对对应的写指令的第一次的完成还是第二次的完成,进行不同的处理。即,在接收到的完成是第一次的完成的情况下,cpu21在对应的锁定数据列表245内的条目中追加分配给该完成的序列编号cseq和对已接收到第一次的完成这一情况进行表示的信息。另外,在接收到的完成是第二次的完成的情况下,cpu21从nvram24中删除对应的用户数据(即,写入完成的用户数据)和对应的锁定数据列表245内的条目。
290.接下来,将参照图22及图23对解绑处理进行说明。解绑处理是用于强制地使存储系统3从虚拟plp驱动模式转移为通常驱动模式的处理。在此,假定存储系统3相对于主机2以虚拟plp驱动模式进行动作。在以虚拟plp驱动模式进行动作的存储系统3中,在nand型闪存5中保存有主机2的主机id和表示虚拟plp驱动模式的第一模式信息52。
291.(主机2中的解绑处理)
292.图22是表示由主机2的cpu21执行的解绑处理的步骤的例子的流程图。cpu21在主机2或存储系统3异常结束后启动的情况下,或者在存储系统3无意图地重启的情况下,能够执行解绑处理。
293.首先,cpu21将第一模式解除指令发送至存储系统3(步骤s601)。第一模式解除指令是请求从虚拟plp驱动模式转移为通常驱动模式的指令。然后,cpu21从nvram24删除虚拟plp驱动器id241(步骤s602)。另外,cpu21也可以在从存储系统3接收到表示向通常驱动模式的转移已完成的响应的情况下,从nvram24删除虚拟plp驱动器id241。
294.通过以上的解绑处理,cpu21能够使在虚拟plp驱动模式下动作的存储系统3转移为通常驱动模式。
295.(存储系统3中的解绑处理)
296.图23是表示由存储系统3的cpu12执行的解绑处理的步骤的例子的流程图。cpu12根据从主机2接收到第一模式解除指令这一情况,执行解绑处理。
297.cpu12基于从主机2接收到的第一模式解除指令,使存储系统3从虚拟plp驱动模式转移为通常驱动模式(步骤s701)。更详细而言,cpu12将保存在nand型闪存5中的第一模式信息52更新为表示通常驱动模式。然后,cpu12从nand型闪存5中删除虚拟plp主机id51(步骤s702)。
298.通过以上的解绑处理,cpu12能够基于从主机2接收到的第一模式解除指令,使存储系统3从虚拟plp驱动模式转移为通常驱动模式。
299.接着,参照图24以及图25,对存储系统3的动作正常结束的情况下的关闭处理进行说明。
300.(主机2中的关闭处理)
301.图24是表示由主机2的cpu21执行的关闭处理的步骤的例子的流程图。cpu21在向存储系统3请求动作结束之前,执行关闭处理。
302.首先,cpu21将闪存指令保存到提交队列243中(步骤s801)。
303.接着,cpu21执行响应接收处理(步骤s802)。关于响应接收处理的具体的步骤,如参照图21所述的那样。然后,cpu21使用锁定数据列表245,判定针对所发出的全部的写指令是否接收到第二次的完成(步骤s803)。cpu21在锁定数据列表245中一个条目都没有包括的情况下,判断为针对所发出的全部的写指令接收到第二次的完成。cpu21在锁定数据列表245中包括至少1个条目的情况下,判断为所发出的写指令中的至少1个写指令未接收到第二次的完成。
304.在针对所发出的写指令中的至少1个指令未接收到第二次的完成的情况下(步骤s803,否),cpu21的处理返回到步骤s802。即,cpu21继续进行用于从存储系统3接收针对所发出的写指令的完成的处理。
305.在针对所发出的全部写指令接收到第二次的完成的情况下(步骤s803,是),cpu21从nvram24中删除虚拟plp驱动器id241和锁定数据列表245(步骤s804)。然后,cpu21将关闭命令发送至存储系统3(步骤s805)。
306.通过以上的关闭处理,cpu21在接收到针对存储系统3发出的全部写指令的第二次的完成之后,能够向存储系统3发送关闭命令。即,cpu21能够在完成与全部的写指令对应的用户数据的写入之前,以存储系统3不结束动作的方式(即,不异常结束的方式)进行控制。
307.(存储系统3中的关闭处理)
308.图25是表示由存储系统3的cpu12执行的关闭处理的步骤的例子的流程图。cpu12按照主机2的请求(更详细地说,闪存指令、关闭命令等),执行关闭处理。
309.首先,cpu12从提交队列243取得闪存指令(步骤s901)。cpu12根据所取得的闪存指令,从主机2的数据缓冲器242向存储系统3的nand型闪存5传送与已受理的写指令对应的未写入的用户数据(步骤s902)。cpu12将传送的用户数据带填充写入nand型闪存5(步骤s903)。
310.后续的步骤s904至步骤s908的步骤与参照图20所述的写入控制处理的s407至s411的步骤相同。即,cpu12进行用于将针对与写入的用户数据对应的全部的写指令的第二次的完成保存到完成队列244的处理。
311.然后,在将针对与写入的用户数据对应的全部的写指令的第二次的完成保存到完成队列244中的情况下(步骤s908中,是),cpu12从主机2接收关闭命令(步骤s909)。cpu12基于关闭命令,使存储系统3从虚拟plp驱动模式转移为通常驱动模式(步骤s910)。更详细而言,cpu12将保存在nand型闪存5中的第一模式信息52更新为表示通常驱动模式。另外,cpu12删除被保存在nand型闪存5中的虚拟plp主机id51(步骤s911)。然后,cpu12结束存储系统3的动作(步骤s912)。
312.通过以上的关闭处理,cpu12能够根据从主机2接收到的闪存指令,完成与对存储系统3发出的全部写指令对应的用户数据的写入。然后,cpu12能够在将针对这些全部的写指令的第二次的完成保存到完成队列244之后,结束存储系统3的动作。即,cpu12能够控制存储系统3,以使得在完成与全部的写指令对应的用户数据的写入之前,存储系统3的动作
不结束(即,不异常结束)。
313.此外,如上所述,cpu12也可以在从受理写指令起经过的时间超过了阈值的情况下,将与已受理的写指令对应的用户数据带填充写入到nand型闪存5。在该情况下,cpu12在由主机2期待的时间内,通知针对写指令的第二次的完成,因此主机2的cpu21也可以不进行在关闭处理中将闪存指令保存到提交队列243的步骤(相当于图24的步骤s801)。
314.接着,参照图26至图28,对启动处理进行说明。启动处理是用于判断存储系统3因在本次即将启动之前异常结束或者无意图地重启而无法完成的用户数据的写入的有无,并使无法完成的用户数据的写入恢复的处理。
315.(主机2中的启动处理)
316.图26是表示由主机2的cpu21执行的启动处理的步骤的例子的流程图。cpu21在存储系统3被启动而与主机2连接的情况下,执行启动处理。
317.cpu21判定nvram24中是否存储了虚拟plp驱动器id241(步骤s1001)。例如,在存储系统3在本次即将启动之前异常结束的情况下、以及在存储系统3非意图地重启的情况下,可能在nvram24中保存有虚拟plp驱动器id241。
318.在nvram24中没有保存虚拟plp驱动器id241(步骤s1001中,否)的情况下,cpu21针对nvram24制作提交队列243和完成队列244(步骤s1002)。即,cpu21将nvram24内的存储区域分配为提交队列243和完成队列244。然后,cpu21开始受理来自应用程序的新i/o请求(步骤s1003),结束启动处理。
319.在nvram24中保存有虚拟plp驱动器id241的情况下(步骤s1001中,是),cpu21取得与主机2连接的存储系统3的驱动器id(步骤s1004)。cpu21确定所取得的驱动器id与保存在nvram24中的虚拟plp驱动器id241是否一致(步骤s1005)。
320.在所取得的驱动器id与保存在nvram24中的虚拟plp驱动器id241不同的情况下(步骤s1005中,否),cpu21结束启动处理。即,所连接的存储系统3与使相对于主机2以虚拟plp驱动模式进行动作的存储系统不同,因此cpu21结束启动处理。此外,在主机2和存储系统3中,也可以参照图17以及图18进行前述的绑定处理。在该情况下,能够使存储系统3相对于主机2重新以虚拟plp驱动模式进行动作。
321.在所取得的驱动器id与保存在nvram24中的虚拟plp驱动器id241一致的情况下(步骤s1005,是),cpu21判定在与所取得的驱动器id建立关联的锁定数据列表245中是否存在对接收到第一次的完成进行表示的条目(步骤s1006)。
322.在锁定数据列表245中不存在对接收到第一次的完成这一情况进行表示的条目的情况下(步骤s1006,否),cpu21针对nvram24制作提交队列243和完成队列244(步骤s1002)。然后,cpu21开始受理来自应用的新i/o请求(步骤s1003),结束启动处理。
323.当在锁定数据列表245中存在对接收到第一次的完成这一情况进行表示的条目的情况下(步骤s1006中,是),cpu21针对nvram24制作提交队列243和完成队列244(步骤s1007)。cpu21将第二模式转移指令发送至存储系统3(步骤s1008)。第二模式转移指令是用于使存储系统3从通常写入模式转移为恢复写入模式的指令。然后,cpu21执行恢复写入请求处理(步骤s1009)。恢复写入请求处理是用于向存储系统3请求如下用户数据的写入的处理,该用户数据是与对接收到第一次的完成这一情况进行表示的1个以上的锁定数据列表245的条目分别对应的用户数据。更详细而言,在恢复写入请求处理中,与对接收到第一次
的完成这一情况进行表示的1个以上的锁定数据列表245的条目分别对应的写指令被保存到提交队列243。关于恢复写入请求处理的具体的步骤,参照图27在后面叙述。
324.接着,cpu21执行响应接收处理(步骤s1010)。在响应接收处理中,进行与针对从存储系统3接收到的写指令的第一次的完成或第二次的完成对应的处理。关于响应接收处理的具体的步骤,如参照图21所述的那样。
325.然后,cpu21针对所发出的全部的写指令,判定是否接收到第二次的完成(步骤s1011)。所发出的全部写指令是在步骤s1009的恢复写入请求处理中发出的全部写指令。
326.在针对发出的全部的写指令中的至少1个写指令未接收到第二次的完成的情况下(步骤s1011,否),cpu21的处理返回到步骤s1010。即,cpu21继续进行用于从存储系统3接收针对所发出的写指令的完成的处理。
327.在针对所发出的全部的写指令接收到第二次的完成的情况下(步骤s1011,是),cpu21将第二模式解除指令发送至存储系统3(步骤s1012)。第二模式解除指令是用于使存储系统从恢复写入模式转移为通常写入模式的指令。然后,cpu21开始受理来自应用程序的新i/o请求(步骤s1013),结束启动处理。
328.通过以上的启动处理,cpu21能够向存储系统3再次请求由于存储系统3在本次即将启动之前异常结束,或者由于存储系统3非意图地重启而向存储系统3的nand型闪存5的写入未完成的用户数据的写入。更详细而言,cpu21基于锁定数据列表245内的对接收到第一次的完成这一情况进行表示的条目,发出写指令,并保存到提交队列243。由此,cpu21能够向存储系统3请求用户数据的写入。
329.另外,cpu21也可以在步骤s1011中,代替判定是否针对所发出的全部的写指令而接收到第二次的完成,而判定是否针对所发出的全部的写指令判定是而接收到第一次的完成。cpu21在针对所发出的全部的写指令而接收到第一次的完成的情况下,能够判断为恢复了因存储系统3在本次即将启动之前异常结束或者非意图地重启而无法完成的用户数据的写入。在该情况下,cpu21根据针对已发出的全部写指令而接收到第一次的完成这一情况,将第二模式解除指令发送至存储系统3,并且开始受理来自应用的新i/o请求。
330.图27是表示由主机2的cpu21执行的恢复写入请求处理的步骤的例子的流程图。恢复写入请求处理相当于参照图26所述的启动处理的步骤s1009。
331.首先,cpu21从锁定数据列表245中按照完成顺序的升序而取得分别对已接收到第一次的完成这一情况进行表示的n个条目(步骤s1101)。n为1以上的整数。然后,cpu21对变量i设定1(步骤s1102)。变量i用于确定按照完成顺序的升序排列的n个条目中的1个。以下,将按照完成顺序的升序排列的n个条目中的第i个条目称为第i条目。
332.cpu21使用第i条目的数据区域管理信息,锁定对应的数据缓冲器242内的用户数据(步骤s1103)。更详细而言,cpu21使用第i条目的数据区域管理信息,确定存储有用户数据的数据缓冲器242内的存储区域。然后,cpu21使用所执行的os221的功能,锁定所确定的存储区域。
333.接着,cpu21发出基于第i条目的sq条目的信息的写指令(以下,称为第i写指令)(步骤s1104)。cpu21将第i写指令保存到提交队列243(步骤s1105)。cpu21在第i条目中,删除分别被设定为完成顺序和完成状态的值(步骤s1106)。即,cpu21在发出了对应的写指令之后,更新第i条目,以对还未接收到第一次的完成这一情况进行表示。然后,cpu21对变量i
加1(步骤s1107)。
334.接着,cpu21判定变量i是否为n以下(步骤s1108)。在变量i为n以下的情况下(步骤s1108中,是),cpu21的处理返回到步骤s1103。即,cpu21还进行用于向存储系统3发送基于对接收到第一次的完成这一情况进行表示的其他条目的写指令的处理。
335.在变量i超过了n的情况下(步骤s1108中,否),cpu21结束恢复写入请求处理。
336.通过以上的恢复写入请求处理,cpu21能够向存储系统3请求因存储系统3本次即将启动之前异常结束或者非意图地重启而无法完成的用户数据的写入。具体而言,cpu21能够使用锁定数据列表245,将与对已接收到第一次的完成这一情况进行表示的n个条目分别对应的写指令经由提交队列243发送至存储系统3。
337.(存储系统3中的启动处理)
338.图28是表示由存储系统3的cpu12执行的启动处理的步骤的例子的流程图。cpu12在存储系统3启动并确立了与主机2的连接的情况下,执行启动处理。
339.首先,cpu12向主机2通知驱动器id(步骤s1201)。驱动器id可以在用于确立存储系统3与主机的连接的处理中通知给主机2。
340.接着,cpu12取得被保存在nand型闪存5中的第一模式信息52(步骤s1202)。第一模式信息52表示存储系统3是通常驱动模式和虚拟plp驱动模式中的哪一个。cpu12判定所取得的第一模式信息52是否表示虚拟plp驱动模式(步骤s1203)。
341.在所取得的第一模式信息52未表示虚拟plp驱动模式的情况下(步骤s1203,否),即表示通常驱动模式的情况下,cpu12结束启动处理。在第一模式信息52表示通常驱动模式的情况下,cpu12判断为不存在因存储系统3在本次即将启动之前异常结束或者非意图地重启而无法完成的用户数据的写入。因此,cpu12结束启动处理,受理主机2对存储系统3的访问。
342.在所取得的第一模式信息52表示虚拟plp驱动模式的情况下(步骤s1203,是),cpu12判定是否从主机2接收到第一模式解除指令(步骤s1204)。第一模式解除指令是用于使存储系统3从虚拟plp驱动模式转移为通常驱动模式的指令。
343.在从主机2接收到第一模式解除指令的情况下(步骤s1204,是),cpu12使存储系统3从虚拟plp驱动模式转移为通常驱动模式(步骤s1205)。然后,cpu12删除nand型闪存5中保存的虚拟plp主机id51(步骤s1206),结束启动处理。由此,在转移为通常驱动模式的存储系统3中,cpu12受理主机2对存储系统3的访问。
344.在没有从主机2接收到第一模式解除指令的情况下(步骤s1204,否),cpu12判定是否从主机2接收到第二模式转移指令(步骤s1207)。第二模式转移指令是用于使存储系统3从通常写入模式转移为恢复写入模式的指令。在存储系统3转移为恢复写入模式的情况下,cpu12按照受理的顺序对从主机2受理的写指令(即,从提交队列243取得的写指令)进行处理。即,cpu12保证按照受理顺序来保证执行与写指令相应的写入处理。
345.在没有从主机2接收到第二模式转移指令的情况下(步骤s1207中,否),cpu12结束启动处理。例如,在存储系统3在本次即将启动之前异常结束或者非意图地重启,但不存在向nand型闪存5的写入未完成的用户数据的情况下,cpu12结束启动处理。因此,在以虚拟plp驱动模式进行动作的存储系统3中,cpu12受理主机2对存储系统3的访问。
346.在从主机2接收到第二模式转移指令的情况下(步骤s1207,是),cpu12使存储系统
3从通常写入模式转移为恢复写入模式(步骤s1208)。然后,cpu12执行写入控制处理(步骤s1209)。cpu12在写入控制处理中,从主机2受理写指令,控制与已受理的写指令对应的用户数据的写入。关于写入控制处理的具体的步骤,如参照图20所述的那样。
347.接着,cpu12判定是否从主机2接收到第二模式解除指令(步骤s1210)。
348.在没有从主机2接收到第二模式解除指令的情况下(步骤s1210,否),cpu12的处理返回到步骤1209。即,cpu21继续进行写入控制处理,直到从主机2接收到第二模式解除指令为止。
349.在从主机2接收到第二模式解除指令的情况下(步骤s1210,是),cpu12使存储系统3从恢复写入模式转移为通常写入模式(步骤s1211),并结束启动处理。由此,在转移为通常写入模式的存储系统3中,cpu12受理主机2对存储系统3的访问。
350.通过以上的启动处理,在存在因存储系统3在本次即将启动之前存在异常结束或者非意图地重启而无法完成的用户数据的写入的情况下,cpu12能够恢复无法完成的用户数据的写入。
351.在此,对在存储系统3中未设置用于以恢复写入模式进行动作的结构的情况下的恢复写入请求处理以及写入控制处理进行说明。在该情况下,在存储系统3中,在从主机2受理了多个写指令的情况下,有可能无法保证按照接收顺序执行与写指令相应的写入处理。
352.因此,主机2在将指定的lba(或lba范围)重复的多个写指令发送至存储系统3的情况下,例如,在将这多个写指令的1个保存在提交队列243中之后,将闪存指令保存在提交队列243中。具体而言,主机2反复进行如下动作:等待针对闪存指令的完成的接收,并将下一个写指令保存到提交队列243中。存储系统3进入如下处理:按照闪存指令的返回完成的顺序,进行将在接收闪存指令之前接收到的写指令的数据写入nand型闪存5的处理。由此,在存储系统3中,能够保证按照写指令的受理顺序来执行与指定同一lba的多个写指令分别对应的写入处理。
353.本实施方式的存储系统3支持恢复写入模式,因此主机2仅通过在提交队列243中按希望处理的顺序装载写指令,就能够高速地进行恢复处理。
354.图29是表示由主机2的cpu21执行的、使用了闪存指令的情况下的恢复写入请求处理的步骤的例子的流程图。步骤s1301至步骤s1305的步骤与参照图27所述的恢复写入请求处理的步骤s1101至步骤s1105的步骤相同。即,cpu21从锁定数据列表245中按照完成顺序的升序而取得分别对已接收到第一次的完成这一情况进行表示的n个条目。cpu21基于第i条目,锁定对应的数据缓冲器242内的用户数据,发出对应的写指令(第i写指令)并保存到提交队列243。
355.接着,cpu21参照n个条目,判定在第i写指令之后,是否发出指定的lba(或lba范围)与第i写指令重复的其他写指令(步骤s1306)。具体而言,cpu21例如判定在n个条目中是否包括如下条目,即,包括与第i条目的完成顺序相比更大的完成顺序、且包括与用于指定与第i写指令相同的lba的写指令对应的sq条目信息的条目。
356.在第i写指令之后,在被指定的lba与第i写指令重复的其他写指令被发出的情况下(步骤s1306,是),cpu21发出闪存指令并保存到提交队列243(步骤s1307),cpu21的处理进入到步骤s1308。在提交队列243中,在第i写指令之后存储有闪存指令。由此,在存储系统3中,能够根据后续的闪存指令来完成与第i写指令对应的用户数据的写入处理。因此,在存
储系统3中,能够保证按照写指令的受理顺序来执行与指定同一lba的多个写指令分别对应的写入处理。
357.在第i写指令之后,在未发出被指定的lba与第i写指令重复的其他写指令的情况下(步骤s1306,否),cpu21的处理进入到步骤s1308。
358.后续的步骤s1308至步骤s1310的步骤与参照图27所述的恢复写入请求处理的步骤s1106及步骤s1108的步骤相同。
359.通过以上的恢复写入请求处理,cpu21在将被指定的lba重复的多个写指令向存储系统3发送的情况下,在将这多个写指令中的1个保存到提交队列243之后,将闪存指令保存到提交队列243。由此,在存储系统3中,能够保证按照写指令的受理顺序来执行与指定同一lba的多个写指令分别对应的写入处理。
360.图30是表示由存储系统3的cpu12执行的、使用了闪存指令的情况下的写入控制处理的步骤的例子的流程图。在此,为了容易理解说明,例示被保存在提交队列243中的指令仅是写指令和闪存指令的情况。
361.首先,cpu12从提交队列243中取得指令(步骤s1401)。然后,cpu12判定所取得的指令是写指令和闪存指令中的哪一个(步骤s1402)。
362.在所取得的指令是写指令的情况下(步骤s1402中为写指令),cpu12执行从步骤s1403到步骤s1412的步骤,结束写入控制处理。步骤s1403至步骤s1412的步骤与参照图20所述的写入控制处理的步骤s402至步骤s411的步骤相同。
363.在所取得的指令是闪存指令的情况下(步骤s1402中为闪存指令),cpu12从主机2的数据缓冲器242向存储系统3的nand型闪存5转送与已受理的写指令对应的未写入的用户数据(步骤s1413)。cpu12将被传送的用户数据带填充写入nand型闪存5(步骤s1414)。然后,cpu12执行从步骤s1408到s1412的步骤,结束写入控制处理。步骤s1408至步骤s1412的步骤与参照图20所述的写入控制处理的步骤s407至步骤s411的步骤相同。
364.通过以上的写入控制处理,cpu12从主机2受理写指令,在进行与已受理的写指令对应的写入处理的情况下,如果受理了闪存指令,则将在主机2的数据缓冲器242中保存的未写入的用户数据带填充写入到nand型闪存5。主机2在将指定的lba重复的多个写指令发送至存储系统的情况下,在刚将这多个写指令的1个保存在提交队列243中之后,将闪存指令保存在提交队列243中。由此,cpu12能够根据后续的闪存指令来完成分别与指定同一lba的多个写指令对应的写入处理。因此,在存储系统3中,能够保证按照写指令的受理顺序来执行与指定同一lba的多个写指令分别对应的写入处理。
365.如以上说明那样,根据本实施方式,能够恢复针对异常结束或非意图地重启的对存储系统3的未完成的写入。写管理部212将第一数据保存在nvram24中。写管理部212以及指令发出部211进行讲与第一数据建立关联的第一写入请求(例如,写指令)向存储系统3的第一次的发送。写管理部212将包括与第一写入请求相当的信息在内的第一管理数据(例如,锁定数据列表245的条目)保存在nvram24中。写管理部212根据从存储系统3接收到针对第一次被发送的第一写入请求的第一响应,将对已接收到针对第一次被发送的第一写入请求的第一响应这一情况进行表示的信息追加到第一管理数据。写管理部212在接收到第一响应之后,根据从存储系统3接收到针对第一次被发送的第一写入请求的第二响应这一情况,从nvram24删除第一数据和第一管理数据。
366.这样,主机2将应写入nand型闪存5的第一数据、和对从主机2向存储系统3第一次被发送的写指令的处理状况进行管理的第一管理数据保存在nvram24中。由此,例如,在存储系统3不具有能够通过plp功能保护第一数据的缓冲器的情况下,即使发生了异常结束或不希望的再启动,也能够使用被保存在nvram24中的第一数据和第一管理数据,恢复未完成的写入。
367.本实施方式的说明所记载的各种功能分别也可以通过电路(处理电路)来实现。在处理电路的例子中,包括中央处理装置(cpu)那样的可编程的处理器。该处理器通过执行被保存在存储器中的计算机程序(命令组),分别执行本实施方式的说明所记载的功能。该处理器也可以是包括电路的微处理器。在处理电路的例子中,也包括数字信号处理器(dsp)、面向特定用途的集成电路(asic)、微控制器、控制器、其他电气电路部件。本实施方式的说明中记载的cpu以外的其他组件各自也可以通过处理电路来实现。
368.对本发明的几个实施方式进行了说明,但这些实施方式是作为例子而提示的,并不意图限定发明的范围。这些新的实施方式能够以其他各种方式实施,在不脱离发明的主旨的范围内,能够进行各种省略、置换、变更。这些实施方式及其变形包括在发明的范围或主旨内,并且包括在权利要求书所记载的发明及其等同的范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献