(58)【調査した分野】(Int.Cl.,DB名)
複数のストレージディスクデバイスを含み、書き込み対象データを受け入れて、前記書き込み対象データについて所定データ長のパリティ生成単位でパリティを生成し、前記書き込み対象データと生成したパリティとを前記ストレージディスクデバイスに記憶する記憶装置に接続され、キャッシュメモリと、コントローラと、を含む記憶制御システムであって、
前記コントローラは、
前記書き込み対象データと、前記書き込み対象データの書き込み先となる対象セクタを特定する情報とを含む書き込み指示を受け入れる受入手段と、
前記受け入れた書き込み指示により書き込み先となった対象セクタ内のセクタデータと、前記セクタデータ以外である端数データとを内包するパリティ生成単位を少なくとも一つ含むデータのうち、前記セクタデータを除く部分を含む処理対象データが、前記キャッシュメモリに保持されているか否か判断する判断手段と、
前記判断手段による判断の結果、前記処理対象データが前記キャッシュメモリに保持されていると判断したときには、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する書込制御手段と、
を備え、
前記書込制御手段は、前記処理対象データが前記キャッシュメモリに保持されていないときには、少なくとも前記対象セクタの前後に前記端数データがあるか否かを調べ、前方にのみ前記端数データがある場合と、後方にのみ前記端数データがある場合と、前方と後方との双方に前記端数データがある場合とのそれぞれの場合に対応して予め定めた部分のデータを、前記記憶装置から取得して、あるいは、少なくとも前記対象セクタを含む読み出し/書き込みの単位であるセグメントの後に続く複数セグメント分のデータを、前記記憶装置から取得して、前記処理対象データとしてキャッシュメモリに格納する記憶制御システム。
請求項1または2に記載の記憶制御システムであって、前記記憶装置に格納されたデータをキャッシュする、前記キャッシュメモリとは異なるキャッシュデバイスをさらに有して、
前記書込制御手段は、前記判断手段の判断の結果、前記処理対象データが、前記キャッシュメモリに保持されていないと判断されたときに、前記キャッシュデバイスに前記処理対象データが保持されているか否かを判断し、前記キャッシュデバイスに保持されていたときには、前記処理対象データを、前記キャッシュメモリに読み出して、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていれば前記書き込み指示に基づいて前記データ部分を書き換え、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていなければ前記書き込み指示に基づいて前記データ部分を追記して更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する記憶制御システム。
複数のストレージディスクデバイスを含み、書き込み対象データを受け入れ、前記書き込み対象データについて所定データ長のパリティ生成単位でパリティを生成し、前記書き込み対象データと生成したパリティとを前記ストレージディスクデバイスに記憶する記憶装置に接続されるとともに、キャッシュメモリにアクセス可能に接続された記憶制御装置であって、
書き込み対象データと、前記書き込み対象データの書き込み先となる対象セクタを特定する情報とを含むデータの書き込み指示を受け入れる受入手段と、
前記受け入れた書き込み指示により書き込み先となった対象セクタ内のセクタデータと、前記セクタデータ以外である端数データとを内包するパリティ生成単位を少なくとも一つ含むデータのうち、前記セクタデータを除く部分を含む処理対象データが、前記キャッシュメモリに保持されているか否か判断する判断手段と、
前記判断手段による判断の結果、前記処理対象データが前記キャッシュメモリに保持されていると判断したときには、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する書込制御手段と、
を有し、
前記書込制御手段は、前記処理対象データが前記キャッシュメモリに保持されていないときには、少なくとも前記対象セクタの前後に前記端数データがあるか否かを調べ、前方にのみ前記端数データがある場合と、後方にのみ前記端数データがある場合と、前方と後方との双方に前記端数データがある場合とのそれぞれの場合に対応して予め定めた部分のデータを、前記記憶装置から取得して、あるいは、少なくとも前記対象セクタを含む読み出し/書き込みの単位であるセグメントの後に続く複数セグメント分のデータを、前記記憶装置から取得して、前記処理対象データとしてキャッシュメモリに格納する記憶制御装置。
【発明を実施するための形態】
【0017】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係る記憶制御システム1は、
図1に例示するように、例えばパーソナルコンピュータ(PC)等のホスト側装置10と、記憶制御装置30とを含んで構成され、この記憶制御装置30が記憶装置20に接続されている。
【0018】
記憶装置20は、インタフェース部21と、デバイスコントローラ22と、複数のストレージディスクデバイス23-1,23-2…とを含んで構成されている。ここでストレージディスクデバイス23は、ハードディスクドライブ(HDD)やBluRay(登録商標)ディスクドライブなどの光学ディスクデバイス等、ランダムアクセスとシーケンシャルアクセスとで速度差のある記録媒体である。また記憶制御装置30は、コントローラ31、記憶部32、キャッシュメモリ部33、第1インタフェース部34、及び第2インタフェース部35を含んで構成されている。
【0019】
記憶装置20のインタフェース部21は、記憶制御装置30に接続され、記憶制御装置30から書き込み対象データやコマンドを受け入れてデバイスコントローラ22に出力する。またこのインタフェース部21は、デバイスコントローラ22から出力の対象となるデータを受け入れて、記憶制御装置30に対して当該データを出力する。
【0020】
デバイスコントローラ22は、インタフェース部21を介してストレージディスクデバイス23に書き込むべきデータ(書き込み対象データ)と書き込みのコマンドとを受け入れたときに、当該書き込み対象データを所定データ長(パリティ生成データ長と呼ぶ)のパリティ生成単位に区分して、パリティ生成単位ごとのパリティデータを生成し、当該書き込み対象データと生成したパリティデータとをストレージディスクデバイス23に記録する動作を行う。
【0021】
またこのデバイスコントローラ22は、インタフェース部21を介して読み出しのコマンドを受け入れたときには、ストレージディスクデバイス23側から読み出しの対象となるデータを読み出して、インタフェース部21に出力する。
【0022】
本実施の形態のある例では、このデバイスコントローラ22がRAID(Redundant Arrays of Inexpensive Disks)コントローラとして機能する。この例では複数(n台とする)のストレージディスクデバイス23がRAIDアレイとして動作する。本実施の形態の以下の説明ではデバイスコントローラ22がRAIDコントローラとして機能するものとして説明するが、本実施の形態は、ストレージディスクデバイス23をRAIDアレイとする場合に限られない。すなわち、パリティ等冗長化のための情報を用いて書き込まれるべきデータを冗長化し、複数のストレージディスクデバイス23を用いて当該データを記録するよう制御するのであれば、デバイスコントローラ22はどのような制御を行ってもよい。
【0023】
本実施の形態の一例では、ストレージディスクデバイス23は少なくとも3台以上(n≧3)備えられているものとし、デバイスコントローラ22は、ストレージディスクデバイス23-1,…23-nを、所定データ長LCずつの記憶領域(チャンク)に区分して管理している。またこの例のデバイスコントローラ22は、書き込みの指示とともに書き込み対象データを受け入れて、上記チャンクのデータ長LCに、ストレージディスクデバイス23の数nからパリティの数pを減じた(n−p)を乗じた(n−p)×LCのデータ長(セグメント長)ごとに書き込み対象データを分割し、データセグメントA,B…を得る。以下では説明を簡単にするためp=1とする。この場合デバイスコントローラ22は(n−1)×LCのデータ長ごとに書込対象データを分割してデータセグメントA,B…を得ることとなる。
すなわち、この例においてデバイスコントローラ22は、各データセグメントをパリティ生成単位として、このデータ長(n−1)×LCのデータセグメントA,B…ごとに、対応するパリティデータAparity,Bparity…を生成する。また、得られたデータセグメントごとにパリティデータを格納するストレージディスクデバイス23を選択する。
【0024】
例えばデバイスコントローラ22は、各データセグメントを長さLCのチャンクA1,A2,…An-1,B1,B2,…,Bn-1…に区分し、データセグメントAに対応するパリティデータAparityを、ストレージディスクデバイス23-nに格納することとして、データセグメントAを区分して得られたチャンクA1,A2,…An-1については、パリティデータの格納先として選択したストレージディスクデバイス23-n以外のn−1台のストレージディスクデバイス23-1,…23-(n-1)のそれぞれの記憶領域(その位置は書き込み指示に含まれる論理セクタを特定する情報によって特定される)に格納していく(
図2)。
【0025】
デバイスコントローラ22は、以下、データセグメントBに対応するパリティデータBparityについてはストレージディスクデバイス23-(n-1)に格納することとして、データセグメントBを区分して得られたデータB1,B2,…Bn-1については、ストレージディスクデバイス23-1,…23-(n-2),23-nのそれぞれに格納していくようにする。このような格納方式は、いわゆるRAID5として知られているので、以下の詳しい説明を省略する。
【0026】
このデータセグメントA,B…が格納される領域(n−1台のストレージディスクデバイス23に分割して配されている領域、以下セグメントと呼ぶ)Sには、
図3に示すように、自然数個の論理セクタ(L)が含まれる。デバイスコントローラ22は、セグメントごとに、当該セグメントに含まれる論理セクタを特定する情報を関連付けて、マップ情報として記憶しておく。
【0027】
また本実施の形態のこの例においてデバイスコントローラ22は、読み出しの指示として、読み出しの対象となる論理セクタを特定する情報を受け入れる。そしてデバイスコントローラ22は、マップ情報を参照して、当該受け入れた情報で特定される論理セクタを含むセグメントを特定する。
【0028】
デバイスコントローラ22は、特定したセグメント内のデータ及び対応するパリティデータを、ストレージディスクデバイス23-1,…23-nから読み出す。ここでデバイスコントローラ22は、パリティデータを用いて、セグメント内のデータに誤りがないかを検出、ないし訂正する処理を行うが、この処理はRAIDの処理として広く知られた処理をそのまま採用できるので、ここでの詳しい説明を省略する。
【0029】
そしてデバイスコントローラ22は、ストレージデバイス23から読み出したデータのうち、読み出しコマンドに含まれる情報で特定される論理セクタ内のデータ部分(セグメント全体に対応する場合はセグメント全体のデータ)を、インタフェース部21を介して記憶制御装置30に対して出力する。
【0030】
記憶制御装置30のコントローラ31は、CPU等のプログラム制御デバイスであり、記憶部32に格納されたプログラムに従って動作する。
【0031】
具体的にこのコントローラ31は、データの書き込み指示(ライトコマンド)を、ホスト側装置10から受け入れる。この書き込み指示は、具体的には書き込みの対象となるデータと、当該データを格納するべき論理セクタを特定する情報とを含む。つまり、この書き込み指示により書き込みの対象となるデータの長さ(データ長)は、セクタ単位(1セクタ内に格納可能なデータ長)の自然数(ただし「0」は含まない、以下同じ)倍となっている。
【0032】
コントローラ31は、ここで受け入れた書き込み指示によりデータが書き込まれる論理セクタを対象セクタとして、この対象セクタに記録されたデータ(セクタデータと呼ぶ)と、端数データとを内包するパリティ生成単位を少なくとも一つ含む、パリティ生成データ長の自然数倍以上のデータ長のデータのうち、セクタデータを除く部分を少なくとも含むデータ(処理対象データと呼ぶ)が、キャッシュメモリ部33に保持されているか否か判断する。これは、パリティ生成単位には書き込み指示に含まれるデータ(現在のセクタデータに置き換えられるべきデータ)と、それ以外の部分のデータ(いわゆる端数部分のデータ、以下端数データと呼ぶ)とが一般に含まれるが、現在のセクタデータは書き込み指示によって書き換えられてしまうため、書き込むべきデータのうちセクタデータ以外の部分のデータ(端数データを含む)がキャッシュされていれば十分だからである。もちろん処理対象データにはセクタデータが含まれてもよい。またパリティ生成単位全体が書き込み指示に含まれるデータのみである場合(端数データを含まない場合)があってもよく、この場合は、コントローラ31は、キャッシュメモリ部33に保持されているか否かを判断せずに、書き込み指示に含まれるデータを処理対象データとして記憶装置20に出力する。
【0033】
コントローラ31は、当該処理対象データがキャッシュメモリ部33に保持されていると判断したときには、受け入れたライトコマンドに基づいてキャッシュメモリ部33内の処理対象データについて、上記のセクタデータに対応するデータ部分を書き換え、または追記して、処理対象データを更新する。そしてコントローラ31は、当該更新した処理対象データを記憶装置20に出力する。本実施の形態のコントローラ31の動作については、後に詳しく述べる。
【0034】
記憶部32は、コントローラ31によって実行されるプログラムを保持するメモリデバイス等である。この記憶部32に格納されるプログラムは、コンピュータ可読、かつ非一時的(Non-Transitory)な記録媒体に格納されて提供されたものであってもよいし、ネットワーク等の通信回線を介して取得されたものであってもよい。本実施の形態において記憶部32は、コントローラ31のワークメモリとしても動作する。
【0035】
キャッシュメモリ部33は、記憶制御装置30においてキャッシュとして機能するメモリデバイスである。本実施の形態の一態様では、このキャッシュメモリ部33は、記憶部32の一部として実現されていてもよい。第1インタフェース部34は、ホスト側装置10に接続され、コントローラ31とホスト側装置10との間でデータやコマンドを授受する。第2インタフェース部35は、記憶装置20に接続され、コントローラ31と記憶装置20との間でデータやコマンドを授受する。
【0036】
[コントローラの動作]
次に、コントローラ31の動作について説明する。本実施の形態の例では、記憶制御装置30が、記憶装置20のセグメントごとに、当該セグメントに含まれる論理セクタを特定する情報を関連付けて、マップ情報として記憶しておくものとする。このマップ情報は、デバイスコントローラ22が記憶しているものと同じものである。また、このコントローラ31の動作のうち、ホスト側装置10から読み出しの指示(リードコマンド)を受けたときの動作は、従来例と同様のものであるので、ここでの詳しい説明を省略する。
【0037】
コントローラ31は、ホスト側装置10からデータの書き込みの指示(ライトコマンド)を受けたときに、次の端数処理を実行する。具体的に本実施の形態のコントローラ31は、
図4に例示するように、機能的に受入部311と、判断部312と、書込処理部313とを含んで構成される。受入部311は、データの書き込み指示(ライトコマンド)を、ホスト側装置10から受け入れる。既に述べたように、この受入部311がホスト側装置10から受け入れる書き込み指示には、書き込みの対象となるデータと、当該データを格納するべき論理セクタを特定する情報とが含まれる。
【0038】
判断部312は、受入部311が受け入れたライトコマンドに含まれる情報で特定される論理セクタを対象セクタとして、この対象セクタに記録されているセクタデータと端数データとを内包したパリティ生成単位を少なくとも一つ含むデータのうち、セクタデータを除く部分を少なくとも含むデータ(処理対象データ)が、キャッシュメモリ部33に保持されているか否か判断する。本実施の形態のここでの例では、パリティ生成単位がセグメントの単位となっているので、判断部312は、対象セクタを内包するセグメント(対象セクタが複数のセグメントにまたがっている場合は、当該複数のセグメントの全体)を含むデータのうち、対象セクタを除くデータがキャッシュメモリ部33に格納されているか否かを判断することとなる。
【0039】
判断部312が、処理対象データがキャッシュメモリ部33に保持されていると判断したときに、書込処理部313は、受け入れたライトコマンドに基づいてキャッシュメモリ部33内の処理対象データを読み出して、当該読み出した処理対象データのうちに上記のセクタデータに対応するデータ部分が含まれる場合は、当該データ部分をライトコマンドに含まれるデータで書き換えて更新する。また書込処理部313は、当該読み出した処理対象データのうちに上記のセクタデータに対応するデータ部分が含まれない場合は、読み出した処理対象データ(のうちセクタデータに対応する部分)に、ライトコマンドに含まれるデータを追記して、処理対象データを更新する。ここでセクタデータに対応する部分は、キャッシュメモリ部33内の処理対象データの読み出し元の位置を指定する情報(セクタの位置を特定する情報)に基づいて判断できる。そしてこの書込処理部313は、更新後の処理対象データを、書き込み対象データとして記憶装置20に出力する。またこのとき、書込処理部313は、書き込み先の位置を指定する情報として、更新後の処理対象データの格納先となる各論理セクタを特定する情報を併せて出力する。さらにこのとき書込処理部313は、キャッシュメモリ部33に格納されていた処理対象データを、更新後の処理対象データで置き換える(ライトスルー方式によるキャッシュ)。ここで書き込み対象として出力される、更新後の処理対象データは、端数が発生している場合は、ライトコマンドに含まれるデータに加えて当該端数を含むデータであり、端数が発生しない場合はライトコマンドに含まれるデータそのものとなる。
【0040】
一方、判断部312が、処理対象データがキャッシュメモリ部33に保持されていないと判断したとき(処理対象データの一部は保持されているが、その全体がキャッシュメモリ部33に保持されていないと判断したときを含む)には、この書込処理部313は、上記処理対象データがキャッシュメモリ部33に保持された状態となるよう、記憶装置20から処理対象データの少なくとも一部のデータを取得する。
【0041】
具体的に、判断部312が、処理対象データがキャッシュメモリ部33に保持されていないと判断したとき、書込処理部313は、次のいずれかの方法でデータの読み出しの動作を行う。すなわち、本実施の形態のある例では、
図5に示すように、記憶装置20におけるセグメントに複数の論理セクタ(L)が含まれる。従って一般的に記憶装置20におけるデータの読み出し/書き込みの単位であるセグメント(S)には、ライトコマンドにより書き換えの対象となったセクタデータを保持する論理セクタ(L)の前後に、書き換えの対象でないデータ(つまり端数データ)も含まれる。そこで書込処理部313は、(1)必要最低限のデータを読み出す方法または(2)必要最低限を超えるデータを読み出す方法のいずれかにより処理対象データ(の少なくとも不足する部分)の読み出し処理を行う。以下、それぞれについて説明する。
【0042】
(1)必要最低限のデータを読み出す方法
この方法を採用する場合、書込処理部313としての動作を行うコントローラ31は、マップ情報を参照して、ライトコマンドによる書き換えの対象となった論理セクタ(対象セクタ)を含むセグメントを特定し、当該特定されたセグメントのうちで、対象セクタの前方と後方とに端数が発生しているか否かを調べる。
【0043】
そして、
(1-1)前方にのみ端数が発生する場合(
図5(a)):書込処理部313としての動作を行うコントローラ31は、対象セクタより前方の端数部分(対象セクタは含まなくてもよい)に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置20に対して出力する。なお、対象セクタに対応する部分が、複数のセグメントにまたがっている場合も同様に、対象セクタより前方の端数部分(対象セクタは含まなくてもよい)に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置20に対して出力する。
【0044】
また、
(1-2)後方にのみ端数が発生する場合(
図5(b)):書込処理部313としての動作を行うコントローラ31は、対象セクタより後方の端数部分(対象セクタは含まなくてもよい)に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置20に対して出力する。なお、対象セクタに対応する部分が、複数のセグメントにまたがっている場合も同様に、対象セクタより後方の端数部分(対象セクタは含まなくてもよい)に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置20に対して出力する。
【0045】
(1-3)前方と後方との双方に端数が発生する場合(
図5(c)):書込処理部313としての動作を行うコントローラ31は、対象セクタより前方の端数部分及び後方の端数部分(対象セクタは含まなくてもよい)に相当する論理セクタを特定する情報とを含む読み出し指示を記憶装置20に対して出力する。なお、対象セクタに対応する部分が、複数のセグメントにまたがっている場合(
図5(d))も同様に、対象セクタより前方の端数部分及び後方の端数部分(対象セクタは含まなくてもよい)に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置20に対して出力する。なお、この場合の読み出し指示では、前方の端数部分と後方の端数部分とを二度に分けて読み出すよりも、前方の端数部分から後方の端数部分まで対象セクタを含んで読み出すほうが効率的である場合もある。従って、この例の読み出し指示では対象セクタを含むように制御してもよい。
【0046】
なおこのように対象セクタのデータの前方と後方との双方に端数が発生する場合は、書込処理部313としての動作を行うコントローラ31は、上記規則に従って読み出すこととなるデータのサイズを調べ、当該サイズが、予め定めたサイズ(例えばセグメントサイズの数倍程度)を超えると判断される場合は、データの読み出しを行わずに(本実施の形態の端数処理をせずに)、ライトコマンドにより書き込みの対象となったデータを、記憶装置20に対して出力するようにしてもよい。
【0047】
(2)必要最低限を超えるデータを読み出す方法
この方法を採用する場合、書込処理部313は、マップ情報を参照して、ライトコマンドにより書き換えの対象となった対象セクタを含むセグメントを特定する。そして、書込処理部313としての動作を行うコントローラ31は、特定したセグメントと、当該特定したセグメントの後に続く所定数個のセグメントに含まれるすべての論理セクタ(対象セクタは除いてもよい)を特定する情報を含む読み出し指示を、記憶装置20に対して出力するようにしてもよい。なお、特定したセグメント内で対象セクタの前後に端数部分がある場合は、前方の端数部分と後方の端数部分とを二度に分けて読み出すよりも、前方の端数部分から後方の端数部分まで対象セクタを含んで読み出すほうが効率的である場合もある。従って、このときには読み出し指示に対象セクタを含むように制御してもよい。
また、当該特定したセグメントの後に続く所定数個のセグメントに含まれる論理セクタ内のデータがキャッシュメモリ部33に格納されている場合は、書込処理部313は、当該データを読み出す指示を記憶装置20に出力する代わりに、当該データをキャッシュメモリ部33から読み出してもよい。
【0048】
なお、対象セクタが複数のセグメントにまたがっている場合も同様に、当該対象セクタを含んだ複数のセグメント内のすべての論理セクタ(対象セクタを除いてもよい)を特定する情報と、当該セグメントに続く所定数個のセグメントに含まれるすべての論理セクタ(対象セクタを除いてもよい)を特定する情報とを含んだ読み出し指示を、記憶装置20に対して出力する。なお、対象セクタの前後に端数部分がある場合は、前方の端数部分と後方の端数部分とを二度に分けて読み出すよりも、前方の端数部分から後方の端数部分まで対象セクタを含んで読み出すほうが効率的である場合もある。従って、このときには読み出し指示に対象セクタを含むように制御してもよい。
また、当該特定したセグメントの後に続く所定数個のセグメントに含まれる論理セクタ内のデータがキャッシュメモリ部33に格納されている場合は、書込処理部313は、当該データを読み出す指示を記憶装置20に出力する代わりに、当該データをキャッシュメモリ部33から読み出してもよい。
【0049】
ここで上記所定数個をいくつとするかは、実際に数を変更しながら処理速度を測定して実験的に定める。この数の最適値はストレージディスクデバイスのシーク速度や、ヒット率に影響されると考えられるためである。
【0050】
書込処理部313はこうした読み出し指示に応じて記憶装置20が出力するデータを受け入れる。本実施の形態の例では、既に述べたように処理されるので、記憶装置20からは、少なくとも書き換えの対象となった対象セクタの前後の端数のデータ(あるいは対象セクタに続く複数のセグメント分のデータ)が得られる。また、書き換えの対象となった対象セクタの読み出し指示を含んでいた場合は、記憶装置20からはセクタデータも得られることとなる。
【0051】
書込処理部313は、ここで記憶装置20から得たデータと、当該データに対応する論理セクタを特定する情報とを関連付けて、処理対象データとしてキャッシュメモリ33に格納する(キャッシュ動作)。ここでデータに対応する論理セクタを特定する情報は例えば、読み出し指示に含めて記憶装置20に送出した論理セクタを特定する情報(要求セクタ情報)のうち、先頭にある論理セクタを特定する情報としておけばよい。
【0052】
そして書込処理部313は、当該キャッシュメモリ部33内に格納した処理対象データに対象セクタに対応するデータ部分があれば、当該データ部分を、ライトコマンドに含まれるデータで書き換えて処理対象データを更新する。また、書込処理部313は、当該キャッシュメモリ部33内に格納した処理対象データに対象セクタに対応するデータ部分がなければ、対象セクタに対応するデータ部分を処理対象データに追記して処理対象データを更新する。
その後、書込処理部313は、更新した処理対象データを、書き込み対象データとして記憶装置20に出力する。なお、このとき書込処理部313は、更新した処理対象データの全体を書き込み対象データとして記憶装置20に出力してもよいし、更新した処理対象データのうち、ライトコマンドに含まれるデータで書き換え、またはライトコマンドに含まれるデータを追記した部分を内包したパリティ生成単位のデータを含む一部を取りだして、当該取りだした部分を書き込み対象データとして記憶装置20に出力してもよい。またこのときも書込処理部313は、書き込み先の位置を指定する情報として、上記書き込み対象データに含まれるデータが格納されるべき各論理セクタを特定する情報を併せて出力する。さらにこのとき書込処理部313は、キャッシュメモリ部33に格納した処理対象データを、更新後の処理対象データで置き換える。
【0053】
なお、上述の例では、処理対象データの一部がキャッシュメモリ部33に保持されている場合(全体は保持されていないが一部は保持されている場合)でも、処理対象データ全体を記憶装置20から取得するように動作することとしたが、書込処理部313は、当該保持されていない部分に係る論理セクタを特定する情報を含む読み出し指示を記憶装置20に対して出力することとしてもよい。
【0054】
この場合も書込処理部313は、キャッシュメモリ部33に格納されている、処理対象データの一部を読み出して、当該読み出したデータに、記憶装置20から読み出されたデータを連結して、新たにキャッシュメモリ部33に格納する。これにより、処理対象データがキャッシュメモリ部33に保持された状態とする。書込処理部313は、当該キャッシュメモリ部33内に格納した処理対象データのうちに対象セクタに対応するデータ部分があれば、ライトコマンドに含まれるデータで書き換えて処理対象データを更新する。また、書込処理部313は、当該キャッシュメモリ部33内に格納した処理対象データに対象セクタに対応するデータ部分がなければ、対象セクタに対応するデータ部分を処理対象データに追記して処理対象データを更新する。書込処理部313は、更新後の処理対象データを書き込み対象データとして記憶装置20に出力する。このときも書込処理部313は、書き込み先の位置を指定する情報として、更新後の処理対象データが格納されるべき各論理セクタを特定する情報を併せて出力する。さらにこのとき書込処理部313は、キャッシュメモリ部33に格納されていた処理対象データを、更新後の処理対象データで置き換える。
【0055】
[動作]
本実施の形態の記憶制御システム1は、以上の構成を備えてなり、次のように動作する。
図6に例示するように、記憶制御装置30は、ホスト側装置10からデータの書き込み指示(ライトコマンド)を受け入れると(S11)、当該受け入れたライトコマンドに含まれる情報で特定される論理セクタを対象セクタとして、この対象セクタに記録されているセクタデータと端数データとを内包したパリティ生成単位を少なくとも一つ含むデータのうち、セクタデータを除く部分を少なくとも含むデータ(処理対象データ)が、キャッシュされているか否か判断する(S12)。
【0056】
ここで処理対象データがキャッシュされていると判断する(Yesである)と、当該キャッシュされている処理対象データを読み出す(S13)。そして記憶制御装置30は、当該読み出した処理対象データのうちに対象セクタのセクタデータが含まれていれば、当該セクタデータに対応するデータ部分をライトコマンドに含まれるデータで書き換えて処理対象データを更新する(S14)。なお、ここで読み出した処理対象データのうちに対象セクタのセクタデータが含まれていなければ、記憶制御装置30はセクタデータに対応するデータ部分として、ライトコマンドに含まれるデータを追記して処理対象データを更新する(S14)。
【0057】
そして記憶制御装置30は、この更新した処理対象データをキャッシュに上書きする(S15)。そして記憶制御装置30は、更新後の処理対象データを書き込み対象データとして記憶装置20に出力する(S16)。このとき記憶制御装置30は、書き込み先を特定する情報として処理対象データに含まれる、対応する論理セクタの各々を特定する情報を併せて出力する。
【0058】
記憶装置20は、この書き込み対象データを受け入れる。ここで受け入れられる書き込み対象データは、ホスト側装置10が書き込み指示を行ったセクタデータを含み、またパリティ生成単位を少なくとも一つ含むので、記憶装置20では、書き込み対象データをパリティ生成単位に区分し(書き込み対象データにパリティ生成単位が一つしか含まれない場合はそのままでよい)、パリティデータを生成する(S17)。このように本実施の形態では記憶装置20へ出力される書き込み対象のデータがパリティ生成単位となっているので、記憶装置20は、パリティデータの生成のため、セクタデータ以外の部分をハードディスクドライブ等のストレージディスクデバイスから読み出す必要がない。
【0059】
記憶装置20は、ストレージディスクデバイスの記憶領域(その位置は書き込み対象データとともに受信される情報で特定される論理セクタに対応する領域となる)に、チャンク単位に分割した書き込み対象データと、生成したパリティデータとを格納していく(S18)。この格納の方法は、RAIDの処理として広く知られた方法等を採用できるので、詳しい説明を省略する。
【0060】
また、処理S12において、処理対象データがキャッシュされていない(Noである)と判断したときには、記憶制御装置30は、記憶装置20において上記処理対象データの格納された範囲のすべての論理セクタ(対象セクタは含まなくてもよい)を特定する情報を含む読み出し指示を、記憶装置20に出力する(S19:読み出し処理)。
【0061】
本実施の形態の一例として、この処理S19の読み出し処理では、記憶制御装置30は、
図7に例示するように、受け入れたライトコマンドに含まれる、対象セクタを特定する情報を取り出す。そして当該取り出した情報で特定される対象セクタを含む、記憶装置20のセグメントを特定する(例えば対象セクタと同じセグメントに属する論理セクタの先頭の論理セクタを特定する情報をマップ情報から見出す)。そして、当該特定したセグメントに属するすべての論理セクタ(対象セクタは除いてもよい)を特定する情報を含む読み出し指示を記憶装置20に対して出力する(S31)。
【0062】
記憶装置20は、記憶制御装置30から読み出し指示を受け入れて、当該読み出し指示に含まれる情報で特定される論理セクタ(セグメント全体のうち、対象セクタを除いたすべての論理セクタを少なくとも含む部分に相当する)のデータをストレージディスクデバイス33から読み出し(S32)、記憶制御装置30に対して出力する(S33)。
【0063】
記憶制御装置30は読み出し指示に応じて記憶装置20が出力するデータを受け入れてキャッシュする(S34)。ここでは記憶装置20から、ライトコマンドによる書き換えの対象となった対象セクタ内のセクタデータを含むセグメントのうち、論理セクタ内のデータ(対象セクタを除いてもよい)を得て、当該データをキャッシュすることになる。
【0064】
つまり本実施の形態では、読み出しの処理の過程で、書き込みの指示がなされた対象セクタ内のセクタデータを含むパリティ生成単位(ここでの例ではセグメント単位に相当する)を少なくとも一つ含むデータのうち、対象セクタのセクタデータを除くデータが少なくともキャッシュされることとなる。
【0065】
そして記憶制御装置30は、
図6に例示する処理に戻り、処理S13に移行して処理を続ける。
【0066】
このように本実施の形態の一例では、処理対象データがキャッシュされていない場合は、処理対象データがキャッシュされた状態となるよう、記憶装置20から処理対象データの少なくとも一部(全体であっても不足している部分のみであってもよい、また書き込みの指示により書き換えられるデータ部分は除いてもよい)のデータを取得する。これにより記憶制御装置30はパリティ生成単位を少なくとも一つ含み、当該少なくとも一つのパリティ生成単位のうちにライトコマンドに含まれるデータを含んだデータを記憶装置20に対して出力することが可能となる。このように書き込み対象データがパリティ生成単位となっているので、記憶装置20では、パリティデータの生成のためにセクタデータ以外の部分をハードディスクドライブ等のストレージディスクデバイスから読み出す必要がなくなる。
【0067】
[キャッシュデバイスを含む例]
さらに本実施の形態の記憶制御システムでは、記憶制御装置30が、記憶装置20に格納されているデータをキャッシュする、キャッシュメモリ部33とは異なるキャッシュデバイスをさらに備えてもよい。
【0068】
この例の記憶制御装置30は、
図8に例示するように、コントローラ31、記憶部32、キャッシュメモリ部33、第1インタフェース部34、及び第2インタフェース部35に加え、さらにキャッシュデバイス36を含んで構成されている。
【0069】
このキャッシュデバイス36は、例えばSSD等、一般的に記憶装置20よりもデータの読み出し/書き込み速度が高速であるような記憶デバイスによって実現される。このキャッシュデバイス36に対しては、予め定められているデータ長の単位にてデータの読み書きが行われる。このキャッシュデバイス36について予め定められているデータ長の単位を、以下ではキャッシュセグメントと呼び、そのデータ長をキャッシュセグメント長と呼ぶ。
【0070】
記憶制御装置30のコントローラ31は、記憶装置20のデータ格納領域全体(指定可能な論理セクタの全体)を、仮想的にキャッシュセグメント長のブロックに分割し、分割して得たキャッシュセグメント長のブロックごとに、例えばその先頭に対応する論理セクタを特定する情報などを、ブロックを特定する情報として、このブロックを特定する情報の一覧を記憶部32に記憶しておく。
【0071】
本実施の形態のこの例でも、記憶制御装置30のコントローラ31は機能的に
図5に例示した構成と同様の構成をとるが、判断部312及び書込処理部313における動作が少々異なる。以下では、これらの動作について説明する。
【0072】
この例に係る判断部312は、受入部311が受け入れたライトコマンドに含まれる情報で特定される論理セクタを対象セクタとして、この対象セクタに記録されているセクタデータと端数データとを内包したパリティ生成単位を少なくとも一つ含むデータのうち、セクタデータを除く部分を少なくとも含むデータ(処理対象データ)が、キャッシュメモリ部33に保持されているか否か判断する。そして、キャッシュメモリ部33に処理対象データが保持されていれば、その判断結果を表す情報を書込処理部313に出力する。パリティ生成単位がセグメントの単位となっている場合、判断部312は、対象セクタを内包するセグメント(対象セクタが複数のセグメントにまたがっている場合は、当該複数のセグメントの全体)を含むデータ(対象セクタ内のセクタデータは含まれなくてもよい)がキャッシュメモリ部33に格納されているか否かを判断することとなる。
【0073】
また判断部312は、キャッシュデバイス36に処理対象データが保持されているか否かも調べる。判断部312は、キャッシュデバイス36に処理対象データが保持されていれば、その判断結果を表す情報を書込処理部313に出力する。パリティ生成単位がセグメントの単位となっている場合、判断部312は、対象セクタを内包するセグメント(対象セクタが複数のセグメントにまたがっている場合は、当該複数のセグメントの全体)を含むデータ(対象セクタ内のセクタデータは除いてもよい)が、キャッシュデバイス36に格納されているか否かを判断することとなる。ここでは記憶装置20で用いられるセグメントのデータ長と、キャッシュセグメント長とが必ずしも一致しないので、キャッシュデバイス36に格納されているデータに、対象セクタを内包するセグメント全体(対象セクタ内のセクタデータは除いてもよい)のみならず、余分なデータが含まれていても、判断部312は、処理対象データがキャッシュされていると判断する。
【0074】
さらに判断部312は、キャッシュメモリ部33にもキャッシュデバイス36にも処理対象データが保持されていない場合は、その判断結果を表す情報を書込処理部313に出力する。
【0075】
書込処理部313は、判断部312が、処理対象データがキャッシュメモリ部33に保持されていると判断したときには既に説明したのと同様の動作を行う。また、判断部312が、処理対象データがキャッシュメモリ部33に保持されていないが、キャッシュデバイス36に保持されていると判断したときには、書込処理部313は、キャッシュデバイス36に保持されている処理対象データを、キャッシュメモリ部33に複写する。そして書込処理部313は、処理対象データがキャッシュメモリ部33に保持されていると判断したときと同様の動作を行う。
【0076】
一方、判断部312が、処理対象データがキャッシュメモリ部33にも、キャッシュデバイス36にも保持されていないと判断したとき(処理対象データの一部は保持されているが、その全体がキャッシュメモリ部33やキャッシュデバイス36に保持されていないと判断したときを含む)には、この書込処理部313は、上記処理対象データがキャッシュメモリ部33やキャッシュデバイス36に保持された状態となるよう、記憶装置20から処理対象データの少なくとも一部のデータを取得する。
【0077】
本実施の形態のこの例では、書込処理部313は、処理対象データがキャッシュメモリ部33やキャッシュデバイス36に保持されていないと判断されたときには、処理対象データを格納している論理セクタを特定する情報(対象セクタを特定する情報は除いてもよい)を含む読み出し指示を記憶装置20に対して出力する。このとき書込処理部313は、対象セクタを含むセグメントを特定し、さらに当該特定したセグメントを含むキャッシュセグメント長のブロック(記憶部32に記憶されている情報で特定されるブロック)を特定する。なお、特定したセグメントが複数のブロックにまたがっている場合は、書込処理部313は、当該複数のブロックを特定する。
【0078】
書込処理部313は、当該特定したキャッシュセグメント長のブロックに含まれるすべての論理セクタ(特定したブロックが複数ある場合は、そのすべてのブロックの全体(キャッシュセグメント長の自然数倍のデータ長となる)に含まれるすべての論理セクタ、ただし対象セクタは除いてもよい)を特定する情報を含む読み出し指示を、記憶装置20に対して出力する。また書込処理部313は、この指示に応じて記憶装置20が出力する、キャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータをキャッシュデバイス36に格納する。つまり、書込処理部313は、キャッシュデバイス36にキャッシュするデータを読み出すときには、キャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータを記憶装置20から読み出すこととしている。
【0079】
また書込処理部313は、当該キャッシュデバイス36に格納したデータを、処理対象データとしてキャッシュメモリ部33に格納する。そして書込処理部313は、処理対象データがキャッシュメモリ部33に保持されていると判断したときと同様の動作を行う。
【0080】
さらに書込処理部313は、判断部312が、処理対象データがキャッシュデバイス36に保持されていると判断したときには、ライトコマンドに含まれるデータにより書き換えて更新した処理対象データ、またはライトコマンドに含まれるデータを追記して更新した処理対象データを、記憶装置20に対して出力するとともに、キャッシュデバイス36の対応する部分に上書きする。さらに、このとき、当該更新した処理対象データを、キャッシュメモリ部33にも格納してもよい。
なお、上述の例においても、処理対象データの一部がキャッシュデバイス36に保持されている場合(全体は保持されていないが一部は保持されている場合)でも、処理対象データ全体を記憶装置20から取得するように動作する代わりに、書込処理部313は、当該保持されていない部分に係る論理セクタを特定する情報を含む読み出し指示を記憶装置20に対して出力することとしてもよい。
【0081】
[変形例]
なお、ここまでの説明では、ホスト側装置10とは別体の記憶制御装置30が設けられる構成を例としていたが、本実施の形態はこれに限られず、ホスト側装置10と記憶制御装置30とが一体となっていてもよい。つまり、ホスト側装置10が記憶制御装置30として機能することとしてもよい。この場合、記憶制御装置30のコントローラ31はホスト側装置10であるPCのCPUによって実現され、記憶部32及びキャッシュメモリ部33はPCのメインメモリを用いて実現される。具体的にキャッシュメモリ部33は、ホスト側装置10のメインメモリの一部をキャッシュメモリの領域として確保することによって実現できる。
【0082】
またこのようにホスト側装置10が記憶制御装置30を兼ねる場合は、第1のインタフェース部34に相当する構成は必ずしも必要ではない。
【0083】
また別の例として、この記憶制御装置30は、記憶装置20と一体的に構成(同一の筐体内に収納)されていてもよい。このように記憶装置20と記憶制御装置30とが一体的に構成される場合、記憶装置20のデバイスコントローラ22が記憶制御装置30のコントローラ31の動作を兼ねてもよい。またこの例では第2インタフェース部35に相当する構成は必ずしも必要ではない。
【0084】
さらにキャッシュデバイス36を含むか否かに関わらず、キャッシュメモリ部33へのデータの読み書きの単位(読み書きを行うための最小限のデータ長)を考慮した処理を行うこととしてもよい。このキャッシュメモリ部33へのデータの読み書きの単位を以下、メモリキャッシュセグメントと呼ぶ。
【0085】
この例では、記憶制御装置30のコントローラ31は、記憶装置20のデータ格納領域全体(指定可能な論理セクタの全体)を、仮想的にメモリキャッシュセグメント長のブロックに分割し、分割して得たメモリキャッシュセグメント長のブロックごとに、例えばその先頭に対応する論理セクタを特定する情報などを、ブロックを特定する情報として、このブロックを特定する情報の一覧(メモリキャッシュセグメント対応ブロック一覧)を記憶部32に記憶しておく。
【0086】
この例に係る書込処理部313は、判断部312が、処理対象データがキャッシュメモリ部33に保持されていると判断したときには既に説明したのと同様の動作を行う。
【0087】
一方、判断部312が、処理対象データがキャッシュメモリ部33に保持されていないと判断したとき(処理対象データの一部は保持されているが、その全体がキャッシュメモリ部33に保持されていないと判断したときを含む)には、この書込処理部313は、処理対象データがキャッシュメモリ部33に保持された状態となるよう、記憶装置20から処理対象データの少なくとも一部のデータを取得する。
【0088】
具体的に書込処理部313は、処理対象データがキャッシュメモリ部33に保持されていないと判断されたときには、処理対象データを格納している論理セクタを特定する情報(対象セクタを特定する情報は除いてもよい)を含む読み出し指示を記憶装置20に対して出力する。このとき書込処理部313は、対象セクタを含むセグメントを特定し、さらに当該特定したセグメントを含むメモリキャッシュセグメント長の自然数倍のデータ長のブロック(記憶部32に記憶されているメモリキャッシュセグメント対応ブロック一覧に含まれる情報で特定される少なくとも一つのブロック)を特定する。なお、特定したセグメントが複数のブロックにまたがっている場合は、書込処理部313は、当該複数のブロックを特定する。
【0089】
書込処理部313は、当該特定したメモリキャッシュセグメント長の自然数倍のデータ長のブロックに含まれるすべての論理セクタ(特定したブロックが複数ある場合は、そのすべてのブロックの全体に含まれるすべての論理セクタ、ただし対象セクタは除いてもよい)を特定する情報を含む読み出し指示を、記憶装置20に対して出力する。
【0090】
また書込処理部313は、この指示に応じて記憶装置20が出力する、メモリキャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータをキャッシュメモリ33に格納する。つまり、書込処理部313は、キャッシュメモリ33にキャッシュするデータを読み出すときには、メモリキャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータを記憶装置20から読み出すこととする。
【0091】
なお、キャッシュデバイス36を含む場合であって、かつ、キャッシュメモリ33に対してメモリキャッシュセグメント長の単位(メモリキャッシュセグメント長の自然数倍のデータ長)でキャッシュするデータを書き込む場合には、キャッシュデバイス36にキャッシュするデータを記憶装置20から読み出すときに、キャッシュセグメント長と、メモリキャッシュセグメント長との公倍数に相当するデータ長を単位として読み出すようにしてもよい。この場合、書込処理部313は、キャッシュデバイス36にキャッシュするデータを読み出すときには、キャッシュセグメント長と、メモリキャッシュセグメント長との最小公倍数の自然数倍のデータ長のデータを記憶装置20から読み出すこととなる。
【0092】
[シーケンシャルライトへの対応]
なお、本実施の形態のある例では、ホスト側装置10から入力されるライトコマンドがシーケンシャルライト(連続したセクタに対するデータの書き込み指示(ライトコマンド)が続けて入力される書き込み方式)に係る場合には、ライトコマンドに対して上述の処理を行わずに、従来例と同様の処理を行うこととしてもよい。つまり、本実施の形態のある例では、記憶制御装置30は、シーケンシャルライトでない場合に限り、上述の端数処理を行うこととしてもよい。
【0093】
これは、シーケンシャルライトである場合には、あるセクタへの書き込みの際に、端数処理のために読み込んだ当該セクタの後続のセクタに対し、次のライトコマンドで上書きが発生することとなって処理の効率化が十分でなくなることを考慮したものである。
【0094】
なお、ライトコマンドがシーケンシャルライトに係るものであるか否かは、次のようにして判断すればよい。すなわちこの例の記憶制御装置30のコントローラ31は、例えば、ライトコマンドを受け入れたときに、当該ライトコマンドに含まれる情報で特定される書き込み対象のセクタ(対象セクタ)を特定する情報(一般的にはLBA(Logical Block Addressing)値)を取りだして、当該対象セクタが過去所定数回前までに書き込み対象とされたセクタの次のセクタであるか否かを調べることでシーケンシャルライトであるか否かを判断すればよい。
【0095】
このために、この例では、過去所定数回前までに書き込み対象とされたセクタの次のセクタを特定する情報(対象セクタとなったセクタのLBA値を「1」だけインクリメントした値)を、検出リストとして記憶部32に記憶しておくこととすればよい。
【0096】
この場合、コントローラ31は、ライトコマンドが入力されたときに、記憶部32の検出リストを参照し、当該ライトコマンドに含まれる情報で特定される書き込み対象のセクタ(対象セクタ)を特定する情報が、検出リストに含まれているか否かを調べる。ここで当該対象セクタを特定する情報が、検出リストに含まれていれば、コントローラ31は、当該ライトコマンドはシーケンシャルアクセスに係るものと判断して、端数処理を行わずに、従来例と同様の書き込みの処理を実行する。
【0097】
またこのときには、コントローラ31は、当該検出リストに含まれている、対象セクタを特定する情報を、当該対象セクタの次のセクタを特定する情報に更新する。
【0098】
一方、コントローラ31は、入力されたライトコマンドに含まれる情報で特定される書き込み対象のセクタ(対象セクタ)を特定する情報が、検出リストに含まれていないと判断したときには、端数処理を行うとともに、当該対象セクタの次のセクタを特定する情報を検出リストに記録する。
【0099】
なお、この検出リストは具体的には、どのセクタが近時に利用されたかを判断する、LRU(Least Recently Used)処理のために用いられるものを利用してもよい。