具有raid1类型的raid组的存储装置以及向raid1类型的raid组的写入的控制方法

文档序号:6351242阅读:167来源:国知局
专利名称:具有raid1类型的raid组的存储装置以及向raid1类型的raid组的写入的控制方法
技术领域
本发明涉及存储控制装置,特别是涉及向RAIDl类型的RAID (Redundant Arrayof Independent (or Inexpensive) Disks)组的写入的控制。
背景技术
存储装置(例如磁盘阵列装置)一般具有多个HDD(硬盘驱动器Hard Disk Drive)和用于控制向多个HDD的访问的控制器(以下将磁盘控制器简称为“DKC”)。在这种存储装置中通常有由多个HDD构成的一个以上的RAID组。DKC按照RAID组的RAID等级访问RAID组。作为RAID等级,例如有RAID I (专利文献I)。应用了 RAIDl的RAID组由主HDD和镜像HDD构成。DKC从主装置接收写对象数据,将写对象数据二重化。然后,DKC将二重化后的数据中的一方的数据写入到一方的HDD (以下称为主HDD),将另一方的数据写入到另一方的HDD (以下称为镜像HDD)。现有技术文献专利文献专利文献I :日本特开2009-217519号公报

发明内容
发明要解决的问题一般来说,HDD提供的存储区域由多个子存储区域(以下称为“块”)构成,以块大小单位将数据写入到HDD中。根据HDD的种类,有时HDD的写入单位的大小与针对HDD的写入对象数据的单位大小不同。例如,作为HDD 有 SATA (Serial ATA (Advanced Technology Attachment))_HDD。如图IA所示,SATA-HDD的写入单位(I个块ElO的大小)是512B (字节)。如图IB所示,这与来自主装置的一个数据要素DlO的大小(512B)相同(来自主装置的写入对象数据由一个以上的数据要素构成,图示的数据要素DlO是这些一个以上的数据要素中的一个)。但是,如图IB所示,DKC从提高可靠性的观点出发,向数据要素DlO附加保证码(例如ECC (Error Correcting Code))Dll。保证码Dll的大小例如是8B (字节)。由此,生成520B的数据集(dataset)Dl。因此,DKC写入到SATA-HDD的数据集Dl的大小(写入对象数据的单位大小)比SATA-HDD的写入单位的大小(I个块的大小)大8B的量。因此,数据集Dl没有被收纳在SATA-HDD的一个块中,如图2A所示,跨越两个块ElO 以及 E11。在这种情况下,为了以SATA-HDD的写入单位写入数据,如图2B所示,需要通过对数据集Dl附加数据,生成与成为数据集Dl的写入目的地的两个块ElO以及Ell的合计大 小相同的数据大小的数据单元F1。为了生成该数据单元Fl,DKC进行下面的处理。
(*)DKC将块ElO中的、在没有被写入数据集Dl的部分存储的开头侧的数据El读出,将该数据El附加到数据集Dl的开头。(*)DKC将块Ell中的、在没有被写入数据集Dl的部分存储的末端侧的数据E2读出,将该数据E2附加到数据集Dl的末端。 S卩,为了生成数据单元F1,从SATA-HDD的读出最多需要2次。这存在提高了 DKC以及SATA-HDD的各自的负荷的问题。并且,在由SATA-HDD构成RAID组,并且RAID等级为RAIDl的情况下该问题特别大。这是因为最多两次的读出是针对两个HDD (主HDD和镜像HDD)的各自来进行的。以下进行具体说明。另外,在以下的说明中,为了方便,将为了生成数据单元而读出并附加到数据集的数据称为“附加数据”。如图3所示,存储装置IA具有RAID组20和DKC10。DKClO具有前端接口装置(FE-IF)Il和高速缓冲存储器12。FE-IF是针对主装置30的通信接口装置。RAID组20其RAID等级是RAIDl,因此是主HDD21和镜像HDD22的对。HDD21以及22都是SATA-HDD。如图3的箭头a所示,FE-IF 11从主装置30接收数据要素。该数据要素被存储在高速缓冲存储器12中。DKClO通过对该数据要素附加保证码(例如ECC),生成数据集Dl。然后,DKClO如图3的箭头bl以及b2所示,生成两个数据集Dl的副本。S卩,生成主(master)用数据集D2和镜像(mirror)用数据集D3。然后,DKClO针对主HDD21以及镜像HDD22的各个进行两次读出,即进行合计四次的读出。具体来说,如图3的箭头Cl以及c2所示,DKClO从主HDD21读出附加数据El以及E2,将读出的附加数据El以及E2加到主用数据集D2。由此生成主用数据单元Fl。此外,如图3的箭头c3以及c4所示,DKClO从镜像HDD22读出附加数据E3以及E4,并将读出的附加数据E3以及E4加到镜像用数据集D2。由此,生成镜像用数据单元F2。DKClO如图4的箭头dl所示,将生成的数据单元Fl写入主HDD21,并且如图4的箭头d2所示,将生成的数据单元F2写入镜像HDD22。根据上述的流程,如上所述最多进行四次读出。当数据的读出次数多时,SATA-HDD以及DKClO的双方的负荷变大。于是,存储装置I的处理性能下降。这种情况并不限于RAID1,对于RAIDl类型以外的RAID等级也可能存在。例如在RAIDlO (也被称为“RAID1+0”)的情况下,在一个RAID组中存在多个主HDD和镜像HDD的组,因此,与RAIDl的情况相比,认为上述问题的影响更大。此外,上述问题不限于SATA-HDD,对于写入单位与作为写入对象的数据的单位大小不同的其它种类的物理存储设备也可能存在。因此,本发明的目的在于提高写入对象数据的单位大小和构成RAIDl类型的RAID组的物理存储设备的写入单位的大小不同的存储装置的处理性能。用于解决课题的手段存储装置具备由多个物理存储设备构成的RAID (Redundant Array ofIndependent (or Inexpensive) Disks)组、和按照 RAID 组的 RAID 等级来控制向 RAID 组的数据写入以及从RAID组的数据读出的控制器。RAID组是具有一个以上第一存储设备和第二存储设备的对的RAIDl类型的RAID组。写入对象数据的单位大小与存储设备的写入单位的大小不同。存储设备提供的存储区域由多个存储块构成。各存储块的大小与存储设备的写入单位的大小相同。控制器从第一存储设备中的、包含写入对象数据的写入目的地的第一存储块群的全部区域读出数据。控制器根据写入对象数据和作为该读出的数据的缓冲数据生成一个以上数据单元,该数据单元由写入对象数据或者其副本和缓冲数据部分或其副本构成,是与第一存储块群相同大小的数据。控制器将一个以上的数据单元中的某一个数据单元写入第一存储设备中的第一存储块群,并且将一个以上的数据单元中的某一个数据单元写入第二存储设备中的、与第一存储块群对应并与其大小相同的第二存储块群。写入对象数据,例如可以是对来自主装置的数据附加了其他数据(例如保证码)的数据,也可以是来自主装置的数据本身。主装置是存储装置的外部的装置。


图IA是表示构成HDD的一个块的大小的图。图IB是表示DKC写入到HDD的数据 集的大小的图。图2A表示DKC写入到HDD的数据集的大小比一个块的大小大。图2B是用于说明为了生成与两个块的合计大小相同大小的数据单元而进行的现有处理的图。图3表示针对RAIDl的RAID组的现有的写入处理的一部分。图4表示上述现有的写入处理的剩余部分。图5表示在本发明的一个实施例中针对RAIDl的RAID组进行的写入处理的第一部分。图6表示本实施例的上述写入处理的第二部分。图7表示本实施例的上述写入处理的第三部分。图8表示本实施例的上述写入处理的剩余部分。图9表示本实施例的计算机系统的结构。图IOA表不段和段表的关系。图IOB表不段表的结构。图11是表示当将连续的多个520B的高速缓冲存储块和连续的多个512B的SATA块并排排列时每32kB边界一致的图。图12A表示段群W中的段群W中的中间脏数据的配置的第一例。图12B表示段群W中的段群W中的中间脏数据的配置的第二例。图12C表示段群W中的中间脏数据的配置的第三例。图12D表示段群W中的中间脏数据的配置的第四例。图12E表示段群W中的中间脏数据的配置的第五例。图13A表示与图12A所示的例子对应的缓冲数据读出。图13B表示与图12B所示的例子对应的缓冲数据读出。图13C表示与图12C所示的例子对应的缓冲数据读出。图13D表示与图12D所示的例子对应的缓冲数据读出。图13E表示与图12E所示的例子对应的缓冲数据读出。图14是表示本实施例的针对RAIDl的RAID组的写入处理流程的一部分的流程图。图15是表示本实施例的所述写入处理的剩余部分的流程图。图16表示图14以及图15的流程图的步骤40广411中的各步骤的段表。图17表示图12的流程图的步骤412 416中的各步骤的段表。图18是高速缓存间复制的说明图。
具体实施方式
以下说明本发明的一个实施例。此外,在实施例中为了容易理解说明而采用了下述的例子。(*)物理存储装置是HDD。控制器是用于控制对HDD的访问的磁盘控制器(以下称为 DKC)。(*) RAID组的RAID等级是RAIDl。RAID组是主HDD以及镜像HDD的对。 (* )主HDD以及镜像HDD各自是SATA-HDD。(*)将构成由SATA-HDD提供的存储区域的各子存储区域称为“块”。(*)块的大小是512B (字节)。(*)构成由DKC从主装置接收到的数据的各数据要素的大小是512B (字节)。数据要素的大小是从主装置提供给存储装置的数据的最小的大小。(*)保证码(例如 ECC (Error Correcting Code)的大小是 8B (字节)。在本实施例中,在针对RAIDl的RAID组的写入处理中,可以不需要从主HDD以及镜像HDD中的一方的数据的读出,并且能够将从RAID组的数据的读出的次数设为最多I次。以下,参照图5 图8说明该写入处理的概要。此外,在以下的说明中,设本实施例的存储装置IB内的DKC100具有高速缓冲存储器120,高速缓冲存储器120由多个段(segment)构成,将存储与主装置300交换的数据的段的属性称为写入(write)面(以下称为W面),将存储与主HDD210以及镜像HDD220交换的数据的段的属性称为读出(read)面(以下称为R面)。此外,假设DKC100从主装置300接收到的数据由一个数据要素构成。首先,DKC100如图5的箭头a01所示,从主装置300接收写入请求以及该写入要求所附带的数据要素D21。DKC100如箭头alO所示,将来自主装置300的数据要素D21存储在段中(存储了数据要素D21的段的属性成为W面)。然后,DKC100如图5的箭头a02所示,向主装置300发送应答(例如写入结束)。然后,DKC100对所存储的数据要素D21追加保证码(例如ECC( (Error CorrectingCode))D22,生成数据集D20。数据集D20的大小是520B (521B+8B)。数据集D20是作为写入对象的数据。然后,DKC100如图5的箭头blO所示,从主HDD210 (或者镜像HDD220)中的、包含数据集D20的写入目的地的块群(在此为两个块)的全部区域中读出数据E20,将该数据E20存储到段中(存储了数据E20的段的属性成为R面)。从HDD的数据的读出仅为这一次。以下,将从HDD读出到高速缓冲存储器120的数据称为“缓冲数据(staging data)”。然后,DKClOO如图6的箭头clO所示,将数据集D20写入到缓冲数据E20上,并且如图6的箭头cll所示,将数据集D20复制到其他段。根据图6,为了区别原始数据集D20和数据集D20的副本,对作为数据集D20的副本的数据集分别赋予参照符号D30、D40。存储了数据集D40的段的属性成为R面。因为是与HDD交换数据集D40。通过在缓冲数据E20上重写数据集D20而生成的数据单元FlO是主HDD210用的数据。DKC100如图7的箭头dlO以及dll所示,将数据单元FlO中的缓冲数据部分E21以及E22加到数据集D40中。由此生成镜像HDD220用数据单元F20。数据单元F20是与数据单元FlO —致的数据。
然后,DKClOO如图8的箭头elO所示,将数据单元FlO写入主HDD210,如图8的箭头ell所示,将数据单元F20写入镜像HDD220。如上所述,在按照本实施例的对RAIDl的RAID组的写入处理中,不需要从主HDD210以及镜像HDD22中的一方读出数据,并且从RAID组200的数据的读出次数最多为一
次即可。在上述的写入处理中,数据单元F20可以是数据单元FlO的副本,但是理想的是如上述那样进行生成。这是因为在复制数据单元FlO时发生任何故障的情况下,生成的数据单元F20有可能成为与数据单元FlO不同的数据。此外,在上述的写入处理中,缓冲数据E20 (读出源的块群)的大小是数据集Dl的大小以上,并且是SATA-HDD的写入单位的大小的倍数即可,但是优选是在该范围内最小的大小。这是为了抑制高速缓冲存储器120的消耗。在上述的例子中,数据集Dl是512B,因此缓冲数据E20的大小优选是1024B (512BX2)。数据单元FlO以及F20的大小优选与缓冲数据E20的大小相同。数据单元FlO的写入目的地是缓冲数据E20的读出源的块群。数据单元F20的写入目的地是与读出源的块群对应的块群(例如是与读出源的块群相同地址的块群)。然后,参照图 Γ图18 (根据需要也参照图5 图8)详细说明本实施例。图9表示具有本实施例的存储装置IB的计算机系统的结构。存储装置IB具备二重化的DKC100、HDD群900。在存储装置IB上连接了作为存储装置IB的外部装置的一种的、用于发行I/O (Input/Output)请求的主装置300。DKC100具有FE-IF (前端接口装置)110、高速缓冲存储器120、CPU130、本地存储器140和BE-IF (后端接口装置)150。FE-IFllO以及BE-IF150是用于DKC100与外部的装置进行数据等的交换的通信接口装置。FE-IFllO与主装置300通信,BE-IF150与HDD通信。高速缓冲存储器120是用于临时存储读写到HDD的数据的存储器。高速缓冲存储器120彼此共享一部分数据。本地存储器140存储控制所需的信息(以下称为管理信息)、计算机程序。CPU130执行本地存储器140存储的程序,根据管理信息进行存储装置IB的控制。由HDD群900构成一个以上的RAID组。至少一个RAID组是RAID组200,即RAIDl的RAID组。此外,本发明不限于RAID1,也可以应用于数据被二重化地写入的类型的其它种类的RAID等级(即RAIDl类型以外的种类的RAID等级)。图IOA表示高速缓冲存储器120的结构和本地存储器140存储的信息。高速缓冲存储器120由多个段121构成。本地存储器140存储多个段表(以下称为SG表)141。段121和SG表141——对应。SG表141具有与其对应的段121相关的信息。此外,也可以代替针对每个段121具有SG表141,而由一个表具有多个记录,各记录与一个段121对应。此外,与多个段121相关的信息可以表现为表以外的形式。图IOB表不若干SG表141的结构。SG表141例如具有下述信息。此外,在参照图IOB的说明中着眼于一个SG表141,并且将与该SG表141对应的段称为“对象段”。(*)数据140a是表示存储在对象段121中的数据的属性的信息,
(*)数据140b是表示在对象段121内的哪个位置存在数据(具体来说,对象段120内的从哪里到哪里是针对HDD的输入输出对象数据)的信息,(*)队列140c是表示管理对象段121的队列的信息,(*)属性140d是表示对象段121的属性的信息,(*)标志140e是表示对象段121内的数据是否存在于与具有该对象段121的高速 缓冲存储器120不同的别的高速缓冲存储器120中的信息。作为数据140a的值(换言之,对象段121内的数据),有“中间脏数据”、“缓冲数据”、“物理脏数据”。“中间脏数据”是存在于高速缓冲存储器120中而不存在于HDD中的数据(脏数据)的一种,是还没有被写入到HDD的状态的数据。具体来说,“中间脏数据”例如是所述数据集(512B的数据要素和SB的保证码的集合)。“缓冲数据”如前所述,是从HDD被读出到高速缓冲存储器120的数据。“物理脏数据”是脏数据的一种,是写入到HDD的良好的状态的数据。在本实施例中所说的“队列”虽然未图示,但是例如是多个条目(entry)按照预定的顺序排列的信息。各条目与段对应,具有与对应的段有关的信息。条目的顺序例如是新存储了数据的时刻的顺序。在本实施例中,作为队列例如有中间脏队列、干净队列、空闲(free)队列、物理脏队列。中间脏队列由存储了中间脏数据的段所对应的条目构成。干净队列由存储了干净数据的段所对应的条目构成。作为干净数据的一种,有缓冲数据。空闲队列由空闲的段所对应的条目构成。物理脏队列由存储了物理脏数据的段所对应的条目构成。关于标志140e,开(ON)(例如“I”)表示在别的高速缓冲存储器120中也存在对象段121内的数据,关(OFF)(例如“O”)表示在别的高速缓冲存储器120中不存在对象段121内的数据。在写入处理中,从高速缓冲存储器120中确保段群(一个以上的段),向所确保的段群中写入数据,但是所确保的段群的大小是写入对象数据的单位大小和SATA-HDD的写入单位的大小的公倍数,优选是最小公倍数。具体来说,写入对象数据的单位大小是520B,SATA-HDD的写入单位的大小是512B,因此,所确保的段群的大小是520B和512B的最小公倍数、即32kB (千字节)。因此。例如如果段的大小是4kB,则确保8个段,如果段的大小是8kB,则确保4个段(以下假设段的大小是8kB)。如上所述,通过确保32kB (最小公倍数的大小)的段群并以段群单位进行处理,能够期待不需要从HDD读出缓冲数据的情形(即能够将读出次数设为O)。关于这点,参照图11进行详细说明。如图11所示,各段由多个520B的高速缓冲存储块构成。在一个高速缓冲存储块中存储520B的数据集(512B的数据要素和SB的保证码的集合)。在假设将连续的多个高速缓冲存储块和连续的多个SATA块(SATA-HDD的块)开头对齐来进行排列的情况下,每32kB高速缓冲块的边界和SATA块的边界一致。此外,32kB是作为SATA-HDD的写入单位的大小的512B的倍数。因此,在作为写入对象的数据的大小是32kB的情况下,能够按照SATA-HDD的写入单位写入作为写入对象的数据。因此,如果将数据集(520B的中间脏数据)存储到32kB的量的全部的高速缓冲存储块中(即如果从32kB的段群的开头到末端,中间脏数据连续),则作为写入对象的数据是32kB的数据(由连续的64个数据集构成的数据),因此,能够不从HDD读出缓冲数据地完成
写入处理。如上所述,如果以32kB单位来确保段群,则能够期待不需要从HDD的读出的情况。此外,所确保的段群的大小可以是32kB以外的512B和520B的公倍数,但是从抑制高速缓冲存储器120的消耗的观点出发,优选是最小公倍数。以下,参照图12A 图12F以及图13A 图13F,说明32kB的段群中的数据集的配置例和缓冲数据的范围的关系。此外,在图12A 图12F以及图13A 图13F中画阴影线的对 象表示中间脏数据(一个以上的数据集),用灰色涂抹的对象表示缓冲数据或其一部分。根据图12A所示的例子,在32kB的段群的全部区域中存在连续的中间脏数据D200。在这种情况下,如上所述,因为不需要读出缓冲数据,所以不读出缓冲数据(参照图13A)。根据该例,连续的中间脏数据D200是写入到HDD的数据单元F200。根据图12B以及图12C所示的例子,连续的中间脏数据在段群的开头以及末端的一方的边界处重合,但是在另一方的边界不重合。具体来说,根据图12B所示的例子,连续的中间脏数据D210在段群的末端的边界处不重合,但是在该段群的开头的边界处重合。在这种情况下,读出比连续的中间脏数据D210大的大小的缓冲数据E210 (参照图13B),生成写入到HDD的数据单元F210,但是,在该数据单元F210中成为在连续的中间脏数据D220的末端附加了缓冲数据部分E211的状态。此外,根据图12C所示的例子,连续的中间脏数据D220在32kB的段群的开头的边界处不重合,但是在该段群的末端的边界处重合。在这种情况下,读出比连续的中间脏数据D220大的大小的缓冲数据E220 (参照图13C),生成写入到HDD的数据单元F220,但是在该数据单元F220中成为在连续的中间脏数据D220的开头附加了缓冲数据部分E221的状态。根据图12D所示的例子,连续的中间脏数据D230在段群的开头以及末端的任意边界都不重合。在这种情况下,读出比连续的中间脏数据D230大的大小的缓冲数据E230(参照图13D),生成写入到HDD的数据单元F230,但是在该数据单元F230中成为在连续的中间脏数据D230的开头以及末端附加了缓冲数据部分E231以及E232的状态。根据图12E以及图12F所示的例子,在段群中中间脏数据成为不连续。在这种情况下,不针对每个中间脏数据读出比中间脏数据大的缓冲数据,而是读出从开头的中间脏数据的开头到末端的中间脏数据的末端的范围以上的大小的缓冲数据。这是为了将读出次数设为最多一次。因此,根据图12E的例子,读出比从开头的中间脏数据D240的开头到末端的中间脏数据D241的末端的范围大的缓冲数据E240 (参照图13E)。根据中间脏数据240以及D241和缓冲数据E240,生成写入到HDD的数据单元F240。此外,根据图12F的例子,开头的中间脏数据D250的开头与段群的开头的边界一致,末端的中间脏数据D252的末端与段群的末端的边界一致。因此,读出32kB的缓冲数据E250 (参照图13F)。根据中间脏数据D250、D251以及D252和缓冲数据E250生成写入到HDD的数据单元F241。如此,在段群中中间脏数据不连续的情况下,读出从开头的中间脏数据的开头到末端的中间脏数据的末端的范围以上的大小的缓冲数据。在写入到HDD的数据单元F240、F250中,成为用缓冲数据部分填满中间脏数据的状态。构成上述的段群(32kB)的四个段(SkB)在高速缓冲存储器120中未必连续。例如可以确保在高速缓冲存储器120中分散的四个段作为段群。然后,参照图14 图17,说明针对RAIDl的RAID组的写入处理中的中间汇总写入处理的详细的流程。中间汇总写入处理是生成数据集(来自主装置300的数据要素(512B)和保证码(SB)的组)后直到将数据单元写入到HDD的处理。图14以及图15表示中间汇总写入处理的流程。此外,以下为了容易理解说明,将存储在一个W面的段中的中间脏数据作为写入对象。CPU130针对多个中间脏队列的各个中间脏队列检查中间脏数据的量,决定将哪个中间脏队列作为处理对象(步骤401)。例如将判断为中间脏数据的量最多的中间脏队列(例如具有最多条目的中间脏队列)决定为处理对象。中间脏队列,例如位于每个预定单位(例如每个HDD、或者每个逻辑分割高速缓冲存储器120所得的区域(分区))中。然后,CPU130确定通过在步骤401决定的中间脏队列管理的中间脏数据中的、最以前存储在高速缓冲存储器120中的中间脏数据(步骤402)。存储在此确定的中间脏数据的段#1所对应的SG表#1,在步骤401阶段如图16的行#1所示那样,在步骤402阶段如图16的行#2所示那样。然后,CPU130确保包含段#1的32kB的段群(步骤403)。以下将在此确保的段群表记为“段群W”。对所确保的段群W进行排他控制使得不写入数据。在该阶段的SG表#1如图16的行#3所示那样。构成段群W的其它的段可以是任何的段。例如可以是存储了在步骤402中没有被确定的中间脏数据的段。此外,在成为写入对象的中间脏数据的大小大于32kB的情况下,可以确保2个以上的32kB的段群。然后,CPU130将表示物理脏预约数的信息例如登录到本地存储器140中(步骤404)。具体来说,CPU130将中间脏段(在段群W中存储了中间脏数据的段)的数量的两倍的值设为物理脏预约数。将中间脏段的数量设为两倍的理由是包含中间脏数据的副本的数据单元即将被作为物理脏数据管理、以及生成两个中间脏数据的副本(关于主HDD210和镜像HDD220两者而生成)。CPU130对物理脏预约数和已经存在物理脏数据的段的数进行合计,在其合计超过一定值的情况下可以中止生成物理脏数据的动作。此外,该步骤404中的SG表#1如图16的行#4所示那样。然后,CPU130判定写入对象的中间脏数据的写入目的地的RAID组的RAID等级(步骤405)。该步骤405中的SG表#1如图16的行#5所示那样。在RAID等级不是RAIDl类型的情况下(步骤405 :否),CPU130按照RAID等级处理中间脏数据(步骤406)。在RAID等级是RAIDl类型的情况下(步骤405 :是),CPU130判断是否需要缓冲数据(步骤407)。该步骤407中的SG表#1如图16的行#6所示那样。步骤407的判断的结果,如果连续的中间脏数据占据了段群W的全部区域(参照图12A),则成为否定(步骤407 :否),除此以外成为肯定(步骤407 :是)。
CPU130在需要缓冲数据的情况下(步骤407 :是),从高速缓冲存储器120中确保用于存储缓冲数据的段群(以下称为段群Rl)(步骤408)。该步骤408中的SG表#1如图16的行#7所示那样。在行#7中除了 SG表#1外,还表示了段群Rl中的一个段#2所对应的SG表#2 (步骤408中的SG表#2)。此外,CPU130在无法确保段群Rl的情况下,中止缓冲数据的读出。
然后,CPU130根据中间脏数据的状态决定主HDD210 (或者镜像HDD220)中的作为缓冲数据的读出源的SATA块群,从所决定的SATA块群的全部区域中将缓冲数据读出到段群Rl中(步骤409)。中间脏数据的状态(例如图12A 图12F所例示的状态)能够根据段群W所对应的多个SG表中的映像140b进行判别。此外,作为读出源的SATA块群是包含中间脏数据的写入目的地的SATA块群。此外,作为读出源的SATA块群的大小是中间脏数据的大小以上的范围内的最小的大小(但是,SATA块的大小的倍数)。在该步骤409中,SG表#1以及#2如图16的行#8所示那样。具体来说,缓冲数据通过二重化的DKC100的双方的高速缓冲存储器120来保持,因此标志140e成为“I”。CPU130判定段群W内的中间脏数据是否连续(步骤410)。在该步骤410中的SG 表#1以及#2是如图16的行#9所示那样。在中间脏数据不连续的情况下(步骤410 :否),CPU130进行高速缓存间复制(图15的步骤411)。具体来说,如图18所示,CPU130通过缓冲数据部分填满中间脏数据间地、将段群Rl中的缓冲数据部分复制到段群W。由此,能够获得用于从段群W向后述的段群R2的复制的连续的数据。此外,该步骤411中的SG表#1以及#2是如图16的行#10所示那样。CPU130判定缓冲数据部分是否被正常地复制到段群W中(步骤412)。该步骤410中的SG表#1以及#2如图16的行#11所示那样。CPU130在正常地进行了高速缓存间复制的情况下(步骤412 :是)进行步骤413以后的步骤。一方面,CPU130在没有正常地进行高速缓存间复制的情况下(步骤412 :否)进行步骤417。在步骤417中,CPU130将复制失败的数据存储到预定的保存区域(例如非易失性的存储区域)。该保存区域内的数据可以在以后通过CPU130再执行复制(数据单元的生成)(即,可以从保存区域向段群W、R1或R2复制数据)。保存区域可以由DKC具有,也可以使用HDD的一部分。在正常地进行了高速缓存间复制的情况下(步骤412 :是),CPU130从高速缓冲存储器120中确保镜像HDD用的段群(以下称为段群R2)(步骤413)。在该步骤413中的SG表#1以及#2是图17的行#12所示那样。在行#12中,除了 SG表#1以及#2外,还表示了段群R2中的一个段#3所对应的SG表#3 (步骤413中的SG表#3)。此外,CPU130在无法确保段群R2的情况下,中断处理,或者可以为了增加空闲的段而进行将物理脏数据写入到HDD的处理等。CPU130生成用于写入到主HDD210的数据单元和用于写入到镜像HDD220的数据单元(步骤414)。该步骤414中的SG表#1 #3是图14的行#13所述那样。此外,映像140b的“脏映像+”表示通过SG表#2以及#3管理的数据相同。在步骤414中例如进行下述的处理。(*)CPU130在段群Rl内的缓冲数据上重写段群W内的连续数据,并且将连续数据复制到段群R2。由此,在段群Rl中生成主HDD210用的数据单元(以下称为主数据单元),并且在段群R2中存在连续数据。此外,作为段群W内的连续数据,可以是由连续的中间脏数据构成的数据,也可以是由不连续的中间脏数据和缓冲数据部分构成的数据。(*) CPU130将段群Rl内的缓冲数据部分(缓冲数据中未重写连续数据的部分)复制到段群R2。由此,在段群R2中生成镜像HDD220用的数据单元(以下称为镜像数据单元)。CPU130判断是否正常进行了主数据单元或者镜像数据单元的生成(步骤415)。该步骤414中的SG表#1 #3如图14的行#14所示那样。CPU130在主数据单元以及镜像数据单元中的至少一方没有被正常进行的情况下(步骤415 :否),进行上述的步骤417的处理。
CPU130在正常进行了主数据单元以及镜像数据单元的生成的情况下(步骤415 是),将主数据单元以及镜像数据单元的各自的属性迁移为物理脏数据(步骤416)。具体来说,例如CPU130通过物理脏队列来管理存储了主数据单元的一个以上的段或存储了镜像数据单元的一个以上的段。此外,该步骤416中的SG表#1~#3如图14的行#15所示那样。之后,CPU130释放段群W(步骤418)。由此,构成段群W的各段被作为空闲的段来管理。能够确保空闲的段。在该步骤418中的SG表#广#3如图14的行#16所示那样。根据行#16的SG表#1,将被释放的段群W中的段#1作为空闲的段来管理。以上是中间汇总写入处理的流程。在该中间汇总写入处理之后,CPU130将主数据单元(物理脏数据)写入主HDD210,并且将镜像数据单元(物理脏数据)写入镜像HDD220。根据本实施例,在针对RAIDl的RAID组的写入处理中,不需要从主HDD以及镜像HDD的一方读出缓冲数据,并且能够将读出次数设为最多I次。由此,能够减轻HDD以及DKC100双方的负荷。以上说明了本发明的一个实施例,但是,本发明并不限于该实施例,在不脱离其宗旨的范围内当然可以进行各种变更。例如,在段群W的全部区域被连续的中间脏数据占据的情况下,将段群W内的中间脏数据作为物理脏数据来管理,之后,可以将该物理脏数据写入主HDD (或者镜像HDD)。或者可以确保段群Rl,进行从段群W向段群Rl的数据复制,将段群Rl内的数据作为物理脏数据来管理,之后,将物理脏数据写入主HDD (或者镜像HDD)。符号说明IB存储装置
权利要求
1.一种存储装置,其特征在于, 具备 由多个物理的存储设备构成的RAID组;以及 按照所述RAID组的RAID等级来控制向所述RAID组的数据的写入以及从所述RAID组的数据的读出的控制器, 所述RAID组是具有一个以上第一存储设备和第二存储设备的对的RAIDl类型的RAID组, 写入对象数据的单位大小与所述存储设备的写入单位的大小不同, 所述存储设备提供的存储区域由多个存储块构成, 各存储块的大小与所述存储设备的写入单位的大小相同, 所述控制器, (A)从所述第一存储设备中的包含所述写入对象数据的写入目的地的第一存储块群的全部区域读出数据, (B)根据所述写入对象数据和作为在所述(A)中读出的数据的缓冲数据,生成一个以上数据单元,该数据单元由所述写入对象数据或其副本和缓冲数据部分或其副本构成,是与所述第一存储块群大小相同的数据, (C)将所述一个以上的数据单元中的某一个写入所述第一存储设备中的所述第一存储块群,并且将所述一个以上的数据单元中的某一个写入所述第二存储设备中的、与所述第一存储块群对应并且与其大小相同的第二存储块群。
2.根据权利要求I所述的存储装置,其特征在于, 在所述(B)中,所述控制器通过在所述缓冲数据中写入所述写入对象数据或其副本来生成第一数据单元,生成所述写入对象数据的副本,通过对所述写入对象数据的副本附加所述第一数据单元内的缓冲数据部分的副本来生成第二数据单元, 在所述(C)中,所述控制器将所述第一以及第二数据单元的一方写入所述第一存储块群,将所述第一以及第二数据单元的另一方写入所述第二存储块群。
3.根据权利要求2所述的存储装置,其特征在于, 所述控制器具有由多个高速缓存块构成的高速缓冲存储器, 各高速缓存块的大小是所述写入对象数据的单位大小, 在所述(A)中,所述控制器从所述高速缓冲存储器中确保第一高速缓存区域,该第一高速缓存区域包含存储了所述写入对象数据的一个以上的高速缓存块, 在所述(A)中,所述控制器从所述高速缓冲存储器中确保第二高速缓存区域, 在所述(A)中,所述控制器在所述第二高速缓存区域中读出所述缓冲数据, 在所述(B)中,所述控制器确保第三高速缓存区域, 在所述(B)中,所述控制器通过将所述第一高速缓存区域内的所述写入对象数据复制到所述第二高速缓存区域来生成所述第一数据单元, 在所述(B)中,所述控制器通过将所述第二高速缓存区域内的所述缓冲数据部分复制到所述第三高速缓存区域来生成所述第二数据单元, 各高速缓存区域由两个以上的高速缓存块构成, 各高速缓存区域的大小是所述存储块的大小和所述高速缓存块的大小的最小公倍数。
4.根据权利要求3所述的存储装置,其特征在于, 在所述第一高速缓存区域的全部区域被连续的所述写入对象数据占据的情况下,所述控制器不进行所述缓冲数据的读出, 所述第一数据单元以及所述第二数据单元是所述写入对象数据的副本。
5.根据权利要求3所述的存储装置,其特征在于, 在所述第一高速缓存区域中存在不连续的所述写入对象数据的情况下,所述第一存储块群的大小是从所述第一高速缓存区域中的开头的写入对象数据的开头到所述第一高速缓存区域中的末端的写入对象数据的末端为止的范围以上的大小。
6.根据权利要求5所述的存储装置,其特征在于, 在所述(B)中,所述控制器从所述第二高速缓存区域向所述第一高速缓存区域复制缓冲数据部分,以便通过在所述第一高速缓存区域中的写入对象数据间填满缓冲数据部分来生成连续数据, 所述连续数据由不连续的所述写入对象数据和所述缓冲数据部分构成, 在所述(B)中,所述控制器通过将所述连续数据复制到所述第二高速缓存区域来生成所述第一数据单元, 在所述(B)中,所述控制器将所述连续数据复制到所述第三高速缓存区域。
7.根据权利要求3所述的存储装置,其特征在于, 具有作为保存数据的存储区域的保存区域, 所述控制器,在没有正常生成所述第一或第二数据单元的情况下,将在该生成中使用的数据暂时写入所述保存区域, 所述控制器将所述保存区域内的数据复制到所述第二以及第三高速缓存区域中的、存储了没有正常生成的数据单元的高速缓存区域中。
8.根据权利要求3所述的存储装置,其特征在于, 所述写入对象数据的单位大小是来自主机装置的数据和保证码的数据集的大小, 所述存储设备是SATA-HDD。
9.根据权利要求I所述的存储装置,其特征在于, 所述第一存储块群的大小是所述写入对象数据以上的范围中最小的大小。
10.根据权利要求I所述的存储装置,其特征在于, 在所述写入对象数据是连续的数据,并且其大小是所述写入对象数据的单位大小和所述存储设备的写入单位的大小的公倍数的情况下,所述控制器不进行所述缓冲数据的读出, 所述数据单元是所述写入对象数据的副本。
11.根据权利要求I所述的存储装置,其特征在于, 在预定的范围中所述写入对象数据不连续的情况下,所述第一存储块群的大小是从所述预定的范围中的开头的写入对象数据的开头到所述预定范围中的末端的写入对象数据的末端为止的范围以上的大小。
12.根据权利要求11所述的存储装置,其特征在于, 所述一个以上的数据单元包含第一数据单元和第二数据单元, 在所述(B)中,所述控制器复制缓冲数据部分,以便通过在所述预定范围中的写入对象数据间填满缓冲数据部分来生成连续数据, 所述连续数据由不连续的所述写入对象数据和所述缓冲数据部分构成, 在所述(B)中,所述控制器通过将所述连续数据写入所述缓冲数据上来生成所述第一数据单元, 在所述(B)中,所述控制器生成所述连续数据的副本,并且对该连续数据的副本附加所述第一数据单元中的缓冲数据部分,由此生成所述第二数据单元, 在所述(C)中,所述控制器将所述第一以及第二数据单元的一方写入所述第一存储块群,将所述第一以及第二数据单元的另一方写入所述第二存储块群。
13.根据权利要求I所述的存储装置,其特征在于, 具有作为保存数据的存储区域的保存区域, 所述控制器在没有正常地生成所述数据单元的情况下,将该生成中使用的数据暂时写入所述保存区域, 所述控制器使用所述保存区域内的数据来生成数据单元。
14.一种向RAIDl类型的RAID组的写入的控制方法,该RAIDl类型的RAID组具有一个以上第一存储设备和第二存储设备的对,该控制方法的特征在于, 从所述第一存储设备中的包含写入对象数据的写入目的地的第一存储块群的全部区域中读出数据, 根据所述写入对象数据和作为所述被读出的数据的缓冲数据,生成一个以上数据单元,该数据单元由所述写入对象数据或其副本和缓冲数据部分或其副本构成,是与所述第一存储块群大小相同的数据, 将所述一个以上的数据单元中的某一个写入所述第一存储设备中的所述第一存储块群,并且将所述一个以上的数据单元中的某一个写入所述第二存储设备中的、与所述第一存储块群对应并与其大小相同的第二存储块群。
全文摘要
RAID1类型的RAID组具有一个以上第一存储设备和第二存储设备的对。存储装置从第一存储设备中的、包含写入对象数据的写入目的地的第一存储块群的全部区域中读出数据。存储装置根据写入对象数据和读出的数据即缓冲数据,生成一个以上数据单元,该数据单元由写入对象数据或其副本和缓冲数据部分或其副本构成,是与第一存储块群相同大小的数据。控制器将一个以上的数据单元中的某一个数据单元写入到第一存储设备中的第一存储块群中,并且将一个以上的数据单元中的某一个数据单元写入到第二存储设备中的、与第一存储块群对应且与其大小相同的第二存储块群中。
文档编号G06F3/06GK102630314SQ20108005403
公开日2012年8月8日 申请日期2010年3月8日 优先权日2010年3月8日
发明者出田宏, 松井佑光, 西原悠佑 申请人:株式会社日立制作所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1