JP2013210847A - ストレージシステム、ストレージ制御方法およびストレージ制御プログラム - Google Patents

ストレージシステム、ストレージ制御方法およびストレージ制御プログラム Download PDF

Info

Publication number
JP2013210847A
JP2013210847A JP2012080651A JP2012080651A JP2013210847A JP 2013210847 A JP2013210847 A JP 2013210847A JP 2012080651 A JP2012080651 A JP 2012080651A JP 2012080651 A JP2012080651 A JP 2012080651A JP 2013210847 A JP2013210847 A JP 2013210847A
Authority
JP
Japan
Prior art keywords
command
control unit
storage device
storage
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012080651A
Other languages
English (en)
Other versions
JP5958020B2 (ja
Inventor
Jun Ito
惇 猪頭
Norihide Kubota
典秀 久保田
Kenji Kobayashi
賢次 小林
Ryota Tsukahara
良太 塚原
Hidejiro Daikokuya
秀治郎 大黒谷
Kazuhiko Ikeuchi
和彦 池内
Chikashi Maeda
親志 前田
Takashi Watanabe
岳志 渡辺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012080651A priority Critical patent/JP5958020B2/ja
Priority to US13/845,238 priority patent/US20130262762A1/en
Publication of JP2013210847A publication Critical patent/JP2013210847A/ja
Application granted granted Critical
Publication of JP5958020B2 publication Critical patent/JP5958020B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Debugging And Monitoring (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)

Abstract

【課題】記憶装置におけるコマンドの実行遅延を抑制する。
【解決手段】ストレージシステム1は、コマンドのリオーダリング機能を備える記憶装置10と、記憶装置10に対するアクセスを制御するストレージ制御装置20とを有する。ストレージ制御装置20は、例えば、記憶装置10に発行したコマンドのタイムアウトが発生してから所定期間において、記憶装置10に発行するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限して、発行したコマンドの実行順序が後回しになりにくくする。
【選択図】図1

Description

本発明は、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムに関する。
近年、記憶装置としてHDD(Hard Disk Drive)を備えるストレージシステムでは、HDDの大容量化やシステムの規模の拡大によって、各HDDに対して発行されるコマンド数が増大する傾向にある。このため、HDDが備えるコマンドキューに多数のコマンドが蓄積されて、HDDにおける読み出しまたは書き込みの速度が低下することがある。
このような問題に対して、近年のHDDの中には、コマンドキューに蓄積されたコマンドの実行順を処理時間が短くなるように並べ替えるリオーダリング機能を備えるものがある。リオーダリング機能を備えるHDDは、例えば、コマンドキューに蓄積されたコマンドの実行順を、シーク時間および回転待ち時間が短くなるように並べ替える。
なお、HDDのアクセス処理時間を短縮するための他の技術として、休止状態のHDDからのデータ読み出しを抑止する代わりに、そのデータに基づくパリティを他のHDDから読み出すようにしたストレージシステムがある。
特開2002−23962号公報 特開2009−163310号公報
コマンドのリオーダリング機能を備えるHDDでは、コマンドの実行順が並び替えられることで、特定のコマンドの実行が大きく遅延することがある。コマンドの実行遅延が大きくなると、コマンド発行側は、コマンドのタイムアウトが発生したと判定してしまうこともある。
1つの側面では、本発明は、記憶装置におけるコマンドの実行遅延を抑制することが可能なストレージシステム、ストレージ制御方法およびストレージ制御プログラムを提供することを目的とする。
1つの案では、次のようなストレージシステムが提供される。このストレージシステムは、記憶装置と、記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限する制御を行うコマンド発行制御部と、コマンド発行制御部によって書き込みデータサイズまたは読み出しデータサイズが制限されたコマンドを記憶装置に送信する送信部と、を有する。
また、1つの案では、記憶装置に対するアクセスを制御する制御装置におけるストレージ制御方法が提供される。このストレージ制御方法は、記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限し、書き込みデータサイズまたは読み出しデータサイズが制限されたコマンドを記憶装置に送信する、処理を含む。
さらに、1つの案では、上記の制御装置と同様の処理をコンピュータに実行させるストレージ制御プログラムが提供される。
1態様によれば、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムにおいて、記憶装置におけるコマンドの実行遅延を抑制することができる。
第1の実施の形態に係るストレージシステムの構成例およびその動作例を示す図である。 第2の実施の形態に係るストレージシステムの構成例を示す図である。 CM、およびDE内のHDDのハードウェア構成例を示す図である。 CM、およびDE内のHDDが備える処理機能の構成例を示すブロック図である。 コマンドのリオーダリングについて説明するための図である。 CMが備える処理機能の詳細およびCMの動作例を示す図である。 RAID制御部の処理手順の例を示すフローチャートである。 第2のコマンド発行制御について説明するための図である。 第2のコマンド発行制御の処理手順の例を示すフローチャートである。 第3のコマンド発行制御について説明するための図である。 読み出しブロック数の違いによるコマンドの実行順の変化について説明するための図である。 第3のコマンド発行制御の処理手順の例を示すフローチャートである。 第4のコマンド発行制御について説明するための図である。 キューモードの違いによるコマンドの実行順の変化について説明するための図である。 第4のコマンド発行制御の処理手順の例を示すフローチャートである。 ディスク制御部の処理手順の例を示すフローチャートである。 RAID制御部の処理の変形例を示すフローチャートである。 第3の実施の形態のRAID制御部の処理手順の例を示すフローチャートである。
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例およびその動作例を示す図である。図1に示すストレージシステム1は、記憶装置10と、この記憶装置10に対するアクセスを制御するストレージ制御装置20とを備える。
記憶装置10は、例えば記録媒体としてHDDを備える。記憶装置10は、ストレージ制御装置20から発行されるコマンドを受信し、受信したコマンドに応じて、記録媒体へのデータの書き込み処理、あるいは記録媒体からのデータの読み出し処理を行う。
また、記憶装置10は、受信したコマンドの実行順を変更するリオーダリング機能を備えている。例えば、記憶装置10は、受信したコマンドを一時的に蓄積するコマンドキュー11を備え、コマンドキュー11からコマンドを1つずつ読み出し、読み出したコマンドに応じた処理を実行する。そして、記憶装置10は、処理時間が短くなるように、コマンドキュー11からのコマンドの読み出し順を入れ替える。記録媒体がHDDである場合、記憶装置10は、シーク時間および回転待ち時間が短くなるように、コマンドの読み出し順を入れ替える。
ストレージ制御装置20は、記憶装置10に対してコマンドを発行することで、記憶装置10に対するアクセスを制御する。ストレージ制御装置20は、例えば、記憶装置10にコマンドを送信する送信部21と、送信部21におけるコマンドの発行の仕方を制御するコマンド発行制御部22を備える。
コマンド発行制御部22は、記憶装置10に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限する制御を行うことが可能である。送信部21が、コマンド発行制御部22によって書き込みデータサイズまたは読み出しデータサイズが制限されたコマンドを記憶装置10に送信することにより、記憶装置10におけるコマンドの実行遅延を抑制することができる。
以下、ストレージシステム1における動作例について説明する。ここでは例として、記憶装置10からデータが読み出される場合について説明する。
図1の第1の動作例では、ストレージ制御装置20の送信部21は、読み出しコマンドC1,C2,C3を、この順序で記憶装置10に発行する。読み出しコマンドC1,C2,C3は、それぞれ、記憶装置10に記憶されたデータD1,D2,D3を読み出すためのものである。
記憶装置10のコマンドキュー11には、コマンドC1,C2,C3の順にコマンドが蓄積され、記憶装置10は、これらのコマンドC1,C2,C3の実行順を決定する。ここで、データD1,D3の各サイズは、上記の上限サイズより大きいものとし、データD2のサイズは、上限サイズ以下であるものとする。また、データD1,D3は、記憶装置10における連続した記憶領域に記録されており、データD2は、データD1,D3とは離れた領域に記録されているものとする。
このような条件下では、記憶装置10は、コマンドC1を実行した後、コマンドC2よりコマンドC3を先に実行する可能性が高い。この場合、コマンドC2について大きな実行遅延が生じることになる。記憶装置10がコマンドC1,C3,C2の順に実行した場合、記憶装置10からは、データD1,D3,D2の順にデータが読み出され、ストレージ制御装置20に転送される。
一方、ストレージ制御装置20のコマンド発行制御部22は、第2の動作例として示すように、読み出しデータサイズが上限サイズ以下に制限された状態でコマンドが発行されるように、送信部21におけるコマンド発行処理を切り替えることができる。
第2の動作例では、コマンド発行制御部22は、データD1を上限サイズ以下に分割して得られるデータD11,D12,D13をそれぞれ個別に読み出すように、コマンドの発行の仕方を変更する。このとき、送信部21は、データD11,D12,D13をそれぞれ読み出すためのコマンドC11,C12,C13を、この順序で発行する。
また、コマンド発行制御部22は、データD3を上限サイズ以下に分割して得られるデータD31,D32,D33をそれぞれ個別に読み出すように、コマンドの発行の仕方を変更する。このとき、送信部21は、データD31,D32,D33をそれぞれ読み出すためのコマンドC31,C32,C33を、この順序で発行する。
従って、第2の動作例では、送信部21は、コマンドC11,C12,C13,C2,C31,C32,C33の順で、記憶装置10にコマンドを発行する。
ここで、記憶装置10のリオーダリング処理では、一般的に、ランダムアクセスのコマンドよりシーケンシャルアクセスのコマンドの方が優先的に実行される傾向がある。また、ランダムアクセスのコマンドは、シーケンシャルアクセスのコマンドより、アクセスされるデータサイズが小さいことが多い。
第2の動作例のように、コマンドごとにアクセスされるデータサイズを小さくすることで、記憶装置10のコマンドキュー11に蓄積された未実行のコマンドのうち、ランダムアクセスと推定されるコマンドの相対的な数が増加していく。これにより、コマンドの実行順序が後回しになりにくくなる。
また、コマンドごとにアクセスされるデータのサイズが小さくなって、コマンドキュー11に蓄積されるコマンドの数が増加することで、次に実行するコマンドを決定する機会が増加する。その結果、ランダムアクセスのコマンドがより早い順序で実行される可能性が高まる。
このように、ランダムアクセスのコマンドの実行順序が後回しになりにくくなることで、新たに発行したコマンドは、コマンドの発行順に実行されやすくなる。例えば、図1に示すように、コマンドC2の実行順が、データD3に対応するデータD31,D32,D33をそれぞれ読み出すためのコマンドC31,C32,C33より前になる可能性が、第1の動作例より高くなる。また、コマンドC2が、コマンドC13あるいはコマンドC12より先に実行される可能性も、第1の動作例より高くなる。
また、上記の第2の動作例のように、コマンドに含める書き込みデータサイズまたは読み出しデータサイズが上限サイズ以下に制限されることで、発行されるコマンド数は増加する。このため、このようにコマンドに含める書き込みデータサイズまたは読み出しデータサイズを制限したコマンド発行処理を、常時実行することは好ましくない。なぜなら、コマンドの数が増加することで、記憶装置10におけるデータアクセス効率が低下する可能性があるからである。
これに対して、コマンド発行制御部22は、コマンドに含める書き込みデータサイズまたは読み出しデータサイズを上限サイズ以下に制限するか否かを、切り替えることができる。
例えば、コマンド発行制御部22は、記憶装置10に発行したコマンドのタイムアウトが発生してから所定期間において、コマンドに含める書き込みデータサイズまたは読み出しデータサイズを上限サイズ以下に制限する。これにより、すでにコマンドの大幅な実行遅延が生じている状態でのみ、そのような状態を解消するための措置を施すことができる。
また、コマンド発行制御部22は、例えば、コマンドのタイムアウトが発生してから所定期間の間でも、記憶装置10のコマンドキュー11に蓄積されたコマンド数がしきい値以上であると判定した場合には、コマンドに含める書き込みデータサイズまたは読み出しデータサイズを上限サイズ以下に制限しないようにしてもよい。これにより、コマンドキュー11に蓄積されたコマンド数が増大して、記憶装置10での処理効率がさらに悪化する事態を回避することができる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。図2に示すストレージシステム100は、CM(Controller Module)200およびDE(Drive Enclosure)300を含む。また、CM200にはホスト装置400が接続されている。
CM200は、ホスト装置400からのI/O(In/Out)要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM200は、DE300内の記憶装置によって実現される物理記憶領域をRAID(Redundant Arrays of Inexpensive Disks)によって管理し、これらの物理記憶領域に対するアクセスを制御する。
DE300は、CM200からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のDE300は、記憶装置としてHDDを備えるディスクアレイ装置である。また、DE300内のHDDは、CM200から受け付けたコマンドの実行順を適正化するコマンドリオーダリング機能を備えている。
ホスト装置400は、ユーザの操作に応じて、CM200に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM200を通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。
図3は、CM、およびDE内のHDDのハードウェア構成例を示す図である。
CM200は、CPU(Central Processing Unit)201によって装置全体が制御されている。CPU201には、RAM(Random Access Memory)202および複数の周辺機器が、バス209を介して接続されている。RAM202は、CM200の主記憶装置として使用され、CPU201に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
CPU201には、周辺機器の例として、SSD203、グラフィック処理装置204、入力インタフェース205、光学ドライブ装置206、ホストインタフェース207およびディスクインタフェース208が接続されている。
SSD203は、CM200の二次記憶装置として使用され、CPU201によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。
グラフィック処理装置204には、モニタ204aが接続されている。グラフィック処理装置204は、CPU201からの命令に従って、画像をモニタ204aに表示させる。なお、モニタ204aは、例えば、液晶ディスプレイである。
入力インタフェース205には、キーボード205a、マウス205bなどの入力装置が接続されている。入力インタフェース205は、入力装置からの出力信号をCPU201に送信する。
光学ドライブ装置206は、レーザ光などを利用して、光ディスク206aに記録されたデータの読み取りを行う。光ディスク206aは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク206aには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(Rewritable)などがある。
ホストインタフェース207は、ホスト装置400とCM200との間でデータを送受信するインタフェース処理を実行する。ディスクインタフェース208は、DE300とCM200との間でデータを送受信するインタフェース処理を実行する。
一方、DE300に搭載されるHDD300aは、それぞれコントローラ301、RAM302および磁気ディスクドライブ303を備える。
コントローラ301は、HDD300a全体を制御する制御回路であり、例えばCPUなどを備える。RAM302は、コントローラ301が実行する処理に必要な各種のデータなどを記憶する。磁気ディスクドライブ303は、1つまたは複数の磁気ディスクを備え、コントローラ301による制御の下で磁気ディスクに対するデータの書き込みや磁気ディスクからのデータの読み出しを行う。
図4は、CM、およびDE内のHDDが備える処理機能の構成例を示すブロック図である。CM200は、ホストI/O制御部210、RAID制御部220およびディスク制御部230を備える。これらの各部の処理は、例えば、CM200のCPU201が所定のプログラムを実行することで実現される。
ホストI/O制御部210は、ホスト装置400から、DE300内のHDDによって実現される記憶領域に対するI/O要求(読み出し要求または書き込み要求)を受け付ける。ホストI/O制御部210は、CM200のRAM202の一部を、DE300に記録するデータをキャッシュするためのキャッシュ領域として使用しながら、ホスト装置400からDE300の記憶領域へのアクセスを制御する。
例えば、ホストI/O制御部210は、ホスト装置400から書き込みが要求されたデータを、キャッシュ領域に一時的に蓄積する。ホストI/O制御部210は、キャッシュ領域へのデータの書き込みとは非同期のタイミングで、キャッシュ領域に蓄積されたデータをDE300の記憶領域に記憶させる「ライトバック」を実行する。ライトバックを実行する際、ホストI/O制御部210は、ライトバックの対象とするデータをRAID制御部220に出力して、DE300への書き込みを依頼する。
また、ホストI/O制御部210は、ホスト装置400からデータの読み出し要求を受け付けると、読み出しを要求されたデータがキャッシュ領域に蓄積されているかを判定する。読み出しを要求されたデータがキャッシュ領域に蓄積されている「キャッシュヒット」の状態である場合、ホストI/O制御部210は、データをキャッシュ領域から読み出してホスト装置400に送信する。
一方、読み出しを要求されたデータがキャッシュ領域に蓄積されていない「キャッシュミス」の状態である場合、ホストI/O制御部210は、読み出しを要求されたデータをDE300から読み出す「ステージング(staging)」を実行する。ステージングを実行する際、ホストI/O制御部210は、読み出しを要求されたデータの論理位置を示す先頭アドレスおよびデータ長をRAID制御部220に通知して、そのデータの読み出しを依頼する。ホストI/O制御部210は、DE300から読み出されたデータを、キャッシュ領域に格納するとともに、ホスト装置400に送信する。
RAID制御部220は、ホストI/O制御部210からのI/O要求に応じて、ディスク制御部230を通じてDE300内のHDDにアクセスする。RAID制御部220は、DE300内のHDDによって実現される記憶領域を、RAID管理テーブル240を参照しながら、RAIDによって管理する。
RAID管理テーブル240には、RAIDグループごとに、RAIDグループに属するHDDの識別番号、RAIDグループで利用されるRAIDレベルなどの管理情報が登録されている。RAIDグループとは、DE300に搭載された複数のHDDの物理記憶領域を組み合わせて構成される論理記憶領域である。
例えば、RAID制御部220は、ホストI/O制御部210からあるRAIDグループに対するデータの書き込み要求を受けると、そのRAIDグループに関してRAID管理テーブル240に設定された情報に基づいて、データが冗長化されるように書き込み処理を制御する。例としてディスク数「4」のRAID−5で制御されるRAIDグループに書き込みを行うものとすると、RAID制御部220は、ホストI/O制御部210から受信したデータを一定のデータ長で分割し、連続する3個の分割データとそれらに基づくパリティとを、4台のHDDにおける同一ストライプ番号の領域に分散させて記録する。
RAID制御部220は、上記のように、RAID管理テーブル240に基づいて、ホストI/O制御部210から書き込みが要求されたデータの分割やパリティ計算を行うとともに、分割データおよびパリティの書き込み先とするHDDを特定する。RAID制御部220は、ディスク制御部230に対して、特定したそれぞれのHDDに対する分割データおよびパリティの書き込みを依頼する。
また、RAID制御部220は、ホストI/O制御部210からデータの読み出し依頼を受けると、RAID管理テーブル240に基づいて、データが格納されているHDDを特定する。RAID制御部220は、ディスク制御部230に対して、特定したそれぞれのHDDからのデータの読み出しを依頼する。
ディスク制御部230は、RAID制御部220からのI/O要求に応じて、DE300内のHDDにアクセスし、データの読み出しまたはデータの書き込みを実行する。ディスク制御部230は、アクセス先のHDDにコマンドを発行することで、コマンドに設定された情報に応じた処理をHDDに実行させる。
さらに、RAID制御部220およびディスク制御部230は、上記のような基本的な処理の他に、次のような処理を実行可能になっている。
RAID制御部220は、DE300内のHDDごとにコマンドの実行状態を示すステータスが登録されたディスク管理テーブル250を参照可能になっている。RAID制御部220は、ディスク管理テーブル250を参照し、アクセス対象のRAIDグループに属する各HDDのステータスに応じて、コマンドの実行遅延が生じにくくなるように、ディスク制御部230からのコマンドの発行のさせ方を調整する。なお、ディスク管理テーブル250は、例えば、CM200のRAM202に一時的に記録される。
ディスク制御部230は、DE300内の各HDDにおけるコマンドの実行状態を監視し、その監視結果に応じて、ディスク管理テーブル250内のステータスを更新する。なお、ディスク制御部230は、コマンドの実行状態を判定する際に、RAID管理テーブル240を参照する。
次に、DE300内の各HDD300aが備える機能について説明する。DE300内のHDD300aは、キュー制御部311を備える。また、キュー制御部311には、コマンドキュー312が接続されている。キュー制御部311の処理は、コントローラ301によって実現される。また、コマンドキュー312は、RAM302に記録される。
コマンドキュー312には、CM200のディスク制御部230から発行されたコマンドが蓄積される。HDD300aのコントローラ301は、コマンドキュー312からコマンドを1つずつ読み出し、読み出したコマンドに応じた処理を実行する。キュー制御部311は、コマンドリオーダリング機能を実現する処理ブロックであり、コマンドキュー312に蓄積されたコマンドの実行順を決定する。
ここで、CM200から発行されるコマンドには、シンプルキュー(Simple Queue)またはオーダードキュー(Ordered Queue)のいずれかのキューモードが設定される。キューモードとは、そのコマンドがコマンドキュー312に蓄積されたときにどのような方法でキューイングされるかを示す。シンプルキューに設定されたコマンドは、発行先のHDD300aのキュー制御部311によって実行順が変更されることが許容されたコマンドである。一方、オーダードキューに設定されたコマンドは、発行先のHDD300aのコマンドキュー312に登録された順番で実行される。
図5は、コマンドのリオーダリングについて説明するための図である。
キュー制御部311は、コマンドキュー312に蓄積されたコマンドのうち、シンプルキューに設定されたコマンドの実行順を、それらのコマンドに応じた処理が短時間に完了するように適正化する。キュー制御部311は、基本的に、アクセス領域のLBA(Logical Block Address)が近いコマンドを連続して実行させることで、磁気ヘッドのシーク時間や磁気ディスクの回転待ち時間を短縮させる。
図5では、HDD300a内の1つの磁気ディスク320のトラックのうち、ある1つのトラック321上の2つの領域A,Bにそれぞれ記録されたデータの例を示している。領域Aには、データ#0,#1,#3,#4が連続的に記録されている。領域Bにはデータ#2が記録されている。なお、データ#2のサイズは、データ#0,#1,#3,#4と比較して小さいものとする。
ここで、HDD300aのコマンドキュー312に対して、データ#0の読み出しを要求するコマンド#0、データ#1の読み出しを要求するコマンド#1、データ#2の読み出しを要求するコマンド#2、データ#3の読み出しを要求するコマンド#3、データ#4の読み出しを要求するコマンド#4が、順に登録されたものとする。この場合、データ#0,#1,#3,#4は連続した領域に記録されており、データ#2はこれらの領域から離れた領域に記録されていることから、キュー制御部311は、コマンドの実行順をコマンド#0,#1,#3,#4,#2の順に決定する。
このようなコマンドのリオーダリングにより、磁気ヘッドのシーク時間や磁気ディスクの回転待ち時間が短くなるように制御される。その結果、HDDのアクセス性能(読み出し速度および書き込み速度)が向上する。近年、HDDの大容量化やシステム全体の大規模化などによって、HDDに発行されるコマンドの数が増大しているが、上記のようにコマンドのリオーダリングが行われることで、大量のコマンドが効率よく実行されるようになり、読み出しや書き込みに要する時間が短縮される。
その一方で、以下のように、コマンドのリオーダリングによって、実行されるまでの遅延時間が極端に大きいコマンドが発生するという問題もある。
上記のようにコマンドのリオーダリングが行われることで、実行順が早まるコマンドと、実行順が遅くなるコマンドとが生じる。一般的に、RAID制御部220に対してシーケンシャルアクセスとランダムアクセスとが混在して要求された場合、上記のようなリオーダリング機能を有するHDDでは、ランダムアクセスよりシーケンシャルアクセスの方が優先的に実行される傾向がある。また、シーケンシャルアクセスが要求された場合より、ランダムアクセスが要求された場合の方が、HDDに発行されるコマンドによって指定されるアクセスの範囲が小さいことが多い。
従って、図5の例のように、コマンドキュー312の中に、コマンド#0,#1,#3,#4のようなシーケンシャルアクセスに対応する多数のコマンドと、コマンド#2のようなランダムアクセスに対応する少数のコマンドとが蓄積されている場合には、ランダムアクセスに対応するコマンドの実行順が後回しになる傾向が強まる。HDDに対してシーケンシャルアクセスに対応するコマンドが多数連続して発行されると、ランダムアクセスに対応するコマンドの実行は、CM200がタイムアウトと判定してしまうほど遅延してしまうことがある。
また、CMの中には、アクセス時のエラー検出回数をHDDごとに記憶し、エラー検出回数が所定数に達したHDDを、故障したものとして使用中止にする機能を備えるものがある。さらに、コマンドのタイムアウトが発生した場合にもエラー発生と判断するCMもある。このような仕様のCMは、上記のようにリオーダリングによってタイムアウトが何度も発生した場合、タイムアウトが発生したHDDを、故障が発生していないにもかかわらず故障したと判定して、使用中止にしてしまう。
本実施の形態のCM200は、上記の問題点に鑑み、アクセス対象のRAIDグループに属する各HDDのステータスに応じて、アクセス性能をできるだけ高く維持しつつ、コマンドの実行遅延が生じにくくなるように、各HDDへのコマンドの発行のさせ方を調整する。
図6は、CMが備える処理機能の詳細およびCMの動作例を示す図である。
この図6では、ステージングを実行するために、ディスク#0〜#3という4つのHDDが属するRAIDグループに対して、データの読み出しが要求された場合の例を挙げて説明する。また、例として、読み出し要求の対象とされたRAIDグループのRAIDレベルはRAID−5であり、ストライプデプスは、ブロック数「0x80」であるものとする。ここで言う「ブロック」とは、1つのLBAが指し示すHDD上の領域である。また、「ストライプデプス」とは、RAIDグループに属する各HDDにおいて1ストライプに対応する領域の大きさである。なお、“0x”は、16進数で表記されていることを示す。
まず、図6を用いて、ディスク#0〜#3からのデータ読み出し処理の基本的な流れについて説明する。ホストI/O制御部210から読み出し要求を受けたRAID制御部220は、要求されたデータが格納されているRAIDグループを判別し、RAID管理テーブル240に基づいて、読み出しが要求されたデータが格納されているHDDを特定する。
ここでは例として、読み出しが要求されたデータは3つのデータに分割されて、分割データがそれぞれディスク#0,#1,#2に格納されているとともに、それらの分割データに基づくパリティがディスク#3に格納されているものとする。この場合、RAID制御部220は、ディスク制御部230に対して、ディスク#0,#1,#2からそれぞれ分割データを読み出すように依頼する。
RAID制御部220は、HDDへのアクセスをディスク制御部230に依頼する際、ACB(Action Control Block)と呼ばれる制御情報をディスク制御部230に受け渡す。ACBは、HDDごとにディスク制御部230に受け渡される。ACBには、依頼する処理の種別を示す「コマンド名」、アクセス先の先頭位置を示す「先頭LBA」、アクセス範囲の先頭からのサイズを示す「ブロック数」、および前述の「キューモード」が設定される。
図6の例では、RAID制御部220は、ディスク#0,#1,#2のそれぞれから分割データを読み出すための3つのACBを、ディスク制御部230に受け渡す。ディスク制御部230は、受け取ったACBに基づいて、ディスク#0,#1,#2のそれぞれに対してコマンドを発行する。発行されるコマンドには、ACBに設定されていた情報が含まれる。
発行されたコマンドは、ディスク#0,#1,#2のそれぞれが備えるコマンドキュー312に登録され、ディスク#0,#1,#2のそれぞれのコントローラ301によって処理される。図6の例では、ディスク#0,#1,#2のそれぞれから、読み出しを要求された分割データがCM200に送信される。CM200のディスク制御部230は、受信した分割データをRAID制御部220に受け渡し、RAID制御部220は、受け取った分割データを結合して、ホストI/O制御部210に受け渡す。ホストI/O制御部210は、RAID制御部220から受け取ったデータをRAM202のキャッシュ領域に格納するとともに、そのデータをホスト装置400に送信する。
次に、コマンドの実行遅延を生じにくくするための処理機能について説明する。このような処理機能として、ディスク制御部230は、状態監視部231を備え、RAID制御部220は、状態判定部221およびコマンド発行制御部222を備えている。
状態監視部231は、DE300内の各HDDにおけるコマンドの蓄積状況や実行状況を監視し、各HDDのステータスを判定する。ステータスとしては、「NORMAL」、「HIGH」、「TIMEOUT」があるものとする。
「HIGH」は、HDDのコマンドキュー312に蓄積された未実行コマンドの数が過多であり、HDDの負荷が高い状態を示す。後述するように、状態監視部231は、例えば、コマンドキュー312に登録された未実行コマンドの数が所定数以上の場合、あるいは、そのHDDにおける未実行コマンドの数が、同一RAIDグループに属する全HDDにおける未実行コマンド数の平均値より所定割合だけ高い場合に、ステータスを「HIGH」と判定する。
「TIMEOUT」は、コマンドのタイムアウトが発生した状態を示す。後述するように、状態監視部231は、コマンドのタイムアウトが発生すると、その後の所定時間はステータスを「TIMEOUT」のままにする。
なお、ステータスとしては、「HIGH」かつ「TIMEOUT」という状態もあり得るものとする。以下、このような状態を「HIGH|TIMEOUT」と記述する。
「NORMAL」は、「HIGH」、「TIMEOUT」、「HIGH|TIMEOUT」のいずれでもない状態を示す。すなわち、「NORMAL」は、対応するHDDにおいて特に負荷が高くなく、コマンドの実行遅延量も特に大きくない通常状態を示す。
RAID制御部220の状態判定部221は、ホストI/O制御部210から読み出しまたは書き込みの要求を受けると、ディスク管理テーブル250から、アクセス先のHDDのステータスを読み込む。
コマンド発行制御部222は、状態判定部221によって判定された、RAIDグループに属する各HDDのステータスに基づいて、ディスク制御部230に受け渡すACBを設定する。コマンド発行制御部222は、RAIDグループに属する各HDDのステータスに基づき、アクセス先のHDDにおけるアクセス性能を高く維持しつつ、各HDDでのコマンドの実行遅延が抑制されるように、ディスク制御部230によるコマンドの発行のさせ方を調整する。
次に、CM200の処理の詳細について説明する。以下の説明では、例として、上記の図6と同様に、ステージングによってDE300からデータが読み出される場合を想定する。
図7は、RAID制御部の処理手順の例を示すフローチャートである。RAID制御部220は、ホストI/O制御部210からI/O要求(ここでは読み出し要求)を受け付けるたびに、図7の処理を実行する。
[ステップS11]RAID制御部220は、ホストI/O制御部210から読み出し要求を受け付ける。
[ステップS12]RAID制御部220は、読み出しが要求されたデータが格納されているRAIDグループを判別する。ここでは例として、読み出しが要求されたデータが格納されているRAIDグループは、ディスク#0〜#3という4つのHDDが属し、RAIDレベルがRAID−5であるものとする。
RAID制御部220の状態判定部221は、RAID管理テーブル240を参照して、判別されたRAIDグループに属するHDDを特定する。状態判定部221は、特定した各HDDのステータスをディスク管理テーブル250から読み出し、読み出したすべてのステータスが「NORMAL」であるかを判定する。すべてのステータスが「NORMAL」である場合、ステップS13の処理が実行される。一方、読み出したステータスの中に1つでも「NORMAL」以外のものがある場合、ステップS14の処理が実行される。
[ステップS13]RAID制御部220のコマンド発行制御部222は、第1のコマンド発行制御を実行する。第1のコマンド発行制御は、通常の制御であり、コマンド発行制御部222は、ディスク#0〜#3のそれぞれから、読み出しを要求されたデータを分割した分割データを読み出すためのACBをHDDごとに設定して、ディスク制御部230に受け渡す。このとき、各ACBには、キューモードとしてシンプルキューが設定される。
コマンド発行制御部222は、ディスク制御部230からの応答を待機し、ディスク#0〜#3から読み出された分割データをディスク制御部230から受け取る。コマンド発行制御部222は、受け取った分割データを結合して、ホストI/O制御部210に受け渡す。
[ステップS14]コマンド発行制御部222は、ステップS12でディスク管理テーブル250から読み出したステータスの中で、「NORMAL」以外のステータスは1つだけかを判定する。「NORMAL」以外のステータスが1つの場合、ステップS15の処理が実行される。一方、「NORMAL」以外のステータスが2つ以上ある場合、ステップS16の処理が実行される。
[ステップS15]コマンド発行制御部222は、第2のコマンド発行制御を実行する。後述するように、第2のコマンド発行制御では、コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、ステータスが「NORMAL」以外であるHDDからのデータ読み出しを抑止する。コマンド発行制御部222は、必要に応じて分割データの代わりにパリティを読み出すようにACBを設定し、読み出されたパリティを基に一部の分割データを計算によって復元する。
[ステップS16]コマンド発行制御部222は、ステップS12でディスク管理テーブル250から読み出したステータスのうち、「NORMAL」以外のステータスがすべて「TIMEOUT」であるかを判定する。「NORMAL」以外のステータスがすべて「TIMEOUT」である場合、ステップS17の処理が実行される。一方、「NORMAL」以外のステータスの中に「TIMEOUT」以外のステータス(「HIGH」または「HIGH|TIMEOUT」)が1つ以上ある場合、ステップS18の処理が実行される。
[ステップS17]コマンド発行制御部222は、第3のコマンド発行制御を実行する。後述するように、第3のコマンド発行制御では、コマンド発行制御部222は、各HDDから1つのコマンドを用いて読み出すデータサイズ(ブロック数)を小さくするように制御する。
[ステップS18]コマンド発行制御部222は、第4のコマンド発行制御を実行する。後述するように、第4のコマンド発行制御では、コマンド発行制御部222は、アクセスパターンがランダムアクセスである場合に、発行するコマンドのキューモードをオーダードキューに変更するように制御する。
以下、第2〜第4のコマンド発行制御について説明する。
まず、図8は、第2のコマンド発行制御について説明するための図である。
図8の例では、ホストI/O制御部210は、RAID制御部220に対してデータ#10の読み出しを要求する。読み出しを要求されたデータ#10は、3つの分割データ#10〜#12に分割されており、分割データ#10,#11,#12がそれぞれディスク#0,#1,#2の同一ストライプ番号の領域に記録されているものとする。また、ディスク#3における分割データ#10〜#12と同一ストライプ番号の領域には、分割データ#10〜#12を基に算出されたパリティ#10が記録されている。
通常制御である第1のコマンド発行制御(図7のステップS13)では、RAID制御部220のコマンド発行制御部222は、ディスク#0から分割データ#10を読み出すためのコマンド、ディスク#1から分割データ#11を読み出すためのコマンド、ディスク#2から分割データ#12を読み出すためのコマンドをそれぞれ発行させるように設定したACBを生成して、これら3つのACBをディスク制御部230に受け渡す。
これに対して、図7のステップS14で、例えばディスク#1〜#3のステータスが「NORMAL」であるが、ディスク#0のステータスが「NORMAL」以外(例えば「HIGH」)であった場合、コマンド発行制御部222は、第2のコマンド発行制御(図7のステップS15)を実行する。この場合、コマンド発行制御部222は、ディスク#0から分割データ#10を読み出すためのACBをディスク制御部230に受け渡さないようにして、ディスク#0からのデータの読み出しを抑止する。その代わりに、コマンド発行制御部222は、ディスク#3からパリティ#10を読み出すためのACBをディスク制御部230に受け渡す。
ディスク制御部230は、ディスク#1〜#3にそれぞれコマンドを発行し、ディスク#1,#2,#3からそれぞれ分割データ#11,#12、パリティ#10を読み出す。コマンド発行制御部222は、読み出された分割データ#11,#12、パリティ#10を用いて、排他的論理和(XOR)などの所定の演算を実行することで、分割データ#10を復元する。コマンド発行制御部222は、復元した分割データ#10と、読み出された分割データ#11,#12とを結合して分割データ#10を復元し、分割データ#10をホストI/O制御部210に受け渡す。
上記の処理では、ステータスが「NORMAL」でないHDDに対するコマンドの発行が抑止されるので、コマンド発行制御部222は、そのHDDのコマンドキュー312に蓄積されているコマンド数を減らすことができる。例えば、ステータスが「HIGH」であるHDDに対するコマンドの発行を抑止することで、そのHDDのステータスを確実に「NORMAL」に戻すことができ、ステータスが「NORMAL」に戻った後のアクセス速度を向上させることができる。また、例えば、ステータスが「TIMEOUT」であるHDDに対するコマンドの発行を抑止することで、そのHDDのコマンドキュー312に蓄積されたコマンドのうち、過大な実行遅延が生じているコマンドが確実に実行されるようになり、タイムアウトも発生しにくくなる。
図9は、第2のコマンド発行制御の処理手順の例を示すフローチャートである。
[ステップS21]コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、ステータスが「NORMAL」である各HDDから分割データおよびパリティを読み出すためのACBを、HDDごとに生成する。このとき、コマンド発行制御部222は、各ACBに、キューモードとしてシンプルキューを設定する。コマンド発行制御部222は、設定したACBをディスク制御部230に受け渡し、コマンドの発行を依頼する。
[ステップS22]コマンド発行制御部222は、発行されたコマンドに応じて、ステータスが「NORMAL」である各HDDから読み出された分割データおよびパリティを、ディスク制御部230から受け取る。コマンド発行制御部222は、読み出しが要求されたデータに含まれる分割データの中に、ステータスが「NORMAL」以外のHDDに記録されている分割データがある場合には、その分割データを、同一ストライプ番号に属する他の分割データおよびパリティを基に計算によって復元する。コマンド発行制御部222は、復元した分割データと、HDDから読み出された分割データとを結合して、ホストI/O制御部210に受け渡す。
なお、以上の図8、図9では、アクセス先のRAIDグループのRAIDレベルがRAID−5であった場合について説明したが、RAID−4である場合でも同様の処理が実行される。また、アクセス先のRAIDグループのRAIDレベルがRAID−6である場合には、図7の処理が次のように変更される。
図7のステップS14の判定処理では、ステータスが「NORMAL」以外のHDDが1台または2台の場合、ステップS15の処理が実行され、ステータスが「NORMAL」以外のHDDが3台以上ある場合、ステップS16の処理が実行される。ステップS15の第2のコマンド発行制御(図9の処理)では、ステータスが「NORMAL」以外のHDDに対するコマンドの発行が抑止される。そして、必要に応じて、HDDから読み出された分割データおよび1つまたは2つのパリティを基に、ステータスが「NORMAL」以外のHDDに記録されている分割データが復元される。
上記のように、ステップS14での台数の条件は、RAIDグループにおけるデータの冗長度に応じて変更される。具体的には、ステップS14での台数の判定しきい値としては、1ストライプに含まれるパリティの数が設定される。
次に、図10は、第3のコマンド発行制御について説明するための図である。
図10の例では、ホストI/O制御部210は、RAID制御部220に対してデータ#20の読み出しを要求する。読み出しを要求されたデータ#20は、6つの分割データ#20〜#25に分割されているものとする。そして、分割データ#20,#21,#22がそれぞれディスク#0,#1,#2の同一ストライプ番号の領域に記録され、分割データ#23,#24,#25がそれぞれディスク#3,#0,#1の同一ストライプ番号の領域に記録されているものとする。また、ディスク#3における分割データ#20〜#22と同一ストライプ番号の領域には、分割データ#20〜#22を基に算出されたパリティ#20が記録され、ディスク#2における分割データ#23〜#25と同一ストライプ番号の領域には、分割データ#23〜#25を基に算出されたパリティ#21が記録されている。
上記のケースで、通常制御である第1のコマンド発行制御(図7のステップS13)が実行される場合の処理を、図10中にコマンド発行処理P0として示す。この場合、RAID制御部220のコマンド発行制御部222は、ディスク#0から分割データ#20,#24を読み出すためのコマンド、ディスク#1から分割データ#21,#25を読み出すためのコマンド、ディスク#2から分割データ#22を読み出すためのコマンド、および、ディスク#3から分割データ#23を読み出すためのコマンドをそれぞれ発行させるように設定したACBを生成して、これら4つのACBをディスク制御部230に受け渡す。このようにACBが生成された場合、ディスク#0,#1のそれぞれに対して、ストライプデプス(ブロック数「0x80」)より大きなサイズのデータを読み出すためのコマンドが発行される。
これに対して、図7のステップS16で、例えばディスク#2,#3のステータスが「NORMAL」であるが、ディスク#0,#1のステータスが「TIMEOUT」であった場合、コマンド発行制御部222は、第3のコマンド発行制御(図7のステップS17)を実行する。この場合、コマンド発行制御部222は、少なくともディスク#0,#1にそれぞれに発行される1コマンド当たりの読み出しデータサイズ(すなわち、1コマンドに設定するブロック数)が小さくなるように制御する。
本実施の形態では例として、コマンド発行制御部222は、各HDDに発行される1コマンド当たりの読み出しブロック数の上限が、1ストライプデプスに対応するブロック数「0x80」になるように制御する。
具体的には、コマンド発行制御部222は、図10にコマンド発行処理P1,P2として示すように、ディスク#0から分割データ#20を読み出すためのコマンドと、ディスク#0から分割データ#24を読み出すためのコマンドを、ディスク制御部230に別々に発行させる。すなわち、コマンド発行制御部222は、前者のコマンドの発行を指示するためのACBと、後者のコマンドの発行を指示するためのACBとを、ディスク制御部230に受け渡す。
また、コマンド発行制御部222は、ディスク#1から分割データ#21を読み出すためのコマンドと、ディスク#1から分割データ#25を読み出すためのコマンドを、ディスク制御部230に別々に発行させる。すなわち、コマンド発行制御部222は、前者のコマンドの発行を指示するためのACBと、後者のコマンドの発行を指示するためのACBとを、ディスク制御部230に受け渡す。
なお、パリティ#20,#21についてはHDDから特に読み出す必要はない。ただし、コマンド発行制御部222は、ディスク#2から分割データ#22を読み出すためのコマンド、ディスク#2からパリティ#21を読み出すためのコマンド、ディスク#3からパリティ#20を読み出すためのコマンド、ディスク#3から分割データ#23を読み出すためのコマンドを、ディスク制御部230に別々に発行させて、パリティ#20,#21も読み出されるようにしてもよい。この場合、各HDDに発行されるコマンド数が揃えられ、コマンドの管理を容易にすることができる。
図5で述べたように、HDDでのコマンドのリオーダリング処理では、読み出しブロック数が小さいコマンドほど、実行順が後になる可能性が高まる。図10のケースでは、ステータスが「TIMEOUT」であるディスク#0,#1のそれぞれのコマンドキュー312では、多数のシーケンシャルアクセスのコマンド(すなわち、読み出しブロック数が比較的大きいコマンド)と、少数のランダムアクセスのコマンド(すなわち、読み出しブロック数が比較的小さいコマンド)とが混在している状態と推定される。そして、ディスク#0,#1のそれぞれのコマンドキュー312では、すでにランダムアクセスのコマンドについての大きな実行遅延が発生していると推定される。
このような状態で、例えばディスク#0に対して、図10の分割データ#20,#24を一度に読み出すためのコマンドのような、シーケンシャルアクセスのコマンドをさらに発行してしまうと、すでに実行が大きく遅延しているランダムアクセスのコマンドの実行順がさらに後回しになる可能性が高まる。
このような事態を防止するために、第3のコマンド発行制御では、発行されたそれぞれのコマンドに応じてHDDから読み出されるブロック数が小さくなるように制御される。これにより、コマンドの実行遅延が発生しにくくなる。
ここで、図11は、読み出しブロック数の違いによるコマンドの実行順の変化について説明するための図である。この図11では、図5と同様に、あるHDD内の1つの磁気ディスク320のトラックのうち、1つのトラック321上の2つの領域A,Bにそれぞれ記録されたデータの例を示している。
図11の例では、領域Aにはデータ#30,#32が連続的に記録されており、領域Bにはデータ#31が記録されている。データ#30,#32のブロック数はともに2ストライプデプスに対応する「0x100」であり、データ#31のブロック数は1ストライプデプスより小さい「0x30」であるとする。以下、ホストI/O制御部210からRAID制御部220に対して、データ#30,#31,#32をそれぞれ読み出すような読み出し要求が、この順番で出力されたものとする。
第1のコマンド発行制御が行われる場合、RAID制御部220のコマンド発行制御部222は、データ#30の読み出しを要求するコマンド#30、データ#31の読み出しを要求するコマンド#31、データ#32の読み出しを要求するコマンド#32を、ディスク制御部230に順に発行させる。この場合、データ#30,#32は連続した領域に記録されているため、HDDのキュー制御部311は、コマンド#30,#32,#31の順に実行する可能性が高い。
一方、第3のコマンド発行制御が行われる場合、コマンド発行制御部222は、データ#30が、それぞれブロック数「0x80」のデータ#30_0,#30_1に分割して読み出されるように制御する。また、コマンド発行制御部222は、データ#32が、それぞれブロック数「0x80」のデータ#32_0,#32_1に分割して読み出されるように制御する。
これにより、HDDのコマンドキュー312には、データ#30_0の読み出しを要求するコマンド#30_0、データ#30_1の読み出しを要求するコマンド#30_1、データ#31の読み出しを要求するコマンド#31、データ#32_0の読み出しを要求するコマンド#32_0、データ#32_1の読み出しを要求するコマンド#32_1の順にコマンドが蓄積される。
このような第3のコマンド発行制御によれば、コマンドごとに読み出されるデータのサイズが小さくなることで、HDDのコマンドキュー312に蓄積された未実行のコマンドのうち、ランダムアクセスと推定されるコマンドの相対的な数が増加していく。一方、優先的に実行されやすいシーケンシャルアクセスのコマンドの相対的な数は減少していく。これにより、コマンドの実行順序が後回しになりにくくなる。
このため、キュー制御部311は、例えば、コマンド#30_0の次にコマンド#30_1を実行させるとは限らず、コマンド#31を先に実行させてから、コマンド#30_1,#32_0,#32_1の順に実行させるようにコマンド実行順を決定する可能性もある。あるいは、キュー制御部311は、コマンド#30_0,#30_1を実行した後に、コマンド#31を実行させるように、コマンド実行順を決定する可能性もある。
また、HDDのキュー制御部311は、基本的にはLBAが近いデータが読み出されるようにコマンド実行順を決定するものの、例えば、次の1つのコマンドだけでなく、複数のコマンドを実行したときの処理時間が短くなるようにコマンド実行順を決定する。このため、キュー制御部311は、上記のように、コマンド#30_0の次にコマンド#30_1を実行させるとは限らず、コマンド#31を先に実行させてから、コマンド#30_1,#32_0,#32_1の順に実行させるようにコマンド実行順を決定する可能性もある。
換言すると、コマンドごとに読み出されるデータのサイズが小さくなって、蓄積されるコマンドの数が増加することで、次に実行するコマンドを決定する機会が増加する。その結果、ランダムアクセスのコマンドが第1のコマンド発行制御の実行時より早い順序で実行される可能性が高まる、とも言える。
さらに、例えば、データ#30,#32の読み出しとデータ#31の読み出しとがそれぞれ別のCMから要求される場合もある。このケースで、データ#30,#32の読み出しを要求するCMにおいて第3のコマンド発行制御が行われると、HDDのコマンドキュー312には、コマンド#30_0,#31,#30_1,#32_0,#32_1の順にコマンドが蓄積される可能性もある。この場合には、コマンド#30_1より先にコマンド#31が実行される可能性がさらに高まる。
以上のように、第3のコマンド発行制御によれば、コマンドキュー312に蓄積される1コマンド当たりの読み出しブロック数が小さくされることで、ランダムアクセスのコマンドの実行遅延が生じにくくなり、タイムアウトの発生確率が低下する。また、すでに実行が大きく遅延していたランダムアクセスのコマンドの実行順が、さらに後回しになる確率も低くなる。
図12は、第3のコマンド発行制御の処理手順の例を示すフローチャートである。
[ステップS31]コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのそれぞれから読み出すデータの中に、ストライプデプスより大きいサイズのデータがあるかを判定する。ストライプデプスより大きいサイズの読み出しデータがない場合には、ステップS32の処理が実行される。一方、ストライプデプスより大きいサイズの読み出しデータがある場合には、ステップS33の処理が実行される。
[ステップS32]コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、読み出し対象のデータが格納されたHDDのそれぞれからデータを読み出すためのACBを、HDDごとに1つずつ生成する。このとき、コマンド発行制御部222は、各ACBに、キューモードとしてシンプルキューを設定する。コマンド発行制御部222は、生成したACBをディスク制御部230に受け渡し、コマンドの発行を依頼する。
[ステップS33]コマンド発行制御部222は、各HDDから読み出すデータのうち、ストライプデプスより大きいサイズのデータの範囲を、ストライプデプス単位で分割する。
[ステップS34]コマンド発行制御部222は、ステップS33で分割した範囲のそれぞれからデータを読み出すためのACBを生成する。これにより、ストライプデプスより大きいサイズのデータを読み出すHDDについては複数のACBが生成される。また、コマンド発行制御部222は、ストライプデプス以下のサイズのデータを読み出すHDDがある場合には、そのHDDについて、ステップS32と同様に1つのACBを生成する。なお、コマンド発行制御部222は、このようにして生成した各ACBに、キューモードとしてシンプルキューを設定する。コマンド発行制御部222は、生成したACBをディスク制御部230に受け渡し、コマンドの発行を依頼する。
[ステップS35]コマンド発行制御部222は、発行されたコマンドに応じてHDDから読み出されたデータを、ディスク制御部230から受け取る。コマンド発行制御部222は、受け取ったデータを結合して、ホストI/O制御部210に受け渡す。
なお、以上の第3のコマンド発行制御の処理手順では、コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、ストライプデプスより大きいサイズのデータが読み出されるすべてのHDDについて、1コマンド当たりの読み出しブロック数の上限がストライプデプスのブロック数になるように制御した。しかしながら、コマンド発行制御部222は、例えば、ストライプデプスより大きいサイズのデータを読み出すHDDのうち、ステータスが「TIMEOUT」であるHDDについてのみ、1コマンド当たりの読み出しブロック数の上限がストライプデプスのブロック数になるようにしてもよい。
また、図5に示したように、本実施の形態において、コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、複数のHDDのステータスが「TIMEOUT」で、その他のHDDのステータスが「NORMAL」である場合に、第3のコマンド発行制御を実行した。しかしながら、他の例として、コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、1つのHDDのステータスが「TIMEOUT」で、その他のHDDのステータスが「NORMAL」である場合にも、第2のコマンド発行制御ではなく第3のコマンド発行制御を実行してもよい。また、この場合、第3のコマンド発行制御では、ステータスが「TIMEOUT」であるHDDについてのみ、1コマンド当たりの読み出しブロック数の上限がストライプデプスのブロック数になるように制御されてもよい。
次に、第4のコマンド発行制御について説明する。図7のステップS16において、ステータスが「NORMAL」でないHDDの中に、ステータスが「HIGH」または「HIGH|TIMEOUT」であるHDDが1つでも存在する場合には、ステップS18の第4のコマンド発行制御が実行される。ステータスが「HIGH」または「HIGH|TIMEOUT」であるHDDでは、コマンドキューに多数の未実行コマンドが蓄積されていて、負荷が過多の状態になっている。このように負荷が高くなったHDDに対して、第3のコマンド発行制御を適用して、通常より多くのコマンドを発行してしまうと、そのHDDの負荷がさらに高くなってしまう。
そこで、コマンド発行制御部222は、次のような第4のコマンド発行制御を行う。第4のコマンド発行制御では、コマンド発行制御部222は、HDDへのアクセスパターンがシーケンシャルかランダムかを判定し、ランダムアクセスと判定した場合に、発行するコマンドのキューモードをシンプルキューからオーダードキューに変更する。
図13は、第4のコマンド発行制御について説明するための図である。
図13では例として、ホストI/O制御部210からRAID制御部220に対して、読み出し要求#1,#2,#3という3回の読み出し要求が順に行われたものとする。また、図13では例として、アクセス先のRAIDグループに属するディスク#0〜#3のうち、ディスク#0,#1のステータスが「HIGH」であり、ディスク#2,#3のステータスが「NORMAL」であるものとする。
読み出し要求#1によって読み出しを要求されたデータは、6つの分割データ#40〜#45に分割されているものとする。そして、分割データ#40,#41,#42がそれぞれディスク#0,#1,#2の同一ストライプ番号の領域に記録され、分割データ#43,#44,#45がそれぞれディスク#3,#0,#1の同一ストライプ番号の領域に記録されているものとする。また、ディスク#3における分割データ#40〜#42と同一ストライプ番号の領域には、分割データ#40〜#42を基に算出されたパリティ#40が記録され、ディスク#2における分割データ#43〜#45と同一ストライプ番号の領域には、分割データ#43〜#45を基に算出されたパリティ#41が記録されている。
読み出し要求#2によって読み出しを要求されたデータは、それぞれディスク#0,#1,#2に記録された分割データ#50,#51,#52を含むものとする。ただし、分割データ#50,#51,#52のそれぞれのサイズは、ストライプデプスより小さいものとする。すなわち、読み出し要求#2では、間欠的な領域に格納されたデータの読み出しが要求されている。また、ディスク#3における分割データ#50〜#52と同一ストライプ番号の領域には、分割データ#50〜#52を基に算出されたパリティ#50が記録されている。
読み出し要求#3によって読み出しを要求されたデータは、6つの分割データ#60〜#65に分割されているものとする。そして、分割データ#60,#61,#62がそれぞれディスク#0,#1,#2の同一ストライプ番号の領域に記録され、分割データ#63,#64,#65がそれぞれディスク#3,#0,#1の同一ストライプ番号の領域に記録されているものとする。また、ディスク#3における分割データ#60〜#62と同一ストライプ番号の領域には、分割データ#60〜#62を基に算出されたパリティ#60が記録され、ディスク#2における分割データ#63〜#65と同一ストライプ番号の領域には、分割データ#63〜#65を基に算出されたパリティ#61が記録されている。
第4のコマンド発行制御では、RAID制御部220のコマンド発行制御部222は、読み出し要求ごとに、HDDへのアクセスタイプがシーケンシャルアクセスかランダムアクセスかを判定する。本実施の形態では例として、コマンド発行制御部222は、すべてのHDDからの読み出しデータサイズがストライプデプス以下である場合に、ランダムアクセスと判定する。
コマンド発行制御部222は、読み出し要求#1を受けたとき、ディスク#0から分割データ#40,#44を読み出すためのコマンド、ディスク#1から分割データ#41,#45を読み出すためのコマンド、ディスク#2から分割データ#42を読み出すためのコマンド、および、ディスク#3から分割データ#43を読み出すためのコマンドをそれぞれ発行させるように設定したACBを生成して、これら4つのACBをディスク制御部230に受け渡す。この場合、ディスク#0,#1から読み出されるデータのサイズがストライプデプスより大きくなることから、コマンド発行制御部222は、生成した4つのACBにおいてキューモードをシンプルキューに設定する。
一方、コマンド発行制御部222は、読み出し要求#2を受けたとき、ディスク#0から分割データ#50を読み出すためのコマンド、ディスク#1から分割データ#51を読み出すためのコマンド、および、ディスク#2から分割データ#52を読み出すためのコマンドをそれぞれ発行させるように設定したACBを生成して、これら3つのACBをディスク制御部230に受け渡す。この場合、ディスク#0〜#3から読み出されるデータのサイズがいずれもストライプデプス以下になることから、コマンド発行制御部222は、生成した3つのACBにおいてキューモードをオーダードキューに設定する。
なお、読み出し要求#3を受けた場合も、ディスク#0,#1から読み出されるデータのサイズがストライプデプスより大きくなることから、コマンド発行制御部222は、発行させるコマンドのキューモードをシンプルキューに設定する。
図14は、キューモードの違いによるコマンドの実行順の変化について説明するための図である。この図14では、図5と同様に、あるHDD内の1つの磁気ディスク320のトラックのうち、1つのトラック321上の2つの領域A,Bにそれぞれ記録されたデータの例を示している。
図14の例では、領域Aにはデータ#70,#72が連続的に記録されており、領域Bにはデータ#71が記録されている。データ#70,#72のブロック数はともに2ストライプデプスに対応する「0x100」であり、データ#71のブロック数は1ストライプデプスより小さい「0x30」であるとする。また、RAID制御部220のコマンド発行制御部222は、データ#70,#71,#72をそれぞれ読み出すためのコマンド#70,#71,#72が、この順番で発行されるように制御するものとする。
第4のコマンド発行制御では、コマンド発行制御部222は、コマンド#70,#72のキューモードをシンプルキューに設定する一方、コマンド#71のキューモードをオーダードキューに設定する。仮に、コマンド#71のキューモードも、コマンド#70,#72と同様にシンプルキューである場合、コマンドの実行順はコマンド#70,#72,#71となる可能性が高い。これに対して、コマンド#71のキューモードがオーダードキューに設定されることで、コマンド#71はコマンド#72より前に確実に実行されるようになる。
このように、第4のコマンド発行制御では、コマンド発行制御部222は、第3のコマンド発行制御のようにアクセス先のHDDに対して発行するコマンド数を増やす代わりに、発行するコマンドのキューモードをアクセスパターンに応じて変更する。発行するコマンド数が増えないことで、すでに負荷が高くなっているアクセス先のHDDにおいてさらに負荷が高くなる事態が回避される。
また、コマンド発行制御部222は、発行するすべてのコマンドのキューモードをオーダードキューに設定するのではなく、ランダムアクセスのコマンドのみをオーダードキューに設定する。これにより、実行遅延が生じやすいコマンドのみがオーダードキューに設定されるようになる。一方、シーケンシャルアクセスのコマンドについては、キューモードがシンプルキューのまま変更されないことで、HDDのリオーダリング機能によって効率よく実行されるようになる。
第4のコマンド発行制御では、ランダムアクセスのコマンドのキューモードがオーダードキューに設定されることで、第3のコマンド発行制御と比較して、シーク時間や回転待ち時間が長くなり、その結果、読み出し速度が低下する可能性がある。しかしながら、リオーダによって実行遅延が発生しにくいシーケンシャルアクセスのコマンドについてはオーダードキューに設定しないことで、読み出し速度の低下幅が抑制される。すなわち、第4のコマンド発行制御によれば、HDDからの読み出し速度の低下幅を抑制しながら、コマンドのタイムアウトの発生確率を低下させることができる。
図15は、第4のコマンド発行制御の処理手順の例を示すフローチャートである。
[ステップS41]コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのそれぞれから読み出すデータの中に、ストライプデプスより大きいサイズのデータがあるかを判定する。ストライプデプスより大きいサイズの読み出しデータがない場合には、ステップS43の処理が実行される。一方、ストライプデプスより大きいサイズの読み出しデータが1つでもある場合には、ステップS42の処理が実行される。
[ステップS42]コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、読み出し対象のデータが格納されたHDDのそれぞれからデータを読み出すためのACBを、HDDごとに1つずつ生成する。このとき、コマンド発行制御部222は、各ACBに、キューモードとしてシンプルキューを設定する。コマンド発行制御部222は、生成したACBをディスク制御部230に受け渡し、コマンドの発行を依頼する。
[ステップS43]コマンド発行制御部222は、アクセス先のRAIDグループに属するHDDのうち、読み出し対象のデータが格納されたHDDのそれぞれからデータを読み出すためのACBを、HDDごとに1つずつ生成する。このとき、コマンド発行制御部222は、各ACBに、キューモードとしてオーダードキューを設定する。コマンド発行制御部222は、生成したACBをディスク制御部230に受け渡し、コマンドの発行を依頼する。
[ステップS44]コマンド発行制御部222は、発行されたコマンドに応じてHDDから読み出されたデータを、ディスク制御部230から受け取る。コマンド発行制御部222は、受け取ったデータを結合して、ホストI/O制御部210に受け渡す。
RAID制御部220のコマンド発行制御部222は、以上で説明した第2〜第4のコマンド発行制御を、RAIDグループに属するHDDのステータスに応じて選択して実行する。これにより、アクセス先のHDDにおけるアクセス性能を高く維持しつつ、各HDDでのコマンドの実行遅延が抑制されて、コマンドのタイムアウトが発生しにくくなる。
また、例えば、ディスク制御部230がHDDごとのエラー点数をカウントする機能を備え、コマンドのタイムアウトが発生した場合もエラーと判定する場合には、エラー点数がむやみに増加しないようにすることができる。ディスク制御部230は、エラー点数をカウントする機能を備える場合、エラー点数が所定値に達すると、対応するHDDが故障していると判定して、そのHDDをRAIDグループから切り離して使用不可能にする。第2〜第4のコマンド発行制御が適応的に実行されることで、コマンドの実行遅延という故障ではない原因によって、HDDが切り離される事態の発生確率を低減することができる。
次に、図16は、ディスク制御部の処理手順の例を示すフローチャートである。この図16の処理は、図7の手順に従ってRAID制御部220から出力された1つのACBを受け付けるごとに、ディスク制御部230によって実行される。従って、図16の処理は、アクセス先のHDDごとに実行される。
[ステップS51]ディスク制御部120の状態監視部231は、アクセス先のHDDのコマンドキュー312に蓄積された未実行コマンドの数が、所定の最大値の80%以上であるかを判定する。未実行コマンドの数が最大値の80%未満である場合には、ステップS52の処理が実行される。一方、未実行コマンドの数が最大値の80%以上である場合には、ステップS53の処理が実行される。
なお、ディスク制御部120は、例えば、RAID制御部220から受け取り、かつ、対応するコマンドの応答を受信していないACBの数を計数することで、アクセス先のHDDのコマンドキュー312に蓄積された未実行コマンドの数を認識することができる。
また、このステップS51で判定に使用される割合のしきい値は、任意に設定可能である。
[ステップS52]状態監視部231は、RAID管理テーブル240を参照して、アクセス先のHDDが属するRAIDグループを判別する。状態監視部231は、判別したRAIDグループに属する全HDDのコマンドキュー312に蓄積された未実行コマンドの数を判別し、これらの未実行コマンド数の平均値を計算する。
状態監視部231は、アクセス先のHDDのコマンドキュー312に蓄積された未実行コマンドの数が、算出した平均値の2倍以上かを判定する。この判定では、未実行コマンドの数が平均値の2倍以上である場合に、RAIDグループに属するHDD間で未実行コマンド数に大きな偏りが発生していて、アクセス先のHDDの負荷が相対的に過多になっていると判定される。
未実行コマンドの数が平均値の2倍以上である場合には、ステップS53の処理が実行される。一方、未実行コマンドの数が平均値の2倍未満である場合には、ステップS54の処理が実行される。
なお、このステップS52で判定に使用されるしきい値は、任意に設定可能である。
[ステップS53]ステップS51またはステップS52で「Yes」と判定された場合、アクセス先のHDDの負荷が過多になっていると判定される。このとき、状態監視部231は、ディスク管理テーブル250に登録された、アクセス先のHDDのステータスを、「HIGH」に更新する。なお、登録されているステータスが「TIMEOUT」の場合には、「HIGH|TIMEOUT」に更新される。また、登録されているステータスが「HIGH」または「HIGH|TIMEOUT」の場合には、そのまま維持される。
[ステップS54]状態監視部231は、ディスク管理テーブル250を参照して、アクセス先のHDDのステータスが「TIMEOUT」であるかを判定する。ステータスが「TIMEOUT」である場合には、ステップS56の処理が実行される。一方、ステータスが「TIMEOUT」以外である場合、すなわち、ステータスが「NORMAL」、「HIGH」、「HIGH|TIMEOUT」のいずれかである場合には、ステップS55の処理が実行される。
[ステップS55]ステップS51およびステップS52でともに「No」と判定された場合、アクセス先のHDDの負荷は特に高くないと判定される。このとき、状態監視部231は、ディスク管理テーブル250に登録された、アクセス先のHDDのステータスを、「NORMAL」に更新する。
ただし、登録されているステータスが「HIGH|TIMEOUT」の場合、状態判定部221は、ステータスを「TIMEOUT」に更新する。また、登録されているステータスが「NORMAL」の場合には、そのまま維持される。
[ステップS56]ディスク制御部230は、RAID制御部220から受け付けたACBに基づいて、HDDにコマンドを発行する。
[ステップS57]状態監視部231は、ステップS56でコマンドが発行されてからの経過時間をカウントし、コマンド発行から所定時間内にHDDから応答があったかを判定する。所定時間内に応答があった場合には、ステップS60の処理が実行される。一方、所定時間内に応答がなかった場合には、ステップS58の処理が実行される。
[ステップS58]状態監視部231は、ステップS57でコマンド発行から所定時間内に応答がなかった場合、タイムアウトが発生したと判定する。状態監視部231は、ディスク管理テーブル250に登録された、アクセス先のHDDのステータスを、「TIMEOUT」に更新する。
ただし、登録されているステータスが「HIGH」の場合、状態監視部231は、ステータスを「HIGH|TIMEOUT」に更新する。また、登録されているステータスが「TIMEOUT」または「HIGH|TIMEOUT」の場合には、そのまま維持される。
[ステップS59]状態監視部231は、ステップS58の処理が実行されてからの経過時間のカウントを開始する。また、ステップS58の実行前の時点でステータスがすでに「TIMEOUT」または「HIGH|TIMEOUT」であった場合には、状態監視部231は、経過時間のカウント値を初期値に戻してカウントを継続する。すなわち、ステップS59では、アクセス先のHDDについて、最後にタイムアウトが検出されてからの経過時間のカウントが開始される。
[ステップS60]状態監視部231は、ディスク管理テーブル250を参照し、アクセス先のHDDのステータスをチェックする。ステータスが「TIMEOUT」または「HIGH|TIMEOUT」である場合には、ステップS61の処理が実行される。一方、ステータスが「NORMAL」または「HIGH」である場合には、ステップS63の処理が実行される。
[ステップS61]状態監視部231は、アクセス先のHDDについて最後にタイムアウトが検出されてからの経過時間をチェックする。経過時間が10分以上である場合には、ステップS62の処理が実行される。一方、経過時間が10分未満である場合には、ステップS63の処理が実行される。
なお、このステップS61で判定に使用される経過時間のしきい値は、任意に設定可能である。
[ステップS62]状態監視部231は、ディスク管理テーブル250に登録された、アクセス先のHDDのステータスを、「NORMAL」に更新する。ただし、登録されているステータスが「HIGH|TIMEOUT」の場合、状態監視部231は、ステータスを「HIGH」に更新する。
[ステップS63]ディスク制御部230は、RAID制御部220に対して応答する。ステップS56でのコマンド発行から所定時間内にHDDからの応答を受信した場合(ステップS57で「Yes」の場合)、ディスク制御部230は、HDDから読み出されたデータをRAID制御部220に受け渡す。一方、ステップS56でのコマンド発行から所定時間内にHDDからの応答を受信できなかった場合(ステップS57で「No」の場合)、ディスク制御部230は、RAID制御部220から受け取ったACBに基づくコマンドについてタイムアウトが発生したことをRAID制御部220に通知する。
上記のフローチャートのステップS57〜S62では、状態監視部231は、発行したコマンドに対する応答を所定時間以内に受信したかを監視する。そして、状態監視部231は、所定時間以内に受信しなかった場合には、タイムアウトが検出されたことを示すようにステータスを更新する(ステップS58)。また、状態監視部231は、タイムアウトが検出されなくなった場合でも、最後にタイムアウトが検出されてから所定時間が経過するまでは、ステータスの値をタイムアウトが検出されたことを示す状態のままにする(ステップS61で「No」の場合に対応)。
ここで、前述のように、ディスク制御部230は、HDDごとにエラー点数をカウントする機能を備えていてもよい。例えば、ディスク制御部230は、HDDにアクセスしたときにエラーが検出されると、検出されたエラーの種類に応じた点数を、アクセス先のHDDに対応付けられたエラー点数に加算する。
また、ディスク制御部230は、あるHDDについて最後にエラーが検出されてから一定時間が経過すると、そのHDDに対応するエラー点数を「0」にリセットしてもよい。これは、一定時間エラーが検出されない場合、それ以前に検出されたエラーは一時的な原因によるものと推定されるからである。
このようなエラー点数のリセット機能を備え、かつ、コマンドのタイムアウトが発生した場合でもエラーと判定する場合には、図16においてタイムアウトが検出されてからの経過時間のカウント機能が、エラー点数のリセットの要否を判定するためのカウント機能と共用されてもよい。この場合、ステップS61の判定で使用される経過時間のしきい値を、エラー点数をリセットすると判定する際のしきい値と一致させてもよい。
また、前述のように、図16の処理によれば、状態監視部231は、タイムアウトが検出されなくなった場合でも、最後にタイムアウトが検出されてから所定時間が経過するまでは、ステータスの値をタイムアウトが検出されたことを示す状態のままにする。これにより、RAIDグループに属するいずれかのHDDにおいて最後にタイムアウトが検出されてから一定の期間では、RAIDグループに属するHDDの少なくとも1つのHDDのステータスが「TIMEOUT」または「HIGH|TIMEOUT」になる。
このため、RAID制御部220のコマンド発行制御部222は、RAIDグループに属するいずれかのHDDにおいて最後にタイムアウトが検出されてから一定の期間、通常処理ではない第2〜第4のコマンド発行制御のいずれかを実行する。これにより、コマンドキューに多数の未実行コマンドが蓄積されている状態、あるいはコマンドの実行が大きく遅延している状態が解消される可能性を高めることができる。
さらに、上記の図16の例では、最後にタイムアウトが検出されてからの経過時間に基づいて、第2〜第4のコマンド発行制御が一定時間継続されるようにしたが、他の例として、第2〜第4のコマンド発行制御の開始から一定時間は、同じ種別のコマンド発行制御が継続されるようにしてもよい。以下、このような処理が実行されるようにした処理例について説明する。
図17は、RAID制御部の処理の変形例を示すフローチャートである。この図17では、図7と同じ処理には同じステップ番号を付して示し、それらの処理についての説明を省略する。
図17の処理では、図7のステップS11とステップS12との間に、ステップS71,S72の処理が実行される。
[ステップS71]RAID制御部220の状態判定部221は、アクセス対象のRAIDグループについて、コマンド発行制御部222が第3のコマンド発行制御(ステップS17)の実行を開始してから所定時間が経過したかを判定する。ここで言う経過時間とは、コマンド発行制御部222が、コマンド発行制御の種別を第3以外のコマンド発行制御から第3のコマンド発行制御に変更してからの経過時間を指す。実行開始から所定時間が経過した場合には、ステップS72の処理が実行される。一方、実行開始から所定時間が経過していない場合には、ステップS17の処理が実行される。
[ステップS72]RAID制御部220の状態判定部221は、アクセス対象のRAIDグループについて、コマンド発行制御部222が第4のコマンド発行制御(ステップS18)の実行を開始してから所定時間が経過したかを判定する。ここで言う経過時間とは、コマンド発行制御部222が、コマンド発行制御の種別を第4以外のコマンド発行制御から第4のコマンド発行制御に変更してからの経過時間を指す。実行開始から所定時間が経過した場合には、ステップS12の処理が実行される。一方、実行開始から所定時間が経過していない場合には、ステップS18の処理が実行される。
以上の処理によれば、コマンド発行制御部222は、一旦第3のコマンド発行制御を実行してからは、RAIDグループに属するHDDのステータスの変化に関係なく、第3のコマンド発行制御を一定時間継続する。また、コマンド発行制御部222は、一旦第4のコマンド発行制御を実行してからは、RAIDグループに属するHDDのステータスの変化に関係なく、第4のコマンド発行制御を一定時間継続する。このように、第3のコマンド発行制御および第4のコマンド発行制御が確実に一定時間以上継続されるようにすることで、コマンドの実行遅延を解消する効果を大きくすることができる。
なお、第2のコマンド発行制御についても同様に一定時間以上継続されるようにしてもよい。ただし、RAIDグループに属するHDDのうち複数のHDDのステータスが「NORMAL」以外になった場合には、「NORMAL」以外のステータスを持つ少なくとも1つのHDDについては、負荷軽減効果やコマンド実行遅延の抑制効果は得られない。このため、図17のように、第2のコマンド発行制御については、ステップS14で「Yes」と判定された場合のみ実行される方が好ましい。
また、第3,第4のコマンド発行制御は、第2のコマンド発行制御と比較して、より積極的にコマンド実行遅延を抑制しようとするものである。このため、図17のように第3,第4のコマンド発行制御についてのみ一定時間以上継続されるようにした場合でも、十分なコマンド実行遅延の抑制効果が得られる。
さらに、第3,第4のコマンド発行制御のうちの一方のみが、確実に一定時間以上継続されるようにしてもよい。例えば、第3,第4のコマンド発行制御のうち、第4のコマンド発行制御のみ確実に一定時間以上継続されるようにしてもよい。この場合、図17の処理は、ステップS11の次にステップS72が実行されるように変形される。
第3のコマンド発行制御が実行されると、発行されるコマンド数が増加してしまうことから、ステータスが「HIGH」または「HIGH|TIMEOUT」のHDDが存在する状況では、第3のコマンド発行制御が実行されるのは好ましくない。第3,第4のコマンド発行制御のうち、第4のコマンド発行制御のみ確実に一定時間以上継続されるようにすると、ステップS16で「Yes」と判定された場合のみ第3のコマンド発行制御が実行されるようになる。これにより、HDDのコマンドキューに蓄積されるコマンド数を減少させることができる。
また、例えば、図17のステップS71で「No」と判定されたとき、アクセス先のRAIDグループに属するHDDのうちの少なくとも1つのステータスが「HIGH」または「HIGH|TIMEOUT」になっている場合には、ステップS17ではなくステップS13またはステップS18の処理が実行されるようにしてもよい。これにより、第3のコマンド発行制御の実行が開始されてから所定時間未満の期間でも、未実行コマンド数が過多になったHDDが出現した場合には、第3のコマンド発行制御を実行させないようにすることができる。
以上説明した第2の実施の形態では、データの読み出しを行う場合について説明したが、データの書き込みを行う場合には、次のように変形されればよい。データの書き込みを行う場合には、第2のコマンド発行制御を実行できない。そこで、図7または図17の処理においてRAID制御部220が書き込み要求を受け付けた場合には、ステップS14の処理が次のように変更される。コマンド発行制御部222は、ステータスが「TIMEOUT」であるHDDが1台のみある場合には、ステップS17の第3のコマンド発行制御を実行する。また、コマンド発行制御部222は、ステータスが「HIGH」または「HIGH|TIMEOUT」であるHDDが1台のみある場合には、ステップS18の第4のコマンド発行制御を実行する。
〔第3の実施の形態〕
以下の第3の実施の形態は、第2の実施の形態のコマンド発行制御部222が、RAIDグループ単位でコマンド発行制御を行う代わりに、HDD単位でコマンド発行制御を行うように変形したものである。
図18は、第3の実施の形態のRAID制御部の処理手順の例を示すフローチャートである。
[ステップS11a]RAID制御部220は、ホストI/O制御部210から読み出し要求を受け付ける。次のステップS12a以降の処理は、読み出しが要求されたデータが格納されているHDDごとに実行される。
[ステップS12a]RAID制御部220の状態判定部221は、アクセス先のHDDのステータスをディスク管理テーブル250から読み出し、読み出したステータスが「NORMAL」であるかを判定する。ステータスが「NORMAL」である場合、ステップS13aの処理が実行される。一方、読み出したステータスが「NORMAL」でない場合、ステップS16aの処理が実行される。
[ステップS13a]RAID制御部220のコマンド発行制御部222は、第1のコマンド発行制御を実行する。このステップS13aの処理は、図7のステップS13と基本的に同じであるが、ディスク制御部230に受け渡すACBは1つのみになる。
[ステップS16a]コマンド発行制御部222は、アクセス先のHDDのステータスが「TIMEOUT」であるかを判定する。ステータスが「TIMEOUT」である場合、ステップS17aの処理が実行される。一方、ステータスが「TIMEOUT」以外である、すなわち「HIGH」または「HIGH|TIMEOUT」である場合、ステップS18aの処理が実行される。
[ステップS17a]コマンド発行制御部222は、第3のコマンド発行制御を実行する。このステップS17aの処理は、図7のステップS17と基本的に同じであるが、アクセス先の1つのHDDにコマンドを発行させるためのACBのみが生成されて、ディスク制御部230に受け渡される。
[ステップS18a]コマンド発行制御部222は、第4のコマンド発行制御を実行する。このステップS18aの処理は、図7のステップS18と基本的に同じであるが、ディスク制御部230に受け渡すACBは1つのみになる。
なお、第3の実施の形態においても、図17で説明したように、一旦第3のコマンド発行制御が実行されると、HDDのステータスの変化に関係なく、第3のコマンド発行制御が一定時間継続されるようにしてもよい。また、一旦第4のコマンド発行制御が実行されると、HDDのステータスの変化に関係なく、第4のコマンド発行制御が一定時間継続されるようにしてもよい。さらに、第3のコマンド発行制御の実行が開始されてから所定時間未満の期間でも、HDDに蓄積された未実行コマンド数が過多になった場合には、第3のコマンド発行制御を実行させないようにしてもよい。
また、図18ではデータの読み出しを行う場合について説明したが、データの書き込みを行う場合にも同様の処理が実行されればよい。
以上の第3の実施の形態によれば、HDDからの読み出し速度の低下幅を抑制しながら、コマンドのタイムアウトの発生確率を低下させることができる。
なお、上記の各実施の形態に示したストレージ制御装置およびCMの処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM、CD−R/RWなどがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 記憶装置と、
前記記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限する制御を行うコマンド発行制御部と、
前記コマンド発行制御部によって前記書き込みデータサイズまたは前記読み出しデータサイズが制限されたコマンドを前記記憶装置に送信する送信部と、
を有することを特徴とするストレージシステム。
(付記2) 前記コマンド発行制御部は、前記記憶装置に送信されたコマンドのタイムアウトが発生してから所定期間において、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限することを特徴とする付記1記載のストレージシステム。
(付記3) 前記コマンド発行制御部は、前記記憶装置に送信されたコマンドのうち前記記憶装置において未実行のコマンドの数に基づいて、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限するか否かを決定することを特徴とする付記2記載のストレージシステム。
(付記4) 前記コマンド発行制御部は、前記未実行のコマンドの数が所定のしきい値以上であると判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置に受信順にコマンドを実行させるモードを設定することを特徴とする付記3記載のストレージシステム。
(付記5) 前記コマンド発行制御部は、
前記未実行のコマンドの数が前記しきい値以上であると判定した場合には、送信するコマンドによって前記記憶装置が実行するアクセスがシーケンシャルアクセスかランダムアクセスかを判定し、
ランダムアクセスと判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドを受信順に実行させるモードを設定し、シーケンシャルアクセスと判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドの実行順の変更を許容するモードを設定する、
ことを特徴とする付記4記載のストレージシステム。
(付記6) 前記コマンド発行制御部は、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドを受信順に実行させるモードに設定する制御を開始した後、一定時間は、前記記憶装置に発行するコマンドに当該モードを設定する制御を継続することを特徴とする付記4記載のストレージシステム。
(付記7) 前記コマンド発行制御部は、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限する制御を開始した後、一定時間は、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限する制御を継続することを特徴とする付記1〜6のいずれか1項に記載のストレージシステム。
(付記8) 前記ストレージシステムは、
複数の記憶装置と、
データが異なる記憶装置に冗長化されるように前記複数の記憶装置へのデータの書き込みを制御する書き込み制御部と、
を有し、
前記コマンド発行制御部は、前記複数の記憶装置の少なくとも1つが、送信されたコマンドのタイムアウトが発生してから所定時間が経過していないタイムアウト状態にある場合に、前記複数の記憶装置のうち少なくとも前記タイムアウト状態にある記憶装置に対して送信するコマンドに含める前記書き込みデータサイズまたは前記読み出しデータサイズを、前記所定サイズ以下に制限する、
ことを特徴とする付記1記載のストレージシステム。
(付記9) 前記コマンド発行制御部は、
前記複数の記憶装置のそれぞれに送信されたコマンドのうち各記憶装置において未実行のコマンドの数に基づいて、前記複数の記憶装置が高負荷状態であるか否かを記憶装置ごとに判定し、
前記複数の記憶装置の少なくとも1つが前記高負荷状態にある場合には、前記複数の記憶装置のうち少なくとも前記高負荷状態にある記憶装置に対して送信するコマンドに含める前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限する制御の実行を抑止する、
ことを特徴とする付記8記載のストレージシステム。
(付記10) 前記書き込み制御部は、前記複数の記憶装置へのデータの書き込みを、パリティを用いることでデータが異なる記憶装置に冗長化されるように制御し、
前記コマンド発行制御部は、前記複数の記憶装置に対してデータ読み出しを指示する読み出しコマンドが送信される際に、前記複数の記憶装置のうち、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置が、1ストライプに含まれるパリティの数以下である場合には、前記複数の記憶装置に対して送信する読み出しコマンドに含める前記読み出しデータサイズを前記所定サイズ以下に制限する制御の実行を抑止するとともに、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置からのデータの読み出しを抑止し、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置から読み出すべきデータを、他のいずれかの記憶装置から読み出したパリティを用いて復元する、
ことを特徴とする付記9記載のストレージシステム。
(付記11) 前記コマンド発行制御部は、
前記複数の記憶装置のうち、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置が、1ストライプに含まれるパリティの数より多い場合には、前記複数の記憶装置の中に前記高負荷状態にある記憶装置があるかを判定し、
前記高負荷状態にある記憶装置が1台もない場合には、前記複数の記憶装置に対して送信する読み出しコマンドに含める前記読み出しデータサイズを前記所定サイズ以下に制限し、
前記高負荷状態にある記憶装置がある場合には、前記複数の記憶装置に対して送信する読み出しコマンドに含める前記読み出しデータサイズを前記所定サイズ以下に制限する制御の実行を抑止する、
ことを特徴とする付記10記載のストレージシステム。
(付記12) 前記コマンド発行制御部は、
前記複数の記憶装置のうち、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置が、1ストライプに含まれるパリティの数より多く、かつ、前記高負荷状態にある記憶装置がある場合には、送信する読み出しコマンドによって送信先の記憶装置が実行するアクセスがシーケンシャルアクセスかランダムアクセスかを判定し、
ランダムアクセスと判定した場合に、前記複数の記憶装置に送信するコマンドに、送信先の記憶装置にコマンドを受信順に実行させるモードを設定し、シーケンシャルアクセスと判定した場合に、前記複数の記憶装置に送信するコマンドに、送信先の記憶装置にコマンドの実行順の変更を許容するモードを設定する、
ことを特徴とする付記11記載のストレージシステム。
(付記13) 記憶装置に対するアクセスを制御する制御装置におけるストレージ制御方法であって、
前記記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限し、
前記書き込みデータサイズまたは前記読み出しデータサイズが制限されたコマンドを前記記憶装置に送信する、
ことを特徴とするストレージ制御方法。
(付記14) 前記記憶装置に送信したコマンドのタイムアウトが発生してから所定期間において、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限することを特徴とする付記13記載のストレージ制御方法。
(付記15) 前記記憶装置に送信されたコマンドのうち前記記憶装置において未実行のコマンドの数に基づいて、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限するか否かを決定することを特徴とする付記14記載のストレージ制御方法。
(付記16) 前記未実行のコマンドの数が所定のしきい値以上であると判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置に受信順にコマンドを実行させるモードを設定することを特徴とする付記15記載のストレージ制御方法。
(付記17) 前記未実行のコマンドの数が前記しきい値以上であると判定した場合には、送信するコマンドによって前記記憶装置が実行するアクセスがシーケンシャルアクセスかランダムアクセスかを判定し、
ランダムアクセスと判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドを受信順に実行させるモードを設定し、シーケンシャルアクセスと判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドの実行順の変更を許容するモードを設定する、
ことを特徴とする付記16記載のストレージ制御方法。
(付記18) 前記制御装置には複数の記憶装置が接続され、
前記複数の記憶装置に対するアクセスを制御するとともに、データが異なる記憶装置に冗長化されるように前記複数の記憶装置へのデータの書き込みを制御し、
前記複数の記憶装置の少なくとも1つが、送信されたコマンドのタイムアウトが発生してから所定時間が経過していないタイムアウト状態にある場合に、前記複数の記憶装置のうち少なくとも前記タイムアウト状態にある記憶装置に対して送信するコマンドに含める前記書き込みデータサイズまたは前記読み出しデータサイズを、前記所定サイズ以下に制限する、
処理を含むことを特徴とする付記13記載のストレージ制御方法。
(付記19) 前記複数の記憶装置のそれぞれに送信されたコマンドのうち各記憶装置において未実行のコマンドの数に基づいて、前記複数の記憶装置が高負荷状態であるか否かを記憶装置ごとに判定し、
前記複数の記憶装置の少なくとも1つが前記高負荷状態にある場合、前記複数の記憶装置のうち少なくとも前記高負荷状態にある記憶装置に対して送信するコマンドに含める前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限する制御の実行を抑止する、
ことを特徴とする付記18記載のストレージ制御方法。
(付記20) 記憶装置に対するアクセスを制御するためのストレージ制御プログラムにおいて、
コンピュータに、
前記記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限し、
前記書き込みデータサイズまたは前記読み出しデータサイズが制限されたコマンドを前記記憶装置に送信する、
処理を実行させることを特徴とするストレージ制御プログラム。
1 ストレージシステム
10 記憶装置
11 コマンドキュー
20 ストレージ制御装置
21 送信部
22 コマンド発行制御部

Claims (14)

  1. 記憶装置と、
    前記記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限する制御を行うコマンド発行制御部と、
    前記コマンド発行制御部によって前記書き込みデータサイズまたは前記読み出しデータサイズが制限されたコマンドを前記記憶装置に送信する送信部と、
    を有することを特徴とするストレージシステム。
  2. 前記コマンド発行制御部は、前記記憶装置に送信されたコマンドのタイムアウトが発生してから所定期間において、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限することを特徴とする請求項1記載のストレージシステム。
  3. 前記コマンド発行制御部は、前記記憶装置に送信されたコマンドのうち前記記憶装置において未実行のコマンドの数に基づいて、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限するか否かを決定することを特徴とする請求項2記載のストレージシステム。
  4. 前記コマンド発行制御部は、前記未実行のコマンドの数が所定のしきい値以上であると判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置に受信順にコマンドを実行させるモードを設定することを特徴とする請求項3記載のストレージシステム。
  5. 前記コマンド発行制御部は、
    前記未実行のコマンドの数が前記しきい値以上であると判定した場合には、送信するコマンドによって前記記憶装置が実行するアクセスがシーケンシャルアクセスかランダムアクセスかを判定し、
    ランダムアクセスと判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドを受信順に実行させるモードを設定し、シーケンシャルアクセスと判定した場合には、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドの実行順の変更を許容するモードを設定する、
    ことを特徴とする請求項4記載のストレージシステム。
  6. 前記コマンド発行制御部は、前記記憶装置に送信するコマンドに、前記記憶装置にコマンドを受信順に実行させるモードに設定する制御を開始した後、一定時間は、前記記憶装置に発行するコマンドに当該モードを設定する制御を継続することを特徴とする請求項4記載のストレージシステム。
  7. 前記コマンド発行制御部は、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限する制御を開始した後、一定時間は、前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限する制御を継続することを特徴とする請求項1〜6のいずれか1項に記載のストレージシステム。
  8. 前記ストレージシステムは、
    複数の記憶装置と、
    データが異なる記憶装置に冗長化されるように前記複数の記憶装置へのデータの書き込みを制御する書き込み制御部と、
    を有し、
    前記コマンド発行制御部は、前記複数の記憶装置の少なくとも1つが、送信されたコマンドのタイムアウトが発生してから所定時間が経過していないタイムアウト状態にある場合に、前記複数の記憶装置のうち少なくとも前記タイムアウト状態にある記憶装置に対して送信するコマンドに含める前記書き込みデータサイズまたは前記読み出しデータサイズを、前記所定サイズ以下に制限する、
    ことを特徴とする請求項1記載のストレージシステム。
  9. 前記コマンド発行制御部は、
    前記複数の記憶装置のそれぞれに送信されたコマンドのうち各記憶装置において未実行のコマンドの数に基づいて、前記複数の記憶装置が高負荷状態であるか否かを記憶装置ごとに判定し、
    前記複数の記憶装置の少なくとも1つが前記高負荷状態にある場合には、前記複数の記憶装置のうち少なくとも前記高負荷状態にある記憶装置に対して送信するコマンドに含める前記書き込みデータサイズまたは前記読み出しデータサイズを前記所定サイズ以下に制限する制御の実行を抑止する、
    ことを特徴とする請求項8記載のストレージシステム。
  10. 前記書き込み制御部は、前記複数の記憶装置へのデータの書き込みを、パリティを用いることでデータが異なる記憶装置に冗長化されるように制御し、
    前記コマンド発行制御部は、前記複数の記憶装置に対してデータ読み出しを指示する読み出しコマンドが送信される際に、前記複数の記憶装置のうち、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置が、1ストライプに含まれるパリティの数以下である場合には、前記複数の記憶装置に対して送信する読み出しコマンドに含める前記読み出しデータサイズを前記所定サイズ以下に制限する制御の実行を抑止するとともに、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置からのデータの読み出しを抑止し、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置から読み出すべきデータを、他のいずれかの記憶装置から読み出したパリティを用いて復元する、
    ことを特徴とする請求項9記載のストレージシステム。
  11. 前記コマンド発行制御部は、
    前記複数の記憶装置のうち、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置が、1ストライプに含まれるパリティの数より多い場合には、前記複数の記憶装置の中に前記高負荷状態にある記憶装置があるかを判定し、
    前記高負荷状態にある記憶装置が1台もない場合には、前記複数の記憶装置に対して送信する読み出しコマンドに含める前記読み出しデータサイズを前記所定サイズ以下に制限し、
    前記高負荷状態にある記憶装置がある場合には、前記複数の記憶装置に対して送信する読み出しコマンドに含める前記読み出しデータサイズを前記所定サイズ以下に制限する制御の実行を抑止する、
    ことを特徴とする請求項10記載のストレージシステム。
  12. 前記コマンド発行制御部は、
    前記複数の記憶装置のうち、前記タイムアウト状態または前記高負荷状態のいずれかの状態にある記憶装置が、1ストライプに含まれるパリティの数より多く、かつ、前記高負荷状態にある記憶装置がある場合には、送信する読み出しコマンドによって送信先の記憶装置が実行するアクセスがシーケンシャルアクセスかランダムアクセスかを判定し、
    ランダムアクセスと判定した場合に、前記複数の記憶装置に送信するコマンドに、送信先の記憶装置にコマンドを受信順に実行させるモードを設定し、シーケンシャルアクセスと判定した場合に、前記複数の記憶装置に送信するコマンドに、送信先の記憶装置にコマンドの実行順の変更を許容するモードを設定する、
    ことを特徴とする請求項11記載のストレージシステム。
  13. 記憶装置に対するアクセスを制御する制御装置におけるストレージ制御方法であって、
    前記記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限し、
    前記書き込みデータサイズまたは前記読み出しデータサイズが制限されたコマンドを前記記憶装置に送信する、
    ことを特徴とするストレージ制御方法。
  14. 記憶装置に対するアクセスを制御するためのストレージ制御プログラムにおいて、
    コンピュータに、
    前記記憶装置に対してデータ書き込みまたはデータ読み出しを指示するコマンドに含める書き込みデータサイズまたは読み出しデータサイズを、所定サイズ以下に制限し、
    前記書き込みデータサイズまたは前記読み出しデータサイズが制限されたコマンドを前記記憶装置に送信する、
    処理を実行させることを特徴とするストレージ制御プログラム。
JP2012080651A 2012-03-30 2012-03-30 ストレージシステム Expired - Fee Related JP5958020B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012080651A JP5958020B2 (ja) 2012-03-30 2012-03-30 ストレージシステム
US13/845,238 US20130262762A1 (en) 2012-03-30 2013-03-18 Storage system and storage control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012080651A JP5958020B2 (ja) 2012-03-30 2012-03-30 ストレージシステム

Publications (2)

Publication Number Publication Date
JP2013210847A true JP2013210847A (ja) 2013-10-10
JP5958020B2 JP5958020B2 (ja) 2016-07-27

Family

ID=49236640

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012080651A Expired - Fee Related JP5958020B2 (ja) 2012-03-30 2012-03-30 ストレージシステム

Country Status (2)

Country Link
US (1) US20130262762A1 (ja)
JP (1) JP5958020B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016212513A (ja) * 2015-04-30 2016-12-15 富士通株式会社 ストレージシステム、制御装置および制御プログラム

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8819208B2 (en) 2010-03-05 2014-08-26 Solidfire, Inc. Data deletion in a distributed data storage system
US9838269B2 (en) 2011-12-27 2017-12-05 Netapp, Inc. Proportional quality of service based on client usage and system metrics
US9054992B2 (en) 2011-12-27 2015-06-09 Solidfire, Inc. Quality of service policy sets
US9378075B2 (en) * 2013-05-15 2016-06-28 Amazon Technologies, Inc. Reducing interference through controlled data access
EP2843537B1 (en) * 2013-08-30 2019-03-27 Fujitsu Limited Method and systems for simulating a workload of a storage system
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US10395334B2 (en) * 2014-04-11 2019-08-27 Sony Corporation Three-dimensional deposition device and three-dimensional deposition method
JP2016057876A (ja) * 2014-09-10 2016-04-21 富士通株式会社 情報処理装置、入出力制御プログラム、及び入出力制御方法
US9600205B1 (en) * 2014-09-22 2017-03-21 Western Digital Technologies, Inc. Power aware power safe write buffer
US9569118B2 (en) * 2014-12-30 2017-02-14 International Business Machines Corporation Promoting consistent response times in a data storage system having multiple data retrieval mechanisms
US10929022B2 (en) 2016-04-25 2021-02-23 Netapp. Inc. Space savings reporting for storage system supporting snapshot and clones
US10365958B2 (en) * 2016-09-13 2019-07-30 Hewlett Packard Enterprise Development Lp Storage drive management to fail a storage drive based on adjustable failure criteria
US10642763B2 (en) 2016-09-20 2020-05-05 Netapp, Inc. Quality of service policy sets
KR20180092435A (ko) * 2017-02-09 2018-08-20 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR102293069B1 (ko) * 2017-09-08 2021-08-27 삼성전자주식회사 불휘발성 메모리 장치 및 제어기를 포함하는 스토리지 장치, 제어기, 그리고 스토리지 장치의 동작 방법
KR20190032809A (ko) * 2017-09-20 2019-03-28 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
KR102327878B1 (ko) * 2017-11-07 2021-11-17 삼성전자주식회사 반도체 장치 및 반도체 시스템
US10963189B1 (en) * 2018-11-18 2021-03-30 Pure Storage, Inc. Coalescing write operations in a cloud-based storage system
JP2020115250A (ja) * 2019-01-17 2020-07-30 キオクシア株式会社 ストレージ装置およびコマンド処理方法
US11561706B2 (en) 2019-11-20 2023-01-24 International Business Machines Corporation Storage allocation enhancement of microservices based on phases of a microservice run
US11893280B2 (en) * 2021-08-27 2024-02-06 Micron Technology, Inc. Concurrent command limiter for a memory system

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07319627A (ja) * 1994-05-24 1995-12-08 Mitsubishi Electric Corp 外部記憶装置
JP2000003309A (ja) * 1998-06-15 2000-01-07 Fujitsu Ltd 記憶装置
JP2000298553A (ja) * 1999-04-15 2000-10-24 Toshiba Corp コンピュータシステム及びそのi/o装置の制御方法
JP2001043032A (ja) * 1999-08-02 2001-02-16 Fujitsu Ltd ディスク・タイムシェアリング装置及び方法
JP2001043028A (ja) * 1999-07-29 2001-02-16 Fujitsu Ltd ディスク・タイムシェアリング装置及び方法
JP2001147886A (ja) * 1999-11-19 2001-05-29 Fujitsu Ltd ディスク・タイムシェアリング装置及び方法
JP2002023962A (ja) * 2000-07-07 2002-01-25 Fujitsu Ltd ディスク装置及び制御方法
JP2005182658A (ja) * 2003-12-22 2005-07-07 Sony Corp データ記録再生装置及びデータ記録再生方法
JP2006309579A (ja) * 2005-04-28 2006-11-09 Hitachi Ltd 記憶制御装置及びストレージシステム
WO2009107213A1 (ja) * 2008-02-28 2009-09-03 富士通株式会社 ストレージ装置、ストレージ制御装置、データ転送集積回路、および、ストレージ制御方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5442752A (en) * 1992-01-24 1995-08-15 International Business Machines Corporation Data storage method for DASD arrays using striping based on file length
US7606944B2 (en) * 2007-05-10 2009-10-20 Dot Hill Systems Corporation Dynamic input/output optimization within a storage controller
US8495238B1 (en) * 2008-05-28 2013-07-23 Google Inc. Facilitating self-tuning traffic shaping without a central traffic manager
US20100070656A1 (en) * 2008-09-12 2010-03-18 Atto Technology, Inc. System and method for enhanced load balancing in a storage system

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07319627A (ja) * 1994-05-24 1995-12-08 Mitsubishi Electric Corp 外部記憶装置
JP2000003309A (ja) * 1998-06-15 2000-01-07 Fujitsu Ltd 記憶装置
JP2000298553A (ja) * 1999-04-15 2000-10-24 Toshiba Corp コンピュータシステム及びそのi/o装置の制御方法
JP2001043028A (ja) * 1999-07-29 2001-02-16 Fujitsu Ltd ディスク・タイムシェアリング装置及び方法
JP2001043032A (ja) * 1999-08-02 2001-02-16 Fujitsu Ltd ディスク・タイムシェアリング装置及び方法
JP2001147886A (ja) * 1999-11-19 2001-05-29 Fujitsu Ltd ディスク・タイムシェアリング装置及び方法
JP2002023962A (ja) * 2000-07-07 2002-01-25 Fujitsu Ltd ディスク装置及び制御方法
JP2005182658A (ja) * 2003-12-22 2005-07-07 Sony Corp データ記録再生装置及びデータ記録再生方法
JP2006309579A (ja) * 2005-04-28 2006-11-09 Hitachi Ltd 記憶制御装置及びストレージシステム
WO2009107213A1 (ja) * 2008-02-28 2009-09-03 富士通株式会社 ストレージ装置、ストレージ制御装置、データ転送集積回路、および、ストレージ制御方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016212513A (ja) * 2015-04-30 2016-12-15 富士通株式会社 ストレージシステム、制御装置および制御プログラム

Also Published As

Publication number Publication date
JP5958020B2 (ja) 2016-07-27
US20130262762A1 (en) 2013-10-03

Similar Documents

Publication Publication Date Title
JP5958020B2 (ja) ストレージシステム
US7730257B2 (en) Method and computer program product to increase I/O write performance in a redundant array
US7975168B2 (en) Storage system executing parallel correction write
JP5807458B2 (ja) ストレージシステム、ストレージ制御装置およびストレージ制御方法
US8060707B2 (en) Minimization of read response time
US8019937B2 (en) Applying storage device commit-cached-data-to-media functionality to improve data security in systems that allow storage devices to cache writes
JP6111575B2 (ja) ストレージ装置、内部処理制御方法および内部処理制御プログラム
US10031808B2 (en) Raid 10 reads optimized for solid state drives
US20100199039A1 (en) Systems and Methods for Optimizing Host Reads and Cache Destages in a Raid System
KR20050013938A (ko) 하드 디스크 드라이브에서의 자율적인 데이터 스크럽시스템 및 방법
US20170185520A1 (en) Information processing apparatus and cache control method
JP2006146833A (ja) ディスク装置の整合性検査支援方法およびディスクアレイ装置の整合性検査方法
US9632945B2 (en) Destage grouping for sequential fast write tracks
JP2017041076A (ja) ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム
US8769195B2 (en) Storage apparatus and storage apparatus control method
US9298397B2 (en) Nonvolatile storage thresholding for ultra-SSD, SSD, and HDD drive intermix
JP6721821B2 (ja) ストレージ制御装置、ストレージ制御方法およびストレージ制御プログラム
JP5505329B2 (ja) ディスクアレイ装置及びその制御方法
US8549244B2 (en) Device and method of copying data between disks having equal or different rotational rates
JP4430092B2 (ja) Raid装置、raid装置の制御部およびraid装置のライトバック制御方法
JP6481490B2 (ja) ストレージシステム、制御装置および制御プログラム
US11232036B2 (en) Managing write access to data storage devices for spontaneous de-staging of cache
JP6107761B2 (ja) ディスクアレイ装置およびディスクアレイ装置の制御方法
JP5691227B2 (ja) ストレージ装置及びその制御方法
JP2012194867A (ja) ストレージ装置および制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150106

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151014

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151020

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151218

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160524

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160606

R150 Certificate of patent or registration of utility model

Ref document number: 5958020

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees