(57)【特許請求の範囲】
【請求項１】
ユーザデータを格納する複数の不揮発性記憶デバイスと、
前記複数の不揮発性記憶デバイスとホストとの間のデータ転送を制御するコントローラと、を含むストレージシステムであって、
前記コントローラは、プロセッサコア回路と、プロセッサキャッシュと、ユーザデータを一時的に格納するキャッシュ領域を含む主記憶デバイスと、を含み、
前記プロセッサコア回路は、前記ホストから受信したコマンドの内容を特定し、
前記プロセッサコア回路は、前記コマンドに対する動作において前記ストレージシステム内で転送するデータの格納記憶デバイスを特定し、
前記プロセッサコア回路は、前記コマンドの種別及び前記特定した格納記憶デバイスに基づいて、前記ストレージシステム内において前記プロセッサキャッシュを介してデータ転送するかを決定する、ストレージシステム。
【請求項２】
前記プロセッサコア回路は、前記コマンドの種別がリードコマンドである前記受信したコマンドに対して、前記格納記憶デバイスであるコマンド指定ユーザデータの読み出し元記憶デバイスを特定し、
前記プロセッサコア回路は、前記コマンドの種別及び前記特定した読み出し元記憶デバイスに基づいて、前記データ転送において前記プロセッサキャッシュを介してデータ転送するかを決定する、請求項１に記載のストレージシステム。
【請求項３】
前記コントローラは、第１クラスタと第２クラスタとを含み、
前記第１クラスタは、前記プロセッサコア回路と、前記プロセッサキャッシュと、前記主記憶デバイスと、を含み、
前記第２クラスタは、第２プロセッサコア回路と、第２プロセッサキャッシュと、第２主記憶デバイスと、転送制御デバイスと、を含み、
前記読み出し元記憶デバイスは、前記第２主記憶デバイスであり、
前記第１クラスタの前記プロセッサコア回路は、前記第２主記憶デバイスから前記ホストへの前記コマンド指定ユーザデータの転送における転送バッファとして、前記プロセッサキャッシュを使用することを決定し、
前記第１クラスタの前記プロセッサコア回路は、前記転送制御デバイスに、前記第２主記憶デバイスから前記プロセッサキャッシュへの前記コマンド指定ユーザデータの転送を指示する、請求項２に記載のストレージシステム。
【請求項４】
前記複数の不揮発性記憶デバイスは、第１不揮発性記憶デバイスと、当該第１不揮発性記憶デバイスよりも応答速度が遅い第２不揮発性記憶デバイスと、を含み、
前記リードコマンドの前記読み出し元記憶デバイスは、前記第２不揮発性記憶デバイスであり、
前記プロセッサコア回路は、前記第２不揮発性記憶デバイスから前記ホストへの前記コマンド指定ユーザデータの転送における転送バッファとして、前記プロセッサキャッシュを使用することを決定し、
前記プロセッサコア回路は、前記プロセッサキャッシュに格納されている前記コマンド指定ユーザデータを前記ホストに転送した後に、前記コマンド指定ユーザデータを前記プロセッサキャッシュから前記主記憶デバイスに追い出す、請求項２に記載のストレージシステム。
【請求項５】
前記リードコマンドの前記読み出し元記憶デバイスは、第１不揮発性記憶デバイスであり、
前記プロセッサコア回路は、前記第１不揮発性記憶デバイスから前記ホストへの前記コマンド指定ユーザデータの転送における転送バッファとして前記プロセッサキャッシュを使用することを決定し、
前記プロセッサコア回路は、前記第１不揮発性記憶デバイスから前記プロセッサキャッシュに格納された前記コマンド指定ユーザデータを前記ホストに転送した後に、前記コマンド指定ユーザデータを格納している前記プロセッサキャッシュの領域を解放する、請求項２に記載のストレージシステム。
【請求項６】
前記プロセッサコア回路は、前記受信したコマンドが指定するユーザデータのデータ長に基づいて、前記コントローラにおけるデータ転送において、前記プロセッサキャッシュを転送バッファとして使用するか否かを決定する、請求項１に記載のストレージシステム。
【請求項７】
前記コントローラは、第１クラスタと第２クラスタとを含み、
前記第１クラスタは、前記プロセッサコア回路と、前記主記憶デバイスと、転送制御デバイスと、を含み、
前記第２クラスタは、第２プロセッサコア回路と、前記プロセッサキャッシュと、第２主記憶デバイスと、を含み、
前記受信したコマンドはライトコマンドであり、前記格納記憶デバイスは前記第２主記憶デバイスであり、
前記プロセッサコア回路は、前記ライトコマンドに対して、前記ホストから受信したユーザデータの前記第１クラスタから前記第２主記憶デバイスへの転送において、前記プロセッサキャッシュを転送バッファとして使用することを決定し、
前記プロセッサコア回路は、前記転送制御デバイスに、前記ユーザデータを前記プロセッサキャッシュに転送することを指示し、
前記転送制御デバイスは、前記プロセッサコア回路からの前記指示に従って、前記ユーザデータを、前記プロセッサキャッシュに転送し、
前記第２プロセッサコア回路は、前記プロセッサキャッシュの前記ユーザデータの保証コードを検証し、
前記第２プロセッサコア回路は、前記保証コードが検証された前記ユーザデータを、前記プロセッサキャッシュから前記第２主記憶デバイスに追い出す、請求項１に記載のストレージシステム。
【請求項８】
前記複数の不揮発性記憶デバイスは、複数の第１種不揮発性記憶デバイスと、前記第１種不揮発性記憶デバイスよりも応答速度が遅い複数の第２種不揮発性記憶デバイスと、を含み、
前記受信したコマンドはライトコマンドであり、
前記格納記憶デバイスは、前記ホストから受信したユーザデータを格納する不揮発性記憶デバイスであり、
前記ユーザデータのデータ長が閾値以上である場合に、前記プロセッサコア回路は、前記複数の不揮発性記憶デバイスに格納されたデータを使用することなく、前記ユーザデータからパリティデータを生成することを決定し、
前記データ長が前記閾値未満であり、前記ユーザデータを格納する前記不揮発性記憶デバイスが第２種不揮発性記憶デバイスである場合に、前記プロセッサコア回路は、前記プロセッサキャッシュを介さずに前記ユーザデータのパリティ生成のためのデータを１又は複数の第２種不揮発性記憶デバイスから前記主記憶デバイスに転送することを決定する、請求項１に記載のストレージシステム。
【請求項９】
前記コントローラは、第１クラスタと第２クラスタとを含み、
前記第１クラスタは、前記プロセッサコア回路と、前記プロセッサキャッシュと、前記主記憶デバイスと、転送制御デバイスと、を含み、
前記第２クラスタは、第２プロセッサコア回路と、第２プロセッサキャッシュと、第２主記憶デバイスと、を含み、
前記プロセッサコア回路は、前記生成したパリティデータの前記第２主記憶デバイスへの転送において前記第２プロセッサキャッシュを介して転送することを決定し、
前記プロセッサコア回路は、前記転送制御デバイスに、前記パリティデータを前記第２プロセッサキャッシュに転送することを指示し、
前記転送制御デバイスは、前記プロセッサコア回路からの前記指示に従って、前記パリティデータを、前記第２プロセッサキャッシュに転送し、
前記第２プロセッサコア回路は、前記第２プロセッサキャッシュの前記パリティデータの保証コードを検証し、
前記第２プロセッサコア回路は、前記保証コードが検証された前記パリティデータを、前記第２プロセッサキャッシュから前記第２主記憶デバイスに追い出す、請求項８に記載のストレージシステム。
【請求項１０】
前記コントローラは、第１転送制御デバイス及び第２転送制御デバイスをさらに含み、
前記プロセッサコア回路は、前記第１転送制御デバイスに、転送先を示す情報を付与してデータを前記第２転送制御デバイスに転送することを指示し、
前記第２転送制御デバイスは、受信した前記データに付与されている前記情報を参照して、前記データを前記プロセッサキャッシュ又は前記主記憶デバイスの一方に転送する、請求項１に記載のストレージシステム。
【請求項１１】
不揮発性記憶デバイスと、プロセッサキャッシュと、ユーザデータを一時的に格納するキャッシュ領域を含む主記憶デバイスと、を含むストレージシステムにおける、データ転送制御方法であって、
ホストから受信したコマンドの内容を特定し、
前記コマンドに対する動作において前記ストレージシステム内で転送するデータの格納記憶デバイスを特定し、
前記コマンドの種別及び前記特定した格納記憶デバイスに基づいて、前記ストレージシステム内のデータ転送において前記プロセッサキャッシュを介して転送するか否かを決定する、データ転送制御方法。
【請求項１２】
前記コマンドの種別がリードコマンドである前記受信したコマンドに対して、前記格納記憶デバイスであるコマンド指定ユーザデータの読み出し元記憶デバイスを特定し、
前記コマンドの種別及び前記特定した読み出し元記憶デバイスに基づいて、前記データ転送において前記プロセッサキャッシュを介して転送するか否かを決定する、請求項１１に記載のデータ転送制御方法。
【請求項１３】
前記ストレージシステムは、第１クラスタと第２クラスタとを含み、
前記第１クラスタは、前記プロセッサキャッシュと、前記主記憶デバイスと、を含み、
前記第２クラスタは、第２プロセッサキャッシュと、第２主記憶デバイスと、を含み、
前記読み出し元記憶デバイスは、前記第２主記憶デバイスであり、
前記第２主記憶デバイスから前記プロセッサキャッシュを介して前記ホストへの前記コマンド指定ユーザデータの転送をすることを決定し、
前記第２主記憶デバイスから前記プロセッサキャッシュへ、前記コマンド指定ユーザデータを転送する、請求項１２に記載のデータ転送制御方法。
【請求項１４】
前記ストレージシステムは、第１クラスタと第２クラスタとを含み、
前記第１クラスタは、前記主記憶デバイスと、転送制御デバイスと、を含み、
前記第２クラスタは、前記プロセッサキャッシュと、第２主記憶デバイスと、を含み、
前記受信したコマンドはライトコマンドであり、前記格納記憶デバイスは前記第２主記憶デバイスであり、
前記ライトコマンドに対して、前記ホストから受信したユーザデータの前記第１クラスタから前記プロセッサキャッシュを介して前記第２主記憶デバイスへの転送をすることを決定し、
前記ユーザデータを前記プロセッサキャッシュに転送し、
前記プロセッサキャッシュの前記ユーザデータの保証コードを検証し、
前記保証コードが検証された前記ユーザデータを、前記プロセッサキャッシュから前記第２主記憶デバイスに追い出す、請求項１１に記載のデータ転送制御方法。
【請求項１５】
前記複数の不揮発性記憶デバイスは、複数の第１種不揮発性記憶デバイスと、前記第１種不揮発性記憶デバイスよりも応答速度が遅い複数の第２種不揮発性記憶デバイスと、を含み、
前記受信したコマンドはライトコマンドであり、
前記格納記憶デバイスは、前記ホストから受信したユーザデータを格納する不揮発性記憶デバイスであり、
前記ユーザデータのデータ長が閾値以上である場合に、前記複数の不揮発性記憶デバイスに格納されたデータを使用することなく、前記ユーザデータからパリティデータを生成することを決定し、
前記データ長が前記閾値未満であり、前記ユーザデータを格納する前記不揮発性記憶デバイスが第２種不揮発性記憶デバイスである場合に、前記プロセッサキャッシュを介さずに前記ユーザデータのパリティ生成のためのデータを１又は複数の第２種不揮発性記憶デバイスから前記主記憶デバイスに転送することを決定する、請求項１１に記載のデータ転送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びストレージシステムにおけるデータ転送制御方法に関する。
【背景技術】
【０００２】
ストレージ装置は、典型的に、磁気ディスク装置又はフラッシュメモリデバイスのディスクアレイと、ディスクアレイとホストコンピュータとの間のデータ転送を制御するストレージコントローラを含む。ストレージコントローラは、ホストコンピュータと接続するためのデバイスであるホストインターフェースと、ディスクアレイと接続するためのデバイスであるドライブインタフェース、データ転送の及びホストコンピュータから頻繁に参照されるデータの格納に用いられるキャッシュ領域を含む主記憶デバイス、及びプロセッサを含む。
【０００３】
ストレージ装置の可用性を上げるために、これらの構成部品を二重化することがある。このとき、構成部品の集合をクラスタと呼び、クラスタを専用インタフェースで相互に接続することがある。例えば、特許文献１は、ストレージシステムを、ストレージ専用ＬＳＩを使用して構成し、ホストコンピュータの接続されているクラスタのホストインターフェースから、要求されたデータが格納されている他のクラスタのキャッシュ領域へアクセスする技術を開示している。
【０００４】
この他、非特許文献１は、汎用インタフェース規格であるＰＣＩ−Ｅｘｐｒｅｓｓの標準技術として、ＰＣＩデバイスが、プロセッサにデータを送信する際、データの参照頻度、特性を示すＴＰＨ（Ｔｒａｎｓａｃｔｉｏｎ  Ｌａｙｅｒ  Ｐａｃｋｅｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔ）と呼ばれる情報をデータに付与し、プロセッサがこれを参照すると共に、参照頻度が高いと判断した受信データをプロセッサ内蔵キャッシュメモリに格納することを開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−３３１２５号公報
【非特許文献】
【０００６】
【非特許文献１】PCI-SIG PCI-Express Base Specification Revision 3.0（released on 10 Nov. 2010）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
データ転送性能向上のため、ストレージ装置は主記憶デバイスを使用して、ユーザデータのキャシングを行う。ユーザデータはホストコンピュータが作成し、ストレージ装置に格納または取出しを行うデータを表す。ストレージ装置のデータ転送量の増加に伴い、主記憶デバイスへのアクセスが増加し、主記憶デバイスの帯域が消費される。主記憶デバイスの帯域の不足は、ストレージシステムのデータ転送性能を低下させる。
【０００８】
あるいは、部品集約やコスト低減などの背景から、専用ＬＳＩを用いず、汎用プロセッサが持つ、ＰＣＩ−Ｅｘｐｒｅｓｓインタフェース、メモリインタフェース、クラスタ間接続インタフェース及びＤＭＡ機能等を用いて、ストレージ装置を構成する場合がある。例えば、複数クラスタを含むストレージ装置においては、汎用プロセッサの機能制約により、ホストインターフェースやドライブインタフェースから、直接に、他クラスタの主記憶デバイスにアクセスすることができない。
【０００９】
このため、ホストインターフェース又はドライブインタフェースから他のクラスタのキャッシュ領域にアクセスする一つの方法は、各クラスタに備えられている主記憶を用い、ホストインターフェース又はドライブインタフェースと同一クラスタの主記憶デバイスとの通信と、主記憶デバイスと他クラスタの主記憶デバイスとの通信の、２段階通信を行う。しかし、この手法は、主記憶デバイスの帯域を消費してしまうため、ストレージ装置のデータ転送性能を低下させる。
【００１０】
一方、ＴＰＨ技術を用いて主記憶デバイスの帯域の消費を抑える方法が知られている。しかし、一般に、プロセッサの内蔵キャッシュの容量はせいぜい１０〜２０ＭＢ程度であり、ストレージ装置のキャッシュ機能のために必要な数ＧＢ以上の容量に対し、容量が大幅に不足する。
【課題を解決するための手段】
【００１１】
本発明の一態様は、ユーザデータを格納する複数の不揮発性記憶デバイスと、前記複数の不揮発性記憶デバイスとホストコンピュータとの間のデータ転送を制御するコントローラと、を含むストレージシステムである。前記コントローラは、プロセッサコア回路と、プロセッサキャッシュと、ユーザデータを一時的に格納するキャッシュ領域を含む主記憶デバイスと、を含む。前記プロセッサコア回路は、前記ホストコンピュータから受信したコマンドの内容を特定する。前記プロセッサコア回路は、前記コマンドの指定ユーザデータの格納記憶デバイスを特定する。前記プロセッサコア回路は、前記コマンドの種別及び前記特定した格納記憶デバイスに基づいて、前記コントローラにおけるデータ転送において、前記プロセッサキャッシュを転送バッファとして使用するか否かを決定する。
【発明の効果】
【００１２】
本発明の一態様により、ストレージシステムでのユーザデータのキャッシングにおいて主記憶デバイスの帯域の消費を抑え、データ転送性能の低下を抑えることができる。
【図面の簡単な説明】
【００１３】
【図１】本実施形態における、ストレージ装置及びそれを利用するホストコンピュータを含むコンピュータシステムの構成を模式的に示す。
【図２】本実施形態における、プロセッサからホストインターフェースＬＳＩへの指示内容を示す。
【図３】本実施形態における、ホストインターフェースＬＳＩが、ホストコンピュータからのライト要求を処理する動作を示す。
【図４】本実施形態における、プロセッサからドライブインタフェースＬＳＩへの指示内容を示す。
【図５】本実施形態において、ドライブインタフェースＬＳＩが、記憶ドライブへのリード処理を行う動作を示す。
【図６】本実施形態における、プロセッサからＤＭＡへの指示内容を示す。
【図７】本実施形態において、ＤＭＡがプロセッサからの指示を受けた場合の動作を示す。
【図８】本実施形態における、プロセッサキャッシュ及び主記憶デバイスとメモリ空間との対応関係を示す。
【図９】本実施形態における、ホストコンピュータからリードコマンドを受けたデータが他のクラスタのキャッシュ領域上に存在した場合におけるデータ転送フローを示す。
【図１０】本実施形態における、ホストコンピュータからリードコマンドを受けたデータがキャッシュ領域上に存在しなかった場合におけるデータ転送フローを示す。
【図１１】本実施形態における、ホストコンピュータからリードコマンドを受け取った場合のフローチャートを示す。
【図１２】本実施形態における、ホストコンピュータからリードコマンドを受け取った場合のフローチャートを示す。
【図１３】本実施形態において、ホストコンピュータからのライトコマンドを受け取ってから、データを両クラスタに二重化するまでのデータ転送フローを示す。
【図１４】本実施形態において、ホストコンピュータからライトコマンドを受け取ってから、データを両クラスタに二重化するまでのプロセッサのフローチャートを示す。
【図１５】本実施形態において、ホストコンピュータから書き込まれたデータが長い場合における、書き込まれたデータを元にパリティを生成し、記憶ドライブに書き込む際のデータフローを示す。
【図１６】本実施形態において、ホストコンピュータから書き込まれたデータが短い場合における、書き込まれたデータと記憶ドライブに格納されているデータを元にパリティを生成し、記憶ドライブに書き込む際のデータフローを示す。
【図１７】本実施形態における、主記憶デバイス又はプロセッサキャッシュに格納されているライトデータを、記憶ドライブに格納する際のフローチャートを示す。
【図１８】本実施形態における、主記憶デバイスに格納されているライトデータを、記憶ドライブに格納する際のフローチャートを示す。
【図１９】本実施形態における、プロセッサキャッシュに格納されているライトデータを、記憶ドライブに格納する際のフローチャートを示す。
【発明を実施するための最良の形態】
【００１４】
以下に説明する例は、ストレージ装置において、プロセッサキャッシュをホストフロントエンドとバックエンドとの間のデータ転送の転送バッファ、さらに、クラスタ間のデータ転送の転送バッファとして利用して、主記憶デバイスの消費帯域を削減する。これにより、ストレージ装置の性能を向上させる。以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。
【００１５】
図１は、ストレージシステムを構成するストレージ装置１０１と、ストレージ装置１０１にアクセスするホストコンピュータ１０２と、を含むコンピュータシステムの構成例を示している。コンピュータシステムは、データ処理、演算を行うホストコンピュータ１０２と、ストレージ装置１０１と、を含む。ストレージ装置１０１は、ストレージコントローラ２０１と、ユーザデータを格納する不揮発性の記憶デバイスである記憶ドライブ３０３（ドライブとも呼ぶ）を収容するドライブ筐体２０２と、を有する。
【００１６】
ホストコンピュータ１０２の数は、一つでも複数でも良い。ストレージ装置１０１が含むストレージコントローラ２０１、ドライブ筐体２０２、ドライブ筺体２０２、ドライブ３０３のそれぞれの数は、設計に依存する。ドライブ３０３の種別は問わない。例えば、ハードディスクドライブ（ＨＤＤ）でもよいし、フラッシュメモリなどの不揮発性メモリを搭載したＳｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ）であってもよい。
【００１７】
ドライブ３０３は、不揮発性の記憶媒体を含み、ホストコンピュータ１０２から転送されたユーザデータとユーザデータを基にコア５０３やDMA５１１が計算し出力する冗長データを格納する。例えば、複数のドライブ３０３がＲＡＩＤを構成し、RAIDパリティデータを格納することで、ドライブ３０３に障害が発生した場合のデータ消失を防ぐことが出来る。
【００１８】
ストレージ装置１０１は、ホストコンピュータ１０２と、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ（ＦＣ）やｉＳＣＳＩ等によるデータ転送路１１、１２で接続している。ストレージコントローラ２０１は、複数のクラスタを有し、本例において、２つのクラスタ３０１、３０２を有する。クラスタ３０１は、ホストコンピュータ１０２と接続するためのデバイスであるホストインターフェースＬＳＩ４０３、ドライブ筐体２０２（に収容されているドライブ３０３）と接続するためのデバイスであるドライブインタフェースＬＳＩ４０５、内部処理を行うためのプロセッサ４０１、プロセッサ４０１に接続されている主記憶デバイス４０７を含む。
【００１９】
クラスタ３０２は、ホストコンピュータ１０２と接続するためのデバイスであるホストインターフェースＬＳＩ４０４、ドライブ筐体２０２と接続するためのデバイスであるドライブインタフェースＬＳＩ４０６、内部処理を行うためのプロセッサ４０２、プロセッサ４０２に接続されている主記憶デバイス４０８を含む。２つのクラスタ３０１、３０２は、高速シリアル汎用インタフェースであるＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩｅ）で相互に接続されている。クラスタ３０１、３０２間を接続する汎用インタフェースは、設計に依存する。
【００２０】
クラスタ３０１内のホストインターフェースＬＳＩ４０３、クラスタ３０２内のホストインターフェースＬＳＩ４０４は、ホストコンピュータ１０２とストレージコントローラ２０１との通信に用いられるＦＣ、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（ＦＣｏＥ）、ｉＳＣＳＩ等のプロトコルを、ストレージコントローラ２０１内部で用いられるＰＣＩｅのプロトコルに変換する機能を有する。
【００２１】
クラスタ３０１内のドライブインタフェースＬＳＩ４０５、３０２内のドライブインタフェースＬＳＩ４０６は、ドライブ３０３とストレージコントローラ２０１の通信に用いられるＦＣ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ（ＳＡＴＡ）等のプロトコルを、ストレージコントローラ２０１内部で用いられるプロトコル、例えば、ＰＣＩｅに変換する機能を有する。
【００２２】
図１に示すように、クラスタ３０１、３０２は同様の構成を有している。以下においては、クラスタ３０１の構成をより具体的に説明する。主記憶デバイス４０７は、Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  Ｓｙｎｃｈｒｏｎｏｕｓ  ＤＲＡＭ等の半導体メモリを用いて構成される記憶デバイスである。主記憶デバイス４０７は、ホストコンピュータ１０２から読み書きされるデータを一時的に記憶し（ユーザデータのキャッシング）、又、プロセッサ４０１が内部処理で扱うデータや、ストレージコントローラ２０１を制御するためのプログラムを格納する。
【００２３】
プロセッサ４０１は、演算やデータの読み書きを実行してストレージコントローラ２０１の制御を行うコア５０３、プロセッサキャッシュ５０１、主記憶デバイス４０７とのデータ転送を行うメモリインタフェース５１３有する。プロセッサのコア回路は、１又は複数のコアを含むことができる。
【００２４】
プロセッサキャッシュ５０１は、主記憶デバイス４０７とプロセッサコア５０３との間ある、主記憶デバイス４０７の上位階層のメモリである。プロセッサコア５０３からプロセッサキャッシュ５０１へのアクセス（リード又はライト）は、主記憶デバイス４０７へのアクセスよりも高速である。プロセッサキャッシュ５０１は、典型的には、ｅＤＲＡＭやＳＲＡＭ等を用いて構成され、プロセッサチップに内蔵されている。
【００２５】
プロセッサキャッシュ５０１は、典型的には、複数の階層に分割されている。本実施形態において、プロセッサキャッシュ５０１は、ストレージコントローラ２０１の制御情報データを一時的に記憶する他、ホストコンピュータ１０２から読み書きされるユーザデータを一時的に記憶する（ユーザデータのキャッシング）。プロセッサコア５０３は、主記憶デバイス４０７からプロセッサキャッシュ５０１を介してデータのリード及びライトする。
【００２６】
プロセッサ４０１は、さらに、ホストインターフェースＬＳＩ４０３とプロセッサ４０１を接続するＰＣＩｅインタフェース５０５、ドライブインタフェースＬＳＩ４０５とプロセッサ４０１とを接続するＰＣＩｅインタフェース５０９、自クラスタ（ローカルクラスタとも呼ぶ）３０１の主記憶デバイス４０７と他のクラスタ（リモートクラスタとも呼ぶ）３０２とのデータ転送を行うコントローラであるＤｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＤＭＡ）５１１、リモートクラスタ３０２との通信インタフェースとなるＮｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ（ＮＴＢ）５０７を有する。
【００２７】
プロセッサ４０１の内部構成要素は、内部ネットワーク２０で相互に接続されている。プロセッサキャッシュ５０１は、プロセッサ４０１が扱うメモリ空間上のデータのうちの一部を保持する。残りのデータは、主記憶デバイス４０７に保持される。
【００２８】
図２は、プロセッサ４０１、４０２が、それぞれ、ホストインターフェースＬＳＩ４０３、４０４に対し、データ転送を指示する際の指示内容（ホストインターフェースＬＳＩ転送指示パラメータ７０１）の例である。この指示は、ホストコンピュータ１０２からのコマンド（リードコマンド／ライトコマンド）に対する対応を行う際に、プロセッサ４０１、４０２によって、ホストインターフェースＬＳＩ４０３、４０４にそれぞれ発行される。
【００２９】
プロセッサ４０１、４０２（プロセッサコア５０３、５０４）は、ホストコンピュータ１０２から受信したコマンドを解析し、転送指示パラメータ７０１を含む本指示を作成する。コマンドは、コマンド種別、ユーザデータのアドレス（ホストコンピュータによる管理ボリューム及びボリューム内アドレス）及び転送データの転送長の情報を含む。
【００３０】
転送指示パラメータ７０１は、プロセッサ４０１又は４０２からの指示内容の種別を示すコマンド制御情報７０２、転送データの転送長を表すＩ／Ｏ転送長７０３、ホストコンピュータ１０２からのコマンドの識別子であるＴａｇ番号７０４、ストレージコントローラ２０１の主記憶デバイス４０７又は４０８上のアドレスを示すメモリアドレス７０５に加え、ホストインターフェースＬＳＩ４０３又は４０４が、データ転送を実行する際に、転送データに対しヒント情報（Ｔｒａｎｓａｃｔｉｏｎ  Ｌａｙｅｒ  Ｐａｃｋｅｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔ（ＴＰＨ））を付加するかどうかの指示７０６を含む。
【００３１】
図３は、ホストインターフェースＬＳＩ４０３、４０４が、それぞれのプロセッサ４０１、４０２から、ライトコマンドを処理するよう指示を受けた場合における動作を示すフローチャートである。以下において、ホストインターフェースＬＳＩ４０３の処理を例として説明する。
【００３２】
ホストインターフェースＬＳＩ４０３は、プロセッサ４０１から転送指示パラメータ７０１を受信すると、ホストコンピュータ１０２に対し、ライトデータ（ユーザデータ）の受信準備が完了したことを通知し（Ｓ４１０１）、その後、ホストコンピュータ１０２からライトデータを受信する（Ｓ４１０２）。
【００３３】
次に、ホストインターフェースＬＳＩ４０３は、対応するホストインターフェースＬＳＩ転送指示パラメータ７０１を参照し、ヒント情報付加の指示７０６の有無を確認する（Ｓ４１０３）。ヒント情報付加の指示がある場合（Ｓ４１０３：ＹＥＳ）、ホストインターフェースＬＳＩ４０３は、データが短い時間内に参照されることを示すヒント情報を、ホストコンピュータ１０２から受信したユーザデータを含むパケットに付与し、プロセッサ４０１に対し送信する（Ｓ４１０４）。
【００３４】
パケットを受信したプロセッサ４０１は、ユーザデータにヒント情報が付与されていることを確認し、その後、受け取ったユーザデータをプロセッサキャッシュ５０１に格納する。具体的には、ＰＣＩｅＩ／Ｆ５０５が、受信したユーザデータにヒント情報が付与されているか否かを判定し、ヒント情報が付与されている場合には、プロセッサキャッシュ５０１にユーザデータを転送する。プロセッサキャッシュ５０１（内のコントローラ）は、メモリアドレス７０５から算出したアドレスに、受信したユーザデータを格納する。
【００３５】
一方、ヒント情報付加の指示がない場合（Ｓ４１０３：ＮＯ）、ホストインターフェースＬＳＩ４０３は、ヒント情報を付与せず、プロセッサ４０１に対し、ホストコンピュータ１０２から受信したユーザデータを送信する（Ｓ４１０５）。
【００３６】
データを受信したプロセッサ４０１は、ヒント情報が無いことを確認し、受け取ったデータを主記憶デバイス４０７に格納する。具体的には、ＰＣＩｅＩ／Ｆ５０５が、受信したユーザデータにヒント情報が付与されているか否かを判定し、ヒント情報が付与されていない場合には、メモリＩＦ５１３を介して主記憶デバイス４０７にユーザデータを転送する。最後に、ホストインターフェースＬＳＩ４０３は、プロセッサ４０１にデータの転送が完了したことを通知し（Ｓ４１０６）、処理を終了する。
【００３７】
図４はプロセッサ４０１、４０２が、それぞれのドライブインタフェースＬＳＩ４０５、４０６に対し、データ転送を指示する際の指示内容（ドライブインタフェースＬＳＩ転送指示パラメータ８０１）の例である。この指示は、ドライブ３０３に対し読み書きの要求を行う際に、プロセッサ４０１、４０２によって、それぞれのドライブインタフェースＬＳＩ４０５、４０３に発行される。プロセッサ４０１、４０２は、ホストインターフェースＬＳＩ４０３への指示７０１と同様に、ホストホストコンピュータ１０２から受信したコマンドから、この転送指示パラメータ８０１を含む転送指示を作成する。
【００３８】
転送指示パラメータ８０１は、プロセッサ４０１又は４０２からの指示内容の種別を示すコマンド制御情報８０２、転送データの転送長を表す転送長８０３、ドライブ３０３内に配置されているデータのアドレス（物理アドレス）を示すドライブ内アドレス８０４、ドライブインタフェースＬＳＩ４０５又は４０６がデータ転送を実行する際に、ストレージコントローラ２０１の主記憶デバイス４０７又は４０８上のアドレスを示すメモリアドレス８０５、に加え、ドライブインタフェースＬＳＩ４０５又は４０６がデータ転送を実行する際に、転送データに対しヒント情報を付加するかどうかの指示８０６を含む。
【００３９】
図５は、ドライブインタフェースＬＳＩ４０５、４０６が、それぞれのプロセッサ４０１、４０２から、ドライブ３０３からのリードを行うよう指示を受けた場合における動作を示すフローチャートである。以下において、ドライブインタフェースＬＳＩ４０５の処理を例として説明する。
【００４０】
まず、ドライブインタフェースＬＳＩ４０５は、プロセッサ４０１から、転送指示パラメータ８０１を含む転送指示を受信すると、ドライブ３０３に対し、リードコマンドを発行し、ドライブ３０３にユーザデータの転送を指示する（Ｓ５２０１）。次に、ドライブインタフェースＬＳＩ４０５は、ドライブ３０３から、指示に対応したユーザデータを受信する（Ｓ５２０２）。
【００４１】
次に、ドライブインタフェースＬＳＩ４０５は、対応するドライブインタフェースＬＳＩ転送指示パラメータ８０１を参照し、ヒント情報付加の指示８０６の有無を確認する（Ｓ５２０３）。ヒント情報付加の指示がある場合（Ｓ５２０３：ＹＥＳ）、ドライブインタフェースＬＳＩ４０５は、データが短時間内に参照されることを示すヒント情報を、読みだしたユーザデータを含むパケットに付与し、プロセッサ４０１に対して送信する（Ｓ５２０４）。
【００４２】
ユーザデータを受信したプロセッサ４０１は、ヒント情報が付加されていることを確認し、受け取ったデータをプロセッサキャッシュ５０１に格納する。具体的には、ＰＣＩｅＩ／Ｆ５０９が、受信したユーザデータにヒント情報が付与されているか否かを判定し、ヒント情報が付与されている場合には、プロセッサキャッシュ５０１にユーザデータを転送する。プロセッサキャッシュ５０１（内のコントローラ）は、メモリアドレス８０５から算出したアドレスに、受信したユーザデータを格納する。
【００４３】
一方、ヒント情報付加の指示がない場合（Ｓ５２０３：ＮＯ）、ドライブインタフェースＬＳＩ４０５は、ヒント情報を付与せず、プロセッサ４０１に対し、ドライブ３０３から受信したユーザデータを送信する（Ｓ５２０５）。
【００４４】
ユーザデータを受信したプロセッサ４０１は、ヒント情報が無いことを確認し、受け取ったデータを主記憶デバイス４０７に格納する。具体的には、ＰＣＩｅＩ／Ｆ５０９が、受信したユーザデータにヒント情報が付与されているか否かを判定し、ヒント情報が付与されていない場合には、メモリＩ／Ｆ５１３を介して主記憶デバイス４０７にユーザデータを転送する。最後に、ドライブインタフェースＬＳＩ４０５は、プロセッサ４０１にデータの転送が完了したことを通知し（Ｓ５２０６）、処理を終了する。
【００４５】
図６は、プロセッサコア５０３、５０４が、それぞれのＤＭＡ５１１、５１２に対し、データ転送やパリティ生成を指示する際の指示内容（ＤＭＡパラメータ）の例である。本例において、２種類の指示内容を説明する。一つは、データ転送のためのデータ転送ＤＭＡパラメータ９０１である。以下では、クラスタ間のデータ転送の例を説明する。他の一つは、ＲＡＩＤパリティの演算を行うためのパリティ生成のＤＭＡパラメータ９０２である。
【００４６】
プロセッサコアが、異なるクラスタ（リモートクラスタ）のＤＭＡに指示を行う場合、プロセッサコアは、リモートクラスタに、同様の指示内容と共にリモートクラスタのＤＭＡに指示する要求を送信し、それらを受信したリモートクラスタのプロセッサコアが、リモートクラスタのＤＭＡに上記指示内容の指示を行う。
【００４７】
データ転送の指示は、主記憶デバイス又はプロセッサキャッシュ上にあるデータを、他のクラスタの主記憶デバイス又はプロセッサキャッシュに転送する際に用いられる。パリティ生成は、転送指示を受けたＤＭＡと同じクラスタの主記憶デバイス又はプロセッサキャッシュ上にあるデータを元にパリティを生成し、生成したパリティを同じクラスタの主記憶デバイス又はプロセッサキャッシュに格納する際に用いられる。
【００４８】
指示内容がデータ転送のＤＭＡパラメータ９０１である場合、当該指示は、コマンド種別９０３、転送データの転送元アドレス９０４、転送データの転送先アドレス９０５、転送データの転送長９０６、転送時のヒント情報付加の有無を示すヒント情報付加指示９０７を含む。アドレス９０４、９０５は、主記憶デバイス又はプロセッサキャッシュのアドレスである。
【００４９】
指示内容がパリティ生成のＤＭＡパラメータ９０２である場合の場合、当該指示は、コマンド種別９０８、パリティ生成のための元データのアドレス９０９、生成したパリティの出力先アドレス９１０、パリティの生成サイズを示す転送長９１１、転送時のヒント情報付加の有無を示すヒント情報指示９１２を含む。アドレス９０９、９１０は、主記憶デバイス又はプロセッサキャッシュのアドレスである。
【００５０】
図７は、ＤＭＡ５１１、５１２が、それぞれのプロセッサ４０１、４０２から指示を受けた場合における、動作を示すフローチャートである。以下において、ＤＭＡ５１１の処理を例として説明する。上述のように、ＤＭＡは、リモートプロセッサからの指示を、ローカルプロセッサ（ＤＭＡと同一クラスタのプロセッサ）を介して受け取る。
【００５１】
まず、ＤＭＡ５１１は、プロセッサ４０１から受信したＤＭＡパラメータ９０１／９０２を参照し、指定されている転送元アドレス９０５／９０９から、データを読み込む（Ｓ６００１）。次に、ＤＭＡ５１１は、受信したパラメータ９０１／９０２のコマンド種別９０３／９０８のフィールドを参照し、処理種別を判定する（Ｓ６００２）。
【００５２】
処理種別がパリティ生成の場合（Ｓ６００２：パリティ演算）、ＤＭＡ５１１は、次に、ヒント情報指示９１２のフィールドを参照して、ヒント情報の付加が指示されているか否かを判定する（Ｓ６００３）。ヒント情報の付加が指示されている場合（Ｓ６００３：ＹＥＳ）、ＤＭＡ５１１は、パリティ（パリティ演算結果）を生成し、それに対しヒント情報を付加して、アドレス情報と共に出力する（Ｓ６００５）。プロセッサキャッシュ５０１のコントローラは、出力されたデータを受信し、付加されたヒント情報を検出すると、転送先アドレス９０５で特定されるアドレスに、受信したパリティを格納する。
【００５３】
一方、ヒント情報の付加が指示されていなければ（Ｓ６００３：ＮＯ）、ＤＭＡ５１１は、パリティ演算結果に対しヒント情報を付加せずに、アドレス情報と共に出力する（Ｓ６００４）。メモリＩ／Ｆ５１３は、出力されたデータを受信し、ヒント情報が付加されていないことを確認すると、主記憶デバイス４０７の転送先アドレス９０５で特定されるアドレスに、受信したパリティを格納する。ＤＭＡ５１１は、その後、プロセッサ４０１にパリティ生成の完了を通知し（Ｓ６００６）、処理を終了する。
【００５４】
一方、ステップＳ６００２において、処理種別がデータ転送の場合（Ｓ６００２：データ転送）、ＤＭＡ５１１は、次に、ヒント情報付加指示９０７のフィールドを参照して、ヒント情報付加が指示されているかを判定する（Ｓ６００７）。ヒント情報付加が指示されている場合（Ｓ６００７：ＹＥＳ）、ＤＭＡ５１１は、転送データに対しヒント情報を付加して、ＮＴＢ５０７を介して、リモートクラスタ３０２のプロセッサ４０２へデータを出力する（Ｓ６００８）。
【００５５】
リモートクラスタ３０２のＮＴＢ５０８は、転送データにヒント情報が付与されていることを確認し、データをプロセッサキャッシュ５０２に転送する。プロセッサキャッシュ５０２は、指定されたアドレスに転送データを格納する。
【００５６】
一方、ヒント情報の付加が指示されていなければ（Ｓ６００７：ＮＯ）、ＤＭＡ５１１は、転送データに対しヒント情報を付加せずに、ＮＴＢ５０７を介して、リモートクラスタ３０２のプロセッサ４０２へデータを出力する（Ｓ６００９）。リモートクラスタ３０２のＮＴＢ５０８は、転送データにヒント情報が付与されていないことを確認し、データをメモリＩ／Ｆ５１４を介して、主記憶デバイス４０８に転送する。その後、ＤＭＡ５１１は、プロセッサ４０１にデータ転送の完了を通知し（Ｓ６０１０）、処理を終了する。
【００５７】
図８は、クラスタ３０１の主記憶デバイス４０７及びプロセッサキャッシュ５０１とメモリ空間との間の関係例を示している。クラスタ３０２の主記憶デバイス４０８及びプロセッサキャッシュ５０２とメモリ空間との間の関係も同様であるが、クラスタ間で対応関係が異なっていてもよい。
【００５８】
ホストコンピュータ１０２から読み書きされるユーザデータを格納する領域は、キャッシュ領域と、一時領域とに分けられている。キャッシュ領域は、短時間内に参照されないが長時間保持しておくべきデータ、例えば、再参照の可能性が高いデータを格納する。主記憶デバイスでのデータの再参照のため、プロセッサキャッシュ５０１上のキャッシュ領域に格納するデータは、プロセッサコア５０３、５０４の命令によって主記憶デバイス４０７に追い出される。一時領域は、短時間内に参照されるデータを保持する。主記憶デバイス４０７上で再参照さる事を防ぐため、プロセッサキャッシュ５０１の一時領域に格納されるデータは短時間で上書きされる。短時間内に参照されるデータへのアクセスは、プロセッサキャッシュ５０１に集中するので、プロセッサキャッシュ５０１へのアクセス頻度が高くなる。
【００５９】
このデータ配置により、プロセッサキャッシュ５０１へのアクセス頻度が高くなり、主記憶デバイス４０７へのアクセス頻度が低くなる。また、一時領域は、短時間内に書き換えられるので、限られたプロセッサキャッシュ容量で、主記憶デバイス４０７へのアクセスを削減することができる。
【００６０】
本例において、プロセッサキャッシュ５０１は、一時領域の全体を含み、さらに、キャッシュ領域の一部を含む。他のキャッシュ領域は、主記憶デバイス４０７に含まれる。プロセッサキャッシュ５０１は、キャッシュ領域を全く含まなくともよい。
【００６１】
本例のように、キャッシュ領域が、プロセッサキャッシュ５０１と主記憶デバイス４０７の双方の領域を含む構成において、プロセッサ４０１は、データの性質やデータの位置情報、またはこれらの組み合わせに応じて、プロセッサキャッシュ５０１と主記憶デバイス４０７のキャッシュ領域を使い分けてもよい。例えば、データ長が所定の閾値よりも大きい場合、プロセッサ４０１は、当該データを主記憶デバイス４０７に格納し、上記閾値以下である場合に、プロセッサキャッシュ５０１に格納する。また、データ転送元記憶デバイスがＨＤＤである場合、プロセッサ４０１は、当該データを主記憶デバイス４０７に格納し、ＳＳＤである場合には、プロセッサキャッシュ５０１に格納する。
【００６２】
プロセッサ４０１は、プロセッサキャッシュ５０１上で参照され、再度参照される可能性が低いデータを格納している領域を解放し、その領域を別のデータの格納に用いる。一方、プロセッサ４０１は、直近で再度参照されることは無いが、時間経過後に再度参照されるデータ又はその可能性が高いデータを、プロセッサキャッシュ５０１から主記憶デバイス４０７へ追い出す（移動する）。データ移動後のプロセッサキャッシュ５０１の領域は、他のデータの格納に使用される。これにより、プロセッサキャッシュ５０１の占有量及び主記憶デバイス４０７へのアクセスを削減する。
【００６３】
図９は、クラスタ３０１がホストコンピュータ１０２からリードコマンドを受け、該当するユーザデータが他のクラスタ（リモートクラスタ）３０２の主記憶デバイス４０８上に存在する場合における、転送データの流れを示している。
【００６４】
リモートクラスタ３０２のＤＭＡ５１２は、当該クラスタ３０２の主記憶デバイス４０８上のデータを、ホストコンピュータ１０２に接続されているクラスタ３０１へ転送する。この転送データは直ちに参照されるデータである。そこで、ＤＭＡ５１２は、該当データがすぐに参照されることを示すヒント情報を付与し、ＮＴＢ５０８、５０７を介して、データをプロセッサキャッシュ５０１に転送する（Ｐ３）。
【００６５】
次に、ホストインターフェースＬＳＩ４０３は、プロセッサキャッシュ５０１のデータを、ホストコンピュータ１０２に送信する（Ｐ４）。データの送信後、ホストインターフェースＬＳＩ４０３はホストコンピュータ１０２にデータ送信完了を通知する。これにより、ホストコンピュータ１０２のリードコマンドへの応答が終了する。プロセッサキャッシュ５０１を用いることで、主記憶デバイス４０７へのアクセスを削減することができ、その結果、ストレージ装置１０１の性能を向上することができる。
【００６６】
図１０は、ホストからリードコマンドを受け、該当するデータが主記憶デバイス上に存在せず、不揮発性半導体記憶デバイス（ＳＳＤ）から読み出す場合のデータの流れである。まず、ドライブインタフェースＬＳＩ４０５は、ドライブ３０３上のデータを読み出す（Ｐ５）。
【００６７】
読み出されたデータは、直ちにホストインターフェースＬＳＩ４０３によって参照されるデータである。ドライブインタフェースＬＳＩ４０５は、該当データがすぐに参照されることを示すヒント情報を付与して、データをプロセッサキャッシュ５０１にＰＣＩｅ５０９を介して転送する。以降は、図９のＰ４が示す動作と同様である（Ｐ６）。
【００６８】
図１１、１２は、ホストコンピュータ１０２からリードコマンドを受信した際のプロセッサの処理内容を示すフローチャートである。以下において、プロセッサ４０１がホストコンピュータ１０２からリードコマンドを受信したとして、処理内容を説明する。
【００６９】
図１１に示すように、プロセッサコア５０３は、ホストコンピュータ１０２からホストインターフェースＬＳＩ４０３、ＰＣＩｅＩ／Ｆ５０５を介して、リードコマンドを受信すると、コマンドの種別を判定する（Ｓ３００１）。本フローでは、プロセッサコア５０３は、受信コマンドがリードコマンドであると判定する。プロセッサコア５０３は、キャッシュ管理情報（不図示）を参照し、コマンドが示すアドレスのユーザデータが過去にドライブ３０３から読み込まれ、主記憶デバイス上に存在しているかを判定する（Ｓ３００２）。
【００７０】
指定データが主記憶デバイス上に存在している場合（Ｓ３００２：ＹＥＳ、データ転送の流れについて図９参照）、プロセッサコア５０３は、キャッシュ管理情報を参照し、指定ユーザデータがクラスタ３０１、３０２のいずれのクラスタの主記憶デバイスに存在するかを判定し、その格納位置を特定する（Ｓ３００３）。
【００７１】
ローカルクラスタ３０１と判定した場合、即ち、コマンドを発行したホストコンピュータ１０２が接続されているクラスタ３０１の主記憶デバイス４０７に指定ユーザデータが存在する場合（Ｓ３００３：ローカルクラスタ）、プロセッサコア５０３は、該当データをホストコンピュータ１０２に転送し（Ｓ３００４）、処理を終了する。
【００７２】
具体的には、プロセッサコア５０３から指示を受けたホストインターフェースＬＳＩ４０３が、ＰＣＩｅＩ／Ｆ５０５を介して主記憶デバイス４０７上のユーザデータを読み出し、ホストコンピュータ１０２に転送する。
【００７３】
一方、ステップＳ３００３において、指定ユーザデータがリモートクラスタ３０２と判定した場合、即ちコマンドを発行したホストコンピュータ１０２が接続されていないクラスタ３０２の主記憶デバイス４０８に存在する場合、ストレージコントローラ２０１は、主記憶デバイス４０８上のデータを直接にホストコンピュータ１０２に転送することができない。
【００７４】
このため、まず、プロセッサコア５０３は、ローカルクラスタ３０１のプロセッサキャッシュ５０１において、一時領域を確保する（Ｓ３００５）。次に、プロセッサコア５０３は、リモートクラスタ３０２のＤＭＡ５１２を用い、リモートクラスタ３０２の主記憶デバイス４０８からローカルクラスタ３０１にデータを転送する。
【００７５】
転送データは、ローカルクラスタ３０１においてすぐに参照されるデータである。そこで、プロセッサコア５０３は、リモートクラスタ３０２のＤＭＡ５１２へ、ヒント情報を付与して指定ユーザデータを転送するよう指示する。ヒント情報を付与されたユーザデータは、ＮＴＢ５０８からＮＴＢ５０７に転送され、ＮＴＢ５０７は、ヒント情報を確認して、プロセッサキャッシュ５０１に転送する（Ｓ３００６）。転送されたユーザデータは、プロセッサキャッシュ５０１で確保されている領域に格納される。
【００７６】
その後、プロセッサコア５０３は、ホストインターフェースＬＳＩ４０３を使用して、該当ユーザデータを、プロセッサキャッシュ５０１からホストコンピュータ１０２に転送する（Ｓ３００７）。この後、ローカルクラスタの５０１のプロセッサキャッシュ５０１に確保した一時領域のデータは不要となるため、プロセッサコア５０３は、確保した領域を解放し（Ｓ３００８）、処理を終了する。
【００７７】
一方、ステップＳ３００２において、指定されたアドレスのユーザデータが主記憶デバイス上に無い場合（Ｓ３００２：ＮＯ）、図１２に示すように、プロセッサコア５０３は、ドライブ３０３からユーザデータを読み出し、ホストコンピュータ１０２に転送する。この場合、プロセッサコア５０３は、ボリュームデータ管理情報（不図示）を参照して、ユーザデータを格納しているドライブの種別が、ＨＤＤであるか、ＳＳＤであるか判定する（Ｓ３００９）。ボリュームデータ管理情報は、ホストコンピュータ１０２により指定されるデータ格納位置（ボリューム及びそのアドレスを含む）と、そのアドレスのデータを格納するドライブの種別とを関連づけて管理する。
【００７８】
ユーザデータの格納先がＨＤＤの場合（Ｓ３００９：ＨＤＤ）、その応答速度がＳＳＤと比較して遅いため、同一データへの再度のアクセスに備え、読み出したユーザデータを、ホストコンピュータ１０２への転送後も、主記憶デバイス４０７上に保持しておくことが好ましい。そこで、プロセッサコア５０３は、ホストコンピュータ１０２への転送後にユーザデータを格納するためのキャッシュ領域を、ローカルクラスタ３０１の主記憶デバイス４０７において確保する（Ｓ３０１０）。
【００７９】
プロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５を用い、ドライブ３０３からユーザデータを読み出す（Ｓ３０１１）。読み出されたユーザデータは、ホストコンピュータ１０２への転送ために直ぐに参照される。そこで、プロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５に対し、ヒント情報を付与してユーザデータを送信することを指示する。ＰＣＩｅＩ／Ｆ５０９は、ユーザデータに付与されたヒント情報に従って、プロセッサキャッシュ５０１にユーザデータを転送する。
【００８０】
その後、プロセッサコア５０３は、プロセッサキャッシュ５０１上の該当ユーザデータを、ホストコンピュータ１０２に、ホストインターフェースＬＳＩ４０３を使用して転送する（Ｓ３０１２）。この後、このユーザデータは、再度、ホストコンピュータ１０２からリードコマンドが来るまで、参照されることが無い。そこで、プロセッサコア５０３は、該当データを主記憶デバイスに追い出す操作を行う（Ｓ３０１３）。これにより、参照されないデータがプロセッサキャッシュ５０１を占有し続けることを防ぐ。
【００８１】
ユーザデータの格納先がＳＳＤの場合（Ｓ３００９：ＳＳＤ、データ転送の流れについて図１０参照）、ＳＳＤの応答速度は速いため、当該ユーザデータを主記憶デバイス４０７に保持せず、主記憶デバイス４０７の領域を他のデータに使用することが好ましい。
【００８２】
そこで、プロセッサコア５０３は、ユーザデータを格納するための一時領域を、ローカルクラスタ３０１のプロセッサキャッシュ５０１において確保する（Ｓ３０１４）。
【００８３】
その後、プロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５を用い、ドライブ３０３からユーザデータを読み出す（Ｓ３０１５）。プロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５に対し、ヒント情報を付与してユーザデータを送信することを指示する。ＰＣＩｅＩ／Ｆ５０９は、ユーザデータに付与されたヒント情報に従って、プロセッサキャッシュ５０１にユーザデータを転送する。転送先の指定アドレスは、ステップＳ３０１４で確保された一次領域であり、プロセッサキャッシュ５０１のコントローラは、ユーザデータをそこに格納する。
【００８４】
その後、プロセッサコア５０３は、プロセッサキャッシュ５０１上の該当ユーザデータを、ホストコンピュータ１０２に、ホストインターフェースＬＳＩ４０３を使用して転送する（Ｓ３０１６）。この後、プロセッサコア５０３は、該当ユーザデータを格納しているプロセッサキャッシュ５０１の一時領域を解放する（Ｓ３０１７）。
【００８５】
図１３は、クラスタ３０１がホストコンピュータ１０２からライトコマンドを受けてから、受信したユーザデータを、両クラスタ３０１、３０２の主記憶デバイス４０７、４０８に二重化するまで（フロントエンドライト）のデータ転送の流れを示している。
【００８６】
ホストインターフェースＬＳＩ４０３は、ホストコンピュータ１０２からライトデータ（ユーザデータ）を受け取る。受信されたユーザデータは、二重化のため、直ちに参照される。そこで、ホストインターフェースＬＳＩ４０３は、該当ユーザデータがすぐに参照されることを示すヒント情報を付与することで、プロセッサキャッシュ５０１に格納する（Ｐ７）。
【００８７】
次に、ハードウェア障害によるデータ消失を防ぐため、ＤＭＡ５１１は、プロセッサキャッシュ５０１上のデータを、リモートクラスタ３０２に転送する。転送先のリモートクラスタ３０２は、データに誤りが無いか、ＤＩＦ（Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  Ｆｉｅｌｄ）と呼ばれる保証コードを用いて照合する。
【００８８】
ＤＭＡ５１１は、データが短時間内に参照されることを示すヒント情報を付与し、リモートクラスタ３０２のプロセッサキャッシュ５０２にデータを転送する（Ｐ８）。次に、リモートクラスタ３０２のプロセッサコア５０４が、保証コード検証を行う（Ｐ９）。
【００８９】
その後、該当ユーザデータは、ドライブ３０３への書き込みまでの間、アクセスされることが無いため、プロセッサコア５０３、５０４は、それぞれのプロセッサキャッシュ５０１、５０２から、それぞれの主記憶デバイス４０７、４０８に、ユーザデータを追い出す（Ｐ１０、Ｐ１１）。
【００９０】
図１４は、ホストコンピュータ１０２からライトコマンドを受信した際のプロセッサ４０１、４０２の処理（フロントエンドライト）の内容を示すフローチャートである。以下において、クラスタ３０１がライトコマンドを受信したものとして、フローチャートの処理を説明する。
【００９１】
プロセッサコア５０３は、ホストコンピュータ１０２からホストインターフェースＬＳＩ４０３、ＰＣＩｅＩ／Ｆ５０５を介して、ライトコマンドを受信すると、コマンドの種別を判定する（Ｓ１００９）。本フローでは、プロセッサコア５０３は、受信コマンドがライトコマンドであると判定する。
【００９２】
プロセッサコア５０３は、次に、ローカルクラスタ３０１において、キャッシュ領域を確保する（Ｓ１０１０）。本例では、主記憶デバイス４０７においてキャッシュ領域を確保する。そして、プロセッサコア５０３は、ホストインターフェースＬＳＩ４０３に対し、ホストコンピュータ１０２から受け取ったユーザデータの書き込み（転送）を指示する（Ｓ１０１１）。この時転送されるユーザデータは、リモートクラスタ３０２への二重化のため直ちに参照されるため、プロセッサコア５０３は、ホストインターフェースＬＳＩ４０３に対し、ヒント情報を付与してユーザデータを転送するよう指示する。
【００９３】
次に、プロセッサコア５０３は、リモートクラスタ３０２におけるキャッシュ領域を確保する（Ｓ１０１２）。本例においては、主記憶デバイス４０８においてキャッシュ領域を確保する。プロセッサコア５０３は、リモートクラスタ３０２のプロセッサコア５０４に、主記憶デバイス４０８においてキャッシュ領域を確保することを指示する。
【００９４】
次に、プロセッサコア５０３は、ローカルクラスタ３０１のＤＭＡ５１１に対し、ローカルクラスタ３０１のプロセッサキャッシュ５０１上のユーザデータを、リモートクラスタ３０２へ転送することを指示する（Ｓ１０１３）。リモートクラスタ３０２に転送されたユーザデータは、保証コード検証のため直ちに参照される。そこで。プロセッサコア５０３は、ＤＭＡ５１１に対し、ヒント情報を付与してデータ転送を行うよう指示する。
【００９５】
ヒント情報を付与されたデータは、ＮＴＢ５０７を介してＮＴＢ５０８に転送される。ＮＴＢ５０８は、転送データのヒント情報を確認し、当該データをプロセッサキャッシュ５０２に転送する。プロセッサキャッシュ５０２のコントローラは、指定された主記憶デバイス４０８のアドレスに対応するプロセッサキャッシュ５０２アドレスに、受信したデータを格納する。リモートクラスタ３０２のプロセッサコア５０４は、転送されたユーザデータの保証コードを検証する（Ｓ１０１４）。
【００９６】
その後、ローカルクラスタ３０１及びリモートクラスタ３０２において、データが短時間内に読まれることはない。そこで、リモートクラスタの３０２のプロセッサコア５０４は、プロセッサキャッシュ５０２上のデータを主記憶デバイス４０８に追い出し（Ｓ１０１５）、ローカルクラスタ３０１のプロセッサコア５０３は、プロセッサキャッシュ上５０１のデータを主記憶デバイス４０７に追い出す（Ｓ１０１６）。最後に、プロセッサコア５０３は、ホストコンピュータ１０２に対し、ライト完了を応答し（Ｓ１０１７）、処理を終了する。
【００９７】
図１５は、ホストコンピュータ１０２から書き込まれ、主記憶デバイスに格納されたユーザデータを使用してＲＡＩＤパリティを生成し、ホストコンピュータ１０２から書き込まれたユーザデータ及び生成したパリティを、ドライブ３０３に書き込むまで（バックエンドライド）のデータ転送の流れを示している。ここでは、ホストコンピュータ１０２から書き込まれたユーザデータが十分大きく、書き込まれたユーザデータのみからパリティを計算できる場合を示す。
【００９８】
まず、ＤＭＡ５１１は、ホストコンピュータ１０２から書き込まれたユーザデータを元に、パリティを生成する（Ｐ１２）。このとき、生成されたパリティは二重化のため直ちに参照される。そのため、ＤＭＡ５１１は、該当データがすぐに参照されることを示すヒント情報を付与することで、生成したパリティをプロセッサキャッシュ５０１に格納する。
【００９９】
次に、ＤＭＡ５１１は、ハードウェア障害によるデータ消失を防ぐため、プロセッサキャッシュ５０１上のパリティを、リモートクラスタ３０２に転送する。転送先で保証コードの照合を行うため、転送データは直ぐに参照される。そこで、ＤＭＡ５１１は、該当データが直ぐに参照されることを示すヒント情報を付与して、リモートクラスタ３０２のプロセッサキャッシュ５０２にデータを転送する（Ｐ１３）。その後、リモートクラスタ３０２のプロセッサコア５０４は、ＤＭＡ５１１に生成され、転送されたパリティの保証コード検証を行う（Ｐ１４）。
【０１００】
その後は、ハードウェアに障害が発生しない限り、該当データは参照されることが無い。そこで、リモートクラスタ３０２のプロセッサコア５０４は、プロセッサキャッシュ５０２から、主記憶デバイス４０８へデータを追い出す（Ｐ１５）。最後に、ドライブインタフェースＬＳＩドライブインタフェース４０５は、ホストコンピュータ１０２から書き込まれたユーザデータ及び生成したパリティを、ドライブ３０３へ書き込む（Ｐ１６）。
【０１０１】
図１６は、ホストコンピュータ１０２から書き込まれ、主記憶デバイスに格納されたユーザデータと、ドライブ３０３に格納されているデータとを使用して、ＲＡＩＤパリティを更新し、ホストコンピュータ１０２から書き込まれたユーザデータ及び更新されたパリティを、ドライブ３０３に書き込むまで（バックエンドライト）のデータ転送の流れを示している。ここでは、ホストコンピュータ１０２から書き込まれたユーザデータが少なく、書き込まれたユーザデータのみでパリティを計算しない場合を示す。
【０１０２】
まず、ドライブインタフェースＬＳＩ４０５は、パリティの更新に必要な、更新前パリティ及び更新前ユーザデータを読み出す。これらは読み出し後、直ちにパリティの更新に使われる（参照される）。そこで、ドライブインタフェースＬＳＩ４０５は、該当データがすぐに参照されることを示すヒント情報を付与することで、読み出した更新前パリティ及びユーザデータを、プロセッサキャッシュ５０１に格納する（Ｐ１７）。
【０１０３】
ＤＭＡ５１１は、ホストコンピュータ１０２から書き込まれたユーザデータ並びにドライブ３０３から読み出した更新前パリティ及びユーザデータを元に、パリティを生成する（Ｐ１８）。このとき、生成されたパリティは二重化のため直ちに参照される。そのため、ＤＭＡ５１１は、該当データがすぐに参照されることを示すヒント情報を付与することで、生成したパリティをプロセッサキャッシュ５０１に格納する。
【０１０４】
次に、ハードウェア障害によるデータ消失を防ぐため、ＤＭＡ５１１は、プロセッサキャッシュ５０１上のパリティを、リモートクラスタ３０２に転送する。転送先で保証コードの照合を行うため、転送データは直ぐに参照される。そこで、ＤＭＡ５１１は、該当データが直ぐに参照されることを示すヒント情報を付与して、リモートクラスタ３０２のプロセッサキャッシュ５０２にデータを転送する（Ｐ１９）。
【０１０５】
その後、その後、リモートクラスタ３０２のプロセッサコア５０４は、ＤＭＡ５１１に生成され、転送されたパリティをその保証コードを使用して検証する（Ｐ２０）。その後は、ハードウェアに障害が発生しない限り、該当データは参照されることが無い。そこで、リモートクラスタ３０２のプロセッサコア５０４は、プロセッサキャッシュ５０２から、主記憶デバイス４０８へデータを追い出す（Ｐ２１）。最後に、ドライブインタフェースＬＳＩドライブインタフェース４０５は、ホストコンピュータ１０２から書き込まれたユーザデータ及び生成したパリティを、ドライブ３０３へ書き込む（Ｐ２２）。
【０１０６】
図１７、図１８、図１９は、ホストコンピュータ１０２から書き込まれ、主記憶デバイスに格納されたユーザデータを使用してパリティを適宜生成し、ユーザデータ及びパリティをドライブに書き込むまで（バックエンドライト）のプロセッサの処理を示すフローチャートである。以下において、クラスタ３０１がホストコンピュータ１０２からライトコマンドを受信したものとして、フローチャートに従った処理を説明する。
【０１０７】
プロセッサコア５０３は、主記憶デバイス４０７上にある更新後ユーザデータ（ホストコンピュータ１０２から受信したユーザデータ）のデータ長を調べる（Ｓ２００２）。データ長が所定の閾値よりも大きい場合（Ｓ２００２：大）、主記憶デバイス４０７の更新後ユーザデータのみを使用してパリティ生成が可能である。
【０１０８】
そのため、プロセッサコア５０３は、ＤＭＡ５１１を使用してパリティを生成する。具体的には、ＤＭＡ５１１に、主記憶デバイス４０７から更新後ユーザデータを読み込み、更新後パリティを生成することを指示する。更新後パリティは、リモートクラスタ３０２への二重化のため直ちに転送される。そこで、プロセッサコア５０３は、ＤＭＡ５１１に対し、ヒント情報を使用して更新後パリティを生成して、プロセッサキャッシュ５０１に格納するように指示する（Ｓ２００３）。
【０１０９】
プロセッサコア５０３は、リモートクラスタ３０２にキャッシュ領域を確保する（Ｓ２００４）。ここでは、主記憶デバイス４０８におけるキャッシュ領域を確保する。プロセッサコア５０３は、リモートクラスタ３０２のプロセッサコア５０４にキャッシュ領域の確保を指示し、プロセッサコア５０４がその指示に従って、主記憶デバイス４０８におけるキャッシュ領域を確保する。
【０１１０】
次に、プロセッサコア５０３は、ローカルクラスタ３０１のＤＭＡ５１１に対し、プロセッサキャッシュ５０１上の更新後パリティを、リモートクラスタ３０２へ転送することを指示する（Ｓ２００５）。リモートクラスタ３０２に転送されたデータは、保証コード検証のため直ちに参照される。そこで、プロセッサコア５０３は、ＤＭＡ５１１に対し、ヒント情報を付与してデータ転送を行うよう指示する。
【０１１１】
プロセッサキャッシュ５０２のコントローラは、指定された主記憶デバイス４０８のアドレスに対応するプロセッサキャッシュ５０２アドレスに、ローカルクラスタ３０１から受信した更新後パリティを格納する。リモートクラスタ３０２のプロセッサコア５０４は、プロセッサキャッシュ５０２に転送された更新後パリティの保証コードを検証する（Ｓ２００６）。
【０１１２】
その後は、リモートクラスタ３０２のパリティが直ちに参照されることは無い。そこで、リモートクラスタ３０２のプロセッサコア５０４は、プロセッサキャッシュ５０２上のデータを主記憶デバイス４０８に追い出す（Ｓ２００７）。更新後パリティは、クラスタ３０１、３０２において二重化されている。
【０１１３】
ローカルクラスタ３０１のプロセッサコア５０３は、ローカルクラスタ３０１のドライブインタフェースＬＳＩ４０５に対し、更新後のユーザデータのドライブ３０３への転送を指示し（Ｓ２００８）、さらに、更新後パリティのドライブ３０３への転送を指示する（Ｓ２００９）。以上で、処理を終了する。
【０１１４】
一方、ステップＳ２００２において、主記憶デバイス４０７上にある更新後ユーザデータのデータ長が閾値以下である場合（Ｓ２００２：小）、図１８に示すように、プロセッサコア５０３は、ボリュームデータ管理情報を参照して、ライトコマンドの指定する格納先（アドレス）のドライブ３０３の種別が、ＨＤＤであるかＳＳＤであるかを判定する（Ｓ２００９）。
【０１１５】
指定された格納先がＨＤＤの場合（Ｓ２００９：ＨＤＤ）、ドライブ３０３へのアクセスが長い時間を要するため、プロセッサキャッシュ５０１を用いると、その占有時間が長くなる。また、主記憶デバイス４０７の帯域はドライブ３０３の帯域に対し比較的余裕がある。そこで、図１９に示すように、プロセッサ４０１は、プロセッサキャッシュ５０１を用いず主記憶デバイス４０７を用いてドライブ３０３への書き込みを行う。
【０１１６】
具体的には、まず、プロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５に対し、主記憶デバイス４０７への更新前ユーザデータの転送を指示する（Ｓ２０１０）。さらに、ドライブインタフェースＬＳＩ４０５に対し、主記憶デバイス４０７への更新前パリティの転送を指示する（Ｓ２０１１）。
【０１１７】
プロセッサコア５０３は、リモートクラスタ３０２のプロセッサコア５０４を利用して、リモートクラスタ３０２において、更新後パリティを格納するためのキャッシュ領域を確保する（Ｓ２０１２）。本例では、主記憶デバイス４０８にキャッシュ領域を確保する。
【０１１８】
次に、プロセッサコア５０３は、ローカルクラスタ３０１のＤＭＡ５１１を用い、更新前ユーザデータ、更新前パリティ、ホストコンピュータ１０２から受信した更新後ユーザデータを使用してパリティを生成し、パリティを更新する（Ｓ２０１３）。更新後パリティは、リモートクラスタ３０２での二重化のため直ちに参照される。そこで、プロセッサコア５０３は、ＤＭＡ５１１に対し、ヒント情報を付与してプロセッサキャッシュ５０１に更新後パリティを書き込むよう指示する。
【０１１９】
次に、プロセッサコア５０３は、ＤＭＡ５１１に対し、ローカルクラスタ３０１のプロセッサキャッシュ５０１上の更新後パリティを、リモートクラスタ３０２へ転送することを指示する（Ｓ２０１４）。リモートクラスタ３０２に転送されたデータは、保証コード検証のため直ちに参照される。そこで、プロセッサコア５０３は、ＤＭＡ５１１に対し、ヒント情報を付与してデータ転送を行うよう指示する。プロセッサキャッシュ５０２のコントローラは、指定された主記憶デバイス４０８のアドレスに対応するプロセッサキャッシュ５０２アドレスに、受信した更新後パリティを格納する。
【０１２０】
次に、リモートクラスタ３０２のプロセッサコア５０４は、転送された更新後パリティの保証コードを検証する（Ｓ２０１５）。その後、リモートクラスタ３０２の更新後パリティが短時間内に参照されることは無いため、プロセッサコア５０４は、プロセッサキャッシュ５０２上の更新後パリティを、主記憶デバイス４０８に追い出す（Ｓ２０１６）。更新後パリティは、クラスタ３０１、３０２で二重化されている。
【０１２１】
次に、ローカルクラスタ３０１のプロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５に対し、主記憶デバイス４０７上の更新後ユーザデータ及びプロセッサキャッシュ５０１上の更新後パリティを、ドライブ３０３へ転送することを指示する（Ｓ２０１７）。その後、プロセッサコア５０３は、プロセッサキャッシュ５０１上の更新後パリティを、主記憶デバイス４０７に追い出し（Ｓ２０１８）、処理を終了する。
【０１２２】
一方、ステップＳ２００９において、ライトコマンドが指定するアドレスのドライブの種別がＳＳＤである場合（Ｓ２００９：ＳＳＤ）、ドライブ３０３に対するアクセスは短時間で終わるため、プロセッサキャッシュを用いても、その占有時間を短く抑えることができる。また、ＳＳＤの帯域（アクセス性能）が大きいため、主記憶デバイスの帯域は相対的に余裕が小さい。
【０１２３】
そこで、プロセッサ４０１は、プロセッサキャッシュ５０１を用いてドライブ３０３への書き込みを行う。具体的には、まず、プロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５に対し、ローカルクラスタのプロセッサキャッシュ５０１へ更新前ユーザデータを転送することを指示する（Ｓ２０１９）。さらに、ドライブインタフェースＬＳＩ４０５に対し、プロセッサキャッシュ５０１への更新前パリティを転送することを指示する（Ｓ２０２０）。
【０１２４】
次に、プロセッサコア５０３は、リモートクラスタ３０２のプロセッサコア５０４を利用して、リモートクラスタ３０２に、更新後パリティを格納するためのキャッシュ領域を確保する（Ｓ２０２１）。ここでは、主記憶デバイス４０８にキャッシュ領域を確保する。
【０１２５】
次に、プロセッサコア５０３は、ローカルクラスタ３０１のＤＭＡ５１１を用い、ドライブ３０３から読み出した更新前ユーザデータ及び更新前パリティ並びにホストコンピュータ１０２から受信した更新後ユーザデータを使用して、パリティを生成して更新する（Ｓ２０２２）。更新後パリティは、リモートクラスタへの二重化のため直ちに参照される。そこで、プロセッサコア５０３は、ＤＭＡ５１１に対し、ヒント情報を付与してプロセッサキャッシュ５０１に更新後パリティを書き込むよう指示する。
【０１２６】
次に、プロセッサコア５０３は、ローカルクラスタ３０１のＤＭＡ５１１に対し、ローカルクラスタ３０１のプロセッサキャッシュ５０１上の更新後パリティを、リモートクラスタ３０２へ転送することを指示する（Ｓ２０２３）。リモートクラスタ３０２に転送されたデータは、保証コード検証のため直ちに参照される。そこで、プロセッサコア５０３は、ＤＭＡ５１１に対し、ヒント情報を付与してデータ転送を行うよう指示する。
【０１２７】
次に、リモートクラスタ３０２のプロセッサコア５０４は、転送された更新後パリティの保証コードを検証する（Ｓ２０２４）。その後、リモートクラスタ３０２の更新後パリティが短時間内に参照されることはない。そこで、プロセッサコア５０４は、リモートクラスタ３０２のプロセッサキャッシュ５０２上の更新後パリティを、主記憶デバイス４０８に追い出す（Ｓ２０２５）。
【０１２８】
ローカルクラスタ３０１のプロセッサコア５０３は、ドライブインタフェースＬＳＩ４０５に対し、主記憶デバイス４０７上の更新後ユーザデータ及びプロセッサキャッシュ５０１上の更新後パリティを、ドライブ３０３へ転送することを指示する（Ｓ２０２６）。その後、プロセッサコア５０３は、プロセッサキャッシュ５０１上の更新後パリティを、主記憶デバイス４０７に追い出し（Ｓ２０２７）、処理を終了する。
【０１２９】
本実施形態の構成により、プロセッサキャッシュを用いたストレージ動作を行うことができ、主記憶デバイスへのアクセスを減らすことができる。このため、ストレージ動作に必要な主記憶デバイスの帯域を減らすことができ、ストレージ装置の性能を向上させることができる。この結果、主記憶デバイスのインタフェースの帯域から定まる性能の上限を超えて、ストレージ装置の性能を向上させることができる。
【０１３０】
また、プロセッサキャッシュを短時間内に参照されるデータの格納に使用し、参照直後に格納領域を解放する又は格納領域からデータを追い出すことで他のデータ格納に使用できるようにするので、プロセッサキャッシュの占有時間、占有容量を抑えることができ、プロセッサキャッシュの必要容量を抑えることができ、限られたプロセッサキャッシュ容量であっても、主記憶デバイスへのアクセス低減を効果的に行うことができる。
【０１３１】
以上、本発明の構成例を説明したが、本発明が上記構成例に限定されるものではない。当業者であれば、上記の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能である。
【０１３２】
上記構成例は、汎用プロセッサを適用したストレージ装置において、ストレージ装置の動作（コマンド種別）とデータ転送先／転送元の記憶デバイスとに基づき、プロセッサキャッシュをデータ転送バッファとして利用するか判定する。その判定を基に、フロントエンド、バックエンド又はプロセッサは、ＰＣＩｅの標準技術であるＴＰＨ（ヒント情報）を転送データに付加し、プロセッサキャッシュに直接データ転送する。その結果、主記憶デバイスへのアクセス回数を削減する事が可能となり、ストレージ装置の装置性能が向上する。
【０１３３】
上記構成例は、ホストコマンドが指定するユーザデータの格納記憶デバイスに基づいて、ユーザデータの転送バッファをプロセッサキャッシュ及び主記憶デバイスから選択する。具体的には、ライトデータを格納すべき記憶ドライブの種別や、リードコマンドが指定するユーザデータを格納している主記憶デバイスの位置（所属クラスタ）に基づいて、転送バッファを決定する。また、上記構成例は、リードコマンド及びライトコマンドの双方に対する処理において、プロセッサキャッシュをデータの転送バッファとして使用する。
【０１３４】
本発明のストレージシステムは、リードコマンド又はライトコマンドの一方に対する処理においてのみ、プロセッサキャッシュを転送バッファとして利用してもよく、クラスタ間又はストレージ装置間のデータ転送においてのみ、プロセッサキャッシュを転送バッファとして利用してもよい。本発明は、一つのクラスタのみを含むストレージ装置に適用することができる。また三つ以上のクラスタを含むストレージ装置に適用することができる。
【０１３５】
上記構成例は、リードコマンドに対して、記憶ドライブから読み出したデータをプロセッサキャッシュに転送する。本発明のストレージシステムは、リードコマンドにより指定されたデータを格納する記憶ドライブの種別及び／又はリードコマンドが要求するデータのデータ長に基づいて、記憶ドライブから読み出したデータの転送先を、プロセッサキャッシュと主記憶デバイスから選択してもよい。
【０１３６】
例えば、ストレージシステムは、キャッシュミスにおいて、ユーザデータを読み出す記憶ドライブがＨＤＤである場合に主記憶デバイスをデータ転送バッファとして利用し、ユーザデータを読み出す記憶ドライブがＳＳＤである場合にプロセッサキャッシュをデータ転送バッファとして利用する。ストレージシステムは、さらに、リードコマンドが指定するデータ長に基づいて、転送バッファをプロセッサキャッシュ又は主記憶デバイスから選択してもよい。例えば、データ長が予め定められた閾値よりも大きい場合に主記憶デバイスを使用し、上記閾値以下である場合にプロセッサキャッシュを使用する。
【０１３７】
本発明は、データ転送の転送先をプロセッサキャッシュと主記憶デバイスとから選択することができるプロトコルであれば、ＰＣＩｅと異なるプロトコルによりデータ転送を行うストレージ装置に適用することができる。本発明が適用されるストレージシステムは、一つのストレージ装置又は複数のストレージ装置で構成することができる。クラスタ間のデータ転送の上記手法を、２つのストレージ装置間のデータ転送に適用することができる。
【０１３８】
上記構成例は、アクセス性能が異なる不揮発性記憶デバイス（記憶ドライブ）として、ＳＳＤ及びＨＤＤを含む。本発明は、これらと異なる不揮発性記憶デバイスを実装するストレージシステムに適用することができる。
【図１】
0005870213.tif 000002
【図２】
0005870213.tif 000003
【図３】
0005870213.tif 000004
【図４】
0005870213.tif 000005
【図５】
0005870213.tif 000006
【図６】
0005870213.tif 000007
【図７】
0005870213.tif 000008
【図８】
0005870213.tif 000009
【図９】
0005870213.tif 000010
【図１０】
0005870213.tif 000011
【図１１】
0005870213.tif 000012
【図１２】
0005870213.tif 000013
【図１３】
0005870213.tif 000014
【図１４】
0005870213.tif 000015
【図１５】
0005870213.tif 000016
【図１６】
0005870213.tif 000017
【図１７】
0005870213.tif 000018
【図１８】
0005870213.tif 000019
【図１９】
0005870213.tif 000020