以下に図面を参照して、開示のストレージ制御装置、制御方法、および制御プログラムの実施の形態を詳細に説明する。
図1は、本実施の形態にかかるストレージ制御装置の動作例を示す説明図である。図1に示すストレージシステム100は、ストレージシステム100の利用者に対して、ストレージシステム100が有する記憶領域を提供するシステムである。たとえば、ストレージシステム100は、ストレージシステム100の利用者が作成した文書ファイルやデータベースを記憶する。
ストレージシステム100は、ストレージシステム100の全体を制御するストレージ制御装置101と、ストレージシステム100が提供する記憶領域を有するストレージ装置102−1、2、…、nとを有する。nは1以上の整数である。
また、ストレージシステム100が提供する記憶領域への読出要求に対する応答時間を短縮するために、ストレージ装置102は、SSD(Solid State Drive)が適用される。以下、単に、ストレージ装置102と記載した場合、SSDが適用されたストレージ装置であるとする。また、本実施の形態では、ストレージ装置102−1〜nのうち、少なくとも一つはSSDが適用されたストレージ装置である。図1の例では、ストレージ装置102−1が、SSDが適用されたストレージ装置であるとする。また、ストレージシステム100は、RAID(Redundant Arrays of Inexpensive Disks)技術を用いて形成された仮想的なボリュームを利用者に提供する。ストレージ制御装置101は、RAID技術を用いて、ストレージ装置102の記憶領域に対して所定のデータサイズのブロック単位でデータを冗長化して記憶させる制御を行う。RAIDについては、図2で後述する。
SSDは、記憶媒体としてフラッシュメモリを用いるドライブ装置である。具体的に、SSDは、フラッシュメモリと、受け付けた書込データやフラッシュメモリの記憶内容を一時的に記憶するキャッシュメモリと、SSDコントローラと、を有する。
フラッシュメモリとは、記憶領域を所定のデータサイズで分割したブロック単位で消去、書き込みを行うことができ、電源を切ってもデータを失わない性質を有する半導体メモリである。所定の管理データサイズ(以下、「ブロックデータサイズ」と呼称する)は、フラッシュメモリの製造時に、フラッシュメモリの仕様としてフラッシュメモリの設計者により設定される値である。
具体的に、フラッシュメモリは、1ビットの情報を蓄積するメモリセルを複数有する。メモリセルは、シリコン基板上のP型半導体層を挟み込むようにソースとドレインとなる2つのN型半導体部分を有し、P型半導体層の上に絶縁膜を介して浮遊ゲートを配置し、浮遊ゲート上に制御ゲートを配置した構造である。そして、メモリセルは、浮遊ゲートに蓄えられた電子量を用いて情報を記憶する。具体的に、メモリセルは、浮遊ゲートの電子量に応じてソース−ドレイン間に電流が流れるか否かが変化することを用いて、情報を記憶する。電子量に応じて電流が流れるか否かが変化する理由として、浮遊ゲートに電子があればソース−ドレイン間の抵抗が高くなりゲート電圧を高くしなければ電流が流れない。一方、浮遊ゲートに電子がなければソース−ドレイン間の抵抗が低くなり、ゲート電圧が低くても電流が流れる。ソース−ドレイン間の電流を流すために要求されるゲートへの印加電圧は、閾値電圧と呼称される。また、フラッシュメモリには、NOR型のフラッシュメモリとNAND型のフラッシュメモリとがある。
SSDコントローラは、フラッシュメモリおよびキャッシュメモリを制御する。たとえば、SSDコントローラは、受け付けた論理アドレスに対する書込データを一旦キャッシュメモリに格納する。そして、SSDコントローラは、キャッシュメモリに格納した書込データをブロックデータサイズで分割して、分割したデータをブロックに順次格納するとともに、格納したブロックと論理アドレスとの対応関係を示す情報を、フラッシュメモリに格納する。書込データと、書込先のブロックとの関係については、SSDの仕様によって様々であり、たとえば、SSDへの書込データの発行間隔が、書込データと書込先のブロックとの関係に影響する場合もある。ここで、論理アドレスを指定する方法として、SSDにおいては、LBA(Logical Block Addressing)が採用される。以下、論理アドレスを、単に、LBAと称する。SSDの内部動作については、図6〜図8に後述する。
ここで、ストレージ制御装置101がストレージ装置102に発行する書込要求のLBAは、利用者が操作する装置による仮想ボリュームの書込要求のLBAから特定されるものである。同様に、ストレージ制御装置101がストレージ装置102に発行する読出要求のLBAは、利用者が操作する装置による仮想ボリュームの読出要求のLBAから特定されるものである。たとえば、ストレージ制御装置101が、ストレージ装置102−1とストレージ装置102−2とにより、RAID0の仮想ボリュームを形成するとする。このとき、ストレージ制御装置101は、ストレージ装置102−1のLBA0、ストレージ装置102−2のLBA0、ストレージ装置102−1のLBA1、ストレージ装置102−2のLBA1、…、という順に仮想ボリュームのLBA0〜3、…を形成する。そして、ストレージ制御装置101は、利用者が操作する装置による仮想ボリュームの書込要求を受け付けた場合、書込要求のLBAを2で除した際の商と余りとを用いて、書込要求のLBAと発行先のストレージ装置102とを特定する。
読出要求からデータ受領完了までにかかる時間は、HDD(Hard Disk Drive)が10ミリ秒程度であるのに対して、SDDが数ミリ秒程度である。したがって、SSDが適用されたストレージ装置は、HDDが適用されたストレージ装置より読出要求に対応する応答時間を短縮することができる。
しかしながら、SSDに読出要求を続けると、読出要求に対する応答が遅延する場合がある。読出要求に対する応答が遅延する場合として、ガベージコレクションの動作のタイミングやリードディスターブ(Read Disturb)によるビットエラーを防止させるため実施される動作のタイミングと、読出要求のタイミングとが重なった場合が挙げられる。
ここで、ガベージコレクションとは、小ブロックを纏まったページに集めてデータ記録域を確保する動作である。また、リードディスターブは、データが繰り返し読み出されることによりビットエラーが発生させる。リードディスターブは、電子を蓄える半導体メモリが有する特性である。リードディスターブは、NAND型のフラッシュメモリで発生しやすい。リードディスターブによるビットエラーは、書き込んだ値が正しく読み出せなかったことによるエラーである。
リードディスターブの現象をより詳細に説明する。SSD内部の記録媒体に用いられるフラッシュメモリの書込単位となるブロックに書き込みを行った時点では、浮遊ゲートに電子がない場合、閾値電圧は低く、読み出し時に印加する電圧とのマージンが十分にある状態である。しかしながら、ブロックのいずれかのセルに読出要求を繰り返し行うと、同一ブロック内の他のセルにも電圧が印加されて浮遊ゲートに保持した電子の量が少しずつ変化して、閾値電圧と読み出し時に印加する電圧とのマージンが減っていき、ビットエラーとなる。したがって、SSDは、各ブロックの読出回数を管理しておき、規定回数の読み出しが行われるとブロックのデータを別ブロックへコピーするように制御を行う。以降、上述の制御を「RD防止コピー」と呼称する。
ここで、RD防止コピーは、SSD内部の動作であるから、SSDにアクセスする装置は、RD防止コピーがいつ行われるかという情報を得ることが難しい。このため、SSDがRD防止コピーの実行中に、SSDにアクセスする装置がRD防止コピーの対象であるブロックに読出要求を行ってしまう可能性がある。この場合、SSDは、RD防止コピーが完了した後にデータ読み出しと完了応答を行うため、SSDにアクセスする装置はRD防止コピーが完了するまで待たされることになる。特に、RD防止コピーとガベージコレクションとが重なる場合には、SSDにアクセスする装置は大きく待たされることになり、たとえば、1秒以上完了応答が得られない場合がある。
そこで、ストレージ制御装置101は、ストレージ装置102に発行する書込要求のLBAをブロック単位でグループ分けしたグループの読出回数を計数する。そして、ストレージ制御装置101は、計数したグループの読出回数に応じて、受け付けた読出要求のLBAから特定されるLBAを含む読出要求、または特定されるLBAのデータに対応する冗長データの記憶先のLBAを含む読出要求を発行する。これにより、ストレージ制御装置101は、RD防止コピーが発生するであろうLBAを予測して、応答遅延が発生するであろうLBAに対する読出要求を避けることができ、読出要求に対する応答性能の低下を抑制することができる。
以下に、書込要求のLBAをブロック単位でグループ分けしたグループの読出回数を計数し、計数したグループの読出回数に応じた読出要求の制御についての具体的な説明を行う。
上述したように、SSDは、一連の書込データをブロックデータサイズで分割して、分割したデータを順次ブロックに格納する。したがって、ストレージ制御装置101は、ストレージ制御装置101が受け付けた書込要求から特定される書込先のLBAを、同一グループに含まれるLBAに対応するデータサイズがブロックデータサイズを超えないように(ブロックデータサイズ以下で)グループ分けしたグループ情報を記憶する。ストレージ制御装置101は、1つのストレージ装置102に対するグループ情報を、ブロック予測テーブル111に登録する。ストレージ制御装置101は、ストレージ装置102に書込要求を発行する前にグループ分けしてグループ情報を生成してもよいし、ストレージ装置102に書込要求を発行した後にグループ分けしてグループ情報を生成してもよい。また、ストレージ制御装置101は、ストレージ装置102に対して既に発行された複数の書込要求に対して、グループ情報を生成してもよい。
ストレージ制御装置101は、各ストレージ装置102に対応するブロック予測テーブル111を管理する。図1の例では、ストレージ制御装置101は、ストレージ装置102−1に対応するブロック予測テーブル111−1を管理する。
図1の例では、LBAの1000個分のデータサイズが、ブロックデータサイズと一致するものとし、ストレージ制御装置101が、LBA0−1007への書込要求をストレージ装置102−1に発行するとする。ストレージ制御装置101は、LBA0−999をグループG0にグループ分けし、LBA1000−1007をグループG1にグループ分けしたグループ情報を生成する。また、ストレージ装置102−1は、ストレージ制御装置101からのLBA0−1007への書込要求を受け付けて、LBA0−999をブロックB0に割り当て、LBA1000−1007をブロックB1に割り当てたとする。以下の説明では、説明の簡略化のため、グループGxを、単に「Gx」と記載することがある。同様に、ブロックBxを、単に「Bx」と記載することがある。xは0以上の整数である。
次に、ストレージ制御装置101は、ストレージ制御装置101が受け付けた読出要求112に応じて、ブロック予測テーブル111−1に基づき読出要求112から特定される読出先のLBAを含むグループの読出回数を計数する。計数する契機として、ストレージ制御装置101は、読出要求112から読出先のLBAを特定した際に計数してもよいし、読出先のLBAを含む読出要求をストレージ装置102−1に発行する前、または発行した後に計数してもよい。
図1は、ストレージ装置102−1のLBA0−999を読出先とする読出要求112が7900回、ストレージ装置102−1のLBA1000−1007を読出先とする読出要求が102回の例を示す。このとき、ストレージ制御装置101は、G0の読出回数を7900[回]と計数し、G1の読出回数を102[回]と計数する。また、ストレージ装置102−1は、ストレージ制御装置101から、読出先のLBA0−999を含む読出要求を7900回受け付け、読出先のLBA1000−1007を含む読出要求を102回受け付ける。そして、ストレージ装置102−1は、B0の読出回数を7900[回]とし、B1の読出回数を102[回]とする。
続けて、ストレージ制御装置101は、計数したグループの読出回数に基づき、読出要求112から特定される読出先のLBAを含む読出要求113、または、読出先のLBAのデータに対応する冗長データの記憶先のLBAを含む読出要求114を発行する。図1中、点線で括られた読出要求113は、実際には発行していないことを示す。図1の例では、ストレージ制御装置101は、読出要求113を発行せず、読出要求114を発行する。
ここで、読出要求113、114について説明する。ここで、説明を容易にするため、読出要求113に含まれる読出先のLBAのデータを、「元データ」と呼称する。
冗長データは、たとえば、読出要求113に含まれる読出先のLBAが示す記憶領域に記憶されたデータと同一内容のデータである。また、冗長データは、冗長データを加工することにより、元データと同一内容のデータが得られるデータでもよい。
また、読出要求114の発行先について、ストレージ制御装置101は、RAIDにより、読出要求112に含まれるLBA、または読出要求113に含まれるLBAから、読出要求114の発行先が特定できるように管理してある。図1では、RAID1の例を示す。図1に示すd1−src、d2、d1−rdnは、図2におけるRAIDの説明時に併せて説明を行う。
次に、計数したグループの読出回数に基づき、読出要求113、または、読出要求114を発行する例について説明する。たとえば、ストレージ制御装置101は、ストレージ装置102−1の仕様に応じて設定された規定回数より小さい第1の回数を記憶しておく。第1の回数は、ストレージシステム100の管理者によって設定される。そして、ストレージ制御装置101は、計数したグループの読出回数が第1の回数になるまでは、読出要求113を発行する。また、ストレージ制御装置101は、計数したグループの読出回数が第1の回数になった場合、読出要求114を発行する。以下、グループの読出回数と比較する値を、「RD防止コピー閾値」と呼称する。RD防止コピー閾値は、各ストレージ装置102に対してそれぞれで異なる値を設定してもよい。
読出要求113、または、読出要求114を発行した後、ストレージ制御装置101は、発行先からの応答に含まれるデータに基づき読出データを取得し、利用者に読出データを通知する。たとえば、読出要求113を発行した場合、ストレージ制御装置101は、発行先からの応答に含まれるデータと同一内容のデータを利用者が操作する装置に通知する。また、読出要求114を発行した場合、ストレージ制御装置101は、RAID技術を用いて、発行先からの応答に含まれる冗長データを用いて元データの内容を復元して、復元したデータを利用者が操作する装置に通知する。図1の例では、ストレージ制御装置101は、データd1−rdnと同一内容のデータを、利用者が操作する装置に通知する。RAID技術による読出データの復元については、図9および図10で後述する。次に、図2を用いて、ストレージシステム100の接続例を示す。
図2は、ストレージシステムの接続例を示す説明図である。ストレージシステム100は、ホストサーバ201と、ストレージ制御装置101と、ストレージ装置102−1、2、…、nと、ホットスペア202とを有する。ホストサーバ201は、ストレージ制御装置101に接続する。ストレージ装置102−1、2、…、nと、ホットスペア202とは、ストレージ制御装置101に接続する。
ホストサーバ201は、ストレージシステム100の利用者が操作する装置から、ストレージ装置102−1、2、…nへのアクセス要求を受け付ける装置である。ホットスペア202は、ストレージ装置102−1、2、…、nに対して予備となる装置である。
ここで、RAID技術について説明する。ストレージシステム100は、RAID技術により、1つの仮想的なボリュームを形成する。ここで、仮想的なボリュームを形成するストレージ装置群を、RAIDグループに含まれるストレージ装置であると呼称する。
RAIDには、仮想的なボリュームの形成の仕方を表すRAIDレベルが存在する。RAIDレベルは、主にRAID0〜RAID6までのRAIDレベルが存在する。また、RAIDには、RAID0+1というように、RAIDレベルを組み合わせたレベルも存在する。たとえば、RAID0は、冗長性を持たず、複数のストレージ装置にデータを分散するRAIDレベルである。また、RAID1は、2台のストレージ装置に同一のデータを記憶するRAIDレベルである。
ここで、RAID1について、図1を用いて説明する。図1は、RAID1の例を示す。ストレージ装置102−1が元データと冗長データとを記憶するならば、ストレージ制御装置101は、ストレージ装置102−1に読出要求114を発行する。具体的には、ストレージ装置102−1のLBA0−999は、データd1−srcを記憶し、LBA1000−1007は、データd2を記憶しているとする。また、ストレージ装置102−2のLBA0−999は、データd1と同一内容のデータd1−rdnを記憶しているとする。この場合、ストレージ制御装置101は、ストレージ装置102−2に、読出先のLBAがLBA0−999となる読出要求114を発行することになる。
また、ストレージ装置102−1〜3によりRAID5を形成することもできる。同様に、読出要求1に含まれる読出先のLBAがストレージ装置102−1であれば、ストレージ制御装置101は、冗長先のストレージ装置102−2、3に読出要求114を発行することになる。
RAIDを形成することにより、ストレージシステム100は、RAIDレベルがRAID0以外であれば、利用者にデータの冗長性による信頼性の高い記憶領域を提供できる。また、RAIDを形成することにより、アクセスが複数のストレージ装置102に分散することから、ストレージシステム100は、利用者にアクセス応答が高速な記憶領域を提供できる。
また、複数台のストレージ装置102にデータを分散してI/Oを高速化させる技術はストライピングと呼ばれ、データがXbyteずつ順番にRAIDグループを形成する仮想的なボリュームに配置される。Xbyteの各データを、「ストリップ(strip)」と呼称する。また、RAIDグループを形成する各ストレージ装置102に配置されたストリップを横つながりに組み合わせた1つのデータセットを、「ストライプ(stripe)」と呼称する。
図2の例では、ストレージ制御装置101は、仮想的なボリュームを形成して、ホストサーバ201に提供するRAIDコントローラの機能を有する。仮想的なボリュームの提供を受けたホストサーバ201は、仮想的なボリュームの論理アドレスを用いてストレージ制御装置101にアクセスを行う。ストレージ制御装置101は、仮想的なボリュームの論理アドレスをストレージ装置102のLBAに変換して、変換したLBAを用いてストレージ装置102にアクセスする。以下の記載では、説明の簡略化のため、ホストサーバ201からのアクセス先の論理アドレスは、ストレージ装置102のLBAに変換済みであることを前提とする。
(ストレージ制御装置101のハードウェア)
図3は、ストレージ制御装置のハードウェア構成例を示すブロック図である。図3において、ストレージ制御装置101は、CPU(Central Processing Unit)301と、ROM(Read Only Memory)302と、RAM303と、を含む。また、ストレージ制御装置101は、ディスクドライブ304およびディスク305と、チャネルアダプタ306と、I/Oコントローラ307と、SAS(Serial Attached SCSI)エキスパンダ308と、を含む。また、CPU301〜ディスクドライブ304、チャネルアダプタ306、I/Oコントローラ307はバス309によってそれぞれ接続される。
CPU301は、ストレージ制御装置101の全体の制御を司る演算処理装置である。また、CPU301は、複数のプロセッサコアを有するマルチコアであってもよい。ROM302は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM303は、CPU301のワークエリアとして使用される揮発性メモリである。
ディスクドライブ304は、CPU301の制御に従ってディスク305に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ304には、たとえば、磁気ディスクドライブ、SSDなどを採用することができる。ディスク305は、ディスクドライブ304の制御で書き込まれたデータを記憶する不揮発性メモリである。たとえばディスクドライブ304が磁気ディスクドライブである場合、ディスク305には、磁気ディスクを採用することができる。また、ディスクドライブ304がSSDである場合、ディスク305には、半導体メモリを採用することができる。
チャネルアダプタ306は、ホストサーバ201に接続するアダプタである。I/Oコントローラ307は、ストレージ装置102−1、2、…、nと、ホットスペア202とのデータの入出力を制御する制御装置である。SASエキスパンダ308は、複数のSASデバイスを接続可能にする装置である。ストレージ装置102−1、2、…、nと、ホットスペア202は、SAS対応のデバイスである。
また、ストレージ制御装置101は、ストレージシステム100の管理者等から直接操作される際を想定して、キーボード、マウスを有してもよい。
(ストレージ制御装置101の機能)
次に、ストレージ制御装置101の機能について説明する。図4は、ストレージ制御装置の機能構成例を示すブロック図である。ストレージ制御装置101は、制御部401と、記憶部402とを有する。制御部401は、グループ分け部411と、計数部412と、アクセス制御部413とを含む。制御部401は、記憶装置に記憶された、本実施の形態にかかるストレージ装置の制御プログラムをCPU301が実行することにより、制御部401の機能を実現する。記憶装置とは、具体的には、たとえば、図3に示したROM302、RAM303、ディスク305などである。グループ分け部411〜アクセス制御部413の処理結果は、RAM303、ディスク305などの記憶装置に格納される。
また、ストレージ制御装置101は、ブロック予測テーブル111を記憶する記憶部402にアクセス可能である。記憶部402は、RAM303、ディスク305といった記憶装置に格納される。ブロック予測テーブル111の記憶内容の一例については、図5で後述する。
グループ分け部411は、ストレージ制御装置101が受け付けた書込要求に応じて、書込要求から特定される書込先のLBAを、同一グループに含まれるLBAに対応するデータサイズがブロックデータサイズを超えないようにグループ分けする。また、グループ分け部411は、さらに、同一グループに含まれるLBAを含む書込要求のストレージ装置102への発行間隔が所定間隔diを超えないようにグループ分けしてもよい。ここで、所定間隔diとは、SSDの仕様に関わる値であり、ある書込要求を受け付けた際に、フラッシュメモリに書き込む前に次の書込要求を待つ時間間隔である。SSDは、ある書込要求を受け付けてから所定間隔diを超えると次の書込要求を待たずにフラッシュメモリに書き込む。所定間隔diは、ストレージシステム100の管理者により設定される値である。ストレージシステム100の管理者は、ストレージ装置102の仕様を確認して、所定間隔diを設定する。具体的なグループ分けの一例と所定間隔diとについては、図6で後述する。
計数部412は、ストレージ制御装置101が受け付けた読出要求に応じて、読出要求から特定される読出先のLBAを含むグループの読出回数を計数する。具体的なグループの読出回数の計数の例については、図7に後述する。
また、計数部412は、グループの読出回数を初期化してもよい。初期化する契機について、アクセス制御部413の処理結果に基づくものがあるため、アクセス制御部413の説明の後に説明する。
アクセス制御部413は、計数したグループの読出回数に基づき読出先のLBAを含む読出要求、または読出先のLBAのデータに対応する冗長データの記憶先のLBAを含む読出要求を発行する。また、アクセス制御部413は、計数したグループの読出回数が第1の回数となったことに応じて、グループに含まれるLBAを含む読出要求を、第2の回数、または読出要求に対する応答時間が所定時間を超えるまでストレージ装置102に発行してもよい。たとえば、アクセス制御部413は、計数したグループの読出回数が第1の回数となった後、グループに含まれるLBAを含む読出要求をストレージ装置102に発行する。また、アクセス制御部413は、計数したグループの読出回数が第1の回数となり、読出要求の応答をストレージ装置102から受け付けた後、グループに含まれるLBAを含む読出要求をストレージ装置102に発行してもよい。
第2の回数は、ストレージ装置102の仕様に応じて設定された規定回数から第1の回数を減じた値である。所定時間は、ストレージ制御装置101とストレージ装置102の仕様によって設定される値であり、たとえば、読出要求に対する通常の応答時間の平均値に所定値を加えた値である。たとえば、ストレージ制御装置101は、サービス提供前に、ストレージ装置102に対し読出要求を何回か発行し、発行してから応答があるまでの時間の平均値を通常の応答時間として、通常の応答時間に所定値を加えた値を、所定時間として設定しておく。所定値は、ストレージシステム100の管理者が設定する値である。
ここで、アクセス制御部413は、グループに含まれるLBAを含む読出要求を、第2の回数、または読出要求に対する応答時間が所定時間を超えるまでストレージ装置102に発行した場合、ストレージ装置102においてRD防止コピーが行われたと判断する。読出要求を発行することにより、ストレージ装置102にRD防止コピーを行わせることができるため、以下、グループの読出回数が第1の回数となった後に発行する読出要求を、「RD防止コピーを引き起こすコマンド」と呼称する。RD防止コピーを引き起こすコマンドは、読出要求であるReadでもよいし、記憶先が正確であるか否かを確認するVerifyでもよい。
また、RD防止コピーを引き起こすコマンドを第2の回数回発行することにより、RD防止コピーが行われたと判断する方法を、以下、「第1のRD防止コピー実行判断方法」と呼称する。また、応答時間が所定時間を超えるまでストレージ装置102にRD防止コピーを引き起こすコマンドを発行することにより、RD防止コピーが行われたと判断する方法を、以下、「第2のRD防止コピー実行判断方法」と呼称する。
第1のRD防止コピー実行判断方法の一例として、たとえば、RD防止コピー閾値が7700[回]であり、RD防止コピーが発生する規定回数が8000[回]であるとする。このとき、第2の回数は300[回]となる。このとき、計数したグループの読出回数が7700回となったことに応じて、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドを300[回]発行した際に、RD防止コピーが行われたと判断する。第1のRD防止コピー実行判断方法を採用した場合、ストレージ制御装置101は、第2のRD防止コピー実行判断方法と比較して、コマンドの発行回数を比較すればよいため、第2のRD防止コピー実行判断方法より判断にかかる負荷を減らすことができる。
第2のRD防止コピー実行判断方法を採用した場合、ストレージ制御装置101は、ストレージ装置102のRD防止コピーが発生する回数を記憶していなくてよい。したがって、第2のRD防止コピー実行判断方法を採用した場合、ストレージ制御装置101は、ストレージ装置102がRD防止コピーを実行する規定回数という仕様が不明であっても実施することができる。
また、アクセス制御部413は、RD防止コピーを引き起こすコマンドを発行する間に、グループに含まれるLBAを含む書込要求をストレージ装置102に発行したことに応じて、グループに含まれる論理アドレスを含む読出要求の発行を停止してもよい。
また、あるストレージ装置102において、計数したグループの読出回数が第1の回数となった後に、ストレージ制御装置101が読出要求を受け付けたとする。ここで、アクセス制御部413は、受け付けた読出要求に応じて、読出要求から特定されるLBAが上述のグループに含まれる場合に、読出先のLBAのデータに対応する冗長データの記憶先のLBAを含む読出要求を、他のストレージ装置102に発行してもよい。
ここで、他のストレージ装置102は、あるストレージ装置102が記憶するデータの冗長データを記憶する装置である。たとえば、ストレージ装置102−1〜3によりRAID5を形成するとする。そして、ストレージ装置102−1がデータ1を記憶しており、ストレージ装置102−2がデータ2を記憶しており、ストレージ装置102−3がデータ1およびデータ2から生成されるパリティデータを記憶するとする。このとき、ストレージ装置102が記憶するデータ1の冗長データを記憶する他のストレージ装置102は、パリティデータを記憶するストレージ装置102−3と、データ2を記憶するストレージ装置102−2とである。
また、計数部412は、アクセス制御部413により、RD防止コピーが行われたと判断した際に、グループの読出回数を初期化してもよい。また、計数部412は、グループに含まれるLBAを含む書込要求をストレージ装置102に発行したことに応じて、グループの読出回数を初期化してもよい。また、計数部412は、アクセス制御部413がRD防止コピーを引き起こすコマンドを発行する間に、グループに含まれるLBAを含む書込要求をストレージ装置102に発行したことに応じて、グループの読出回数を初期化してもよい。
次に、あるストレージ装置102と他のストレージ装置102とのブロックデータサイズが同一の値であり、かつ、あるストレージ装置102と他のストレージ装置102との規定回数が同一の値であるときに用いる機能について説明する。
このとき、グループ分け部411は、他のストレージ装置102への書込要求に応じて、書込要求に含まれる書込先のLBAを、同一グループに含まれるLBAに対応するデータサイズがブロックデータサイズを超えないようにグループ分けする。また、計数部412は、他のストレージ装置102への読出要求に応じて、読出要求に含まれる読出先のLBAを含むグループの読出回数を計数する。
また、アクセス制御部413は、計数したグループの読出回数が、第3の回数となったことに応じて、グループに含まれるLBAを含む読出要求を、第4の回数、または、読出要求に対する応答時間が所定時間を超えるまで他のストレージ装置102に発行する。ここで、第3の回数は、ストレージ装置102の仕様に応じて設定された規定回数より小さく前記第1の回数とは異なる値である。また、第4の回数は、規定回数から第3の回数を減じた値である。ブロックデータサイズと規定回数とがそれぞれ同一の値となる例については、図9および図10に後述する。
次に、ストレージ装置102のデータを、SSDを適用したストレージ装置102に移行するときに用いる機能について説明する。データを移行する理由としては、図11、図12で後述する。移行先のストレージ装置102は、たとえば、未使用であるホットスペア202である。以下、移行先のストレージ装置102が、ホットスペア202であるとして説明する。
このとき、アクセス制御部413は、受け付けた書込要求から特定されるストレージ装置102の書込先のLBAをグループ分けした複数のグループに含まれるLBAを含むデータ移行要求を、ストレージ装置102に発行する。このとき、アクセス制御部413は、ホットスペア202へのデータの移行間隔が所定間隔diを超えないように発行する。また、グループ分け部411は、発行したデータ移行要求に含まれるLBAを、同一グループに含まれるLBAに対応するデータサイズがホットスペア202のブロックデータサイズを超えないようにグループ分けする。
また、グループ分け部411は、受け付けた書込要求から特定されるホットスペア202の書込先のLBAを、同一グループに含まれるLBAに対応するデータサイズが当該ブロックデータサイズを超えないようにグループ分けする。また、計数部412は、受け付けた読出要求に応じて、受け付けた読出要求から特定されるホットスペア202の読出先のLBAを含むグループの読出回数を計数する。また、アクセス制御部413は、計数したグループの読出回数に基づき読出先の論理アドレスを含む読出要求、または、読出先の論理アドレスのデータに対応する冗長データの記憶先の論理アドレスを含む読出要求を発行する。
図5は、ブロック予測テーブルの記憶内容の一例を示す説明図である。ブロック予測テーブル111は、ストレージ装置102のうち、SSDが適用されたストレージ装置102ごとに有するテーブルである。たとえば、図5に示すブロック予測テーブル111−1は、ストレージ装置102−1のブロックとLBA割り当ての関係とを登録するテーブルである。図5に示すブロック予測テーブル111−1は、レコード501−1〜3を有する。
ブロック予測テーブル111は、グループ番号と、LBAと、読出回数という3つのフィールドを有する。グループ番号フィールドは、書込要求に含まれる書込先の論理アドレスを、同一グループに含まれる論理アドレスに対応するデータサイズがブロックデータサイズを超えないようにグループ分けした際の、グループの識別番号を記憶するフィールドである。LBAフィールドは、該当のグループにグループ分けされたLBAを記憶するフィールドである。読出回数フィールドは、該当のグループの読出回数を記憶するフィールドである。
たとえば、レコード501−1は、LBA0−999が一つのブロックに割り当てられたと予測したグループG0にグループ分けされており、グループG0の読出回数が7700[回]であることを示す。
(SSDへの書込時と読出時との動作例)
次に、図6〜図8を用いて、ストレージ装置102−1への書込時と読出時との動作例について説明する。ここで、本実施の形態において、SSDが適用されたストレージ装置102における1ブロックのブロックデータサイズは、説明の簡略化のため、全て512[Kバイト]であるとする。そして、1ブロックには、1000個のLBAが割当可能であるとする。したがって、1つのLBAは、512[バイト]の記憶領域を有する。
図6は、書込時における動作例を示す説明図である。図6では、SSDが適用されたストレージ装置102−1への書込時において、ブロック予測テーブル111の更新例について説明する。以下の説明において、書込先のLBAが割り当て済みでない書込要求を「新規書込要求」と称する。また、書込先のLBAが割り当て済みの書込要求を「上書書込要求」と称する。
ここで、一般的なSSD内部の動作について説明する。SSDは、ブロック(512MB等)に複数のLBAを割り当てる。割り当て動作は、通常固定ではなく、データが書き込まれた際に順次関連付けが行われる。SSD内部にあるSSDコントローラは、SSDに転送されたデータをSSD内部にあるキャッシュメモリに一時保存して、纏まった単位でフラッシュメモリへ書き込む。SSDコントローラは、このデータ纏め作業を優先で実施するが、転送データの発行間隔が所定間隔di、たとえば10秒を超えた場合、電源遮断によるデータ損失を防止するため、以降のデータを待つことなくフラッシュメモリへ書き込む。そして、SSDコントローラは、新規書込要求に関して、一旦書き込んだブロックに書き込まない。転送されたデータが新たに発生した場合、SSDコントローラは、次のブロックに書き込む。
上述したSSDの動作から、ストレージ制御装置101でも同様の管理を行うことにより、ストレージ制御装置101は、ブロックとLBA割り当てとの対応関係について予測することができる。ストレージ制御装置101は、ストレージ装置102が同一のブロックに割り当てたであろうLBA群を、同一のグループに設定する。
具体的な予測例として、ホストサーバ201から、以下に示す第1の書込要求〜第3の書込要求を受け付けたとして、ブロックとLBA割り当てとの関係を説明する。第1の書込要求〜第3の書込要求は、いずれも新規書込要求であるとする。ストレージ制御装置101は、書込要求を受け付けた場合、ブロック予測テーブル111を参照して、受け付けた書込要求が新規書込要求か上書書込要求かを判断するが、図6では説明を省略し、図8で説明を行う。また、まだLBAが一つも割り当てられていないストレージ装置102に対して、ストレージ制御装置101が書込要求に含まれる書込先のLBAを含める割当中のグループが、G0であるとする。
第1の書込要求は、時刻t0から時刻t1までにかけて発生しており、書込先のLBAがLBA0−1007となる書込要求である。LBA0−1007のデータサイズは、516,096[バイト]に相当する。第2の書込要求は、時刻t1の2秒後である時刻t2から時刻t3までにおけるLBA6328−6345に対する書込要求である。LBA6328−6345のデータサイズは、9,216[バイト]に相当する。第3の書込要求は、時刻t3の13秒後である時刻t4から時刻t5にかけて、LBA4230−4529に対する書込要求である。LBA4230−4529のデータサイズは、153,600[バイト]に相当する。第1の書込要求〜第3の書込要求を受け付けた後、ストレージ制御装置101は、それぞれをストレージ装置102に発行する。
時刻t0において、ストレージ制御装置101は、第1の書込要求に含まれる書込先のLBAのうちのLBA0−999を、割当中のグループであるG0に含めるようにグループ分けする。そして、G0にLBAの空きがなくなったため、ストレージ制御装置101は、割当中のグループを、現在の割当中のグループの次のグループであるG1に設定する。次に、ストレージ制御装置101は、第1の書込要求に含まれる書込先のLBAのうちのLBA1000−1007を、割当中のグループであるG1に含めるようにグループ分けする。
次に、時刻t2において第2の書込要求を受け付けると、ストレージ制御装置101は、第1の書込要求の完了から第2の書込要求の発生までの間隔が所定間隔diを超えないため割当中のグループをG1のままとする。そして、ストレージ制御装置101は、第2の書込要求に含まれる書込先のLBA6328−6345を、割当中のグループであるG1に含めるようにグループ分けする。ここで、10秒経過したか否かの判断方法について、ストレージ制御装置101は、時刻t1時点でタイマをスタートしておき、時刻t2時点でのタイマが示す時間が10秒を超えたか否かで判断することができる。ストレージ制御装置101は、タイマを、ストレージ装置102ごとに用意しておく。
続けて、時刻t4において、ストレージ制御装置101は、第3の書込要求を受け付けると、第2の書込要求の完了から第3の書込要求の発生までの間隔が所定間隔diを超えるため、割当中のグループを次のグループG2に設定する。そして、ストレージ制御装置101は、第3の書込要求に含まれる書込先のLBA4230−4529を、割当中のグループであるG2に含めるようにグループ分けする。
図7は、読出時における動作例を示す説明図である。図7では、ストレージ装置102への読出時において、ブロック予測テーブル111の更新例について説明する。
ここで、RD防止コピーの動作は、各グループに対し、何回の読出要求を受けたかで予測することができる。したがって、ストレージ制御装置101は、データの読出要求を行う際に、ブロック予測テーブル111のLBAを参照し、該当するグループの読出回数を確認する。これにより、ストレージ制御装置101は、読出要求に含まれる読出先のLBAが含まれるであろうブロックの読出回数を予測することができる。ここで、RD防止コピーが行われる読出回数は、SSDの仕様によって様々である。たとえば、SSDコントローラは、あるブロックに対して8000回読み出しが行われた場合に、RD防止コピーを行う。そこで、ストレージ制御装置101は、SSDコントローラがRD防止コピーを行う読出回数より小さい値をRD防止コピー閾値として、読出回数がRD防止コピー閾値に到達する場合に、RD防止コピーが行われる可能性があると判断する。
具体的な予測例として、図7では、図6に示した第3の書込要求が発生した後、ホストサーバ201から、以下に示す第1の読出要求〜第3の読出要求があったとして、RD防止コピーが行われることを予測する動作を説明する。また、RD防止コピー閾値を7900[回]とする。
第1の読出要求は、時刻t6に発生した、読出先のLBAがLBA0−1007となる読出要求である。第2の読出要求は、時刻t7に発生した、読出先のLBAがLBA6328−6345となる読出要求である。第3の読出要求は、時刻t8に発生した、読出先のLBAがLBA6328−6329となる読出要求である。第1の読出要求〜第3の読出要求を受け付けた後、ストレージ制御装置101は、それぞれをストレージ装置102に発行する。また、第2の読出要求と第3の読出要求との間に、LBA1000−1007、LBA6328−6345のいずれかに対する読出要求が7897回あったものとする。
時刻t6において、第1の読出要求に含まれる読出先のLBAのうちのLBA0−999はG0に含まれるため、ストレージ制御装置101は、G0の読出回数をインクリメントする。また、第1の読出要求の読出先のLBAのうちのLBA1000−1007はG1に含まれるため、ストレージ制御装置101は、G1の読出回数をインクリメントする。
時刻t7において、第2の読出要求に含まれる読出先のLBAであるLBA6328−6345はG1に含まれるため、ストレージ制御装置101は、G1の読出回数をインクリメントする。
時刻t8となる前段階でG1に対する読出回数は、7899[回]になったものとする。そして、時刻t8において、第3の読出要求に含まれる読出先のLBAであるLBA6328−6345はG1に含まれるため、ストレージ制御装置101は、G1の読出回数をインクリメントする。インクリメントした結果、G1の読出回数が7900[回]となり、RD防止コピー閾値に到達したため、ストレージ制御装置101は、RD防止コピーが行われる可能性があると判断する。
RD防止コピーが行われる可能性があると判断した後、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドをストレージ装置102−1に発行する。図7の例では、ストレージ制御装置101は、時刻t8から時刻t9にかけて、RD防止コピーを引き起こすコマンドをストレージ装置102−1に発行する。そして、ストレージ制御装置101は、RD防止コピーが行われたと判断した場合に、G1の読出回数を0[回]に初期化する。ここで、RD防止コピーが行われたと判断する方法としては、たとえば、上述した第1のRD防止コピー実行判断方法と、第2のRD防止コピー実行判断方法とがある。
図8は、上書書込時における動作例を示す説明図である。図8では、ストレージ装置102への書込時において、既に書込要求を行ったLBAに対して、さらに書込要求があった場合と、RD防止コピーを引き起こすコマンドの発行中に書込要求があった場合のブロック予測テーブル111の更新例について説明する。
ここで、一般的なSSD内部における上書書込時の動作について説明する。SSDは、上書書込を行う場合、ブロック単位でリードモディファイライト動作を行う。具体的に、SSDは、書込先のLBAを含むブロックの記憶領域を読み出して、読み出したデータに上書書込のデータを反映して、反映したデータを書込先のLBAを含むブロックに書き込む。ブロックに書き込む際に、SSDは、対象のブロックの記憶内容を消去した後、書き込みを行う。ブロックの記憶内容が消去されて書き込みが行われると、浮遊ゲートの電子量に応じた閾値電圧と、読み出し時に印加する電圧との間に十分なマージンが発生することになる。このように、上書書込を行うと、十分なマージンが発生するので、SSDは、書き込みを行ったブロックの読出回数を初期化する。
上述したSSDの動作から、ストレージ制御装置101でも同様の予測を行うことにより、ブロックの予測精度を向上することができる。具体的な更新例として、図8では、図7に示した第3の読出要求が発生した後、ホストサーバ201から、第4の書込要求と、第4の読出要求と、第5の書込要求とを受け付けたとして、ブロック予測テーブル111の更新例について説明する。
第4の書込要求は、時刻t10から時刻t11までにかけて発生しており、書込先のLBAがLBA0−899となる書込要求である。LBA0−899のデータサイズは、460,800[バイト]に相当する。第4の読出要求は、時刻t12に発生した、読出先のLBAがLBA6238−6345となる読出要求である。第5の書込要求は、時刻t13から時刻t14までにかけて発生しており、書込先のLBAがLBA6238−6345となる書込要求である。また、第4の書込要求と第4の読出要求との間に、LBA1000−1007、LBA6328−6345のいずれかに対する読出要求が7899回あったものとする。
ストレージ制御装置101は、第4の書込要求を受け付けた場合、第4の書込要求が新規書込要求か上書書込要求かを判断するため、ブロック予測テーブル111に、第4の書込要求に含まれる書込先のLBAがあるか否かを判断する。図8の例では、G0にLBA0−899が含まれることから、ストレージ制御装置101は、第4の書込要求に含まれる書込先のLBAがあり、第4の書込要求が上書書込要求であると判断する。ここで、図8では、書込要求に含まれる書込先のLBA全てがブロック予測テーブル111にあった例を示したが、書込要求に含まれる書込先のLBAの一部分がブロック予測テーブル111にある場合も起こり得る。この場合、ストレージ制御装置101は、書込要求のうち、ブロック予測テーブル111にあるLBAを上書書込要求として扱い、書込要求のうち、ブロック予測テーブル111にないLBAを新規書込要求として扱う。
時刻t10において、第4の書込要求が上書書込要求であるため、ストレージ制御装置101は、第4の書込要求に含まれる書込先のLBAを含むG0の読出回数を0[回]に初期化する。また、第4の書込要求を受け付けた後、ストレージ制御装置101は、受け付けた第4の読出要求をストレージ装置102に発行する。
時刻t12において、時刻t12となる前段階でG1に対する読出回数は、7899[回]になったものとする。そして、時刻t12において、第4の読出要求に含まれる読出先のLBAであるLBA6328−6345はG1に含まれるため、ストレージ制御装置101は、G1の読出回数をインクリメントする。インクリメントした結果、G1の読出回数がRD防止コピー閾値に到達したため、ストレージ制御装置101は、RD防止コピーが行われる可能性があると判断し、RD防止コピーを引き起こすコマンドをストレージ装置102−1に発行する。
時刻t13において、RD防止コピーを引き起こすコマンドを発行中に、第5の書込要求を受け付けると、ストレージ制御装置101は、第5の書込要求に含まれる書込先のLBAが、RD防止コピーの対象のグループに含まれるかを判断する。図8の例では、第5の書込要求に含まれる書込先のLBAが、RD防止コピーの対象であるG1に含まれるため、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドの発行を停止する。同時に、ストレージ制御装置101は、G1の読出回数を0[回]に初期化する。
(RD防止コピー閾値の設定例)
次に、図9と図10とを用いて、RD防止コピー閾値の設定例を示す。図9と図10とで用いる例の前提として、ストレージ装置102−1〜3が、ブロックデータサイズが同一のサイズであり、RD防止コピーが起こる回数が同一となるという、同一の特性を有するものとする。この場合、ストレージ制御装置101は、ストレージ装置102−1〜3のRD防止コピー閾値を、それぞれ、7700[回]、7800[回]、7900[回]に設定しておく。また、SSDが適用されたストレージ装置102−1〜3により、RAIDレベルがRAID5であるRAIDグループを形成するものとする。そして、ストレージ装置102−1のLBA1000−1007と、ストレージ装置102−2のLBA1000−1007と、ストレージ装置102−3のLBA1000−1007とにより、1つのストライプが形成されたとする。
ストレージ装置102−1のLBA1000−1007はブロックBxに対応付けられており、ストレージ制御装置101は、ストレージ装置102−1のLBA1000−1007をグループGxに対応付けたものとする。同様に、ストレージ装置102−2のLBA1000−1007はブロックByに対応付けられており、ストレージ制御装置101は、ストレージ装置102−2のLBA1000−1007をグループGyに対応付けたものとする。また、ストレージ装置102−3のLBA1000−1007はブロックBzに対応付けられており、ストレージ制御装置101は、ストレージ装置102−3のLBA1000−1007をグループGzに対応付けたものとする。
さらに、該当のストライプにおいて、ストレージ装置102−1、2には実データd1、d2が格納されており、ストレージ装置102−3には実データd1、d2によるパリティデータp(d1,d2)が格納されたとする。以下、説明の簡略化のため、実データd1、d2、パリティデータp(d1,d2)を、単に、d1、d2、p(d1,d2)と記載する。
図9は、RD防止コピー閾値の設定例を示す説明図(その1)である。図9に示すストレージシステム100として、図9に示すブロック予測テーブル111−1は、ストレージ装置102−1のGxの読出回数が7700[回]であることを記憶する。また、図9に示すブロック予測テーブル111−2は、ストレージ装置102−2のGyの読出回数が7700[回]であることを記憶する。さらに、図9に示すブロック予測テーブル111−3は、ストレージ装置102−3のGzの読出回数が0[回]であることを記憶する。
また、ストレージ制御装置101は、ストレージ装置102−1〜3のRD防止処理フラグを「処理していない」に設定したとする。ここで、RD防止処理フラグは、該当のストレージ装置102が、RD防止コピーを行っているであろうか否かを判断するフラグである。RD防止処理フラグは、ストレージ装置102ごとにあるデータである。ストレージ制御装置101は、RD防止処理フラグを、たとえば、ブロック予測テーブル111に対応付けて記憶する。RD防止処理フラグは、「処理していない」と、「処理中」という2つの識別子のいずれかとなる。「処理していない」とは、ストレージ制御装置101が、該当のストレージ装置102が、RD防止コピーを行っていないであろうと判断したことを示す識別子である。「処理中」とは、ストレージ制御装置101が、該当のストレージ装置102が、RD防止コピーを行っているであろうと判断したことを示す識別子である。
ここで、RD防止コピー閾値が各ストレージ装置102間で同一の場合に起こりうる現象について説明する。同一のRAIDグループに含まれるストレージ装置102同士は、ほぼ均等に読出が行われる可能性が高く、読出回数の値が近い値になり易い。読出回数の値が近い値になった結果、あるタイミングにおいてRD防止コピーを引き起こすコマンドを発行中の各ストレージ装置102が同時に複数台存在する状態になる可能性がある。上述の状態となり、RD防止コピーを引き起こすコマンドを発行中でないストレージ装置102の数が、データが復元可能な台数を下回ると、ストレージ制御装置101は、RD防止コピーが行われたと判断するまで読出要求に対するデータを取得できなくなる。
そこで、ストレージ制御装置101は、RD防止コピー閾値をストレージ装置102間でずらして設定しておく。図9の例では、ストレージ装置102−1のGxの読出回数の値が、ストレージ装置102−1のRD防止コピー閾値である7700[回]に到達しており、ストレージ制御装置101は、ストレージ装置102−1のGxへの読出を抑止する。また、読出の抑止を行った後、ストレージ制御装置101は、ストレージ装置102−1のRD防止処理フラグを「処理中」に設定するとともに、ストレージ装置102−1にRD防止コピーを引き起こすコマンドを発行する。コマンドを発行してRD防止コピーが行われたと判断した場合、ストレージ制御装置101は、ストレージ装置102−1のGxの読出回数を0[回]に初期化するとともに、ストレージ装置102−1のRD防止処理フラグを「処理していない」に設定する。
また、読出の抑止中において、図9に示すように、ホストサーバ201からストレージ装置102−1のLBA1000−1007の読出要求があったとする。このとき、ストレージ制御装置101は、ストレージ装置102−2からd2を読み出すとともに、ストレージ装置102−3からp(d1,d2)を読み出す。読み出したことにより、ストレージ制御装置101は、ストレージ装置102−2のGyの読出回数と、ストレージ装置102−3のGzの読出回数とをインクリメントする。続けて、ストレージ制御装置101は、d2とp(d1,d2)とからd1を復元して、ホストサーバ201にd1を返却する。
図10は、RD防止コピー閾値の設定例を示す説明図(その2)である。図10に示すストレージシステム100の状態は、図9で示したストレージシステム100の状態から、下記に示す第1の動作と第2の動作とが実行されたことにより、ストレージシステム100の状態が変化したものである。
第1の動作は、ストレージ装置102−1に対してRD防止コピーを引き起こすコマンドを複数発行中にストレージ装置102−1のLBA1000−1007の読出要求が49回発行されたという動作である。第1の動作により、ストレージ制御装置101は、グループGyの読出回数とグループGzの読出回数とをそれぞれ49回インクリメントする。
第2の動作は、ストレージ装置102−1に対してRD防止コピーを引き起こすコマンドを複数発行中と発行終了後との合計で、ストレージ装置102−2のLBA1000−1007の読出要求が50回発行されたという動作である。第2の動作により、ストレージ制御装置101は、グループGyの読出回数を50回インクリメントする。
第1の動作と第2の動作とにより、図10に示すブロック予測テーブル111には、次に示す値が登録される。次に示す値として、具体的に、図10に示すブロック予測テーブル111−1は、ストレージ装置102−1のGxの読出回数が0[回]であることを記憶する。また、図10に示すブロック予測テーブル111−2には、ストレージ装置102−2のGyの読出回数が7800[回]であることを登録される。さらに、図10に示すブロック予測テーブル111−3には、ストレージ装置102−3のGzの読出回数が50[回]であることが登録される。
図10の例では、ストレージ装置102−2のGyの読出回数の値がRD防止コピー閾値である7800[回]に到達したため、ストレージ制御装置101は、ストレージ装置102−2のGyへの読出を抑止する。また、読出の抑止を行った後、ストレージ制御装置101は、ストレージ装置102−2のRD防止処理フラグを「処理中」に設定するとともに、ストレージ装置102−2にRD防止コピーを引き起こすコマンドを複数発行する。コマンドを複数発行してRD防止コピーが行われたと判断した場合、ストレージ制御装置101は、ストレージ装置102−2のGyの読出回数を0[回]に初期化するとともに、ストレージ装置102−2のRD防止処理フラグを「処理していない」に設定する。
また、読出の抑止中において、図10に示すように、ホストサーバ201からストレージ装置102−2のLBA1000−1007の読出要求があったとする。このとき、ストレージ制御装置101は、ストレージ装置102−1からd1を読み出すとともに、ストレージ装置102−3からp(d1,d2)を読み出す。読み出したことにより、ストレージ制御装置101は、ストレージ装置102−1のGxの読出回数と、ストレージ装置102−3のGzの読出回数とをインクリメントする。続けて、ストレージ制御装置101は、d1とp(d1,d2)とからd2を復元して、ホストサーバ201にd2を返却する。
このように、RD防止コピー閾値をストレージ装置102間でずらして設定することにより、RD防止コピーが行われる期間をストレージ装置102間でずらすことができる。RD防止コピーが行われる期間をずらすことにより、ストレージシステム100は、ミラーリングからのデータ取得ができない状態、またはパリティを用いたデータ復元ができない状態になることを避けることができる。
(ガベージコレクションとリフレッシュ処理との説明)
次に、図11を用いて、ガベージコレクションによりストレージ装置102が管理するブロックと、ストレージ制御装置101が予測するグループとが乖離した様子について説明する。また、図12において、リフレッシュ処理により乖離が解消される様子について説明する。ここで、図11と図12とで共通して用いる前提として、ストレージ装置102−1が、ガベージコレクションを行うものとする。
図11は、ガベージコレクションが行われた際のブロックとグループとの乖離の一例を示す説明図である。表1101は、ガベージコレクションの実行前の状態における、ストレージ装置102が管理するブロックとLBA割り当てとの関係を示すテーブルである。また、表1102は、ガベージコレクションの実行後の状態における、ストレージ装置102が管理するブロックとLBA割り当てとの関係を示すテーブルである。
ガベージコレクションの実行前の状態として、表1101とブロック予測テーブル111−1より、ストレージ装置102−1のLBA0−999は、ブロックB0に対応付けられており、ストレージ制御装置101は、LBA0−999をG0に含めたものとする。B0の読出回数とG0の読出回数とは、ともに、20[回]であるとする。
また、ストレージ装置102−1のLBA1000−1007、6328−6345は、ブロックB1に対応付けられており、ストレージ制御装置101は、LBA1000−1007、6328−6345をグループG1に含めたものとする。B1の読出回数とG1の読出回数とは、ともに、28[回]であるとする。
また、ストレージ装置102−1のLBA1008−1099、4230−4529は、ブロックB2に対応付けられており、ストレージ制御装置101は、LBA1008−1099、4230−4529をグループG2に含めたものとする。B2の読出回数とG2の読出回数とは、ともに、2367[回]であるとする。
また、ストレージ装置102−1のLBA1100−2099は、ブロックB1000に対応付けられており、ストレージ制御装置101は、LBA1100−2099をグループG1000に含めたものとする。B1000の読出回数とG1000の読出回数とは、ともに、692[回]であるとする。
この状態で、ストレージ装置102−1が、ガベージコレクションを実行したとする。具体的には、ストレージ装置102−1のSSDコントローラは、B1のLBA数が26[個]であり、B2のLBA数が392[個]であるから、B1のLBAとB2のLBAとを纏めても、一つのブロックに収まるLBA数1000を超えないと判断する。そして、ストレージ装置102−1のSSDコントローラは、B2が示す記憶領域に記憶されたLBA1008−1099、4230−4529のデータを、B1の記憶領域に移行する。
ガベージコレクションの実行後において、ストレージ装置102−1のLBA1008−1099、4230−4529は、LBA1000−1007、6328−6345と併せてB1に対応付けられる。これに対し、ストレージ制御装置101は、LBA1000−1007、6328−6345をG1に、LBA1008−1099、4230−4529をG2にグループ分けしており、LBAの割当内容が乖離したことになる。
図12は、リフレッシュ処理の実行前後におけるブロックとグループとの関係の一例を示す説明図である。リフレッシュ処理は、LBAの割当内容が乖離したストレージ装置を移行元のストレージ装置102とし、移行元のストレージ装置102が記憶する移行対象データを移行先のストレージ装置102に移行させて、グループとLBAとの関係を再定義する処理である。移行先のストレージ装置102は、LBA割り当てがない、未使用のストレージ装置102であることが好ましい。LBA割り当てがある、使用中のストレージ装置102に移行すると、既にLBAの割当内容が乖離している可能性があるためである。図12の例では、移行先のストレージ装置がホットスペア202であるとする。また、ホットスペア202は、SSDを適用したストレージ装置102であるとする。
ここで、データの移行方法は、たとえば、下記に示す第1の移行方法と、第2の移行方法とがある。第1の移行方法は、ストレージ制御装置101が移行元となるストレージ装置102にデータ移行要求を発行し、移行元のストレージ装置102が、移行先のストレージ装置102に直接移行対象データを送信する方法である。また、第2の移行方法は、データ移行要求を受け付けた移行元のストレージ装置102が移行対象データをストレージ制御装置101に送信し、ストレージ制御装置101は、移行対象データを移行先のストレージ装置102に送信する方法である。本実施の形態では、第1の移行方法を採用したとする。
どちらの場合であっても、ストレージ制御装置101は、移行先のストレージ装置102への移行対象データのうちの一つのグループに含めるようにグループ分けしたデータ内の移行間隔が所定間隔diを超えないようにする。たとえば、一つのグループに含めるようにグループ分けしたLBA群のデータ512[Kバイト]が、256[Kバイト]、256[Kバイト]というように分割して移行先のストレージ装置102に送信されたとする。さらに、1回目の256[Kバイト]のデータが移行してから、2回目の256[Kバイト]のデータが移行するまでの時間が、所定間隔diを超えたとする。このとき、ストレージ制御装置101では一つのグループに含めるようにグループ分けされたLBA群が、移行先のストレージ装置102の2つのブロックに割り当てられてしまい、LBA割り当ての内容に乖離が発生してしまう。
移行間隔が所定間隔diを超えないようにするために、第1の移行方法の場合には、ストレージシステム100を構築する際に、ストレージシステム100の管理者が、ストレージ装置102のデータ転送の間隔が所定間隔di以内であるかを確認しておけばよい。また、第2の移行方法の場合には、ストレージ制御装置101が、たとえば、移行元のストレージ装置102から受け付けた移行対象データをバッファリングして、移行先のストレージ装置102にブロックデータサイズごとに転送すればよい。
データ移行要求は、移行対象データが記憶された記憶領域を示すLBAと、移行対象データの移行先のストレージ装置102を特定する情報と、を含む。
次に、図12の例を用いて、リフレッシュ処理の動作例を示す。ストレージ制御装置101は、LBA0−2099、4230−4529、6328−6345をホットスペア202に移行するデータ移行要求を、ストレージ装置102−1に発行する。
そして、ストレージ制御装置101は、まだグループ分けしていないLBAのうちの先頭のLBAを選択する。図12の例では、ストレージ制御装置101は、LBA0を選択する。次に、ストレージ制御装置101は、ホットスペア202のブロックデータサイズである、512[Kバイト]を超えず、選択したLBAを先頭とした、LBA0−999を、G0にグループ分けする。
次に、ストレージ制御装置101は、まだグループ分けしていないLBAのうちの先頭となるLBA1000を選択する。そして、ストレージ制御装置101は、512[Kバイト]を超えず、選択したLBAを先頭とした、LBA1000−1999を、G1にグループ分けする。
続けて、ストレージ制御装置101は、まだグループ分けしていないLBAのうちの先頭となるLBA2000を選択する。そして、ストレージ制御装置101は、512[Kバイト]を超えず、選択したLBAを先頭とした、LBA2000−2099、4230−4529、6328−6345をG2にグループ分けする。全てのLBAをグループ分けしたため、ストレージ制御装置101は、リフレッシュ処理を終了する。
リフレッシュ処理後、ストレージ制御装置101は、ホットスペア202を、ストレージ装置102−1が属するRAIDグループに追加するとともに、ストレージ装置102−1をRAIDグループから外して新たなホットスペアに設定する。また、ストレージ制御装置101は、移行後のホットスペア202の記憶内容を、ストレージ装置102−1に戻し、RAIDグループを変更せずにそのままにしてもよい。
これにより、ストレージ制御装置101が予測するグループとLBA割り当ての関係と、ホットスペア202が管理するブロックとLBA割り当てとの内容が一致して、RD防止コピーが発生するLBAの予測精度が向上する。図12の例では、ホットスペア202のグループとLBA割り当ての予測を示すブロック予測テーブル111−hsの内容と、ホットスペア202が管理するブロックとLBA割り当てとの内容を示す表1201の内容が一致する。
リフレッシュ処理を実行する契機としては、ストレージ制御装置101は、たとえば、定期的にリフレッシュ処理を実行する。また、ストレージ制御装置101は、LBAの割当内容が乖離したことを判断した場合にリフレッシュ処理を実行してもよい。LBAの割当内容が乖離したことを判断する方法として、ストレージ制御装置101は、たとえば、上述した第1のRD防止コピー実行判断方法および第2のRD防止コピー実行判断方法を組み合わせることにより、LBAの割当内容が乖離したことを判断する。
具体的には、第1のRD防止コピー実行判断方法によりストレージ装置102のあるグループの読出回数がRD防止コピー閾値に到達し、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドを第2の回数分、ストレージ装置102に発行したとする。コマンド発行後、第2のRD防止コピー実行判断方法により、ストレージ制御装置101は、ストレージ装置102からの応答が遅延しなかった場合に、ストレージ装置102においてRD防止コピーが行われておらず、LBAの割当内容が乖離したと判断する。LBAの割当内容が乖離したと判断した場合、ストレージ制御装置101は、リフレッシュ処理を実行する。また、ストレージ制御装置101は、LBAの割当内容が乖離したと判断した回数が所定値を超えた場合に、リフレッシュ処理を実行してもよい。
具体的に、図12のリフレッシュ処理を行う前の状態を用いて、LBAの割当内容が乖離したことを判断する例について説明する。ここで、RD防止コピー閾値を7900[回]とし、ストレージ装置102がRD防止コピーを行う読出回数を8000[回]とする。そして、図12に示す表1102、ブロック予測テーブル111−1の状態となった以降、リフレッシュ処理を行わず、かつ、ホストサーバ201から、ストレージ装置102−1のLBA1008−1099の読出要求が、5533回あったとする。
上述した前提となる場合に、ストレージ制御装置101は、ブロック予測テーブル111−1のLBA1008−1099が含まれるG2の読出回数を5533回インクリメントする。インクリメントした結果、G2の読出回数は、2367+5533=7900となり、RD防止コピー閾値に到達したため、ストレージ制御装置101は、ストレージ装置102−1に対して、RD防止コピーを引き起こすコマンドを100[回]発行する。
しかしながら、ストレージ装置102−1は、LBA1008−1099の読出要求が5533回あった時点で、B1の読出回数が5533[回]であると管理している。したがって、ストレージ装置102は、RD防止コピーを引き起こすコマンドを100[回]受け付けても、B1の読出回数が8000[回]に到達しないため、B1に対するRD防止コピーを行わない。このため、ストレージ装置102−1は、ストレージ制御装置101に対して、RD防止コピーを引き起こすコマンドに対する応答を遅延せずに行うことになる。このように、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドの発行回数と、RD防止コピーを引き起こすコマンドの発行に対する応答時間を確認することにより、LBAの割当内容が乖離したことを判断することができる。
LBAの割当内容が乖離したと判断したときにリフレッシュ処理を実行することにより、ストレージ制御装置101は、定期的にリフレッシュ処理を実行する場合に比べて効率的にリフレッシュ処理を実行することができる。具体的に、ストレージ制御装置101は、応答遅延が発生すればリフレッシュ処理を行い応答遅延を抑制することができ、応答遅延が発生しなければ移行先のストレージ装置102の書込回数を減らすことができる。ここで、SSD内の浮遊ゲートに書き込める回数には上限があり、ある一定回数以上書き込みを行うと、浮遊ゲート内の絶縁膜が劣化して、メモリセルは情報を記憶することができなくなる。したがって、書込回数を減らすことにより、ストレージ制御装置101は、移行先のストレージ装置102が故障するまでの期間を延ばすことができる。
次に、図13〜図17を用いて、ストレージ制御装置101が実行するフローチャートについて説明する。
図13は、ストレージ装置制御処理手順の一例を示すフローチャートである。ストレージ装置制御処理は、ホストサーバ201のアクセスコマンドに応じてストレージ装置102を制御する処理である。
ストレージ制御装置101は、ホストサーバ201から、アクセスコマンドを受け付ける(ステップS1301)。次に、ストレージ制御装置101は、アクセスコマンドの種別が次に示す要求のいずれに一致するかを判断する(ステップS1302)。次に示す要求は、書込要求と、読出要求と、である。アクセスコマンドの種別が書込要求である場合(ステップS1302:書込要求)、ストレージ制御装置101は、書込時処理を実行する(ステップS1303)。書込時処理の詳細については、図14および図15で後述する。
アクセスコマンドの種別が読出要求である場合(ステップS1302:読出要求)、ストレージ制御装置101は、続けて、RD防止処理フラグが次に示す識別子のいずれに一致するかを判断する(ステップS1304)。次に示す識別子は、「処理していない」と、「処理中」と、である。RD防止処理フラグが「処理していない」である場合(ステップS1304:“処理していない”)、ストレージ制御装置101は、ブロック予測テーブル111の読出先のLBAが含まれるグループの読出回数がRD防止コピー閾値以上か否かを判断する(ステップS1305)。
ブロック予測テーブル111の読出先のLBAが含まれるグループの読出回数がRD防止コピー閾値未満である場合(ステップS1305:No)、ストレージ制御装置101は、読出先のストレージ装置102に読出要求を発行する(ステップS1306)。発行した結果、ストレージ制御装置101は、読出要求に対するデータを得る。次に、ストレージ制御装置101は、ブロック予測テーブルのアクセス対象LBAを含むグループの読出回数をインクリメントする(ステップS1307)。
ブロック予測テーブルの読出先のLBAが含まれるグループの読出回数がRD防止コピー閾値以上である場合(ステップS1305:Yes)、ストレージ制御装置101は、読出先のストレージ装置への読出要求の発行を抑止する(ステップS1308)。次に、ストレージ制御装置101は、RD防止コピー引起し処理を実行する(ステップS1309)。RD防止コピー引起し処理の詳細については、図16で後述する。
ここで、ステップS1309と、後続するステップS1310との実行の関係において、ストレージ制御装置101は、ステップS1309の処理開始後に、ステップS1310の処理を実行する。たとえば、ストレージ制御装置101は、RD防止コピー引起し処理を実行するスレッドを起動した後、ストレージ装置制御処理を実行するスレッドと、RD防止コピー引起し処理を実行するスレッドとをマルチスレッドにより並列に処理してもよい。また、CPU301がマルチコアである場合、マルチコアのうちのあるコアが、ストレージ装置制御処理を実行するスレッドを実行し、他のコアがRD防止コピー引起し処理を実行するスレッドを実行してもよい。
ステップS1309の処理開始後、ストレージ制御装置101は、RAIDグループ内の読出先のストレージ装置102以外のストレージ装置102に、読出要求に応じた読出データを復元可能なデータを記憶する記憶領域を示すLBAの読出要求を発行する(ステップS1310)。ステップS1310における読出要求は、ホストサーバ201からの読出要求である。また、RD防止処理フラグが「処理中」である場合(ステップS1304:“処理中”)、ストレージ制御装置101は、ステップS1310の処理を実行する。
ステップS1310の処理について、たとえば、読出先のストレージ装置102がRAID1のRAIDグループに属する場合、ストレージ制御装置101は、RAIDグループのミラーリング先のストレージ装置102に読出要求を発行する。そして、ストレージ制御装置101は、ミラーリング先のストレージ装置102から、ホストサーバ201が発行した読出要求に応じたデータと同一内容の読出データを取得する。
また、読出先のストレージ装置102がRAID5のRAIDグループに属する場合、ストレージ制御装置101は、RAID5のRAIDグループの読出先のストレージ装置102以外の全てのストレージ装置102に読出要求を発行する。そして、ストレージ制御装置101は、パリティデータと、パリティデータを生成する際に用いたデータ群のうち、読出先のストレージ装置102に格納した読出データ以外のデータを取得する。次に、ストレージ制御装置101は、取得したパリティデータと、読出先のストレージ装置102に格納した読出データ以外のデータとから、読出先のストレージ装置102に格納した読出データを復元する。
ステップS1307、または、ステップS1310の処理終了後、ストレージ制御装置101は、ホストサーバ201へ、読出要求に応じた読出データを通知する(ステップS1311)。ステップS1303、または、ステップS1311の処理終了後、ストレージ制御装置101は、ステップS1301の処理に移行する。ストレージ装置制御処理を実行することにより、ストレージ制御装置101は、ホストサーバ201のアクセスコマンドに応じてストレージ装置102を制御することができる。
図14は、書込時処理手順の一例を示すフローチャート(その1)である。また、図15は、書込時処理手順の一例を示すフローチャート(その2)である。書込時処理は、ホストサーバ201からのアクセスコマンドの種別が書込要求である場合に実行する処理である。
ストレージ制御装置101は、タイマが示す時間が所定間隔diを超えたか否かを判断する(ステップS1401)。このとき、書込先のストレージ装置102が、LBA割り当てがない、まだ何も書き込まれていないストレージ装置102である場合、タイマがスタートしていない。この場合、ストレージ制御装置101は、ステップS1401:Noであると判断する。
タイマが示す時間が所定間隔diを超えていない場合(ステップS1401:No)、ストレージ制御装置101は、書込先のストレージ装置102のブロック予測テーブル111に、書込先のLBAがあるか否かを判断する(ステップS1402)。書込先のLBAがない場合(ステップS1402:No)、ホストサーバ201からの書込要求は新規書込要求であるとして、ストレージ制御装置101は、割当中のグループを、書込先のグループに設定する(ステップS1403)。次に、ストレージ制御装置101は、書込先のグループが書込先のLBAを含むようにグループ分けする(ステップS1404)。ステップS1404の処理終了後、ストレージ制御装置101は、グループ分けして生成したグループ情報を、ブロック予測テーブル111に格納する。一方、書込先のLBAがある場合(ステップS1402:Yes)、ホストサーバ201からの書込要求は上書書込要求であるとして、ストレージ制御装置101は、書込先のLBAが含まれるグループを、書込先のグループに設定する(ステップS1405)。
タイマが示す時間が所定間隔diを超えた場合(ステップS1401:Yes)、ストレージ制御装置101は、書込先のストレージ装置102のブロック予測テーブル111に、書込先のLBAがあるか否かを判断する(ステップS1406)。書込先のLBAがない場合(ステップS1406:No)、ホストサーバ201からの書込要求は新規書込要求であるとして、ストレージ制御装置101は、割当中のグループを、現在割当中のグループの次のグループに設定する(ステップS1407)。次に、ストレージ制御装置101は、割当中のグループを、書込先のグループに設定する(ステップS1408)。続けて、ストレージ制御装置101は、書込先のグループが書込先のLBAを含むようにグループ分けする(ステップS1409)。ステップS1409の処理終了後、ストレージ制御装置101は、グループ分けして生成したグループ情報を、ブロック予測テーブル111に格納する。一方、書込先のLBAがある場合(ステップS1406:Yes)、ストレージ制御装置101は、ホストサーバ201からの書込要求は上書書込要求であるとして、書込先のLBAが含まれるグループを、書込先のグループに設定する(ステップS1410)。
ステップS1405、ステップS1410の処理において、ストレージ制御装置101は、書込先のLBAを、同一グループに含まれるLBAに対応するデータサイズがブロックデータサイズを超えないようにグループ分けする。書込先のLBAがブロックデータサイズに収まらない場合、ストレージ制御装置101は、書込先のLBAを、LBA順に複数のグループにグループ分けする。
ステップS1404、ステップS1405、ステップS1409、ステップS1410のうちのいずれかの処理終了後、ストレージ制御装置101は、書込先のグループの読出回数を0に初期化する(ステップS1411)。ホストサーバ201からの書込要求が上書書込要求である場合、ステップS1411を実行することにより、ストレージ制御装置101は、書込要求に含まれるLBAが含まれるブロックの読出回数を初期化することになる。
ステップS1411の処理終了後、ストレージ制御装置101は、RD防止処理フラグが次に示す識別子のいずれに一致するかを判断する(ステップS1501)。次に示す識別子は、「処理していない」と、「処理中」と、である。RD防止処理フラグが「処理していない」である場合(ステップS1501:“処理していない”)、ストレージ制御装置101は、書込先のストレージ装置102へ書込データを含む書込要求を発行する(ステップS1502)。
一方、RD防止処理フラグが「処理中」である場合(ステップS1501:“処理中”)、ストレージ制御装置101は、続けて、書込先のLBAがRD防止コピーの対象のグループに含まれるか否かを判断する(ステップS1503)。
書込先のLBAがRD防止コピーの対象のグループに含まれない場合(ステップS1503:No)、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドの発行を一時停止する(ステップS1504)。次に、ストレージ制御装置101は、書込先のストレージ装置102へ書込データを含む書込要求を発行する(ステップS1505)。続けて、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドの発行を再開する(ステップS1506)。
一方、書込先のLBAがRD防止コピーの対象のグループに含まれる場合(ステップS1503:Yes)、ストレージ制御装置101は、RD防止コピーを引き起こすコマンドの発行を停止させる(ステップS1507)。次に、ストレージ制御装置101は、書込先のストレージ装置へ書込データを含む書込要求を発行する(ステップS1508)。続けて、ストレージ制御装置101は、RD防止処理フラグを、「処理していない」に変更する(ステップS1509)。
ステップS1502、ステップS1506、ステップS1509のうちのいずれかの処理終了後、ストレージ制御装置101は、タイマをスタートする(ステップS1510)。ステップS1510の処理終了後、ストレージ制御装置101は、書込時処理を終了する。書込時処理を実行することにより、ストレージ制御装置101は、ホストサーバ201からの書込要求に対応してストレージ装置102を制御することができる。
図16は、RD防止コピー引起し処理手順の一例を示すフローチャートである。RD防止コピー引起し処理は、ストレージ装置102にRD防止コピーを起こさせる処理である。図16に示す処理について、ブロック予測テーブル111とRD防止処理フラグとは、図13における読出先のストレージ装置102におけるブロック予測テーブル111とRD防止処理フラグとを指す。説明の簡略化のため、図16において、ブロック予測テーブル111とRD防止処理フラグには、「読出先のストレージ装置102における」を省略して記載する。
ストレージ制御装置101は、RD防止処理フラグを、「処理中」に変更する(ステップS1601)。次に、ストレージ制御装置101は、読出先のストレージ装置へ、RD防止コピーを引き起こすコマンドを発行する(ステップS1602)。続けて、ストレージ制御装置101は、RD防止コピーが行われたか否かを判断する(ステップS1603)。RD防止コピーが行われたか否かを判断する方法は、上述した第1のRD防止コピー実行判断方法と、第2のRD防止コピー実行判断方法とがある。
RD防止コピーが行われていない場合(ステップS1603:No)、ストレージ制御装置101は、ステップS1602の処理に移行する。RD防止コピーが行われた場合(ステップS1603:Yes)、ストレージ制御装置101は、ブロック予測テーブルの読出先のLBAが含まれるグループの読出回数の値を0に初期化する(ステップS1604)。次に、続けて、ストレージ制御装置101は、RD防止処理フラグを、「処理していない」に変更する(ステップS1605)。ステップS1605の処理終了後、ストレージ制御装置101は、RD防止コピー引起し処理を終了する。RD防止コピー引起し処理を実行することにより、ストレージ制御装置101は、ストレージ装置102にRD防止コピーを起こさせることができる。
図17は、リフレッシュ処理手順の一例を示すフローチャートである。リフレッシュ処理は、移行元のストレージ装置102が記憶する移行対象データを移行先のストレージ装置に移行させて、グループとLBAとの関係を再定義する処理である。
ストレージ制御装置101は、移行元のストレージ装置102の全てのLBAを、移行先のストレージ装置102に移行するデータ移行要求を、移行元のストレージ装置に発行する(ステップS1701)。次に、ストレージ制御装置101は、移行元のストレージ装置102のブロック予測テーブル111の先頭LBAを選択する(ステップS1702)。続けて、ストレージ制御装置101は、移行先のストレージ装置102の割当中のグループを、先頭のグループに設定する(ステップS1703)。
次に、ストレージ制御装置101は、移行先のストレージ装置102のブロック予測テーブル111の割当中のグループに、選択したLBAを先頭として1ブロック分のLBAを含むようにグループ分けする(ステップS1704)。続けて、ストレージ制御装置101は、移行元のストレージ装置102の全てのLBAをグループ分けしたか否かを判断する(ステップS1705)。
移行元のストレージ装置102のLBAのうち、グループ分けしていないLBAがある場合(ステップS1705:No)、ストレージ制御装置101は、移行元のストレージ装置102のLBAのうち、まだグループ分けしていない先頭のLBAを選択する(ステップS1706)。続けて、ストレージ制御装置101は、割当中のグループを、現在割当中のグループの次のグループに設定する(ステップS1707)。ステップS1707の処理終了後、ストレージ制御装置101は、ステップS1704の処理に移行する。
一方、移行元のストレージ装置102の全てのLBAをグループ分けした場合(ステップS1705:Yes)、ストレージ制御装置101は、リフレッシュ処理を終了する。リフレッシュ処理を実行することにより、ストレージ制御装置101は、ストレージ装置102が管理するグループとLBA割り当ての関係と、ストレージ制御装置101が予測するグループとLBA割り当ての関係との乖離を解消することができる。
以上説明したように、ストレージ制御装置101によれば、書込要求のLBAをブロック単位でグループ分けしたグループの読出回数を計数し、計数したグループの読出回数に基づいて元データか冗長データかを読み出す読出要求をストレージ装置102に発行する。これにより、ストレージ制御装置101は、読み出しを行うとRD防止コピーが発生するであろうLBAを予測することができる。そして、ストレージ制御装置101は、ホストサーバ201からの読出要求に対する応答性能の低下を抑制することができる。また、ストレージ制御装置101は、ストレージ装置102の内部処理とストレージ制御装置101からの読出要求とのタイミングが重なることを防ぎ、安定した応答時間を得ることができる。
また、ストレージ制御装置101によれば、ストレージ制御装置101が受け付けた書込要求に応じて、書込要求のLBAをブロック単位でグループ分けしてもよい。これにより、ストレージ制御装置101は、ストレージ装置102への書込要求に追随してグループ分けが行えるため、RD防止コピーが発生するであろうLBAの予測精度の低下を抑制することができる。
また、ストレージ制御装置101によれば、ストレージ装置102への読出要求に応じて、読出要求に含まれる読出先のLBAを含むグループに含まれるLBAの書込要求を発行したことに応じて、グループの読出回数を初期化してもよい。SSDコントローラは、上書書込が行われると該当するブロックの読出回数を初期化するため、ストレージ制御装置101は、予測精度の低下を抑制することができる。
また、ストレージ制御装置101によれば、グループの読出回数がRD防止コピー閾値以上であることに応じて、RD防止コピーを引き起こすコマンドをストレージ装置102に発行して、グループの読出回数を初期化してもよい。ここで、ストレージ制御装置101は、ストレージ装置102にRD防止コピーを引き起こすコマンドを、ストレージ装置102の仕様に応じて設定された規定回数からRD防止コピー閾値を減じた回数分発行する。または、ストレージ制御装置101は、ストレージ装置102がRD防止コピーを引き起こすコマンドを、コマンドに対する応答時間が所定時間を超えるまで発行する。これにより、ストレージ制御装置101は、RD防止コピーが発生するであろうLBAに対しRD防止コピーを事前に起こしておくことになる。したがって、ホストサーバ201からの読出要求を受け付ける前にRD防止コピーが完了していれば、ホストサーバ201からの読出要求に対する応答遅延が発生しなくなる。これにより、ストレージ制御装置101は、ホストサーバ201からの読出要求に対する応答性能の低下を抑制することができる。
また、ストレージ制御装置101によれば、RD防止コピーを引き起こすコマンドを発行する間に、コマンドのLBAを含むグループに含まれるLBAの書込要求を発行したことに応じて、コマンドの発行を停止するとともにグループの読出回数を初期化してもよい。SSDコントローラは、上書書込が行われると該当するブロックの読出回数を初期化するため、ストレージ制御装置101は、読出回数の予測精度を向上することができる。さらに、上書書込が行われればRD防止コピーを行わなくてよいので、コマンドの発行を停止することにより、ストレージ制御装置101は、無駄なコマンドの発行を行わなくて済む。
また、ストレージ制御装置101によれば、同一グループに含まれるLBAを含む書込要求のストレージ装置102への発行間隔が所定間隔diを超えないようにグループ分けしてもよい。これにより、ストレージ制御装置101は、ストレージ装置102が行うブロックとLBA割り当てとの関係の予測精度を向上することができる。
また、本実施の形態にかかるストレージ装置102の半導体メモリは、NAND型のフラッシュメモリであってもよい。NAND型のフラッシュメモリは、NOR型のフラッシュメモリと比較してリードディスターブが発生し易いため、NAND型のフラッシュメモリを制御するSSDコントローラは、RD防止コピーを行う回数が多くなることになる。したがって、NAND型のフラッシュメモリを有するストレージ装置102に対して本実施の形態におけるストレージ装置の制御方法を実行することにより、多く発生する応答性能が遅延する状態を起こさないようにして、応答性能の低下を抑制することができる。
また、ストレージ制御装置101によれば、グループの読出回数がRD防止コピー閾値以上であれば、グループに含まれるLBAの読出要求に応じて、読出先のデータを復元可能なデータ先を示すLBAの読出要求を、他のストレージ装置102に発行してもよい。これにより、ストレージ制御装置101は、RD防止コピーが発生するであろうストレージ装置102を避けて、ホストサーバ201の読出要求に応答することができ、読出要求に対する応答性能の低下を抑制することができる。
また、ストレージ制御装置101によれば、同一の特性を有するストレージ装置102群によりRAIDグループを形成する場合、ストレージ装置102群の各々のRD防止コピー閾値をずらして設定してもよい。これにより、ストレージ制御装置101は、RD防止コピーが行われる期間をストレージ装置102間でずらすことができる。RD防止コピーが行われる期間をずらすことにより、ストレージ制御装置101は、ミラーリングからのデータ取得ができない状態、またはパリティを用いたデータ復元ができない状態になることを避け、読出要求に対する応答性能の低下を抑制することができる。
また、ストレージ制御装置101によれば、移行元のストレージ装置102が記憶する移行対象データを移行先のストレージ装置102に移行させて、グループとLBAとの関係を再定義してもよい。これにより、ストレージ制御装置101は、ストレージ制御装置101が予測するグループとLBA割り当ての関係と移行先のストレージ装置102が管理するブロックとLBA割り当てとの内容が一致して、RD防止コピーが発生するLBAの予測精度が向上する。
また、ストレージ制御装置101によれば、移行先のストレージ装置102に対してもグループ分けや、グループの読出回数の計数を行うことにより、移行先のストレージ装置102に対しても、RD防止コピーが発生するLBAの予測を行うことができる。
なお、本実施の形態で説明したストレージ装置の制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ストレージ装置の制御プログラムは、ハードディスク、フレキシブルディスク、光ディスク等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ストレージ装置の制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)ストレージ装置の記憶領域に対して所定のデータサイズのブロック単位でデータを冗長化して記憶させる制御を行うストレージ制御装置であって、
データの書込要求から特定される書込先の論理アドレスを、前記ブロック単位に対応付けてグループ分けしたグループ情報を記憶する記憶部と、
データの読出要求に応じて、前記グループ情報に基づき前記読出要求から特定される読出先の論理アドレスを含むグループの読出回数を計数し、計数した前記グループの読出回数に基づき前記読出先の論理アドレスを含む読出要求、または、前記読出先の論理アドレスのデータに対応する冗長データの記憶先の論理アドレスを含む読出要求を発行する制御部と、
を有することを特徴とするストレージ制御装置。
(付記2)前記記憶領域は、規定回数の読み出しが行われるとブロックのデータを他のブロックへコピーするコピー制御が行われる半導体メモリの記憶領域であることを特徴とする付記1に記載のストレージ制御装置。
(付記3)前記ストレージ制御装置は、前記半導体メモリを含む前記ストレージ装置と、当該ストレージ装置が記憶するデータの冗長データを記憶する前記ストレージ装置とは異なる他のストレージ装置の制御を行うものであり、
前記制御部は、
計数した前記グループの読出回数が前記規定回数より小さい第1の回数となった後に、データの読出要求に応じて、当該読出要求から特定される読出先の論理アドレスが前記グループに含まれる場合に、当該読出先の論理アドレスのデータに対応する冗長データの記憶先の論理アドレスを含む読出要求を、前記他のストレージ装置に発行する、
ことを特徴とする付記2に記載のストレージ制御装置。
(付記4)前記制御部は、
計数した前記グループの読出回数が前記規定回数より小さい第1の回数となったことに応じて、前記グループに含まれる論理アドレスを含む読出要求を、前記規定回数から前記第1の回数を減じた第2の回数、または、当該読出要求に対する応答時間が所定時間を超えるまで前記ストレージ装置に発行し、前記グループの読出回数を初期化することを特徴とする付記2または3に記載のストレージ制御装置。
(付記5)前記制御部は、
前記グループに含まれる論理アドレスを含む読出要求を、前記第2の回数、または、当該読出要求に対する応答時間が所定時間を超えるまで前記ストレージ装置に発行する間に、前記グループに含まれる論理アドレスを含む書込要求を前記ストレージ装置に発行したことに応じて、前記グループに含まれる論理アドレスを含む読出要求の発行を停止するとともに、前記グループの読出回数を初期化することを特徴とする付記4に記載のストレージ制御装置。
(付記6)前記制御部は、
前記グループに含まれる論理アドレスを含む書込要求を前記ストレージ装置に発行したことに応じて、前記グループの読出回数を初期化することを特徴とする付記1または2に記載のストレージ制御装置。
(付記7)前記記憶部は、
書込要求から特定される前記他のストレージ装置の書込先の論理アドレスを、前記ブロック単位に対応付けてグループ分けした前記他のストレージ装置のグループ情報を記憶しており、
前記制御部は、
受け付けた読出要求に応じて、前記他のストレージ装置のグループ情報に基づき当該読出要求から特定される前記他のストレージ装置の読出先の論理アドレスを含むグループの読出回数を計数し、計数した当該グループの読出回数が前記規定回数より小さく前記第1の回数とは異なる第3の回数となったことに応じて、当該グループに含まれる論理アドレスを含む読出要求を、前記規定回数から前記第3の回数を減じた第4の回数、または、当該読出要求に対する応答時間が所定時間を超えるまで前記他のストレージ装置に発行し、当該グループの読出回数を初期化することを特徴とする付記3に記載のストレージ制御装置。
(付記8)前記ストレージ制御装置は、さらに、半導体メモリの記憶領域を所定のデータサイズで分割したブロック単位で書き込みを行う移行先のストレージ装置の制御を行うものであり、
前記制御部は、
受け付けた書込要求から特定される前記ストレージ装置の書込先の論理アドレスをグループ分けした複数のグループに含まれる論理アドレスを含むデータ移行要求を、前記移行先のストレージ装置へのデータの移行間隔が所定間隔を超えないように前記ストレージ装置に発行し、
発行した前記データ移行要求に含まれる論理アドレスを、前記ブロック単位に対応付けてグループ分けした前記移行先のストレージ装置のグループ情報を生成することを特徴とする付記1〜7のいずれか一つに記載のストレージ制御装置。
(付記9)前記制御部は、
受け付けた書込要求に応じて、当該書込要求から特定される前記移行先のストレージ装置の書込先の論理アドレスを、同一グループに含まれる論理アドレスに対応するデータサイズが当該所定のデータサイズを超えないようにグループ分けし、
受け付けた読出要求に応じて、当該読出要求から特定される前記移行先のストレージ装置の読出先の論理アドレスを含むグループの読出回数を計数し、
計数した当該グループの読出回数に基づき当該読出先の論理アドレスを含む読出要求、または、当該読出先の論理アドレスのデータに対応する冗長データの記憶先の論理アドレスを含む読出要求を発行する付記8に記載のストレージ制御装置。
(付記10)ストレージ装置の記憶領域に対して所定のデータサイズのブロック単位でデータを冗長化して記憶させる制御を行うストレージ制御装置の制御方法であって、
前記ストレージ制御装置が、
データの読出要求に応じて、データの書込要求から特定される書込先の論理アドレスを、前記ブロック単位に対応付けてグループ分けしたグループ情報に基づき前記読出要求から特定される読出先の論理アドレスを含むグループの読出回数を計数し、計数した前記グループの読出回数に基づき前記読出先の論理アドレスを含む読出要求、または、前記読出先の論理アドレスのデータに対応する冗長データの記憶先の論理アドレスを含む読出要求を発行する、
処理を実行することを特徴とする制御方法。
(付記11)ストレージ装置の記憶領域に対して所定のデータサイズのブロック単位でデータを冗長化して記憶させる制御を行うストレージ制御装置の制御プログラムであって、
前記ストレージ制御装置に、
データの読出要求に応じて、データの書込要求から特定される書込先の論理アドレスを、前記ブロック単位に対応付けてグループ分けしたグループ情報に基づき前記読出要求から特定される読出先の論理アドレスを含むグループの読出回数を計数し、計数した前記グループの読出回数に基づき前記読出先の論理アドレスを含む読出要求、または、前記読出先の論理アドレスのデータに対応する冗長データの記憶先の論理アドレスを含む読出要求を発行する、
処理を実行させることを特徴とする制御プログラム。