(57)【特許請求の範囲】
【請求項１】
有効なデータを記憶する２以上の第１の半導体記憶装置と有効なデータを記憶しない１以上の第２の半導体記憶装置を含む複数の半導体記憶装置を制御するストレージコントローラであって、
前記複数の半導体記憶装置の中から前記第２の半導体記憶装置を特定する情報を管理するテーブルと、
前記第１の半導体記憶装置の動作状態と前記テーブルに基づいて前記第１の半導体記憶装置あるいは前記第２の半導体記憶装置へリードライトアクセスし、ライトアクセスに応じて動的に前記テーブルを変更する制御部と、
を備え、
前記第２の半導体記憶装置は新たな有効なデータを前記第２の半導体記憶装置あるいは２以上の前記第１の半導体記憶装置の他の前記第１の半導体記憶装置へライトする場合に使用されるものであり、
前記第１の半導体記憶装置の動作状態は前記半導体記憶装置へのガーベージコレクションの指示と前記半導体記憶装置からのガーベージコレクション完了通知に基づく動作状態を含み、
前記制御部は、
前記第１の半導体記憶装置の動作状態と前記第２の半導体記憶装置の個数に基づいてガーベージコレクションを指示し、
前記第１の半導体記憶装置のガーベージコレクション動作状態と前記テーブルに基づいて前記第１の半導体記憶装置あるいは前記第２の半導体記憶装置へリードライトアクセスすることを特徴とするストレージコントローラ。
【請求項２】
さらに前記第１の半導体記憶装置への集中したライトアクセス動作状態に基づいて前記第１の半導体記憶装置あるいは前記第２の半導体記憶装置へライトアクセスする前記制御部を備えたことを特徴とする請求項１に記載のストレージコントローラ。
【請求項３】
前記ガーベージコレクション動作状態あるいは集中したライトアクセス動作状態の前記第１の半導体記憶装置をライトアクセス先とする場合、２以上の前記第１の半導体記憶装置の当該ライトアクセス先ではない他の前記第１の半導体記憶装置あるいは前記第２の半導体記憶装置へのライトアクセスに変更し、当該変更した先の第１の半導体記憶装置あるいは前記第２の半導体記憶装置へライトアクセスする前記制御部を備えたことを特徴とする請求項２に記載のストレージコントローラ。
【請求項４】
新たな前記第２の半導体記憶装置を特定する情報として前記変更の元となるライトアクセス先の第１の半導体記憶装置を登録するよう前記テーブルを変更する前記制御部を備えたことを特徴とする請求項３に記載のストレージコントローラ。
【請求項５】
前記第２の半導体記憶装置を特定する情報を用いてリードライトアクセス先の第１の半導体記憶装置の番号を計算して、あるいは前記テーブルが前記第１の半導体記憶装置のすべての番号も含みリードライトアクセス先の第１の半導体記憶装置の番号を参照して、リードライトアクセス先の第１の半導体記憶装置を特定する前記制御部を備えたことを特徴とする請求項４に記載のストレージコントローラ。
【請求項６】
前記複数の半導体記憶装置の中からパリティを記憶した第３の半導体記憶装置を特定する情報をさらに管理する前記テーブルと、
複数の前記第１の半導体記憶装置をさらにＲＡＩＤ制御する制御部と、
を備えたことを特徴とする請求項５に記載のストレージコントローラ。
【請求項７】
前記第２の半導体記憶装置を特定する情報と前記第３の半導体記憶装置を特定する情報とを入れ替える制御部を備えたことを特徴とする請求項６に記載のストレージコントローラ。
【請求項８】
前記第１の半導体記憶装置の動作状態に基づいて前記第１の半導体記憶装置からのリード動作を当該リード動作の対象とならない前記第１の半導体記憶装置のデータと前記第３の半導体記憶装置のパリティによるデータの復元動作とする前記制御部を備えたことを特徴とする請求項７に記載のストレージコントローラ。
【請求項９】
複数の前記第１の半導体記憶装置でさらにミラーリング制御する制御部を備えたことを特徴とする請求項５に記載のストレージコントローラ。
【請求項１０】
請求項１に記載の前記ストレージコントローラと前記複数の半導体記憶装置を備えたことを特徴とするストレージ装置。
【請求項１１】
請求項１０に記載の前記ストレージ装置と前記ストレージ装置へリードライトアクセスを行うサーバを備え、
前記ストレージコントローラは前記サーバからのリードライトアクセスに基づき前記複数の半導体記憶装置へリードライトアクセスすることを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の半導体記憶装置を制御するストレージコントローラ、半導体記憶装置とストレージコントローラを備えたストレージ装置、ストレージ装置とサーバを接続したストレージシステム、複数の不揮発性メモリチップを制御するストレージコントローラと不揮発性メモリチップを備えた半導体記憶装置に関するものである。
【背景技術】
【０００２】
従来から、フラッシュメモリなどの書き込み可能な不揮発性メモリを有する半導体記憶装置は、ハードディスク代替としての記憶装置や、デジタルカメラ、携帯型音楽プレーヤなどで幅広く用いられるようになってきている。半導体記憶装置の容量は年々増加しているが、デジタルカメラの高画素化、携帯型音楽プレーヤの高音質化や動画再生、放送通信融合、ビッグデータ対応のストレージで取り扱うデータ量の増加などにより、半導体記憶装置のさらなる大容量化が求められている。【０００３】
これに対し、半導体記憶装置の素子レベルの改良により記憶密度を向上させる技術の開発が進み、例えば特許文献１には相変化メモリを用いた高密度化が記載されている一方、複数の半導体記憶装置をまとめて１つのストレージ装置として使用する技術や、複数の不揮発性メモリチップをまとめて１つの半導体記憶装置として使用する技術なども開発され、大容量化への要求に応えている。【０００４】
また、一般に記憶装置はその性能も重要であり、性能が重要であることは半導体記憶装置も例外ではなく、半導体記憶装置を記憶装置としたコンピュータにおいては半導体記憶装置の性能がコンピュータの情報処理の性能へ影響し、半導体記憶装置を記憶装置としたデジタルカメラにおいては半導体記憶装置の性能が連写性能などへも影響する。【０００５】
ここで、半導体記憶装置にはハードディスクなどの他の記憶装置とは異なる特性として半導体記憶装置内でのガーベッジコレクションの必要であることが挙げられる。例えば特許文献２にはフラッシュメモリシステムにおいてフォアグラウンドでハウスキーピング操作を行うことが記載されている。ハウスキーピング操作は損耗均等化、スクラッピング、データ圧縮、および先制ガーベージコレクションなどのガーベージコレクションを含む。特許文献３には複数のフラッシュメモリをアレイ構成としてガーベッジコレクションを行うことが記載されている。特許文献４にはフラッシュメモリシステムにおいてガーベージコレクションを含むコンパクション処理の対象範囲を使用可能なブロック数およびブロック内の有効データ量に基づいて動的に設定することが記載されている。非特許文献１にはフラッシュメモリシステムにおいて所定のポリシーに基づいてガーベージコレクションを行うことが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１１／０７４５４５号
【特許文献２】特開２００９−２８２９８９号公報
【特許文献３】米国特許出願公開第２０１２／００５９９７８号明細書
【特許文献４】特開２０１３−０３００８１号公報
【非特許文献】
【０００７】
【非特許文献１】“Ｗｒｉｔｅ  ａｍｐｌｉｆｉｃａｔｉｏｎ  ａｎａｌｙｓｉｓ  ｉｎ  ｆｌａｓｈ−ｂａｓｅｄ  ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅｓ”、  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｔｈｅ  Ｉｓｒａｅｌｉ  Ｅｘｐｅｒｉｍｅｎｔａｌ  Ｓｙｓｔｅｍｓ  Ｃｏｎｆｅｒｅｎｃｅ  （ＳＹＳＴＯＲ）  （２００９）、  ｐｐ．１−９
【発明の概要】
【発明が解決しようとする課題】
【０００８】
半導体記憶装置などを使用したストレージ装置の重要な性能指標にはＩＯＰＳ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｐｅｒ  Ｓｅｃｏｎｄ）性能とレスポンス性能などがあり、これらの性能を向上させることが求められている。ＩＯＰＳ性能は１秒間に処理可能なリード、ライトの回数である。レスポンス性能はサーバがストレージ装置へリード要求もしくはライト要求を発行し、その要求に応じた処理が完了するまでの時間であって、レスポンス時間が短いストレージ装置を高いレスポンス性能を持つストレージ装置であると言う。必ずしもＩＯＰＳ性能とレスポンス性能とは対応するものではないが、例えばレスポンス時間が短いストレージ装置は次の要求の処理を早く開始できるためＩＯＰＳ性能も高い。【０００９】
このような性能指標において、半導体記憶装置がガーベージコレクション中にサーバがリード要求もしくはライト要求を発行すると、半導体記憶装置はガーベージコレクションの処理を中断して要求に応じた処理を実行するため、ガーベージコレクションの処理を中断するまでの時間分だけレスポンス時間が長くなり、ＩＯＰＳ性能が低下する。特にライト要求では、ガーベージコレクションによる半導体記憶装置内の記憶管理の更新状態が新たなライトを可能とする整合状態になるまで中断できないため、中断までの時間をリード要求よりも多く必要とする。また、ガーベージコレクション中以外であっても、一つの半導体記憶装置へサーバのリード要求もしくはライト要求が複数発行されると、他の要求に応じた処理が完了するまでの時間分だけレスポンス時間が長くなり、ＩＯＰＳ性能が低下する。【００１０】
このような性能低下に対し、特許文献１〜４、非特許文献１にはガーベージコレクション中の性能に関する技術および複数の要求における性能に関する技術の開示は見当たらない。【００１１】
そこで、本発明の第一の目的は、半導体記憶装置がガーベージコレクションを行うことによるＩＯＰＳ性能やレスポンス性能の低下を防ぐ、もしくはその性能の低下を軽減することである。本発明の第二の目的は、ガーベージコレクション中以外であってもＩＯＰＳ性能やレスポンス性能をさらに向上させることである。
【課題を解決するための手段】
【００１２】
本発明にかかるストレージコントローラは、有効なデータを記憶する１以上の第１の半導体記憶装置と有効なデータを記憶しない１以上の第２の半導体記憶装置を含む複数の半導体記憶装置を制御するストレージコントローラであって、前記複数の半導体記憶装置の中から前記第２の半導体記憶装置を特定する情報を管理するテーブルと、前記第１の半導体記憶装置の動作状態と前記テーブルに基づいて前記第１の半導体記憶装置あるいは前記第２の半導体記憶装置へアクセスし、前記アクセスに応じて動的に前記テーブルを変更する制御部と、を備えたことを特徴とする。【００１３】
また、前記第２の半導体記憶装置は新たな有効なデータを前記第２の半導体記憶装置あるいは２以上の前記第１の半導体記憶装置の他の前記第１の半導体記憶装置へ記憶する場合に使用されるものであり、前記第１の半導体記憶装置の動作状態は前記半導体記憶装置へのガーベージコレクションの指示と前記半導体記憶装置からのガーベージコレクション完了通知に基づく動作状態を含み、前記第１の半導体記憶装置のガーベージコレクション動作状態と前記テーブルに基づいて前記第１の半導体記憶装置あるいは前記第２の半導体記憶装置へアクセスする前記制御部を備えたことを特徴とする。【００１４】
さらに、前記第１の半導体記憶装置への集中したアクセス動作状態に基づいて前記第１の半導体記憶装置あるいは前記第２の半導体記憶装置へアクセスする前記制御部を備えたことを特徴とする。【００１５】
そして、前記ガーベージコレクション動作状態あるいは集中したアクセス動作状態の前記第１の半導体記憶装置をアクセス先とする場合、当該アクセス先以外の前記第１の半導体記憶装置あるいは前記第２の半導体装置へのアクセスに変更し、当該変更先の第１の半導体記憶装置あるいは前記第２の半導体装置へアクセスする前記制御部を備えたことを特徴とする。【００１６】
また、本発明は、前記ストレージコントローラを備えたストレージ装置、ストレージシステム、前記半導体記憶装置の代わりに不揮発性メモリチップを制御する前記ストレージコントローラを備えた半導体記憶装置としても把握される。
【発明の効果】
【００１７】
本発明によれば、高いＩＯＰＳ性能やレスポンス性能を維持可能であり、維持するばかりではなく、さらに高いＩＯＰＳ性能やレスポンス性能を提供可能である。
【図面の簡単な説明】
【００１８】
【図１】サーバ−ストレージシステムの構成の例を示す図である。
【図２】基本的なＳＳＤ（半導体記憶装置）代替テーブルの例を示す図である。
【図３】各アドレスの対応関係の例を示す図である。
【図４】ライト前と後の各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【図５】ＳＳＤ管理情報の例を示す図である。
【図６】ストレージシステムの動作の例を示す図である。
【図７】ガーベージコレクション処理のフローチャートの例を示す図である。
【図８】ストレージシステムのライト処理のフローチャートの例を示す図である。
【図９】ＳＴＣ（ストレージコントローラ）のライト処理のフローチャートの例を示す図である。
【図１０】ストレージシステムのリード処理のフローチャートの例を示す図である。
【図１１】第２の実施の形態におけるＳＳＤ代替テーブルの例を示す図である。
【図１２】第２の実施の形態におけるＳＴＣのライト処理のフローチャートの例を示す図である。
【図１３】第３の実施の形態におけるストレージ装置の構成の例を示す図である。
【図１４】第３の実施の形態におけるＳＳＤ番号決定処理のフローチャートの例を示す図である。
【図１５】第３の実施の形態における各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【図１６】第３の実施の形態におけるライト前と後の各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【図１７】第４の実施の形態におけるＳＳＤ代替テーブルの例を示す図である。
【図１８】第４の実施の形態におけるライト前と後の各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【図１９】第５の実施の形態におけるＳＳＤ代替テーブルの例を示す図である。
【図２０】第５の実施の形態におけるライト前と後の各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【図２１】第６の実施の形態におけるストレージシステムのリード処理のフローチャートの例を示す図である。
【図２２】第７の実施の形態におけるＳＴＣのライト処理のフローチャートの例を示す図である。
【図２３】第８の実施の形態における各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【図２４】第９の実施の形態におけるＳＳＤの構成の例を示す図である。
【図２５】第１０の実施の形態における各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【図２６】第１１の実施の形態における各アドレスとＳＳＤ番号の対応関係の例を示す図である。
【発明を実施するための形態】
【００１９】
以下に添付図面を参照して、ストレージコントローラ、ストレージ装置、ストレージシステム、半導体記憶装置の実施の形態を詳細に説明する。
（第１の実施の形態）
図１は、複数のサーバ０１０１とストレージ装置０１１０とを接続したサーバ−ストレージシステム０１００の構成図の例である。
【００２０】
サーバ０１０１は一般的なコンピュータであり、ＣＰＵ０１０２、ＲＡＭ０１０３、ストレージインターフェース０１０４からなる。サーバ０１０１とストレージ装置０１１０とはスイッチ０１０５などを介して接続されている。
【００２１】
ストレージ装置０１１０はストレージコントローラ（以下、ＳＴＣとする）０１１１と二つ以上の半導体記憶装置（以下、Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ、ＳＳＤとする）０１３０からなる。ストレージシステム０１１０は複数のＳＴＣ０１１１を持つこともできる。なお、ストレージ装置０１１０はＳＳＤ０１３０以外にハードディスクを持つこともできる。また、ＳＳＤ０１３０はストレージ装置０１１０に内蔵されるだけでなく、外付けのＳＳＤとしてストレージ装置０１１０へ接続することもできる。ＳＴＣ０１１１はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）０１１７を持つ。ＲＡＭ０１１７としてＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を用いることもできる。ＲＡＭ０１１７は後述するデータキャッシュおよび代替ＳＳＤテーブル情報、ＳＳＤ管理情報を記憶する。また、ＳＴＣ０１１１は不揮発性メモリ０１１８を持つこともできる。不揮発性メモリ０１１８は停電などが生じたときにＲＡＭ０１１７の内容を退避させるために用いられたり、ストレージ構成情報を保持するために用いられたりする。ストレージ構成情報とは例えばＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｒｅｎｓｉｖｅ  Ｄｉｓｋｓ）やＪＢＯＤ（Ｊｕｓｔ  ａ  Ｂｕｎｃｈ  Ｏｆ  Ｄｉｓｋｓ）の構成情報などである。停電時にデータ退避を行うため、ＳＴＣ０１１１はバッテリーを持っても良い。
【００２２】
ＳＴＣ０１１１内の制御部０１１３はＧＣ起動制御０１１４、ＳＳＤ代替制御０１１５、ＳＳＤ管理情報制御０１１６を持つ。ＧＣ起動制御０１１４は各ＳＳＤ０１３０の消去済みブロック数とガーベージコレクションを行っているＳＳＤ０１３０の情報に基づいて選択したＳＳＤ０１３０へ消去済みブロック数を一定数以上に増やすよう指示する制御部である。なお、この指示を「ＧＣ起動」とし、ＳＳＤ０１３０が消去済みブロック数を増やしている動作を行っていることを「ＧＣ中」とする。ＳＳＤ代替制御０１１５は、サーバ０１０１からストレージ装置０１１０へのライト要求が生じたときに、ライトされるデータをＧＣ中のＳＳＤ０１３０へは書き込まれず、別のＳＳＤ０１３０へ書き込むようにライトする先のＳＳＤ０１３０を選択する代替ライト処理を行い、サーバ０１０１からストレージ装置０１１０へのリード要求が生じたときには、代替ライト処理の情報を参照してライトされたデータが格納されたＳＳＤ０１３０からデータをリードするようにＳＳＤ０１３０を選択する制御部である。ＳＳＤ管理情報制御０１１６は各ＳＳＤ０１３０から通知された消去済みブロック数とガーベージコレクションを行うＳＳＤ０１３０の番号を管理する。ＳＴＣ０１１１内のサーバインターフェース０１１２とＳＳＤインターフェース０１１９はそれぞれサーバ０１０１へのインターフェースとＳＳＤ０１３０へのインターフェースを含む。
【００２３】
ＳＳＤ０１３０は不揮発性メモリ０１３１、ＲＡＭ０１３２、制御部０１３３からなる。不揮発性メモリ０１３１は例えばＭＬＣ（Ｍｕｌｔｉ−ｌｅｖｅｌ  ｃｅｌｌ）型もしくはＳＬＣ（Ｓｉｎｇｌｅ−ｌｅｖｅｌ  ｃｅｌｌ）型のＮＡＮＤ型フラッシュメモリや相変化メモリ、ＲｅＲＡＭなどであっても良く、不揮発性メモリ０１３１にはサーバ０１０１からのライトデータが格納される。ＲＡＭ０１３２は例えばＤＲＡＭ、ＭＲＡＭ、相変化メモリ、ＲｅＲＡＭなどであっても良く、ＲＡＭ０１３２にはデータバッファ、データキャッシュ、ＳＳＤ内の変換に使用されるＳＳＤ論理アドレス−物理アドレス変換テーブル、ページ毎の有効／非有効情報、消去済み／不良ブロック／プログラム済みのブロック状態や消去回数といったブロック情報またはその一部の格納に使用される。また、停電などによるＲＡＭ０１３２内の情報消失を避けるため、停電時に制御部０１３３はＲＡＭ０１３２の内容を不揮発性メモリ０１３１に退避しても良い。また、ＳＳＤ０１３０はバッテリーやスーパーキャパシタを持つことで停電時のデータ消失の可能性を軽減しても良い。制御部０１３３は論理−物理アドレス変換制御部０１３４、ＧＣ実行制御部０１３５、ＳＴＣインターフェース０１３６を持つ。論理−物理アドレス変換制御部０１３４はＳＴＣ０１１１がＳＳＤ０１３０へアクセスするときに用いるＳＳＤ論理アドレスと制御部０１３３が不揮発性メモリ０１３１へアクセスするときに用いる物理アドレスの変換を行う。この変換において、制御部０１３３は不揮発性メモリ０１３１への書き込みを均等化するウェアレベリング（Ｗｅａｒ  Ｌｅｖｅｌｉｎｇ）を行う。ＧＣ実行制御部０１３５はＳＴＣ０１１１が指定したブロック数以上の消去済みブロックを作り出すために、後で説明するガーベージコレクションを実行する部分である。ＳＴＣインターフェース０１３６はＳＴＣ０１１１とのインターフェースを含む。制御部０１３３は図示しない不揮発性メモリインターフェースやＲＡＭインターフェースを持つこともできる。
【００２４】
図２は、ＳＴＣ０１１１のＲＡＭ０１１７が記憶するＳＳＤ代替テーブル０２０１の例である。ＳＳＤ代替テーブル０２０１はＳＳＤ代替制御０１１５で使用される。ＳＳＤ代替テーブル０２０１にはホストアドレス（以下、アドレスＨＡ）に対応する代替ＳＳＤ番号Ｓ（ここで、Ｓは０〜４）すなわちアドレスＨＡと同じストライプにある代替ＳＳＤ番号Ｓが保存されている。図２において、例えばアドレスＨＡ０〜３のストライプに関しては代替ＳＳＤの番号Ｓが２であり、アドレスＨＡ４〜７のストライプに関しては代替ＳＳＤの番号Ｓが４である。ストライプはＳＳＤ代替制御０１１５が代替ＳＳＤを管理する単位であり、代替ＳＳＤ番号はストライプ毎に管理されている。ストライプ毎に代替ＳＳＤ番号のみを管理することにより代替ＳＳＤテーブル０２０１のデータサイズを小さくすることが可能になる。このため、ＳＴＣ０１１１内のＲＡＭ０１１７の容量を小さくすることが可能になり、低コストのストレージ装置０１１０を実現することができる。
【００２５】
アドレスＨＡについて図３を用いて説明する。サーバ０１０１はストレージ装置０１１０のホストインターフェース０１１２で指定可能なデータ単位よりも大きなデータサイズでソフトウェアがデータを管理することが多い。このため、１個のアドレスＨＡが表すデータサイズはサーバ０１０１がＳＴＣ０１１１にアクセスするデータサイズ程度が望ましい。以下、アドレスＨＡが表すデータサイズは４ＫＢである例を説明する。また、ストレージ装置０１１０のホストインターフェース１１２の信号として、サーバ０１０１はＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）でアクセスするアドレスを指定する。１個のＬＢＡが表すデータサイズは例えば５１２Ｂである。なお、４Ｋ−ｎａｔｉｖｅなどを用いて、サーバ０１０１が４ＫＢ単位でアドレッシングして、ＳＴＣ０１１１にアクセスできることは言うまでもない。アドレスＨＡが表すデータサイズは４ＫＢであり、アドレスＬＢＡが表すデータサイズは５１２Ｂであるとすると、下記の式（１）からアドレスＬＢＡとアドレスＨＡの相互変換を行うことができる。
アドレスＬＢＡ＝アドレスＨＡ×８・・・（１）
ストレージコントローラ１１１は複数のアドレスＨＡをまとめたストライプデータ単位でデータを管理する。代替ＳＳＤの台数をＳＣＮＴとし、すべてのＳＳＤの台数をＮＣＮＴとすると、下記の式（２）からストライブデータ単位のアドレスであるストライプアドレス（以下、アドレスＳＡ）とアドレスＨＡの相互変換を行うことができる。
アドレスＨＡ＝アドレスＳＡ×（ＮＣＮＴ−ＳＣＮＴ）・・・（２）
以下、ＳＳＤ容量を１０ＴＢ、ＳＳＤ台数ＮＣＮＴを５、代替ＳＳＤ台数ＳＣＮＴを１の例を用いて説明する。式（２）より、下記の式（３）が得られる。
アドレスＨＡ＝アドレスＳＡ×４・・・（３）
この場合のアドレスＳＡとアドレスＨＡ、アドレスＬＢＡの対応関係の例を図３に示す。例えば、１つのアドレスＨＡで管理するデータサイズは４ＫＢであり、１つのアドレスＳＡで管理するデータサイズは１６ＫＢである。
【００２６】
図４（ａ）にアドレスＨＡとそのアドレスに対応するデータが格納されるＳＳＤの関係を示す。１個のストライプデータ中に４個のアドレスＨＡに対応するデータが格納されており、また、図４（ａ）中に記号「Ｓ」で示した１個の代替ＳＳＤが含まれている。代替ＳＳＤはストライプ単位内で有効なデータを格納していないＳＳＤ０１３０であり、ＧＣ中のＳＳＤ０１３０への書き込みを他のＳＳＤ０１３０へ行う際に利用する。また、ＧＣ中のＳＳＤ０１３０へは書き込みが行われないため、次の代替ＳＳＤとなる。代替ＳＳＤはＳＳＤ単位ではなく１個のストライプのアドレスＨＡに対して存在し、例えば１個のアドレスＳＡ０にはアドレスＨＡ０、１、２、３に対応するＳＳＤ番号０、１、３、４に有効なデータが格納され、アドレスＳＡ０におけるＳＳＤ番号２は代替ＳＳＤであって有効なデータが格納されていない。
【００２７】
図４（ａ）に示すように１個のストライプ内ではアドレスＨＡがＳＳＤ番号に対して必ず昇順に並べられている。例えば、アドレスＳＡ０については、図４（ａ）の左からアドレスＨＡ０、ＨＡ１、ＨＡ２、ＨＡ３となっている。このように、アドレスＨＡを１個のストライプ内で昇順に並べることにより、Ｓより左ではアドレスＨＡとＳＳＤ番号とが一致し、Ｓより右ではアドレスＨＡに代替ＳＳＤの個数を加算することで、すなわち、ストライプ１個につき代替ＳＳＤが１個の場合は図２のＳＳＤ代替テーブル０２０１のようにストライプ１個につき代替ＳＳＤ１個の情報を保持するだけで、アドレスＨＡに対応するデータがどのＳＳＤに格納されているかＳＳＤ番号を計算することができる。
【００２８】
図５はＳＳＤ管理情報０５０１の例である。ＳＳＤ０１３０毎の消去済みブロック数とＧＣ中のＳＳＤ番号が保持されている。ＳＴＣ０１１１は、ＳＳＤ管理情報０５０１を基に、次にガーベージコレクションを指示するＳＳＤを決めることや、ＧＣ中のＳＳＤを知ることができる。
【００２９】
図６と図７を用いてＳＳＤ０１３０の消去済みブロック数を増やす方法について説明する。図６はサーバ０１０１とＳＴＣ０１１１、ＳＳＤ０１３０の間でやりとりされる情報を示す図である。また、図７はガーベージコレクションの一連の処理の流れを示すフローチャートの例である。ＳＳＤ０１３０はＳＴＣ０１１１に消去済みブロック数を通知する（ステップＳ０７０１）。ＳＴＣ０１１１は消去済みブロック数をＳＳＤ管理情報０５０１にＳＳＤ管理情報制御０１１６を用いて保存する。次に、ＳＴＣ０１１１はＧＣ起動制御０１１４を用いて、ＳＳＤ０１３０にガーベージコレクションを行うか判断する（ステップＳ０７０２〜Ｓ０７０４）。この判断は例えば下記のようにして行うことができる。ＳＴＣ０１１１はＳＳＤ管理情報０５０１を参照し、現在、実行中のガーベージコレクションを行っているＳＳＤの数を取得する。その数が代替ＳＳＤの数以上であれば、新たなガーベージコレクションを行わない。その数が代替ＳＳＤの数未満であれば次の処理に進む（ステップＳ０７０２）。このようにして、ガーベージコレクションを同時に行うＳＳＤの数を代替ＳＳＤ以下に制御する。
【００３０】
ステップＳ０７０２において次のステップＳ０７０３に進むことが決定された場合、ＳＳＤ管理情報制御０１１６を用いてＳＳＤ管理情報０５０１を参照し、ＳＳＤ０１３０の消去済みブロック数がブロック数閾値以下であるＳＳＤ０１３０があるかを検索する。検索した結果、ブロック数閾値以下のＳＳＤ０１３０が見つかった場合には次のステップＳ０７０５を行う。ブロック数閾値は図示されていないＳＴＣ０１１１を管理する端末から設定することができる。ブロック数閾値はＳＴＣ０１１１の不揮発性メモリ０１１８などに保存され、ＳＴＣ１１１の起動時に読み込むことができる。また、一定の条件でブロック数閾値を変化させることもできる。例えば、ストレージ装置０１１０へのアクセスが少ない夜間はブロック数閾値を増やし、消去済みブロックを多く確保することができる。または、ストレージ装置０１１０へのアクセス頻度の統計を取り、アクセスの少ない時間帯はブロック数閾値を増やし、アクセスの多い時間帯はブロック数閾値を減らすことができる。このようにして、サーバ−ストレージシステム０１００の全体最適化を行い、高性能化することが可能である。
【００３１】
ステップＳ０７０５ではＳＴＣ０１１１がＳＳＤ０１３０に消去済みブロック数を目標ブロック数まで増やすように指示する（ＧＣ起動）。目標ブロック数は例えばブロック数閾値に一定数、ＳＳＤ０１３０内の不揮発性メモリ０１３１の全ブロック数の５％のブロック数を加えたものにすることができる。もしくは、昼間と夜間でストレージ装置０１１０へのアクセス量が異なるサーバ−ストレージシステム０１００の場合には、ストレージ装置０１１０でサーバ０１０１からのデータアクセス量の統計を取り、昼間に発生するアクセスを処理するために必要な消去済みブロック数の想定値にマージンブロック数を加えたものを目標ブロック数として用いることができる。マージンブロック数は例えば想定値の５０％である。
【００３２】
次に、ＳＳＤ０１３０がガーベージコレクションを行い、消去済みブロック数を増やす（ステップＳ０７０６）。ガーベージコレクションでは、ＳＳＤ０１３０内のＧＣ実行制御部０１３５が不揮発性メモリ０１３１のリードとライト、消去を行い、不揮発性メモリ０１３１の消去済みブロック数を増やす。ガーベージコレクションにより、制御部０１３３が不揮発性メモリ０１３１にアクセスするときに用いるアドレスである物理アドレスとＳＴＣ０１１１がＳＳＤ０１３０にアクセスするときに用いるアドレスである論理アドレスとの対応関係が更新される。論理−物理アドレス変換制御部０１３４はその対応関係を論理−物理アドレス変換テーブルを用いて管理する。論理−物理アドレス変換テーブルは不揮発性メモリ０１３１に置くことができる。また、論理−物理アドレス変換テーブルもしくは、その一部をＲＡＭ０１３２に置くこともできる。
【００３３】
ガーベージコレクションの処理を具体的に説明すると、ＧＣ実行制御部０１３５は例えばＲＡＭ０１３２内に記憶された不揮発性メモリ０１３１のブロック管理情報を基に、今後、ＳＴＣ０１１１から読み出される可能性の無い無効データ（Ｉｎｖａｌｉｄデータとも言われる）を多く含むブロックを検索し、そのブロックに含まれる今後、ＳＴＣ１１１から読み出される可能性の有る有効データ（Ｖａｌｉｄデータとも言われる）を別のブロックにコピーする。なお、ブロックとは制御部０１３３が不揮発性メモリ０１３１を消去する単位である。そして、コピー元のブロックを消去する。このガーベージコレクションを行うことで消去済みブロック数を増やすことができる。
【００３４】
次に、図６と図８を用いて、サーバ−ストレージシステム０１００のライト処理について説明する。ライト処理はサーバ０１０１がライト要求をストレージ装置０１１０に行うことで開始される（ステップＳ０８０１）。サーバ０１０１はライトコマンドとライトデータをひとまとめにして、ストレージ装置０１１０に送ることができる。具体的には、ＣＰＵ０１０２はサーバ０１０１内のＲＡＭ０１０３に保持されたライトデータをストレージインターフェース０１０４経由でストレージ装置１１０に送ることができる。
【００３５】
また、複数のライト要求に関して、複数のライトコマンドを送ったのちに、複数のライトデータを送ることもできる。なお、サーバ０１０１はＳＳＤ０１３０毎の消去済みブロック数をストレージ装置０１１０に問い合わせることができる。また、ＳＴＣ０１１１は消去済みブロック数がある一定の値になったことをサーバ０１０１に通知することができる。サーバ０１０１は問い合わせた結果、もしくは、ＳＴＣ０１１１から通知された結果を基にストレージ装置０１１０へのアクセス量を変更することができる。これにより、ストレージ装置０１１０のレスポンス性能を一定以上、確保することが可能になり、高レスポンスのサーバ−ストレージシステム０１００を実現することができる。
【００３６】
次に、ＳＴＣ０１１１のキャッシュへのヒット判定を行う（ステップＳ０８０２）。キャッシュ構成としては、ライトバック方式、セットアソシエイティブ方式などを用いることができる。ライト要求に含まれるアドレスＬＢＡから決まるアドレスＨＡを基に、キャッシュエントリ番号とタグ値を決定し、該当するキャッシュエントリ番号のキャッシュ情報を調べ、タグ値が一致するかをそのエントリに属するすべてのラインについて検索する。サーバ０１０１からストレージ装置０１１０にライトされたデータがＳＴＣ０１１１のキャッシュ内にあれば（キャッシュヒット）、キャッシュ内のデータを更新する。このときには、ＳＳＤ０１３０へのライトは行われない。キャッシュデータが更新されると、そのラインはダーティー（ＳＳＤ内のデータとキャッシュ内のデータが異なる状態）とマークされる。なお、ＳＳＤ内のデータとキャッシュ内のデータが一致していれば、キャッシュはクリーンであるとする。ラインがダーティーかクリーンかはキャッシュ管理情報で管理する。ダーティーとマークされたラインを破棄するときには、キャッシュ内のデータをＳＳＤ０１３０に書き戻すことになる。サーバ０１０１からのライトにより、キャッシュデータの入れ替えが発生するとラインを破棄する状況が発生することがある。キャッシュ内のダーティーなラインの数はダーティーライン数閾値以下になるように制御部０１１３により制御されている。ダーティーライン数閾値はＳＳＤ管理情報０５０１に含まれる消去済みブロック数に基づいて、制御部０１１３が変化させることが可能である。この場合、ＳＳＤ０１３０の状況に合わせて、ＳＴＣ０１１１からＳＳＤ０１３０へのライトのタイミングを変化させることが可能であり、ＳＴＣ０１１１からＳＳＤ０１３０へのレスポンスを高めることが可能であり、高性能なストレージシステムを実現することができる。キャッシュ管理情報とキャッシュデータはＳＴＣ０１１１内のＲＡＭ０１１７、もしくは、不揮発性メモリ０１１８に置くことができる。
【００３７】
ＳＴＣ０１１１のキャッシュ処理の結果、ＳＳＤ０１３０への書き戻しが行われるかを判定する（ステップＳ０８０３）。ＳＳＤ０１３０へのキャッシュデータの書き戻しが発生したときは、ＳＴＣ０１１１のライト処理が行われる（ステップＳ０８０４）。詳細をＳＴＣ０１１１のライト処理を示すフローチャートである図９を用いて説明する。図９では代替ＳＳＤすなわちＳの個数が１の場合を説明するが、代替ＳＳＤが２以上の場合も同様である。
【００３８】
ＳＳＤ代替制御０１１５のＳＳＤ０１３０へのライトにおいては、ＳＳＤ０１３０の代替ライト処理を行ったことをＳＳＤ代替テーブル０２０１に記録し、ＳＳＤ０１３０からのリードにおいては、ＳＳＤ０１３０の代替処理に応じたリード動作を行う。まず、ライトについて説明する。ＳＳＤ代替制御部０１１５は、図４のＳＳＤ代替テーブル０２０１を参照し、アドレスＨＡと同じストライプにある代替ＳＳＤ番号Ｓを取得する（ステップＳ０９０１）。次に、下記（４）式を用いてアドレスＨＡから仮データＳＳＤ番号Ｄ＿ｔを計算する（ステップＳ０９０２）。
Ｄ＿ｔ＝アドレスＨＡ  ｍｏｄ  （ＮＣＮＴ−ＳＣＮＴ）・・・（４）
ここで、ｍｏｄは除算の余りを求めることを意味している。すなわち、Ｄ＿ｔはアドレスＨＡを（ＮＣＮＴ−ＳＣＮＴ）で割った余りである。ここでではＮＣＮＴ＝５、ＳＣＮＴ＝１であるので下記（５）式となる。
Ｄ＿ｔ＝アドレスＨＡ  ｍｏｄ  ４・・・（５）
次に、Ｄ＿ｔとＳを比較する（ステップＳ０９０３）。Ｄ＿ｔがＳ以上であれば、Ｓが１個ある分だけＳＳＤ番号がずれるため、Ｄ＿ｔに１を加えて新たな仮データＳＳＤ番号Ｄ＿ｔとする（ステップＳ０９０４）。ここで、アドレスＨＡは昇順に並んでいるため、このような簡単な計算でＤ＿ｔを求めることができる。このように求めた仮データＳＳＤ番号Ｄ＿ｔの示すＳＳＤ０１３０が消去済みブロックを増やす処理を行っているか（ＧＣ中か）をＳＳＤ管理情報０５０１に基づいて判定する（ステップＳ０９０５）。もし、ＧＣ中でなければ、実際にデータをライトする実データＳＳＤ番号ＤをＤ＿ｔにする（ステップＳ０９０６）。
【００３９】
もし、ＧＣ中であれば、ＧＣ中のＳＳＤ０１３０にライトしようとしたデータを別のＳＳＤ０１３０にライトする（代替ライト処理）。さらに、今後のサーバ０１０１からのリード動作で正しく読出せるように、代替ライト処理が行われたことを記録する。具体的にはＳＳＤ代替テーブル０２０１のアドレスＨＡに対応する代替ＳＳＤをＳからＤ＿ｔに更新する（ステップＳ０９０７）。このようにして、ＳＳＤ番号Ｄ＿ｔに対して代替処理が行われたことをストライプ単位で管理する。次に、シフト処理が必要かを判定する（ステップＳ０９０８）。シフト処理はストライプ内でアドレスＨＡをＳＳＤ番号に対して昇順に保つために行う処理である。具体的には、ＳＴＣ０１１１がＳＳＤ０１３０からデータをリードし、別のＳＳＤ０１３０にライトすることでデータコピーを行い、アドレスＨＡが昇順を保つように並べ替える（ステップＳ０９０９）。シフト処理判定とシフト処理を考慮して、実データＳＳＤ番号Ｄを決定する（ステップＳ０９１０）。最後に、実データＳＳＤ番号ＤのＳＳＤにライトを行う（Ｓ０９１１）。
【００４０】
アドレスＨＡは複数のＳＳＤ０１３０を一つにまとめて管理するアドレスであるため、ＳＳＤ０１３０への実際のライトにはＳＳＤ０１３０毎のアドレスを使用する。ＳＴＣ０１１１からＳＳＤ０１３０へのライトに用いるＳＳＤ毎のアドレスであるＳＳＤ論理アドレスＬＡは下記（６）式で求めることができる。
アドレスＬＡ＝アドレスＳＡ・・・（６）
なお、（６）式でアドレスＬＡを求めると、ＳＳＤ１３０にアクセスされないＳＳＤ論理アドレスが発生する。例えば、図４（ａ）に示す例ではＳＳＤ２のＳＳＤ論理アドレスＬＡ０はＳであるため、サーバ０１０１からのライト先としてＳＴＣ０１１１がＳＳＤ２のＳＳＤ論理アドレスＬＡ０へアクセスすることはない。また、ＳＴＣ０１１１がＳＳＤ４のＳＳＤ論理アドレスＬＡ１へもアクセスすることはない。そのことを考慮して、ＳＳＤのプロヴィジョナル（Ｐｒｏｖｉｓｉｏｎａｌ）領域の割合を通常より低く設定することができる。具体的には通常より下記（７）式の追加の割合ＰＰだけ低く設定することができる。この場合、アドレスＨＡからＳＳＤ論理アドレスＬＡへの変換を高速に行うことができるため、高速なストレージ装置０１１０を実現できる。
ＰＰ＝（ＮＣＮＴ−ＳＣＮＴ）／ＮＣＮＴ・・・（７）
プロヴィジョナル領域の割合を変えるのではなく、（６）式を変更し、アクセスされないＳＳＤ論理アドレスＬＡを無くすようにアドレスＬＡの決定を行うことも可能であることは言うまでもない。この場合は、Ｓの分が不要となるため、ＳＳＤ１３０の持つＳＳＤ論理アドレスＬＡから物理アドレスＰＡへのアドレス変換テーブルのサイズを小さくすることが可能であり、ＳＳＤ０１３０のアドレス変換テーブルを記憶するＲＡＭ０１３２のコストを低下させることができるので、低コストのストレージ装置０１１０を実現できる。ＳＳＤ物理アドレスＰＡはＳＳＤの制御部０１３３が不揮発性メモリ０１３１にアクセスするときに用いるアドレスである。ＳＳＤは論理−物理アドレス変換制御部０１３４を用いて、ＳＳＤ論理アドレスＬＡからＳＳＤ物理アドレスＰＡへ変換を行うことができる。
【００４１】
具体的にさらに説明する。図４（ａ）に示す状態から、ＳＳＤ０がＧＣ中のときにサーバ０１０１がアドレスＨＡ８、すなわち、ＬＢＡ６４〜７１のデータを更新したとき、サーバ０１０１がライトを行った後のアドレスＨＡとＳＳＤ番号の対応関係を図４（ｂ）に示す。アドレスＨＡ８はアドレスＳＡ２に対応する。仮データ番号Ｄ＿ｔは０であり、ＳＳＤ０にライトしようとしたが、ＧＣ中のため、アドレスＳＡ２の代替ＳＳＤであったＳＳＤ１にライトした。その結果、ＳＳＤ１のＳＳＤ論理アドレスＬＡ２へアドレスＨＡ８に対応するデータが書き込まれる。この条件では、アドレスＳＡ２の中では、アドレスＨＡが昇順に保たれるため、シフト処理は行われていない。ＳＳＤ０のＳＳＤ論理アドレスＬＡ２にはサーバ０１０１から参照される可能性のある有効データは書かれていない。ＳＴＣ０１１１はＳＳＤ０にＴｒｉｍコマンドを送り、ＳＳＤ論理アドレスＬＡ２が無効データであることを通知することができる。通知を行うことで、ＳＳＤ０はガーベージコレクションによりＳＳＤ論理アドレスＬＡ２の領域を消去することが可能になり、ガーベージコレクションをより効率的に実行できる、具体的にはガーベージコレクションに伴う不揮発性メモリ０１３１へのライト、リードのデータ量を削減することができる。その結果、ストレージシステム１１０のデータ転送性能を向上させることができる。なお、Ｔｒｉｍコマンドはサーバ０１０１がＳＳＤ０１３０に対して、無効領域を通知するコマンドである。
【００４２】
また、ＳＳＤ１３０はライトバックキャッシュを持ち、ＳＴＣ１１１からライト要求を受けると、ＳＳＤ０１３０のキャッシュに書き込むことができる。キャッシュにライトされることでキャッシュから追い出されたデータは不揮発性メモリ０１３１に書き込まれる。ＳＳＤ０１３０がキャッシュを持たないことや、ライトキャッシュの種類がライトスルーキャッシュであり、キャッシュへライトし、不揮発性メモリに書き込んでから、ライト完了のレスポンスをＳＴＣ０１１１に行うことが可能であることは言うまでもない。この場合、停電などに対するデータ信頼性が向上し、高信頼のストレージ装置０１１０を実現できる。
【００４３】
次の例では、アドレスＨＡ１個が示すデータ領域の一部のみを更新するようサーバ０１０１が要求した場合、例えば、アドレスＨＡ０の中でアドレスＬＢＡ０〜３のみを更新する場合について説明する。ＧＣ中のＳＳＤ番号を０とする。このときＳＴＣ０１１１は残りのアドレスＬＢＡ４〜７のデータをＧＣ中のＳＳＤ０からリードして、サーバ０１０１から送られたＬＢＡ０〜３のデータと合わせたＬＢＡ０〜７のデータをライトする（リードモデファイライト）。ライト先ＳＳＤ０１３０はＧＣ中のＳＳＤ０１３０以外に制御する。次にシフト処理判定を行う（ステップＳ０９０８）。この条件では、アドレスＨＡ０のデータを代替ＳＳＤであるＳＳＤ２に書き込むと、アドレスＳＡ０の中でアドレスＨＡ１（ＳＳＤ１）−ＨＡ０（ＳＳＤ２）−ＨＡ２（ＳＳＤ３）−ＨＡ３（ＳＳＤ４）になり、アドレスがＳＳＤ番号に対して昇順に並ばなくなる。そこでシフト処理を行う（ステップＳ０９０９）。具体的には、ＳＴＣ０１１１がＳＳＤ１からアドレスＨＡ１のデータをリードし、次に、ＳＴＣ０１１１がＳＳＤ２にアドレスＨＡ１のデータをライトする。アドレスＳＡ０内でアドレスＨＡが昇順に並ぶように制御し、また、ＧＣ中のＳＳＤ０にはライトしないことから、アドレスＨＡ０の実データＳＳＤ番号Ｄは１に決定される（ステップＳ０９１０）。最後に、アドレスＨＡ０のデータをＳＳＤ１にライトする（ステップＳ０９１１）。
【００４４】
次に、図１０を用いて、サーバ−ストレージシステム０１００のリード処理について説明する。リード処理はサーバ０１０１がリード要求をストレージ装置０１１０に行うことで開始される（ステップＳ１００１）。ＳＴＣ０１１１はリード要求に含まれるアドレスＬＢＡから決まるアドレスＨＡを基に、ＳＴＣ０１１１内のキャッシュにヒットしたかを判定する（ステップＳ１００２）。具体的には、アドレスＨＡからキャッシュエントリ番号とタグ値を決定し、該当するキャッシュエントリ番号のキャッシュ情報を調べ、タグ値が一致するかをそのエントリに属するすべてのラインについて検索する。ＳＴＣ０１１１のキャッシュ内にサーバ０１０１から要求されたデータがあれば（キャッシュヒット）、キャッシュ内のデータをリードして、サーバ０１０１に送る（ステップＳ１００３）。ＳＴＣ０１１１のキャッシュ内にサーバ０１０１から要求されたデータがなければ（キャッシュミス）、ＳＳＤ０１３０からデータの読出しを行う。具体的には、まず、ＳＳＤ番号の決定処理を行う（ステップＳ１００４）。ＳＳＤ番号の決定処理は代替ＳＳＤ番号の決定と仮データＳＳＤ番号Ｄ＿ｔの決定（ステップＳ０９０１〜Ｓ０９０４）と同じ処理である。リードを行うＳＳＤ番号はＤ＿ｔである（ステップＳ１００５）。次に、ＳＳＤ０１３０にリード要求を行う（ステップＳ１００６）。
【００４５】
制御部０１３３はＳＳＤ０１３０のキャッシュにヒットしたかを判定する（ステップＳ１０００７）。キャッシュにヒットした場合は、キャッシュからデータリードを行う（ステップＳ１００８）。キャッシュにヒットしなかった場合は、不揮発性メモリ０１３１からデータを読出し、そのデータをＳＴＣ０１１１に送ると共に、ＳＳＤ０１３０のキャッシュに書き込む（ステップＳ１００９）。このときに、ＳＳＤ０１３０のキャッシュが満杯であるため、ＳＳＤ０１３０のキャッシュから不揮発性メモリ０１３１への書き戻しが行われることがある。次に、ＳＴＣ０１１１はＳＳＤ０１３０からリードしたデータをサーバ０１０１に送ると共に、そのデータをＳＴＣ０１１１のキャッシュに書き込む（ステップＳ１０１０）。さらに、ＳＴＣ０１１１のキャッシュが満杯のため、キャッシュからＳＳＤ０１３０への書き戻しが発生するかを判定する（ステップＳ１０１１）。書き戻しが発生した場合には、ＳＳＤ０１３０へのライトを行う（ステップＳ１０１２）。そのときに、ＳＴＣのライト処理と同様にＧＣ中のＳＳＤへのライトを避けるように制御することは言うまでもない。以上のフローに従い、リード処理は実行される。
【００４６】
以上の処理により、ＳＴＣ０１１１は消去済みブロック数を増やす処理を行っているため、ＩＯＰＳ性能やレスポンス性能が低下しているＳＳＤ０１３０へのライトを行うことがなくなる。このため、ＩＯＰＳ性能やレスポンス性能の高いストレージ装置０１１０を実現することができる。また、サーバ０１０１はＩＯＰＳ性能やレスポンス性能の高いストレージ装置０１１０を用いることができるため、サーバ０１０１を含む全体としても高性能なサーバ−ストレージシステム０１００を実現することができる。別の言い方を行うと、ガーベージコレクションに起因するＳＳＤの性能低下をＳＴＣ０１１１は隠蔽することができる。また、ストレージ装置１１０のレスポンス時間が短くなることで、サーバ０１０１はより多くの命令を発行することが可能になる。そのため、ストレージ装置０１１０のＩＯＰＳ性能も向上する。
（第２の実施の形態）
第２の実施の形態では、ストレージ装置０１１０のＩＯＰＳ性能やレスポンス性能をさらに向上させる制御を行う制御部０１１３を持つストレージ装置０１１０について説明する。具体的には、シフト処理が不要となり、ＳＴＣ０１１１からＳＳＤ０１３０へのリードとライトの回数を減らすことができる。
図１１はシフト処理を不要にするＳＳＤ代替テーブル１１０１の例である。シフト処理ではアドレスＨＡとＳＳＤ番号の両方を昇順に並べることにより、アドレスＨＡからＳＳＤ番号を計算できるようにしていたが、このＳＳＤ代替テーブル１１０１には代替ＳＳＤのＳＳＤ番号に加え、各アドレスＨＡに対応したＳＳＤ番号も格納されており、計算の必要がない。ＳＳＤ代替テーブル１１０１においてアドレスＨＡの０は０〜３を表し、アドレスＨＡの４は４〜７を表して、データＳＳＤ０はアドレスＨＡを４で割った余りが０のアドレスを表し、データＳＳＤ１はアドレスＨＡを４で割った余りが１のアドレスを表すため、例えばアドレスＨＡが４のデータＳＳＤ０〜３はそれぞれアドレスＨＡ４〜７を表す。そして、アドレスＨＡが４の右欄は代替ＳＳＤのＳＳＤ番号が４であり、さらなる右欄のＳＳＤ番号０、２、３、１がそれぞれデータＳＳＤ０、１、２、３すなわちアドレスＨＡ４、５、６、７に対応することを表す。このＳＳＤ代替テーブル１１０１を用いることにより、アドレスＨＡに対応したデータがどのＳＳＤに格納されているかを管理することが可能になり、アドレスＨＡからＳＳＤ番号の特定に計算が必要でないため、同一ストライプ内でアドレスＨＡを昇順に並べるように制限する必要がなくなる。
【００４７】
図１２のライト処理を示すフローチャートのうち、図９と同一の符号が付されたステップは既に処理を説明済みであるので、ここでは説明を省略する。
【００４８】
代替ライト処理（ステップＳ１２０１）は実データＳＳＤ番号ＤへＳを設定する。代替ライト処理（ステップＳ１２０１）が行われた後に、シフト処理が必要かの判定（ステップＳ９０８）と、シフト処理の実行（ステップＳ０９０９）は不要であり、図１２の処理では存在しない。
【００４９】
第二の実施の形態ではＳＴＣ１１１はシフト処理を行う必要がなくなるため、ＳＳＤ０１３０へのリードとライトの回数を減らすことが可能となり、その結果として高性能なストレージ装置０１１０を実現することができる。また、ＳＳＤ０１３０へのライトデータ量を低減することができるため、ＳＳＤ０１３０の寿命を延ばし、高信頼のストレージ装置０１１０を実現できる。
（第３の実施の形態）
第３の実施の形態では、ＩＯＰＳ性能やレスポンス性能が高く、信頼性の高いＲＡＩＤ構成の適用について説明する。
【００５０】
図１３はＲＡＩＤ構成をさらに適用したストレージ装置１３０１である。
【００５１】
図１と同一の符号を付された構成については、既に説明してあるので、ここでは説明を省略する。
【００５２】
ストレージ装置１３０１はＳＴＣ１３０２を持つ。ＳＴＣ１３０２は制御部１３０３を持つ。制御部１３０３はＲＡＩＤ制御部１３０４とＧＣ起動制御部０１１４、ＳＳＤ代替制御部０１１５、ＳＳＤ情報管理制御部０１１６を持つ。ＲＡＩＤの構成例としてＲＡＩＤ５の場合を説明する。すべてのＳＳＤの台数ＮＣＮＴを５台とし、代替ＳＳＤの台数ＳＣＮＴを１台とする。パリティＳＳＤの台数ＰＣＮＴはＲＡＩＤ５の場合は１台である。なお、ＲＡＩＤ６ではＰＣＮＴは２台になる。ＲＡＩＤのデータ分割単位をストライプとし、１つのストライプに含まれるデータは３台のＳＳＤに分割して格納され、別の１台のＳＳＤにはパリティが保存される。例えば１つのアドレスＨＡで管理するデータサイズは４ＫＢであるとすると、１つのストライプのアドレスＳＡで管理するデータサイズは１２ＫＢである。下記（８）式を用いて、アドレスＳＡとアドレスＨＡの相互変換を行うことができる。
アドレスＨＡ＝アドレスＳＡ×（ＮＣＮＴ−ＳＣＮＴ）・・・（８）
上記の条件では、式（８）より、下記の式（９）が得られる。
アドレスＨＡ＝アドレスＳＡ×３・・・（９）
ＲＡＩＤ５の制御について簡単に説明する。
【００５３】
ＳＴＣ１３０２はサーバ０１０１からライトするデータを受け取ったときに、データからパリティを計算し、データとパリティを別のＳＳＤ０１３０に格納する。例えば、データをＳＳＤ番号０〜２に分割して格納し、パリティをＳＳＤ番号４に格納する。ＳＳＤ０１３０が故障するなどの原因により、ＳＴＣ１３０２がＳＳＤ番号０〜２の１台からデータをリードできなくなった場合、例えばＳＳＤ番号０からリードできなくなった場合には、ＳＴＣ１３０２は残りのデータが格納されたＳＳＤ番号１、２からデータをリードし、ＳＳＤ番号４からパリティをリードする。これらのデータとパリティからＳＳＤ番号０に格納されたデータを復元する。このようにすることで、ＲＡＩＤを構成する５台のＳＳＤのうち、１台が故障してもデータをリードでき、サーバ０１０１は作業を継続することが可能になる。
【００５４】
ＳＴＣ１３０２のライト処理について図１４を用いて説明する。図１４はＳＴＣ１３０２のライト処理に含まれるＳＳＤ番号の決定処理を示すフローチャートのうち、既に説明した図９に示された同一の符号を付された処理について、ここでは説明を省略する。ＳＳＤ番号の決定処理は、代替ＳＳＤ番号の決定処理、パリティＳＳＤ番号の決定処理、仮データＳＳＤ番号Ｄ＿ｔの決定処理で構成される。
【００５５】
まず、代替ＳＳＤ番号Ｓの取得を行う（ステップＳ０９０１）。次に、アドレスＨＡを基に仮パリティ番号Ｐ＿ｔを決定する（ステップＳ１４０１）。例えば、下記（１０）式を用いて、仮パリティ番号Ｐ＿ｔを決定することができる。
Ｐ＿ｔ＝ＮＣＮＴ−ＳＣＮＴ−ＰＣＮＴ−（アドレスＨＡ  ｍｏｄ  （ＮＣＮＴ−ＳＣＮＴ））・・・（１０）
今回の例では、下記（１１）式が得られる。
Ｐ＿ｔ＝３−（アドレスＨＡ  ｍｏｄ  ４）・・・（１１）
さらに、仮パリティ番号Ｐ＿ｔが代替ＳＳＤ番号Ｓ以上かを判定する（ステップＳ１４０２）。Ｐ＿ｔがＳ以上の場合、仮パリティ番号Ｐ＿ｔを１増加させる（ステップＳ１４０３）。次に、仮データＳＳＤ番号Ｄ＿ｔを計算する（ステップＳ１４０４）。例えば、下記（１２）式を用いて計算することができる。
Ｄ＿ｔ＝アドレスＨＡ  ｍｏｄ  （ＮＣＮＴ−ＳＣＮＴ−ＰＣＮＴ）・・・（１２）
今回の例では、下記（１３）式となる。
Ｄ＿ｔ＝アドレスＨＡ  ｍｏｄ  ３・・・（１３）
さらに、仮データＳＳＤ番号Ｄ＿ｔと代替ＳＳＤ番号Ｓを比較する（ステップＳ１４０５）。Ｄ＿ｔがＳ以上ならば、Ｄ＿ｔを１増加する（ステップＳ１４０６）。次に、Ｄ＿ｔと仮パリティ番号Ｐ＿ｔを比較する。Ｄ＿ｔがＰ以上ならば、Ｄ＿ｔを１増加する（ステップＳ１４０８）。
【００５６】
その後、仮データＳＳＤ番号Ｄ＿ｔのＳＳＤ０１３０がＧＣ中かを確認する。もし、ＧＣ中であれば別のＳＳＤ０１３０にライトし（代替ライト処理１）、実パリティＳＳＤ番号ＰはＰ＿ｔにする。ＧＣ中でなければ、仮パリティ番号Ｐ＿ｔのＳＳＤ０１３０がＧＣ中かを確認する。もし、ＧＣ中であれば、実パリティ番号ＰをＳにする。すなわち、ＧＣ中のＳＳＤ０１３０へパリティをライトする代わりに別のＳＳＤ０１３０である代替ＳＳＤにライトする（代替ライト処理２）。もし、ＧＣ中でなければ、実パリティ番号ＰはＰ＿ｔにする。その後、シフト処理を行うか判定し、シフト処理が必要であれば、実行する。
【００５７】
以上の制御を行うことにより、データ及びパリティを格納したＳＳＤ０１３０へ消去済みブロック数を増やす制御を行っており、ＩＯＰＳ性能やレスポンス性能が低下しているＳＳＤ０１３０にライトすることがなくなり、ＩＯＰＳ性能やレスポンス性能の高いストレージ装置１３０２を実現することができる。
【００５８】
図１５はアドレスＨＡに対応するデータとそのデータが格納されたＳＳＤ０１３０の関係を示す図である。アドレスＳＡ１個が示す領域に３個のアドレスＨＡと１個の代替ＳＳＤを示すＳ、１個のパリティＰが割り当てられている。アドレスＨＡはＳＳＤ番号に対して昇順に並べられており、仮パリティ番号Ｐ＿ｔをアドレスＨＡから計算できるよう制御することで、ストライプ毎に代替ＳＳＤ番号Ｓのみを管理するだけで済む。これにより代替ＳＳＤテーブルのデータサイズを小さくすることが可能になる。このため、ＳＴＣ１３０２内のＲＡＭ０１１７などの容量を小さくすることが可能になり、低コストのストレージ装置１３０１を実現することができる。
【００５９】
ところで、図１６（ａ）と図１６（ｂ）はＧＣ中のＳＳＤ０にアドレスＨＡ１５のデータが格納されているとき、アドレスＨＡ１５のデータをサーバ０１０１がライトした前後のデータ配置を示す図である。アドレスＳＡ５において、ＳＳＤ番号の昇順にアドレスＨＡ１５、ＨＡ１６、Ｐ、ＨＡ１７を記録する必要があるため、ＳＳＤ１にサーバ０１０１から送られたデータをライトし、ＳＳＤ３にパリティをライトすると共に、ＳＳＤ２とＳＳＤ４にシフト処理によりアドレスＨＡ１６、１７のデータをライトする。図１６の場合において、ライト処理を行うＳＳＤ１３０はＳＳＤ１、２、３、４の４台となる。
（第４の実施の形態）
第４の実施の形態では、さらにＩＯＰＳ性能やレスポンス性能が高いストレージ装置１３０１の例を説明する。第４の実施の形態はストレージ装置１３０１に含まれるＳＴＣ１３０２が持つ代替ＳＳＤテーブルで管理する情報が第３の実施の形態と異なる点が特徴である。
【００６０】
図１７は、代替ＳＳＤテーブル１７０１の例を示す図である。代替ＳＳＤテーブル１７０１は代替ＳＳＤだけでなく、パリティＳＳＤのＳＳＤ番号を管理する。パリティＳＳＤの番号をも管理することでシフト処理が必要な確率を低下させ、また、シフト処理が発生した場合も、ＳＳＤへのリードデータ量とライトデータ量を低減することができる。そのため、ストレージ装置１３０１のＩＯＰＳ性能やレスポンス性能を高くすることができる。
【００６１】
図１８（ａ）と図１８（ｂ）はＧＣ中のＳＳＤ０にアドレスＨＡ１５のデータが格納されているときに、アドレスＨＡ１５のデータをサーバ０１０１が更新した前後のデータ配置を示す図である。アドレスＳＡ５において、ＳＳＤ番号の昇順にアドレスＨＡ１５、ＨＡ１６、ＨＡ１７を記録する必要がある。一方、パリティＳＳＤのＳＳＤ番号を変更することができる。そのため、ＳＳＤ１にサーバ０１０１から送られたデータをライトし、ＳＳＤ４にパリティをライトすると共に、ＳＳＤ２へのシフト処理によりアドレスＨＡ１６のデータをライトする。一方、ＳＳＤ３のデータをシフトする必要はない。図１８の場合において、ライト処理を行うＳＳＤ１３０はＳＳＤ１、２、４の３台となる。第３の実施の形態の図１６と比較してライト処理を行うＳＳＤ１３０の台数を１台減らすことができる。
（第５の実施の形態）
第５の実施の形態では、第４の実施の形態よりもさらにＩＯＰＳ性能やレスポンス性能が高いストレージ装置１３０１の例を説明する。第５の実施の形態はストレージ装置１３０１に含まれるＳＴＣ１３０２が持つ代替ＳＳＤテーブルの管理する情報が第４の実施の形態と異なる点が特徴である。
【００６２】
図１９にＲＡＩＤに対応した代替ＳＳＤテーブル１９０１を示す。この代替ＳＳＤテーブル１９０１は代替ＳＳＤとパリティＳＳＤ、データＳＳＤのＳＳＤ番号を管理する。これらのＳＳＤ番号を管理することでシフト処理が不要になるため、ＳＳＤ０１３０へのリードデータ量とライトデータ量を低減することができる。そのため、ストレージ装置１３０１のＩＯＰＳやレスポンス性能をさらに高くし、信頼性を高くすることができる。
【００６３】
図２０（ａ）と図２０（ｂ）はＧＣ中のＳＳＤ０にアドレスＨＡ１５のデータが格納されているときに、アドレスＨＡ１５のデータをサーバ０１０１が更新した前後のデータ配置を示す図である。アドレスＳＡ５において、ＳＳＤ番号に関係なく、データやパリティを記録することがある。そのため、ＳＳＤ４にサーバ０１０１から送られたデータをライトし、ＳＳＤ２にパリティをライトするだけでよく、シフト処理を行う必要がない。図２０の場合において、ライト処理を行うＳＳＤ０１３０はＳＳＤ２とＳＳＤ４の２台となる。第４の実施の形態の図１９と比較してライト処理を行うＳＳＤ０１３０の台数を１台減らすことができる。なお、データ更新に伴い、パリティは更新されるので更新後のパリティをライトする必要がある。
（第６の実施の形態）
第６の実施の形態では、特にリードのレスポンス性能の高いＲＡＩＤ構成の適用について説明する。
【００６４】
図２１は、リード処理のフローチャートである。
【００６５】
まず、サーバ０１０１がＳＴＣ１３０２にリード要求を送る（ステップＳ２１０１）。次に、ＳＴＣ１３０２はＳＴＣ１３０２内のＲＡＭ０１１７などのキャッシュにヒットしたかを判定する（ステップＳ２１０２）。アドレスＨＡを基に、エントリ番号、タグ値を計算し、エントリ番号に含まれるキャッシュのタグ値を比較することでヒット判定を行うことができる。キャッシュヒットすれば、キャッシュからデータをリードしてサーバ０１０１にデータを送る（ステップＳ２１０３）。キャッシュミスすれば、ＳＳＤ番号の決定処理を行う（ステップＳ２１０４）。この処理を行うことにより、サーバ０１０１がＳＴＣ１３０２に要求したデータがどのＳＳＤ０１３０に格納されているかをＳＴＣ１３０２は判断する（ステップＳ２１０５）。データが格納されたＳＳＤ０１３０を仮決定ＳＳＤとする。次に、ＳＳＤ管理情報制御部０１１６を用いて、ＳＳＤ管理情報０５０１から、現在ＧＣ中のＳＳＤ番号を調べる（ステップＳ２１０６）。さらに、ＧＣ中のＳＳＤ番号と仮決定ＳＳＤの番号が一致するかを判定する（ステップＳ２１０７）。もし、一致しなければ、仮決定ＳＳＤはＧＣ中ではないため、仮決定ＳＳＤからリードを行う（ステップＳ２１０８）。もし、一致していれば、サーバ０１０１が要求したデータが格納されているＳＳＤ０１３０はＧＣ中である。そのときはＧＣ中のＳＳＤ０１３０からリードを行わず、サーバ０１０１が要求したデータを含むストライプに含まれるＧＣ中でない別のＳＳＤ１３０から別のデータとパリティをリードする（ステップＳ２１０９）。この別のデータとパリティからサーバ０１０１が要求したデータをＳＴＣ１３０２が復元し、そのデータをサーバ０１０１に送る（ステップＳ２１１０）。その後、ＳＳＤ０１３０からリードしたデータをＳＴＣ１３０２のキャッシュに書き込むことができる。その結果、キャッシュが満杯となり、ＳＴＣ１３０２のキャッシュからＳＳＤ０１３０への古いデータの書き戻しが発生することがあるのは言うまでもない。
【００６６】
以上で説明したとおり、ＧＣ中ではないＳＳＤ０１３０からリードするため、リードのレスポンス性能が高いストレージ装置を実現できる。
（第７の実施の形態）
第７の実施の形態では、データ転送性能、特にライトデータ転送性能が高いストレー装置０１１０、１３０１の例を説明する。このために、特定の１つのＳＳＤ０１３０にライトアクセスが集中したとき、他のＳＳＤ０１３０にライトアクセスを分散させる（ライト分散処理）。分散させたデータを代替ＳＳＤテーブル０２０１、１１０１、１７０１、１９０１に基づいて管理する。リード時には代替ＳＳＤテーブル０２０１、１１０１、１７０１、１９０１を用いて、データの格納されたＳＳＤ０１３０を調べ、データをリードする。
【００６７】
図２２はＳＴＣ０１１１、１３０２のライト処理の流れを示すフローチャートの例である。まず、ＳＳＤ番号の決定処理を行う（ステップＳ２２０１）。これにより、サーバ０１０１が指定したデータが含まれるＳＳＤ番号と、データが含まれるストライプの代替ＳＳＤ番号をＳＴＣ０１１１、１３０２は判断することができる（ステップＳ２２０２）。次に、仮決定したＳＳＤ０１３０にＧＣ中のＳＳＤ０１３０が含まれるかを判断する。なお、サーバ０１０１からの１回のライト要求に対して、複数のＳＳＤ０１３０へのライトが生じることもある。もし、ＧＣ中のＳＳＤ０１３０が含まれていた場合は、例えば図９のステップＳ０９０７〜Ｓ０９１１と同様に代替ライト処理を行う（ステップＳ２２０４）。ＧＣ中のＳＳＤ０１３０が含まれていなかった場合は、仮決定したＳＳＤにアクセスが集中しているかを判定する（ステップＳ２２０５）。この集中しているかの判定方法としては例えば過去１０００回のＳＳＤ０１３０へのアクセス履歴を取り、ＳＳＤ０１３０毎のアクセス回数の平均値より、仮決定したＳＳＤへのアクセス回数が一定の割合以上大きいかどうかを用いることなどができる。例えば平均値より２倍以上アクセス回数が多ければ、アクセスが集中しているとみなすことができる。アクセスが集中している場合、そのＳＳＤ０１３０にライトしようとしたデータを代替ＳＳＤにライトする（ライト分散処理）。同時に、代替ＳＳＤテーブル０２０１、１１０１、１７０１、１９０１を更新し、アドレスＨＡに対応する代替ＳＳＤをアクセスが集中しているＳＳＤにする。以上の手順でライト分散処理を行ったことをＳＴＣ０１１１、１３０２は管理する。ストレージ装置にサーバからのリードが行われたときは例えば図１０に示す方法でリード処理を行う。
【００６８】
以上で説明したとおり、ライトアクセスが１つのＳＳＤに集中することを防ぎ、複数のＳＳＤ０１３０へ平均的にライトアクセスを分散することができる。その結果、１つのＳＳＤ０１３０がストレージ装置０１１０、１３０１全体のボトルネックになることを防止することができるため、ストレージ装置０１１０、１３０１のデータ転送性能が向上する。特にライトデータ転送性能が高いストレージ装置を実現できる。
（第８の実施の形態）
第８の実施の形態では、高信頼かつデータ転送レート性能の高いストレージ装置の例を図２３に基づいて説明する。
【００６９】
サーバ１０１から送られたデータをＳＴＣ１１１はミラーリングする、すなわち同一のデータを複数のＳＳＤへ格納する。図２３においては、アドレスＨＡ０のデータがＳＳＤ０とＳＳＤ１に格納され、アドレスＨＡ１のデータがＳＳＤ３とＳＳＤ４に格納される。ここでは、二重にミラーリングを行い、代替ＳＳＤの台数が１台の場合を説明するため、図７の処理によりガーベージコレクションを行うＳＳＤの台数は１台以下になるようにＳＴＣ１１１が制御し、ガーベージコレクション中のＳＳＤにライトを行わないようにＳＴＣ１１１が制御を行う。ＧＣ中のＳＳＤへライトが予定されたとき、すなわち、仮データＳＳＤ番号Ｄ＿ｔがＧＣ中のＳＳＤ番号となったときは、代替ライト処理を行い、代替ＳＳＤにデータをライトし、代替ＳＳＤテーブル情報を更新する。
【００７０】
また、リード要求に対して、ＧＣ中のＳＳＤからデータリードが予定されたとき、すなわち仮データＳＳＤ番号Ｄ＿ｔがＧＣ中のＳＳＤ番号になったときは、ミラーリングを構成する他方のガーベージコレクションが行われていないＳＳＤからデータをリードする。
【００７１】
以上の構成により、データが二重化されているためストレージ装置の信頼性を高くすることができ、さらに、パリティ生成やパリティを用いたデータ復元が不要なため、ストレージ装置のデータ転送レート性能をさらに高くすることができる。
（第９の実施の形態）
第９の実施の形態では、ストレージ装置０１１０のみならず、ＩＯＰＳ性能やレスポンス性能の高いＳＳＤ２４１の例を図２４に基づいて説明する。
【００７２】
１個のＳＳＤ２４０１の中のある１個のＮＡＮＤ不揮発性メモリ２４０３へガーベージコレクションのためのアクセスをＳＳＤ制御部２４０４が行うときであって、そのＮＡＮＤ不揮発性メモリ２４０３にライトアクセスが生じかけたとき、すなわち、仮決定したＮＡＮＤ番号がＧＣ中のＮＡＮＤ不揮発性メモリ２４０３になったときに、ＮＡＮＤ代替制御部２４０５は代替処理を行い、仮決定したＮＡＮＤ番号をＧＣ中ではない他のＮＡＮＤ不揮発性メモリ２４０３に変更し、その変更先のＮＡＮＤ不揮発性メモリ２４０３にライトアクセスを行い、ＧＣ中のＮＡＮＤ不揮発性メモリ２４０３にアクセスをしない。ＮＡＮＤ管理情報制御部２４０６は、ＮＡＮＤ不揮発性メモリ２４０３ごとの消去済みブロック数を管理し、また、ガーベージコレクションを行うＮＡＮＤ不揮発性メモリ２４０３の番号を管理する。ＲＡＭ２４０７にはデータバッファ、データキャッシュ、ＳＳＤ論理アドレス−物理アドレス変換テーブル、ページ毎の有効／非有効情報、消去済み／不良ブロック／プログラム済みのブロック状態や消去回数といったブロック情報、代替不揮発性メモリテーブル情報、ＮＡＮＤ管理情報、またはその一部を格納する。ここで、制御チップ２４０２はサーバインターフェース０１１２と制御部２４０４を備えている。制御部２４０４はＧＣ起動制御０１１４を備えているが、サーバインターフェースを経由してガーベージコレクションの指示を受け、ガーベージコレクションの完了を通知し、ＧＣ起動制御０１１４がＧＣ中を管理しても良い。なお、不揮発性メモリとしてＮＡＮＤを例に説明したが、 そのほかの不揮発性メモリとして、相変化メモリやＲｅＲＡＭを用いることが可能であることはいうまでもない。その場合、相変化メモリやＲｅＲＡＭはＮＡＮＤよりもレスポンス性能が高いため、さらに高レスポンスのＳＳＤを実現できる。
【００７３】
以上の構成により、ＳＳＤ２４０１単体であっても、ＳＳＤ２４０１はガーベージコレクションを行い、制御部２４０４からの処理が行われていてビジー状態である可能性の高いＮＡＮＤ不揮発性メモリ２４０３にライトすることがなくなるため、ＳＳＤ２４０１のＩＯＰＳ性能やレスポンス性能を向上させることができる。
（第１０の実施の形態）
第１０の実施の形態では、ＩＯＰＳ性能やレスポンス性能の高く信頼性の高いＳＳＤ２４０１の例を図２５に基づいて説明する。
【００７４】
図２４に示したＳＳＤ２４０１において、さらにＲＡＩＤ５の制御を行い、データとパリティを図２５のアドレスＨＡ０〜２とＰのようにＮＡＮＤ不揮発性メモリ２４０３へ格納する。データやパリティをライトしようとしたＮＡＮＤ不揮発性メモリ２４０３がＧＣ中のとき、すなわち、仮決定したＮＡＮＤ番号がＧＣ中のＮＡＮＤ番号になったときは、代替ライト処理を行い、代替ＮＡＮＤへデータあるいはパリティをライトし、代替ＮＡＮＤテーブル情報を更新する。ここで図２５にはアドレスＨＡと記載したが、ＳＳＤ論理アドレス−物理アドレス変換テーブルにより変換した物理アドレスでも良い。
【００７５】
また、リード要求に対しては、ＧＣ中のＮＡＮＤ不揮発性メモリ２４０３からデータリードが予定されたとき、すなわち、仮決定されたＮＡＮＤ番号がＧＣ中のＮＡＮＤ番号になったときは、他のガーベージコレクションが行われていないＮＡＮＤ不揮発性メモリ２４０３からデータとパリティをリードし、リードしたデータとパリティからＧＣ中のＮＡＮＤ不揮発性メモリ２４０３のデータを復元してリード要求元に送る。
【００７６】
以上の構成により、ＳＳＤ２４０１単体であってもＩＯＰＳ性能やレスポンス性能が高くすることができ、また、データにパリティを追加することで信頼性が高くすることができる。
（第１１の実施の形態）
第１１の実施の形態では、高信頼かつデータ転送レート性能の高いＳＳＤ２４０１の例を図２６に基づいて説明する。
【００７７】
図２４に示したＳＳＤにおいて、上位装置から送られたデータを制御部２４０４はさらにミラーリングする、すなわち同一のデータを複数のＮＡＮＤ不揮発性メモリ２４０３に格納する。図２６においては、アドレスＨＡ０のデータがＮＡＮＤ０とＮＡＮＤ１に格納され、アドレスＨＡ１のデータがＮＡＮＤ３とＮＡＮＤ４に格納される。ここでは、二重にミラーリングを行い、代替となるＮＡＮＤ不揮発性メモリ２４０３が１個の場合を説明するため、図２３のミラーリングと同じく、ガーベージコレクションを行うＮＡＮＤ不揮発性メモリ２４０３の数は１個以下になるように制御部２４０４が制御し、ＧＣ中のＮＡＮＤ不揮発性メモリ２４０３にライトを行わないように制御部２４０４が制御を行う。ＧＣ中のＮＡＮＤ不揮発性メモリ２４０３にライトが予定されたとき、すなわち、仮決定したＮＡＮＤ番号がＧＣ中のＮＡＮＤ番号になったときは、代替ライト処理を行い、代替となるＮＡＮＤ不揮発性メモリ２４０３にデータをライトし、代替ＮＡＮＤテーブル情報を更新する。ここで図２６にはアドレスＨＡと記載したが、ＳＳＤ論理アドレス−物理アドレス変換テーブルにより変換した物理アドレスでも良い。
【００７８】
また、リード要求に対しては、ＧＣ中のＮＡＮＤチップからデータリードが予定されたとき、すなわち仮決定したＮＡＮＤ番号がＧＣ中のＮＡＮＤ番号になったときは、ミラーリングを構成する他方のガーベージコレクションが行われていないＮＡＮＤ不揮発性メモリ２４０３からデータをリードする。
【００７９】
以上の構成により、データが二重化されているためＳＳＤ２４０１単体の信頼性を高くすることができ、さらに、パリティ生成やパリティを用いたデータ復元が不要なためＳＳＤ２４０１単体のデータ転送レート性能をさらに高くすることができる。
【符号の説明】
【００８０】
０１００  サーバ-ストレージシステム
０１０１  サーバ
０１０２  ＣＰＵ
０１０３、０１１７、０１３２、２４０７  ＲＡＭ
０１０４  ストレージインターフェース
０１０５  スイッチ
０１１０、１３０１  ストレージ装置
０１１１、１３０２  ストレージコントローラ
０１１２  ホストインターフェース
０１１３、１３０３  制御部
０１１４  ＧＣ起動制御
０１１５  ＳＳＤ代替制御
０１１６  ＳＳＤ管理情報制御
０１１８、０１３１、２４０３  不揮発性メモリ
０１１９  ＳＳＤインターフェース
０１３０、２４０１  ＳＳＤ
０１３３  制御部
０１３４  論理−物理アドレス変換制御部
０１３５  ＧＣ実行制御部
０１３６  ＳＴＣインターフェース
１３０４  ＲＡＩＤ制御部
２４０５  ＮＡＮＤ代替制御
２４０６  ＮＡＮＤ管理情報制御
【図１】
0006007329.tif 000002
【図２】
0006007329.tif 000003
【図３】
0006007329.tif 000004
【図４】
0006007329.tif 000005
【図５】
0006007329.tif 000006
【図６】
0006007329.tif 000007
【図７】
0006007329.tif 000008
【図８】
0006007329.tif 000009
【図９】
0006007329.tif 000010
【図１０】
0006007329.tif 000011
【図１１】
0006007329.tif 000012
【図１２】
0006007329.tif 000013
【図１３】
0006007329.tif 000014
【図１４】
0006007329.tif 000015
【図１５】
0006007329.tif 000016
【図１６】
0006007329.tif 000017
【図１７】
0006007329.tif 000018
【図１８】
0006007329.tif 000019
【図１９】
0006007329.tif 000020
【図２０】
0006007329.tif 000021
【図２１】
0006007329.tif 000022
【図２２】
0006007329.tif 000023
【図２３】
0006007329.tif 000024
【図２４】
0006007329.tif 000025
【図２５】
0006007329.tif 000026
【図２６】
0006007329.tif 000027