(57)【要約】【課題】アクセス要求に対する応答性能の低下を抑制すること。【解決手段】ストレージ制御装置１００は、ストレージ装置を形成する複数のＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）のそれぞれのＳＳＤがガベージコレクションを実行中であるか否かを監視する。ストレージ制御装置１００は、ストレージ装置に対するリード要求を受け付けた場合、複数のＳＳＤのうちリード要求の対象になるＳＳＤがガベージコレクションを実行中であるか否かを判定する。ストレージ制御装置１００は、リード要求の対象になるＳＳＤがガベージコレクションを実行中であれば、リード要求の対象になりガベージコレクションを実行中であるＳＳＤ１０１とは異なる他のＳＳＤ１０２からリード要求されたデータを取得する。【選択図】図１
2018022397.tif 000002
【特許請求の範囲】
【請求項１】
データを冗長化して記憶するストレージ装置を形成する複数の記憶装置のそれぞれの記憶装置がガベージコレクションを実行中であるか否かを監視し、
前記ストレージ装置に対するリード要求を受け付けた場合、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置とは異なる他の記憶装置から前記リード要求されたデータを取得する、
制御部を有することを特徴とするストレージ制御装置。
【請求項２】
前記ストレージ装置は、ミラーリングによりデータを記憶する装置であり、
前記制御部は、
前記リード要求を受け付けた場合、前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記他の記憶装置にミラーリングにより記憶された前記リード要求されたデータと同じ内容のデータを取得する、ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記制御部は、
前記複数の記憶装置のいずれかの記憶装置のフリースペースの容量を計測し、
計測した前記フリースペースの容量が閾値以下であれば、前記いずれかの記憶装置にガベージコレクションを実行させ、前記いずれかの記憶装置がガベージコレクションを終了するとミラーリングにより前記いずれかの記憶装置と同じ内容のデータを記憶する記憶装置にガベージコレクションを実行させる、ことを特徴とする請求項２に記載のストレージ制御装置。
【請求項４】
前記ストレージ装置は、誤り訂正符号を用いてデータを分散して記憶する装置であり、
前記制御部は、
前記リード要求を受け付けた場合、前記リード要求されたデータの一部分を記憶する前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記他の記憶装置から前記リード要求されたデータのうち前記一部分とは異なる残りの部分と、前記リード要求されたデータに対応する誤り訂正符号とを取得し、前記リード要求されたデータを生成する、ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項５】
前記制御部は、
前記複数の記憶装置のいずれかの記憶装置のフリースペースの容量を計測し、
計測した前記フリースペースの容量が閾値以下であれば、前記いずれかの記憶装置にガベージコレクションを実行させる、ことを特徴とする請求項４に記載のストレージ制御装置。
【請求項６】
前記ストレージ装置に対するライト要求を受け付けた場合、前記複数の記憶装置のうち前記ライト要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記ライト要求されたデータを一時記憶領域に記憶し、
前記ライト要求の対象になる記憶装置がガベージコレクションを終了する前に、さらに前記ライト要求されたデータの書込先になる記憶領域に対するアクセス要求を受け付けた場合、前記ライト要求の対象になる記憶装置にガベージコレクションを中断させ、前記ライト要求されたデータを前記ライト要求の対象になる記憶装置に書き込む、ことを特徴とする請求項１〜５のいずれか一つに記載のストレージ制御装置。
【請求項７】
前記ライト要求の対象になる記憶装置がガベージコレクションを終了すると、前記一時記憶領域に記憶されたデータをまとめて前記ライト要求の対象になる記憶装置に書き込む、ことを特徴とする請求項６に記載のストレージ制御装置。
【請求項８】
コンピュータが、
データを冗長化して記憶するストレージ装置を形成する複数の記憶装置のそれぞれの記憶装置がガベージコレクションを実行中であるか否かを監視し、
前記ストレージ装置に対するリード要求を受け付けた場合、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置とは異なる他の記憶装置から前記リード要求されたデータを取得する、
処理を実行することを特徴とするストレージ制御方法。
【請求項９】
コンピュータに、
データを冗長化して記憶するストレージ装置を形成する複数の記憶装置のそれぞれの記憶装置がガベージコレクションを実行中であるか否かを監視し、
前記ストレージ装置に対するリード要求を受け付けた場合、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置とは異なる他の記憶装置から前記リード要求されたデータを取得する、
処理を実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
従来、複数の記憶装置によってデータを冗長化して記憶するＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）構成のストレージ装置がある。記憶装置には、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）が採用されることがある。
【０００３】
関連する先行技術としては、例えば、データの書き込み処理中に発生する内部処理について、いずれかのＳＳＤが所定の条件を満たすタイミングで、各ＳＳＤの内部処理を実行するものがある。また、例えば、第１の半導体記憶装置あるいは第２の半導体記憶装置へアクセスし、アクセスに応じて動的に複数の半導体記憶装置の中から第２の半導体記憶装置を特定する情報を管理するテーブルを更新する技術がある。また、例えば、複数のソリッドステートストレージデバイス間でデータを効率的に分散し、エラーを検出して訂正する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−５９８５０号公報
【特許文献２】国際公開第２０１５／００８３５６号
【特許文献３】特表２０１３−５３９１３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、ストレージ装置のアクセス要求に対する応答性能が低下してしまうことがある。例えば、ＳＳＤがガベージコレクションを実行中であると、データのリード要求があってもＳＳＤがガベージコレクションを終了するまではデータの読み出しを待つことになり、応答にかかる時間の増大化を招く場合がある。
【０００６】
１つの側面では、本発明は、アクセス要求に対する応答性能の低下を抑制することができるストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、データを冗長化して記憶するストレージ装置を形成する複数の記憶装置のそれぞれの記憶装置がガベージコレクションを実行中であるか否かを監視し、前記ストレージ装置に対するリード要求を受け付けた場合、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置とは異なる他の記憶装置から前記リード要求されたデータを取得するストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、アクセス要求に対する応答性能の低下を抑制することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかるストレージ制御方法の一実施例を示す説明図である。
【図２】図２は、ストレージ制御システム２００の一例（その１）を示す説明図である。
【図３】図３は、ストレージ制御システム２００の一例（その２）を示す説明図である。
【図４】図４は、ストレージ制御システム２００の一例（その３）を示す説明図である。
【図５】図５は、ストレージ制御装置１００のハードウェア構成例を示すブロック図である。
【図６】図６は、ＢＧコントロールコマンド６００のデータ構造を示す説明図である。
【図７】図７は、ＢＧ設定コマンド７００のデータ構造を示す説明図である。
【図８】図８は、フリースペースの容量と比較する閾値の一例を示す説明図である。
【図９】図９は、ＳＳＤ状態テーブル９００の記憶内容の一例を示す説明図である。
【図１０】図１０は、ストレージ制御装置１００の機能的構成例を示すブロック図である。
【図１１】図１１は、ストレージ制御装置１００の機能的構成の具体例を示すブロック図である。
【図１２】図１２は、図３に示したストレージ制御システム２００においてＳＳＤ状態テーブル９００を更新する一例を示す説明図である。
【図１３】図１３は、図３に示したストレージ制御システム２００においてデータを読み出す一例を示す説明図である。
【図１４】図１４は、図３に示したストレージ制御システム２００においてデータを書き込む一例を示す説明図である。
【図１５】図１５は、図２に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例を示すシーケンス図である。
【図１６】図１６は、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例を示すシーケンス図である。
【図１７】図１７は、図２に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例を示すシーケンス図である。
【図１８】図１８は、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例を示すシーケンス図である。
【図１９】図１９は、図４に示したストレージ制御システム２００においてデータを読み出す一例を示す説明図である。
【図２０】図２０は、図４に示したストレージ制御システム２００においてデータを書き込む一例を示す説明図である。
【図２１】図２１は、図４に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例を示すシーケンス図である。
【図２２】図２２は、図４に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例を示すシーケンス図である。
【図２３】図２３は、ＧＣ初期化処理手順の一例を示すフローチャートである。
【図２４】図２４は、ＧＣ制御処理手順の一例を示すフローチャートである。
【図２５】図２５は、アクセス制御処理手順の一例を示すフローチャート（その１）である。
【図２６】図２６は、アクセス制御処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかるストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムの実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかるストレージ制御方法の一実施例）
図１は、実施の形態にかかるストレージ制御方法の一実施例を示す説明図である。ストレージ制御装置１００は、複数の記憶装置によってデータを冗長化して記憶するストレージ装置を制御するコンピュータである。記憶装置は、例えば、ＳＳＤである。
【００１２】
ここで、ＳＳＤは、データの書き込みが繰り返され、フリースペースの容量が閾値以下になると、自動でガベージコレクション（Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｏｎ）を実行する性質を有する。フリースペースとは、ＳＳＤの記憶領域のうちデータが書き込まれていない空き領域である。フリースペースは、不要になったデータが書き込まれた領域は含まず、ユーザが認識する見かけ上の空き領域とは異なってよい。以下の説明では、ガベージコレクションを「ＧＣ」と表記する場合がある。
【００１３】
このため、複数のＳＳＤによってデータを冗長化して記憶するＲＡＩＤ構成のストレージ装置において、ホスト装置からのライト要求に応じてデータの書き込みが繰り返されると、ＳＳＤは自動でＧＣを実行することになる。これにより、ホスト装置からのアクセス要求に対するストレージ装置の応答性能が低下してしまうことがある。アクセス要求は、リード要求またはライト要求である。
【００１４】
例えば、ＳＳＤがＧＣを実行中であると、ホスト装置からのリード要求があってもＧＣを実行中のＳＳＤからはデータを読み出せないため、ＳＳＤがＧＣを終了するまではデータの読み出しを待つことになる。結果として、リード要求に対する応答にかかる時間の増大化を招く場合があり、ストレージ装置の応答性能が低下してしまうことがある。具体的には、応答にかかる時間は、ＳＳＤがＧＣを実行中ではないときに比べて、１．５倍〜８．０倍に増大する可能性がある。
【００１５】
また、ＳＳＤの低価格化のためにＳＳＤに最大容量の小さい記憶媒体が用いられることがあり、フリースペースの最大容量が比較的小さいＳＳＤが製造されることがある。フリースペースの最大容量が比較的小さければ、フリースペースの容量が閾値以下になりやすくなるため、自動でＧＣを実行する頻度が大きくなりやすい傾向がある。結果として、ＳＳＤがＧＣを実行中にリード要求がある確率も大きくなり、データの読み出しを待つ回数も大きくなりやすく、ストレージ装置の応答性能が低下してしまうことがある。
【００１６】
そこで、本実施の形態では、ＧＣを実行中のＳＳＤと、データを読み出すＳＳＤとが異なるＳＳＤになるように制御することにより、アクセス要求に対する応答性能の低下を抑制することができるストレージ制御方法について説明する。
【００１７】
図１の例では、記憶装置にＳＳＤが採用され、ストレージ制御装置１００が複数のＳＳＤによってデータを冗長化して記憶するストレージ装置を制御する場合について説明する。ここで、ストレージ装置は、例えば、ＲＡＩＤ１構成の装置である。ストレージ装置は、具体的には、ミラーリングによって同じ内容のデータをそれぞれのＳＳＤに記憶する装置である。
【００１８】
また、ストレージ装置は、例えば、ＲＡＩＤ２構成、ＲＡＩＤ３構成、ＲＡＩＤ４構成、ＲＡＩＤ５構成、またはＲＡＩＤ６構成などであってもよい。ストレージ装置は、具体的には、ＲＡＩＤ５構成であって、誤り訂正符号を用いてデータをそれぞれのＳＳＤに分散して記憶する装置であってもよい。
【００１９】
（１−１）ストレージ制御装置１００は、ストレージ装置を形成する複数のＳＳＤのそれぞれのＳＳＤがＧＣを実行中であるか否かを監視する。これによれば、ストレージ制御装置１００は、複数のＳＳＤのうち、ＧＣを実行中ではないためにデータを読み出し可能な状態であるＳＳＤと、ＧＣを実行中であるためにＧＣを終了するまではデータを読み出し可能ではないＳＳＤとを特定することができる。
【００２０】
ここで、複数のＳＳＤのうち、ＧＣを実行中ではないためにデータを読み出し可能な状態であるＳＳＤは１つだけではなく、いくつか存在してもよい。同様に、複数のＳＳＤのうち、ＧＣを実行中であるためにＧＣを終了するまではデータを読み出し可能ではないＳＳＤは１つだけではなく、いくつか存在してもよい。
【００２１】
（１−２）ストレージ制御装置１００は、ストレージ装置に対するリード要求を受け付けた場合、複数のＳＳＤのうちリード要求の対象になるＳＳＤがＧＣを実行中であるか否かを判定する。ストレージ制御装置１００は、例えば、自装置と通信可能に接続されたホスト装置から、リード要求を受信する。そして、ストレージ制御装置１００は、例えば、ストレージ装置がＲＡＩＤ１構成であり読出先として用いられる主たるＳＳＤが予め設定されていれば、主たるＳＳＤがＧＣを実行中であるか否かを判定する。
【００２２】
また、ストレージ制御装置１００は、例えば、ストレージ装置がＲＡＩＤ５構成であれば、リード要求されたデータを分散して記憶するそれぞれのＳＳＤがＧＣを実行中であるか否かを判定してもよい。これによれば、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがデータを読み出し可能な状態であるか否かを判定することができる。
【００２３】
（１−３）ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを実行中であれば、リード要求の対象になりＧＣを実行中であるＳＳＤ１０１とは異なる他のＳＳＤ１０２からリード要求されたデータを取得する。ここで、ストレージ制御装置１００は、例えば、ストレージ装置がＲＡＩＤ１構成であり、主たるＳＳＤがＧＣを実行中であると判定したとする。このとき、ストレージ制御装置１００は、ミラーリングにより主たるＳＳＤと同じ内容のデータを記憶する他のＳＳＤから、リード要求されたデータと同じ内容のデータを取得する。
【００２４】
一方で、ストレージ制御装置１００は、例えば、主たるＳＳＤがＧＣを実行中ではなければ、主たるＳＳＤからリード要求されたデータを取得してもよい。ストレージ制御装置１００は、具体的には、ミラーリングにより主たるＳＳＤと同じ内容のデータを記憶する他のＳＳＤがＧＣを実行中であっても、主たるＳＳＤからリード要求されたデータを取得する。
【００２５】
また、ストレージ制御装置１００は、例えば、ストレージ装置がＲＡＩＤ５構成であり、リード要求されたデータの一部分を記憶するＳＳＤがＧＣを実行中であると判定したとする。このとき、ストレージ制御装置１００は、リード要求されたデータの一部分を記憶しＧＣを実行中であるＳＳＤとは異なる他のＳＳＤから、リード要求されたデータの残りの部分と誤り訂正符号とを取得する。そして、ストレージ制御装置１００は、リード要求されたデータの残りの部分と誤り訂正符号とから、リード要求されたデータと同じ内容のデータを生成する。
【００２６】
一方で、ストレージ制御装置１００は、例えば、リード要求されたデータのそれぞれの部分を記憶するＳＳＤがＧＣを実行中ではなければ、それぞれの部分を取得する。そして、ストレージ制御装置１００は、リード要求されたデータのそれぞれの部分から、リード要求されたデータと同じ内容のデータを生成してもよい。これによれば、ストレージ制御装置１００は、リード要求の対象になるいずれかのＳＳＤがＧＣを終了するまで待たなくても、リード要求されたデータと同じ内容のデータを取得することができる。
【００２７】
これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを終了するまで待たなくても、リード要求されたデータと同じ内容のデータを取得したときにリード要求の要求元に対して応答することができる。このため、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【００２８】
ここでは、ＳＳＤが、自動でＧＣを実行する場合について説明したが、これに限らない。例えば、ストレージ制御装置１００は、それぞれのＳＳＤのＧＣの実行を制御可能であってもよい。これによれば、ストレージ制御装置１００は、複数のＳＳＤが同時にＧＣを実行してしまい、リード要求されたデータを読み出し可能な状態であるＳＳＤがない状態になることを抑制することができる。
【００２９】
（ストレージ制御システム２００の一例）
次に、図２〜図４を用いて、図１に示したストレージ制御装置１００を適用した、ストレージ制御システム２００の一例について説明する。
【００３０】
図２は、ストレージ制御システム２００の一例（その１）を示す説明図である。図２において、ストレージ制御システム２００は、ストレージ装置２１０とホスト装置２２０とを含む。ストレージ制御システム２００において、ストレージ装置２１０とホスト装置２２０とは、チャネル２１１，２２１を介して接続される。
【００３１】
図２の例では、ストレージ装置２１０は、ＲＡＩＤ１構成である。ストレージ装置２１０は、ストレージ制御装置１００と、ＳＳＤ２３０と、ＳＳＤ２３１とを有する。ストレージ制御装置１００は、例えば、ＲＡＩＤコントローラによって実現される。ストレージ制御装置１００は、チャネル２１１，２２１を介してホスト装置２２０と通信可能であって、ホスト装置２２０からアクセス要求を受け付ける。
【００３２】
ストレージ制御装置１００は、ホスト装置２２０からライト要求を受け付けた場合には、ミラーリングによりＳＳＤ２３０とＳＳＤ２３１とに同じ内容のデータを書き込む。ストレージ制御装置１００は、ホスト装置２２０からリード要求を受け付けた場合には、ＳＳＤ２３０とＳＳＤ２３１とのうち、主たるＳＳＤ２３０からデータを読み出す。ストレージ制御装置１００は、ＳＳＤ２３０とＳＳＤ２３１とにＧＣの実行要求を送信可能である。ストレージ制御装置１００の処理は、例えば、ストレージ制御装置１００が有するドライバ２４０によって実行される。
【００３３】
ＳＳＤ２３０は、ＳＳＤコントローラ２６０と、フラッシュメモリ２７０とを有する。ＳＳＤコントローラ２６０は、ストレージ制御装置１００の制御にしたがって、フラッシュメモリ２７０からデータを読み出し、または、フラッシュメモリ２７０にデータを書き込む。ＳＳＤコントローラ２６０は、ストレージ制御装置１００からのＧＣの実行要求を受け付け、または自動で、ＧＣを実行する。
【００３４】
ＳＳＤ２３１は、ＳＳＤ２３０と同様に、ＳＳＤコントローラ２６１と、フラッシュメモリ２７１とを有する。ＳＳＤコントローラ２６１は、ＳＳＤコントローラ２６０と同様であるため、説明を省略する。フラッシュメモリ２７１は、フラッシュメモリ２７０と同様であるため、説明を省略する。
【００３５】
図３は、ストレージ制御システム２００の一例（その２）を示す説明図である。図３において、ストレージ制御システム２００は、図２と同様に、ストレージ装置２１０とホスト装置２２０とを含む。ストレージ制御システム２００において、ストレージ装置２１０とホスト装置２２０とは、チャネル２１１，２２１を介して接続される。
【００３６】
図３の例では、ストレージ装置２１０は、ＲＡＩＤ１０構成である。ストレージ装置２１０は、ストレージ制御装置１００と、ＳＳＤ３００と、ＳＳＤ３０１と、ＳＳＤ３０２と、ＳＳＤ３０３とを有する。ストレージ制御装置１００は、例えば、ＲＡＩＤコントローラによって実現される。ストレージ制御装置１００は、チャネル２１１，２２１を介してホスト装置２２０と通信可能であって、ホスト装置２２０からアクセス要求を受け付ける。
【００３７】
ストレージ制御装置１００は、ホスト装置２２０からライト要求を受け付けた場合には、ＳＳＤ３００とＳＳＤ３０１とにデータを分散して書き込むとともに、ＳＳＤ３０２とＳＳＤ３０３とにも同じ内容のデータを分散して書き込む。ストレージ制御装置１００は、ホスト装置２２０からリード要求を受け付けた場合には、ＳＳＤ３００とＳＳＤ３０１とＳＳＤ３０２とＳＳＤ３０３とのうち、主たるＳＳＤ３００とＳＳＤ３０２とからデータを読み出す。ストレージ制御装置１００は、ＳＳＤ３００とＳＳＤ３０１とＳＳＤ３０２とＳＳＤ３０３とにＧＣの実行要求を送信可能である。ストレージ制御装置１００の処理は、例えば、ストレージ制御装置１００が有するドライバ２４０によって実行される。
【００３８】
ＳＳＤ３００〜３０３は、それぞれ、ＳＳＤコントローラ３１０〜３１３やフラッシュメモリ３２０〜３２３を有する。ＳＳＤコントローラ３１０〜３１３は、図２に示したＳＳＤコントローラ２６０などと同様であるため、説明を省略する。フラッシュメモリ３２０〜３２３は、図２に示したフラッシュメモリ２７０などと同様であるため、説明を省略する。
【００３９】
図４は、ストレージ制御システム２００の一例（その３）を示す説明図である。図４において、ストレージ制御システム２００は、図２と同様に、ストレージ装置２１０とホスト装置２２０とを含む。ストレージ制御システム２００において、ストレージ装置２１０とホスト装置２２０とは、チャネル２１１，２２１を介して接続される。
【００４０】
図４の例では、ストレージ装置２１０は、ＲＡＩＤ５構成である。ストレージ装置２１０は、ストレージ制御装置１００と、ＳＳＤ４００と、ＳＳＤ４０１と、ＳＳＤ４０２とを有する。ストレージ制御装置１００は、例えば、ＲＡＩＤコントローラによって実現される。ストレージ制御装置１００は、チャネル２１１，２２１を介してホスト装置２２０と通信可能であって、ホスト装置２２０からアクセス要求を受け付ける。
【００４１】
ストレージ制御装置１００は、ホスト装置２２０からライト要求を受け付けた場合には、ＳＳＤ４００とＳＳＤ４０１とにデータを分散して書き込むとともに、ＳＳＤ４０２に誤り訂正符号を書き込む。ストレージ制御装置１００は、ホスト装置２２０からリード要求を受け付けた場合には、ＳＳＤ４００とＳＳＤ４０１とからデータを読み出す。ストレージ制御装置１００は、ＳＳＤ４００とＳＳＤ４０１とＳＳＤ４０２とにＧＣの実行要求を送信可能である。ストレージ制御装置１００の処理は、例えば、ストレージ制御装置１００が有するドライバ２４０によって実行される。
【００４２】
ＳＳＤ４００〜４０２は、それぞれ、ＳＳＤコントローラ４１０〜４１２やフラッシュメモリ４２０〜４２２を有する。ＳＳＤコントローラ４１０〜４１２は、図２に示したＳＳＤコントローラ２６０などと同様であるため、説明を省略する。フラッシュメモリ４２０〜４２２は、図２に示したフラッシュメモリ２７０などと同様であるため、説明を省略する。
【００４３】
（ストレージ制御装置１００のハードウェア構成例）
次に、図５を用いて、ストレージ制御装置１００のハードウェア構成例について説明する。
【００４４】
図５は、ストレージ制御装置１００のハードウェア構成例を示すブロック図である。図５において、ストレージ制御装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５０１と、メモリ５０２と、ＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）５０３と、ＩＯＣ（ｓｔｏｒａｇｅ  Ｉ／Ｏ  Ｃｏｎｔｒｏｌｌｅｒ）５０４とを有する。また、各構成部は、バスによってそれぞれ接続される。
【００４５】
ここで、ＣＰＵ５０１は、ストレージ制御装置１００の全体の制御を司る。メモリ５０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ５０１のワークエリアとして使用される。各種プログラムは、例えば、実施の形態にかかるストレージ制御プログラムなどを含んでもよい。メモリ５０２に記憶されるプログラムは、ＣＰＵ５０１にロードされることで、コーディングされている処理をＣＰＵ５０１に実行させる。
【００４６】
ＣＡ５０３は、チャネル２１１，２２１を介して他のコンピュータに接続される。ＣＡ５０３は、例えば、図２に示したホスト装置２２０に接続される。そして、ＣＡ５０３は、チャネル２１１，２２１と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ＩＯＣ５０４は、ＳＳＤに接続される。そして、ＩＯＣ５０４は、ＳＳＤからのデータの入出力を制御する。
【００４７】
（各種コマンドのデータ構造）
次に、図６および図７を用いて、ストレージ制御装置１００が発行可能な、ＳＢＣ−４（ＳＣＳＩ  Ｂｌｏｃｋ  Ｃｏｍｍａｎｄｓ−４）に規定された各種コマンドのデータ構造について説明する。
【００４８】
図６は、ＢＧコントロールコマンド６００のデータ構造を示す説明図である。ＢＧコントロールコマンド６００は、２バイト目の６，７ビット目にＢＯ＿ＣＴＬを有する。ＢＯ＿ＣＴＬは、００ｂ、０１ｂ、１０ｂ、１１ｂのいずれかである。００ｂは、バックグラウンド処理を変更しないことを示す。バックグラウンド処理は、例えば、ＧＣである。０１ｂは、設定している高度なバックグラウンド処理を開始することを示す。１０ｂは、設定している高度なバックグラウンド処理を止めることを示す。１１ｂは、リザーブを示す。また、ＢＧコントロールコマンド６００は、３バイト目にＢＯ＿ＴＩＭＥを有する。ＢＯ＿ＴＩＭＥは、ＧＣを実行する時間を１００ｍｓ単位で示す。１００ｍｓは、ＧＣにおけるイレース処理にかかる最低時間である。
【００４９】
図７は、ＢＧ設定コマンド７００のデータ構造を示す説明図である。ＢＧ設定コマンド７００は、４バイト目の６，７ビット目にＢＯ＿ＭＯＤＥを有する。ＢＯ＿ＭＯＤＥは、００ｂ、０１ｂのいずれかである。００ｂは、ＧＣよりもリードおよびライトを優先することを示す。０１ｂは、リードおよびライトよりもＧＣを優先することを示す。
【００５０】
（フリースペースの容量と比較する閾値の一例）
次に、図８を用いて、ストレージ制御装置１００に設定され、ストレージ制御装置１００がＧＣを実行するか否かを判定する際にフリースペースの容量と比較する閾値の一例について説明する。
【００５１】
図８は、フリースペースの容量と比較する閾値の一例を示す説明図である。図８に示すように、ＳＳＤは、製造時などに、自動でＧＣを実行するか否かを判定する際にフリースペースの容量と比較する低閾値（Ｌｏｗ＿Ｔｈｒｅｓｈｏｌｄ）が設定済みである。低閾値の単位は、例えば、１０％である。低閾値は、用途に合わせて変更可能である。これに対し、ストレージ制御装置１００は、ＳＳＤが自動でＧＣを実行するよりも前に、ＳＳＤにＧＣを実行させるために、ＳＳＤに設定された低閾値よりも大きい高閾値（Ｈｉｇｈ＿Ｔｈｒｅｓｈｏｌｄ）を設定する。高閾値の単位は、例えば、２０％である。高閾値は、用途に合わせて変更可能である。
【００５２】
フリースペースの容量が１００％以下かつ高閾値より大きい範囲は、ＧＣが実行されない範囲（Ｎｏ  ＧＣ）である。フリースペースの容量が高閾値以下かつ低閾値より大きい範囲は、ストレージ制御装置１００の制御によってＳＳＤがＧＣを実行する範囲（Ｈｏｓｔ  ｉｎｉｔｉａｔｅｄ  ＧＣ）である。フリースペースの容量が低閾値以下かつ０％以上の範囲は、ＳＳＤが自動でＧＣを実行する範囲（Ｄｅｖｉｃｅ  ｉｎｉｔｉａｔｅｄ  ＧＣ）である。
【００５３】
（ＳＳＤ状態テーブル９００の記憶内容の一例）
次に、図９を用いて、ストレージ制御装置１００の記憶部が記憶するＳＳＤ状態テーブル９００の記憶内容の一例について説明する。ＳＳＤ状態テーブル９００は、例えば、図３に示したストレージ制御装置１００のメモリ５０２により実現される。
【００５４】
図９は、ＳＳＤ状態テーブル９００の記憶内容の一例を示す説明図である。図４に示すように、ＳＳＤ状態テーブル９００は、ＳＳＤ  ＩＤと、ＧＣ実行状態と、フリースペースとのフィールドを有する。ＳＳＤ状態テーブル９００は、ＳＳＤごとに各フィールドに情報を設定することにより、実行状況情報がレコードとして記憶される。
【００５５】
ＳＳＤ  ＩＤのフィールドには、ＳＳＤを識別する情報が設定される。ＧＣ実行状態のフィールドには、ＳＳＤがＧＣを実行中であるか否かを示す情報が設定される。フリースペースのフィールドには、ＳＳＤのフリースペースの容量が設定される。
【００５６】
（ストレージ制御装置１００の機能的構成例）
次に、図１０を用いて、ストレージ制御装置１００の機能的構成例について説明する。
【００５７】
図１０は、ストレージ制御装置１００の機能的構成例を示すブロック図である。ストレージ制御装置１００は、管理部１００１と、受付部１００２と、リード部１００３と、ライト部１００４とを含む。管理部１００１〜ライト部１００４は、制御部となる機能である。管理部１００１〜ライト部１００４は、具体的には、例えば、図５に示したメモリ５０２などの記憶領域に記憶されたプログラムをＣＰＵ５０１に実行させることにより、ＣＡ５０３により、または、ＩＯＣ５０４により、その機能を実現する。各機能部の処理結果は、例えば、メモリ５０２などの記憶領域に記憶される。
【００５８】
管理部１００１は、ストレージ装置２１０を形成する複数の記憶装置のいずれかの記憶装置のフリースペースの容量を計測する。ストレージ装置２１０は、データを冗長化して記憶する装置である。ストレージ装置２１０は、例えば、ミラーリングによりデータを記憶する装置である。ストレージ装置２１０は、具体的には、ＲＡＩＤ１構成である。また、ストレージ装置２１０は、誤り訂正符号を用いてデータを分散して記憶する装置であってもよい。ストレージ装置２１０は、具体的には、ＲＡＩＤ５構成であってもよい。
【００５９】
記憶装置は、記憶媒体を有し、ＧＣを実行することによりフリースペースを管理する装置である。記憶装置は、例えば、ＳＳＤである。記憶媒体は、例えば、半導体メモリである。以下、記憶装置を「ＳＳＤ」として説明する。管理部１００１は、例えば、それぞれのＳＳＤにコマンドを発行し、それぞれのＳＳＤのフリースペースの容量を計測する。これにより、管理部１００１は、それぞれのＳＳＤがＧＣを実行することが好ましいか否かを判定する際に用いられるフリースペースの容量を計測することができる。
【００６０】
管理部１００１は、計測したフリースペースの容量が閾値以下であれば、いずれかのＳＳＤにＧＣを実行させる。ＧＣの実行時間は、例えば、１秒に設定される。このとき、管理部１００１は、ストレージ装置２１０がＲＡＩＤ１構成であれば、いずれかのＳＳＤがＧＣを終了するまで、ミラーリングによりいずれかのＳＳＤと同じ内容のデータを記憶するＳＳＤにはＧＣを実行させない。管理部１００１は、いずれかのＳＳＤがＧＣを終了すると、ミラーリングによりいずれかのＳＳＤと同じ内容のデータを記憶するＳＳＤにＧＣを実行させる。管理部１００１は、ＳＳＤにＧＣを実行させたとき、および、ＳＳＤがＧＣを終了したときに、ＳＳＤ状態テーブル９００を更新して、ＳＳＤがＧＣを実行中であるか否かを管理する。これにより、管理部１００１は、ミラーリングにより同じ内容のデータを記憶する複数のＳＳＤが、同時にＧＣを実行しないようにすることができる。
【００６１】
管理部１００１は、計測したフリースペースの容量が閾値以下であれば、いずれかのＳＳＤにＧＣを実行させる。このとき、管理部１００１は、ストレージ装置２１０がＲＡＩＤ５構成であれば、いずれかのＳＳＤがＧＣを終了するまで、いずれかのＳＳＤとは異なるＳＳＤにはＧＣを実行させない。管理部１００１は、ＳＳＤにＧＣを実行させたとき、および、ＳＳＤがＧＣを終了したときに、ＳＳＤ状態テーブル９００を更新して、ＳＳＤがＧＣを実行中であるか否かを管理する。これにより、管理部１００１は、複数のＳＳＤが、同時にＧＣを実行しないようにすることができる。
【００６２】
管理部１００１は、フリースペースの容量と比較する閾値に、いずれかのＳＳＤが自動でＧＣを実行すると判定するときのフリースペースの容量よりも大きい値を採用することができる。ＳＳＤが自動でＧＣを実行すると判定するときのフリースペースの容量は、例えば、上述した低閾値である。管理部１００１は、例えば、フリースペースの容量と比較する閾値に、上述した高閾値を採用する。これにより、管理部１００１は、ＳＳＤが自動でＧＣを実行しないようにして、ＳＳＤがＧＣを実行中であるか否かを管理しやすくすることができる。
【００６３】
管理部１００１は、複数のＳＳＤのそれぞれのＳＳＤがＧＣを実行中であるか否かを監視する。管理部１００１は、例えば、ＳＳＤ状態テーブル９００を参照して、それぞれのＳＳＤがＧＣを実行中であるか否かを判定する。管理部１００１は、例えば、ＳＳＤ状態テーブル９００がなくても、複数のＳＳＤのうち、計測したフリースペースの容量が低閾値以下であるＳＳＤがあれば、ＧＣを実行中であると判定してもよい。
【００６４】
管理部１００１は、ＧＣを実行中であるか否かを問い合わせるコマンドにＳＳＤが対応していれば、ＳＳＤに対してＧＣを実行中であるか否かを問い合わせることにより、それぞれのＳＳＤがＧＣを実行中であるか否かを監視してもよい。これにより、管理部１００１は、それぞれのＳＳＤが、データを読み出しおよび書き込み可能な状態であるか否かを判定することができる。
【００６５】
受付部１００２は、ストレージ装置２１０に対するアクセス要求を受け付ける。アクセス要求は、例えば、リード要求、または、ライト要求である。受付部１００２は、例えば、ホスト装置２２０から、ストレージ装置２１０に対するリード要求を受け付ける。また、受付部１００２は、例えば、ホスト装置２２０から、ストレージ装置２１０に対するライト要求を受け付ける。
【００６６】
リード部１００３は、ストレージ装置２１０に対するリード要求を受け付けた場合、複数のＳＳＤのうちリード要求の対象になるＳＳＤがＧＣを実行中であるか否かを判定する。リード部１００３は、ＧＣを実行中であれば、複数のＳＳＤのうちリード要求の対象になるＳＳＤとは異なる他のＳＳＤからリード要求されたデータを取得する。
【００６７】
リード部１００３は、例えば、ストレージ装置２１０がＲＡＩＤ１構成であれば、リード要求の対象になる、主たるＳＳＤがＧＣを実行中であるか否かを判定する。ここで、リード部１００３は、主たるＳＳＤがＧＣを実行中である場合、他のＳＳＤにミラーリングにより記憶されたリード要求されたデータと同じ内容のデータを取得する。一方で、リード部１００３は、主たるＳＳＤがＧＣを実行中ではない場合、主たるＳＳＤからリード要求されたデータを取得する。これにより、リード部１００３は、リード要求の対象になるＳＳＤがＧＣを終了する前であっても、リード要求の要求元に応答可能になる。
【００６８】
リード部１００３は、例えば、ストレージ装置２１０がＲＡＩＤ５構成であれば、リード要求されたデータの一部分を記憶するＳＳＤがＧＣを実行中であるか否かを判定する。また、リード部１００３は、リード要求されたデータに対応する誤り訂正符号を記憶する、リード要求の対象になるＳＳＤがＧＣを実行中であるか否かを判定する。
【００６９】
ここで、リード部１００３は、データの一部分を記憶するＳＳＤがＧＣを実行中であれば、他のＳＳＤからリード要求されたデータのうち残りの部分と、リード要求されたデータに対応する誤り訂正符号とを取得し、リード要求されたデータを生成する。一方で、リード部１００３は、誤り訂正符号を記憶するＳＳＤがＧＣを実行中であれば、他のＳＳＤからリード要求されたデータのそれぞれの部分を取得し、リード要求されたデータを生成する。これにより、リード部１００３は、リード要求の対象になるＳＳＤがＧＣを終了する前であっても、リード要求の要求元に応答可能になる。
【００７０】
リード部１００３は、リード要求されたデータを取得したときにリード要求の要求元に応答する。また、リード部１００３は、リード要求されたデータと同じ内容のデータを取得したときにリード要求の要求元に応答してもよい。これにより、リード部１００３は、リード要求の対象になるＳＳＤがＧＣを終了するまで待たなくても、リード要求されたデータと同じ内容のデータを取得したときにリード要求の要求元に対して応答することができる。このため、リード部１００３は、アクセス要求に対する応答性能の低下を抑制することができる。
【００７１】
ライト部１００４は、例えば、ライトバック形式でデータをＳＳＤに書き込むため、ストレージ装置２１０に対するライト要求を受け付けた場合、ライト要求の要求元に応答する。これにより、ライト部１００４は、アクセス要求に対する応答性能の低下を抑制することができる。
【００７２】
ライト部１００４は、ストレージ装置２１０に対するライト要求を受け付けた場合、複数のＳＳＤのうちライト要求の対象になるＳＳＤがＧＣを実行中であるか否かを判定する。ライト部１００４は、ライト要求の対象になるいずれかのＳＳＤがＧＣを実行中であれば、ライト要求されたデータを一時記憶領域に記憶する。一時記憶領域は、例えば、キューである。キューは、例えば、ＳＳＤごとに生成される。キューには、ライト要求されたデータと、ライト要求の対象になるＳＳＤと、ＬＢＡ、ＳＣＳＩコマンドなどが対応付けて記憶される。
【００７３】
ライト部１００４は、例えば、ストレージ装置２１０がＲＡＩＤ１構成である場合、主たるＳＳＤ、および、ミラーリングにより主たるＳＳＤと同じ内容のデータを記憶する他のＳＳＤが、ＧＣを実行中であるか否かを判定する。ここで、ライト部１００４は、主たるＳＳＤがＧＣを実行中であれば、主たるＳＳＤに対応付けて、主たるＳＳＤに書き込むデータをキューに記憶する。一方で、ライト部１００４は、他のＳＳＤがＧＣを実行中であれば、他のＳＳＤに対応付けて、他のＳＳＤに書き込むデータをキューに記憶する。
【００７４】
ライト部１００４は、例えば、ストレージ装置２１０がＲＡＩＤ５構成である場合、ライト要求されたデータの一部分を書き込むＳＳＤ、および、ライト要求されたデータに対応する誤り訂正符号を書き込むＳＳＤが、ＧＣを実行中であるか否かを判定する。ここで、ライト部１００４は、ライト要求されたデータの一部分を書き込むＳＳＤがＧＣを実行中であれば、ライト要求されたデータの一部分を書き込むＳＳＤに対応付けて、ライト要求されたデータの一部分をキューに記憶する。一方で、ライト部１００４は、ライト要求されたデータに対応する誤り訂正符号を書き込むＳＳＤがＧＣを実行中であれば、誤り訂正符号を書き込むＳＳＤに対応付けて、誤り訂正符号をキューに記憶する。
【００７５】
ライト部１００４は、ライト要求の対象になるＳＳＤがＧＣを終了すると、一時記憶領域に記憶されたデータをまとめてライト要求の対象になるＳＳＤに書き込む。ライト部１００４は、キューに記憶されたデータのうち、ＳＳＤの同じ単位記憶領域に書き込まれるデータをまとめて、まとめたデータをＳＳＤに１回で書き込む。ライト部１００４は、キューに記憶されたデータのうち、ＳＳＤの連続する記憶領域に書き込まれるデータをまとめて、まとめたデータをＳＳＤに連続して書き込んでもよい。これにより、ライト部１００４は、書込回数の低減化を図ることができ、書込性能の向上を図ることができる。
【００７６】
ライト部１００４は、ライト要求の対象になるＳＳＤがＧＣを終了する前に、さらにライト要求されたデータの書込先になる記憶領域に対するアクセス要求を受け付けた場合、ライト要求の対象になるＳＳＤにＧＣを中断させる。そして、ライト部１００４は、ライト要求されたデータをライト要求の対象になるＳＳＤに書き込む。これにより、ライト部１００４は、ＳＳＤにデータを書き込まなければＳＳＤからデータを読み出すことが好ましくない場合にも、リード要求の要求元に応答可能になる。
【００７７】
また、これにより、ライト部１００４は、ＳＳＤに以前にライト要求されたデータを書き込まなければＳＳＤに今回ライト要求されたデータを書き込むことが好ましくない場合に、以前にライト要求されたデータを書き込むことができる。これにより、ライト部１００４は、今回のライト要求の要求元に応答することができ、アクセス要求に対する応答性能の低下を抑制することができる。
【００７８】
（ストレージ制御装置１００の機能的構成の具体例）
次に、図１１を用いて、ストレージ制御装置１００の機能的構成の具体例について説明する。図１１の例では、図２に示したストレージ制御システム２００におけるストレージ制御装置１００を例に挙げて、ストレージ制御装置１００の機能的構成の具体例について説明する。
【００７９】
図１１は、ストレージ制御装置１００の機能的構成の具体例を示すブロック図である。ストレージ制御装置１００が有するドライバ２４０は、例えば、ＳＳＤ状態テーブル９００を有し、ＧＣ初期化処理１１０１と、ＧＣ制御処理１１０２と、リード処理１１０３と、ライト処理１１０４とを実行可能である。
【００８０】
ＧＣ初期化処理１１０１は、ＳＳＤ状態テーブル９００を初期化することにより、他の処理の準備を行う。ＧＣ制御処理１１０２は、例えば、ＳＳＤ２３０，２３１のフリースペースの容量を取得し、ＳＳＤ２３０，２３１のフリースペースの容量が高閾値以下になったときにＧＣを実行させる制御を行う。ＧＣ制御処理１１０２によれば、例えば、上述した管理部１００１を実現することができる。
【００８１】
リード処理１１０３は、例えば、ＳＳＤ２３０，２３１にリードコマンドを送信することにより、ＳＳＤ２３０，２３１からデータを読み出す制御を行う。リード処理１１０３は、ＳＳＤ状態テーブル９００を参照して、ＳＳＤ２３０，２３１のいずれにリードコマンドを送信するかを制御する。リード処理１１０３によれば、例えば、上述したリード部１００３を実現することができる。
【００８２】
ライト処理１１０４は、例えば、ＳＳＤ２３０，２３１にライトコマンドを送信することにより、ＳＳＤ２３０，２３１にデータを書き込む制御を行う。ライト処理１１０４は、ＳＳＤ状態テーブル９００を参照して、ＳＳＤ２３０，２３１にいつライトコマンドを送信するかを制御する。ライト処理１１０４によれば、例えば、上述したライト部１００４を実現することができる。
【００８３】
以下の説明では、図２〜図４に示したストレージ制御システム２００におけるストレージ制御装置１００の動作について説明する。
【００８４】
（図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の一例）
まず、図１２〜図１４を用いて、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の一例について説明する。ここで、図２に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の一例は、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の一例と同様であるため、説明を省略する。
【００８５】
図１２は、図３に示したストレージ制御システム２００においてＳＳＤ状態テーブル９００を更新する一例を示す説明図である。図１２において、ストレージ制御装置１００は、所定時間ごとに、それぞれのＳＳＤ３００〜３０３から、それぞれのＳＳＤ３００〜３０３のフリースペースの容量を取得する。そして、ストレージ制御装置１００は、取得したフリースペースの容量に基づいて、ＳＳＤ状態テーブル９００を更新する。
【００８６】
これにより、ストレージ制御装置１００は、それぞれのＳＳＤがＧＣを実行することが好ましいか否かを判定する際に用いられるフリースペースの容量を取得することができる。そして、ストレージ制御装置１００は、ＳＳＤが自動でＧＣを実行する前に、ＳＳＤにＧＣを実行させることにより、ＳＳＤのＧＣ実行状態を管理しやすくすることができる。ここで、図１３の説明に移行する。
【００８７】
図１３は、図３に示したストレージ制御システム２００においてデータを読み出す一例を示す説明図である。図１３において、ストレージ制御装置１００は、それぞれのＳＳＤ３００〜３０３のフリースペースの容量が高閾値以下であるか否かを判定する。ストレージ制御装置１００は、例えば、ＳＳＤ３０１のフリースペースの容量が高閾値以下である場合、ＳＳＤ３０１にＧＣを実行させるコマンドを発行する。また、ストレージ制御装置１００は、ＳＳＤ３０１とともにデータを分散して記憶するＳＳＤ３０３にもＧＣを実行させるコマンドを発行する。ストレージ制御装置１００は、ＳＳＤ状態テーブル９００を用いて、ＳＳＤ３０１，３０３のＧＣ実行状態を管理する。
【００８８】
ここで、ストレージ制御装置１００は、ＳＳＤ３０１とＳＳＤ３０３とがＧＣを終了するまでは、ミラーリングによりＳＳＤ３０１とＳＳＤ３０３と同じ内容のデータを記憶するＳＳＤ３００とＳＳＤ３０２とにはＧＣを実行させないようにする。そして、ストレージ制御装置１００は、ＳＳＤ３０１とＳＳＤ３０３とがＧＣを終了するまでは、ミラーリングによりＳＳＤ３０１とＳＳＤ３０３と同じ内容のデータを記憶するＳＳＤ３００とＳＳＤ３０２とからデータの読み出しを行うようにする。
【００８９】
その後、ストレージ制御装置１００は、ＳＳＤ３０１とＳＳＤ３０３とがＧＣを終了すると、ミラーリングによりＳＳＤ３０１とＳＳＤ３０３と同じ内容のデータを記憶するＳＳＤ３００とＳＳＤ３０２にＧＣを実行させるコマンドを発行する。ストレージ制御装置１００は、ＳＳＤ状態テーブル９００を用いて、ＳＳＤ３０１〜３０３のＧＣ実行状態を管理する。
【００９０】
ここで、ストレージ制御装置１００は、ＳＳＤ３００とＳＳＤ３０２とがＧＣを終了するまでは、ＳＳＤ３０１とＳＳＤ３０３とにはＧＣを実行させないようにする。また、ストレージ制御装置１００は、ＳＳＤ３００とＳＳＤ３０２がＧＣを終了するまでは、ＳＳＤ３０１とＳＳＤ３０３とからデータの読み出しを行うようにする。ストレージ制御装置１００は、ＳＳＤ３００とＳＳＤ３０２とがＧＣを終了すると、ＳＳＤ状態テーブル９００を用いて、ＳＳＤ３００，３０２のＧＣ実行状態を管理する。
【００９１】
これにより、ストレージ制御装置１００は、ミラーリングにより同じ内容のデータを記憶する１対のＳＳＤが同時にＧＣを実行しないようにし、１対のＳＳＤの少なくとも一方のＳＳＤがデータの読み出し可能な状態になるようにすることができる。結果として、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを実行中であっても、リード要求されたデータと同じ内容のデータを取得可能であり、リード要求の要求元に応答可能になる。
【００９２】
ここでは、ストレージ制御装置１００がＳＳＤにＧＣを実行させることによりＳＳＤのＧＣ実行状態を管理しながら、ＧＣを実行中ではないＳＳＤからデータを読み出す場合について説明したが、これに限らない。例えば、ストレージ制御装置１００は、それぞれのＳＳＤのフリースペースの容量に基づいて、それぞれのＳＳＤがＧＣを実行中であるか否かを判定し、データを読み出すＳＳＤを決定するようにしてもよい。
【００９３】
具体的には、例えば、ＳＳＤ３００とＳＳＤ３０２とのフリースペースの容量が低閾値以下であり、ＳＳＤ３０１とＳＳＤ３０３とのフリースペースの容量が低閾値より大きい場合がある。この場合、ストレージ制御装置１００は、ＳＳＤ３００とＳＳＤ３０２とがＧＣを実行中であり、ＳＳＤ３０１とＳＳＤ３０３とがＧＣを実行中ではないと判定し、ＳＳＤ３０１とＳＳＤ３０３とからデータを読み出すようにする。
【００９４】
一方で、具体的には、例えば、ＳＳＤ３００とＳＳＤ３０２とのフリースペースの容量が低閾値より大きく、ＳＳＤ３０１とＳＳＤ３０３とのフリースペースの容量が低閾値以下である場合がある。この場合、ストレージ制御装置１００は、ＳＳＤ３００とＳＳＤ３０２とがＧＣを実行中ではなく、ＳＳＤ３０１とＳＳＤ３０３とがＧＣを実行中であると判定し、ＳＳＤ３００とＳＳＤ３０２とからデータを読み出すようにする。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを実行中であっても、リード要求されたデータと同じ内容のデータを取得可能であり、リード要求の要求元に応答可能になる。
【００９５】
また、例えば、ストレージ制御装置１００は、それぞれのＳＳＤにＧＣを実行中であるか否かを問い合わせて、データを読み出すＳＳＤを決定するようにしてもよい。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを実行中であっても、リード要求されたデータと同じ内容のデータを取得可能であり、リード要求の要求元に応答可能になる。ここで、図１４の説明に移行する。
【００９６】
図１４は、図３に示したストレージ制御システム２００においてデータを書き込む一例を示す説明図である。図１４において、ストレージ制御装置１００は、ＳＳＤ３０１とＳＳＤ３０３とがＧＣを実行中に、ＳＳＤ３００に対してライトデータ１を書き込むライト要求を受け付けたとする。
【００９７】
ここで、ストレージ制御装置１００は、ライト要求に応じて、ミラーリングによりＳＳＤ３００とＳＳＤ３０１に対してライトデータ１を書き込むことになる。ストレージ制御装置１００は、ライトバック形式にしたがって、ＳＳＤ３００とＳＳＤ３０１に対してライトデータ１が書き込まれる前であっても、ライト要求を受け付けたときにライト要求の要求元に応答しておく。
【００９８】
このとき、ストレージ制御装置１００は、ＳＳＤ３０１がＧＣを実行中であるため、ＳＳＤ３０１と対応付けてライトデータ１をキューに記憶し、ＳＳＤ３０１に対するライトデータ１の書き込みを待つ。一方で、ストレージ制御装置１００は、ＳＳＤ３００にはライトデータ１を書き込む。
【００９９】
その後、ストレージ制御装置１００は、ＳＳＤ３０１がＧＣを終了すれば、キューに記憶したライトデータ１をＳＳＤ３０１に書き込む。ストレージ制御装置１００は、キューに記憶したデータが複数あれば、まとめてＳＳＤに書き込むことにより、書込回数の低減化を図ってもよい。
【０１００】
また、ストレージ制御装置１００は、ＳＳＤ３０１がＧＣを終了する前に、ＳＳＤ３００においてライトデータ１にライトデータ２を上書きするライト要求を受け付けたとする。ここで、ストレージ制御装置１００は、ミラーリングによりＳＳＤ３００とＳＳＤ３０１において、ライトデータ１にライトデータ２を上書きすることになる。実際には、ＳＳＤにおいては、ライトデータ１はライトデータ２に形式上上書きされることになり、ライトデータ１は削除されず不要なデータとして設定され、ライトデータ２は新たに書き込まれることになる。
【０１０１】
このとき、ストレージ制御装置１００は、ライトバック形式にしたがえば、ＳＳＤ３００とＳＳＤ３０１に対してライトデータ２が書き込まれる前であっても、ライト要求を受け付けたときにライト要求の要求元に応答することになる。しかしながら、ＳＳＤに以前にライト要求されたライトデータ１を書き込まなければ、ライトバック形式にしたがって今回のライト要求の要求元に応答することが好ましくない場合がある。
【０１０２】
このため、ストレージ制御装置１００は、ＳＳＤ３０１にＧＣを中断させ、ライトデータ１をキューから取り出して、ＳＳＤ３０１にライトデータ１を書き込む。以下の説明では、ＧＣを中断させ、キューから取り出したデータをＳＳＤに書き込むことを「追い出しライト」と表記する場合がある。ストレージ制御装置１００は、ＳＳＤ３０１にライトデータ１を書き込むと、ライトデータ２のライト要求の要求元に応答する。ストレージ制御装置１００は、ＳＳＤ３０１と対応付けてライトデータ２をキューに記憶し、ＳＳＤ３０１にＧＣを再開させ、ＳＳＤ３０１に対するライトデータ２の書き込みを待つ。
【０１０３】
ストレージ制御装置１００は、さらにＳＳＤ３０１にライトデータ２を書き込んでから、ＳＳＤ３０１にＧＣを再開させてもよい。一方で、ストレージ制御装置１００は、ＳＳＤ３００にライトデータ２を書き込む。これにより、ストレージ制御装置１００は、ＳＳＤに以前にライト要求されたデータを書き込まなければ、今回のライト要求の要求元に応答することが好ましくない場合にも、アクセス要求に対する応答性能の低下を抑制することができる。
【０１０４】
ここでは、ＳＳＤに以前にライト要求されたライトデータを書き込まなければ、今回のライト要求の要求元に応答することが好ましくない場合について説明したが、これに限らない。例えば、ＳＳＤに以前にライト要求されたライトデータを書き込まなくても、今回のライト要求の要求元に応答してもよい場合もある。この場合、ストレージ制御装置１００は、以前にライト要求されたライトデータと、今回ライト要求されたライトデータとをマージして、新たなライトデータをキューに記憶してもよい。これにより、ストレージ制御装置１００は、書き込み性能の低下を抑制することができる。
【０１０５】
ここでは、ＳＳＤに以前にライト要求されたライトデータを書き込まなければ、今回のライト要求の要求元に応答することが好ましくない場合について説明したが、これに限らない。例えば、ＳＳＤに以前にライト要求されたライトデータを書き込まなければ、以前にライト要求されたライトデータを読み出すリード要求の要求元に応答することが好ましくない場合があってもよい。この場合、ストレージ制御装置１００は、ＳＳＤにＧＣを中断させ、以前にライト要求されたライトデータを書き込んでから、リード要求の要求元に応答する。これにより、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【０１０６】
また、例えば、ＳＳＤに以前にライト要求されたライトデータを書き込まなくても、以前にライト要求されたライトデータを読み出すリード要求の要求元に応答してもよい場合もある。この場合、ストレージ制御装置１００は、ＧＣを実行中ではないＳＳＤからリード要求されたデータと同じ内容のデータを読み出して、リード要求の要求元に応答する。これにより、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【０１０７】
（ストレージ制御装置１００の動作の流れの一例）
次に、図１５を用いて、図２に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例について説明する。
【０１０８】
図１５は、図２に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例を示すシーケンス図である。図１５において、ストレージ制御装置１００は、データ１のライト要求１を受け付ける（ステップＳ１５０１）。ストレージ制御装置１００は、ライト要求１に応じてデータ１のライトコマンドをＳＳＤ２３０に送信する（ステップＳ１５０２）。このとき、ストレージ制御装置１００は、ＳＳＤ２３１のフリースペースの容量が閾値以下になったため、ライト要求１に応じたデータ１のライトコマンドをＳＳＤ２３１に送信する前にＧＣを実行させるコマンドをＳＳＤ２３１に送信する（ステップＳ１５０３）。
【０１０９】
ストレージ制御装置１００は、データ１のリード要求１を受け付けるが、データ１のリード要求１に応じてデータ１のリードコマンドをＳＳＤ２３０に送信する前に、データ１のライトコマンドに対する応答があるまで待つ（ステップＳ１５０４）。ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ２３０から受け付ける（ステップＳ１５０５）。ストレージ制御装置１００は、データ１のライト終了を出力する（ステップＳ１５０６）。
【０１１０】
ストレージ制御装置１００は、データ１のライトコマンドに対する応答があると、データ１のリード要求１に応じたデータ１のリードコマンドをＳＳＤ２３０に送信する（ステップＳ１５０７）。ストレージ制御装置１００は、リード要求１に応じたデータ１をＳＳＤ２３０から受信する（ステップＳ１５０８）。そして、ストレージ制御装置１００は、データ１のリード終了を出力する（ステップＳ１５０９）。
【０１１１】
ストレージ制御装置１００は、ＳＳＤ２３１がＧＣを終了すると、ライト要求１に応じたデータ１のライトコマンドをＳＳＤ２３１に送信する（ステップＳ１５１０）。ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ２３１から受け付ける（ステップＳ１５１１）。
【０１１２】
ストレージ制御装置１００は、データ２のライト要求２を受け付ける（ステップＳ１５１２）。ストレージ制御装置１００は、受け付けたライト要求２に応じてデータ２のライトコマンドをＳＳＤ２３１に送信する（ステップＳ１５１３）。このとき、ストレージ制御装置１００は、ＳＳＤ２３０のフリースペースの容量が閾値以下になったため、ライト要求２に応じたデータ２のライトコマンドをＳＳＤ２３０に送信する前にＧＣを実行させるコマンドをＳＳＤ２３０に送信する（ステップＳ１５１４）。
【０１１３】
ストレージ制御装置１００は、データ２のリード要求２を受け付けるが、データ２のリード要求２に応じてデータ２のリードコマンドをＳＳＤ２３１に送信する前に、データ２のライトコマンドに対する応答があるまで待つ（ステップＳ１５１５）。ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ２３１から受け付ける（ステップＳ１５１６）。ストレージ制御装置１００は、データ２のライト終了を出力する（ステップＳ１５１７）。
【０１１４】
ストレージ制御装置１００は、データ２のライトコマンドに対する応答があるが、データ２のリード要求２の対象になるＳＳＤ２３０がＧＣを実行中であるため、データ２のリードコマンドをＳＳＤ２３０の代わりにＳＳＤ２３１に送信する（ステップＳ１５１８）。ストレージ制御装置１００は、リード要求２に応じたデータ２をＳＳＤ２３１から受信する（ステップＳ１５１９）。そして、ストレージ制御装置１００は、データ２のリード終了を出力する（ステップＳ１５２０）。
【０１１５】
ストレージ制御装置１００は、ＳＳＤ２３０がＧＣを終了すると、ライト要求２に応じたデータ２のライトコマンドをＳＳＤ２３０に送信する（ステップＳ１５２１）。ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ２３０から受け付ける（ステップＳ１５２２）。
【０１１６】
次に、図１６を用いて、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例について説明する。
【０１１７】
図１６は、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例を示すシーケンス図である。図１６において、ストレージ制御装置１００は、データ１のライト要求１を受け付ける（ステップＳ１６０１）。このとき、ストレージ制御装置１００は、ＳＳＤ３００のフリースペースの容量が閾値以下になったため、ライト要求１に応じたデータ１のライトコマンドをＳＳＤ３００に送信する前にＧＣを実行させるコマンドをＳＳＤ３００に送信する（ステップＳ１６０２）。また、ストレージ制御装置１００は、ライト要求１に応じてデータ１のライトコマンドをＳＳＤ３０１に送信する（ステップＳ１６０３）。
【０１１８】
ストレージ制御装置１００は、データ２のライト要求２を受け付ける（ステップＳ１６０４）。ストレージ制御装置１００は、ライト要求２に応じてデータ２のライトコマンドをＳＳＤ３０２に送信する（ステップＳ１６０５）。また、ストレージ制御装置１００は、ライト要求２に応じてデータ２のライトコマンドをＳＳＤ３０３に送信する（ステップＳ１６０６）。
【０１１９】
ストレージ制御装置１００は、データ１のリード要求１を受け付けるが、データ１のリード要求１に応じてデータ１のリードコマンドをＳＳＤ３００に送信する前に、データ１のライトコマンドに対する応答があるまで待つ（ステップＳ１６０７）。また、ストレージ制御装置１００は、データ２のリード要求２を受け付けるが、データ２のリード要求２に応じてデータ２のリードコマンドをＳＳＤ３００に送信する前に、データ２のライトコマンドに対する応答があるまで待つ（ステップＳ１６０８）。
【０１２０】
ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ３０１から受け付ける（ステップＳ１６０９）。ストレージ制御装置１００は、データ１のライトコマンドに対する応答があるが、データ１のリード要求１の対象になるＳＳＤ３００がＧＣを実行中であるため、データ１のリードコマンドをＳＳＤ３００の代わりにＳＳＤ３０１に送信する（ステップＳ１６１０）。ストレージ制御装置１００は、データ１のライト終了を出力する（ステップＳ１６１１）。
【０１２１】
ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ３０２から受け付ける（ステップＳ１６１２）。ストレージ制御装置１００は、データ２のライトコマンドに対する応答があると、データ２のリード要求２に応じたデータ２のリードコマンドをＳＳＤ３０２に送信する（ステップＳ１６１３）。また、ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ３０３から受け付ける（ステップＳ１６１４）。ストレージ制御装置１００は、データ２のライト終了を出力する（ステップＳ１６１５）。
【０１２２】
ストレージ制御装置１００は、リード要求１に応じたデータ１をＳＳＤ３０１から受信する（ステップＳ１６１６）。そして、ストレージ制御装置１００は、データ１のリード終了を出力する（ステップＳ１６１７）。ストレージ制御装置１００は、リード要求２に応じたデータ２をＳＳＤ３０２から受信する（ステップＳ１６１８）。そして、ストレージ制御装置１００は、データ２のリード終了を出力する（ステップＳ１６１９）。
【０１２３】
ストレージ制御装置１００は、ＳＳＤ３００がＧＣを終了すると、ライト要求１に応じたデータ１のライトコマンドをＳＳＤ３００に送信する（ステップＳ１６２０）。ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ３００から受け付ける（ステップＳ１６２１）。
【０１２４】
（ストレージ制御装置１００の動作の流れの他の例）
次に、図１７を用いて、図２に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例について説明する。他の例は、ストレージ制御装置１００が、上述した追い出しライトを行う場合の例である。
【０１２５】
図１７は、図２に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例を示すシーケンス図である。図１７において、ストレージ制御装置１００は、データ１のライト要求１を受け付ける（ステップＳ１７０１）。ストレージ制御装置１００は、ライト要求１に応じてデータ１のライトコマンドをＳＳＤ２３０に送信する（ステップＳ１７０２）。
【０１２６】
このとき、ストレージ制御装置１００は、ＳＳＤ２３１のフリースペースの容量が閾値以下になったため、ライト要求１に応じたデータ１のライトコマンドをＳＳＤ２３１に送信せずに、ＧＣを実行させるコマンドをＳＳＤ２３１に送信する（ステップＳ１７０３）。ストレージ制御装置１００は、ライト要求１に応じたデータ１のライトコマンドをＳＳＤ２３１に送信しなかったため、ライト要求１に応じたデータ１をＳＳＤ２３１に対応付けてキューに記憶しておく。
【０１２７】
ストレージ制御装置１００は、さらにデータ２のライト要求２を受け付けるが、データ２のライト要求２に応じてデータ２のライトコマンドをＳＳＤ２３０に送信する前に、データ１のライトコマンドに対する応答があるまで待つ（ステップＳ１７０４）。ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ２３０から受け付ける（ステップＳ１７０５）。ストレージ制御装置１００は、データ１のライト終了を出力する（ステップＳ１７０６）。
【０１２８】
ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ２３０から受け付けると、ライト要求２に応じてデータ２のライトコマンドをＳＳＤ２３０に送信する（ステップＳ１７０７）。ストレージ制御装置１００は、ＳＳＤ２３１がＧＣを実行中であるため、ライト要求２に応じたデータ２のライトコマンドをＳＳＤ２３１に送信せず、ライト要求２に応じたデータ２をＳＳＤ２３１に対応付けてキューに記憶しておく。
【０１２９】
ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ２３０から受け付ける（ステップＳ１７０８）。ストレージ制御装置１００は、データ２のライト終了を出力する（ステップＳ１７０９）。ストレージ制御装置１００は、ＳＳＤ２３１がＧＣを終了すると、ライト要求１に応じたデータ１のライトコマンドと、ライト要求２に応じたデータ２のライトコマンドとをまとめて、ＳＳＤ２３１に送信する（ステップＳ１７１０）。ストレージ制御装置１００は、データ１のライトコマンドに対する応答と、データ２のライトコマンドに対する応答とをＳＳＤ２３１から受け付ける（ステップＳ１７１１）。
【０１３０】
ストレージ制御装置１００は、データ３のライト要求３を受け付ける（ステップＳ１７１２）。ストレージ制御装置１００は、ライト要求３に応じてデータ３のライトコマンドをＳＳＤ２３１に送信する（ステップＳ１７１３）。
【０１３１】
このとき、ストレージ制御装置１００は、ＳＳＤ２３０のフリースペースの容量が閾値以下になったため、ライト要求３に応じたデータ３のライトコマンドをＳＳＤ２３０に送信せずに、ＧＣを実行させるコマンドをＳＳＤ２３０に送信する（ステップＳ１７１４）。ストレージ制御装置１００は、ライト要求３に応じたデータ３のライトコマンドをＳＳＤ２３０に送信しなかったため、ライト要求３に応じたデータ３をＳＳＤ２３０に対応付けてキューに記憶しておく。
【０１３２】
ストレージ制御装置１００は、さらにデータ４のライト要求４を受け付けるが、データ４のライト要求４に応じてデータ４のライトコマンドをＳＳＤ２３１に送信する前に、データ３のライトコマンドに対する応答があるまで待つ（ステップＳ１７１５）。ここで、データ４とデータ３とは、ＳＳＤ２３０の同じ単位記憶領域に書き込むデータであるとする。ストレージ制御装置１００は、データ３のライトコマンドに対する応答をＳＳＤ２３１から受け付ける（ステップＳ１７１６）。ストレージ制御装置１００は、データ３のライト終了を出力する（ステップＳ１７１７）。
【０１３３】
ストレージ制御装置１００は、データ４とデータ３とがＳＳＤ２３０の同じ単位記憶領域に書き込むデータであるため、データ３のライトコマンドをＳＳＤ２３０に送信する（ステップＳ１７１８）。ＳＳＤ２３０は、ライトコマンドを優先するため、ＧＣを中断する。ストレージ制御装置１００は、データ３のライトコマンドに対する応答をＳＳＤ２３０から受け付ける（ステップＳ１７１９）。ＳＳＤ２３０は、ライトコマンドに応じた処理を終えると、中断させたＧＣを再開する。
【０１３４】
ストレージ制御装置１００は、データ３のライトコマンドに対する応答をＳＳＤ２３１から受け付けたため、ライト要求４に応じたデータ４のライトコマンドをＳＳＤ２３１に送信する（ステップＳ１７２０）。ストレージ制御装置１００は、データ４のライトコマンドに対する応答をＳＳＤ２３１から受け付ける（ステップＳ１７２１）。ストレージ制御装置１００は、データ４のライト終了を出力する（ステップＳ１７２２）。
【０１３５】
次に、図１８を用いて、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例について説明する。
【０１３６】
図１８は、図３に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例を示すシーケンス図である。図１８において、ストレージ制御装置１００は、データ１のライト要求１を受け付ける（ステップＳ１８０１）。このとき、ストレージ制御装置１００は、ＳＳＤ３００のフリースペースの容量が閾値以下になったため、ライト要求１に応じてデータ１のライトコマンドをＳＳＤ３００に送信する前にＧＣを実行させるコマンドをＳＳＤ３００に送信する（ステップＳ１８０２）。また、ストレージ制御装置１００は、ライト要求１に応じてデータ１のライトコマンドをＳＳＤ３０１に送信する（ステップＳ１８０３）。
【０１３７】
ストレージ制御装置１００は、データ２のライト要求２を受け付ける（ステップＳ１８０４）。ストレージ制御装置１００は、ライト要求２に応じてデータ２のライトコマンドをＳＳＤ３０２に送信する（ステップＳ１８０５）。また、ストレージ制御装置１００は、ライト要求２に応じてデータ２のライトコマンドをＳＳＤ３０３に送信する（ステップＳ１８０６）。
【０１３８】
ストレージ制御装置１００は、データ３のライト要求３を受け付ける（ステップＳ１８０７）。ここで、データ１とデータ３とは、ＳＳＤ３００の同じ単位記憶領域に書き込むデータであるとする。ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ３０１から受け付ける（ステップＳ１８０８）。
【０１３９】
また、ストレージ制御装置１００は、データ１とデータ３とがＳＳＤ３００の同じ単位記憶領域に書き込むデータであるため、データ１のライトコマンドをＳＳＤ３００に送信する（ステップＳ１８０９）。ＳＳＤ３００は、ライトコマンドを優先するため、ＧＣを中断する。ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ３００から受け付ける（ステップＳ１８１０）。ストレージ制御装置１００は、データ１のライト終了を出力する（ステップＳ１８１１）。
【０１４０】
ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ３０２から受け付ける（ステップＳ１８１２）。また、ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ３０３から受け付ける（ステップＳ１８１３）。ストレージ制御装置１００は、データ２のライト終了を出力する（ステップＳ１８１４）。
【０１４１】
ストレージ制御装置１００は、ＳＳＤ３００がＧＣを中断すると、ライト要求３に応じたデータ３のライトコマンドをＳＳＤ３００に送信する（ステップＳ１８１５）。また、ストレージ制御装置１００は、ライト要求３に応じたデータ３のライトコマンドをＳＳＤ３０１に送信する（ステップＳ１８１６）。
【０１４２】
ストレージ制御装置１００は、データ３のライトコマンドに対する応答をＳＳＤ３００から受け付ける（ステップＳ１８１７）。ＳＳＤ３００は、一連のライトコマンドに応じた処理を終えると、中断させたＧＣを再開する。また、ストレージ制御装置１００は、データ３のライトコマンドに対する応答をＳＳＤ３０１から受け付ける（ステップＳ１８１８）。ストレージ制御装置１００は、データ３のライト終了を出力する（ステップＳ１８１９）。
【０１４３】
（ストレージ制御システム２００におけるストレージ制御装置１００の動作）
次に、図１９〜図２２を用いて、図４に示したストレージ制御システム２００の一例（その３）におけるストレージ制御装置１００の動作について説明する。
【０１４４】
図１９は、図４に示したストレージ制御システム２００においてデータを読み出す一例を示す説明図である。図１９において、ストレージ制御装置１００は、図１２と同様に、所定時間ごとに、それぞれのＳＳＤ４００〜４０２から、それぞれのＳＳＤ４００〜４０２のフリースペースの容量を取得し、ＳＳＤ状態テーブル９００を更新しているとする。
【０１４５】
ストレージ制御装置１００は、それぞれのＳＳＤ４００〜４０２のフリースペースの容量が高閾値以下であるか否かを判定する。ストレージ制御装置１００は、例えば、ＳＳＤ４０２のフリースペースの容量が高閾値以下である場合、ＳＳＤ４０２にＧＣを実行させるコマンドを発行する。ストレージ制御装置１００は、ＳＳＤ状態テーブル９００を用いて、ＳＳＤ４０２のＧＣ実行状態を管理する。
【０１４６】
ここで、ストレージ制御装置１００は、ＳＳＤ４０２がＧＣを終了するまでは、ＳＳＤ４０２とは異なるＳＳＤ４００とＳＳＤ４０１とにはＧＣを実行させないようにする。そして、ストレージ制御装置１００は、ＳＳＤ４０２がＧＣを終了するまでは、ＳＳＤ４００とＳＳＤ４０１とからデータ１９００の読み出しを行うようにする。
【０１４７】
ストレージ制御装置１００は、具体的には、ＳＳＤ４００とＳＳＤ４０１とにデータ１９００が分散されている場合、ＳＳＤ４００とＳＳＤ４０１とから読み出したデータ１９００のそれぞれの部分を読み出し、データ１９００を生成する。また、ストレージ制御装置１００は、具体的には、ＳＳＤ４００とＳＳＤ４０１とにデータ１９００の一部分と誤り訂正符号とが分散されている場合、データ１９００の一部分と誤り訂正符号とに基づいてデータ１９００を生成する。
【０１４８】
その後、ストレージ制御装置１００は、ＳＳＤ４００のフリースペースの容量が高閾値以下である場合、ＳＳＤ４００にＧＣを実行させるコマンドを発行する。ここで、ストレージ制御装置１００は、ＳＳＤ４００がＧＣを終了するまでは、ＳＳＤ４００とは異なるＳＳＤ４０１とＳＳＤ４０２とにはＧＣを実行させないようにする。そして、ストレージ制御装置１００は、ＳＳＤ４００がＧＣを終了するまでは、ＳＳＤ４０１とＳＳＤ４０２とからデータ１９０１の読み出しを行うようにする。
【０１４９】
ストレージ制御装置１００は、具体的には、ＳＳＤ４０１とＳＳＤ４０２とにデータ１９０１が分散されている場合、ＳＳＤ４０１とＳＳＤ４０２とから読み出したデータ１９０１のそれぞれの部分を読み出し、データ１９０１を生成する。また、ストレージ制御装置１００は、具体的には、ＳＳＤ４０１とＳＳＤ４０２とにデータ１９０１の一部分と誤り訂正符号とが分散されている場合、データ１９０１の一部分と誤り訂正符号とに基づいてデータ１９０１を生成する。
【０１５０】
これにより、ストレージ制御装置１００は、誤り訂正符号を用いてデータを分散して記憶する１グループのＳＳＤが同時にＧＣを実行しないようにすることができる。そして、ストレージ制御装置１００は、１グループのＳＳＤのうち１つのＳＳＤがＧＣを実行中には、少なくとも残りのＳＳＤがデータの読み出し可能な状態になるようにすることができる。結果として、ストレージ制御装置１００は、リード要求の対象になる、いずれかのＳＳＤがＧＣを実行中であっても、リード要求されたデータを生成可能であり、リード要求の要求元に応答可能になる。
【０１５１】
ここでは、ストレージ制御装置１００がＳＳＤにＧＣを実行させることによりＳＳＤのＧＣ実行状態を管理しながら、ＧＣを実行中ではないＳＳＤからデータを読み出す場合について説明したが、これに限らない。例えば、ストレージ制御装置１００は、それぞれのＳＳＤのフリースペースの容量に基づいて、それぞれのＳＳＤがＧＣを実行中であるか否かを判定し、データを読み出すＳＳＤを決定するようにしてもよい。
【０１５２】
具体的には、例えば、ＳＳＤ４００のフリースペースの容量が低閾値以下であり、ＳＳＤ４０１とＳＳＤ４０２とのフリースペースの容量が低閾値より大きい場合がある。この場合、ストレージ制御装置１００は、ＳＳＤ４００がＧＣを実行中であり、ＳＳＤ４０１とＳＳＤ４０２とがＧＣを実行中ではないと判定し、ＳＳＤ４０１とＳＳＤ４０２とからデータを読み出すようにする。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを実行中であっても、リード要求されたデータと同じ内容のデータを取得可能であり、リード要求の要求元に応答可能になる。
【０１５３】
また、例えば、ストレージ制御装置１００は、それぞれのＳＳＤにＧＣを実行中であるか否かを問い合わせて、データを読み出すＳＳＤを決定するようにしてもよい。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを実行中であっても、リード要求されたデータと同じ内容のデータを取得可能であり、リード要求の要求元に応答可能になる。ここで、図２０の説明に移行する。
【０１５４】
図２０は、図４に示したストレージ制御システム２００においてデータを書き込む一例を示す説明図である。図２０において、ストレージ制御装置１００は、ＳＳＤ４０２がＧＣを実行中に、ライトデータ２０００を書き込むライト要求を受け付けたとする。
【０１５５】
ここで、ストレージ制御装置１００は、ＳＳＤ４００とＳＳＤ４０１に対してライトデータ２０００を分散して書き込むとともに、ＳＳＤ４０２に対してライトデータ２０００に対応する誤り訂正符号を書き込むことになる。ストレージ制御装置１００は、ライトバック形式にしたがって、ＳＳＤ４００〜４０２に対して書き込みを行う前であっても、ライト要求を受け付けたときにライト要求の要求元に応答しておく。
【０１５６】
このとき、ストレージ制御装置１００は、ＳＳＤ４０２がＧＣを実行中であるため、ＳＳＤ４０２と対応付けてライトデータ２０００に対応する誤り訂正符号をキューに記憶し、ＳＳＤ４０２に対する誤り訂正符号の書き込みを待つ。一方で、ストレージ制御装置１００は、ＳＳＤ４００とＳＳＤ４０１とにはライトデータ２０００を分散して書き込む。
【０１５７】
その後、ストレージ制御装置１００は、ＳＳＤ４０２がＧＣを終了すれば、キューに記憶した誤り訂正符号をＳＳＤ４０２に書き込む。ストレージ制御装置１００は、キューに記憶したデータが複数あれば、まとめてＳＳＤに書き込むことにより、書込回数の低減化を図ってもよい。
【０１５８】
また、ストレージ制御装置１００は、ＳＳＤ４０２がＧＣを終了する前に、ＳＳＤ４００とＳＳＤ４０１とにおいてライトデータ２０００にライトデータ２００１を上書きするライト要求を受け付けたとする。ここで、ストレージ制御装置１００は、ＳＳＤ４００とＳＳＤ４０１とにおいて、ライトデータ２０００にライトデータ２００１を上書きすることになる。また、ストレージ制御装置１００は、ＳＳＤ４０２において、ライトデータ２０００に対応する誤り訂正符号にライトデータ２００１に対応する誤り訂正符号を上書きすることになる。
【０１５９】
このとき、ストレージ制御装置１００は、ライトバック形式にしたがえば、ライトデータ２００１や誤り訂正符号が書き込まれる前であっても、ライト要求を受け付けたときにライト要求の要求元に応答することになる。しかしながら、ＳＳＤに以前にライト要求されたライトデータ２０００や誤り訂正符号を書き込まなければ、ライトバック形式にしたがって今回のライト要求の要求元に応答することが好ましくない場合がある。
【０１６０】
このため、ストレージ制御装置１００は、ＳＳＤ４０２にＧＣを中断させ、ライトデータ２０００に対応する誤り訂正符号をキューから取り出して、ＳＳＤ４０２にライトデータ２０００に対応する誤り訂正符号を書き込む。ストレージ制御装置１００は、ＳＳＤ４０２に誤り訂正符号を書き込むと、ライトデータ２００１のライト要求の要求元に応答する。ストレージ制御装置１００は、ＳＳＤ４０２と対応付けてライトデータ２００１に対応する誤り訂正符号をキューに記憶し、ＳＳＤ４０２にＧＣを再開させ、ＳＳＤ４０２に対する誤り訂正符号の書き込みを待つ。
【０１６１】
ストレージ制御装置１００は、さらにＳＳＤ４０２にライトデータ２００１に対応する誤り訂正符号を書き込んでから、ＳＳＤ４０２にＧＣを再開させてもよい。一方で、ストレージ制御装置１００は、ＳＳＤ４００とＳＳＤ４０１とにライトデータ２００１を分散して書き込む。これにより、ストレージ制御装置１００は、ＳＳＤに以前にライト要求されたデータを書き込まなければ、今回のライト要求の要求元に応答することが好ましくない場合にも、アクセス要求に対する応答性能の低下を抑制することができる。
【０１６２】
ここでは、ＳＳＤに以前にライト要求されたライトデータや誤り訂正符号を書き込まなければ、今回のライト要求の要求元に応答することが好ましくない場合について説明したが、これに限らない。例えば、ＳＳＤに以前にライト要求されたライトデータや誤り訂正符号を書き込まなくても、今回のライト要求の要求元に応答してもよい場合もある。この場合、ストレージ制御装置１００は、以前にライト要求されたライトデータや誤り訂正符号と、今回ライト要求されたライトデータや誤り訂正符号とをマージして、新たなライトデータや誤り訂正符号をキューに記憶してもよい。これにより、ストレージ制御装置１００は、書き込み性能の低下を抑制することができる。
【０１６３】
ここでは、ＳＳＤに以前にライト要求されたライトデータや誤り訂正符号を書き込まなければ、今回のライト要求の要求元に応答することが好ましくない場合について説明したが、これに限らない。例えば、ＳＳＤに以前にライト要求されたライトデータや誤り訂正符号を書き込まなければ、以前にライト要求されたライトデータを読み出すリード要求の要求元に応答することが好ましくない場合があってもよい。この場合、ストレージ制御装置１００は、ＳＳＤにＧＣを中断させ、以前にライト要求されたライトデータや誤り訂正符号を書き込んでから、リード要求の要求元に応答する。これにより、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【０１６４】
また、例えば、ＳＳＤに以前にライト要求されたライトデータや誤り訂正符号を書き込まなくても、以前にライト要求されたライトデータを読み出すリード要求の要求元に応答してもよい場合もある。この場合、ストレージ制御装置１００は、ＧＣを実行中ではないＳＳＤからリード要求されたデータを生成して、リード要求の要求元に応答する。これにより、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【０１６５】
（ストレージ制御装置１００の動作の流れの一例）
次に、図２１を用いて、図４に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例について説明する。
【０１６６】
図２１は、図４に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの一例を示すシーケンス図である。図２１において、ストレージ制御装置１００は、データ１のリード要求１を受け付ける（ステップＳ２１０１）。このとき、ストレージ制御装置１００は、ＳＳＤ４００のフリースペースの容量が閾値以下になったため、リード要求１に応じたデータ１のリードコマンドをＳＳＤ４００に送信する前にＧＣを実行させるコマンドをＳＳＤ４００に送信する（ステップＳ２１０２）。
【０１６７】
ストレージ制御装置１００は、データ１のリード要求１に応じてデータ１のリードコマンドをＳＳＤ４０１に送信する（ステップＳ２１０３）。ストレージ制御装置１００は、ＳＳＤ４００がＧＣを実行中であるため、データ１のリード要求１に応じたデータ１のリードコマンドをＳＳＤ４００に送信せず、データ１に対応する誤り訂正符号のリードコマンドをＳＳＤ４０２に送信する（ステップＳ２１０４）。
【０１６８】
ストレージ制御装置１００は、リード要求１に応じたデータ１の一部分をＳＳＤ４０１から受信する（ステップＳ２１０５）。ストレージ制御装置１００は、リード要求１に応じたデータ１に対応する誤り訂正符号をＳＳＤ４０２から受信し、データ１を生成する（ステップＳ２１０６）。そして、ストレージ制御装置１００は、データ１のリード終了を出力する（ステップＳ２１０７）。
【０１６９】
（ストレージ制御装置１００の動作の流れの他の例）
次に、図２２を用いて、図４に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例について説明する。他の例は、ストレージ制御装置１００が、上述した追い出しライトを行う場合の例である。
【０１７０】
図２２は、図４に示したストレージ制御システム２００におけるストレージ制御装置１００の動作の流れの他の例を示すシーケンス図である。図２２において、ストレージ制御装置１００は、データ１のライト要求１を受け付ける（ステップＳ２２０１）。
【０１７１】
このとき、ストレージ制御装置１００は、ＳＳＤ４００のフリースペースの容量が閾値以下になったため、ライト要求１に応じてデータ１のライトコマンドをＳＳＤ４００に送信する前にＧＣを実行させるコマンドをＳＳＤ４００に送信する（ステップＳ２２０２）。ストレージ制御装置１００は、ＳＳＤ４００がＧＣを実行中であるため、ライト要求１に応じたデータ１のライトコマンドをＳＳＤ４００に送信せず、ライト要求１に応じたデータ１の一部分をＳＳＤ４００に対応付けてキューに記憶しておく。
【０１７２】
また、ストレージ制御装置１００は、ライト要求１に応じてデータ１のライトコマンドをＳＳＤ４０１に送信する（ステップＳ２２０３）。また、ストレージ制御装置１００は、ライト要求１に応じてデータ１に対応する誤り訂正符号のライトコマンドをＳＳＤ４０２に送信する（ステップＳ２２０４）。
【０１７３】
ストレージ制御装置１００は、データ２のライト要求２を受け付ける（ステップＳ２２０５）。ここで、データ１とデータ２とは、ＳＳＤ４００の同じ単位記憶領域に書き込むデータであるとする。ストレージ制御装置１００は、データ１とデータ２とがＳＳＤ４００の同じ単位記憶領域に書き込むデータであるため、データ１のライトコマンドをＳＳＤ４００に送信する（ステップＳ２２０６）。ＳＳＤ４００は、ライトコマンドを優先するため、ＧＣを中断する。
【０１７４】
ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ４０１から受け付ける（ステップＳ２２０７）。また、ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ４０２から受け付ける（ステップＳ２２０８）。また、ストレージ制御装置１００は、データ１のライトコマンドに対する応答をＳＳＤ４００から受け付ける（ステップＳ２２０９）。ストレージ制御装置１００は、データ１のライト終了を出力する（ステップＳ２２１０）。
【０１７５】
ストレージ制御装置１００は、ライト要求２に応じたデータ２のライトコマンドをＳＳＤ４００に送信する（ステップＳ２２１１）。また、ストレージ制御装置１００は、ライト要求２に応じたデータ２のライトコマンドをＳＳＤ４０１に送信する（ステップＳ２２１２）。また、ストレージ制御装置１００は、ライト要求２に応じたデータ２のライトコマンドをＳＳＤ４０２に送信する（ステップＳ２２１３）。
【０１７６】
ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ４００から受け付ける（ステップＳ２２１４）。また、ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ４０１から受け付ける（ステップＳ２２１５）。また、ストレージ制御装置１００は、データ２のライトコマンドに対する応答をＳＳＤ４０２から受け付ける（ステップＳ２２１６）。ストレージ制御装置１００は、データ２のライト終了を出力する（ステップＳ２２１７）。ストレージ制御装置１００は、ＧＣを実行させるコマンドをＳＳＤ４００に送信する（ステップＳ２２１８）。
【０１７７】
（ＧＣ初期化処理手順の一例）
次に、図２３を用いて、ストレージ制御装置１００が実行するＧＣ初期化処理手順の一例について説明する。
【０１７８】
図２３は、ＧＣ初期化処理手順の一例を示すフローチャートである。図２３において、ストレージ制御装置１００は、ＳＳＤ状態テーブル９００を初期化する（ステップＳ２３０１）。次に、ストレージ制御装置１００は、それぞれのＳＳＤのＧＣの設定情報を読み出す（ステップＳ２３０２）。そして、ストレージ制御装置１００は、ＧＣの設定情報を変更するか否かを判定する（ステップＳ２３０３）。ここで、ＧＣの設定情報を変更しない場合（ステップＳ２３０３：Ｎｏ）、ストレージ制御装置１００は、ステップＳ２３０５の処理に移行する。
【０１７９】
一方で、ＧＣの設定情報を変更する場合（ステップＳ２３０３：Ｙｅｓ）、ストレージ制御装置１００は、それぞれのＳＳＤのＧＣの設定情報を変更する（ステップＳ２３０４）。次に、ストレージ制御装置１００は、ＳＳＤ状態テーブル９００を設定する（ステップＳ２３０５）。そして、ストレージ制御装置１００は、図２４に後述するＧＣ制御処理１１０２を実行開始して（ステップＳ２３０６）、ＧＣ初期化処理１１０１を終了する。これにより、ストレージ制御装置１００は、それぞれのＳＳＤのＧＣの設定情報を変更し、それぞれのＳＳＤにおいてＧＣよりもリードまたはライトを優先するようにさせることができる。
【０１８０】
（ＧＣ制御処理手順の一例）
次に、図２４を用いて、ストレージ制御装置１００が実行するＧＣ制御処理手順の一例について説明する。
【０１８１】
図２４は、ＧＣ制御処理手順の一例を示すフローチャートである。図２４において、ストレージ制御装置１００は、ＳＳＤ状態テーブル９００を参照し、それぞれのＳＳＤに関する情報を読み出す（ステップＳ２４０１）。それぞれのＳＳＤに関する情報は、例えば、それぞれのＳＳＤのフリースペースの容量を示す情報やそれぞれのＳＳＤがＧＣを実行中であるか否かを示す情報などを含む。
【０１８２】
次に、ストレージ制御装置１００は、ＧＣを実行中のＳＳＤがあるか否かを判定する（ステップＳ２４０２）。ここで、ＧＣを実行中のＳＳＤがある場合（ステップＳ２４０２：Ｙｅｓ）、ストレージ制御装置１００は、ＧＣが終了したか否かを判定する（ステップＳ２４０３）。ここで、まだ実行中である場合（ステップＳ２４０３：Ｎｏ）、ストレージ制御装置１００は、次回のＧＣ制御処理１１０２を実行開始する契機となるタイマーを再設定し（ステップＳ２４０４）、ＧＣ制御処理１１０２を終了する。
【０１８３】
一方で、ＧＣが終了した場合（ステップＳ２４０３：Ｙｅｓ）、ストレージ制御装置１００は、ＳＳＤ状態テーブル９００のＧＣ実行状態を完了に設定する（ステップＳ２４０５）。次に、ストレージ制御装置１００は、キューにライト待ちのデータがあるか否かを判定する（ステップＳ２４０６）。ここで、ライト待ちのデータがある場合（ステップＳ２４０６：Ｙｅｓ）、ストレージ制御装置１００は、ライトコマンドを発行し（ステップＳ２４０７）、ステップＳ２４０４の処理に移行する。一方で、ライト待ちのデータがない場合（ステップＳ２４０６：Ｎｏ）、ストレージ制御装置１００は、ステップＳ２４０４の処理に移行する。
【０１８４】
ステップＳ２４０２にて、ＧＣを実行中のＳＳＤがない場合（ステップＳ２４０２：Ｎｏ）、ストレージ制御装置１００は、フリースペースの容量が閾値以下のＳＳＤがあるか否かを判定する（ステップＳ２４０８）。ここで、フリースペースの容量が閾値以下のＳＳＤがない場合（ステップＳ２４０８：Ｎｏ）、ストレージ制御装置１００は、ステップＳ２４０４の処理に移行する。
【０１８５】
一方で、フリースペースの容量が閾値以下のＳＳＤがある場合（ステップＳ２４０８：Ｙｅｓ）、ストレージ制御装置１００は、フリースペースの容量が閾値以下のＳＳＤの、ＳＳＤ状態テーブル９００のＧＣ実行状態を実行中に設定する（ステップＳ２４０９）。次に、ストレージ制御装置１００は、ミラーリングが行われているか否かを判定する（ステップＳ２４１０）。
【０１８６】
ここで、ミラーリングが行われていない場合（ステップＳ２４１０：Ｎｏ）、ストレージ制御装置１００は、フリースペースの容量が閾値以下のＳＳＤに対して、ＧＣを実行させるコマンドを発行する（ステップＳ２４１１）。そして、ストレージ制御装置１００は、ＧＣが終了すると、ＳＳＤ状態テーブル９００のＧＣ実行状態を完了に設定し、ステップＳ２４０４の処理に移行する。
【０１８７】
一方で、ミラーリングが行われている場合（ステップＳ２４１０：Ｙｅｓ）、ストレージ制御装置１００は、フリースペースの容量が閾値以下のＳＳＤに対して、ＧＣを実行させるコマンドを発行し、ＧＣが終了するまで待つ（ステップＳ２４１２）。ストレージ制御装置１００は、ＧＣが終了すると、ＳＳＤ状態テーブル９００のＧＣ実行状態を完了に設定する。
【０１８８】
次に、ストレージ制御装置１００は、ＧＣを実行させるコマンドを発行したＳＳＤと同一内容のデータを記憶するＳＳＤに対しても、ＧＣを実行させるコマンドを発行し、ＳＳＤ状態テーブル９００のＧＣ実行状態を実行中に設定する（ステップＳ２４１３）。ストレージ制御装置１００は、ＧＣが終了すると、ＳＳＤ状態テーブル９００のＧＣ実行状態を完了に設定する。
【０１８９】
そして、ストレージ制御装置１００は、ステップＳ２４０４の処理に移行する。これにより、ストレージ制御装置１００は、それぞれのＳＳＤにＧＣを実行させることができ、ミラーリングが行われている場合には同一内容のデータを記憶する１対のＳＳＤが両方ともＧＣを実行中になることを抑制することができる。
【０１９０】
（アクセス制御処理手順の一例）
次に、図２５および図２６を用いて、ストレージ制御装置１００が実行するアクセス制御処理手順の一例について説明する。アクセス制御処理は、例えば、リード処理１１０３とライト処理１１０４とに対応する。
【０１９１】
図２５および図２６は、アクセス制御処理手順の一例を示すフローチャートである。図２５において、ストレージ制御装置１００は、アクセス要求を受け付ける（ステップＳ２５０１）。次に、ストレージ制御装置１００は、アクセス要求がリード要求であるか否かを判定する（ステップＳ２５０２）。ここで、ライト要求である場合（ステップＳ２５０２：Ｎｏ）、ストレージ制御装置１００は、図２６のステップＳ２６０１の処理に移行する。
【０１９２】
一方で、リード要求である場合（ステップＳ２５０２：Ｙｅｓ）、ストレージ制御装置１００は、それぞれのＳＳＤについてＳＳＤ状態テーブル９００のＧＣ実行状態を読み出す（ステップＳ２５０３）。次に、ストレージ制御装置１００は、ＧＣを実行中のＳＳＤがあるか否かを判定する（ステップＳ２５０４）。ここで、ＧＣを実行中のＳＳＤがない場合（ステップＳ２５０４：Ｎｏ）、ストレージ制御装置１００は、リードコマンドを発行し（ステップＳ２５０５）、アクセス制御処理を終了する。
【０１９３】
一方で、ＧＣを実行中のＳＳＤがある場合（ステップＳ２５０４：Ｙｅｓ）、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを実行中であるか否かを判定する（ステップＳ２５０６）。ここで、ＧＣを実行中ではない場合（ステップＳ２５０６：Ｎｏ）、ストレージ制御装置１００は、ステップＳ２５０５の処理に移行する。
【０１９４】
一方で、ＧＣを実行中である場合（ステップＳ２５０６：Ｙｅｓ）、ストレージ制御装置１００は、追い出しライトを行うか否かを判定する（ステップＳ２５０７）。ここで、追い出しライトを行わない場合（ステップＳ２５０７：Ｎｏ）、ストレージ制御装置１００は、ステップＳ２５０９の処理に移行する。
【０１９５】
一方で、追い出しライトを行う場合（ステップＳ２５０７：Ｙｅｓ）、ストレージ制御装置１００は、キューを参照して追い出しライトを行う（ステップＳ２５０８）。次に、ストレージ制御装置１００は、リード要求の対象になるＳＳＤを指定する（ステップＳ２５０９）。そして、ストレージ制御装置１００は、指定されたＳＳＤに対してリードコマンドを発行し（ステップＳ２５１０）、アクセス制御処理を終了する。
【０１９６】
図２６において、ストレージ制御装置１００は、それぞれのＳＳＤについてＳＳＤ状態テーブル９００のＧＣ実行状態を読み出す（ステップＳ２６０１）。次に、ストレージ制御装置１００は、ＧＣを実行中のＳＳＤがあるか否かを判定する（ステップＳ２６０２）。ここで、ＧＣを実行中のＳＳＤがない場合（ステップＳ２６０２：Ｎｏ）、ストレージ制御装置１００は、ライトコマンドを発行し（ステップＳ２６０３）、アクセス制御処理を終了する。
【０１９７】
一方で、ＧＣを実行中のＳＳＤがある場合（ステップＳ２６０２：Ｙｅｓ）、ストレージ制御装置１００は、ライト要求の対象になるＳＳＤがＧＣを実行中であるか否かを判定する（ステップＳ２６０４）。ここで、ＧＣを実行中ではない場合（ステップＳ２６０４：Ｎｏ）、ストレージ制御装置１００は、ステップＳ２６０３の処理に移行する。
【０１９８】
一方で、ＧＣを実行中である場合（ステップＳ２６０４：Ｙｅｓ）、ストレージ制御装置１００は、ライト要求の対象になるＳＳＤを指定する（ステップＳ２６０５）。次に、ストレージ制御装置１００は、指定したＳＳＤに対してライトコマンドを発行する（ステップＳ２６０６）。そして、ストレージ制御装置１００は、ライト要求されたライトデータをキューイングし（ステップＳ２６０７）、アクセス制御処理を終了する。
【０１９９】
以上説明したように、ストレージ制御装置１００によれば、ストレージ装置２１０を形成する複数のＳＳＤのそれぞれのＳＳＤがＧＣを実行中であるか否かを監視することができる。また、ストレージ制御装置１００によれば、ストレージ装置２１０に対するリード要求を受け付けた場合、複数のＳＳＤのうちリード要求の対象になるＳＳＤがＧＣを実行中であるか否かを判定することができる。また、ストレージ制御装置１００によれば、リード要求の対象になるＳＳＤがＧＣを実行中であれば、複数のＳＳＤのうちリード要求の対象になるＳＳＤとは異なる他のＳＳＤからリード要求されたデータを取得することができる。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを終了するまで待たなくても、リード要求されたデータと同じ内容のデータを取得したときにリード要求の要求元に対して応答することができる。このため、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【０２００】
また、ストレージ装置２１０がミラーリングによりデータを記憶する装置であり、例えば、ＲＡＩＤ１構成である場合がある。この場合、ストレージ制御装置１００によれば、リード要求の対象になるＳＳＤがＧＣを実行中であれば、他のＳＳＤにミラーリングにより記憶されたリード要求されたデータと同じ内容のデータを取得することができる。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを終了する前であっても、リード要求されたデータと同じ内容のデータを取得して、リード要求の要求元に応答可能になる。
【０２０１】
また、ストレージ制御装置１００によれば、複数のＳＳＤのいずれかのＳＳＤのフリースペースの容量を計測し、計測したフリースペースの容量が閾値以下であれば、いずれかのＳＳＤにＧＣを実行させることができる。また、ストレージ制御装置１００によれば、いずれかのＳＳＤがＧＣを終了すると、ミラーリングによりいずれかのＳＳＤと同じ内容のデータを記憶するＳＳＤにＧＣを実行させることができる。これにより、ストレージ制御装置１００は、ミラーリングにより同じ内容のデータを記憶する複数のＳＳＤが、同時にＧＣを実行しないようにすることができる。
【０２０２】
また、ストレージ装置２１０が誤り訂正符号を用いてデータを分散して記憶する装置であり、ＲＡＩＤ５構成である場合がある。この場合、ストレージ制御装置１００によれば、リード要求されたデータの一部分を記憶するＳＳＤがＧＣを実行中であれば、他のＳＳＤからリード要求されたデータのうち一部分とは異なる残りの部分を取得することができる。また、ストレージ制御装置１００によれば、他のＳＳＤからリード要求されたデータに対応する誤り訂正符号を取得することができる。また、ストレージ制御装置１００によれば、取得した残りの部分と誤り訂正符号とに基づいてリード要求されたデータを生成することができる。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを終了する前であっても、誤り訂正符号を用いてリード要求されたデータと同じ内容のデータを生成して、リード要求の要求元に応答可能になる。
【０２０３】
また、ストレージ装置２１０が誤り訂正符号を用いてデータを分散して記憶する装置であり、ＲＡＩＤ５構成である場合がある。この場合、ストレージ制御装置１００によれば、リード要求されたデータに対応する誤り訂正符号を記憶するＳＳＤがＧＣを実行中であれば、他のＳＳＤからリード要求されたデータのそれぞれの部分を取得し、リード要求されたデータを生成することができる。これにより、ストレージ制御装置１００は、リード要求の対象になるＳＳＤがＧＣを終了する前であっても、リード要求されたデータと同じ内容のデータを生成して、リード要求の要求元に応答可能になる。
【０２０４】
また、ストレージ制御装置１００によれば、複数のＳＳＤのいずれかのＳＳＤのフリースペースの容量を計測し、計測したフリースペースの容量が閾値以下であれば、いずれかのＳＳＤにＧＣを実行させることができる。これにより、ストレージ制御装置１００は、複数のＳＳＤが、同時にＧＣを実行しないようにすることができる。
【０２０５】
また、ストレージ制御装置１００によれば、フリースペースの容量と比較する閾値として、いずれかのＳＳＤが自動でＧＣを実行すると判定するときのフリースペースの容量よりも大きい値を採用することができる。これにより、ストレージ制御装置１００は、ＳＳＤが自動でＧＣを実行しないようにして、ＳＳＤがＧＣを実行中であるか否かを管理しやすくすることができる。
【０２０６】
また、ストレージ制御装置１００によれば、ストレージ装置２１０に対するライト要求を受け付けた場合、複数のＳＳＤのうちライト要求の対象になるＳＳＤがＧＣを実行中であれば、ライト要求されたデータをキューに記憶することができる。また、ストレージ制御装置１００によれば、ライト要求の対象になるＳＳＤがＧＣを終了する前に、さらにライト要求されたデータの書込先になる記憶領域に対するアクセス要求を受け付ける場合がある。この場合、ストレージ制御装置１００によれば、ライト要求の対象になるＳＳＤにＧＣを中断させ、ライト要求されたデータをライト要求の対象になるＳＳＤに書き込むことができる。これにより、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【０２０７】
また、ストレージ制御装置１００によれば、ライト要求の対象になるＳＳＤがＧＣを終了すると、キューに記憶されたデータをまとめてライト要求の対象になるＳＳＤに書き込むことができる。これにより、ストレージ制御装置１００は、書込回数の低減化を図ることができる。
【０２０８】
また、ストレージ制御装置１００によれば、リード要求されたデータを取得したときにリード要求の要求元に応答することができる。これにより、ストレージ制御装置１００は、アクセス要求に対する応答性能の低下を抑制することができる。
【０２０９】
なお、本実施の形態で説明したストレージ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ストレージ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ストレージ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２１０】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２１１】
（付記１）データを冗長化して記憶するストレージ装置を形成する複数の記憶装置のそれぞれの記憶装置がガベージコレクションを実行中であるか否かを監視し、
前記ストレージ装置に対するリード要求を受け付けた場合、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置とは異なる他の記憶装置から前記リード要求されたデータを取得する、
制御部を有することを特徴とするストレージ制御装置。
【０２１２】
（付記２）前記ストレージ装置は、ミラーリングによりデータを記憶する装置であり、
前記制御部は、
前記リード要求を受け付けた場合、前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記他の記憶装置にミラーリングにより記憶された前記リード要求されたデータと同じ内容のデータを取得する、ことを特徴とする付記１に記載のストレージ制御装置。
【０２１３】
（付記３）前記制御部は、
前記複数の記憶装置のいずれかの記憶装置のフリースペースの容量を計測し、
計測した前記フリースペースの容量が閾値以下であれば、前記いずれかの記憶装置にガベージコレクションを実行させ、前記いずれかの記憶装置がガベージコレクションを終了するとミラーリングにより前記いずれかの記憶装置と同じ内容のデータを記憶する記憶装置にガベージコレクションを実行させる、ことを特徴とする付記２に記載のストレージ制御装置。
【０２１４】
（付記４）前記ストレージ装置は、誤り訂正符号を用いてデータを分散して記憶する装置であり、
前記制御部は、
前記リード要求を受け付けた場合、前記リード要求されたデータの一部分を記憶する前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記他の記憶装置から前記リード要求されたデータのうち前記一部分とは異なる残りの部分と、前記リード要求されたデータに対応する誤り訂正符号とを取得し、前記リード要求されたデータを生成する、ことを特徴とする付記１に記載のストレージ制御装置。
【０２１５】
（付記５）前記制御部は、
前記リード要求を受け付けた場合、前記リード要求されたデータに対応する誤り訂正符号を記憶する前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記他の記憶装置から前記リード要求されたデータのそれぞれの部分を取得し、前記リード要求されたデータを生成する、ことを特徴とする付記４に記載のストレージ制御装置。
【０２１６】
（付記６）前記制御部は、
前記複数の記憶装置のいずれかの記憶装置のフリースペースの容量を計測し、
計測した前記フリースペースの容量が閾値以下であれば、前記いずれかの記憶装置にガベージコレクションを実行させる、ことを特徴とする付記４または５に記載のストレージ制御装置。
【０２１７】
（付記７）前記閾値は、前記いずれかの記憶装置が自動でガベージコレクションを実行すると判定するときのフリースペースの容量よりも大きい値である、ことを特徴とする付記３または６に記載のストレージ制御装置。
【０２１８】
（付記８）前記ストレージ装置に対するライト要求を受け付けた場合、前記複数の記憶装置のうち前記ライト要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記ライト要求されたデータを一時記憶領域に記憶し、
前記ライト要求の対象になる記憶装置がガベージコレクションを終了する前に、さらに前記ライト要求されたデータの書込先になる記憶領域に対するアクセス要求を受け付けた場合、前記ライト要求の対象になる記憶装置にガベージコレクションを中断させ、前記ライト要求されたデータを前記ライト要求の対象になる記憶装置に書き込む、ことを特徴とする付記１〜７のいずれか一つに記載のストレージ制御装置。
【０２１９】
（付記９）前記ライト要求の対象になる記憶装置がガベージコレクションを終了すると、前記一時記憶領域に記憶されたデータをまとめて前記ライト要求の対象になる記憶装置に書き込む、ことを特徴とする付記８に記載のストレージ制御装置。
【０２２０】
（付記１０）前記リード要求されたデータを取得したときに前記リード要求の要求元に応答する、ことを特徴とする付記１〜９のいずれか一つに記載のストレージ制御装置。
【０２２１】
（付記１１）コンピュータが、
データを冗長化して記憶するストレージ装置を形成する複数の記憶装置のそれぞれの記憶装置がガベージコレクションを実行中であるか否かを監視し、
前記ストレージ装置に対するリード要求を受け付けた場合、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置とは異なる他の記憶装置から前記リード要求されたデータを取得する、
処理を実行することを特徴とするストレージ制御方法。
【０２２２】
（付記１２）コンピュータに、
データを冗長化して記憶するストレージ装置を形成する複数の記憶装置のそれぞれの記憶装置がガベージコレクションを実行中であるか否かを監視し、
前記ストレージ装置に対するリード要求を受け付けた場合、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置がガベージコレクションを実行中であれば、前記複数の記憶装置のうち前記リード要求の対象になる記憶装置とは異なる他の記憶装置から前記リード要求されたデータを取得する、
処理を実行させることを特徴とするストレージ制御プログラム。
【符号の説明】
【０２２３】
１００  ストレージ制御装置
１０１，１０２，２３０，２３１，３００〜３０３，４００〜４０２  ＳＳＤ
２００  ストレージ制御システム
２１０  ストレージ装置
２１１，２２１  チャネル
２２０  ホスト装置
２４０  ドライバ
２６０，２６１，３１０〜３１３，４１０〜４１２  ＳＳＤコントローラ
２７０，２７１，３２０〜３２３，４２０〜４２２  フラッシュメモリ
５０１  ＣＰＵ
５０２  メモリ
５０３  ＣＡ
５０４  ＩＯＣ
６００  ＢＧコントロールコマンド
７００  ＢＧ設定コマンド
９００  ＳＳＤ状態テーブル
１００１  管理部
１００２  受付部
１００３  リード部
１００４  ライト部
１１０１  ＧＣ初期化処理
１１０２  ＧＣ制御処理
１１０３  リード処理
１１０４  ライト処理
【図１】
2018022397.tif 000003
【図２】
2018022397.tif 000004
【図３】
2018022397.tif 000005
【図４】
2018022397.tif 000006
【図５】
2018022397.tif 000007
【図６】
2018022397.tif 000008
【図７】
2018022397.tif 000009
【図８】
2018022397.tif 000010
【図９】
2018022397.tif 000011
【図１０】
2018022397.tif 000012
【図１１】
2018022397.tif 000013
【図１２】
2018022397.tif 000014
【図１３】
2018022397.tif 000015
【図１４】
2018022397.tif 000016
【図１５】
2018022397.tif 000017
【図１６】
2018022397.tif 000018
【図１７】
2018022397.tif 000019
【図１８】
2018022397.tif 000020
【図１９】
2018022397.tif 000021
【図２０】
2018022397.tif 000022
【図２１】
2018022397.tif 000023
【図２２】
2018022397.tif 000024
【図２３】
2018022397.tif 000025
【図２４】
2018022397.tif 000026
【図２５】
2018022397.tif 000027
【図２６】
2018022397.tif 000028