(57)【要約】  ネットワークにより通信する複数の計算機ノードを含む計算機システムであって、前記複数の計算機ノードそれぞれは、ローカルストレージと１以上の仮想マシンを含み、前記複数の計算機ノードそれぞれは、そのローカルストレージに対するライトデータを、冗長化のために１又は複数の他の計算機ノードに転送し、前記計算機システムに含まれる計算機は、第１の仮想マシンによるライト負荷量を示す情報を取得し、前記複数の計算機ノードにおける配置先候補のローカルストレージの残ライト可能量を示す取得し、前記第１の仮想マシンのライト負荷量と、前記配置先候補の計算機ノードの前記残ライト可能量と、に基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する。
2018029820.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークにより通信する複数の計算機ノードを含む計算機システムであって、
前記複数の計算機ノードそれぞれは、ローカルストレージと１以上の仮想マシンを含み、
前記複数の計算機ノードそれぞれは、そのローカルストレージに対するライトデータを、冗長化のために１又は複数の他の計算機ノードに転送し、
前記計算機システムに含まれる計算機は、
第１の仮想マシンによるライト負荷量を示す情報を取得し、
前記複数の計算機ノードにおける配置先候補のローカルストレージの残ライト可能量を示す取得し、
前記第１の仮想マシンのライト負荷量と、前記配置先候補の計算機ノードの前記残ライト可能量と、に基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する、計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記計算機は、前記配置先候補の計算機ノードの空き容量と前記第１の仮想マシンのイメージデータサイズとに基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する、計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記計算機は、前記配置先候補の計算機ノードに前記第１の仮想マシンを配置した場合に、冗長化のためのデータ転送による前記１以上の他の計算機ノードそれぞれのライト負荷量の増加量と、前記１以上の他の計算機ノードそれぞれの残ライト可能量と、に基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する、計算機システム。
【請求項４】
請求項１に記載の計算機システムであって、
前記第１の仮想マシンは、前記複数の計算機ノードに含まれる第１の計算機ノード上で動作しており、
前記計算機は前記第１の計算機ノードであり、
前記第１の計算機ノードは、そのローカルストレージの残ライト可能量と、その実行している仮想マシンのライト負荷量と、に基づき、前記第１の仮想マシンの移行の有無を決定する、計算機システム。
【請求項５】
請求項１に記載の計算機システムであって、
前記複数の計算機ノードは、第１の計算機ノードと第２の計算機ノードとを含み、
前記第１の計算機ノードは、
前記第２の計算機ノードに転送済みのデータを管理する管理情報を保持し、
前記管理情報を参照して、前記第２の計算機ノードに転送すべき第１データと同一データを、前記第２の計算機ノードに転送済みであるか判定し、
前記第１の計算機ノードが前記同一データを転送済みである場合、前記第１の計算機ノードは、前記第１データのメタデータのみを前記第２の計算機ノードに送信する、計算機システム。
【請求項６】
請求項５に記載の計算機システムであって、
前記管理情報は、前記第１の計算機ノードのローカルストレージに格納されるデータの転送データと、前記第１の計算機ノードの仮想マシンと前記第２の計算機ノードの仮想マシンとの間で転送されたデータと、を管理する、計算機システム。
【請求項７】
請求項５に記載の計算機システムであって、
前記メタデータは、前記第１データのハッシュ値を示す、計算機システム。
【請求項８】
ネットワークにより通信する複数の計算機ノードを含む計算機システムを制御する方法であって、
前記複数の計算機ノードそれぞれは、ローカルストレージと１以上の仮想マシンを含み、
前記複数の計算機ノードそれぞれは、そのローカルストレージに対するライトデータを、冗長化のために１又は複数の他の計算機ノードに転送し、
前記方法は、
第１の仮想マシンによるライト負荷量の情報を取得し、
前記複数の計算機ノードにおける配置先候補の計算機ノードから、そのローカルストレージの残ライト可能量の情報を取得し、
前記第１の仮想マシンのライト負荷量と、前記配置先候補の計算機ノードの残ライト可能量と、に基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する、ことを含む方法。
【請求項９】
請求項８に記載の方法であって、
前記配置先候補の計算機ノードの空き容量と前記第１の仮想マシンのイメージデータサイズとに基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する、ことを含む方法。
【請求項１０】
請求項８に記載の方法であって、
前記配置先候補の計算機ノードに前記第１の仮想マシンを配置した場合に、冗長化のためのデータ転送による前記１以上の他の計算機ノードそれぞれのライト負荷量の増加量と、前記１以上の他の計算機ノードそれぞれの残ライト可能量と、に基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する、ことを含む方法。
【請求項１１】
請求項８に記載の方法であって、
前記第１の仮想マシンは、前記複数の計算機ノードに含まれる第１の計算機ノード上で動作しており、
前記方法は、
前記第１の計算機ノードのローカルストレージの残ライト可能量と、前記第１の計算機ノードの実行している仮想マシンのライト負荷量と、に基づき、前記第１の仮想マシンの移行の有無を決定する、ことを含む方法。
【請求項１２】
請求項８に記載の方法であって、
前記複数の計算機ノードは、第１の計算機ノードと第２の計算機ノードとを含み、
前記方法は、
前記第１の計算機ノードから前記第２の計算機ノードに転送済みのデータを管理する管理情報を参照して、前記第２の計算機ノードに転送すべき第１データと同一データを、前記第１の計算機ノードから前記第２の計算機ノードに転送済みであるか判定し、
前記同一データを転送済みである場合、前記第１データのメタデータのみを前記第１の計算機ノードから前記第２の計算機ノードに送信する、ことを含む方法。
【請求項１３】
請求項１２に記載の方法であって、
前記管理情報は、前記第１の計算機ノードのローカルストレージに格納されるデータの転送データと、前記第１の計算機ノードの仮想マシンと前記第２の計算機ノードの仮想マシンとの間で転送されたデータと、を管理する、方法。
【請求項１４】
請求項１２に記載の方法であって、
前記メタデータは、前記第１データのハッシュ値を示す、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関する。
【背景技術】
【０００２】
ＳｏＥ（Ｓｙｓｔｅｍｓ  ｏｆ  Ｅｎｇａｇｅｍｅｎｔ）型のＩＴインフラストラクチャに対するニーズの拡大により、アジリティ、スケーラビリティ、及びコスト対効果の高いＩＴインフラストラクチャが求められている。【０００３】
例えば、ハイパーコンバージドシステムは、小規模のサーバ構成から開始することができ、大規模スケールまで対応可能である。そのため、プライベートクラウド向け製品として、ハイパーコンバージドシステムの市場が拡大してきている。ハイパーコンバージドシステムは、それぞれがローカルストレージを有する複数のサーバノードを含む。サーバノードは、それぞれ、仮想化機能及びストレージ機能を有し、ネットワークを介して通信を行うことでデータを冗長化する。【０００４】
ハイパーコンバージドシステムは、例えば、米国特許第８６０１４７３号に開示されている。米国特許第８６０１４７３号は、例えば、以下の事項を開示する。「仮想化環境におけるＩ／Ｏとストレージデバイスの管理を実装するための改良されたアプローチが開示されている。いくつかのアプローチによると、サービスＶＭは、ネットワークとクラウドストレージに加えて、直接接続ストレージを含むストレージデバイスのいずれかのタイプを、制御および管理するために使用されます。サービスＶＭは、ユーザ空間でのストレージコントローラロジックを実装し、あるノードから別のノードに、必要に応じて移行することができる。ＩＰベースの要求は、サービスＶＭへのＩ／Ｏ要求を送信するために使用される。サービスＶＭは直接アドオン製品を必要とせずに、直接データアクセスパス内のストレージおよびＩ／Ｏの最適化を実現できる。」（要約）。【０００５】
一方、ＩｏＴやデータ分析のニーズが拡大し、フラッシュドライブを用いるシステムの市場が拡大している。フラッシュドライブは、書き込み回数に依存する寿命をもっている。大容量・低価格化のニーズから、フラッシュドライブのマルチセル化が進み、書き込み回数可能回数は低下している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第８６０１４７３号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
例えば、ハイパーコンバージドシステムのように、仮想化機能を有する複数の計算機ノード間でネットワークを介して互いに通信を行う従来の計算機システムは、使用する記憶ドライブの寿命を考慮していない。【０００８】
そのため、計算機ノード間でライト負荷の偏りや、計算機システム上で動作するアプリケーションプログラムやストレージコントローラプログラムによる、冗長データの書き込みにより、特定の計算機ノードの記憶ドライブの寿命の消費が早くなり得る。
【課題を解決するための手段】
【０００９】
本発明の一例は、ネットワークにより通信する複数の計算機ノードを含む計算機システムであって、前記複数の計算機ノードそれぞれは、ローカルストレージと１以上の仮想マシンを含み、前記複数の計算機ノードそれぞれは、そのローカルストレージに対するライトデータを、冗長化のために１又は複数の他の計算機ノードに転送し、前記計算機システムに含まれる計算機は、第１の仮想マシンによるライト負荷量を示す情報を取得し、前記複数の計算機ノードにおける配置先候補のローカルストレージの残ライト可能量を示す取得し、前記第１の仮想マシンのライト負荷量と、前記配置先候補の計算機ノードの前記残ライト可能量と、に基づき、前記第１の仮想マシンを前記配置先候補の計算機ノードに配置するか決定する。
【発明の効果】
【００１０】
本発明の一態様により、仮想化機能を有する複数の計算機ノード間でネットワークを介して互いに通信を行う計算機システムにおいて、効率的に計算機ノードの記憶ドライブの寿命を延ばすことができる。
【図面の簡単な説明】
【００１１】
【図１】本実施形態に係る計算機システムの概要を示す。
【図２】本実施形態に係る計算機システムの構成例を示す。
【図３】本実施形態に係る計算機ノードのソフトウェア構成例を示す。
【図４Ａ】ストライプマッピングテーブルの構成例を示す。
【図４Ｂ】ＶＭ情報テーブルの構成例を示す。
【図４Ｃ】記憶ドライブ寿命情報テーブルの構成例を示す。
【図４Ｄ】容量管理テーブルの構成例を示す。
【図４Ｅ】ページマッピングテーブルの構成例を示す。
【図５】本実施形態に係るストレージＩ／Ｏ処理（リード）のフローチャートを示す。
【図６】本実施形態に係るストレージＩ／Ｏ処理（Ｆｒｏｎｔ  Ｅｎｄライト）のフローチャートを示す。
【図７】本実施形態に係るストレージＩ／Ｏ処理（Ｂａｃｋ  Ｅｎｄライト）のフローチャートを示す。
【図８】本実施形態に係るＶＭ割り当てプログラムのフローチャートを示す。
【図９】本実施形態に係るＶＭ配置変更プログラムのフローチャートを示す。
【図１０】本実施形態に係るＶＭ移行プログラムのフローチャートを示す。
【図１１】本実施形態に係るネットワークＩ／Ｏ（送信）のフローチャートを示す。
【図１２】本実施形態に係るネットワークＩ／Ｏ（受信）のフローチャートを示す。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【００１３】
図１は、本実施形態に係る計算機システムの概要を示す。計算機システムは、ネットワークを介して通信する複数の計算機ノード１０１を含んで構成されている。図１において、三つの計算機ノード１０１が例示されている。
【００１４】
各計算機ノード１０１は、仮想マシン（ＶＭ）２０１を稼働させるハイパーバイザ２０４を実行する計算機ノード１０１は、さらに、ＶＭ２０１間の通信を受け持つネットワークＩ／Ｏプログラムと、ローカルストレージをスケールアウトストレージにするストレージコントロールプログラム（例えば後述するストレージＩ／Ｏプログラム）を実行する。
【００１５】
ＶＭ２０１は、ハイパーバイザ２０４により構成される仮想的な計算機である。ＶＭ２０１は、ハイパーバイザ２０４上で、ＯＳ（ゲストＯＳ）２０３及びアプリケーションプログラム２０２を実行する。ＶＭ２０１は、ローカルドライブ１１３にライトするこれらプログラムは、計算機ノード１０１で動作するサービスである。ハイパーバイザ２０４に代えて、他の仮想化技術（例えばコンテナ技術）が計算機ノードに適用されてもよい。コンテナ技術は、ＶＭに代えて、コンテナを構成する。
【００１６】
各計算機ノード１０１は、１又は複数の記憶ドライブ１１３を含む。記憶ドライブ１１３はライト量に応じた寿命を有する。プロセッサは、記憶ドライブ１１３から、残ライト可能量の情報を受信する。残ライト可能量は、外部からのライトに対する残ライト可能量である。残ライト可能量は、例えば、単位時間あたりのデータ量（ライトのスループット）又は単位時間あたりのライト回数（ライトのＩＯＰＳ）で表わされる。
【００１７】
ライト可能量は、既存の技術を使用して決定される。例えば、予め、ライト可能量が、記憶ドライブ１１３において定義されている。例えば、ライト可能量は、規定の総ライト可能量を規定の製品寿命時間で割った値である。総ライト可能量は、例えば、データ量やＩＯ数で表わされる。総ライト可能量は、ウェアレベリングを含む内部処理による媒体へのライトを考慮して決定される。
【００１８】
記憶ドライブ１１３は、残ライト可能量として、ライト可能量と外部からの現在のライト量との差分を、計算する。現在のライト量は、ローカルのＶＭ２０１からのライト２１０及び他の計算機ノード１０１からのライト２１１を含む。記憶ドライブ１１３は、現在のライト量（外部ライト量）を、ウェアレベリングを含む実際の内部処理によるライト量により補正してもよい。たとえば、現在の外部ライト量と現在内部ライト量との比と、予め設定された値との比較結果に基づいて、現在のライト量が補正される。
【００１９】
残ライト可能量がマイナスの値であれば、規定の製品寿命を達成するためには、現在のライト負荷を削減する必要がある。残ライト可能量がプラスの値であれば、その分ライト負荷を増加させても、製品寿命を達成することができる。
【００２０】
プロセッサは、記憶ドライブ１１３から受け取った寿命に関する情報から、残ライト可能量を計算してもよい。プロセッサは、記憶ドライブ１１３の稼働時間と消費寿命率を取得する。消費寿命率は、１００％の寿命率において消費された寿命率を示し、例えば、媒体の書き換え可能回数と実際の書き換え回数により決定される。
【００２１】
プロセッサは、稼働時間、消費寿命率及び稼働時間内の総ライト量（例えばＩＯ回数やデータ量）から、ライト量（例えばＩＯＰＳやスループット）と消費寿命率の変化率との関係を決定する。プロセッサは、稼働時間と消費寿命率とから、現在から規定の製品寿命を満たす寿命率の変化率を算出し、さらに、その変化率及び消費寿命率の変化率との関係から、ライト可能量を決定する。
【００２２】
プロセッサ（計算機ノード１０１）は、各記憶ドライブ１１３の残ライト可能量をメモリ又は記憶ドライブ１１３に保持し、管理する。また、各計算機ノード１０１は、各記憶ドライブ１１３の残容量も管理する。
【００２３】
プロセッサは、一つの記憶ドライブ１１３の残ライト可能量がマイナスであることを検出すると、当該計算機ノード１０１で動作しており、当該記憶ドライブ１１３にアクセスするＶＭ２０１のライト量を参照し、他の計算機ノード１０１に移行するＶＭを決定する。
【００２４】
移行先の決定において、プロセッサは、移行するＶＭのライト量２１０に加え、ストレージコントロールプログラム（及びアプリケーションプログラム２０２）による冗長化のためのライト量２１１を考慮する。ストレージコントロールプログラムは、ローカルドライブへのライトデータを、１又は複数の他の計算機ノード１０１に送信する。ＶＭ２０１が他の計算機ノード１０１に移行されると、当該ＶＭ２０１の冗長データを格納する計算機ノード１０１が変化する。なお、以下において、冗長化のためにデータを転送することをミラーリングと呼び、また、転送されるデータをミラーデータとも呼ぶことがある。
【００２５】
したがって、プロセッサは、移行先の計算機ノード１０１に加え、移行先計算機ノード１０１のための冗長データを格納する計算機ノード１０１の残ライト可能量がプラスを維持するように、移行先の計算機ノード１０１を選択する。ＶＭ２０１の移行は、ライブマイグレーションと同時にストレージ側のデータの移行処理を実施し、データを移行先のローカルストレージに格納するように動作させる。
【００２６】
図２は、本実施形態に係る計算機システムの構成例を示す。計算機システムは、ネットワークを介して接続された複数の計算機ノード（単にノードとも呼ぶ）１０１を含んで構成される。図１において、三つの計算機ノード１０１が例示されている。
【００２７】
計算機ノード１０１は、例えば一般的なサーバ計算機の構成を有している。計算機ノードのハードウェア構成は特に限定されない。計算機ノード１０１は、ネットワーク１０３を介して他の計算機ノードとポート１０６を通じて接続する。ネットワーク１０３は、例えばＩｎｆｉｎｉ  Ｂａｎｄや、イーサネットなどにより構成される。
【００２８】
計算機ノードの内部構成は、内部ネットワーク１１２を介してポート１０６、プロセッサパッケージ１１１、記憶ドライブ（以下においてドライブとも呼ぶ）１１３を接続する。プロセッサパッケージ１１１は、メモリ１１８及びプロセッサ１１９を含む。
【００２９】
メモリ１１８は、プロセッサ１１９がリードやライト命令を処理し、ストレージの機能を実行する上で、必要な制御用の情報を格納し、また、ストレージのキャッシュデータを格納する。さらに、メモリ１１８は、例えばプロセッサ１１９により実行するプログラムを格納する。メモリ１１８は、揮発性のＤＲＡＭであってもよいし、不揮発のＳＣＭ（Ｓｔｏｒａｇｅ  Ｃｌａｓｓ  Ｍｅｍｏｒｙ）などを用いてもよい。
【００３０】
記憶ドライブ１１３は、例えば、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）などのインタフェースを持つＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）や、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などにより構成される。
【００３１】
記憶ドライブ１１３は、プロセッサパッケージ１１１により管理され、他の計算機ノードを介することなく、プロセッサパッケージ１１１からアクセスされる。記憶ドライブ１１３は、いわゆるＤＡＳ（Ｄｉｒｅｃｔ  Ａｃｃｅｓｓ  Ｓｔｒｏａｇｅ）又はバックエンドスイッチを介してプロセッサパッケージ１１１に接続される。記憶ドライブ１１３は、計算機ノード１０１のローカルストレージを構成する。
【００３２】
上述のように、記憶ドライブ１１３は、外部からのライト量に基づく寿命を有している。以下の記載において、記憶ドライブ１１３は、フラッシュメモリを媒体として有するフラッシュドライブとする。計算機システムは、さらに、管理計算機を含んでもよい。
【００３３】
図３は、本実施形態に係る計算機ノード１０１のソフトウェア構成例を示す。図３において、ハイパーバイザ及びＶＭは省略されている。計算機ノード１０１は、ストレージＩ／Ｏプログラム４１０、ＶＭ配置変更プログラム４１１、ＶＭ割り当てプログラム４１２、ＶＭ移行プログラム４１３、及びネットワークＩ／Ｏプログラム４１４を実行する。プロセッサ１１９は、プログラムに従って動作することで、特定の機能を実現する。
【００３４】
メモリ１１８は、管理情報を格納する。具体的には、メモリ１１８は、ストライプマッピングテーブル３０１、ＶＭ情報テーブル３０２、記憶ドライブ寿命情報テーブル３０３、容量管理テーブル３０４、及びページマッピングテーブル３０５を格納する。さらに、メモリは、バッファ３０６を含む。それぞれのプログラム及びテーブルの詳細は、後述する。
【００３５】
図４Ａは、ストライプマッピングテーブル３０１の構成例を示す。ストライプマッピングテーブル３０１は、ストレージＩ／Ｏプログラム４１０により参照され、ＶＭ２０１からのライトデータをノード間で冗長化するために、当該ライトデータを転送する先の計算機ノードを示す。
【００３６】
ストライプマッピングテーブル３０１は、ストライプタイプ番号カラム３１１と、対応ノードカラム３１２〜３１５を有する。ＶＭ２０１からのライトデータは、冗長化のために、対応ノードカラム３１２〜３１５が示す他の計算機ノードに転送される。データは、規定サイズのブロック単位で転送される。
【００３７】
ストライプタイプ番号カラム３１１の値は、ライトデータのアクセス先アドレスから決定される。アクセス先アドレスは、ライトデータを格納するボリュームの論理アドレスである。例えば、ライトデータのアクセス先アドレスの規定値に対する剰余が、当該ライトデータ（アクセス先アドレス）のストライプタイプ番号である。
【００３８】
ストレージＩ／Ｏプログラム４１０は、ライトデータをローカルストレージに格納すると共に、アクセス先アドレスの規定値に対する剰余を計算して、当該ライトデータのストライプタイプ番号を決定する。ストレージＩ／Ｏプログラム４１０は、ストライプマッピングテーブル３０１を参照し、決定したストライプタイプ番号に対応する計算機ノード１０１を同定する。ストレージＩ／Ｏプログラム４１０は、ライトデータを、同定した計算機ノード１０１に転送する。
【００３９】
図４Ｂは、ＶＭ情報テーブル３０２の構成例を示す。ＶＭ情報テーブル３０２は、当該計算機ノード１０１で動作するＶＭ２０１の情報を管理する。具体的には、ＶＭ情報テーブル３０２は、ＶＭ番号カラム３２１、ライト負荷量カラム３２２、仮想ボリューム容量カラム３２３、使用容量カラム３２４、及びテンプレート情報カラム３２５を有する。
【００４０】
ＶＭ番号カラム３２１は、ＶＭ情報テーブル３０２を保持する当該計算機ノード１０１上で動作するＶＭの識別子を示す。ライト負荷量カラム３２２は、ＶＭ２０１が発生させるライト負荷量を示す。ライト負荷量は、単位時間当たりのライト量であり、例えば、単位時間当たりのライト回数又はライトデータ量である。ライト負荷量の単位は、上記残りライト可能量と同様の単位である。
【００４１】
仮想ボリューム容量カラム３２３は、ＶＭ２０１が使用している仮想ボリュームの定義容量（仮想容量）を示す。使用容量カラム３２４は、仮想ボリュームにおいてＶＭ２０１が使用している容量を示す。ＶＭ２０１が使用している仮想ボリュームが、当該ＶＭ２０１のイメージデータを格納する。ＶＭ２０１のイメージデータは、当該ＶＭ２０１が実行／使用するプログラム及びデータを収容している。
【００４２】
テンプレート情報カラム３２５は、ＶＭ２０１の仕様を含む。例えば、テンプレート情報カラム３２５は、ＶＭ２０１上で動作するＯＳ及びアプリケーションプログラムの情報や、実行プログラムに応じて想定されるライト量を示す。テンプレート情報カラム３２５は、管理者により設定される。
【００４３】
図４Ｃは、記憶ドライブ寿命情報テーブル３０３の構成例を示す。記憶ドライブ寿命情報テーブル３０３は、記憶ドライブ１１３の寿命についての情報を管理する。具体的には、記憶ドライブ寿命情報テーブル３０３は、ドライブ番号カラム３３１、残ライト可能量カラム３３２、稼働時間カラム３３３、消費寿命率カラム３３４、及びＷＡ（Ｗｒｉｔｅ  Ａｍｐｌｉｖｆｉｃａｔｉｏｎ）モデルカラム３３５を有する。
【００４４】
ドライブ番号カラム３３１は、記憶ドライブ寿命情報テーブル３０３を保持する当該計算機ノード１０１のローカルドライブ１１３の識別子を示す。残ライト可能量カラム３３２は、記憶ドライブ１１３それぞれの残ライト可能量を示す。残ライト可能量は、上述のように計算できる。
【００４５】
稼働時間カラム３３３は、記憶ドライブ１１３それぞれの稼働時間を示す。消費寿命率カラム３３４は、記憶ドライブ１１３それぞれの消費寿命率を示す。消費寿命率は、記憶ドライブ１１３のライトによる磨耗度を表す。
【００４６】
ＷＡモデルカラム３３５は、記憶ドライブ１１３それぞれのＷｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎの性質を現すＷＡモデル、の情報を格納する。ＷＡモデルは、例えば、記憶ドライブ１１３の使用容量とＷＡとの関係を示す。ＷＡモデルは、グラフ又は近似式で表わされる。ＷＡモデルは、残ライト可能量の計算に使用できる。
【００４７】
図４Ｄは、容量管理テーブル３０４の構成例を示す。容量管理テーブル３０４は、記憶ドライブ１１３それぞれの容量を管理する。容量管理テーブル３０４は、ドライブ番号カラム３４１、残容量カラム３４２、物理容量カラム３４３、論理容量カラム３４４、及び圧縮率カラム３４５を有する。
【００４８】
残容量カラム３４２は、記憶ドライブ１１３それぞれの、物理容量の残容量を示す。物理容量カラム３４３は、記憶ドライブ１１３それぞれの物理容量を示す。論理容量カラム３４４は、記憶ドライブ１１３それぞれの、プロセッサ１１９から見た容量を示す。圧縮率カラム３４５は、記憶ドライブ１１３それぞれの、現在のデータ圧縮率を示す。容量管理テーブル３０４の情報は、記憶ドライブ１１３それぞれから提供される。
【００４９】
図４Ｅは、ページマッピングテーブル３０５の構成例を示す。ページマッピングテーブル３０５は、当該ページマッピングテーブル３０５を保持する計算機ノード１０１の記憶ドライブ１１３又はバッファ３０６に格納されているデータを管理する。
【００５０】
ページマッピングテーブル３０５は、仮想ボリュームのページと、記憶ドライブ１１３（物理ドライブ）のページとの、対応関係を示す。ページマッピングテーブル３０５は、さらに、それらページとバッファア内のページとの関係を示す。
【００５１】
ページマッピングテーブル３０５は、ハッシュ値カラム３５１、転送情報カラム３５２、ノード番号（１）カラム３５３、仮想ボリューム（ＶＶＯＬ）番号（１）カラム３５４、ページ番号（１）カラム３５５を有する。ページマッピングテーブル３０５は、さらに、ノード番号（２）カラム３５６、仮想ボリューム（ＶＶＯＬ）番号（２）カラム３５７、ページ番号（２）カラム３５８、バッファアドレスカラム３５９、ドライブ番号カラム３６０、及びページ番号カラム３６１を有する。
【００５２】
本例のページマッピングテーブル３０５は、ハッシュテーブルである。ハッシュ値カラム３５１は、ページデータのハッシュ値を格納する。ページは、仮想ボリュームに対する記憶領域の割り当て単位である。冗長化ブロックとページサイズは同一でもよい。その場合、バッファアドレスカラム３５９は、ページ単位でバッファを管理する。
【００５３】
転送情報カラム３５２は、各エントリのデータの属性及び転送処理についての情報を示す。具体的には、転送情報カラム３５２は、エントリのデータが、ローカルドライブ１１３に反映されるストレージＩ／Ｏのデータであるか、又は、計算機ノード１０１間で転送され、ローカルドライブ１１３に反映されないネットワークＩ／Ｏのデータであるかを示す。
【００５４】
ストレージＩ／ＯのデータとネットワークＩ／Ｏのデータの情報は、同一のハッシュ値であったとしても、異なるエントリに格納される。ストレージＩ／Ｏのデータは、ストレージＩ／Ｏプログラム４１０により処理され、ネットワークＩ／ＯのデータはネットワークＩ／Ｏプログラム４１４に処理される。
【００５５】
ネットワークＩ／Ｏのデータは、異なる計算機ノード１０１のＶＭ２０１間（例えばアプリケーションプログラム２０２間）の転送データである。後述するように、バッファ３０６は、他の計算機ノード１０１に転送するネットワークＩ／Ｏデータ及び他の計算機ノード１０１から受信したネットワークＩ／Ｏデータを格納する。
【００５６】
ＶＭ２０１（アプリケーションプログラム２０２）は、他の計算機ノード１０１から転送されたネットワークＩ／Ｏデータを記憶ドライブ１１３にライトするため、当該データをライトデータとして、ライト要求と共にストレージＩ／Ｏプログラム４１０に渡す。
【００５７】
ストレージＩ／Ｏデータは、通常のライトデータ及び他計算機ノード１０１から転送されたミラーデータを含む。転送情報カラム３５２は、ストレージＩ／Ｏのデータが、ライトデータであるか又はミラーデータであるかを示す。
【００５８】
転送情報カラム３５２は、各エントリのデータが、他の計算機ノード１０１に転送済みであるかを示す。エントリのデータが転送済みデータである場合、転送情報カラム３５２は、転送先計算機ノード１０１の情報を示す。
【００５９】
ノード番号（１）カラム３５３、仮想ボリューム（ＶＶＯＬ）番号（１）カラム３５４、及びページ番号（１）カラム３５５は、ハッシュ値を有するデータが格納されている仮想ボリュームのページを示す。
【００６０】
ノード番号（２）カラム３５６、仮想ボリューム（ＶＶＯＬ）番号（２）カラム３５７、及びページ番号（２）カラム３５８は、同ハッシュ値を有するデータが格納されている他の仮想ボリュームのページを示す。図４Ｅは、二つの仮想ページのカラムを明示するが、ページマッピングテーブル３０５は、３以上の仮想ページのカラムを有する。
【００６１】
なお、データは仮想ボリュームに論理的に格納されているのみであって、実際のデータは物理記憶領域を有する記憶ドライブ１１３に格納される。該当する値を有していないセルは、例えば、ＮＵＬＬ値を格納している。例えば、バッファ３０６のみに格納されているデータのエントリは、仮想ボリューム及び記憶ドライブのアドレスについて情報を格納するセルにおいて、ＮＵＬＬ値を有している。
【００６２】
バッファアドレスカラム３５９は、ハッシュ値を有するデータが格納されているバッファ３０６のアドレスを示す。ドライブ番号カラム３６０及びページ番号カラム３６１は、ハッシュ値を有するデータが実際に格納されている記憶ドライブ１１３のページを示す。バッファアドレスカラム３５９及びドライブ番号カラム３６０は、当該ページマッピングテーブル３０５を保持する計算機ノード１０１に含まれるバッファ３０６及び記憶ドライブ１１３のページを示す。
【００６３】
このように、ページマッピングテーブル３０５は、ハッシュ値とアドレスとの間の参照関係を示し、さらに、論理アドレス（仮想ボリュームのアドレス）と物理アドレスとの間の参照関係を示す。対象のデータがパリティの場合、当該パリティを生成するために使用されたデータの複数の論理アドレスが関連付けられる。
【００６４】
対象のデータが実データである場合、通常一つの論理アドレス（仮想ボリュームのページ）が関連付けられる。対象のデータが重複データである場合、排除により、重複データを格納する異なる論理アドレスに対して、共通の物理ページが割り当てられる。
【００６５】
図５は、本実施形態に係るストレージＩ／Ｏ処理（リード）のフローチャートを示す。ストレージＩ／Ｏプログラム４１０は、リード要求を受信すると、当該フローチャートに従って動作する。ストレージＩ／Ｏプログラム４１０は、後述するＶＭ移行プログラム４１３によるＶＭ移行処理の実施状況を参照して、データをリードする。ＶＭ移行プログラム４１３は、ＶＭ２０１のライブマイグレーションを実行する。
【００６６】
ライブマイグレーションは、アプリケーションプログラム２０２及びＯＳ２０３を含むＶＭ２０１のデータを、計算機ノード１０１のメモリ１１８間で移行し、さらに、ＶＭイメージデータを移行先の計算機ノード１０１の記憶ドライブ１１３に移行する。
【００６７】
リード対象のデータを含むＶＭ２０１が移行中でない場合、データはローカルドライブ１１３に格納されている。リード対象のデータを含むＶＭ２０１が移行中である場合、対象データは移行元計算機ノード１０１又は移行先計算機ノード１０１に存在している。
【００６８】
ストレージＩ／Ｏプログラム４１０は、例えば、アプリケーションプログラム２０２からのリード要求を受ける。アプリケーションプログラム２０２を実行しているＶＭ２０１が移行中である場合、移行先計算機ノード１０１のストレージＩ／Ｏプログラム４１０が、移行済みのアプリケーションプログラム２０２からリード要求を受ける。
【００６９】
ストレージＩ／Ｏプログラム４１０は、当該アプリケーションプログラム２０２及び対象データを含む（管理）するＶＭ２０１が、移行中であるか判定する（ステップ６０１）。例えば、ストレージＩ／Ｏプログラム４１０は、ＶＭ移行プログラム４１３に、当該ＶＭ２０１が移行中であるか問い合わせる。
【００７０】
ＶＭ２０１が移行中であれば（ステップ６０１：ＹＥＳ）、ストレージＩ／Ｏプログラム４１０は、対象データが、移行先の計算機ノード１０１にコピー済みかどうかを判定する（ステップ６０２）。例えば、ストレージＩ／Ｏプログラム４１０は、ＶＭ移行プログラム４１３に、対象データがコピー済みであるか問い合わせる。
【００７１】
対象データがコピー済みでなければ（ステップ６０２：ＮＯ）、ストレージＩ／Ｏプログラム４１０は、移行元計算機ノード１０１からデータをリードする（ステップ６０５）。ストレージＩ／Ｏプログラム４１０は、移行元計算機ノード１０１に、アドレスを指定してリード要求を送信し、返された対象データを受信する。
【００７２】
対象データがコピー済みであれば（ステップ６０２：ＹＥＳ）、ストレージＩ／Ｏプログラム４１０は、ステップ６０３に進む。ＶＭ２０１が移行中なければ（ステップ６０１：ＮＯ）、ストレージＩ／Ｏプログラム４１０は、ステップ６０３に進む。
【００７３】
ステップ６０３において、ストレージＩ／Ｏプログラム４１０は、ページマッピングテーブル３０５から対応する物理アドレスを取得する。ストレージＩ／Ｏプログラム４１０は、対応する物理アドレスのデータを記憶ドライブ１１３からリードする（ステップ６０４）。
【００７４】
以上で説明したフローにより、リード要求の指定アドレスに拠らず、適切に最新のデータを参照することができる。なお、アプリケーションプログラム２０２により複製されたデータがリード対象である場合、後述するように、データ量を削減するための処理（パリティ化）により、当該対象データが存在していない場合がある。ストレージＩ／Ｏプログラム４１０は、その実体がある計算機ノード１０１に問い合わせる、又は、パリティからデータを修復することにより、リード対象データを生成する。このあて先のノードは、後述するハッシュテーブルを用いて、効率的に検索できる。
【００７５】
図６は、本実施形態に係るストレージＩ／Ｏ処理（Ｆｒｏｎｔ  Ｅｎｄライト）のフローチャートを示す。Ｆｒｏｎｔ  Ｅｎｄライトは、ライトデータを受信してから、バッファ３０６にライトするまでの処理である。本例のＦｒｏｎｔ  Ｅｎｄライトは、さらに、冗長化が必要なデータを他の計算機ノード１０１に転送する。
【００７６】
本処理の概要を説明する。受信したライトデータと同一のデータが既に記憶ドライブ１１３に格納されている場合、ストレージＩ／Ｏプログラム４１０は、記憶ドライブ１１３への実際にデータをライトせずに、ページマッピングテーブル３０５を更新するのみの、仮想的なライト処理を実行する。これにより、記憶ドライブ１１３へのライト量を低減する。
【００７７】
具体的には、ストレージＩ／Ｏプログラム４１０は、ライトデータのハッシュ値を計算し、ページマッピングテーブル３０５のハッシュ値カラム３５１の値と比較する。同一ハッシュ値が存在する場合、ストレージＩ／Ｏプログラム４１０は、仮想的なライト処理を実行する。つまり、ストレージＩ／Ｏプログラム４１０は、当該ハッシュ値のエントリに、当該ライト要求のアクセス先を追加する。
【００７８】
また、アプリケーションによるミラーリング機能により他のノードで発生したミラーデータの重複を検出する一手法は、ノード間でグローバルなハッシュテーブルを保持する。当該ハッシュテーブルは、データのハッシュ値をキーとして、対応するデータの格納先のノードの識別子を示す。またハッシュテーブルは、データの参照元のノードの識別子の情報を含んでもよい。
【００７９】
当該ハッシュテーブルは、メモリ使用量の効率化のため、所定アルゴリズム（例えばＬＲＵアルゴリズム）を用いて、一部を保持するようにしてもよい。また、データのハッシュ値とノードが一意に対応するように、コンシステントハッシュを用いてノードが担当するハッシュ値を定め、担当のノードが、担当範囲のハッシュテーブルを保持してもよい。
【００８０】
ストレージＩ／Ｏプログラム４１０は、上述した、ページマッピングテーブル３０５のハッシュ値カラム３５１の値と比較して、同一ハッシュ値が存在しない場合に、グローバルなハッシュテーブルを検索（ハッシュ値に対応するハッシュテーブルを管理するノードに、自ノード番号とハッシュ値を送付して問い合わせる）する。
【００８１】
グローバルなハッシュテーブルで同一ハッシュ値が存在した場合、ストレージＩ／Ｏプログラム４１０は、そのノード番号及びページのアドレス情報を受け取り、上述した仮想的なライト処理を実行する。またグローバルなハッシュテーブルの問い合わせ先のノードは、問い合わせ元ノードの情報をハッシュ値と対応付けて記録する。
【００８２】
グローバルなハッシュテーブルで同一ハッシュ値が存在しなかった場合は、ストレージＩ／Ｏプログラム４１０は、ステップ７０５へと進む。グローバルなハッシュテーブルの問い合わせ先のノードは、問い合わせ元ノードの情報を、そのデータの保持ノードとして、ハッシュ値と対応付けて記録する。
【００８３】
上述の手法を単純に適用すると、ミラーデータの実体を保持するノードは１個だけとなるが、ページのアクセス頻度などによる負荷や、統計的学習情報などをハッシュテーブルに保持することで、一部の負荷の高いページについてミラーデータを複数のノードで保持することで、効率的にネットワーク転送を低減し、ストレージの性能を高めることができる。
【００８４】
さらに、重複データが、冗長化のために他の計算機ノード１０１（ミラーリング先）に転送済みである場合、ストレージＩ／Ｏプログラム４１０は、転送先計算機ノード１０１に、メタデータのみを転送する。転送先計算機ノードは、ストライプマッピングテーブル３０１により示される。
【００８５】
メタデータのみを転送することで、ネットワークの帯域を削減しつつ、転送先（ミラーリング先）の容量消費量も削減する。メタデータは、ハッシュ値とライトデータの対象アドレス（仮想ボリュームの論理アドレス）を示す。転送先計算機ノード１０１は、受信したメタデータによりページマッピングテーブル３０５を更新する。ストレージＩ／Ｏプログラム４１０は、ページマッピングテーブル３０５の転送情報カラム３５２を参照して、重複データの転送の有無を判定する。
【００８６】
重複データを転送済みではない場合、ストレージＩ／Ｏプログラム４１０は、ライトデータをストライプマッピングテーブル３０１が示す計算機ノード１０１に転送する。ストレージＩ／Ｏプログラム４１０は、ライトデータと共に、ライトデータの対象アドレスを送信する。
【００８７】
図６を参照して、具体的な処理の流れを説明する。ストレージＩ／Ｏプログラム４１０は、ライト要求を受信すると、当該フローチャートに従って動作する。ストレージＩ／Ｏプログラム４１０は、例えば、アプリケーションプログラム２０２からのリード要求を受ける。アプリケーションプログラム２０２を実行しているＶＭ２０１が移行中である場合、移行先計算機ノード１０１のストレージＩ／Ｏプログラム４１０が、移行済みのアプリケーションプログラム２０２からライト要求を受ける。
【００８８】
ストレージＩ／Ｏプログラム４１０は、当該アプリケーションプログラム２０２及び対象データ（アドレス）を含む（管理）するＶＭ２０１が、移行中であるか判定する（ステップ７０１）。例えば、ストレージＩ／Ｏプログラム４１０は、ＶＭ移行プログラム４１３に、当該ＶＭ２０１が移行中であるか問い合わせる。
【００８９】
ＶＭ２０１が移行中であれば（ステップ７０１：ＹＥＳ）、ストレージＩ／Ｏプログラム４１０は、対象アドレスのデータが、移行先の計算機ノード１０１にコピー済みかどうかを判定する（ステップ７０９）。例えば、ストレージＩ／Ｏプログラム４１０は、ＶＭ移行プログラム４１３に、対象アドレスのデータがコピー済みであるか問い合わせる。コピーが済んでいない場合（ステップ７０９：ＮＯ）、ストレージＩ／Ｏプログラム４１０は、移行元計算機ノード１０１にライト要求を転送して（ステップ７１０）、処理を終了する。
【００９０】
対象アドレスのデータがコピー済みの場合（ステップ７０９：ＹＥＳ）、移行先計算機ノード１０１に最新のデータが存在するため、ストレージＩ／Ｏプログラム４１０は、当該処理を継続する。ＶＭ２０１が移行中ではない場合（ステップ７０１：ＮＯ）、ストレージＩ／Ｏプログラム４１０は、同様に、当該処理を継続する。
【００９１】
ストレージＩ／Ｏプログラム４１０は、ライトデータのハッシュ値を計算する（ステップ７０２）。ハッシュ値の計算は、ＣＲＣ、ＭＤ５、ＳＨＡなど、一般的に知られた方法を用いることができる。ストレージＩ／Ｏプログラム４１０は、ページマッピングテーブル３０５のハッシュ値カラム３５１を検索する。ストレージＩ／Ｏプログラム４１０は、計算したハッシュ値と同一値が存在する否かに基づいて、ライトデータが書き込み済みか否か判定する（ステップ７０３）。
【００９２】
本ステップは、バッファ３０６のデータについても、ハッシュ値の一致をチェックし、書き込み済みかどうかを判定する。図４Ｅを参照して説明したように、バッファのデータも、ページマッピングテーブル３０５により、管理されている。
【００９３】
ライトデータが書き込み済みである場合（ステップ７０３：ＹＥＳ）、ストレージＩ／Ｏプログラム４１０は、ページマッピングテーブル３０５を更新する（ステップ７０４）。具体的には、ストレージＩ／Ｏプログラム４１０は、ライト対象の仮想ページに対して、すでに書き込んでいる物理アドレスのページを対応させる。
【００９４】
本処理により、１個の物理ページに対して、複数の論理ページが対応することになり、データをドライブにライトする量が削減でき、また使用可能なストレージ容量も増加させることが出来る。
【００９５】
また、ステップ７０４において、後述するネットワークＩ／Ｏプログラム４１４が受信してライトしたバッファに、同一のデータを持っていた場合、当該データは、アプリケーションプログラム２０２の冗長化処理により発生していると考えられる。ストレージＩ／Ｏプログラム４１０は、当該データを、ストレージＩ／Ｏによるミラーデータと同様に使ってもよい。ストレージＩ／Ｏプログラム４１０は、当該データと他のミラーデータとからパリティを生成し、その情報をページマッピングテーブル３０５に登録する。
【００９６】
なお、ストレージＩ／Ｏプログラム４１０は、ローカルストレージ（記憶ドライブ１１３）へのデータのライト及び計算機ノード１０１間での当該データの冗長化を行う。ネットワークＩ／Ｏプログラム４１４は、ローカルストレージ（記憶ドライブ１１３）格納されず、異なる計算機ノード１０１のＶＭ２０１間でのデータ転送を行う。
【００９７】
次に、ストレージＩ／Ｏプログラム４１０は、ネットワーク冗長化済みかどうかを判定する（ステップ７０６）。ネットワーク冗長化済みは、計算機ノード１０１が保持するデータが、冗長化のために他の計算機ノード１０１に転送されていることを意味する。ストライプマッピングテーブル３０１が、冗長化先計算機ノード１０１を示す。本実施形態においては、ストレージＩ／Ｏプログラム４１０によるネットワーク冗長化に加え、ＶＭ２０１が、ネットワーク冗長化を行う。
【００９８】
具体的には、データ冗長化機能を持つアプリケーションプログラム２０２（例えばＮｏＳＱＬ）が、冗長化のためにデータを、ネットワークＩ／Ｏプログラム４１４によって、他の計算機ノード１０１に転送する。データ冗長化機能を持つアプリケーションプログラム２０２（例えばＮｏＳＱＬ）によるネットワークの通信処理による冗長データは、メモリ１１８のバッファ３０６に格納される。このデータは、ページマッピングテーブル３０５で管理される。
【００９９】
ストレージＩ／Ｏプログラム４１０は、ハッシュ値を計算することにより、そのデータの冗長性を検出する。ネットワーク冗長性は、ページマッピングテーブル３０５の転送情報カラム３５２によって管理される。転送情報カラム３５２は、データを転送した計算機ノード１０１の情報を保持する。
【０１００】
冗長化済みであれば（ステップ７０６：Ｙ）、ストレージＩ／Ｏプログラム４１０は、メタデータのみを冗長化先ノードに送信して（ステップ７１１）、本処理を終了する。メタデータは、ハッシュ値と格納先アドレスとを示す。これはつまり、当該ストレージライトＩ／Ｏが発生する以前に、ストレージライトＩ／Ｏが発生していたか、アプリケーションのネットワーク転送により冗長化されていたか、のいずれかであるという、状態である。
【０１０１】
ライトデータが書き込み済みでない場合（ステップ７０３：ＮＯ）、ストレージＩ／Ｏプログラム４１０は、バッファにライトデータをライトする（ステップ７０５）。バッファ上には、ストレージＩ／Ｏプログラム４１０によるデータと、ネットワークＩ／Ｏプログラム４１４によるデータが格納される。それぞれの意味が異なるため、ページマッピングテーブル３０５の転送情報カラム３５２により、識別して管理する。
【０１０２】
ネットワーク冗長化済みでない場合（ステップ７０６：Ｎ）、ストレージＩ／Ｏ処理により冗長化を実施する。まず、ストライプマッピングテーブル３０１から冗長化先ノードを算出し（ステップ７０７）、冗長化先ノードにデータとメタデータを転送し（ステップ７０８）、転送が完了したら、処理を終了する。メタデータは、送信するデータを転送先で識別する情報であり、論理アドレスなどの情報を含む。ここでは、システムで必要な冗長度に応じて、転送先を複数選択し、複数回の転送を実行してもよい。
【０１０３】
図７は、本実施形態に係るストレージＩ／Ｏ処理（Ｂａｃｋ  Ｅｎｄライト）のフローチャートを示す。Ｂａｃｋ  Ｅｎｄライトは、バッファ内の未反映データを記憶ドライブ１１３（物理記憶領域）に反映する。より具体的には、バッファに格納されているデータ又はバッファに格納されているデータから生成されたデータを、記憶ドライブ１１３の物理記憶領域にライトする。
【０１０４】
ストレージＩ／Ｏプログラム４１０は、バッファ３０６内のデータを、ライト要求とは非同期に処理する。バッファ３０６の使用率が高い場合、ストレージＩ／Ｏプログラム４１０は、ライト要求と同期的にバッファ３０６内の記憶領域を開放してもよい。
【０１０５】
バッファ３０６は、所定の容量を持つ。使用率が規定値を超える場合、古いデータから消去される。一般的にはＦＩＦＯが使用されるが、その他のスケジューリングアルゴリズム（例えばＬＲＵ）が使用されてもよい。記憶ドライブ１１３にライトされるべきライトデータは、記憶ドライブ１１３（記憶媒体）へのライトの後に消去される。
【０１０６】
ストレージＩ／Ｏプログラム４１０は、複数の他計算機ノード１０１から転送され、バッファ３０６に格納されているミラーデータから、パリティ（Ｅｒａｓｕｒｅ  Ｃｏｄｅ）を生成し、パリティのみを記憶ドライブ１１３にライトする。これにより、記憶ドライブ１１３に対するライト量を削減する。
【０１０７】
ネットワークＩ／Ｏプログラム４１４によって、他の計算機ノード１０１への転送時に、バッファ３０６に格納されたデータ（転送データ）は、記憶ドライブ１１３へライトする必要はない（未反映データではない）。そのため、当該データは、処理されることなく、バッファ３０６から消去される。バッファ３０６からのデータの消去に伴い、ページマッピングテーブル３０５上のエントリを消去することで実現する。
【０１０８】
図７を参照して、具体的な処理の流れを説明する。ストレージＩ／Ｏプログラム４１０は、ページマッピングテーブル３０５を参照し、記憶ドライブ１１３への未反映データが存在するか判定する（ステップ８０１）。転送情報カラム３５２がストレージＩ／Ｏデータであることを示し、ドライブ番号カラム３６０及びページ番号カラム３６１がＮＵＬＬ値を格納しているエントリは、未反映データを示す。
【０１０９】
未反映データがバッファ３０６に存在する場合（ステップ８０１：ＹＥＳ）、ストレージＩ／Ｏプログラム４１０は、未反映データがミラーデータであるか判定する（ステップ８０２）。ミラーデータは、冗長化のために送信されたデータであり、ステップ７０８で他ノード１０１から転送されたデータである。転送情報カラム３５２は、エントリのデータがミラーデータでるか示す。
【０１１０】
未反映データがミラーデータである場合（ステップ８０２：ＹＥＳ）、ストレージＩ／Ｏプログラム４１０は、他のミラーデータと共に、パリティを生成し（ステップ８０７）、さらに、メタデータを生成する（ステップ８０８）。パリティの生成は、一般的にしられたＥｒａｓｕｒｅ  Ｃｏｄｉｎｇの手法（例えばＲｅｅｄ  Ｓｏｌｏｍｏｎ符号化）を用いてもよい。
【０１１１】
パリティを生成するデータブロック群は、冗長化のために送信されたデータであると同時に、それぞれの送信元が異なるノードとすることが望ましい。メタデータは、そのパリティがいずれの計算機ノード１０１のいずれの論理アドレス（または物理アドレス）のデータから生成されているかを示し、ページマッピングテーブル３０５に格納される。メタデータは、データを復元する際参照される。
【０１１２】
その後、ストレージＩ／Ｏプログラム４１０は、ステップ８０３へ進む。または、対象データがミラーデータではない場合（ステップ８０２：ＮＯ）、ストレージＩ／Ｏプログラム４１０は、ステップ８０３へ進む。
【０１１３】
対象データがミラーデータではない場合、対象データは、当該計算機ノード１０１により発行されたライト要求のライトデータ（ステップ７０５でバッファにライトされたデータ）である。ストレージＩ／Ｏプログラム４１０は、ステップ８０３からステップ８０６にて、記憶ドライブ１１３に対するライトの一連の処理を実行する。
【０１１４】
具体的には、ストレージＩ／Ｏプログラム４１０は、ページマッピングテーブル３０５を参照して、対象仮想ページと物理ページとの対応関係がすでに決定されているか判定する（ステップ８０３）。対象仮想ページに物理ページがすでに割り当てられている場合（ステップ８０３：ＹＥＳ）、ストレージＩ／Ｏプログラム４１０は、ステップ８０５に進む。
【０１１５】
対象仮想ページに物理ページが割り当てられていない場合（ステップ８０３：ＮＯ）、ストレージＩ／Ｏプログラム４１０は、未割り当ての物理ページを、当該仮想ページに割り当てるように、ページマッピングテーブル３０５を変更する（ステップ８０４）。
【０１１６】
ステップ８０５において、ストレージＩ／Ｏプログラム４１０は、ページマッピングテーブル３０５から、対象仮想ページに対応するドライブ番号及びページ番号を取得する。ストレージＩ／Ｏプログラム４１０は、対象ライトデータを、取得したドライブ番号及びページ番号に対応する物理アドレスにライトする（ステップ８０６）。ストレージＩ／Ｏプログラム４１０は、対象データをバッファ３０６から消去し、処理を終了する。
【０１１７】
図８は、本実施形態に係るＶＭ割り当てプログラム４１２のフローチャートを示す。本処理は、ＶＭ２０１をデプロイするために実行される。ＶＭ２０１のデプロイは、計算機ノード１０１にＶＭ２０１を配置し、そのＶＭ２０１を動作させることを意味する。より具体的には、ＶＭイメージデータを計算機ノード１０１の記憶ドライブ１１３に格納し、さらに、そのメモリ１０８上でＶＭ２０１を動作させる。ＶＭ割り当てプログラム４１２は、ＶＭ２０１は、配置先の記憶ドライブ１１３のライト可能量や使用可能容量に基づいて、配置先を決定する。
【０１１８】
ユーザは、不図示の管理計算機又はいずれかの計算機ノード１０１（ユーザ端末と呼ぶ）を操作して、いずれかの計算機ノード１０１のＶＭ割り当てプログラム４１２に、ＶＭ２０１のデプロイを指示する。当該指示は、ＶＭイメージデータのロケーション及びＶＭイメージデータの構成情報を示す。指示を受けたＶＭ割り当てプログラム４１２は、図８のフローチャートの処理を実行する。管理計算機が本処理を実行してもよい。
【０１１９】
ＶＭ割り当てプログラム４１２は、割り当て対象候補の計算機ノード１０１の情報を取得する（ステップ９０１）。具体的には、ＶＭ割り当てプログラム４１２は、これら計算機ノード１０１から、ＶＭ情報テーブル３０２、記憶ドライブ寿命情報テーブル３０３、及び容量管理テーブル３０４を取得する。
【０１２０】
計算機システムは、分散データベース（ＳＱＬ、ＮｏＳＱＬ）やＫＶＳ（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）などを用いて、計算機ノード１０１の情報を一元管理してもよい。ＶＭ割り当てプログラム４１２は、当該データベースから上記情報を取得する。
【０１２１】
次に、ＶＭ割り当てプログラム４１２は、デプロイ対象のＶＭ２０１に対して、空き容量の要件を満たす計算機ノード１０１を決定する（ステップ９０２）。ＶＭ２０１に対して、必要とされる空き容量は、ユーザに指定される、又は、ＶＭ２０１に含まれるプログラムに対して予め設定されている。
【０１２２】
ＶＭ割り当てプログラム４１２は、各計算機ノード１０１の容量管理テーブル３０４を参照し、残容量カラム３４２の値から、必要な空き容量を持つ計算機ノード１０１を決定する。空き容量は、例えば、プール毎に計算され、いずれかのプールが必要空き容量を持つことが要求される。容量管理テーブル３０４は、プール毎に、記憶ドライブ１１３の容量の情報を管理する。なお、図４Ｄが示す容量管理テーブル３０４は、一つのプールの情報を示す。以下において、各計算機ノード１０１が持つプールは一つとする。
【０１２３】
空き容量の要件を満たす計算機ノード１０１が存在しない場合（ステップ９０３：ＮＯ）、当該ＶＭ２０１のデプロイは不可能である。ＶＭ割り当てプログラム４１２は、エラーメッセージをユーザ端末に出力する（ステップ９０７）。
【０１２４】
空き容量の要件を満たす計算機ノード１０１が存在する場合（ステップ９０３：ＹＥＳ）、ＶＭ割り当てプログラム４１２は、それら計算機ノード群の中で、デプロイ対象のＶＭ２０１に対してライト可能量（残ライト可能量）の要件を満たす計算機ノード１０１を決定する（ステップ９０４）。
【０１２５】
ＶＭ割り当てプログラム４１２は、デプロイ対象のＶＭ２０１のライト負荷量を、実行されるプログラム（ＯＳ及びアプリケーションプログラムを含む）の規定ライト負荷量から、計算する。さらに、ＶＭ割り当てプログラム４１２は、記憶ドライブ寿命情報テーブル３０３の情報から、ＶＭ２０１をデプロイした場合の、各計算機ノード１０１の残ライト可能量を計算する。
【０１２６】
計算される残ライト可能量は、デプロイされるＶＭ２０１に割り当てられる記憶ドライブ１１３における、最小の残ライト可能量である。ＶＭ割り当てプログラム４１２は、記憶ドライブ１１３それぞれに対して、ＶＭ２０１からのライト負荷量を推定する。例えば、ＶＭ割り当てプログラム４１２は、プールに記憶領域を提供する記憶ドライブ１１３の数、又は、それら記憶ドライブ１１３がプールに提供する容量と、ＶＭ２０１の予め設定されたライト負荷量、ＷＡモデル３３５、ストライプマッピングテーブル３０１によりストレージのミラーリングによるライト増加分の考慮に基づいて、各記憶ドライブ１１３に対するＶＭ２０１のライト負荷量を推定する。
【０１２７】
ＶＭ割り当てプログラム４１２は、記憶ドライブ寿命情報テーブル３０３の残ライト可能量カラム３３２が示す値と、記憶ドライブ１１３に対するＶＭ２０１の推定ライト負荷量とから、記憶ドライブ１１３それぞれの残ライト可能量を推定する。全ての残ライト可能量の値が正である場合、残ライト可能量の要件が満たされる。計算機ノード１０１が複数プールを有する場合、プール毎に空き容量の残ライト可能量の要件が判定される。
【０１２８】
ライト可能量の要件を満たす計算機ノード１０１が存在しない場合（ステップ９０５：ＮＯ）、ＶＭ割り当てプログラム４１２は、寿命要件を満たすことができない可能性があることを示す警告メッセージをユーザ端末において出力する（ステップ９０８）。さらに、ＶＭ割り当てプログラム４１２は、テップ９０２で空き容量の要件を満たすと判定された一つの計算機ノード１０１を選択し（ステップ９０９）、当該計算機ノード１０１にＶＭ２０１をデプロイする（ステップ９０６）。
【０１２９】
具体的には、ユーザ端末から指示を受けたＶＭ割り当てプログラム４１２は、選択され計算機ノード１０１にＶＭイメージデータを転送し、さらに、選択され計算機ノード１０１にＶＭ２０１のデプロイを指示する。
【０１３０】
ライト可能量の要件を満たす計算機ノード１０１が存在する場合（ステップ９０５：ＹＥＳ）、ＶＭ割り当てプログラム４１２は、当該計算機ノード１０１にＶＭ２０１をデプロイする（ステップ９０６）。以上のように、本実施形態は、ライト可能量と空き容量の要件を満たす、適切な計算機ノード１０１にＶＭ２０１をデプロイできる。
【０１３１】
他の例において、ＶＭ割り当てプログラム４１２は、デプロイ先の決定において、さらに、ＶＭ２０１のデプロイによって、冗長化のために計算機ノード１０１間で転送されるミラーデータを考慮する。
【０１３２】
ＶＭ２０１が計算機ノード１０１にデプロイされると、当該ＶＭ２０１のミラーデータが、当該計算機ノード１０１から、ストライプマッピングテーブル３０１が示す計算機ノード１０１に転送される。転送先の計算機ノード１０１において、ライト負荷量が増加する。ＶＭ割り当てプログラム４１２は、ステップ９０４において、転送先計算機ノード１０１においても残ライト可能量の値が正となるように、デプロイ先計算機ノード１０１を決定する。
【０１３３】
例えば、ストレージＩ／Ｏプログラム４１０のレプリケーションによる、計算機ノードｒでのライト負荷量の増加に対する、計算機ノードｉでのライト負荷量の増加を示す関数が、予め設定されている。ＶＭ割り当てプログラム４１２は、当該関数を使用して、デプロイ先候補にＶＭ２０１をデプロイした場合に、ストライプマッピングテーブル３０１が示す他の計算機ノード１０１において増加するライト負荷量を推定する。
【０１３４】
ＶＭ割り当てプログラム４１２は、推定したライト負荷量の増加と記憶ドライブ寿命情報テーブル３０３の情報から、他の計算機ノード１０１における残ライト可能量を推定する。ＶＭ２０１のデプロイ先のライト可能量に加え、デプロイ先とストレージＩ／Ｏの冗長化グループを構成する計算機ノード１０１の残ライト可能量を参照することで、より適切な計算機ノード１０１にＶＭ２０１をデプロイすることができる。
【０１３５】
図９は、本実施形態に係るＶＭ配置変更プログラム４１１のフローチャートを示す。本処理は、デプロイ済みのＶＭ２０１の配置を見直し、ライト可能量と空き容量の要件を満たすように、ＶＭ２０１を移行する。
【０１３６】
本処理は、各計算機ノード１０１で周期的に実行されてもよく、ＶＭ２０１の起動・終了などのイベント発生時に実行されてもよい。アプリケーションプログラム２０２の設定が変更されたときなど、ＶＭ２０１のライト負荷が大きく変化する場合に、実行されてもよい。ＶＭ配置変更プログラム４１１は、自計算機ノード１０１で動作しているＶＭ２０１を順次選択して、本フローを実行してもよい。
【０１３７】
ＶＭ配置変更プログラム４１１は、自計算機ノード１０１の空き容量が不足しているか判定する（ステップ１００１）。例えば、ＶＭ配置変更プログラム４１１は、容量管理テーブル３０４を参照し、残容量カラム３４２の値と閾値とを比較することによって、空き容量が不足しているか否か判定する。例えば、ＶＭ配置変更プログラム４１１は、最も多いドライブの残容量の値３４２と閾値とを比較する。
【０１３８】
自計算機ノード１０１の空き容量が不足していない場合（ステップ１００１：ＮＯ）、ＶＭ配置変更プログラム４１１は、自計算機ノード１０１の残ライト可能量が不足しているか判定する（ステップ１００６）。例えば、ＶＭ配置変更プログラム４１１は、最も多い残容量と閾値とを比較する。自計算機ノード１０１の残ライト可能量が不足していない場合（ステップ１００６：ＮＯ）、ＶＭ配置変更プログラム４１１は、本処理を終了する。
【０１３９】
自計算機ノード１０１の空き容量が不足している場合（ステップ１００１：ＹＥＳ）、又は、残ライト可能量が不足している場合（ステップ１００６：ＹＥＳ）、ＶＭ配置変更プログラム４１１は、移行先候補の計算機ノード１０１の情報を取得する（ステップ１００２）。ステップ１００２は、ステップ９０１と同様である。情報を取得する計算機ノード１０１は、予め限定されていてもよい。
【０１４０】
ＶＭ配置変更プログラム４１１は、対象のＶＭ２０１に対して、空き容量の要件を満たす計算機ノード１０１を決定する（ステップ１００３）。ステップ１００３はステップ９０２と同様である。
【０１４１】
情報を取得した計算機ノード１０１において、空き容量の要件を満たす計算機ノード１０１が存在しない場合（ステップ１００４：ＮＯ）、当該ＶＭ２０１を移行することができない。ＶＭ配置変更プログラム４１１は、エラーメッセージを管理端末（ユーザ端末）に出力する（ステップ１００５）。
【０１４２】
空き容量の要件を満たす計算機ノード１０１が存在する場合（ステップ１００４：ＹＥＳ）、ＶＭ配置変更プログラム４１１は、ステップ１００７〜１０１０を実行する。ステップ１００７〜Ｓ１００９は、ステップ９０４、９０５、９０８と同様である。
【０１４３】
空き容量及び残ライト可能量の要件を満たす移行先候補の計算機ノード１０１が存在する場合（ステップ１００４：ＹＥＳ、ステップ１００８：ＹＥＳ）、ＶＭ配置変更プログラム４１１は、ＶＭ移行プログラム４１３によって、ＶＭ２０１を当該計算機ノード１０１に移行する。ＶＭ２０１の移行方法の詳細は後述する。
【０１４４】
以上のようにして、ライト可能量と空き容量の条件を満たす適切な計算機ノード１０１にＶＭ２０１を移行することができる。
【０１４５】
図１０は、本実施形態に係るＶＭ移行プログラム４１３のフローチャートを示す。本処理は、ＶＭ２０１のライブマイグレーションとＶＭイメージデータの移行を同時に実行する。これにより、ＶＭ２０１によるローカルリードを維持しつつ、ＶＭ２０１を移行する。ローカルリードは、ローカルストレージからの、ネットワークを介さないデータリードである。
【０１４６】
移行先のＶＭ移行プログラム４１３は、移行先の計算機ノード１０１に対する移行元からのアクセスパスを作成する（ステップ１１０１）。例えば、ＶＭ移行プログラム４１３は、移行先の計算機ノード１０１からＶＭ２０１が移行元のボリュームにアクセス可能となるように、ログイン処理を実施する。
【０１４７】
次に、ＶＭ移行プログラム４１３は、移行先で仮想ボリュームを作成する（ステップ１１０２）。ＶＭ移行プログラム４１３は、移行元と同じサイズのボリュームを作成することが望ましい。次にＶＭ移行プログラム４１３は、ＶＭ２０１のライブマイグレーションを実行する（ステップ１１０３）。
【０１４８】
ＶＭ移行プログラム４１３は、ページを移行元から移行先にコピーする（ステップ１１０４）。例えば、ＶＭ移行プログラム４１３は、コピーポインタ（ボリュームの先頭から末端までの位置を表すシーケンシャルなポインタ）を持ち、コピーを順番にＬＢＡ順で実行していく。また、このときに、ステップ６０２やステップ７０９のコピー済みの判定に利用し、コピーポインタより前であれば、コピー済みで、後であれば、未コピーと判定できる。
【０１４９】
次に、ＶＭ移行プログラム４１３は、全コピーを実施したか判定する（ステップ１１０５）。例えば、コピーポインタがボリュームの末端に到達したら、ＶＭ移行プログラム４１３は、全コピーが完了したものとみなす。
【０１５０】
最後に、ＶＭ移行プログラム４１３は、移行元の仮想ボリュームとそのアクセスパスを消去する（ステップ１１０６）。仮想ボリュームの削除時には、その仮想ボリュームが使用していたページは、未使用のページとして開放され、使用可能な容量が増える。また、ネットワークＩ／Ｏに利用していたバッファ上のデータも開放してもよい。以上のようにして、ストレージＩ／Ｏを継続したままＶＭ２０１を移行できる。
【０１５１】
図１１は、本実施形態に係るネットワークＩ／Ｏ（送信）のフローチャートを示す。本処理は、異なる計算機ノード１０１のアプリケーションプログラム２０２間の通信時に、ハイパーバイザ２０３から呼ばれる。ネットワークＩ／Ｏプログラム４１４は、送信データのハッシュ値をチェックし、記憶ドライブ１１３又はバッファ３０６にライトしたデータかチェックする。
【０１５２】
対象データと同一のデータが送信先にすでに送信されたデータであれば、ネットワークＩ／Ｏプログラム４１４は、メタデータのみを送信する。そうではない場合、ネットワークＩ／Ｏプログラム４１４は、ミラーデータをメタデータと共に送信する。これにより、計算機ノード間のデータ転送量を削減する。
【０１５３】
図１１に示すように、ネットワークＩ／Ｏプログラム４１４は、送信対象データのハッシュ値を生成する（ステップ１２０１）。ネットワークＩ／Ｏプログラム４１４は、送信先の計算機ノード１０１に、同一データがすでに送信されているかチェックする（ステップ１２０２）。
【０１５４】
例えば、ネットワークＩ／Ｏプログラム４１４は、ページマッピングテーブル３０５を参照し、当該ハッシュ値のエントリがあるかを検索する。当該ハッシュ値のエントリが存在し、かつ、転送情報カラム３５２が当該送信先にデータを送信済みでないことを示す場合、データを当該送信先に送信し（ステップ１２０４）、データをバッファ３０６に書き込み（ステップ１２０５）、処理を終了する。ハッシュ値のエントリが存在しない場合も同様である。
【０１５５】
ネットワークＩ／Ｏプログラム４１４は、ページマッピングテーブル３０５を更新する。ネットワークＩ／Ｏプログラム４１４は、データをバッファ３０６にライトせず、ページマッピングテーブル３０５のハッシュ値のみを更新してもよい。送信先計算機ノード１０１は、データをバッファ３０６に保持する。
【０１５６】
データを送信済みの場合、ネットワークＩ／Ｏプログラム４１４は、メタデータのみを送信し（ステップ１２０３）、処理を終了する。メタデータは、例えば、ハッシュ値を含み、送信先でハッシュ値によりデータを参照できるようにする。
【０１５７】
図１２は、本実施形態に係るネットワークＩ／Ｏ（受信）のフローチャートを示す。まず、本処理の概要を説明する。本処理は、ＶＭ２０１間のアプリケーションによる通信時にハイパーバイザからコールバックされる。ネットワークＩ／Ｏの受信データを、そのまま破棄せずにバッファに一時的に保存しておくことで、再度同じデータが転送される場合に、データ転送の再発生を回避し、データ転送のオーバヘッドを削減する。
【０１５８】
図１２に示すように、ネットワークＩ／Ｏプログラム４１４は、受信データがメタデータか、データかを判定する（ステップ１３０１）。メタデータである場合、ネットワークＩ／Ｏプログラム４１４は、ページマッピングテーブル３０５を参照し、メタデータからデータ位置を算出し（ステップ１３０２）、データ位置（バッファやドライブなど）からデータをリードする（ステップ１３０３）。
【０１５９】
メタデータがハッシュ値であれは、ページマッピングテーブル３０５でそのハッシュ値で検索することで、データ位置を特定できる。パリティが生成され、当該対象データが存在していない場合、ネットワークＩ／Ｏプログラム４１４は、当該データが存在する計算機ノード１０１に問い合わせる、又は、パリティからデータを修復する。
【０１６０】
その後、ネットワークＩ／Ｏプログラム４１４は、データをアプリケーションプログラム２０２の受信領域に格納し（ステップ１３０５）、処理を終了する。また、受信データがメタデータではない場合（データである場合）、ネットワークＩ／Ｏプログラム４１４は、当該データをバッファ３０６にライトし（ステップ１３０４）、データ受信領域に当該データを格納する（ステップ１３０５）。以上に述べた処理により、図１１を参照して説明した送信側の処理と連携して、ネットワーク転送量を削減できる。
【０１６１】
上述のように、本実施形態は、ストレージとネットワークとコンピューティングを統合した計算機システム（ハイパーコンバージドシステム）における処理を効率化することができる。計算機システムは、計算機ノードのローカルストレージの残ライト可能量（寿命）の情報を取得し、ＶＭのライト負荷量に応じて、ＶＭの配置を変更する。
【０１６２】
ＶＭのライト負荷量とデータサイズに応じて、ＶＭとイメージデータの配置を決めることで、記憶ドライブの寿命消費を分散し、使用量容量を分散することができる。これにより、特定の計算機ノードのローカルストレージの寿命や容量が尽きる問題を回避できる。
【０１６３】
本実施形態は、ハイパーコンバージドシステム上で動作するスケーラブルなアプリケーション（ＮｏＳＱＬなど）によるローカルストレージへのライト量の増加を、データの重複排除とＥｒａｓｕｒｅ  Ｃｏｄｉｎｇにより低減し、さらにストレージ使用容量を効率化する。また、本実施形態は、容量や残ライト可能量の管理を各計算機ノードが行うため、しているため、スケーラビリティが高い。本実施形態により、大規模な計算機環境においても、保守回数を削減しつつ媒体のコストを低減できる。
【０１６４】
すでに転送済みのデータを転送することなくメタデータのみ転送することで、ネットワーク転送量及びストレージ消費量（ライト量）を削減できる。アプリケーションのレプリケーション動作によるストレージ消費（ライト量）を、ストレージのミラーリングに置き換えることにより、ストレージ消費量（ライト量）を削減できる。
【０１６５】
なお、本実形態で述べた書き込みの処理において、データの実体が自計算機ノードまたは他計算機ノードに存在する場合には、処理効率の向上のため、データの参照のみを修正し、実際のデータ書き込みを実施しない、という方法を組み合わせてもよい。
【０１６６】
また、バッファ量が多いほど、ストレージ処理やアプリケーションのネットワーク処理による、ネットワーク転送量やストレージ消費量（ライト量）を削減できる。バッファを記憶ドライブの記憶領域に割り当て、負荷（ライト量等）などに応じて、最適なバッファ量を動的に調整するようにしてもよい。
【０１６７】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１６８】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2018029820.tif 000003
【図２】
2018029820.tif 000004
【図３】
2018029820.tif 000005
【図４Ａ】
2018029820.tif 000006
【図４Ｂ】
2018029820.tif 000007
【図４Ｃ】
2018029820.tif 000008
【図４Ｄ】
2018029820.tif 000009
【図４Ｅ】
2018029820.tif 000010
【図５】
2018029820.tif 000011
【図６】
2018029820.tif 000012
【図７】
2018029820.tif 000013
【図８】
2018029820.tif 000014
【図９】
2018029820.tif 000015
【図１０】
2018029820.tif 000016
【図１１】
2018029820.tif 000017
【図１２】
2018029820.tif 000018
【国際調査報告】
2018029820.tif 000019
2018029820.tif 000020
2018029820.tif 000021