(57)【特許請求の範囲】
【請求項１】
データを複数の記憶装置に多重化して記憶する多重化記憶装置において、
複数の記憶装置にそれぞれ対応付けられる複数の書込み指示間での位相シフト量を読出し要求及び書込み要求の状況に基づいて決定する決定部と、
前記決定部により決定された位相シフト量だけずらして同一データについて前記複数の書込み指示を発行する発行部と
を備えることを特徴とする多重化記憶装置。
【請求項２】
前記書込み要求は、当該多重化記憶装置を利用する情報処理装置からの要求であり、
前記発行部は、前記情報処理装置からの書込み要求に含まれるデータの書込み指示を発行することを特徴とする請求項１に記載の多重化記憶装置。
【請求項３】
前記書込み要求は、当該多重化記憶装置を制御する制御装置によるガベージコレクションに基づく要求であり、
前記発行部は、前記ガベージコレクションに基づく所定のデータの書込み指示を発行することを特徴とする請求項１に記載の多重化記憶装置。
【請求項４】
読出し要求についての統計処理を行う統計処理部をさらに備え、
前記決定部は、前記統計処理部による統計処理の結果に基づいて前記位相シフト量を決定することを特徴とする請求項１に記載の多重化記憶装置。
【請求項５】
実行待ち状態である読出し要求及び書込み要求の順番を判定する判定部をさらに備え、
前記決定部は、前記判定部による判定結果に基づいて前記位相シフト量を決定することを特徴とする請求項１に記載の多重化記憶装置。
【請求項６】
データを複数の記憶装置に多重化して記憶する多重化記憶装置による多重化記憶制御方法において、
複数の記憶装置にそれぞれ対応付けられる複数の書込み指示間での位相シフト量を読出し要求及び書込み要求の状況に基づいて決定し、
決定した位相シフト量だけずらして同一データについて前記複数の書込み指示を発行する
処理を含んだことを特徴とする多重化記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多重化記憶装置及び多重化記憶制御方法に関する。
【背景技術】
【０００２】
ＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）のような記憶ユニットの耐故障性を高めることを目的として、記憶ユニットを複数台用意してデータを冗長化させる技術がある（以下そのような技術を用いた装置を「多重化記憶装置」と呼ぶ）。多重化記憶装置は、同じデータを複数の記憶ユニットに書込み、データを冗長化させる。すると、もしひとつの記憶ユニットが故障した場合でも、多重化記憶装置は、他の正常な記憶ユニットからデータを読み出すことができる。すなわち、多重化記憶装置は、記憶ユニットを冗長化させることによって装置の耐故障性を向上させることができる。【０００３】
多重化記憶装置は、冗長化された全ての記憶ユニットに対してライトを行う必要がある。ここで、複数の記憶ユニットに対してライトを行う場合に、複数のライト間の位相差が多重化記憶装置の性能に影響を与える。【０００４】
図２０Ａ及び２０Ｂは、位相差を大きくした場合のリードレイテンシ及びライトスループットの例を示す図であり、図２１Ａ及び２１Ｂは、位相差を小さくした場合のリードレイテンシ及びライトスループットの例を示す図である。なお、これらの図では、２台の記憶ユニットにデータを二重化する場合を示す。【０００５】
また、ＣＰＵは、多重化記憶装置を使用する情報処理装置のＣＰＵである。Ｗｒｉｔｅ  Ｒｅｑ（Ｘ）はデータＸのライトリクエストであり、Ｒｅａｄ  Ｒｅｑ（Ｘ）はデータＸのリードリクエストであり、Ｒｅａｄ（Ｘ）は記憶ユニットからのデータＸのリードであり、Ｗｒｉｔｅ（Ｘ）は記憶ユニットへのデータＸのライトである。Ｒｅａｄ  Ｃｐｌ  ｗｉｔｈ  Ｄａｔａ（Ｘ）はデータＸのリード完了であり、Ｗｒｉｔｅ  Ｃｐｌ（Ｘ）はデータＸのライト完了である。なお、Ｘは、Ａ又はＢである。【０００６】
図２０Ａに示すように、位相差を大きくした場合には、Ｗｒｉｔｅ  Ｒｅｑ（Ａ）とＲｅａｄ  Ｒｅｑ（Ｂ）が連続してＣＰＵから発行されると、記憶ユニット2にデータＡを書込んでいる間に記憶ユニット1からデータＢを読出すことができる。したがって、リードレイテンシは短縮される。【０００７】
一方、位相差を大きくした場合には、図２０Ｂに示すように、各記憶ユニットに対するライト処理が並列に行われなくなるので、ライトリクエストの完了は遅くなり、ライトリクエストに対するスループットは悪化する。【０００８】
これに対して、位相差を小さくした場合には、図２１Ａに示すように、Ｗｒｉｔｅ  Ｒｅｑ（Ａ）とＲｅａｄ  Ｒｅｑ（Ｂ）が連続してＣＰＵから発行されると、データＡの書込みが完了しないとデータＢを読出すことができない。したがって、リードレイテンシは増大する。【０００９】
一方、位相差を小さくした場合には、図２１Ｂに示すように、各記憶ユニットに対するライト処理が並列に行われるので、ライトリクエストの完了は早くなり、ライトリクエストに対するスループットは改善する。【００１０】
なお、多重化記憶装置に関連する従来技術として、３台のディスク装置のうち１台ではリードとライトを行い、１台ではライトを行い、残りの１台をスタンバイさせ、一定間隔で３台の役割をシフトすることで、ディスク装置の寿命を延ばすバックアップ技術がある。【００１１】
また、アクセス装置からデータ書込みを行っている期間中にアクセス装置から書込み休止指示を受付けて書込みを休止し、アクセス装置からの新たなデータの書込みを受付けることで、複数のデータの書込み性能の低下が発生しないように並列的に書込む技術がある。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平７−６４８７０号公報
【特許文献２】特開２００５−２５０６４４号公報
【特許文献３】特開２０１１−２１０２３５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
図２０Ａ〜図２１Ｂに示したように、位相シフト量を大きく設定すると、ライトリクエストに対するスループット性能が低下し、位相シフト量を小さく設定すると、リードリクエストに対するレイテンシ改善の効果が小さくなるという問題がある。【００１４】
本発明は、１つの側面では、ライトリクエストに対するスループット性能の低下を防ぎつつ、リードリクエストに対するレイテンシを改善することを目的とする。
【課題を解決するための手段】
【００１５】
本願の開示する多重化記憶装置は、１つの態様において、複数の記憶装置にそれぞれ対応付けられる複数の書込み指示間での位相シフト量を読出し要求及び書込み要求の状況に基づいて決定する決定部を備える。また、本願の開示する多重化記憶装置は、前記決定部により決定された位相シフト量だけずらして同一データについて前記複数の書込み指示を発行する発行部を備える。
【発明の効果】
【００１６】
１実施態様によれば、ライトリクエストに対するスループット性能の低下を防ぎつつ、リードリクエストに対するレイテンシを改善することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、実施例１に係る多重化記憶装置の構成を示す図である。
【図２】図２は、多重化制御部の構成を示す図である。
【図３】図３は、リクエストキューのエントリの一例を示す図である。
【図４】図４は、デバイスステータステーブルのエントリ例を示す図である。
【図５】図５は、リクエスト履歴キューのエントリの一例を示す図である。
【図６】図６は、位相シフト量デコードテーブルの一例を示す図である。
【図７】図７は、ライトリクエスト処理時のデバイスリクエスト生成部の動作フローを示すフローチャートである。
【図８】図８は、リードリクエスト処理時のデバイスリクエスト生成部の動作フローを示すフローチャートである。
【図９】図９は、応答処理部の動作フローを示すフローチャートである。
【図１０】図１０は、リクエスト数統計部の動作フローを示すフローチャートである。
【図１１】図１１は、リードリクエストの頻度が高い場合の効果を示す図である。
【図１２】図１２は、ライトリクエストの頻度が高い場合の効果を示す図である。
【図１３】図１３は、デバイス制御プログラムで一部の機能が実現されるデバイス制御部のハードウェア構成を示す図である。
【図１４】図１４は、実施例２におけるリードレイテンシ性能改善効果の例を示す図である。
【図１５】図１５は、実施例３に係る多重化記憶装置の構成を示す図である。
【図１６】図１６は、多重化制御部の構成を示す図である。
【図１７】図１７は、リクエストキューのエントリの一例を示す図である。
【図１８】図１８は、デバイスステータステーブルのエントリ例を示す図である。
【図１９】図１９は、位相シフト量デコードテーブルの一例を示す図である。
【図２０Ａ】図２０Ａは、位相差を大きくした場合のリードレイテンシの例を示す図である。
【図２０Ｂ】図２０Ｂは、位相差を大きくした場合のライトスループットの例を示す図である。
【図２１Ａ】図２１Ａは、位相差を小さくした場合のリードレイテンシの例を示す図である。
【図２１Ｂ】図２１Ｂは、位相差を小さくした場合のライトスループットの例を示す図である。
【発明を実施するための形態】
【００１８】
以下に、本願の開示する多重化記憶装置及び多重化記憶制御方法の実施例を図面に基づいて詳細に説明する。なお、これらの実施例は開示の技術を限定するものではない。
【実施例１】
【００１９】
まず、実施例１に係る多重化記憶装置の構成について説明する。図１は、実施例１に係る多重化記憶装置の構成を示す図である。図１に示すように、多重化記憶装置１は、デバイス制御部２と、ｎ台の記憶ユニット３とを有する。デバイス制御部２は、多重化記憶装置１を制御し、記憶ユニット３は、ＣＰＵが使用するデータをｎ重化して記憶する。【００２０】
デバイス制御部２は、ホストＩ／Ｆ制御部４と、アドレス変換部５と、多重化制御部６と、ｎ個のデバイスアクセス制御部７とを有する。ホストＩ／Ｆ制御部４は、ＣＰＵとのインタフェースであり、多重化記憶装置１へのアクセスリクエストをＣＰＵから受付け、アドレス変換部５を経由して多重化制御部６に渡し、アクセスリクエストに対する多重化制御部６からの応答をＣＰＵに返す。【００２１】
アドレス変換部５は、ＣＰＵで用いられる論理アドレスを記憶ユニット３で用いられる物理アドレスに変換する。デバイスアクセス制御部７は、各記憶ユニット３に対応し、記憶ユニット３へのアクセスを制御する。【００２２】
多重化制御部６は、ＣＰＵからのアクセスリクエストに基づいて記憶ユニット３へのアクセスを制御する。多重化制御部６は、アクセスリクエストがライトリクエストである場合に、データを多重化して複数の記憶ユニット３に書込む制御を行う。多重化制御部６は、リクエスト発行・応答処理部６１と、リクエスト数統計部６２と、位相シフト量調整部６３とを有する。【００２３】
リクエスト発行・応答処理部６１は、ＣＰＵからのアクセスリクエストに基づいて記憶ユニット３へアクセスリクエストを発行し、記憶ユニット３からの応答を受け取って、ＣＰＵへ応答を返す。リクエスト発行・応答処理部６１は、ライトリクエストについては位相シフト量に基づいて多重化して記憶ユニット３へライトリクエストを発行する。リクエスト数統計部６２は、最近のアクセスリクエストの発行状況を管理し、アクセスリクエストのうちのリードリクエストの数を数える。【００２４】
位相シフト量調整部６３は、最近のアクセスリクエストの発行状況に基づいて、ライトリクエストを発行する位相シフト量を動的に調整する。位相シフト量調整部６３は、リクエスト数統計部６２から得られる直近のアクセスリクエストの発行状況を用いて、直近にリードリクエストが多ければ位相シフト量を増加させるよう、また逆にライトリクエストが多ければ位相シフト量を減少させるよう調整する。【００２５】
図２は、多重化制御部６の構成を示す図である。図２に示すように、リクエスト発行・応答処理部６１は、リクエストキュー７１と、デバイスステータステーブル７２と、デバイスリクエスト生成部７３と、応答処理部７４とを有する。【００２６】
リクエストキュー７１は、ＣＰＵからのアクセスリクエストを格納するキューである。キューの段数は、記憶ユニット３に対するアクセスレイテンシに基づいて、記憶ユニットアクセスのデータバスを埋めるのに必要なだけの数である。【００２７】
図３は、リクエストキュー７１のエントリの一例を示す図である。図３に示すように、リクエストキュー７１のエントリには、ｖａｌｉｄと、リクエスト種と、アドレスと、ライトデータのフィールドが含まれる。ｖａｌｉｄは、エントリが有効であるか否かを示す。リクエスト種は、リクエストの種類を示し、ライト又はリードを示す。アドレスは、アクセス先のアドレスを示す。ライトデータは、リクエスト種がライトの場合に、記憶ユニット３にライトされるデータである。【００２８】
デバイスステータステーブル７２は、各記憶ユニット３に対するリクエスト発行状況を管理するテーブルである。図４は、デバイスステータステーブル７２のエントリ例を示す図である。図４に示すように、デバイスステータステーブル７２は、ライトリクエスト及びリードリクエストに対応するエントリをそれぞれ一つずつ有し、各エントリには、ｖａｌｉｄと、ａｄｄｒｅｓｓと、各記憶ユニット３へのリクエスト発行状況が含まれる。【００２９】
ｖａｌｉｄは、エントリが有効であるか否かを示す１ビットの情報であり、有効である場合は「１」であり、有効でない場合は「０」である。ａｄｄｒｅｓｓは、リクエスト発行先のアドレスを示す。リクエスト発行状況は、各記憶ユニット３へのリクエストの発行状況を示し、「Ｗａｉｔ」、「Ｒｕｎ」又は「Ｄｏｎｅ」である。「Ｗａｉｔ」は、ライトリクエストに関して、リクエストを発行しなければいけないのに未発行である状況を表す。「Ｒｕｎ」は、リクエストを発行済みであり、記憶ユニット３がリクエストを処理中である状況を表す。「Ｄｏｎｅ」は、リクエストを発行済みであり、記憶ユニット３のリクエスト処理が完了していることを表す。【００３０】
デバイスリクエスト生成部７３は、リクエストキュー７１にリクエストが存在する場合、リクエストキュー７１から先頭のリクエストを取り出し、取り出したリクエストに応じて各記憶ユニット３に対するリクエストを生成して発行する。このとき、デバイスリクエスト生成部７３は、ライトリクエストの場合には、各記憶ユニット３に対する発行タイミングをシフトさせながらすべての記憶ユニット３に対してリクエストを発行する。シフトする位相量は、位相シフト量調節部６３によって管理される値である。一方、リードリクエスト発行時は、デバイスリクエスト生成部７３は、アイドル状態の記憶ユニット３を１つ探し、探した記憶ユニット３に対してリードリクエストを発行する。【００３１】
応答処理部７４は、各記憶ユニット３から応答を受け取り、受け取った応答を処理してＣＰＵに処理結果を返す。【００３２】
リクエスト数統計部６２は、リクエスト履歴キュー７５と、リードカウンタ７６とを有する。リクエスト履歴キュー７５は、直近の複数のアクセスリクエストについて、リードリクエストであったか否かを記憶するキューである。リクエスト履歴キュー７５の段数は、位相シフト量の決定に直近のリクエスト履歴をいくつ参照するかによって決まり、例えば１６段である。【００３３】
図５は、リクエスト履歴キュー７５のエントリの一例を示す図である。図５に示すように、リクエスト履歴キュー７５のエントリには、ｖａｌｉｄと、リクエスト種とがフィールドとして含まれる。ｖａｌｉｄは、エントリが有効であるか否かを示す。リクエスト種は、アクセスリクエストの種類を示し、ライト又はリードを示す。【００３４】
リードカウンタ７６は、直近のリードリクエストの個数をカウントするカウンタである。リードカウンタ７６は、リクエスト履歴キュー７５の中のリードリクエストの個数をカウントする。【００３５】
位相シフト量調整部６３は、位相シフト量デコードテーブル７７と、位相シフト量決定部７８と、位相シフト量記憶部７９とを有する。位相シフト量デコードテーブル７７は、リードカウンタ７６がカウントする直近のリードリクエストの数に応じて位相シフト量を決定するためのテーブルである。【００３６】
図６は、位相シフト量デコードテーブル７７の一例を示す図である。図６に示すように、位相シフト量デコードテーブル７７は、リードカウンタ値と位相シフト量とを対応付けて記憶する。リードカウンタ値は、リードカウンタ７６の値である。位相シフト量は、同一データに対して複数の記憶ユニット３に発行するライトリクエスト間の間隔であり、単位はマイクロ秒（μＳ）である。【００３７】
図６に示すように、直近にリードが少ない場合は位相シフト量が小さく、逆に直近にリードが多い場合は位相シフト量が大きくなる。位相シフト量は、位相をずらすことによりリードリクエストの処理が可能になるような値である。例えば、ＳＳＤを例として、リードに要する時間が５０μＳとした場合、リードカウンタ７６の値が１の場合はライトの後続にリードが１つ来てもそのリードにすぐに応答できるよう、位相シフト量は６０μＳとなる。【００３８】
また、位相シフトする最大量は、各記憶ユニット３のライト処理が完全にシリアルになる程度までとする。例えば、ＳＳＤを例として、ライトに要する時間が５００μＳである場合は、位相シフト量の最大値は５００μＳまでとする。これは、次のような理由による。位相シフト量を５００μＳとすることでいずれかの記憶ユニット３は必ずアイドル状態になることが期待されるため、ライトアクセスに続くリードアクセスをいずれかの記憶ユニット３に割り当てることができ、リード応答性能の改善効果は常に得られる。一方で、これ以上位相シフト量を大きくすることはリード応答性能のさらなる改善には寄与しないにも関わらず、ライトスループットは低下してしまう。そのため、ライトスループットの不要な性能低下を避けるために、位相シフト量は最大で５００μＳまでとする。【００３９】
位相シフト量決定部７８は、リードカウンタ７６の値から位相シフト量デコードテーブル７７を検索して位相シフト量を決定し、決定した位相シフト量を位相シフト量記憶部７９に格納する。位相シフト量記憶部７９は、位相シフト量決定部７８により決定された位相シフト量を記憶する。【００４０】
次に、ライトリクエスト処理時のデバイスリクエスト生成部７３の動作フローについて説明する。図７は、ライトリクエスト処理時のデバイスリクエスト生成部７３の動作フローを示すフローチャートである。図７は、リクエストキュー７１の先頭のリクエストがライトリクエストである場合のデバイスリクエスト生成部７３の動作フローを示す。【００４１】
図７に示すように、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のライトエントリのｖａｌｉｄビットがクリアであるか否かを判定し（ステップＳ１）、クリアでない場合には、クリアになるまで待つ。【００４２】
一方、クリアである場合には、デバイスリクエスト生成部７３は、リクエストキュー７１から先頭のリクエストを取り出し（ステップＳ２）、デバイスステータステーブル７２のライトエントリのｖａｌｉｄビットを１にセットする（ステップＳ３）。そして、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のライトエントリのリクエスト発行状況フィールドをすべて「Ｗａｉｔ」にする（ステップＳ４）。【００４３】
そして、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のリクエスト発行状況フィールドを参照する（ステップＳ５）。そして、デバイスリクエスト生成部７３は、ライト未発行でかつアイドル状態の記憶ユニット３が存在するか否かを判定し（ステップＳ６）、存在しない場合には、ステップＳ５に戻る。ここで、ライト未発行でかつアイドル状態とは、ライトエントリの発行状況が「Ｗａｉｔ」であり、かつリードエントリのリクエスト発行状況が「Ｒｕｎ」以外である状態である。【００４４】
一方、ライト未発行でかつアイドル状態の記憶ユニット３が存在する場合には、デバイスリクエスト生成部７３は、１つの記憶ユニット３に対してライトリクエストを発行する（ステップＳ７）。そして、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のライトエントリのその記憶ユニット３に対応するリクエスト発行状況を「Ｒｕｎ」に更新する（ステップＳ８）。【００４５】
そして、デバイスリクエスト生成部７３は、全ての記憶ユニット３にライトリクエストを発行済か否かを判定し（ステップＳ９）、全ての記憶ユニット３にライトリクエストを発行済の場合には処理を終了する。ここで、全ての記憶ユニット３にライトリクエストを発行済とは、すべての記憶ユニット３に対応するライトリクエストのリクエスト発行状況が「Ｒｕｎ」又は「Ｄｏｎｅ」の状態である。【００４６】
一方、ライトリクエストを発行していない記憶ユニット３がある場合には、デバイスリクエスト生成部７３は、位相シフト量が示す時間だけ待ち（ステップＳ１０）、ステップＳ５に戻って他の記憶ユニット３にライトリクエストを発行する処理を行う。【００４７】
このように、デバイスリクエスト生成部７３は、１つの記憶ユニット３に対してライトリクエストを発行すると、位相シフト量だけ待つことによって、同一データを複数の記憶ユニット３に書込む際に、ライトリクエストをずらして発行することができる。【００４８】
次に、リードリクエスト処理時のデバイスリクエスト生成部７３の動作フローについて説明する。図８は、リードリクエスト処理時のデバイスリクエスト生成部７３の動作フローを示すフローチャートである。図８は、リクエストキュー７１の先頭のリクエストがリードリクエストである場合のデバイスリクエスト生成部７３の動作フローを示す。【００４９】
図８に示すように、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のリードエントリのｖａｌｉｄビットがクリアであるか否かを判定し（ステップＳ１１）、クリアでない場合には、クリアになるまで待つ。【００５０】
一方、クリアである場合には、デバイスリクエスト生成部７３は、リクエストキュー７１から先頭のリクエストを取り出し（ステップＳ１２）、デバイスステータステーブル７２のリードエントリのｖａｌｉｄビットを１にセットする（ステップＳ１３）。そして、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のリードエントリのリクエスト発行状況フィールドをすべて「Ｗａｉｔ」にする（ステップＳ１４）。【００５１】
そして、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のリクエスト発行状況フィールドを参照する（ステップＳ１５）。そして、デバイスリクエスト生成部７３は、アイドル状態の記憶ユニット３が存在するか否かを判定し（ステップ１６）、存在しない場合には、ステップＳ１５に戻る。ここで、アイドル状態であるとは、リードエントリのリクエスト発行状況が「Ｗａｉｔ」であり、かつライトエントリのリクエスト発行状況が「Ｒｕｎ」以外である状態である。【００５２】
一方、アイドル状態の記憶ユニット３が存在する場合には、デバイスリクエスト生成部７３は、１つの記憶ユニット３に対してリードリクエストを発行する（ステップＳ１７）。そして、デバイスリクエスト生成部７３は、デバイスステータステーブル７２のリードエントリのその記憶ユニット３に対応するリクエスト発行状況を「Ｒｕｎ」に更新する（ステップＳ１８）。【００５３】
このように、デバイスリクエスト生成部７３は、デバイスステータステーブル７２に基づいてアイドル状態の記憶ユニット３を特定することによって、リードリクエストを発行することができる。【００５４】
次に、応答処理部７４の動作フローについて説明する。図９は、応答処理部７４の動作フローを示すフローチャートである。図９に示すように、応答処理部７４は、記憶ユニットiからの応答を受信すると、ライトリクエストに対する応答であるか否かを判定する（ステップＳ２１）。ここで、ｉは０〜ｎ−１である。【００５５】
その結果、ライトリクエストに対する応答である場合には、応答処理部７４は、デバイスステータステーブル７２のライトエントリの記憶ユニットiに対応するリクエスト発行状況を「Ｄｏｎｅ」に更新する（ステップＳ２２）。そして、応答処理部７４は、ライトエントリについて、全記憶ユニット３のリクエスト発行状況が「Ｄｏｎｅ」であるか否かを判定し（ステップＳ２３）、リクエスト発行状況が「Ｄｏｎｅ」でない記憶ユニット３がある場合には、処理を終了する。【００５６】
一方、全記憶ユニット３のリクエスト発行状況が「Ｄｏｎｅ」である場合には、応答処理部７４は、ＣＰＵに対してライト応答を送信し（ステップＳ２４）、ライトエントリのｖａｌｉｄをクリアする（ステップＳ２５）。【００５７】
また、ライトリクエストに対する応答でない場合には、リードリクエストに対する応答なので、応答処理部７４は、デバイスステータステーブル７２のリードエントリの記憶ユニットiに対応するリクエスト発行状況を「Ｄｏｎｅ」に更新する（ステップＳ２６）。そして、応答処理部７４は、ＣＰＵに対してリード応答を送信し（ステップＳ２７）、リードエントリのｖａｌｉｄをクリアする（ステップＳ２８）。【００５８】
このように、応答処理部７４は、ライトリクエストに対する応答に対して、全ての記憶ユニット３からの応答が来るまでＣＰＵに応答しないので、ＣＰＵは、応答処理部７４からの応答によりデータの多重書込みの完了を確認することができる。【００５９】
次に、リクエスト数統計部６２の動作フローについて説明する。図１０は、リクエスト数統計部６２の動作フローを示すフローチャートである。なお、リクエスト数統計部６２は、リクエストキュー７１から取り出されたリクエストを受信すると動作する。【００６０】
図１０に示すように、リクエスト数統計部６２は、受信したリクエストがリードリクエストであるか否かを判定し（ステップＳ３１）、リードリクエストである場合には、リードカウンタ７６を加算する（ステップＳ３２）。【００６１】
そして、リクエスト数統計部６２は、リクエスト履歴キュー７５から最古のリクエストを取り出し（ステップＳ３３）、取り出したリクエストがリードリクエストであるか否かを判定する（ステップＳ３４）。その結果、リードリクエストである場合には、リクエスト数統計部６２は、リードカウンタ７６を減算する（ステップＳ３５）。【００６２】
そして、リクエスト数統計部６２は、リクエスト履歴キュー７５に、新規に受信したリクエストを追加する（ステップＳ３６）。【００６３】
このように、リクエスト数統計部６２が、リードカウンタ７６を用いて直近の所定の数のリクエストのうちリードリクエストの数を数えることによって、多重化制御部６は、直近のリクエストの状況を把握することができる。なお、図１０で示す動作は、リクエスト履歴キュー７５がフルエントリになった後の動作を示し、フルエントリになるまでは、ステップＳ３３〜ステップＳ３５の処理は行われない。【００６４】
上述してきたように、実施例１では、位相シフト量デコードテーブル７７が、直近のリードリクエストの数に対応付けて位相シフト量を記憶する。そして、リクエスト数統計部６２が、直近の所定の数のリクエストのうちリードリクエストの数を数え、位相シフト量決定部７８が、位相シフト量デコードテーブル７７と直近のリードリクエストの数に基づいて位相シフト量を決定する。そして、デバイスリクエスト生成部７３が、同一データを書込む複数の記憶ユニット３に位相シフト量だけずらしてライトリクエストを発行する。したがって、多重化制御部６は、直近のリードリクエストの頻度に基づいて、位相シフト量を動的に変更することができ、ライトリクエストに対するスループット性能の低下を防ぎつつ、リードリクエストに対するレイテンシを改善することができる。【００６５】
図１１は、リードリクエストの頻度が高い場合の効果を示す図である。なお、図１１では、記憶ユニット３の数が２である場合を示す。図１１に示すように、直近にリードリクエストが多い場合は、多重化制御部６は、ライト開始タイミングの位相差を大きくする（１）。したがって、一方の記憶ユニット３がアイドルである期間が延びるため、多重化記憶装置１は、ライトリクエストの直後にリードリクエストが来た場合に、すぐに応答することができる（２）。【００６６】
図１２は、ライトリクエストの頻度が高い場合の効果を示す図である。なお、図１２では、記憶ユニット３の数が２である場合を示す。図１２に示すように、直近にライトリクエストが多い場合は、多重化制御部６は、ライト開始タイミングの位相差を小さくする（１）。したがって、両方の記憶ユニット３で並列にライトされるようになるため、多重化記憶装置１は、ライトスループットを改善することができる（２）。【００６７】
なお、実施例１では、デバイス制御部２について説明したが、デバイス制御部２が有する構成の一部をソフトウェアによって実現することで、同様の機能を有するデバイス制御プログラムを得ることができる。そこで、デバイス制御プログラムで一部の機能が実現されるデバイス制御部のハードウェア構成について説明する。【００６８】
図１３は、デバイス制御プログラムで一部の機能が実現されるデバイス制御部のハードウェア構成を示す図である。図１３に示すように、デバイス制御部２０は、主記憶２１と、コントローラ２２と、フラッシュメモリ２６とを有する。【００６９】
主記憶２１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。主記憶２１は、図２に示したリクエストキュー７１、デバイスステータステーブル７２、リクエスト履歴キュー７５、リードカウンタ７６、位相シフト量デコードテーブル７７及び位相シフト量記憶部７９をメモリ内に実現する。【００７０】
コントローラ２２は、ＣＰＵ２３と、アドレス変換部２４と、デバイスアクセス制御部２５とを有する。ＣＰＵ２３は、主記憶２１からプログラムを読み出して実行する中央処理装置である。アドレス変換部２４は、ＣＰＵ２３で用いられる論理アドレスを記憶ユニット３で用いられる物理アドレスに変換する。デバイスアクセス制御部２５は、各記憶ユニット３に対応し、記憶ユニット３へのアクセスを制御する。【００７１】
フラッシュメモリ２６は、不揮発性のメモリであり、デバイス制御プログラム２７を記憶する。デバイス制御プログラム２７は、フラッシュメモリ２６から主記憶２１に読み出されてＣＰＵ２３によって実行されることで、図２に示したリクエスト発行・応答部６１、リクエスト数統計部６２及び位相シフト量調整部６３の機能を実現する。【００７２】
このように、デバイス制御プログラム２７をＣＰＵ２３で実行することによって、実施例１に係る多重化制御機能をソフトウェアで実現することができる。
【実施例２】
【００７３】
ところで、実施例１では、直近のリードリクエストの頻度に基づいて位相シフト量を動的に変更する場合について説明したが、実行待ち状態にあるリードリクエスト及びライトリクエストの順番を加味して位相シフト量を調整してもよい。例えば、記憶ユニットをＳＳＤとし、ライトリクエスト、リードリクエストがこの順で実行待ちであるときは、位相シフト量を最低限６０μＳとすることで、多重化記憶装置は、ライトリクエストの処理と同時にリードリクエストの処理を行うことができる。【００７４】
位相シフト量の調整のためには、リクエスト発行・応答処理部は、位相シフト量調整部へリクエストキューの情報を通知し、位相シフト量調整部は、位相シフト量を決定する際にリクエストキューの情報を加味すればよい。【００７５】
図１４は、実施例２におけるリードレイテンシ性能改善効果の例を示す図である。図１４に示すように、位相シフト量調整部は、ライトリクエストの後続にリードリクエストが来ている場合は、ライト開始タイミングの位相差を最低でも６０μＳとする（１）。すると、多重化記憶装置は、後続のリードリクエストに対して直ちに応答できる（２）。【００７６】
このように、実施例２では、位相シフト量調整部が、実行待ち状態にあるリードリクエスト及びライトリクエストの組み合わせを加味して位相シフト量を調整することで、多重化記憶装置は、リードレイテンシを改善することができる。
【実施例３】
【００７７】
実施例１では、ライトリクエストに対する処理の開始タイミング間隔を動的に変更する場合について説明したが、同様の手法はライトリクエストに対する処理に限らず適用することができる。例えば、ＳＳＤなどでは、記憶ユニット３がアイドル状態のときにバックグラウンドで不要データの消去すなわちガベージコレクションを行う。デバイス制御部は、不要データの消去を全ての記憶ユニットに対して行うが、全記憶ユニットに対して同時に開始するのではなく、記憶ユニット毎に間隔をあけて開始することができる。そこで、実施例３では、ガベージコレクションにおいて位相シフト量を自動調整する多重化記憶装置について説明する。【００７８】
まず、実施例３に係る多重化記憶装置の構成について説明する。図１５は、実施例３に係る多重化記憶装置の構成を示す図である。なお、ここでは説明の便宜上、図１に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。【００７９】
図１５に示すように、多重化記憶装置１ａは、デバイス制御部２ａと、ｎ台の記憶ユニット３ａとを有する。デバイス制御部２ａは、多重化記憶装置１ａを制御し、記憶ユニット３ａは、情報処理装置のＣＰＵが使用するデータをｎ重化して記憶する。記憶ユニット３ａは、ＳＳＤである。デバイス制御部２ａは、ホストＩ／Ｆ制御部４と、アドレス変換部５と、多重化制御部６ａと、ｎ個のデバイスアクセス制御部７と、ＳＳＤ制御部８とを有する。【００８０】
多重化制御部６ａは、データを多重化して複数の記憶ユニット３ａに書込む制御を行う。多重化制御部６ａは、リクエスト発行・応答処理部６１ａと、リクエスト数統計部６２ａと、位相シフト量調整部６３ａとを有する。リクエスト発行・応答処理部６１ａとリクエスト数統計部６２ａは、ＣＰＵからのアクセスリクエストに加えて、ＳＳＤ制御部８からのＧＣ（ガベージコレクション）リクエストの処理も行う。ＳＳＤ制御部８は、ガベージコレクション制御部８０を有し、ガベージコレクション制御部８０は、ＧＣを行うか否かを判定し、ＧＣを行うと判定した場合にＧＣリクエストを発行する。【００８１】
図１６は、多重化制御部６ａの構成を示す図である。図１６に示すように、リクエスト発行・応答処理部６１ａは、リクエストキュー７１ａと、デバイスステータステーブル７２ａと、デバイスリクエスト生成部７３ａと、応答処理部７４ａとを有する。【００８２】
リクエストキュー７１ａは、ＣＰＵからのアクセスリクエスト及びガベージコレクション制御部８０からのＧＣリクエストを格納するキューである。図１７は、リクエストキュー７１ａのエントリの一例を示す図である。図１７に示すように、リクエストキュー７１ａのエントリには、ｖａｌｉｄと、リクエスト種と、アドレスと、ライトデータのフィールドが含まれ、リクエスト種は、ライト、リード又はＧＣを示す。【００８３】
デバイスステータステーブル７２ａは、各記憶ユニット３ａに対するリクエスト発行状況を管理するテーブルである。図１８は、デバイスステータステーブル７２ａのエントリ例を示す図である。図１８に示すように、デバイスステータステーブル７２ａは、ライトリクエスト、リードリクエスト及びＧＣリクエストに対応するエントリをそれぞれ一つずつ有する。【００８４】
デバイスリクエスト生成部７３ａは、デバイスリクエスト生成部７３の処理に加えて、リクエストキュー７１ａから取り出したリクエストがＧＣリクエストの場合には、各記憶ユニット３ａに対して発行タイミングをシフトさせながらＧＣリクエストを発行する。応答処理部７４ａは、応答処理部７４の処理に加えて、ＧＣリクエストに対する応答をガベージコレクション制御部８０に返す。【００８５】
リクエスト数統計部６２ａは、リクエスト履歴キュー７５ａと、リードカウンタ７６とを有する。リクエスト履歴キュー７５ａは、リクエスト履歴キュー７５と同様の情報を記憶するが、リクエストの種類としてライト、リード又はＧＣを記憶する。【００８６】
位相シフト量調整部６３ａは、位相シフト量デコードテーブル７７ａと、位相シフト量決定部７８ａと、ライト位相シフト量記憶部７９ａと、ＧＣ位相シフト量記憶部７９ｂとを有する。位相シフト量デコードテーブル７７ａは、リクエスト数統計部６２がカウントする直近のリードカウンタ７６の数に応じて、ライト位相シフト量及びＧＣ位相シフト量を決定するためのテーブルである。ここで、ライト位相シフト量は、ライトリクエストに対する位相シフト量であり、ＧＣ位相シフト量は、ＧＣリクエストに対する位相シフト量である。【００８７】
図１９は、位相シフト量デコードテーブル７７ａの一例を示す図である。図１９に示すように、位相シフト量デコードテーブル７７ａは、リードカウンタ値とライト位相シフト量とＧＣ位相シフト量とを対応付けて記憶する。【００８８】
ライト位相シフト量とＧＣ位相シフト量を区別する理由は、ＳＳＤにおけるライトリクエストに対する処理とガベージコレクションに対する処理との間のレイテンシに差があるためである。各ＳＳＤが同時にガベージコレクションを行うような状況をなるべく回避するために、ガベージコレクションに対する処理の位相シフト量は、ガベージコレクションに要する時間に応じて、ライトリクエストに対する処理の場合よりも大きい。【００８９】
位相シフト量決定部７８ａは、リードカウンタ７６の値から位相シフト量デコードテーブル７７ａを検索してライト位相シフト量及びＧＣ位相シフト量を決定する。ライト位相シフト量記憶部７９ａは、位相シフト量決定部７８ａにより決定されたライト位相シフト量を記憶し、ＧＣ位相シフト量記憶部７９ｂは、位相シフト量決定部７８ａにより決定されたＧＣ位相シフト量を記憶する。【００９０】
上述してきたように、実施例３では、位相シフト量決定部７８ａがリードカウンタ７６の値及び位相シフト量デコードテーブル７７ａに基づいてＧＣ位相シフト量を決定し、決定したＧＣ位相シフト量をＧＣ位相シフト量記憶部７９ｂに格納する。そして、デバイスリクエスト生成部７３ａは、ＧＣ位相シフト量記憶部７９ｂが記憶するＧＣ位相シフト量に基づいて、各記憶ユニット３ａに対して発行タイミングをシフトさせながらＧＣリクエスト発行する。したがって、多重化制御部６は、ＧＣリクエストに対して、直近のリードリクエストの頻度に基づいて位相シフト量を動的に変更することができ、ＧＣリクエストに対するスループット性能の低下を防ぎつつ、リードリクエストに対するレイテンシを改善することができる。
【符号の説明】
【００９１】
１，１ａ    多重化記憶装置
２，２ａ，２０    デバイス制御部
３，３ａ    記憶ユニット
４    ホストＩ／Ｆ制御部
５，２４    アドレス変換部
６，６ａ    多重化制御部
７，２５    デバイスアクセス制御部
８    ＳＳＤ制御部
２１    主記憶
２２    コントローラ
２３    ＣＰＵ
２６    フラッシュメモリ
２７    デバイス制御プログラム
６１，６１ａ    リクエスト発行・応答処理部
６２，６２ａ    リクエスト数統計部
６３，６３ａ    位相シフト量調整部
７１，７１ａ    リクエストキュー
７２，７２ａ    デバイスステータステーブル
７３，７３ａ    デバイスリクエスト生成部
７４，７４ａ    応答処理部
７５，７５ａ    リクエスト履歴キュー
７６    リードカウンタ
７７，７７ａ    位相シフト量デコードテーブル
７８，７８ａ    位相シフト量決定部
７９    位相シフト量記憶部
７９ａ    ライト位相シフト量記憶部
７９ｂ    ＧＣ位相シフト量記憶部
８０    ガベージコレクション制御部
【図１】
0005958656.tif 000002
【図２】
0005958656.tif 000003
【図３】
0005958656.tif 000004
【図４】
0005958656.tif 000005
【図５】
0005958656.tif 000006
【図６】
0005958656.tif 000007
【図７】
0005958656.tif 000008
【図８】
0005958656.tif 000009
【図９】
0005958656.tif 000010
【図１０】
0005958656.tif 000011
【図１１】
0005958656.tif 000012
【図１２】
0005958656.tif 000013
【図１３】
0005958656.tif 000014
【図１４】
0005958656.tif 000015
【図１５】
0005958656.tif 000016
【図１６】
0005958656.tif 000017
【図１７】
0005958656.tif 000018
【図１８】
0005958656.tif 000019
【図１９】
0005958656.tif 000020
【図２０Ａ】
0005958656.tif 000021
【図２０Ｂ】
0005958656.tif 000022
【図２１Ａ】
0005958656.tif 000023
【図２１Ｂ】
0005958656.tif 000024