(57)【要約】【課題】不揮発性メモリの寿命をより長くすることが可能な制御装置を提供する。【解決手段】不揮発性メモリに格納されるデータの記憶領域を示す実アドレスおよび実アドレスとは異なる仮のアドレスである論理アドレスを含むレコードをデータ毎に管理するためのテーブルを記憶するキャッシュメモリと、書き込み対象のデータおよびデータの論理アドレスを含む書き込み要求が入力されると、入力されたデータに一致するデータが不揮発性メモリに格納されているか否かを判定し、入力されたデータに一致するデータが不揮発性メモリに格納されていると、入力された論理アドレスをこのデータのレコードに追加する制御部と、を有する。【選択図】図２
2011175532.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリに格納されるデータの記憶領域を示す実アドレスおよび該実アドレスとは異なる仮のアドレスである論理アドレスを含むレコードをデータ毎に管理するためのテーブルを記憶するキャッシュメモリと、
書き込み対象のデータおよび該データの論理アドレスを含む書き込み要求が入力されると、入力されたデータに一致するデータが前記不揮発性メモリに格納されているか否かを判定し、入力されたデータに一致するデータが該不揮発性メモリに格納されていると、入力された論理アドレスを該データのレコードに追加する制御部と、
を有する制御装置。
【請求項２】
請求項１記載の制御装置において、
前記キャッシュメモリには、前記不揮発性メモリへの書き込み回数を平準化するための判定基準となる閾値が予め登録され、
前記制御部は、
前記テーブルの各レコードに該レコードの実アドレスへのデータの書き込み回数を記録し、前記テーブルに記録されたレコードのうち、前記書き込み回数が前記閾値以上のレコードがあると、該レコードの実アドレスに格納されたデータを前記不揮発性メモリの未使用の記録領域に移動する、または、該レコードの実アドレスに格納されたデータと前記テーブルに記録されたレコードのうち前記書き込み回数が最小であるレコードの実アドレスに格納されたデータとを置き換える、制御装置。
【請求項３】
請求項１または２記載の制御装置において、
前記制御部は、
前記不揮発性メモリにデータを書き込む際、該データのパリティ値を前記テーブルの該データのレコードに記録し、前記書き込み要求が入力されると、前記不揮発性メモリに格納されたデータのうち、入力されたデータと前記パリティ値が一致するデータに対してのみ、該入力されたデータに一致するか否かを判定する、制御装置。
【請求項４】
不揮発性メモリに接続され、キャッシュメモリを備えた制御装置によるメモリ制御方法であって、
前記不揮発性メモリに格納されるデータの記憶領域を示す実アドレスおよび該実アドレスとは異なる仮のアドレスである論理アドレスを含むレコードをデータ毎に管理するためのテーブルを前記キャッシュメモリに格納し、
書き込み対象のデータおよび該データの論理アドレスを含む書き込み要求が入力されると、入力されたデータに一致するデータが前記不揮発性メモリに格納されているか否かを判定し、
判定の結果、入力されたデータに一致するデータが該不揮発性メモリに格納されていると、入力された論理アドレスを該データのレコードに追加する、メモリ制御方法。
【請求項５】
請求項４記載のメモリ制御方法において、
前記不揮発性メモリへの書き込み回数を平準化するための判定基準となる閾値を前記キャッシュメモリに予め格納し、
前記テーブルの各レコードに該レコードの実アドレスへのデータの書き込み回数を記録し、
前記テーブルに記録されたレコードのうち、前記書き込み回数が前記閾値以上のレコードがあると、該レコードの実アドレスに格納されたデータを前記不揮発性メモリの未使用の記録領域に移動する、または、該レコードの実アドレスに格納されたデータと前記テーブルに記録されたレコードのうち前記書き込み回数が最小であるレコードの実アドレスに格納されたデータとを置き換える、メモリ制御方法。
【請求項６】
請求項４または５記載のメモリ制御方法において、
前記不揮発性メモリにデータを書き込む際、該データのパリティ値を前記テーブルの該データのレコードに記録し、
前記書き込み要求が入力されると、前記不揮発性メモリに格納されたデータのうち、入力されたデータと前記パリティ値が一致するデータに対してのみ、該入力されたデータに一致するか否かを判定する、メモリ制御方法。
【請求項７】
不揮発性メモリに接続され、キャッシュメモリを備えたコンピュータに実行させるためのプログラムであって、
前記不揮発性メモリに格納されるデータの記憶領域を示す実アドレスおよび該実アドレスとは異なる仮のアドレスである論理アドレスを含むレコードをデータ毎に管理するためのテーブルを前記キャッシュメモリに格納し、
書き込み対象のデータおよび該データの論理アドレスを含む書き込み要求が入力されると、入力されたデータに一致するデータが前記不揮発性メモリに格納されているか否かを判定し、
判定の結果、入力されたデータに一致するデータが該不揮発性メモリに格納されていると、入力された論理アドレスを該データのレコードに追加する処理を前記コンピュータに実行させるプログラム。
【請求項８】
請求項７記載のプログラムにおいて、
前記不揮発性メモリへの書き込み回数を平準化するための判定基準となる閾値を前記キャッシュメモリに予め格納し、
前記テーブルの各レコードに該レコードの実アドレスへのデータの書き込み回数を記録し、
前記テーブルに記録されたレコードのうち、前記書き込み回数が前記閾値以上のレコードがあると、該レコードの実アドレスに格納されたデータを前記不揮発性メモリの未使用の記録領域に移動する、または、該レコードの実アドレスに格納されたデータと前記テーブルに記録されたレコードのうち前記書き込み回数が最小であるレコードの実アドレスに格納されたデータとを置き換える処理をさらに有するプログラム。
【請求項９】
請求項７または８記載のプログラムにおいて、
前記不揮発性メモリにデータを書き込む際、該データのパリティ値を前記テーブルの該データのレコードに記録し、
前記書き込み要求が入力されると、前記不揮発性メモリに格納されたデータのうち、入力されたデータと前記パリティ値が一致するデータに対してのみ、該入力されたデータに一致するか否かを判定する処理をさらに有するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部記憶装置を制御する制御装置、メモリ制御方法、およびその方法をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【０００２】
大容量の外部記憶装置（ストレージ）として、ＨＤＤ（Ｈａｒｄ Ｄｉｓｋ Ｄｒｉｖｅ）が主に使用されている。その理由の１つは、同じ容量でもＨＤＤはＳＳＤ（Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｒｉｖｅ）に比べて価格が安いことである。
【０００３】
近年、ＳＳＤの価格が低下してきただけでなく、ＳＳＤには、ＨＤＤにある機械的動作部が設けられていないことから、磁気ヘッドを動作させる「シーク動作」がない、故障率が低い、消費電力が低い、小型で軽量などのメリットがあり、ＳＳＤをストレージとして使用されるケースが多くなってきている。
【０００４】
ＳＳＤの不揮発性記憶素子はその構造から書き込み可能回数に上限があるため、一部の記憶素子ばかりにデータの書き込みを行ってしまうと、他の部位の記憶素子がまだメモリ機能を有していても、装置としては使用できなくなってしまう。そのため、ＳＳＤ内の記憶素子にできるだけ均等にデータの書き込みを行うウェアレベリング技術がＳＳＤに適用されるようになった。その技術の一例が、特許文献１や特許文献２に開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１４０３５４号公報
【特許文献２】特開平６−２５９３１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１または特許文献２に開示された方法では、入力されるデータをＳＳＤ内の記憶素子に均等に書き込むようにしているだけなので、既にストレージに格納されているデータと同じデータの書き込み要求を受け付けると、同じデータが重複してストレージに保存されてしまう。その書き込み回数の分、装置の寿命が短くなってしまうという問題がある。
【０００７】
本発明は上述したような技術が有する問題点を解決するためになされたものであり、不揮発性メモリの寿命をより長くすることが可能な制御装置、メモリ制御方法、およびその方法をコンピュータに実行させるためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するための本発明の制御装置は、
不揮発性メモリに格納されるデータの記憶領域を示す実アドレスおよび該実アドレスとは異なる仮のアドレスである論理アドレスを含むレコードをデータ毎に管理するためのテーブルを記憶するキャッシュメモリと、
書き込み対象のデータおよび該データの論理アドレスを含む書き込み要求が入力されると、入力されたデータに一致するデータが前記不揮発性メモリに格納されているか否かを判定し、入力されたデータに一致するデータが該不揮発性メモリに格納されていると、入力された論理アドレスを該データのレコードに追加する制御部と、
を有する構成である。
【０００９】
また、本発明のメモリ制御方法は、不揮発性メモリに接続され、キャッシュメモリを備えた制御装置によるメモリ制御方法であって、
前記不揮発性メモリに格納されるデータの記憶領域を示す実アドレスおよび該実アドレスとは異なる仮のアドレスである論理アドレスを含むレコードをデータ毎に管理するためのテーブルを前記キャッシュメモリに格納し、
書き込み対象のデータおよび該データの論理アドレスを含む書き込み要求が入力されると、入力されたデータに一致するデータが前記不揮発性メモリに格納されているか否かを判定し、
判定の結果、入力されたデータに一致するデータが該不揮発性メモリに格納されていると、入力された論理アドレスを該データのレコードに追加するものである。
【００１０】
さらに、本発明のプログラムは、不揮発性メモリに接続され、キャッシュメモリを備えたコンピュータに実行させるためのプログラムであって、
前記不揮発性メモリに格納されるデータの記憶領域を示す実アドレスおよび該実アドレスとは異なる仮のアドレスである論理アドレスを含むレコードをデータ毎に管理するためのテーブルを前記キャッシュメモリに格納し、
書き込み対象のデータおよび該データの論理アドレスを含む書き込み要求が入力されると、入力されたデータに一致するデータが前記不揮発性メモリに格納されているか否かを判定し、
判定の結果、入力されたデータに一致するデータが該不揮発性メモリに格納されていると、入力された論理アドレスを該データのレコードに追加する処理を前記コンピュータに実行させるものである。
【発明の効果】
【００１１】
本発明によれば、不揮発性メモリの寿命をより長くすることができる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態の制御装置を用いたストレージシステムの一構成例を示すブロック図である。
【図２】図１に示した制御装置の一構成例を示すブロック図である。
【図３】アドレスを説明するための、ボリュームの模式図である。
【図４】管理テーブルの一例を示す図である。
【図５】図４に示したパリティ値を説明するための模式図である。
【図６】本実施形態の制御装置によるデータ書き込み処理の動作手順を示すフローチャートである。
【図７】本実施形態の制御装置によるデータ読み込み処理の動作手順を示すフローチャートである。
【図８】本実施形態の制御装置によるデータ再配置処理の動作手順を示すフローチャートである。
【発明を実施するための形態】
【００１３】
本実施形態の制御装置の構成を説明する。図１は本実施形態の制御装置を用いたストレージシステムの一構成例を示すブロック図である。
【００１４】
図１に示すように、ストレージシステムは、データを格納するためのストレージ２０と、ストレージ２０を制御する制御装置１０とを有する構成である。ストレージ２０は、データ格納用のストレージであるＳＳＤ４０と、ＳＳＤ４０のデータ管理用のストレージであるＨＤＤ３０とを有する。ＨＤＤ３０およびＳＳＤ４０のそれぞれを、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ Ａｒｒａｙ ｏｆ Ｉｎｅｘｐｅｎｓｉｖｅ Ｄｉｓｋｓ）で構成してもよい。
【００１５】
以下では、ＳＳＤ４０においてデータを格納するための記憶領域を「データボリューム」と称し、ＳＳＤ４０内のデータを管理するための情報を格納するための、ＨＤＤ３０における記憶領域を「管理ボリューム」と称する。ＨＤＤ３０の管理ボリュームには、ＳＳＤ４０のデータ格納状況を管理するための表である管理テーブルが格納される。
【００１６】
本実施形態では、制御装置１０はサーバ（不図示）と接続され、サーバとデータを送受信する場合で説明するが、制御装置１０に接続される情報処理装置はサーバに限らない。
【００１７】
図２は図１に示した制御装置の一構成例を示すブロック図である。
【００１８】
制御装置１０は、制御部１１と、キャッシュメモリ１２とを有する。制御部１１は、ストレージへのデータの入出力（Ｉ／Ｏ）要求を処理する入出力管理手段１５と、書き込み回数の多いアドレスに保存されたデータを別のアドレスに保存する再配置処理手段１７とを有する。また、制御部１１には、キャッシュメモリ１２に格納されたプログラムにしたがって処理を実行するＣＰＵ（Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）（不図示）が設けられている。
【００１９】
キャッシュメモリ１２は、ストレージを管理および制御するためのプログラムを記憶する不揮発性メモリ（不図示）と、データのＩ／Ｏ処理の過程で一時的にデータを保存するためのＲＡＭ（Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）（不図示）とを有する。図２には示さないが、停電が起きた時などにＲＡＭに格納されたデータが消失するのを防ぐためのバッテリユニットが制御装置１０に搭載されていてもよい。
【００２０】
制御部１１内のＣＰＵ（不図示）がプログラムにしたがって処理を実行することで、入出力管理手段１５および再配置処理手段１７が制御装置１０に仮想的に構成される。
【００２１】
入出力管理手段１５は、データのＩ／Ｏ要求をサーバから受け付け、Ｉ／Ｏ要求がデータの書き込みを要求するものである場合、対象となるデータがデータボリュームに格納されているか否かを管理テーブルで調べ、同じデータが既に格納されていると、同じデータを重複して保存することを防ぐための重複排除処理を行う。一方、書き込み要求対象のデータがデータボリュームに格納されていなければ、入出力管理手段１５は、そのデータをデータボリュームに格納し、そのアドレスや書き込み回数などの情報を管理テーブルに記録する。
【００２２】
管理テーブルは容量が大きくなるほど、目的の情報を見つけ出すまでのサーチ時間が長くなるため、管理テーブルの容量が一定のサイズを越える場合、入出力管理部１５は、管理テーブルを複数に分割して管理してもよい。
【００２３】
また、入出力管理手段１５は、Ｉ／Ｏ要求がデータの読み込みを要求するものである場合、管理テーブルを参照して、読み込み対象となるデータのアドレスを調べ、調べたアドレスからデータを読み出してサーバに送信する。
【００２４】
さらに、入出力管理手段１５は、複数のＩ／Ｏ要求を受け付けた際、それらのＩ／Ｏ要求のうち、書き込み処理を行うためのＩ／Ｏ要求があると、データの書き込み処理を優先的に行い、他のＩ／Ｏ要求に応じる処理を保留にする。
【００２５】
再配置処理手段１７は、事前に設定されたスケジュールにしたがって、または、入出力管理手段１５の負荷状態が予め決められた閾値より低くなったタイミングで、書き込み回数の多いアドレスに保存されたデータを別のアドレスに保存するデータ再配置処理を行う。以下では、この閾値を負荷判定閾値と称する。
【００２６】
なお、再配置処理手段１７は、データ再配置処理を開始した後、サーバからのＩ／Ｏ要求が多くなり、入出力管理手段１５の負荷が負荷判定閾値より高くなると、データ再配置処理を一時停止し、入出力管理手段１５の負荷状態を監視しながら、入出力管理手段１５のバックグラウンドでデータ再配置処理を行う。データ再配置処理はデータの書き込み処理を伴うため、入出力管理手段１５の負荷が高いときには、データ再配置処理をより少なくすることで、Ｉ／Ｏ要求に応じる処理を優先させることが可能となる。
【００２７】
ここで、データボリュームの管理方法について説明する。
【００２８】
本実施形態では、ストレージに保存するデータを、キャッシュメモリ１２のＲＡＭ（不図示）のメモリブロックのサイズ単位で管理する。以下では、このメモリブロック単位のデータを、ブロックデータと称する。続いて、ブロックデータの保存先を管理するためのアドレスについて説明する。図３は、アドレスを説明するための、ボリュームの模式図である。
【００２９】
ブロックデータは、図３の上段に示す論理アドレスと図３の下段に示す実アドレスの２つのアドレスで保存先が管理される。論理アドレスは、サーバから制御装置１０にデータの入出力を行う際に、データの格納先を指定するための仮のアドレスである。実アドレスは、実際のデータボリュームの格納先を示すアドレスである。サーバから制御装置１０に出されるＩ／Ｏ要求がデータの読み込み処理である場合には、Ｉ／Ｏ要求には、データの読み込みを要求する旨の情報の他に、論理アドレスの情報が含まれている。
【００３０】
図３に示す例では、論理アドレスが「１」のブロックデータは実アドレスの「０」に保存されていることを示す。論理アドレスが「３」のブロックデータは実アドレスの「４」に保存され、論理アドレスが「４」のブロックデータは実アドレスの「５６」に保存されていることを示す。論理アドレスが「３」と「４」で指定されるブロックデータは、論理アドレスが隣り合っていても、これらのブロックデータは実際のデータボリュームでは離れた位置に保存されている。
【００３１】
入出力管理手段１５が各ブロックデータについての論理アドレスと実アドレスの対応を次のようにして管理テーブルに記録することで、実際のデータボリュームでは別々に保存されている複数のブロックデータを、サーバ側には、１つの繋がったデータとして保存しているように見せて、管理することが可能となる。
【００３２】
管理テーブルの構成を説明する。図４は管理テーブルの一例を示す図である。
【００３３】
管理テーブルには、管理対象となるブロックデータ毎に、ブロックデータのパリティ値、実アドレス、実アドレスへのデータ書き込み回数、データ再配置処理が実行された場合の書き込み回数の累計、および、論理アドレスの情報が組になって記録される。以下では、この１組分の記録をレコードと称する。
【００３４】
図４に示す管理テーブルでは、パリティ値を「Parity」と表記し、実アドレスを「Real＿Seek」と表記し、データ書き込み回数を「Write＿Count」と表記している。そして、データ再配置処理が実行された場合の書き込み回数の累計を「Relocation＿Count」と表記し、論理アドレスを記録する欄を「Duplicate＿Seek」と表記している。
【００３５】
図３に示した例では、論理アドレス「１」のブロックデータと「２」のブロックデータが同じものである。そのため、図４に示す管理テーブルのパリティ値がＡαのレコードの論理アドレスには「１」と「２」が記録されている。パリティ値がＡαのブロックデータは、実アドレス「０」のデータボリュームに格納されている。論理アドレス「１」のブロックデータと「２」のブロックデータを重複して保存しないことで、データボリュームへのデータ書き込み回数を低減することができる。
【００３６】
図４に示した管理テーブルで、論理アドレスを記録する欄をDuplicate＿Seekと表記しているのは、本実施形態では、重複するデータを異なる論理アドレスで管理可能にしているからである。
【００３７】
図４に示すデータ書き込み回数には、データ再配置処理を行うか否かの判定基準となる閾値が予め設定されている。以下では、この閾値を、再配置判定閾値と称する。
【００３８】
次に、図４に示したパリティ値の計算方法の一例を説明する。図５は図４に示したパリティ値を説明するための模式図である。
【００３９】
図５に示す例では、ブロックデータが４０９６バイト（＝６４バイト×６４バイト）のサイズである場合、垂直パリティおよび水平パリティのそれぞれのサイズは６４バイトとなる。そして、垂直パリティと水平パリティの合計サイズは、６４＋６４＝１２８バイトとなる。図４に示したパリティ値のローマ字（Ａ，Ｂ，Ｃ，・・・）は垂直パリティに相当し、ギリシャ文字（α，β，γ，・・・）は水平パリティに相当する。
【００４０】
次に、サーバからデータ書き込み要求があった場合における、本実施形態の制御装置の動作手順を説明する。図６は本実施形態の制御装置によるデータ書き込み処理の動作手順を示すフローチャートである。
【００４１】
ここでは、サーバがデータ書き込みを要求する旨のＩ／Ｏ要求を制御装置１０に対して行い、対象となるデータ（W＿Dataと表記する）と共に、データの論理アドレス（W＿Seekと表記する）およびサイズ（W＿Sizeと表記する）の情報を制御装置１０に送信する。このデータのサイズW＿Sizeは、ブロックデータと同じであるものとする。
【００４２】
制御装置１０がサーバからＩ／Ｏ要求と共にデータW＿Data、論理アドレスW＿SeekおよびサイズW＿Sizeの情報を受信すると、入出力管理手段１５は、これらのデータおよび情報をキャッシュメモリ１２に格納する。続いて、入出力管理手段１５は、論理アドレスW＿Seekにおいてデータの書き込み処理中か否かを判定し（ステップ１０１）、データの書き込み処理中である場合、Ｉ／Ｏ要求に対する処理を保留にする。
【００４３】
ステップ１０１で、データの書き込み処理中でない場合、入出力管理手段１５は、データ書き込み処理中であることがわかるように、ロック対象のアドレス（Lock＿Addrと表記する）として論理アドレスW＿Seekをキャッシュメモリ１２に保存することで（ステップ１０２）、同じアドレスに対して別のＩ／Ｏ要求が発生しても、そのＩ／Ｏ要求に対する処理を保留にすることが可能になる。
【００４４】
入出力管理手段１５は、キャッシュメモリ１２のＲＡＭ（不図示）に格納されたデータW＿Dataのパリティ値（W＿Parityと表記する）を計算する（ステップ１０３）。そして、パリティ値W＿Parityに一致するパリティがないか、管理テーブルのParityのカラムを検索する（ステップ１０４）。この検索をParityサーチ処理と称する、
Parityサーチ処理にて、パリティ値W＿Parityに一致するパリティParityを検出すると、入出力管理手段１５は、そのパリティParityを含むレコードの実アドレスReal＿Seekを参照し、実アドレスReal＿Seekのデータボリュームからデータ（Dataと表記する）を読み出し（ステップ１０５）、読み出したデータDataがデータW＿Dataと一致しているか否かを判定する（ステップ１０６）。
【００４５】
ステップ１０６で、データDataがデータW＿Dataと一致している場合、入出力管理手段１５は、データDataのレコードのDuplicate＿Seekの欄に論理アドレスW＿Seekを追加する（ステップ１０７）。ステップ１０６で、データDataがデータW＿Dataと一致していない場合、入出力管理手段１５は、ステップ１０４に戻り、次のレコードとの比較を継続する。
【００４６】
ステップ１０４のParityサーチ処理において、パリティ値W＿Parityに一致するパリティが検出されなかった場合、入出力管理手段１５は、データを書き込むための未使用領域がデータボリュームにあるかどうかを調べるために、管理テーブルを参照し、未使用の実アドレスがあるかを調べる（ステップ１０８）。未使用の実アドレスとは、管理テーブルのReal＿Seekに登録されていない実アドレス、または、管理テーブルのDuplicate＿Seekの欄に何も設定されていないレコードのReal＿Seekである。ステップ１０８の検索の結果、未使用の実アドレスがない場合、データボリュームの容量不足のエラーとして処理し、処理を終了する（ステップ１０９）。シンプロビジョニングなどのように実際の容量以上の領域を利用可能している場合には、未使用領域が存在しないことが考えられる。
【００４７】
一方、ステップ１０８において、未使用の実アドレスがある場合、入出力管理手段１５は、未使用の実アドレスを新しいレコードのReal＿Seekの欄に登録する（ステップ１１０）。続いて、入出力管理手段１５は、書き込み要求が新規データの書き込みであるか否かを判定する（ステップ１１１）。書き込み要求が既存データの更新である場合、論理アドレスW＿Seekが管理テーブル内のDuplicate＿Seekの欄のいずれかに既に存在しているため、入出力管理手段１５は、管理テーブル内のDuplicate＿Seekの欄に既に登録されている論理アドレスW＿Seekを管理テーブルから一旦削除する（ステップ１１２）。
【００４８】
その後、書き込み要求が新規データの書き込みの場合、および既存データの更新の場合のいずれの場合でも、入出力管理手段１５は、新しいレコードのParityの欄にW＿Parityを登録し、Duplicate＿Seekの欄にW＿Seekを登録し、Write＿Countの欄に書き込みカウント数として１を登録する（ステップ１１３）。そして、入出力管理手段１５は、そのレコードに登録した実アドレスのデータボリュームに、データW＿Dataを書き込む（ステップ１１４）。
【００４９】
全ての書き込み処理が終了すると、入出力管理手段１５は、他のＩ／Ｏ要求に対する処理を保留にするために、ステップ１０２においてLock＿Addrに設定した論理アドレスW＿SeekをLock＿Addrから削除し（ステップ１１５）、排他状態を解除する。
【００５０】
図６を参照して説明した動作では、ステップ１０６において、入力されたデータと同じデータがストレージに既に保存されている場合、そのデータのレコードのDuplicate＿Seekの欄に論理アドレスが追加されるだけなので、同じデータが重複して保存されることはない。
【００５１】
また、ステップ１０４で、入出力管理手段１５は、入力されたデータと同一のデータが既にストレージに保存されているか否かを判定する際、保存されたデータの全てを判定対象とせず、入力されたデータとパリティ値が一致するデータを判定対象にしている。ストレージに保存されたデータの全てに対して、入力されたデータとの同一性を調べるよりも、同一性の判定をより効率的に行うことができる。
【００５２】
次に、サーバからデータ読み込み要求があった場合における、本実施形態の制御装置の動作手順を説明する。図７は本実施形態の制御装置によるデータ読み込み処理の動作手順を示すフローチャートである。
【００５３】
ここでは、サーバがデータの読み込みを要求する旨のＩ／Ｏ要求を制御装置１０に対して行い、対象となるデータを特定するための情報（R＿Infoと表記する）と共に、データの論理アドレス（R＿Seekと表記する）およびサイズ（R＿Sizeと表記する）の情報を制御装置１０に送信する。このデータのサイズR＿Sizeは、ブロックデータと同じであるものとする。
【００５４】
制御装置１０がサーバからＩ／Ｏ要求と共に、データを特定するための情報R＿Info、論理アドレスR＿SeekおよびサイズR＿Sizeの情報を受信すると、入出力管理手段１５は、これらのデータおよび情報をキャッシュメモリ１２に格納する。続いて、入出力管理手段１５は、論理アドレスR＿Seekにおいてデータの書き込み処理中か否かを判定し（ステップ２０１）、データの書き込み処理中である場合、Ｉ／Ｏ要求に対する処理を保留にする。
【００５５】
ステップ２０１で、データの書き込み処理中でない場合、入出力管理手段１５は、論理アドレスR＿Seekに一致するアドレスが登録されていないか、管理テーブルのDuplicate＿Seekの欄のカラムを検索する（ステップ２０２）。
【００５６】
ステップ２０２の検索の結果、R＿Seekに一致する論理アドレスが検出された場合、入出力管理手段１５は、その論理アドレスを含むレコードのReal＿Seekの欄に登録された実アドレスを読み出す（ステップ２０３）。そして、入出力管理手段１５は、その実アドレスに格納されたデータ（R＿Dataと表記する）をデータボリュームから読み出し、データR＿Dataをサーバに送信する（ステップ２０４）。
【００５７】
一方、ステップ２０２の検索の結果、R＿Seekに一致する論理アドレスが検出されなかった場合、サーバからのデータ読み込み要求に対して、データが格納されていないことをサーバに通知するために、入出力管理手段１５は、ゼロデータをサーバに送信する（ステップ２０５）。
【００５８】
次に、本実施形態の制御装置によるデータ再配置処理について説明する。
【００５９】
図８は本実施形態の制御装置によるデータ再配置処理の動作手順を示すフローチャートである。
【００６０】
再配置処理手段１７は、事前に設定されたスケジュールにしたがって、または、入出力管理手段１５の負荷状態が負荷判定閾値より低くなったタイミングで、データ書き込み回数Write＿Countが再配置判定閾値以上の値であるレコードがないか、管理テーブルを検索する（ステップ３０１）。
【００６１】
Write＿Countが再配置判定閾値以上のレコードが検出された場合、再配置処理手段１７は、そのレコードの実アドレスReal＿Seekを第１の仮アドレス（Seek＿Aと表記する）に設定する（ステップ３０２）。第１の仮アドレスおよび後述する第２の仮アドレスはキャッシュメモリ１２のＲＡＭに一時的に保存される。
【００６２】
続いて、再配置処理手段１７は、ステップ３０１で検出したレコードの実アドレスにおけるデータボリュームがデータ再配置処理の対象となる否かを、次のようにして判定する。ステップ３０３において、再配置処理手段１７は、過去にデータ再配置処理が行われたか否かを調べるために、管理テーブルでそのレコードのRelocation＿Countの欄を調べる。そして、Relocation＿Count≠nullである場合、再配置処理手段１７は、ステップ３０４の処理に進み、Relocation＿Count＝nullである場合、再配置処理手段１７は、検出したレコードの実アドレスがデータ再配置処理の対象であると判断する。
【００６３】
ステップ３０４において、再配置処理手段１７は、検出したレコードの実アドレスのデータボリュームで過去に再配置処理が行われていても前回のデータ再配置処理からの書き込み回数が増加しているか否かを調べる。具体的には、再配置処理手段１７は、検出したレコードのWrite＿CountがRelocation＿Countより大きいか否かを判定する（ステップ３０４）。
【００６４】
ステップ３０４で、Relocation＿Count＜Write＿Countである場合、再配置処理手段１７は、検出したレコードの実アドレスがデータ再配置処理の対象であると判断する。一方、Relocation＿Count≧Write＿Countである場合、前回のデータ再配置処理から書き込み回数が変わらないことから、再配置処理手段１７は、検出したレコードの実アドレスがデータ再配置処理の対象ではないと判断する。
【００６５】
ステップ３０３またはステップ３０４で、再配置処理手段１７は、検出したレコードの実アドレスがデータ再配置処理の対象であると判断すると、データボリュームに未使用領域があるか否かを調べるために、管理テーブルのReal＿Seekのカラムを検索し、未使用の実アドレスがないかを調べる（ステップ３０５）。未使用の実アドレスが存在する場合、再配置処理手段１７は、未使用の実アドレスを第２の仮アドレス（Seek＿Bと表記する）に設定する（ステップ３０６）。ステップ３０５で未使用の実アドレスが存在しない場合、再配置処理手段１７は、管理テーブルを参照して、Write＿Countの最も少ない実アドレスを抽出し（ステップ３０７）、抽出した実アドレスを第２の仮アドレスSeek＿Bに設定する。
【００６６】
続いて、再配置処理手段１７は、第１の仮アドレスSeek＿Aのデータボリュームに格納されたデータと第２の仮アドレスSeek＿Bのデータボリュームに格納されたデータとを置き換える（ステップ３０８）。ただし、ステップ３０６で未使用の実アドレスがあった場合、このステップ３０８では、再配置処理手段１７は、第１の仮アドレスSeek＿Aの実アドレスに格納されたデータを第２の仮アドレスSeek＿Bの実アドレスのデータボリュームに書き込むが、第１の仮アドレスSeek＿Aに設定された実アドレスのデータボリュームには何も書き込まなくてよい。
【００６７】
さらに、再配置処理手段１７は、ステップ３０８の処理に対応して、管理テーブルの情報を更新する（ステップ３０９）。ステップ３０７の処理を行った場合、再配置処理手段１７は、第１の仮アドレスSeek＿Aの実アドレスが登録されたレコードと第２の仮アドレスSeek＿Bの実アドレスが登録されたレコードとについて、再配置処理手段１７は、それぞれの書き込み回数Write＿Countを１つ増やした後、書き込み回数Write＿Countおよび実アドレスReal＿Seekのそれぞれを２つのレコード間で入れ換える。また、再配置処理手段１７は、データ再配置処理が行われたことを記録するために、データ再配置処理の対象となった実アドレス側のレコードのRelocation＿Countに、そのレコードのデータ書き込み回数Write＿Countを記録する。
【００６８】
具体例を説明すると、データ再配置処理の対象となった実アドレスのデータボリュームについて、データ再配置前のデータ書き込み回数が「１００」である場合、データ再配置処理が行われると、その実アドレスのレコードのデータ書き込み回数Write＿Countの欄に「１０１」が記録され、Relocation＿Countの欄に「１０１」が記録されることになる。
【００６９】
なお、再配置処理手段１７は、ステップ３０６の処理を行った場合、ステップ３０９では、第１の仮アドレスSeek＿Aの実アドレスが登録されたレコードの実アドレスの欄に未使用の実アドレスを記録し、データ書き込み回数Write＿Countの欄に１を記録すればよい。
【００７０】
このようにして、所定の閾値以上に書き込みが行われたデータボリュームに対して、そのデータボリュームに格納されたデータを別のデータボリュームに保存し直すことで、ＳＳＤ内の不揮発性記憶素子の書き換え回数を平準化することが可能となる。
【００７１】
本実施形態によれば、入力されたデータと同じデータがストレージに既に保存されている場合、同じデータが重複して保存されることがないため、重複する書き込み回数の分、装置の寿命を長くすることができる。
【００７２】
また、データ再配置処理を行うことで、書き込み頻度の高い記憶領域に格納されたデータを別の記憶領域に保存し直せば、不揮発性記憶素子の書き換え回数を平準化することが可能となる。
【００７３】
なお、本実施形態では、管理テーブルを格納するためのメモリとしてＨＤＤ３０をストレージシステムに設ける場合を説明したが、管理テーブルをキャッシュメモリ１２に保存してもよい。この構成では、ストレージシステムにＨＤＤ３０を設ける必要がないだけでなく、管理テーブルが格納されたＨＤＤ３０にアクセスする際に起こり得るミスヒットを防ぎ、データ処理能力が低下することを抑制できる。
【００７４】
また、この場合、制御部１１は、キャッシュメモリ１２の不揮発性メモリに管理テーブルを保存し、制御装置１０の電源がオンになると、管理テーブルをキャッシュメモリ１２内の不揮発性メモリからＲＡＭに移動し、その後、制御装置１０の電源をオフする旨の指示が入力されると、管理テーブルをキャッシュメモリ１２内のＲＡＭから不揮発性メモリに移動するようにしてもよい。制御装置１０が管理テーブルに頻繁にアクセスする間、管理テーブルをＲＡＭに保存しておくことで、キャッシュメモリ１２内の不揮発性メモリの寿命を長くすることができる。
【００７５】
さらに、使用頻度の高いデータボリュームと使用頻度の低いデータボリュームとを別々の管理テーブルで管理し、入出力管理手段１５は、使用頻度の高いデータボリュームの管理テーブルをキャッシュメモリ１２のＲＡＭにロードして使用し、使用頻度の低いデータボリュームの管理テーブルをＨＤＤ３０に保存して使用してもよい。この場合、入出力管理手段１５は、使用頻度の高いデータボリュームの管理テーブルに頻繁にアクセスすることになるが、キャッシュヒットの効果が得られる。
【符号の説明】
【００７６】
１０    制御装置
１１    制御部
１２    キャッシュメモリ
１５    入出力管理手段
１７    再配置処理手段
２０    ストレージ
３０    ＨＤＤ
４０    ＳＳＤ
【図１】
2011175532.tif 000003
【図２】
2011175532.tif 000004
【図３】
2011175532.tif 000005
【図４】
2011175532.tif 000006
【図５】
2011175532.tif 000007
【図６】
2011175532.tif 000008
【図７】
2011175532.tif 000009
【図８】
2011175532.tif 000010