(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023068287
(43)【公開日】2023-05-17
(54)【発明の名称】ストレージシステム及びその制御方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20230510BHJP
G06F 12/04 20060101ALI20230510BHJP
G06F 12/00 20060101ALI20230510BHJP
【FI】
G06F3/06 301W
G06F3/06 301X
G06F3/06 302A
G06F3/06 301R
G06F12/04 530
G06F12/00 560F
【審査請求】有
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021179216
(22)【出願日】2021-11-02
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】岡田 尚也
(72)【発明者】
【氏名】長尾 尚
(72)【発明者】
【氏名】島田 健太郎
(72)【発明者】
【氏名】達見 良介
(72)【発明者】
【氏名】杉本 定広
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CB01
5B160CB03
(57)【要約】
【課題】ストレージシステム内の処理を効率化する。
【解決手段】ストレージシステムは、第1演算装置及び第1メモリを含む第1コントローラと、第2演算装置及び第2メモリを含む第2コントローラと、第1コントローラと第2コントローラとの間のデータを転送するインタフェース回路と、を含む。インタフェース回路は、第2メモリから第1圧縮データを読み出す。インタフェース回路は、第1圧縮データを伸長して第1平文データを生成し、第1平文データを第1メモリに書き込む。
【選択図】
図10
【特許請求の範囲】
【請求項1】
ストレージシステムであって、
第1演算装置及び第1メモリを含む第1コントローラと、
第2演算装置及び第2メモリを含む第2コントローラと、
前記第1コントローラと前記第2コントローラとの間のデータを転送するインタフェース回路と、を含み、
前記インタフェース回路は、
前記第2メモリから第1圧縮データを読み出し、
前記第1圧縮データを伸長して第1平文データを生成し、
前記第1平文データを前記第1メモリに書き込む、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記インタフェース回路は、前記第2コントローラに含まれる第2インタフェース回路であり、
前記第1コントローラは、第1インタフェース回路を含み、
前記第1平文データは、前記第1インタフェース回路を介して、前記第2インタフェース回路から前記第1メモリに転送される、ストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
前記第1圧縮データは、前記第2メモリのバッファ領域に格納され、
前記第1平文データは、前記第1メモリのキャッシュ領域に格納される、ストレージシステム。
【請求項4】
請求項2に記載のストレージシステムであって、
前記第1コントローラは、第2平文データのリード要求を受信し、
前記第1コントローラは、前記第2平文データの第2圧縮データを、前記第1メモリに格納し、
前記第1インタフェース回路は、
前記第1メモリから前記第2圧縮データを読み出し、
前記第2圧縮データを伸長して前記第2平文データを生成し、
前記第2平文データを前記第1メモリに書き込む、ストレージシステム。
【請求項5】
請求項2に記載のストレージシステムであって、
前記第1コントローラは、前記第1平文データのリード要求を受信し、
前記第2コントローラは、前記第1コントローラからの要求に応じて、前記第2インタフェース回路に、前記第1圧縮データの格納アドレス及び前記第1平文データの格納アドレスを指定して、前記第1圧縮データの伸長を指示する、ストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
前記第1コントローラは、第1インタフェース回路を含み、
前記第2コントローラは、第2インタフェース回路を含み、
前記第1コントローラは、
前記第1平文データのリード要求を取得し、
前記第2演算装置及び前記第2インタフェース回路の少なくとも一方の負荷に基づいて、前記第1平文データを伸長する前記インタフェース回路を決定する、ストレージシステム。
【請求項7】
請求項6に記載のストレージシステムであって、
前記第1コントローラは、前記第2演算装置及び前記第2インタフェース回路の負荷に基づいて、前記第1平文データを伸長する前記インタフェース回路を決定する、ストレージシステム。
【請求項8】
ストレージシステムの制御方法であって、
前記ストレージシステムは、
第1演算装置及び第1メモリを含む第1コントローラと、
第2演算装置及び第2メモリを含む第2コントローラと、
前記第1コントローラと前記第2コントローラとの間のデータを転送するインタフェース回路と、を含み、
前記制御方法は、
前記インタフェース回路が、
前記インタフェース回路が、前記第2メモリから第1圧縮データを読み出し、
前記インタフェース回路が、前記第1圧縮データを伸長して第1平文データを生成し、
前記インタフェース回路が、前記第1平文データを前記第1メモリに書き込む、ことを含む、制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムに関する。
【背景技術】
【0002】
ストレージシステムに対して、ビット当たりのストレージコストの低減及びIO性能の向上が求められている。データ圧縮処理によって、ストレージシステムの容量を効率化し、実質的な容量を増大することができる。データ圧縮処理は演算負荷が大きいため、ストレージシステムのIO処理性能の低下を引き起こし得る。特に高圧縮率アルゴリズムで圧縮したデータは伸長処理も負荷が大きい傾向にある。そのため、ホストリードスループット性能の向上が重要である。
【0003】
本開示の関連技術として、例えば、特許文献1がある。特許文献1は、「第1制御ノードと、第2制御ノードと、圧縮ボリュームを提供する最終記憶デバイスと、を含むストレージシステムであって、第1制御ノードは、ホストから未圧縮ホストデータを受信し、未圧縮ホストデータを圧縮して圧縮ホストデータを生成し、圧縮ホストデータを第1メモリにおいてキャッシュデータとして保持し、圧縮ホストデータを伸長して、圧縮ホストデータが正確であるかチェックし圧縮ホストデータが正確である場合に、圧縮ホストデータを第2制御ノードに転送し、第2制御ノードは、第2メモリにおいて圧縮データをキャッシュデータとして保持する。」ことを開示する(例えば要約)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
複数のコントローラを実装するストレージシステムにおいて、ホストからリード要求を受けたコントローラで処理が完結するストレート動作と、他系のコントローラに処理を依頼するクロス動作がある。クロス動作は、ストレート動作に加え、コントローラ間データ転送の処理を必要とする。そのため、クロス動作の性能は、ストレート動作の性能より低下する。ストレート動作とクロス動作の性能差が大きいと、ストレート動作を意識したパス定義をする必要が生じる。そのため、クロス動作時の処理量削減による性能向上が求められる。
【課題を解決するための手段】
【0006】
本発明の一態様に係るストレージシステムは、第1演算装置及び第1メモリを含む第1コントローラと、第2演算装置及び第2メモリを含む第2コントローラと、前記第1コントローラと前記第2コントローラとの間のデータを転送するインタフェース回路と、を含む。前記インタフェース回路は、前記第2メモリから第1圧縮データを読み出し、前記第1圧縮データを伸長して第1平文データを生成し、前記第1平文データを前記第1メモリに書き込む。
【発明の効果】
【0007】
本発明の一態様によれば、ストレージシステム内の処理を効率化できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0008】
【
図1】実施例1の計算機システムの構成の一例を示す図である。
【
図3】多機能インタフェースの構成例を模式的に示す。
【
図4】ストレージシステム内で定義されるボリューム間のマッピングの例を示す。
【
図5】パリティグループが与える物理アドレス空間(PBA空間)、圧縮ボリュームのアドレス空間、及び非圧縮ボリュームのアドレス空間の関係を示す概略図である。
【
図6】ストレージシステムのコントローラにおける、メモリマップの概略図を示す。
【
図7】CPUから、多機能インタフェースに対する指示のフォーマット例を示す。
【
図8】多機能インタフェースから、CPUに対する応答のフォーマット例を示す。
【
図9】ストレートリード動作におけるホストデータの流れを示す。
【
図10】クロスリード動作におけるホストデータの流れを示す。
【
図12】ホストからのリード要求に応じたストレージシステムのリード動作例を示すフローチャートである。
【
図13】
図12のフローチャートにおけるステップS108内の処理の詳細を示すシーケンス図である。
【
図14】
図12のフローチャートにおけるステップS113内の処理の詳細を示すシーケンス図である。
【
図15】実施例2のクロスリード動作において、選択された多機能インタフェースが圧縮データの伸長を行う場合のデータの流れを示す。
【
図16】ホストからのリード要求に応じたストレージシステムのリード動作例を示すフローチャートである。
【
図17】
図16のフローチャートにおけるステップS131の詳細を示すフローチャートである。
【
図18】
図16のフローチャートのステップS131において自コントローラ側の多機能インタフェースが選択された場合の、ステップS132内の処理の詳細を示すシーケンス図である。
【発明を実施するための形態】
【0009】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【実施例0010】
図1は、実施例1の計算機システムの構成の一例を示す図である。計算機システムは、ストレージシステム100、ドライブボックス101、及びホスト104を含む。ホスト104は、ネットワーク103を介してストレージシステム100と接続される。
【0011】
図1に示す計算機システムの構成は一例であって、これに限定されない。例えば、ストレージシステム100及びドライブボックス101が一体となったストレージシステムでもよい。また、ホスト104とストレージシステム100は、ハードウェア及びソフトウェアにより密結合したハイパーコンバージドシステムを構成してもよい。
【0012】
ネットワーク103は、例えば、SAN(Storage Area Network)、LAN(Local Area Network)、またはWAN(Wide Area Network)である。ネットワーク103の接続方式は無線及び有線のいずれでもよい。
【0013】
ホスト104は、ストレージシステム100が提供する記憶領域にデータを書き込み、また、記憶領域からデータを読み出す計算機である。ホスト104は、図示しない、CPU、メモリ、及びインタフェースを含む。
【0014】
ドライブボックス101は、複数の記憶ドライブ151を収容する装置である。ドライブボックス101は、スイッチ150及び複数の記憶ドライブ151を含む。複数の記憶ドライブ151が、RAIDグループを構成してもよい。ストレージシステム100は、RAIDグループ上に、ホスト104に提供する記憶領域としてLU(Logical Unit)を生成してもよい。
【0015】
スイッチ150は、ストレージシステム100のコントローラ120A及び120Bに含まれるCPU130A及び130Bと記憶ドライブ151とを接続する。コントローラ120A及び120Bは、ストレージコントローラ120A及び120Bとも呼ばれる。CPU130A及び130Bは演算装置である。コントローラ120A及び120Bは、スイッチ150を介して、記憶ドライブ151にアクセス可能である。実施例1では、CPU130A及び130Bとスイッチ150とは、PCIeバスを介して接続される。また、記憶ドライブ151とスイッチ150とは、PCIeバスを介して接続される。
【0016】
スイッチ150は、記憶ドライブ151と接続する複数のポートを含む。スイッチ150はPCIeバスのポート数を拡張する。スイッチ150が省略され、記憶ドライブ151がCPU130A及び130Bと直接接続されてもよい。
【0017】
記憶ドライブ151は、ホスト104が使用する記憶領域を提供する装置である。実施例1の記憶ドライブ151は、典型的にはPCIeバスを介してCPUと通信を行い、NVMeのプロトコルに準拠した処理を行うNVMeドライブである。なお、記憶ドライブ151にはSATAドライブ等が含まれてもよい。
【0018】
例えば、可用性が高いデュアルポートNVMeSSDを記憶ドライブ151として使用することができる。なお、記憶ドライブ151のプロトコルや通信路を限定するものでなく、記憶ドライブ151がPCIeバス以外の通信路で、複数のノード110のメモリの読み書きが可能であれば、Ethernet等の通信路であってもよい。
【0019】
ストレージシステム100は、ホスト104に記憶領域を提供する。ストレージシステム100は、複数のノード110を含むことができ、また、ドライブボックス101と接続する。
図1は、例として、一つのノード110を示す。ノード110は、ストレージシステム100の制御を行う装置であって、コントローラA(120A)、コントローラB(120B)を含む。
【0020】
以下において、コントローラAをコントローラ120A、コントローラBをコントローラ120Bと記す。
図1の構成例においては、二つのコントローラ120A、120Bがストレージシステム100に含まれている。コントローラの数は、3以上でもよい。
【0021】
コントローラ120Aは、CPU130A、メモリ131A、コントローラ間の多機能インタフェース(インタフェース回路)132A、及びホストインタフェース133Aを含む。コントローラ120Bは、CPU130B、メモリ131B、コントローラ間の多機能インタフェース(インタフェース回路)132B、及びホストインタフェース133Bを含む。
【0022】
以下において、コントローラ120Aについて説明を行うが、同様の説明がコントローラ120Bに対して適用可能である。
図2は、CPU130Aの構成例を示す。CPU130Aは、各種演算を行うプロセッサである。CPU130Aは、内部バスを介して互いに通信する、コア141、メモリコントローラ142及びバスコントローラ143を含む。本例において、バスコントローラは、PCIeコントローラである。
図2の構成例において、複数のコア141が実装されている。CPU130Aの構成要素それぞれの数は任意である。
【0023】
CPU130Aは、メモリ131Aに格納されるプログラムを実行する。CPU130Aがプログラムに従って処理を実行することによって、特定の機能を実現する機能部として動作する。
【0024】
コア141は、演算処理を実行するハードウェアである。メモリコントローラ142は、CPU130Aとメモリ131Aとの通信を制御する。PCIeコントローラ143は、ルートコンプレックスであって、PCIeバスを介してCPU130Aと接続されるデバイスとの通信を制御する。PCIeコントローラ143のポートには、ホストインタフェース133A、多機能インタフェース132A、及びスイッチ150が接続される。
【0025】
図1に戻って、メモリ131Aは、DRAM(Dynamic Random Access Memory)等の揮発性の記憶素子、並びに、NAND Flash、STT-RAM(Spin Transfer Torque Random Access Memory)及びPCM(Phase-change memory)等の不揮発性の記憶素子の少なくともいずれかから構成される記憶装置である。メモリ131Aには、CPU130Aが実行するプログラム及び各種情報を格納する記憶領域、及びホストデータ(ホストデータ)を一時的に格納する記憶領域が設定される。
【0026】
多機能インタフェース132Aは、コントローラ間の通信のインタフェースである。多機能インタフェース132Aは、PCIeバスを介して、他のコントローラと接続する。後述するように、多機能インタフェース132Aは、コントローラ120A及び120Bのメモリ131A及び131Bに直接アクセスする機能及びホストデータを圧縮及び伸長する機能を含む。
【0027】
ホストインタフェース133Aは、ホスト104と接続するためのインタフェースである。ホストインタフェース133Aは、Ethernetアダプタ(Ethernetは登録商標)、InfiniBand、Host Busアダプタ、及びPCI Expressブリッジ等である。
【0028】
図1の構成例において、二つのコントローラ120A、120Bそれぞれが、多機能インタフェース132A、132Bを含む。多機能インタフェース132A、132Bの一方のみが実装されていてもよい。
【0029】
図3は、多機能インタフェース132A、132Bの構成例を模式的に示す。多機能インタフェース132Aは、圧縮伸長演算部321A、スイッチ322A、DMA(Direct Memory Access)コントローラ324A、及びメモリ325Aを含む。多機能インタフェース132Bは、圧縮伸長演算部321B、スイッチ322B、DMA(Direct Memory Access)コントローラ324B、及びメモリ325Bを含む。
【0030】
スイッチ322Aは、多機能インタフェース132A内の他の構成要素、つまり、圧縮伸長演算部321A、DMAコントローラ324A及びメモリ325Aに接続されている。また、スイッチ322Aは、それが含まれるコントローラ120A内のCPU130Aに接続されており、さらに、他の多機能インタフェース132Bのスイッチ322Bに接続されている。
【0031】
スイッチ322Bは、多機能インタフェース132B内の他の構成要素、つまり、圧縮伸長演算部321B、DMAコントローラ324B及びメモリ325Bに接続されている。また、スイッチ322Bは、それが含まれるコントローラ120B内のCPU130Bに接続されており、さらに、他の多機能インタフェース132Aのスイッチ322Aに接続されている。
【0032】
異なるコントローラ120A、120BのCPU130A、130B及び二つの多機能インタフェース132A、132B内の構成要素は、スイッチ322A及び/又は322Bを介して通信することができる。スイッチ322A、322Bは、本例において、PCIeスイッチである。
【0033】
図3の構成例において、複数の圧縮伸長演算部321A及び複数の圧縮伸長演算部321Bが実装され、圧縮処理又は伸長処理を並列に実行することができる。また、冗長化により、多機能インタフェース132A、132Bの稼働を継続できる。なお、圧縮伸長演算部323A又は323Bの実装数は一つでもよい。
【0034】
圧縮伸長演算部323A及び323Bは、ホスト104から受信したホストデータの圧縮及び記憶ドライブ151から読み出された圧縮データの伸長処理を行う。圧縮伸長演算部323A及び323Bは、任意の圧縮アルゴリズムを使用することができる。ホストデータの異なる属性に対して異なる圧縮アルゴリズムが提供されてもよい。圧縮データ及び伸長データは、メモリ325A又は325Bに一時的に格納される。メモリ325A及び325Bは、例えばSRMA又はDRAMであってよい。
【0035】
DMAコントローラ324Aは、スイッチ322A又はスイッチ322A及びスイッチ322Bを介して、二つのコントローラ120A、120Bのメモリ131A又は131Bにアクセスして、メモリ131A、131B間でデータを転送する。同様に、DMAコントローラ32BAは、スイッチ322B又はスイッチ322B及びスイッチ322Aを介して、メモリ131B又は131Aにアクセスして、メモリ131A、131B間でデータを転送する。つまり、DMAコントローラ324A、324Bは、CPU130A及び130Bのコアの介在なく、二つのコントローラ120A、120Aのメモリ131A、131B間でデータを転送する。
【0036】
図4は、ストレージシステム100内で定義されるボリューム間のマッピングの例を示す。ストレージシステム100は、非圧縮ボリューム310及び圧縮ボリューム320を管理する。非圧縮ボリューム310は、ホスト104に提供され、ホスト104からのアクセスを受け付ける。
【0037】
非圧縮ボリューム310に対して、アドレス空間(LBA0空間)301が定義される。LBAは、Logical Block Adressを表す。ホスト104は、非圧縮ボリューム310及びアドレス空間301におけるアドレスを指定して、ストレージシステム100へのホストデータの書き込み及び読み出しを行う。ホスト104から受信されるホストデータ及びホスト104に返すホストデータは、非圧縮の平文データ500である。平文データ500は、非圧縮ボリューム310に格納され、ホスト104に指定されたアドレス空間301におけるホスト104に指定されたアドレスが割り当てられる。
【0038】
図4の構成例において、平文データ500は、圧縮伸長演算部321A又は321Bにより圧縮されて、圧縮データ502に変換される。圧縮データ502は、1又は複数の記憶ドライブ151の媒体に格納される。
【0039】
圧縮ボリューム320は、記憶ドライブ151に格納される圧縮データ502を管理するために使用される。圧縮ボリューム320に対して、アドレス空間(LBA1空間)302が定義される。圧縮データ502は、圧縮ボリューム320に格納され、アドレス空間302のアドレスが割り当てられる。圧縮ボリューム320のアドレスと、非圧縮ボリューム310のアドレスとの間のマッピングは、ボリューム間マッピング管理情報400によって管理されている。
【0040】
図4の構成例において、複数の記憶ドライブ151がパリティグループ155を構成し、パリティグループ155のアドレスと圧縮ボリューム320のアドレスとは、不図示のマッピング管理情報により管理される。
【0041】
パリティグループは、RAID(Redundant Arrays of Independent Disks)グループとも呼ばれる。パリティグループは、ホストデータに加えて、ホストデータから生成された冗長データを格納する。ホストデータ及び冗長データは複数の記憶ドライブ151に分散して格納することで、ホストデータを格納するいずれかの記憶ドライブ151が故障しても、ホストデータを復元することができる。
【0042】
ホスト104が、パリティグループ155に格納されている圧縮データ502を読み出す処理の流れの例を説明する。ホスト104は、非圧縮ボリューム310のアドレスを指定して、平文データ500のリード要求をストレージシステム100に送信する。ストレージシステム100は、ボリューム間マッピング管理情報400を参照して、指定されたアドレスに対応する圧縮ボリューム320のアドレスを特定する。
【0043】
ストレージシステム100は、圧縮ボリューム320の特定されたアドレスの圧縮データ502をパリティグループ155から読み出し、メモリ131A又は131Bに格納する。圧縮伸長演算部321A又は321Bは、圧縮データ502を伸長し、平文データ500に変換する。平文データ500は、メモリ131A又は131Bに格納される。ストレージシステム100は、読み出された平文データ500を、ホスト104に返す。
【0044】
図5は、パリティグループ155(複数の記憶ドライブ151)が与える物理アドレス空間(PBA空間)300、圧縮ボリューム320のアドレス空間302、及び非圧縮ボリューム310のアドレス空間301の関係を示す概略図である。
図5は、例えば、圧縮データ502及び平文データ500のアドレスを示す。
【0045】
PBA空間300における圧縮データ502の開始アドレス及び終了アドレスが、圧縮ボリューム320のアドレス空間302における圧縮データ502の開始アドレス及び終了アドレスに、それぞれ対応付けられる。圧縮ボリューム320のアドレス空間302における圧縮データ502の開始アドレス及び終了アドレスは、非圧縮ボリューム310のアドレス空間301の平文データ500の開始アドレス及び終了アドレスに、それぞれ対応付けられる。上述のように、圧縮ボリューム320のアドレス空間302と非圧縮ボリューム310のアドレス空間301との間のマッピングは、ボリューム間マッピング管理情報400により管理される。
【0046】
図6は、ストレージシステム100のコントローラ120Aにおける、メモリマップの概略図を示す。同様の説明は、コントローラ120Bに対して適用される。
図6は、コントローラ120Aが管理するメモリの物理アドレス空間を示す図である。物理アドレス空間は、DRAM空間201、予約空間202、及びMMIO空間203を含む。
【0047】
予約空間202は、アクセスできないアドレス空間である。MMIO空間203は、IOデバイスにアクセスするために使用されるアドレス空間である。コントローラ120Aは、記憶ドライブ151からの予約空間202及びMMIO空間203へのアクセス(書込み)を禁止するように管理する。
【0048】
DRAM空間201は、メモリ131Aにアクセスするために使用されるアドレス空間である。DRAM空間201は、メモリ131Aのコントロールデータ領域211、バッファ領域212、及びキャッシュ領域213がマップされたアドレス空間を含む。
【0049】
コントロールデータ領域211は、ストレージシステム100を制御するためのプログラム及び情報を格納する記憶領域である。コントロールデータ領域211には、制御プログラム221及び制御情報222が格納される。
【0050】
制御プログラム221は、ストレージシステム100の制御機能(ストレージ制御部)を実現するプログラムである。制御情報222は、ストレージシステム100を制御するための情報である。制御情報222は、例えば、キャッシュディレクトリ、バッファデータ(一時データ)231を管理するためのデータ、キャッシュデータ241を管理するためのデータ、各種デバイスを制御するためのコマンド、及びコントローラ120A、120B間で共有されるデータ等を含む。また、制御情報222は、RAID構成を管理するためのデータ、ホスト104に提供する記憶領域と記憶ドライブ151との対応関係を管理するための情報を含む。
【0051】
キャッシュディレクトリは、例えば、サイズが64kBであるセグメントと呼ばれる単位で管理される。具体的には、セグメントの状態、LRU情報、MRU情報、ダーティ状態又はクリーン状態のいずれであるかを示すビットマップ、メモリ131Aの物理アドレス等のリストとして管理される。
【0052】
バッファ領域212は、バッファデータ231を格納する記憶領域である。バッファデータ231は、IO処理が完了した後に破棄される。コントローラ120Aは、記憶ドライブ151からのバッファ領域212へのアクセス(書込み)を許可するように管理する。
【0053】
キャッシュ領域213は、キャッシュデータ241を格納する記憶領域である。キャッシュデータ241には、ダーティ状態のキャッシュデータ241と、クリーン状態のキャッシュデータ241とが存在する。
【0054】
ダーティ状態のキャッシュデータ241は、メモリ131にのみ存在するデータである。クリーン状態のキャッシュデータ241は、記憶ドライブ151にデステージされたデータである。ダーティ状態のキャッシュデータ241は、記憶ドライブ151にデステージされた場合、クリーン状態のキャッシュデータ241として管理される。
【0055】
ストレージシステム100のコントローラに障害が発生した場合、クリーン状態のキャッシュデータ241は、記憶ドライブ151から読み出すことによって復元できるが、ダーティ状態のキャッシュデータ241を障害が発生したコントローラから復元することは困難である。したがって、ダーティ状態のキャッシュデータ241は、複数のコントローラ120間で冗長化されている。ダーティ状態のキャッシュデータ241は、記憶ドライブ151にデステージされた後、冗長化構成を解除し、ダーティ状態からクリーン状態に遷移させることができる。
【0056】
図7は、CPU130A、130Bから、多機能インタフェース132A、132Bに対する指示のフォーマット例を示す。CPU130A、130Bは、それぞれ、多機能インタフェース132A、132Bのいずれに対しても指示を送信することができる。コマンド530は、複数の指示項目の内容を示す。
図7は、コマンド530に含まれる指示項目の例を示すものであって、他の項目が含まれてもよく、一部の項目が省略されてもよい。
【0057】
コマンドID533は、コマンド530を識別するIDを示す。処理指示内容534は、多機能インタフェースに対して指示する処理の内容を示す。指示される処理の例は、データの圧縮、伸長、転送方法等である。
【0058】
転送元開始アドレス535は、転送する対象データが格納されているメモリ内の開始アドレスを示す。転送先開始アドレス0(536)は、対象データの転送先のメモリ内の開始アドレスを示す。転送先開始アドレス1(537)は、対象データの転送先のメモリ内の開始アドレスを示す。コマンド530は、転送先開始アドレス0(536)、転送先開始アドレス1(537)によって、二つの転送先を指定することができる。これにより、対象データが冗長化される。一つの転送先のみが指定されてもよい。転送長538は、転送元メモリ内での、対象データのデータ長を示す。
【0059】
圧縮アルゴリズム種別539は、対象データの圧縮アルゴリズムを指定する。圧縮アルゴリズムは、例えば、対象データの属性に応じて選択されてもよい。圧縮データ保証コードIDチェック指示540は、圧縮データ保証コードIDのチェックの要否を示す。圧縮データ保証コードIDの期待値541は、圧縮データ保証コードIDの期待値を示す。伸長データ保証コードID付与指示542は、伸長されたデータに対する保証コードIDの付与の要否を示す。伸長データ保証コードIDの種543は、伸長データ保証コードIDを生成するためのデータを示す。
【0060】
図8は、多機能インタフェース132A、132Bから、CPU130A、130Bに対する応答のフォーマット例を示す。CPUからコマンド530を受けた多機能インタフェースは、指示処理の結果を示す応答550を、指示元のCPUに返す。応答550は、複数の応答項目の内容を示す。
図8は、応答550に含まれる応答項目の例を示すものであって、他の項目が含まれてもよく、一部の項目が省略されてもよい。
【0061】
コマンドID553は、応答550が対応するコマンド530のコマンドIDを示す。ステータス554は、コマンド530によって指示された処理の実行結果である状態を示す。ステータス554は、例えば、正常に処理を完了したことや、処理において発生したエラー等を示してもよい。
【0062】
以下において、ホスト104からのリード要求に応じた、ストレージシステム100のリード動作を説明する。ホスト104からのリード要求に応じた2種類のリード動作がある。一つはストレートリード動作であり、もう一つはクロスリード動作である。ストレートリード動作は、ホスト104からリード要求を受けたコントローラ内で完結する。クロス動作は、通常のストレート動作に加え、コントローラ間データ転送が発生する。
【0063】
本明細書の実施形態において、多機能インタフェース132、132Bは、コントローラ120A、120Bのメモリ131A、131B間のデータ転送に加えて、データ伸長及び圧縮処理を行う。これにより、クロスリード動作の性能を向上することができる。
【0064】
図9は、ストレートリード動作におけるホストデータの流れを示す。
図9に示すストレートリード動作の例において、コントローラ120Aは、ホスト104からリード要求を受け取る。また、コントローラ120Aは、リード要求先の非圧縮ボリューム310のオーナ権を有している。オーナ権を有するコントローラが、非圧縮ボリューム310に対応する圧縮ボリューム320を管理し、圧縮データの記憶ドライブ151への書き込み及び読み出しを行う。
【0065】
コントローラ120AのCPU130Aは、ホストインタフェース133Aを介して、ホスト104から非圧縮ボリューム310に対するリード要求を受信する。CPU130Aは、ボリューム間マッピング管理情報400を参照して、リード要求が指定するアドレスに対応する、圧縮ボリューム320のアドレスを決定する。
【0066】
CPU130Aは、圧縮ボリューム320のアドレスに対応する記憶ドライブ151のアドレスから、圧縮データ502を、スイッチ150を介して読み出し、メモリ131Aのバッファ領域212に格納する。圧縮データ502は、CPU130AのPCIeコントローラ143及びメモリコントローラ142を介して、記憶ドライブ151からメモリ131Aに転送される(T100)。圧縮データ502をバッファ領域に格納することでメモリの利用効率を高めることができる。
【0067】
次に、CPU130Aは、多機能インタフェース132Aに対して、圧縮データ502の伸長を指示する。コマンド530は、圧縮データ502が格納されているアドレスと、伸長された平文データ500を格納するキャッシュ領域213のアドレスを指定する。コマンド530は、コントロールデータ領域211を介して送受信される。
【0068】
多機能インタフェース132Aは、メモリ131Aから圧縮データ502を読み出し、伸長処理を行って平文データ500に変換する。多機能インタフェース132Aは、平文データ500を、メモリ131Aの指定されたアドレスに転送する。このように、圧縮データ502がメモリ131Aから多機能インタフェース132Aに転送され、さらに、平文データ500が多機能インタフェース132Aからメモリ131Aに転送される(T101)。多機能インタフェース132Aを利用することで、ストレージシステム内のデータ転送量を低減することができる。
【0069】
具体的には、多機能インタフェース132AのDMAコントローラ324Aは、多機能インタフェース132Aのスイッチ322A並びにCPU130AのPCIeコントローラ143及びメモリコントローラ142を介して、メモリ131Aから指定された圧縮データ502を読み出す。圧縮データ502は、多機能インタフェース132Aのメモリ325Aに格納される。
【0070】
圧縮伸長演算部321Aは、メモリ325A内の圧縮データを伸長して平文データ500を生成し、メモリ325Aに格納する。DMAコントローラ324Aは、スイッチ322A並びにPCIeコントローラ143及びメモリコントローラ142を介して、平文データ500を131Aの指定されたアドレスに書き込む。多機能インタフェース132Aは、コマンド530に対する応答550を、コントロールデータ領域211を介してCPU130Aに返す。
【0071】
応答550を受信したCPU130Aは、キャッシュ領域213に格納されている平文データ500を読み出す。CPU130Aは、ホストインタフェース133Aを介して、平文データ500をホスト104に返す。
【0072】
図10は、クロスリード動作におけるホストデータの流れを示す。
図10に示すクロスリード動作の例において、コントローラ120Aは、ホスト104からリード要求を受け取り、ホストデータをホスト104に返す。コントローラ120Bは、リード要求先の非圧縮ボリューム310のオーナ権を有している。オーナ権を有するコントローラ120Bは、非圧縮ボリューム310に対応する圧縮ボリューム320を管理し、圧縮データの記憶ドライブ151への書き込み及び読み出しを行う。
【0073】
コントローラ120AのCPU130Aは、ホストインタフェース133Aを介して、ホスト104から非圧縮ボリューム310に対するリード要求を受信する。CPU130Aは、受信したリード要求を、多機能インタフェース132A、132Bを介して、コントローラ120BのCPU130Bに転送する。
【0074】
CPU130Bは、ボリューム間マッピング管理情報400を参照して、リード要求が指定するアドレスに対応する、圧縮ボリューム320のアドレスを決定する。CPU130Bは、圧縮ボリューム320のアドレスに対応する記憶ドライブ151のアドレスから、圧縮データ502を、スイッチ150を介して読み出し、メモリ131Bのバッファ領域212に格納する。圧縮データ502は、CPU130BのPCIeコントローラ143及びメモリコントローラ142を介して、記憶ドライブ151からメモリ131Bに転送される(T100)。
【0075】
次に、CPU130Bは、多機能インタフェース132Bに対して、圧縮データ502の伸長を指示する。コマンド530は、圧縮データ502が格納されているメモリ131B内のアドレスと、伸長された平文データ500を格納するメモリ131A内のキャッシュ領域213のアドレスを指定する。
【0076】
多機能インタフェース132Bは、メモリ131Bから圧縮データ502を読み出し、伸長処理を行って平文データ500に変換する。多機能インタフェース132Bは、平文データ500を、メモリ131Aの指定されたアドレスに転送する。このように、圧縮データ502がメモリ131Bから多機能インタフェース132Bに転送され、さらに、平文データ500が多機能インタフェース132Bからメモリ131Aに転送される(T101)。
【0077】
図11は、
図10に示すデータの流れT101の詳細を示す。多機能インタフェース132BのDMAコントローラ324Bは、多機能インタフェース132Bのスイッチ322B、並びに、CPU130BのPCIeコントローラ143及びメモリコントローラ142を介して、メモリ131Bから指定された圧縮データ502を読み出す。圧縮データ502は、多機能インタフェース132Bのメモリ325Bに格納される。
【0078】
圧縮伸長演算部321Bは、メモリ325B内の圧縮データを伸長して平文データ500を生成し、メモリ325Bに格納する。DMAコントローラ324Bは、スイッチ322B、多機能インタフェース132Aのスイッチ322A、並びにCPU130AのPCIeコントローラ143及びメモリコントローラ142を介して、平文データ500を131Aの指定されたアドレスに書き込む。多機能インタフェース132Bは、コマンド530に対する応答550を、CPU130Bに返す。
【0079】
図10に戻って、応答550を受信したCPU130Bは、CPU130Aに対して、転送されたリード要求に対する応答を返す。応答を受信したCPU130Aは、メモリ131Aのキャッシュ領域213に格納されている平文データ500を読み出す。CPU130Aは、ホストインタフェース133Aを介して、平文データ500をホスト104に返す。
【0080】
上述のように、多機能インタフェース132A、132Bは、コントローラ間パスの経路上に、設置されている。多機能インタフェース132A、132Bは、コントローラ間接続インタフェースであるスイッチ322A、322Bに加えて、圧縮伸長演算部321A、321B及びDMAコントローラ324A、324Bを搭載している。これにより、クロスリード動作におけるメモリアクセス量を低減することができる。また、コントローラ間パスのDMAコントローラがデータ転送を行うことで、PCIe to Memory転送によりデータ転送処理を伸長処理と共に実現でき、Peer to Peer転送の制約を避けることができる。
【0081】
図12は、ホスト104からのリード要求に応じたストレージシステム100のリード動作例を示すフローチャートである。コントローラ120Aがホスト104からリード要求を受信したものとする。コントローラ120Aは、ホスト104からリード要求を受信する(S101)。
【0082】
CPU130Aは、リード要求により指定されたホストデータのヒットミス判定を行う(S102)。つまり、CPU130Aは、ホストデータが、メモリ131A又はメモリ131Bのキャッシュ領域213に格納されているか判定する。メモリ131A及び131Bの制御情報222は、メモリ131A及び131B双方のキャッシュ領域213の管理情報を含む。
【0083】
指定されたホストデータが、メモリ131A及び131Bいずれかのキャッシュ領域213に格納されている場合(S103:NO)、CPU130Aは、キャッシュ領域213に格納されているキャッシュデータを、ホスト104に応答する(S114)。ホストデータが、メモリ131Aに格納されている場合、CPU130Aは、メモリ131Aからホストデータを読み出して、ホスト104に返す。
【0084】
ホストデータが、メモリ131Bに格納されている場合、CPU130Aは、CPU130Bに対して、ホストデータの転送を指示する。CPU130Bは、多機能インタフェース132Bに対して、メモリ131Bのホストデータをメモリ131Aに転送することを指示する。多機能インタフェース132BのDMAコントローラ324Bは、メモリ131Bのホストデータをメモリ131Aに転送する。ホストデータの転送は、多機能インタフェース132Aが実行してもよい。CPU130Aは、メモリ131Aからホストデータを読み出して、ホスト104に返す。
【0085】
指定されたホストデータが、いずれのキャッシュ領域にも格納されていない場合(S103:YES)、CPU130Aは、指定された非圧縮ボリュームのオーナ件を有するコントローラを判定する(S104)。
【0086】
コントローラ120Aがオーナ件を有する場合(S104:YES)、CPU130Aは、メモリ131Aのバッファ領域212に、指定された圧縮データを格納するための領域を予約する(S105)。さらに、CPU130Aは、記憶ドライブ151に対して、メモリ131Aのバッファ領域212の予約した領域に圧縮データを格納する(圧縮データステージング)ことを要求する(S106)。
【0087】
次に、CPU130Aは、メモリ131Aのキャッシュ領域213に、平文データを格納するための領域を予約する(S107)。CPU130Aは、多機能インタフェース132Aに、圧縮データが格納されているバッファ領域212のアドレス及び伸長データを格納するキャッシュ領域213のアドレスを指定して、圧縮データの伸長を指示する(S108)。
【0088】
多機能インタフェース132AのDMAコントローラ324Aは、バッファ領域212から圧縮データ読み出し、圧縮伸長演算部321Aは圧縮データを伸長して平文データを生成する。DMAコントローラ324Aは、キャッシュ領域213の指定されたアドレスに、平文データを転送する。CPU130Aは、キャッシュ領域213に格納されている平文データを、ホスト104に応答する(S114)。
【0089】
ステップS104において、ホスト104から指定された非圧縮ボリュームのオーナ件が、コントローラ120Aと異なるコントローラ、本例においてコントローラ120により保持されている場合、フローはS109に進む。
【0090】
ステップS109において、CPU130Aは、コントローラ120BのCPU130Bに、ホスト104から受信したリード要求を転送して、ホストデータ(平文データ)を転送することを指示する。
【0091】
CPU130Bは、圧縮データを格納するための領域を、コントローラ120Bのメモリ131Bのバッファ領域212に予約する(S110)。さらに、CPU130Bは、記憶ドライブ151に対して、メモリ131Bのバッファ領域212の予約した領域に圧縮データを格納する(圧縮データステージング)ことを要求する(S111)。
【0092】
CPU130Bは、CPU130Aに対して、平文データの転送先アドレスの通知を依頼する。CPU130Aは、平文データを格納するための領域を、コントローラ120Aのメモリ131Aのキャッシュ領域213に予約する(S112)。予約された領域のアドレスが、平文データの転送先アドレスとして、CPU130AからCPU130Bに通知される。
【0093】
CPU130Bは、コントローラ120Bの多機能インタフェース132Bに、圧縮データが格納されているメモリ131Bのバッファ領域212のアドレス及び伸長データを格納するメモリ131Aのキャッシュ領域213のアドレスを指定して、圧縮データの伸長を指示する(S113)。CPU130Bが、多機能インタフェース132Bを制御することで、短時間で指示を伝達できることと、多機能インタフェース132Aによるスイッチ322Bを跨いだメモリリードを回避することでコントローラ間の障害伝搬を抑止する効果を期待する。
【0094】
多機能インタフェース132BのDMAコントローラ324Bは、メモリ131Bのバッファ領域212から圧縮データ読み出し、圧縮伸長演算部321Bは圧縮データを伸長して平文データを生成する。DMAコントローラ324Bは、メモリ131Aのキャッシュ領域213の指定されたアドレスに、平文データを転送する。CPU130Aは、メモリ131Aのキャッシュ領域213に格納されている平文データを、ホスト104に応答する(S114)。
【0095】
図13は、
図12のフローチャートにおけるステップS108内の処理の詳細を示すシーケンス図である。ステップS201において、CPU130Aは、メモリ131Aのコントロールデータ領域211に、多機能インタフェース132Aの圧縮伸長演算部321Aに処理を指示するためのコマンドを作成する。
【0096】
ステップS202において、CPU130Aは、多機能インタフェース132Aのレジスタを操作して、メモリ131A上に作成したコマンドの読み取りを指示する。具体的には、CPU130Aは、多機能インタフェース132Aのレジスタに、コマンドが格納されているメモリアドレスと実行させたいコマンド数を格納し、レジスタキックする。
【0097】
ステップS203において、指示を受けた多機能インタフェース132Aは、DMAコントローラ324Aによって、メモリ131Aのコントロールデータ領域211からコマンドを読み取る。ステップS204において、DMAコントローラ324Aは、コマンドの内容に従って、メモリ131Aから圧縮データを読み出し、多機能インタフェース132Aのメモリ325Aに格納する。圧縮伸長演算部321Aは、圧縮データを伸長して平文データを生成し、メモリ325Aに格納する。DMAコントローラ324Aは、平文データを、コマンドに指定されたメモリ131Aのキャッシュ領域213内のアドレスに出力する。
【0098】
ステップS205において、多機能インタフェース132Aは、DMAコントローラ324Aによって、コマンドに対する応答(成功または失敗を示す)を、メモリ131Aのコントロールデータ領域211に出力する。応答を出力する前に、割り込みなどを使ってCPU130Aに通知してもよい。ステップS206において、CPU130Aは、メモリ131Aのコントロールデータ領域211から応答を読み取り、コマンド実行結果を確認する。
【0099】
図14は、
図12のフローチャートにおけるステップS113内の処理の詳細を示すシーケンス図である。ステップS251において、コントローラ120BのCPU130Bは、コントローラ120AのCPU130Aに、伸長データの転送先アドレスの通知を要求するメッセージを、コントローラ120Aのメモリ131Aのコントロールデータ領域211に書き込む。
【0100】
ステップS252において、CPU130Aは、メモリ131Aのコントロールデータ領域211上のメッセージを受領する。ステップS253において、CPU130Aは、伸長データの格納先アドレスを示すメッセージを、コントローラ120Bのメモリ131Bのコントロールデータ領域211に書き込む。ステップS254において、コントローラ120BのCPU130Bは、ポーリングで、メモリ131Bのコントロールデータ領域211上のメッセージを受領する。
【0101】
ステップS255において、CPU130Bは、メモリ131Bのコントロールデータ領域211上に、多機能インタフェース132Bに処理を指示すいるためのコマンドを作成する。
【0102】
ステップS256において、CPU130Bは、多機能インタフェース132Bのレジスタを操作して、メモリ131B上に作成したコマンドを多機能インタフェース132Bに読み取らせる。具体的には、CPU130Bは、多機能インタフェース132Bのレジスタにコマンドが格納されているメモリアドレスと実行させたいコマンド数を格納し、レジスタキックする。
【0103】
ステップS257において、指示を受けた多機能インタフェース132Bは、DMAコントローラ324Bによって、メモリ131Bのコントロールデータ領域211からコマンドを読み取る。ステップS258において、DMAコントローラ324Aは、コマンドの内容に従って、メモリ131Bから圧縮データを読み出し、多機能インタフェース132Bのメモリ325Bに格納する。圧縮伸長演算部321Bは、圧縮データを伸長して平文データを生成し、メモリ325Bに格納する。DMAコントローラ324Bは、平文データを、コマンドに指定されたメモリ131Aのキャッシュ領域213内のアドレスに出力する。
【0104】
ステップS259において、多機能インタフェース132Bは、DMAコントローラ324Bによって、コマンドに対する応答(成功または失敗を示す)を、メモリ131Bのコントロールデータ領域211に出力する。応答を出力する前に、割り込みなどを使ってCPU130Bに通知してもよい。ステップS260において、CPU130Bは、メモリ131Bのコントロールデータ領域211から応答を読み取り、コマンド実行結果を確認する。
【0105】
ステップS261において、CPU130Bは、多機能インタフェース132Bによる伸長後データの転送が完了した内容のメッセージを、コントローラ120Aのメモリ131Aのコントロールデータ領域211にライトして通知する。ステップS262において、コントローラ120AのCPU130Aは、ポーリングでメモリ131上のメッセージを受領する。
以下において、本明細書の他の実施例を説明する。以下において、主に実施例1との相違点を説明する。本実施例は、クロスリード動作において、コントローラの負荷に基づいて伸長処理を実行する多機能インタフェースを選択する。これにより、クロスリード動作における性能を向上できる。
ステップS132において、CPU130Bは、ステップS131で選択された多機能インタフェースに、圧縮データの格納アドレス及び伸長データの格納アドレスを指定して、圧縮データの伸長を指示する。具体的には、圧縮データが格納されているメモリ131Bのバッファ領域212のアドレス及び伸長データを格納するメモリ131Aのキャッシュ領域213のアドレスが指定される。指示を受けた多機能インタフェースが、メモリ131Bから圧縮データを読み出し、伸長により平文データを生成して、メモリ131Aに転送する。
次に、コントローラ120Aが、コントローラ120Bから、コントローラ120Bの負荷情報を受領する(S153)。一例において、CPU130B及び圧縮伸長演算部321Bの負荷情報を取得する。
コントローラ120Aは、コントローラ120Bの圧縮伸長演算部321Bの稼働率が予め設定されている閾値を超えているか判定する(S154)。圧縮伸長演算部321Bの稼働率が閾値を超えている場合(S154:YES)、コントローラ120Aは、多機能インタフェース132Aを使用すると判定する(S157)。
圧縮伸長演算部321Bの稼働率が閾値以下である場合(S154:NO)、コントローラ120Aは、コントローラ120BのCPU130Bの稼働率が予め設定されている閾値を超えているか判定する(S155)。CPU130Bの稼働率が閾値を超えている場合(S155:YES)、コントローラ120Aは、多機能インタフェース132Aを使用すると判定する(S157)。
CPU130Bの稼働率が閾値以下である場合(S155:NO)、コントローラ120Aは、CPU130B内のPCIe流量が予め設定されている閾値を超えているか判定する(S156)。この情報は、CPU130Bのレジスタから取得される。CPU130B内のPCIe流量が閾値を超えている場合(S156:YES)、コントローラ120Aは、多機能インタフェース132Aを使用すると判定する(S157)。
CPU130BB内のPCIe流量が閾値以下である場合(S156:NO)、コントローラ120Aは、多機能インタフェース132Bを使用すると判定する(S158)。上記処理により、ホスト104からのリード要求に対する処理の負荷をよりて適切に動的に分散することができる。
ステップS271において、コントローラ120AのCPU130Aは、コントローラ120Bのメモリ131Bにメッセージをライトして、CPU130Bに伸長前データの転送先アドレスを通知するよう依頼する。
ステップS272において、コントローラ120BのCPU130Bは、ポーリングによってメモリ131B上のメッセージを受領する。ステップS273において、CPU130Bは、コントローラ120Aのメモリ131Aにメッセージをライトして、伸長前データの格納先アドレスを通知する。
ステップS274において、コントローラ120AのCPU130Aは、ポーリングでメモリ131A上のメッセージを受領する。ステップS275において、CPU130Aは、メモリ131A上に、多機能インタフェース132Aの圧縮伸長演算部321Aの処理を指示するためのコマンドを作成する。
ステップS276において、CPU130Aは、多機能インタフェース132Aのレジスタを操作して、メモリ131A上に作成したコマンドの読みとりを指示する。具体的には、CPU130Aは、多機能インタフェース132Aのレジスタに、コマンドが格納されているメモリアドレスと実行させたいコマンド数を格納し、レジスタキックする。ステップS277において、指示を受けた多機能インタフェース132Aは、メモリ131A上のコマンドを読み取る。
ステップS278において、多機能インタフェース132Aは、コマンドに従って、コントローラ120Bのメモリ131Bから伸長前データを読み出し、伸長後データをコントローラ120Aのメモリ131Aに出力する。
ステップS279において、多機能インタフェース132Aは、処理結果(成功または失敗)を、コントローラ120Aのメモリ131A上に出力する。メモリ131Aに出力する前に割り込みなどを使ってCPUに通知してもよい。
ステップS280において、コントローラ120AのCPU130Aは、メモリ131A上の出力結果を読み取り、コマンド実行結果を確認する。ステップS281において、CPU130Aは、多機能インタフェース132Aによる伸長前データの転送が完了した内容のメッセージをコントローラ120Bのメモリ131Bにライトして、通知する。ステップS282において、コントローラ120BのCPU130Bは、ポーリングによってメモリ131B上のメッセージを受領する。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Python、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。