(57)【特許請求の範囲】
【請求項１】
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとを実行する情報処理装置であって、
前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリを備え、
共有データを送信する第１の仮想ＯＳにおいて、前記共有メモリのデータ共有領域に共有データを格納する第１格納処理部と、
前記共有データを受信する第２の仮想ＯＳにおいて、前記データ共有領域の更新状況を定期的に確認する更新判断部と、
前記データ共有領域が更新されている場合に、当該データ共有領域から前記共有データを読み出す第１読出処理部と
を備え、
前記第１の仮想ＯＳにおいて、前記データ共有領域に前記共有データを格納する際に、前記共有メモリに格納された第１のカウンタ値をインクリメントする第１カウンタ値更新部を備え、
前記第２の仮想ＯＳにおいて、前記データ共有領域から前記共有データを読み出す際に、前記共有メモリに格納された第２のカウンタ値をインクリメントする第２カウンタ値更新部を備え、
前記更新判断部は、前記第１のカウンタ値と前記第２のカウンタ値とを比較し、前記第１のカウンタ値と前記第２のカウンタ値とが不一致の場合に、前記データ共有領域が更新されていると判断する
ことを特徴とする、情報処理装置。
【請求項２】
前記更新判断部は、さらに、前記データ共有領域の更新状況を、前記第２の仮想ＯＳにおける処理の切り替え時、または、前記第２の仮想ＯＳにおける処理の非実行状態時のいずれかのタイミングで確認する
ことを特徴とする、請求項１に記載の情報処理装置。
【請求項３】
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとを実行する情報処理装置であって、
前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリを備え、
共有データを送信する第１の仮想ＯＳにおいて、前記共有メモリのデータ共有領域に共有データを格納する第１格納処理部と、
前記共有データを受信する第２の仮想ＯＳにおいて、前記データ共有領域の更新状況を定期的に確認する更新判断部と、
前記データ共有領域が更新されている場合に、当該データ共有領域から前記共有データを読み出す第１読出処理部と
を備え、
前記更新判断部は、さらに、前記データ共有領域の更新状況を、前記第２の仮想ＯＳにおける処理の切り替え時に確認する
ことを特徴とする、情報処理装置。
【請求項４】
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとを実行する情報処理装置であって、
前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリを備え、
共有データを送信する第１の仮想ＯＳにおいて、前記共有メモリのデータ共有領域に共有データを格納する第１格納処理部と、
前記共有データを受信する第２の仮想ＯＳにおいて、前記データ共有領域の更新状況を定期的に確認する更新判断部と、
前記データ共有領域が更新されている場合に、当該データ共有領域から前記共有データを読み出す第１読出処理部と
を備え、
前記更新判断部は、さらに、前記データ共有領域の更新状況を、前記第２の仮想ＯＳにおける処理の非実行状態時に確認する
ことを特徴とする、情報処理装置。
【請求項５】
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとを実行する情報処理装置であって、
前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリを備え、
前記第１の仮想ＯＳに共有データを送信する第２の仮想ＯＳにおいて、前記共有データを前記共有メモリのデータ共有領域に格納する第２格納処理部と、
前記第２の仮想ＯＳにおいて、前記第１の仮想ＯＳに対して、前記データ共有領域に前記共有データが格納されたことを割り込み信号により通知する通知部と、
第１の仮想ＯＳにおいて、前記データ共有領域から前記共有データを読み出す第２読出処理部と、
前記第２の仮想ＯＳにおいて、当該第２の仮想ＯＳにおける負荷状態を表す負荷状態値が閾値以上であるか否かを判断する負荷判断部と
を備え、
前記負荷判断部による判断結果において、前記第２の仮想ＯＳにおける前記負荷状態値が閾値以上である場合には、前記第２格納処理部が前記データ共有領域に前記共有データを格納し、前記第２読出処理部が前記データ共有領域から定期的に前記共有データを読み出す第１のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送
信し、
前記負荷判断部による判断結果において、当該第２の仮想ＯＳにおける前記負荷状態値が閾値未満である場合には、前記第２格納処理部が前記データ共有領域に前記共有データを格納し、前記通知部が割り込み信号による前記第１の仮想ＯＳに対する通知を行ない、前記第２読出処理部が、前記データ共有領域から前記共有データを読み出す第２のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送信する
ことを特徴とする、情報処理装置。
【請求項６】
第２の仮想ＯＳにおいて、前記第１のモードから前記第２のモードへまたは前記第２のモードから前記第１のモードへの動作モードの変更が行なわれた場合に、
前記動作モードの変更前での基準時間あたりの共有データの送信回数と、前記動作モードの変更後の基準時間あたりの共有データの送信回数とを比較し、前記動作モードの変更前での基準時間あたりの共有データの送信回数が、前記動作モードの変更後の基準時間あたりの共有データの送信回数よりも多い場合には、前記動作モードを変更前の状態に戻すことを特徴とする、請求項５記載の情報処理装置。
【請求項７】
前記動作モードの変更前での基準時間あたりの共有データの送信回数が、前記動作モードの変更後の基準時間あたりの共有データの送信回数よりも多い場合には、
前記閾値の値を予め規定された所定値分だけ引き上げる閾値更新部
を備えることを特徴とする、請求項６記載の情報処理装置。
【請求項８】
前記第１の仮想ＯＳは、ＳＡＮ制御を行なうＳＡＮ用オペレーティングシステムであり、
前記第２の仮想ＯＳは、ＮＡＳ制御を行なうＮＡＳ用オペレーティングシステムであり、
前記情報処理装置は、上位装置とストレージ装置との間の通信を処理することを特徴とする、請求項１〜７記載のいずれか１項に記載の情報処理装置。
【請求項９】
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとをコンピュータに実行させるプログラムであって、
前記第１の仮想ＯＳに共有データを送信する第２の仮想ＯＳにおいて、前記共有データを、前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリのデータ共有領域に格納し、
前記第２の仮想ＯＳにおいて、前記第１の仮想ＯＳに対して、前記データ共有領域に前記共有データが格納されたことを割り込み信号により通知し、
第１の仮想ＯＳにおいて、前記データ共有領域から前記共有データを読み出し、
前記第２の仮想ＯＳにおいて、当該第２の仮想ＯＳにおける負荷状態を表す負荷状態値が閾値以上であるか否かを判断し、
前記第２の仮想ＯＳにおける前記負荷状態値が閾値以上である場合には、前記第２の仮想ＯＳにおいて前記データ共有領域に前記共有データを格納し、第１の仮想ＯＳにおいて前記データ共有領域から定期的に前記共有データを読み出す第１のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送信し、
当該第２の仮想ＯＳにおける前記負荷状態値が閾値未満である場合には、前記第１の仮想ＯＳにおいて前記データ共有領域に前記共有データを格納し、前記第２の仮想ＯＳにおいて割り込み信号による前記第１の仮想ＯＳに対する通知を行ない、前記第１の仮想ＯＳにおいて前記データ共有領域から前記共有データを読み出す第２のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送信する
処理を前記コンピュータに実行させることを特徴とする、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びプログラムに関する。
【背景技術】
【０００２】
近年、単一のコンピュータ・アーキテクチャ上で複数のオペレーティングシステム（ＯＳ：Operating System）を動作させるコンピュータシステムが知られている。
例えば、コンピュータシステムに備えられた複数の処理モジュールと、メイン・メモリとをコンピュータシステム内の別々のパーティションとして構成し、異なるパーティション内で複数のＯＳを並行に実行する。
【０００３】
このようなコンピュータシステムにおいて、共用メモリを通じて異なるパーティションが相互に通信を行なうことが知られている。
また、共用メモリにデータが格納されたことは、割込み通知により他方のパーティションに通知される。
例えば、仮想化ＯＳであるハイパーバイザ（Hypervisor）上において複数の仮想ＯＳが実行されるシステムにおいては、ハイパーバイザ経由でＩＰＩ（Inter-Processor Interrupt）機能を使用することで、送信先の仮想ＯＳに割込み通知を行なう。ＩＰＩは、ハイパーバイザを介したゲストＯＳ（Guest OS）間における割り込み制御である。この割込みを受けた送信先の仮想ＯＳにおいては、共有メモリにおける前記領域をリードすることにより送信データの受け入れ準備を認識する。このようにして、仮想ＯＳ間でのデータ授受（通信）が完了する。なお、以下、ゲストＯＳをＧＯＳという場合がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２２０２１６号公報
【特許文献２】特表２００８−５３５０９９号公報
【特許文献３】国際公開第２００６／０２２１６１号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、このような従来のコンピュータシステムにおいて、ＩＰＩ送信処理に要する時間が占める割合が多く、このＩＰＩ送信処理がＯＳ間通信の処理性能のボトルネックとなっている。これにより、ＩＰＩ送信処理がＯＳ間通信の速度を低減させるという課題がある。
ＧＯＳにおいてＩＰＩを発行すると、ハイパーバイザ層まで処理が遷移するが、このハイパーバイザにおいてはソフトウェア処理のオーバーヘッドが大きく、ＩＰＩを発行するまでに時間がかかるからである。
【０００６】
１つの側面では、本発明は、仮想ＯＳ間通信における処理性能を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
このため、この情報処理装置は、第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとを実行する情報処理装置であって、前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリを備え、共有データを送信する第１の仮想ＯＳにおいて、前記共有メモリのデータ共有領域に共有データを格納する第１格納処理部と、前記共有データを受信する第２の仮想ＯＳにおいて、前記データ共有領域の更新状況を定期的に確認する更新判断部と、前記データ共有領域が更新されている場合に、当該データ共有領域から前記共有データを読み出す第１読出処理部とを備え、前記第１の仮想ＯＳにおいて、前記データ共有領域に前記共有データを格納する際に、前記共有メモリに格納された第１のカウンタ値をインクリメントする第１カウンタ値更新部を備え、前記第２の仮想ＯＳにおいて、前記データ共有領域から前記共有データを読み出す際に、前記共有メモリに格納された第２のカウンタ値をインクリメントする第２カウンタ値更新部を備え、前記更新判断部は、前記第１のカウンタ値と前記第２のカウンタ値とを比較し、前記第１のカウンタ値と前記第２のカウンタ値とが不一致の場合に、前記データ共有領域が更新されていると判断する。
【発明の効果】
【０００８】
一実施形態によれば、仮想ＯＳ間通信における処理性能を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】実施形態の一例としてのストレージ装置のハードウェア構成を模式的に示す図である。
【図２】実施形態の一例としてのストレージ装置におけるハイパーバイザ上の複数のＯＳを模式的に示す図である。
【図３】実施形態の一例としてのストレージ装置におけるハイパーバイザ上のＮＡＳ用ＯＳ及びＳＡＮ用ＯＳの機能構成を模式的に示す図である。
【図４】実施形態の一例としてのストレージ装置のハイパーバイザ上におけるＮＡＳ用ＯＳ及びＳＡＮ用ＯＳの詳細な機能構成を示す図である。
【図５】実施形態の一例としてのストレージ装置におけるＧＯＳ間通信を説明する図である。
【図６】実施形態の一例としてのストレージ装置におけるＧＯＳ間通信部の機能構成を示す図である。
【図７】実施形態の一例としてのストレージ装置における更新判断部の第１の更新判断タイミングを例示する図である。
【図８】実施形態の一例としてのストレージ装置における更新判断部の第２の更新判断タイミングを例示する図である。
【図９】実施形態の一例としてのストレージ装置のＧＯＳ間通信部によるＮＡＳ用ＯＳからＳＡＮ用ＯＳへのゲストＯＳ間通信を説明するための図である。
【図１０】（ａ），（ｂ）は実施形態の一例としてのストレージ装置のＧＯＳ間通信部によるＳＡＮ用ＯＳからＮＡＳ用ＯＳへのゲストＯＳ間通信を説明するための図である。
【図１１】実施形態の一例としてのストレージ装置１における、ＳＡＮ用ＯＳからＮＡＳ用ＯＳへのデータ通信時のＩＰＩモードからポーリングモードへの変更時の処理を説明するためのフローチャートである。
【図１２】実施形態の一例としてのストレージ装置におけるＳＡＮ用ＯＳからＮＡＳ用ＯＳへの共有データの送信回数の実測例を示す図である。
【図１３】実施形態の一例としてのストレージ装置におけるＳＡＮ用ＯＳからＮＡＳ用ＯＳへの共有データの送信回数の実測例を示す図である。
【図１４】実施形態の一例としてのストレージ装置におけるＳＡＮ用ＯＳからＮＡＳ用ＯＳへのデータ通信時のポーリングモードからＩＰＩモードへの変更時の処理を説明するためのフローチャートである。
【図１５】実施形態の一例としてのストレージ装置におけるＳＡＮ用ＯＳからＮＡＳ用ＯＳへの共有データの送信回数の実測例を示す図である。
【図１６】実施形態の一例としてのストレージ装置におけるＳＡＮ用ＯＳからＮＡＳ用ＯＳへの共有データの送信回数の実測例を示す図である。
【図１７】実施形態の一例としてのストレージ装置におけるＳＡＮ用ＯＳからＮＡＳ用ＯＳへの共有データの送信回数の実測例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本情報処理装置及びプログラムに係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１１】
（Ａ）構成
図１は実施形態の一例としてのストレージ装置１のハードウェア構成を模式的に示す図である。
本ストレージ装置１は、ドライブエンクロージャ（ＤＥ：Drive Enclosure）３０に格納された記憶装置３１を仮想化して、仮想ストレージ環境を形成する。そしてストレージ装置１は、仮想ボリュームを上位装置である図示しないホスト装置に提供する。
【００１２】
本ストレージ装置１は、１以上のホスト装置に対して通信可能に接続されている。ホスト装置とストレージ装置１とは、後述するＣＡ（Communication Adapter）１０１，１０２により接続されている。
ホスト装置は、例えば、サーバ機能をそなえた情報処理装置であり、本ストレージ装置１との間において、ＮＡＳ（Network Attached Storage）やＳＡＮ（Storage Area Network）のコマンドを送受信する。このホスト装置は、例えば、ストレージ装置１に対してＮＡＳにおけるリード／ライト等のディスクアクセスコマンドを送信することにより、ストレージ装置１が提供するボリュームにデータの書き込みや読み出しを行なう。
【００１３】
そして、本ストレージ装置１は、ホスト装置からボリュームに対して行なわれる入出力要求（例えば、リードコマンドやライトコマンド）に応じて、このボリュームに対応する実ストレージに対して、データの読み出しや書き込み等の処理を行なう。なお、ホスト装置からの入出力要求のことをＩ／ＯコマンドもしくはＩ／Ｏ要求という場合がある。
本ストレージ装置１は、図１に示すように、複数（本実施形態では２つ）のＣＭ（Controller Module）１００ａ，１００ｂ及び１つ以上（図１に示す例では１つ）のドライブエンクロージャ３０をそなえる。
【００１４】
ドライブエンクロージャ３０は、１以上（図１に示す例では４つ）の記憶装置（物理ディスク）３１を搭載可能であり、これらの記憶装置３１の記憶領域（実ボリューム，実ストレージ）を、本ストレージ装置１に対して提供する。
例えば、ドライブエンクロージャ３０は、複数段のスロット（図示省略）をそなえ、これらのスロットに、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）等の記憶装置３１を挿入することにより、実ボリューム容量を随時変更することができる。又、複数の記憶装置３１を用いてＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を構成してもよい。
【００１５】
ドライブエンクロージャ３０は、ＣＭ１００ａのデバイスアダプタ（Device Adapter：ＤＡ）１０３，１０３とＣＭ１００ｂのＤＡ１０３，１０３とそれぞれ接続されている。そして、ドライブエンクロージャ３０には、ＣＭ１００ａ，１００ｂのいずれからもアクセスして、データの書き込みや読み出しを行なうことができる。すなわち、ドライブエンクロージャ３０の記憶装置３１に対して、ＣＭ１００ａ，１００ｂのそれぞれを接続することにより、記憶装置へのアクセス経路が冗長化されている。
【００１６】
コントローラエンクロージャ４０は、１以上（図１に示す例では２つ）のＣＭ１００ａ，１００ｂを備える。
ＣＭ１００ａ，１００ｂは、ストレージ装置１内の動作を制御するコントローラ（ストレージ制御装置，情報処理装置）であり、ホスト装置から送信されるＩ／Ｏコマンドに従って、ドライブエンクロージャ３０の記憶装置３１へのアクセス制御等、各種制御を行なう。又、ＣＭ１００ａ，１００ｂは互いにほぼ同様の構成を有している。以下、ＣＭを示す符号としては、複数のＣＭのうち１つを特定する必要があるときには符号１００ａ，１００ｂを用いるが、任意のＣＭを指すときには符号１００を用いる。又、ＣＭ１００ａをＣＭ＃１と、ＣＭ１００ｂをＣＭ＃２と、それぞれ表す場合がある。
【００１７】
また、図中、同一の符号は同一もしくは略同一の部分を示しているので、その詳細な説明は省略する。
ＣＭ１００ａ，１００ｂは二重化されており、通常は、ＣＭ１００ａがプライマリとして各種制御を行なう。しかし、このプライマリＣＭ１００ａの故障時には、セカンダリのＣＭ１００ｂがプライマリとしてＣＭ１００ａの動作を引き継ぐ。
【００１８】
ＣＭ１００ａ，１００ｂはＣＡ１０１，１０２を介して、それぞれホスト装置に接続される。そして、これらのＣＭ１００ａ，１００ｂは、ホスト装置から送信されるリード／ライト等のコマンドを受信し、ＤＡ１０３等を介して記憶装置３１の制御を行なう。又、ＣＭ１００ａ，１００ｂは、ＰＣＩｅ（Peripheral Component Interconnect Express）等の図示しないインタフェースを介して相互に接続されている。
【００１９】
ＣＭ１００は、図１に示すように、ＣＡ１０１，１０２と複数（図１に示す例では２つ）のＤＡ１０３，１０３とをそなえるとともに、ＣＰＵ（Central Processing Unit）１
１０，メモリ１０６，ＳＳＤ１０７及びＩＯＣ１０８をそなえる。
ＣＡ１０１，１０２は、ホスト装置等から送信されたデータを受信したり、ＣＭ１００から出力するデータをホスト装置等に送信する。すなわち、ＣＡ１０１，１０２は、ホスト装置等の外部装置との間でのデータの入出力（Ｉ／Ｏ）を制御する。
【００２０】
ＣＡ１０１は、ＮＡＳを介してホスト装置と通信可能に接続するネットワークアダプタ
であり、例えば、ＬＡＮ（Local Area Network）インタフェース等である。
ＣＭ１００は、このＣＡ１０１により図示しない通信回線を介してホスト装置等とＮＡＳにより接続され、Ｉ／Ｏコマンドの受信やデータの送受信等を行なう。図１に示す例においては、ＣＭ１００ａ，１００ｂのそれぞれに２つのＣＡ１０１，１０１がそなえられている。
【００２１】
ＣＡ１０２は、ＳＡＮを介してホスト装置と通信可能に接続するネットワークアダプタであり、例えば、ｉＳＣＳＩ（Internet Small Computer System Interface）インタフェースやＦＣ（Fibre Channel）インタフェースで
ある。
ＣＭ１００は、このＣＡ１０２により図示しない通信回線を介してホスト装置等とＳＡＮにより接続され、Ｉ／Ｏコマンドの受信やデータの送受信等を行なう。図１に示す例においては、ＣＭ１００ａ，１００ｂのそれぞれに１つのＣＡ１０２がそなえられている。
【００２２】
ＤＡ１０３は、ドライブエンクロージャ３０や記憶装置３１等と通信可能に接続するためのインタフェースである。ＤＡ１０３は、ドライブエンクロージャ３０の記憶装置３１が接続され、ＣＭ１００は、ホスト装置から受信したＩ／Ｏコマンドに基づき、これらの記憶装置３１に対するアクセス制御を行なう。
ＣＭ１００は、このＤＡ１０３を介して、記憶装置３１に対するデータの書き込みや読み出しを行なう。又、図１に示す例においては、ＣＭ１００ａ，１００ｂのそれぞれに２つのＤＡ１０３，１０３がそなえられている。そして、ＣＭ１００ａ，１００ｂのそれぞれにおいて、各ＤＡ１０３にドライブエンクロージャ３０が接続されている。
【００２３】
これにより、ドライブエンクロージャ３０の記憶装置３１には、ＣＭ１００ａ，１００ｂのいずれからもデータの書き込みや読み出しを行なうことができる。
ＳＳＤ１０７は、ＣＰＵ１１０が実行するプログラムや種々のデータ等を格納する記憶装置である。
メモリ１０６は、種々のデータやプログラムを一時的に格納する記憶装置であり、図示しないメモリ領域とキャッシュ領域とをそなえる。キャッシュ領域は、ホスト装置から受信したデータや、ホスト装置に対して送信するデータを一時的に格納する。メモリ領域には、ＣＰＵ１１０がプログラムを実行する際に、データやプログラムを一時的に格納・展開して用いる。
【００２４】
ＩＯＣ（Input Output Controller）１０８は、ＣＭ１００内におけるデータ転送を制御する制御装置であり、例えば、メモリ１０６に格納されたデータをＣＰＵ１１０を介することなく転送させるＤＭＡ（Direct Memory Access）転送を実現する。
ＣＰＵ１１０は、種々の制御や演算を行なう処理装置であり、マルチコアプロセッサ（マルチＣＰＵ）である。ＣＰＵ１１０は、ＳＳＤ１０７等に格納されたＯＳやプログラムを実行することにより、種々の機能を実現する。
【００２５】
ＣＰＵ１１０は、仮想化ＯＳであるハイパーバイザ２００を実行し、このハイパーバイザ上で複数の仮想マシン（ＶＭ）を実行することで複数のＯＳ（仮想ＯＳ）を実行させることができる。以下、このハイパーバイザ２００上で動作するＯＳをゲストＯＳもしくはＧＯＳという場合がある。
複数のゲストＯＳはＣＰＵ１１０やメモリ１０６，ＳＳＤ１０７等のハードウェア資源を共有することができる。
【００２６】
なお、複数のＣＰＵ１１０を備え、これらの複数のＣＰＵ１１０上でハイパーバイザ２００を実行してもよい。
図２は実施形態の一例としてのストレージ装置１におけるハイパーバイザ２００上の複数のＯＳを模式的に示す図である。
本実施形態においては、図２に示すように、ハイパーバイザ２００上で、ＳＡＮ用ＯＳ４００とＮＡＳ用ＯＳ３００とを実行する。
【００２７】
ＳＡＮ用ＯＳ４００は、ＳＡＮ制御を行なうＯＳ（第２の仮想ＯＳ）であり、カーネル４０１とファンクションファームウェア４０２とを備える。ＳＡＮ用ＯＳ４００としては既知の種々のＯＳを用いることができるが、本実施形態においてはＷｉｎｄ  Ｒｉｖｅｒ社のＶｘＷｏｒｋｓ（登録商標）を用いた例を示す。
ＮＡＳ用ＯＳ３００は、ＮＡＳ制御を行なうＯＳ（第１の仮想ＯＳ）であり、カーネル３０１とファンクションファームウェア３０２とを備える。ＮＡＳ用ＯＳ３００としては既知の種々のＯＳを用いることができるが、本実施形態においてはＬｉｎｕｘ（登録商標）を用いた例を示す。
【００２８】
そして、ＣＰＵ１１０が、ストレージ制御プログラムを実行することにより、上述したハイパーバイザ２００，ＳＡＮ用ＯＳ４００及びＮＡＳ用ＯＳ３００として機能する。
なお、これらのハイパーバイザ２００，ＳＡＮ用ＯＳ４００及びＮＡＳ用ＯＳ３００としての機能を実現するためのプログラム（ストレージ制御プログラム）は、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００２９】
ハイパーバイザ２００，ＳＡＮ用ＯＳ４００及びＮＡＳ用ＯＳ３００としての機能を実現する際には、内部記憶装置（本実施形態ではメモリ１０６やＳＳＤ１０７）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＰＵ１１０）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【００３０】
図３は実施形態の一例としてのストレージ装置１におけるハイパーバイザ２００上のＮＡＳ用ＯＳ３００及びＳＡＮ用ＯＳ４００の機能構成を模式的に示す図である。
ＮＡＳ用ＯＳ３００は、図３に示すように、Ｓａｍｂａ／ＮＦＳ（Network File System）サーバソフトウェア３５０，ファイルシステム３４０，ＯＳシステム制御部３９０及びＳＣＳＩドライバ群３６０を備える。
【００３１】
一方、ＳＡＮ用ＯＳ４００は、インテリジェントＣＡエージェント４１０を備える。又、ＮＡＳ用ＯＳ３００とＳＡＮ用ＯＳ４００とを連結するＧＯＳ間通信部５００が備えられている。
Ｓａｍｂａ／ＮＦＳサーバソフトウェア３５０は、ファイルシステムベースのアプリケーションであり、ホスト装置から受信したＮＡＳのＩ／Ｏ要求をＳａｍｂａやＮＦＳで受信して、ファイルシステム３４０に受け渡す。
【００３２】
ファイルシステム３４０は、例えば、ＶＦＳ（Virtual file system）やｅｘｔ３等のファイルシステムであり、Ｓａｍｂａ／ＮＦＳサーバソフトウェア３５０から受け取ったＩ／Ｏ要求を関連するローカルファイルシステムごとのＡＰＩに変換し、ＳＣＳＩドライバ群３６０に受け渡す。
ＯＳシステム制御部３９０は、ＮＡＳ用ＯＳとしての一般的な各種制御を行なうものであり、例えば、デバイスの追加要求等のイベント要求をＳＣＳＩドライバ群３６０（ＬＬＤ３１０）に発行する。
【００３３】
ＳＣＳＩドライバ群３６０は、ＳＣＳＩデバイスを制御するための複数のドライバである。
ＳＣＳＩドライバ群３６０は、図３に示すように、ＵＬＤ（Upper Level  Driver；上位層）３３０，ＭＬＤ（Middle Level Driver；中位層）３２０及びＬＬＤ（Lower Level Driver；下位層）３１０の３階層で構成された階層化アーキテクチャを有する。
【００３４】
ＵＬＤ３３０は、ＳＣＳＩのカーネルと主要なデバイス・タイプのドライバの最上位レベルのインタフェースを備える。
このＵＬＤ３３０には、ＳＤ，ＳＲ，ＳＴ及びＳＧの４種のドライバが用意されており、これらのドライバは、ＳＣＳＩデバイスの種類によって使い分けられる。ここで、ＳＤはＨＤＤへのアクセス時に使用され、ブロック型である。ＳＲは、ＣＤ−ＲＯＭへのアクセス時に使用され、ブロック型である。ＳＴは、テープ装置へのアクセス時に使用され、ブロック型である。ＳＧは、ホストバスアダプタ（ハード）を介さない場合に使用される擬似ホストアダプタであり、キャラクタ型である。
【００３５】
ＭＬＤ３２０は、ＵＬＤ３３０とＬＬＤ３１０とに向けてＳＣＳＩドライバＡＰＩ（Application Programming Interface，ライブラリ）を提供する。ＳＣＳＩドライバはこのＭＬＤ３２０を読み出して制御を行なう。
ＬＬＤ３１０は、ＳＣＳＩに適用可能な物理インタフェースに対応する実際のドライバを備え、ホストバスアダプタに相当する。ＬＬＤ３１０は、ハードインタフェースを制御するドライバ層であり、使用されるドライバは装置固有である。例えば、このＬＬＤ３１０には、図４に示すように、ｉＳＣＳＩドライバ３１３やＦＣドライバ３１２が備えられる。更に、本ストレージ装置１においては、このＬＬＤ３１０にインテリジェントＳＣＳＩドライバ３１１を備える。なお、ＵＬＤ３３０やＭＬＤ３２０には既存のＬｉｎｕｘドライバを使用することができる。
【００３６】
ホスト装置からのＩ／Ｏ要求は、ＮＡＳ用ＯＳ３００において、図３に示すように、Ｓａｍｂａ／ＮＦＳサーバソフトウェア３５０，ファイルシステム３４０、ＵＬＤ３３０及びＭＬＤ３２０を介してＬＬＤ３１０のインテリジェントＳＣＳＩドライバ３１１に到達する。
インテリジェントＳＣＳＩドライバ３１１は、ファイルシステム３４０からのＩ／Ｏ要求を受け付け、このＩ／Ｏ要求を後述するＧＯＳ間通信部５００経由でＳＡＮ用ＯＳ４００側のインテリジェントＣＡエージェント４１０に送信する。なお、このＩ／Ｏ要求は、インテリジェントＳＣＳＩドライバ３１１においてＳＣＳＩコマンドの形式で要求を受け付けられる。
【００３７】
また、インテリジェントＳＣＳＩドライバ３１１は、送信したＳＣＳＩコマンドに対する応答（結果）を、インテリジェントＣＡエージェント４１０から受信し、この受け取った結果をＳＣＳＩドライバレイヤ３６０のＵＬＤ３３０へ通知する。
インテリジェントＳＣＳＩドライバ３１１は、ホスト装置等からＮＡＳのＩ／Ｏ要求を受信すると、ＳＡＮ専用ボリューム５０１（図４参照）への直接のアクセスを抑止し、後述するＧＯＳ間通信部５００を介したゲストＯＳ間通信により、ＳＡＮ用ＯＳ４００に対してこのＮＡＳのＩ／Ｏ要求を送信する。
【００３８】
さらに、インテリジェントＳＣＳＩドライバ３１１は、ＮＡＳ用ＯＳ３００のＯＳシステム制御部３９０から受けるデバイスに関するイベント要求を処理する。例えば、このイベント要求が、デバイスの追加要求である場合には、インテリジェントＳＣＳＩドライバ３１１は、この追加要求を受けて“ /dev”ディレクトリにデバイスファイルを追加（定義）する。
【００３９】
図４は実施形態の一例としてのストレージ装置１のハイパーバイザ２００上におけるＮＡＳ用ＯＳ３００及びＳＡＮ用ＯＳ４００の詳細な機能構成を示す図である。
ＮＡＳ用ＯＳ３００は、図４に示すように、ＳＣＳＩドライバレイヤ３６０，ファイルシステム３４０，Ｓａｍｂａ／ＮＦＳサーバソフトウェア３５０，ＳＣＳＩアプリケーション３７０，及びネットワークレイヤ３８０を備える。
【００４０】
ネットワークレイヤ３８０は、ネットワーク層での通信制御を行ない、例えば、ホスト装置からＮＡＳのＩ／Ｏ要求を受信する。
ＳＣＳＩドライバレイヤ３６０は、ＳＣＳＩデバイスを制御するためのドライバ群であり、図３に示したＳＣＳＩドライバ群３６０に相当する。
ＮＡＳ用ＯＳ３００においては、ファイルシステム３４０を介して、このＳＣＳＩドライバレイヤ３６０にＩ／Ｏ制御要求が行なわれる。
【００４１】
このＳＣＳＩドライバレイヤ３６０において、ＳＣＳＩディスクドライバが図３に示したＵＬＤ３３０に相当し、コモンサービスがＭＬＤ３２０に相当する。
また、ＳＣＳＩドライバレイヤ３６０においては、前述したＬＬＤ３１０に相当する、ｉＳＣＳＩドライバ３１３やＦＣドライバ３１２を備える。これらのＮＡＳ用ＯＳ３００としての各部の機能は、例えば、Ｌｉｎｕｘ等において既知であり、その詳細な説明を省略する。
【００４２】
そして、本ストレージ装置１においては、このＳＣＳＩドライバレイヤ３６０のＬＬＤ３１０に、上述したインテリジェントＳＣＳＩドライバ３１１が備えられる。
ＳＡＮ用ＯＳ４００は、図４に示すように、インテリジェントＣＡドライバ４２０，ターゲットドライバ４３０，ＣＡスレッド４４０，ベーシックコントロール４５０，バックグランドコントロール４６０，ＦＣ−ＣＡドライバ４２５，ｉＳＣＳＩ−ＣＡドライバ４２４及びＳＡＳ−ＣＡドライバ４２３を備える。
【００４３】
なお、これらのうち、ターゲットドライバ４３０，ＣＡスレッド４４０，ベーシックコントロール４５０，バックグランドコントロール４６０，ＦＣ−ＣＡドライバ４２５，ｉＳＣＳＩ−ＣＡドライバ４２４及びＳＡＳ−ＣＡドライバ４２３としての機能は、ＶｘＷｏｒｋｓ等のＳＡＮ用ＯＳ４００において既知であり、その説明は省略する。
インテリジェントＣＡドライバ４２０は、ＳＡＮ用ＯＳ４００におけるＳＡＮ制御のチャネルアダプタドライバ層に追加されるＮＡＳの仮想ドライバ層である。このインテリジェントＣＡドライバ４２０は、ＮＡＳ用ＯＳ３００との間でＮＡＳのＩ／Ｏ要求や応答の授受を行なう。このインテリジェントＣＡドライバ４２０は、ＳＣＳＩコマンドキュー４２１及びＳＣＳＩステータスキュー４２２を備える。
【００４４】
ＳＣＳＩコマンドキュー４２１には、例えば、ＮＡＳ用ＯＳ３００から受信するＩ／Ｏコマンドが格納され、ＳＣＳＩステータスキュー４２２には、ＮＡＳ用ＯＳ３００に応答するステータス情報等が格納される。
ターゲットドライバ４３０には、インテリジェントＣＡエージェント４１０が備えられる。このインテリジェントＣＡエージェント４１０は、ターゲットドライバ４３０に追加されたＮＡＳ専用機能であり、ゲストＯＳ間通信を介して受信されたＮＡＳ用ＯＳ３００からのＩ／Ｏ要求を制御するブロックである。
【００４５】
ＣＡスレッド４４０には、オプティマイズドＮＡＳＩ／Ｏレイヤ４５１が備えられている。オプティマイズドＮＡＳＩ／Ｏレイヤ４５１は、ＮＡＳ用ＯＳ３００からのＩ／Ｏ要求を処理するものであり、ＳＡＮのＣＡスレッド（ＣＡドライバを含む）をカスタマイズしたものである。
さらに、ハイパーバイザ２００上においては、１つ以上のＳＡＮ専用ボリューム５０１やＮＡＳ専用ボリューム５０２が備えられる。ＳＡＮ専用ボリューム５０１は、ＳＡＮによるＩ／Ｏ要求が行なわれる記憶領域であり、ＮＡＳ用ボリューム５０２は、ＮＡＳによるＩ／Ｏ要求が行なわれる記憶領域である。すなわち、これらのＳＡＮ専用ボリューム５０１やＮＡＳ専用ボリューム５０２はゲストＯＳ専用ボリュームである。
【００４６】
これらのＳＡＮ専用ボリューム５０１やＮＡＳ専用ボリューム５０２は、例えば、図示しない管理装置により設定・管理がされる。
ＧＯＳ間通信部５００は、ゲストＯＳ間でのデータの授受を行なうものであり、本ストレージ装置１においては、ＮＡＳ用ＯＳ（第１の仮想ＯＳ）３００とＳＡＮ用（第２の仮想ＯＳ）ＯＳ４００との間でデータの授受を行なう。具体的には、例えば、ＮＡＳ用ＯＳ３００において受信したＩ／Ｏ要求（ＳＣＳＩコマンド）をインテリジェントＳＣＳＩドライバ３１１からＳＡＮ用ＯＳ４００側のインテリジェントＣＡエージェント４１０に受け渡す。
【００４７】
また、ＧＯＳ間通信部５００は、このＩ／Ｏ要求に対する応答（結果）を、ＳＡＮ用ＯＳ４００のインテリジェントＣＡエージェント４１０からＮＡＳ用ＯＳ３００のインテリジェントＳＣＳＩドライバ３１１に受け渡す。
図５は実施形態の一例としてのストレージ装置１におけるＧＯＳ間通信を説明する図、図６はＧＯＳ間通信部５００の機能構成を示す図である。
【００４８】
ＧＯＳ間通信部５００は、これらのＳＡＮ用ＯＳ４００とＮＡＳ用ＯＳ３００とのそれぞれにＧＯＳ間通信ドライバ５１０を設けることで、ゲストＯＳ間の通信を制御する。以下、ＳＡＮ用ＯＳ４００に備えられるＧＯＳ間通信ドライバを符号５１０ｂを用いて表し、ＮＡＳ用ＯＳ３００に備えられるＧＯＳ間通信ドライバを符号５１０ａを用いて表す。
図６に示すように、ＧＯＳ間通信ドライバ５１０ａは、第１送信処理部１１，モード確認部２５，第２受信処理部２６及び第３受信処理部２７としての機能を備える。
【００４９】
なお、モード確認部２５，第２受信処理部２６及び第３受信処理部２７としての機能は、ＮＡＳ用ＯＳ３００上において受信処理タスクとしてアプリケーションレベルで実装される。
また、ＧＯＳ間通信ドライバ５１０ｂは、第１受信処理部１２，負荷判断部２１，第２送信処理部２２，第３送信処理部２３及び閾値更新部２４としての機能を備える。
【００５０】
なお、第１受信処理部１２，負荷判断部２１，第２送信処理部２２，第３送信処理部２３及び閾値更新部２４としての機能もＳＡＮ用ＯＳ４００上においてアプリケーションレベルで実装される。
ＧＯＳ間通信には、ＮＡＳ用ＯＳ３００とＳＡＮ用ＯＳ４００とで共有される共有メモリ５２０が用いられる。
【００５１】
共有メモリ５２０は、ＮＡＳ用ＯＳ３００及びＳＡＮ用ＯＳ４００の双方からデータのリード及びデータのライトが可能な記憶装置である。この共有メモリ５２０には、データ共有領域５２１，送信カウンタ値格納領域５２２，受信カウンタ値格納領域５２３及びモード情報格納領域５２４が備えられる。
データ共有領域５２１には、一方のＧＯＳから他のＧＯＳへ受け渡される（送信される）データ（共有データ）が格納される。すなわち、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へ送信されるデータと、ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へ送信されるデータがそれぞれ格納される。
【００５２】
なお、このデータ共有領域５２１において、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へ送信されるデータの格納位置と、ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へ送信されるデータの格納位置とは、別々設けられることが望ましい。
送信カウンタ値格納領域５２２には、送信カウンタ値（第１のカウンタ値）が格納される。送信カウンタ値は、後述する送信カウンタ更新部１１２によって更新され、また後述する更新判断部１２２によって読み出される。
【００５３】
受信カウンタ値格納領域５２３には、受信カウンタ値が格納される。受信カウンタ値は、後述する受信カウンタ更新部１２３によって更新され、また後述する更新判断部１２２によって読み出される。
モード情報格納領域５２４には、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ送信についてのモードを表すモード情報が格納される。このモード情報は、後述する負荷判断部２１によって設定されるものであり、その詳細については後述する。
【００５４】
共有メモリ５２０としては、例えば、プライマリＣＭ１００ａに備えられたメモリ１０６の記憶領域の一部を用いてもよく、また、メモリ１０６とは別にメモリを備えてもよい。また、共有メモリ５２０はプライマリＣＭ１００ａの外部に備えてもよい。
ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へのデータ通信には、第１送信処理部１１及び第１受信処理部１２が用いられる。
【００５５】
第１送信処理部１１は、図６に示すように、第１格納処理部１１１，送信カウンタ更新部１１２を備える。
また、第１受信処理部１２は、第１読出処理部１２１，更新判断部１２２及び受信カウンタ更新部１２３を備える。
第１格納処理部（第１格納処理部）１１１は、共有データの送信元であるＮＡＳ用ＯＳ３００において、ＳＡＮ用ＯＳ４００に送信するデータ（共有データ）を、共有メモリ５２０のデータ共有領域５２１に格納する。
【００５６】
送信カウンタ更新部１１２は、共有データの送信元であるＮＡＳ用ＯＳ３００において、第１格納処理部１１１がデータ共有領域５２１に共有データを格納する際に、送信カウンタ値格納領域５２２に格納されている送信カウンタ値をインクリメントする。すなわち、送信カウンタ更新部１１２は、共有メモリ５２０に格納された送信カウンタ値（第１のカウンタ値）をインクリメントする第１カウンタ値更新部として機能する。
【００５７】
第１読出処理部１２１は、共有データの送信先であるＳＡＮ用ＯＳ４００において、ＮＡＳ用ＯＳ３００から送信されるデータ（共有データ）を、共有メモリ５２０のデータ共有領域５２１から読み出す。このデータ共有領域５２１から読み出された共有データは、例えば、共有メモリ５２０に備えられたＳＡＮ用ＯＳ４００用の領域に移動され、ＳＡＮ用ＯＳ４００によって用いられる。
【００５８】
受信カウンタ更新部１２３は、共有データの送信先であるＳＡＮ用ＯＳ４００において、第１読出処理部１２１が共有メモリ５２０のデータ共有領域５２１から共有データを読み出す際に、受信カウンタ値格納領域５２３に格納されている受信カウンタ値をインクリメントする。すなわち、受信カウンタ更新部１２３は、共有メモリ５２０に格納された受信カウンタ値（第２のカウンタ値）をインクリメントする第２カウンタ値更新部として機能する。
【００５９】
更新判断部１２２は、共有データの送信先であるＳＡＮ用ＯＳ４００において、共有メモリ５２０のデータ共有領域５２１の更新状況をポーリング（polling）により定期的に確認する。
更新判断部１２２は、送信カウンタ値格納領域５２２に格納されている送信カウンタ値と、受信カウンタ値格納領域５２３に格納されている受信カウンタ値とを比較する。そして、更新判断部１２２は、これらの送信カウンタ値と受信カウンタ値とが不一致の場合に、共有メモリ５２０のデータ共有領域５２１が更新された、すなわち、ＮＡＳ用ＯＳ３００から送信される新たな共有データがデータ共有領域５２１に格納されたと判断する。
【００６０】
そして、更新判断部１２２は、このような共有データがデータ共有領域５２１に格納されたか否かの確認をポーリングより定期的に実行する。
図７は実施形態の一例としてのストレージ装置１における更新判断部１２２の第１の更新判断タイミングを例示する図である。
更新判断部１２２には、図示しないタイマから定期的な割り込み（タイマ割り込み）が入力されるようになっており、第１の更新判断タイミングとして、このタイマ割り込みが入力されたタイミングで、データ共有領域５２１の更新状況をポーリングする。
【００６１】
図７に示すように、データ共有領域５２１の更新状況のポーリング（確認）は、ＣＰＵ１１０によって何らかの処理（図７に示す例においてはタスクＡ，Ｂ）が実行されている場合や、アイドル（Idle）中であっても、タイマ割り込みが入力されるとポーリングが実行される。
また、更新判断部１２２は、データ共有領域５２１の更新状況のポーリングを、実行する処理の切り替え時（タスク切替時、スレッド切替時）や、処理の非実行状態（アイドル時）にも実施する。
【００６２】
なお、更新判断部１２２及び受信カウンタ更新部１２３としての機能は、ＳＡＮ用ＯＳ４００上においてスケジューラとしてアプリケーションレベルで実装される。
上述の如くタイマ割り込みをきっかけにデータ共有領域５２１の更新状況をポーリングする場合に、タイマ割り込みの周期が長くすると、割込み要因の発生から検出までに時間を要する。その一方で、タイマ割り込みの周期を短くすると、ＣＰＵ１１０の負荷が高くなり、他の処理に支障が生じるおそれがある。
【００６３】
そこで、本ストレージ装置１において更新判断部１２２は、上述したタイマ割り込みに加えて、タスクの切れ間、スレッドの切れ間及びアイドル中の各タイミングでもデータ共有領域５２１の更新状況をポーリングする。
ここで、タスクの切れ間とはタスクが切り替えられるタイミングであり、スレッドの切れ間とはスレッドが切り替えられるタイミングである。アイドル中とは稼動中のＣＰＵ１１０やＯＳが遊休状態にあり、処理を実行していない状態（処理の非実行状態）である。
【００６４】
図８は実施形態の一例としてのストレージ装置１における更新判断部１２２の第２の更新判断タイミングを例示する図である。
この図８に示す例においては、符号Ｐ１〜Ｐ４によって示される各タイミング（第２の更新判断タイミング）でポーリングが実行されている。具体的には、タスクＡからタスクＢへの切り替えられるタイミング（符号Ｐ１参照）や、タスクＢからアイドル状態へ移行するタイミング（符号Ｐ２参照）でポーリングが実行される。また、タスクＡにおいてスレッドＡ−１からスレッドＡ−２へ切り替えられるタイミング（符号Ｐ３参照）においてもポーリングが実行される。さらに、アイドル状態（符号Ｐ４参照）においてもポーリングが実行される。
【００６５】
一般に、ＶｘＷｏｒｋｓ等の即時応答性を重視して設計された、いわゆるリアルタイムＯＳは、応答時間の制限等が厳しく設計されており、即応性に優れている。従って、上述の如き各第２の更新タイミングにおいて、確実にポーリングを実行することができる。
また、ストレージ装置１においては、例えばホスト装置からのＩ／Ｏ要求に基づいて実行されるＩ／Ｏコマンド毎にタスクやスレッドの切り替えが発生するので、タスクの切れ間やスレッドの切れ間が頻繁に発生する。従って、第１受信処理部１２が、上述の如き第２の更新判断タイミングでポーリングを実行することで、データ共有領域５２１の更新状況を効率的にポーリングすることができる。
【００６６】
本ストレージ装置１において、第１受信処理部１２は、タイマ割り込みが入力されたタイミング（第１の更新判断タイミング）で、データ共有領域５２１の更新状況をポーリングするとともに、第２の更新判断タイミングにおいてもデータ共有領域５２１の更新状況をポーリングする。これにより、ＩＰＩによる割り込み通知を行なうことなく、ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へ効率的にデータ通信を実行することができる。
【００６７】
そして、前述した第１読出処理部１２１は、更新判断部１２２が共有メモリ５２０のデータ共有領域５２１が更新されていると判断した場合に、データ共有領域５２１の共有データを、共有メモリ５２０のデータ共有領域５２１から読み出す。
すなわち、第１読出処理部１２１（第１受信処理部１２）は、共有メモリ５２０が更新されている場合に、共有メモリ５２０のデータ共有領域５２１から共有データを読み出す。
【００６８】
このように、ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へのデータ通信においては、共有メモリ５２０のデータ共有領域５２１のデータの読み出しが、第１受信処理部１２によりポーリングによって行なわれる。
一方、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信には、負荷判断部２１，第２送信処理部２２，第３送信処理部２３，閾値更新部２４，モード確認部２５，第２受信処理部２６及び第３受信処理部２７が用いられる。
【００６９】
負荷判断部２１は、ＳＡＮ用ＯＳ４００における負荷状態を判断する。具体的には、負荷判断部２１は、ＳＡＮ用ＯＳ４００における負荷状態を表す負荷状態値を算出する。例えば、負荷判断部２１は、負荷状態値として、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの１秒あたりの送信回数（送信回数／秒）を算出する。
そして、負荷判断部２１は、この算出した負荷状態値を閾値Ｔと比較して、負荷状態値が閾値Ｔ以上であるか否かを判断する。すなわち、負荷判断部２１は、ＳＡＮ用ＯＳ４００における負荷状態を表す負荷状態値が閾値Ｔ以上であるか否かを判断する負荷判断部として機能する。負荷状態値が閾値Ｔ以上である状態はＳＡＮ用ＯＳ４００が高負荷状態であることを示し、負荷状態値が閾値Ｔ未満である状態はＳＡＮ用ＯＳ４００が低負荷状態であることを示す。
【００７０】
本ストレージ装置１において、ＳＡＮ用ＯＳ４００が低負荷状態においては、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信はＩＰＩモードで行なわれる。また、ＳＡＮ用ＯＳ４００が高負荷状態においては、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信はポーリングモードで行なわれる。
ＩＰＩモードにおいては、ＳＡＮ用ＯＳ４００の第２送信処理部２２が共有データの送信を行ない、ＮＡＳ用ＯＳ３００の第２受信処理部２６が共有データの受信を行なう。
【００７１】
ポーリングモードにおいては、ＳＡＮ用ＯＳ４００の第３送信処理部２３が共有データの送信を行ない、ＮＡＳ用ＯＳ３００の第３受信処理部２７が共有データの受信を行なう。
第２送信処理部２２は、図６に示すように、第２格納処理部２２１，ＩＰＩ通知部２２２を備える。
【００７２】
第２格納処理部２２１は、共有データの送信元であるＳＡＮ用ＯＳ４００において、ＮＡＳ用ＯＳ３００に送信するデータ（共有データ）を、共有メモリ５２０のデータ共有領域５２１に格納する。
ＩＰＩ通知部２２２は、ハイパーバイザ２００経由でＩＰＩ機能を使用することで、送信先のＮＡＳ用ＯＳ３００のＧＯＳ間通信ドライバ５１０ａに割込み通知を行なう。すなわち、ＩＰＩ通知部２２２は、ＮＡＳ用ＯＳ３００に対して、第２格納処理部２２１が共有メモリ５２０のデータ共有領域５２１に共有データを格納したことを割り込み信号により通知する通知部として機能する。なお、以下、ＩＰＩ機能による割込み通知をＩＰＩ通知という場合がある。
【００７３】
第２受信処理部２６は、図６に示すように、第２読出処理部２６１を備え、共有メモリ５２０のデータ共有領域５２１に格納された共有データをＩＰＩ通知の受信をきっかけに読み出す。
具体的には、ＩＰＩ通知部２２２からＩＰＩ通知が入力されると、ＮＡＳ用ＯＳ３００において割込みハンドラが受信処理タスクを起動し、第２受信処理部２６（第２読出処理部２６１）としての機能が開始される。
【００７４】
第２読出処理部２６１は、ＩＰＩ通知部２２２からＩＰＩ通知が入力されると、共有メモリ５２０のデータ共有領域５２１に格納されているデータを読み出す。このデータ共有領域５２１から読み出された共有データは、例えば、共有メモリ５２０に備えられたＮＡＳ用ＯＳ３００用の領域に移動された後、ＮＡＳ用ＯＳ３００によって用いられる。
第３送信処理部２３は、図６に示すように、第３格納処理部２３１，モード設定部２３２及びＩＰＩ通知部２３３を備える。
【００７５】
第３格納処理部２３１は、共有データの送信元であるＳＡＮ用ＯＳ４００において、ＮＡＳ用ＯＳ３００に送信するデータ（共有データ）を、共有メモリ５２０のデータ共有領域５２１に格納する。
モード設定部２３２は、共有メモリ５２０のモード情報格納領域５２４に動作モードの設定を行なう。
【００７６】
モード設定部２３２は、上述した負荷判断部２１による判断の結果、負荷状態値が閾値Ｔ以上である場合、すなわち、ＳＡＮ用ＯＳ４００が高負荷状態である場合には、共有メモリ５２０のモード情報格納領域５２４に、ポーリングモード（第１のモード）である旨を表す値を動作モード情報として設定する。
モード設定部２３２は、その後、ＳＡＮ用ＯＳ４００の高負荷状態が継続している場合には、共有メモリ５２０のモード情報格納領域５２４の動作モード情報の変更は行なわない（変更を抑止する）。
【００７７】
また、負荷状態値が閾値Ｔ未満である場合、すなわち、ＳＡＮ用ＯＳ４００が低負荷状態である間は、共有メモリ５２０のモード情報格納領域５２４に、ＩＰＩモード（第２のモード）である旨を表す値を動作モード情報として設定する。
ＩＰＩ通知部２３３は、ハイパーバイザ２００経由でＩＰＩ機能を使用することで、送信先のＮＡＳ用ＯＳ３００のＧＯＳ間通信ドライバ５１０ａに割込み通知を行なう。すなわち、ＩＰＩ通知部２３３は、ＮＡＳ用ＯＳ３００に対して、第３格納処理部２３１が共有メモリ５２０のデータ共有領域５２１に共有データを格納したことを割り込み信号（ＩＰＩ通知）により通知する通知部として機能する。
【００７８】
また、ＩＰＩ通知部２３３は、その後、ＳＡＮ用ＯＳ４００の高負荷状態が継続している間は、ＮＡＳ用ＯＳ３００に対するＩＰＩ通知の発行を抑止する。
閾値更新部２４は、閾値Ｔの値を更新して最適な閾値を設定する。閾値更新部２４は、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信時において、モード設定部２３２により動作モードの変更が行なわれた場合に、その動作モードの変更による効果を判定する。
【００７９】
具体的には、閾値更新部２４は、動作モード変更前のＳＡＮ用ＯＳ４００の負荷状態値と、動作モード変更後のＳＡＮ用ＯＳ４００の負荷状態値とを比較し、動作モード変更前の負荷状態値が変更後の負荷状態値よりも大きい場合には、動作モード変更による効果が得られていないと判断する。
ここで、負荷状態としては、例えば、基準時間あたりの共有データの送信回数が用いられる。また、本実施形態においては、基準時間として１６．６ｍｓｅｃ（１／６０秒）を用いる例について示す。なお、基準時間はこれに限定されるものではなく適宜変更して実施することができる。
【００８０】
閾値更新部２４は、動作モード変更前の負荷状態値が変更後の負荷状態値よりも大きい場合には動作モードを変更した効果がないと判断する。そして、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き上げる。
このように閾値Ｔを引き上げることにより、以後、同等の負荷で動作モードの変更が行なわれることを阻止し、処理を効率化することができる。すなわち閾値更新部２４は閾値Ｔの最適化を行なう。
【００８１】
第３受信処理部２７は、図６に示すように、第３読出処理部２７１及びタイマ処理部２７２を備え、共有メモリ５２０のデータ共有領域５２１に格納された共有データをポーリングにより読み出す。
第３受信処理部２７としての機能は、ＩＰＩ通知部２３３からのＩＰＩ通知をきっかけに開始される。
【００８２】
具体的には、ＩＰＩ通知部２３３からＩＰＩ通知が入力されると、ＮＡＳ用ＯＳ３００において割込みハンドラが受信処理タスクを起動し、第３受信処理部２７（第３読出処理部２７１）としての機能が開始される。
タイマ処理部２７２は、図示しないタイマを起動させて所定時間の経過を測定する。タイマが所定時間の経過を検知するとタイムアウト出力が行なわれる。タイムアウトが出力されると、タイマ処理部２７２は第３読出処理部２７１に通知を行なう。
【００８３】
第３読出処理部２７１は、タイマ処理部２７２からタイムアウトが通知されると、共有メモリ５２０のデータ共有領域５２１に格納されているデータを読み出す。このデータ共有領域５２１から読み出された共有データは、例えば、共有メモリ５２０に備えられたＮＡＳ用ＯＳ３００用の領域に移動され、その後、ＮＡＳ用ＯＳ３００によって用いられる。
【００８４】
すなわち、共有メモリ５２０のデータ共有領域５２１のデータの読み出しが、第３受信処理部２７によりポーリングによって行なわれる。
モード確認部２５は、共有メモリ５２０のモード情報格納領域５２４に格納されている動作モード情報の確認を行なう。すなわち、モード確認部２５は、モード情報格納領域５２４から動作モード情報を読み出し、ＩＰＩモードであるかポーリングモードであるかを確認する。このモード確認部２５は、上述した第２読出処理部２６１や第３読出処理部２７１が共有メモリ５２０のデータ共有領域５２１から共有データの読み出しを行なう毎に、動作モード情報の確認を行なう。
【００８５】
上述した第３受信処理部２７は、モード確認部２５によりポーリングモードであることが確認された場合に、共有メモリ５２０のデータ共有領域５２１に格納された共有データをポーリングにより読み出す。
（Ｂ）動作
上述の如く構成された、実施形態の一例としてのストレージ装置１のＧＯＳ間通信部５００によるＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へのゲストＯＳ間通信を、図９を用いて説明する。
【００８６】
なお、初期状態において、共有メモリ５２０の送信カウンタ値格納領域５２２の送信カウンタ値と受信カウンタ値格納領域５２３の受信カウンタ値とはそれぞれリセットされている。
送信側のＮＡＳ用ＯＳ３００において、第１格納処理部１１１が、共有メモリ５２０のデータ共有領域５２１に共有データを格納する（符号Ｓ１参照）。また、送信カウンタ更新部１１２が、共有メモリ５２０の送信カウンタ値格納領域５２２の送信カウンタ値をインクリメント（＋１）する（符号Ｓ２参照）。
【００８７】
受信側のＳＡＮ用ＯＳ４００においては、更新判断部１２２が、送信カウンタ値格納領域５２２に格納されている送信カウンタ値と、受信カウンタ値格納領域５２３に格納されている受信カウンタ値とを比較する（符号Ｓ３参照）。そして、更新判断部１２２は、これらの送信カウンタ値と受信カウンタ値とが不一致の場合に、ＮＡＳ用ＯＳ３００から送信される共有データがデータ共有領域５２１に格納されたと判断する。
【００８８】
更新判断部１２２によって送信カウンタ値と受信カウンタ値とに差分がある（不一致である）と判断されると、受信カウンタ更新部１２３が受信カウンタ値格納領域５２３の受信カウンタ値をインクリメント（＋１）する（符号Ｓ４参照）。
また、更新判断部１２２は受信処理タスク（受信処理関数）をコールし（符号Ｓ５参照）、これにより第１読出処理部１２１の処理が開始される。第１読出処理部１２１はデータ共有領域５２１の共有データを、共有メモリ５２０のデータ共有領域５２１から読み出す（符号Ｓ６参照）。
【００８９】
このようにして、ＧＯＳ間通信部５００によるＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００への共有データの送信が行なわれる。
次に、実施形態の一例としてのストレージ装置１のＧＯＳ間通信部５００によるＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのゲストＯＳ間通信を、図１０（ａ），（ｂ）を用いて説明する。
【００９０】
なお、図１０（ａ）はＳＡＮ用ＯＳ４００の低負荷状態におけるゲストＯＳ間通信を説明するための図、図１０（ｂ）はＳＡＮ用ＯＳ４００が低負荷状態から高負荷状態に移行した場合のゲストＯＳ間通信を説明するための図である。
また、初期状態において、共有メモリ５２０の送信カウンタ値格納領域５２２の送信カウンタ値と受信カウンタ値格納領域５２３の受信カウンタ値とはそれぞれリセットされている。
【００９１】
送信側のＳＡＮ用ＯＳ４００において、負荷判断部２１がＳＡＮ用ＯＳ４００における負荷状態を判断する。すなわち、例えば、負荷判断部２１は、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの１秒あたりの送信回数（送信回数／秒）を負荷状態値として算出する。そして、負荷判断部２１は、この算出した負荷状態値を閾値Ｔと比較し、負荷状態値が閾値Ｔ以上である場合には高負荷状態であると判断し、負荷状態値が閾値Ｔ未満である状態はＳＡＮ用ＯＳ４００が低負荷状態であると判断する。
【００９２】
負荷判断部２１が低負荷状態と判断した場合には、ＩＰＩモードでＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのゲストＯＳ間通信が行なわれ、高負荷状態と判断した場合には、ポーリングモードでＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのゲストＯＳ間通信が行なわれる。
図１０（ａ），（ｂ）に示すように、モード設定部２３２は、共有メモリ５２０のモード情報格納領域５２４に、ＳＡＮ用ＯＳ４００が高負荷状態である場合にはポーリングモードである旨を表す値を、また、ＳＡＮ用ＯＳ４００が低負荷状態である場合にはＩＰＩモードである旨を表す値を、動作モード情報として設定する。
【００９３】
ＩＰＩモードでのＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのゲストＯＳ間通信においては、第２送信処理部２２の第２格納処理部２２１が共有メモリ５２０のデータ共有領域５２１に共有データを格納し（符号Ｓ１１参照）、ＩＰＩ通知部２２２がＮＡＳ用ＯＳ３００のＧＯＳ間通信ドライバ５１０ａにＩＰＩ通知を行なう（符号Ｓ１２参照）。
ＩＰＩ通知を受信した受信側のＮＡＳ用ＯＳ３００においては、割込みハンドラが受信処理タスクを起動する（符号Ｓ１３参照）。すなわち、第２受信処理部２６の第２読出処理部２６１が、共有メモリ５２０のデータ共有領域５２１に格納されているデータを読み出す（符号Ｓ１４参照）。
【００９４】
このようにして、ＧＯＳ間通信部５００によるＩＰＩモードでのＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの送信が行なわれる。
一方、負荷判断部２１が高負荷状態と判断した場合には、ポーリングモードでＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのゲストＯＳ間通信が行なわれる。すなわち、ＩＰＩモードで共有データの通信が行なわれている状態において、負荷判断部２１が高負荷状態と判断した場合には、ポーリングモードへの変更が行なわれる。
【００９５】
ポーリングモードでのＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのゲストＯＳ間通信においては、第３送信処理部２３の第３格納処理部２３１が共有メモリ５２０のデータ共有領域５２１に共有データを格納する（符号Ｓ２１参照）。また、モード設定部２３２が、動作モード情報としてＩＰＩモードが設定されている共有メモリ５２０のモード情報格納領域５２４に、ポーリングモードである旨を表す値を設定することでモード変更を行なう（符号Ｓ２２参照）。
【００９６】
そして、ＩＰＩ通知部２３３がＮＡＳ用ＯＳ３００のＧＯＳ間通信ドライバ５１０ａにＩＰＩ通知を行なう（符号Ｓ２３参照）。
ＩＰＩ通知を受信した受信側のＮＡＳ用ＯＳ３００においては、割込みハンドラが受信処理タスクを起動する（符号Ｓ２４参照）。
ＮＡＳ用ＯＳ３００の受信処理タスクにおいては、第３受信処理部２７の第３読出処理部２７１が、共有メモリ５２０のデータ共有領域５２１に共有データが格納されているか否かを確認し、共有データが格納されている場合には、データ共有領域５２１からその共有データを読み出す（符号Ｓ２５参照）。
【００９７】
なお、データ共有領域５２１に共有データが格納されているか否かの判断は、既知の手法を用いて実施することができる。例えば、第３格納処理部２３１がデータ共有領域５２１に共有データを格納する際に所定のフラグを設定し、第３読出処理部２７１がこの共有データを読み出す際に、このフラグを削除する。このようにすることにより、第３読出処理部２７１はこのフラグの有無を確認することで、データ共有領域５２１に共有データが格納されているか否かを容易に判断することができる。
【００９８】
また、タイマ処理部２７２がタイマを起動させて所定時間の計時を開始する（符号Ｓ２６参照）。所定時間の経過が検知されるとタイムアウト出力が行なわれ（符号Ｓ２７参照）、第３読出処理部２７１が、共有メモリ５２０のデータ共有領域５２１に格納されているデータを読み出す（符号Ｓ２５参照）。
以後、ＳＡＮ用ＯＳ４００において高負荷状態が継続している場合には、ＳＡＮ用ＯＳ４００（ＧＯＳ間通信ドライバ５１０ｂ）においては、上述した第３格納処理部２３１によるデータ共有領域５２１への共有データの格納（符号Ｓ２１参照）だけが実施され、符号Ｓ２２，Ｓ２３の処理の実行は抑止される。すなわち、ポーリングモードにおいて、ＳＡＮ用ＯＳ４００の高負荷状態が続く場合には、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのＩＰＩ通知は発行されない。これにより、ＩＰＩ通知を送信するために要する時間等のオーバーヘッドを低減することができ、ゲストＯＳ間通信における処理性能を向上させることができる。
【００９９】
また、ポーリングモードにおいては、ＮＡＳ用ＯＳ３００の第１送信処理部１１からの共有データの送信時にも、第３受信処理部２７は、共有メモリ５２０のデータ共有領域５２１に共有データが格納されているか否かを確認する。この確認の結果、データ共有領域５２１に共有データが格納されている場合には、受信処理タスクが起動され、符号Ｓ２５〜Ｓ２７で示す処理が実行される。
【０１００】
このようにして、ＧＯＳ間通信部５００によるポーリングモードでのＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの送信が行なわれる。
なお、ポーリングモードにおいて、ＳＡＮ用ＯＳ４００の負荷が低下して低負荷状態に移行した場合には、ＩＰＩモードに変更される。
次に、実施形態の一例としてのストレージ装置１における、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信時のＩＰＩモードからポーリングモードへの変更時の処理を、図１２及び図１３を参照しながら、図１１に示すフローチャート（ステップＡ１〜Ａ１２）に従って説明する。
【０１０１】
なお、図１２及び図１３は、それぞれ実施形態の一例としてのストレージ装置１におけるＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの送信回数の実測例を示す図であり、ＩＰＩモード及びポーリングモードでの各１秒あたりの送信回数の実績値を閾値Ｔとともにグラフとして示す。これらの図１２及び図１３中において、横軸は時間（単位：秒）を、縦軸は１秒あたりの送信回数（単位：回）を表す。
【０１０２】
ステップＡ１において、負荷判断部２１は、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの１秒あたりの送信回数（送信回数／秒）を負荷状態値Ａとして算出し、この算出した負荷状態値Ａを、閾値Ｔと比較する。すなわち、負荷状態値Ａが閾値Ｔより大きいか否かを確認する。
負荷状態値Ａが閾値Ｔよりも大きい場合には（ステップＡ１のＹＥＳルート参照）、ＳＡＮ用ＯＳ４００が高負荷状態である。この場合には、ステップＡ２において、モード設定部２３２がＩＰＩモードからポーリングモードに変更する。すなわち、モード設定部２３２は、共有メモリ５２０のモード情報格納領域５２４に格納されている動作モード情報をＩＰＩモードからポーリングモードに変更する。
【０１０３】
これにより、ＳＡＮ用ＯＳ４００の第３送信処理部２３が共有データの送信を行ない、ＮＡＳ用ＯＳ３００の第３受信処理部２７が共有データの受信を行なう。
ステップＡ３において、閾値更新部２４が、ポーリングモードでＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００に共有データが送信された回数を取得し、この送信回数を値Ｂ（送信回数Ｂ）とする。
【０１０４】
そして、ステップＡ４において、一定時間（例えば、１６．６ｍｓｅｃ）待った後、ステップＡ５において、閾値更新部２４は、ポーリングモードによってＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００に共有データが送信された回数を取得し、この送信回数を値Ｃ（送信回数Ｃ）とする。なお、１６．６ｍｓｅｃは１／６０秒を近似的に表す値であり、後述するステップＡ６において、ステップＡ５でポーリングモードに変更したことによる効果を判定するための基準時間として用いられる。
【０１０５】
ステップＡ６において、閾値更新部２４は、ステップＡ２でポーリングモードに変更した後の効果を判定する。
具体的には、閾値更新部２４は、負荷状態値Ａを６０で除算した値（Ａ／６０）と、値Ｃと値Ｂとの差（Ｃ−Ｂ）とを比較する。すなわち、（Ａ／６０）が（Ｃ−Ｂ）よりも大きいか否かを判断する。
【０１０６】
ここで、値（Ａ／６０）は、ステップＡ２でポーリングモードに変更する前の状態での基準時間（１６．６ｍｓｅｃ）あたりの共有データの送信回数を示す。また、値（Ｃ−Ｂ）は、ステップＡ２でポーリングモードに変更させた後の状態での基準時間（１６．６ｍｓｅｃ）あたりの共有データの送信回数を示す。
（Ａ／６０）が（Ｃ−Ｂ）よりも大きい場合には（ステップＡ６のＹＥＳルート参照）、ステップＡ２でポーリングモードに変更した効果がないと判断することができる。そこで、ステップＡ７において、モード設定部２３２はポーリングモードからＩＰＩモードに動作モードを戻すよう変更する。
【０１０７】
また、ステップＡ８において、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き上げる。これにより、以後、同等の負荷でポーリングモードに変更されることを阻止することができ、閾値Ｔが最適化される。
図１２に示す例においては、符号Ｃ１により示す各部分において、閾値Ｔの値が引き上げられている。
【０１０８】
なお、このステップＡ８において閾値Ｔをどれだけ引き上げるかは適宜変更して実施することができる。その後、処理を終了する。
一方、ステップＡ６における比較の結果、（Ａ／６０）が（Ｃ−Ｂ）以下の場合には（ステップＡ６のＮＯルート参照）、ステップＡ２でポーリングモードに変更した効果が表れたと判断することができる。そこで、ポーリングモードからＩＰＩモードへの変更は行なわれない。
【０１０９】
また、ステップＡ９において、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き下げる。これにより、以後、同等の負荷となる前にＩＰＩモードに変更させることができ、閾値Ｔが最適化される。
図１３に示す例においては、符号Ｃ２により示す部分において、閾値Ｔの値が引き下げられている。
【０１１０】
なお、このステップＡ９において閾値Ｔをどれだけ引き下げるかについても適宜変更して実施することができる。その後、処理を終了する。
ステップＡ１における比較の結果、負荷状態値Ａが閾値Ｔ以下である場合には（ステップＡ１のＮＯルート参照）、ステップＡ１０において、閾値Ｔと負荷状態値Ａとの差（Ｔ−Ａ）が所定の基準値Ｎよりも小さいか否かを確認する。閾値Ｔと負荷状態値Ａとの差（Ｔ−Ａ）が基準値Ｎ以上である場合には（ステップＡ１０のＮＯルート参照）、処理を終了する。
【０１１１】
また、閾値Ｔと負荷状態値Ａとの差（Ｔ−Ａ）が基準値Ｎよりも小さい場合には（ステップＡ１０のＹＥＳルート参照）、ステップＡ１１に移行する。このステップＡ１１においては、閾値Ｔと負荷状態値Ａとの差（Ｔ−Ａ）が基準値Ｎよりも小さい状態が一定時間以上続いているか否かを判断する。
閾値Ｔと負荷状態値Ａとの差（Ｔ−Ａ）が基準値Ｎよりも小さい状態が一定時間以上続いた場合には（ステップＡ１１のＹＥＳルート参照）、閾値Ｔを若干下回る状態の負荷が一定時間継続していることを表す。このような場合には、ステップＡ１２において、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き下げる。
【０１１２】
このように閾値Ｔを引き下げることで、ポーリングモードへ変更され易くなり、前述したステップＡ２〜Ａ９の処理を積極的に行なわせることでポーリングモードに変更させてその効果を確認し、閾値Ｔを最適化する。
図１３に示す例においては、符号Ｃ３により示す部分において、閾値Ｔの値が引き下げられている。
【０１１３】
なお、ステップＡ１２において閾値Ｔをどれだけ引き下げるかについても適宜変更して実施することができる。その後、処理を終了する。また、ステップＡ１１において、閾値Ｔと負荷状態値Ａとの差（Ｔ−Ａ）が基準値Ｎよりも小さい状態が一定時間以上続かなかった場合も（ステップＡ１１のＮＯルート参照）、時的に高負荷状態となっただけと考えられるので、処理を終了する。
【０１１４】
次に、実施形態の一例としてのストレージ装置１におけるＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信時のポーリングモードからＩＰＩモードへの変更時の処理を、図１５〜図１７を参照しながら、図１４に示すフローチャート（ステップＢ１〜Ｂ１１）に従って説明する。
なお、図１５〜図１７は、それぞれ実施形態の一例としてのストレージ装置１におけるＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの送信回数の実測例を示す図であり、ＩＰＩモード及びポーリングモードでの各１秒あたりの送信回数の実績値を閾値Ｔととともにグラフとして示す。ただし、図１６においては、ポーリングモードでの１秒あたりの送信回数と閾値Ｔとを示す。また、図１５〜図１７中において、横軸は時間（単位：秒）を、縦軸は１秒あたりの送信回数（単位：回）を表す。
【０１１５】
ステップＢ１において、負荷判断部２１は、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの１秒あたりの送信回数（送信回数／秒）を負荷状態値Ｘとして算出し、この算出した負荷状態値Ｘを、閾値Ｔと比較する。すなわち、負荷状態値Ｘが閾値Ｔより大きいか否かを確認する。
負荷状態値Ｘが閾値Ｔよりも大きい場合には（ステップＢ１のＹＥＳルート参照）、ＳＡＮ用ＯＳ４００が高負荷状態である。次に、ステップＢ２において、この高負荷状態が予め規定された一定時間以上継続しているか否かを判断する。高負荷状態が一定時間以上継続しない場合には（ステップＢ２のＮＯルート参照）、一時的に高負荷状態となっただけと考えられるので、処理を終了する。
【０１１６】
高負荷状態が一定時間以上継続している場合には（ステップＢ２のＹＥＳルート参照）、ステップＢ３において、モード設定部２３２がポーリングモードからＩＰＩモードに変更する。すなわち、モード設定部２３２は、共有メモリ５２０のモード情報格納領域５２４に格納されている動作モード情報をポーリングモードからＩＰＩモードに変更する。
これにより、ＳＡＮ用ＯＳ４００の第２送信処理部２２が共有データの送信を行ない、ＮＡＳ用ＯＳ３００の第２受信処理部２６が共有データの受信を行なう。
【０１１７】
ステップＢ４において、閾値更新部２４が、ＩＰＩモードでＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００に共有データが送信された回数を取得し、この送信回数を値Ｙ（送信回数Ｙ）とする。
そして、ステップＢ５において、一定時間（例えば、１６．６ｍｓｅｃ）待った後、ステップＢ６において、閾値更新部２４は、ＩＰＩモードによってＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００に共有データが送信された回数を取得し、この送信回数を値Ｚ（送信回数Ｚ）とする。なお、１６．６ｍｓｅｃは１／６０秒を近似的に表す値であり、後述するステップＢ７において、ステップＢ３でＩＰＩモードに変更したことによる効果を判定するための基準時間として用いられる。
【０１１８】
ステップＢ７において、閾値更新部２４は、ステップＢ３でＩＰＩモードに変更した後の効果を判定する。
具体的には、閾値更新部２４は、負荷状態値Ｘを６０で除算した値（Ｘ／６０）と、値Ｚと値Ｙとの差（Ｚ−Ｙ）とを比較する。すなわち、（Ｘ／６０）が（Ｚ−Ｙ）よりも大きいか否かを判断する。
【０１１９】
ここで、値（Ｘ／６０）は、ステップＢ３でＩＰＩモードに変更する前の状態での基準時間（１６．６ｍｓｅｃ）あたりの共有データの送信回数を示す。また、値（Ｚ−Ｙ）は、ステップＢ３でＩＰＩモードに変更させた後の状態での基準時間（１６．６ｍｓｅｃ）あたりの共有データの送信回数を示す。
（Ｘ／６０）が（Ｚ−Ｙ）よりも大きい場合には（ステップＢ７のＹＥＳルート参照）、ステップＢ３でＩＰＩモードに変更した効果がないと判断することができる。そこで、ステップＢ８において、モード設定部２３２はＩＰＩモードからポーリングモードに動作モードを戻すよう変更する。
【０１２０】
また、ステップＢ９において、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き上げる。これにより、以後、同等の負荷でポーリングモードに変更されることを阻止することができ、閾値Ｔが最適化される。
図１５に示す例においては、符号Ｃ４１により示す部分において、ＩＰＩモードへの変更が行なわれている。これにより、ＩＰＩモードでの１秒あたりの送信回数が閾値Ｔを超える場合が生じるが、その場合には前述した図１１のステップＡ８における処理により閾値Ｔが引き上げられ（符号Ｃ４２参照）、閾値Ｔが最適化される。
【０１２１】
なお、このステップＢ９において閾値Ｔをどれだけ引き上げるかは適宜変更して実施することができる。その後、処理を終了する。
一方、ステップＢ７における比較の結果、（Ｘ／６０）が（Ｚ−Ｙ）以下の場合には（ステップＢ７のＮＯルート参照）、ステップＢ３でＩＰＩモードに変更した効果が表れたと判断することができる。そこで、ＩＰＩモードからポーリングモードへの変更は行なわれない。
【０１２２】
また、ステップＢ１０において、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き下げる。これにより、以後、同等の負荷の場合にはＩＰＩモードに変更されるようにすることができ、閾値Ｔが最適化される。
図１６に示す例においては、符号Ｃ５により示す部分において、閾値Ｔの値が引き下げられている。このように、ＩＰＩモードでの１秒あたりの送信回数が、一定期間、閾値Ｔよりも大きく下回る場合には、閾値Ｔが引き下げられる。
【０１２３】
なお、このステップＢ１０において閾値Ｔをどれだけ引き下げるかについても適宜変更して実施することができる。その後、処理を終了する。
ステップＢ１における比較の結果、負荷状態値Ｘが閾値Ｔ以下である場合には（ステップＢ１のＮＯルート参照）、ステップＢ１１において、モード設定部２３２がポーリングモードからＩＰＩモードに変更する。すなわち、モード設定部２３２は、共有メモリ５２０のモード情報格納領域５２４に格納されている動作モード情報をポーリングモードからＩＰＩモードに変更する。
【０１２４】
図１７に示す例においては、符号Ｃ６により示す部分において、ＩＰＩモードへの変更が行なわれている。その後、処理を終了する。
（Ｃ）効果
このように、実施形態の一例としてのストレージ装置１によれば、ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へのデータ通信において、第１送信処理部１１の第１格納処理部１１１が共有メモリ５２０のデータ共有領域５２１に共有データを格納し、第１受信処理部１２がこのデータ共有領域５２１に格納された共有データをポーリングにより読み出す。
【０１２５】
すなわち、データ共有領域５２１の更新が行なわれたことを更新判断部１２２によって判断されると、第１読出処理部１２１がデータ共有領域５２１から共有データを読み出すことで、ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へのゲストＯＳ間通信を行なう。
これにより、ＮＡＳ用ＯＳ３００からＩＰＩ通知を行なう必要がなく、ゲストＯＳ間通信に要する時間を短縮して高速化することができる。
【０１２６】
第１送信処理部１１においては、第１格納処理部１１１が共有メモリ５２０に共有データの格納を行なうと、送信カウンタ更新部１１２が、共有メモリ５２０の送信カウンタ値格納領域５２２の送信カウンタ値をインクリメントする。
そして、第１受信処理部１２においては、更新判断部１２２は、共有メモリ５２０の送信カウンタ値格納領域５２２の送信カウンタ値と受信カウンタ値格納領域５２３の受信カウンタ値とを比較する。そして、これらが不一致の場合に、更新判断部１２２は、共有メモリ５２０のデータ共有領域５２１に共有データが新たに格納されたと判断する。
【０１２７】
また、第１受信処理部１２においては、受信カウンタ更新部１２３が共有メモリ５２０の受信カウンタ値格納領域５２３の受信カウンタ値をインクリメントして、第１読出処理部１２１が共有メモリ５２０のデータ共有領域５２１から共有データを読み出す。
従って、ＩＰＩ通知を行なうことなく、ＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へのデータ通信を高速に行なうことができる。
【０１２８】
ＩＰＩ通知はＣＰＵ１１０のレジスタ経由でＩＰＩ発行を依頼する必要がある。これに対して、例えば、送信カウンタ値格納領域５２２の送信カウンタ値のインクリメント（図９の符号Ｓ２参照）は１回のメモリアクセスで完了することができる。このようなメモリアクセスはＣＰＵ１１０のレジスタアクセスはメモリアクセスに比べて高速に行なうことができる。
【０１２９】
また、図９の符号Ｓ４及び符号Ｓ５にかかる、受信カウンタ値の更新や受信処理タスクの起動（コール）は、数回のメモリアクセスで完了することができる。また、この際、ＩＰＩ通知を受信して処理する場合に発生するようなタスクへのコンテクストスイッチが発生することもない。ここで、コンテクストスイッチとは、例えば、スタックポインタやＣＰＵ１１０のレジスタ等のリソースの切り替えを意味する。ＩＰＩ通知からタスクへのコンテクストスイッチには膨大な回数のメモリアクセスとＣＰＵレジスタアクセスが発生するため、データ送信処理の遅延の要因となる。
【０１３０】
本ストレージ装置１においては、ＩＰＩ通知を受信して処理する場合に発生するようなタスクへのコンテクストスイッチが発生しないので、これによってもＮＡＳ用ＯＳ３００からＳＡＮ用ＯＳ４００へのデータ通信を高速に行なうことができる。
また、本ストレージ装置１によれば、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信において、ＳＡＮ用ＯＳ４００が低負荷状態においては、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信はＩＰＩモードで行なわれる。
【０１３１】
ＳＡＮ用ＯＳ４００の低負荷状態においては、ＣＰＵ１１０等の能力に余裕があるので、ＩＰＩモードで共有データの通信を行なっても処理性能の低下の影響は少ない。
ＳＡＮ用ＯＳ４００が高負荷状態においては、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信はポーリングモードで行なわれる。すなわち、ＩＰＩ通知部２３３によるＩＰＩ通知を抑止することでＩＰＩ通知のオーバーヘッドを減らすことができ、共有データの通信を高速で処理することができる。また、この際、モード設定部２３２による共有メモリ５２０のＳＡＮ用ＯＳ４００が高負荷状態においては、モード設定部２３２によるモード情報確報領域５２４へのモード情報の格納も抑止され、これによってもＳＡＮ用ＯＳ４００におけるオーバーヘッドを減らすことができ、共有データの通信を高速で処理することができる。
【０１３２】
ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信について、モード確認部２５，第２受信処理部２６及び第３受信処理部２７としての機能をアプリケーションレベルで実装する。これにより、ＮＡＳ用ＯＳ３００としてLinuxを用いる場合に、Linuxカーネルの変更を行なう必要がない。これによりＧＰＬ（General Public License）に従ってソースコードを公開する必要がない。
【０１３３】
ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００へのデータ通信時において、モード設定部２３２が動作モードを変更した場合に、閾値更新部２４が、動作モード変更前後での基準時間あたりの共有データの送信回数を比較することで、動作モード変更による効果を評価する。そして、動作モード変更前の基準時間あたりの共有データの送信回数の方が多い場合には、動作モード変更による効果が得られなかったとして、変更した動作モードを元に戻す。これにより、最適な動作モードで動作させることができ、ゲストＯＳ間通信を効率的に行なうことができる。
【０１３４】
また、上述の如く動作モード変更による効果が得られなかった場合に、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き上げる。これにより、以後、同等の負荷で動作モードの変更が行なわれることを阻止することができ、閾値Ｔが最適化される。
その一方で、動作モードを変更したことによる効果が得られた場合には、閾値更新部２４は、閾値Ｔの値を予め規定された所定値分だけ引き下げる。これにより、以後、同等の負荷となる前にＩＰＩモードに変更させることができ、閾値Ｔが最適化される。
【０１３５】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
（Ｄ）その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１３６】
例えば、上述した実施形態においては、第１の仮想ＯＳとしてＮＡＳ用ＯＳであるＬｉｎｕｘを用いるとともに、第２の仮想ＯＳとしてＳＡＮ用ＯＳであるＶｘＷｏｒｋｓを用いた例を示しているが、これに限定されるものではなく、他のＯＳを用いる等、種々変形して実施することができる。
また、上述した実施形態においては、閾値更新部２４が、動作モード変更前後の負荷状態値として基準時間あたりの共有データの送信回数を用いているが、これに限定されるものではなく、例えば、ＣＰＵ１１０の使用率やメモリ１０６の使用率を用いる等、種々変形して実施することができる。
【０１３７】
また、上述した実施形態においては、ＳＡＮ用ＯＳ４００からＮＡＳ用ＯＳ３００への共有データの送信と、ＮＡＳ用ＯＳ３００かＳＡＮ用ＯＳ４００への共有データの送信とに同じ閾値Ｔを用いているが、これに限定されるものではなく、それぞれに閾値を設定してもよく種々変形して実施することができる。
また、上述した実施形態においては、第３格納処理部２３１がデータ共有領域５２１に共有データを格納する際に所定のフラグを設定し、第３読出処理部２７１がこの共有データを読み出す際に、このフラグを削除する。そして、第３読出処理部２７１がこのフラグの有無を確認することで、データ共有領域５２１に共有データが格納されているかを判断しているが、これに限定されるものではない。例えば、第３送信処理部に送信カウンタ更新部１１２と同様の機能を備えるとともに、第３受信処理部２７に受信カウンタ更新部１２３及び更新判断部１２２と同様の機能を備えてもよく、種々変形して実施することができる。
【０１３８】
（Ｅ）付記
（付記１）
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとを実行する情報処理装置であって、
前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリを備え、
共有データを送信する第１の仮想ＯＳにおいて、前記共有メモリのデータ共有領域に共有データを格納する第１格納処理部と、
前記共有データを受信する第２の仮想ＯＳにおいて、前記データ共有領域の更新状況を定期的に確認する更新判断部と、
前記データ共有領域が更新されている場合に、当該データ共有領域から前記共有データを読み出す第１読出処理部と
を備えることを特徴とする、情報処理装置。
【０１３９】
（付記２）
前記第１の仮想ＯＳにおいて、前記データ共有領域に前記共有データを格納する際に、前記共有メモリに格納された第１のカウンタ値をインクリメントする第１カウンタ値更新部を備え、
前記第２の仮想ＯＳにおいて、前記データ共有領域から前記共有データを読み出す際に、前記共有メモリに格納された第２のカウンタ値をインクリメントする第２カウンタ値更新部を備え、
前記更新判断部は、前記第１のカウンタ値と前記第２のカウンタ値とを比較し、前記第１のカウンタ値と前記第２のカウンタ値とが不一致の場合に、前記データ共有領域が更新されていると判断する
ことを特徴とする、付記１記載の情報処理装置。
【０１４０】
（付記３）
前記更新判断部は、さらに、前記データ共有領域の更新状況を、前記第２のＯＳにおける処理の切り替え時に確認する
ことを特徴とする、付記１または２に記載の情報処理装置。
（付記４）
前記更新判断部は、さらに、前記データ共有領域の更新状況を、前記第２のＯＳにおける処理の非実行状態時に確認する
ことを特徴とする、付記１〜３のいずれか１項に記載の情報処理装置。
【０１４１】
（付記５）
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとを実行する情報処理装置であって、
前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリを備え、
前記第１の仮想ＯＳに共有データを送信する第２の仮想ＯＳにおいて、前記共有データを前記共有メモリのデータ共有領域に格納する第２格納処理部と、
前記第２の仮想ＯＳにおいて、前記第１の仮想ＯＳに対して、前記データ共有領域に前記共有データが格納されたことを割り込み信号により通知する通知部と、
第１の仮想ＯＳにおいて、前記データ共有領域から前記共有データを読み出す第２読出処理部と、
前記第２の仮想ＯＳにおいて、当該第２の仮想ＯＳにおける負荷状態を表す負荷状態値が閾値以上であるか否かを判断する負荷判断部と
を備え、
前記負荷判断部による判断結果において、前記第２の仮想ＯＳにおける前記負荷状態値が閾値以上である場合には、前記第２格納処理部が前記データ共有領域に前記共有データを格納し、前記第２読出処理部が前記データ共有領域から定期的に前記共有データを読み出す第１のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送信し、
前記負荷判断部による判断結果において、当該第２の仮想ＯＳにおける前記負荷状態値が閾値未満である場合には、前記第２格納処理部が前記データ共有領域に前記共有データを格納し、前記通知部が割り込み信号による前記第１の仮想ＯＳに対する通知を行ない、前記第２読出処理部が、前記データ共有領域から前記共有データを読み出す第２のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送信する
ことを特徴とする、情報処理装置。
【０１４２】
（付記６）
第２の仮想ＯＳにおいて、前記第１のモードから前記第２のモードへまたは前記第２のモードから前記第１のモードへの動作モードの変更が行なわれた場合に、
前記動作モードの変更前での基準時間あたりの共有データの送信回数と、前記動作モードの変更後の基準時間あたりの共有データの送信回数とを比較し、前記動作モードの変更前での基準時間あたりの共有データの送信回数が、前記動作モードの変更後の基準時間あたりの共有データの送信回数よりも多い場合には、前記動作モードを変更前の状態に戻す
ことを特徴とする、付記５記載の情報処理装置。
【０１４３】
（付記７）
前記動作モードの変更前での基準時間あたりの共有データの送信回数が、前記動作モードの変更後の基準時間あたりの共有データの送信回数よりも多い場合には、
前記閾値の値を予め規定された所定値分だけ引き上げる閾値更新部
を備えることを特徴とする、付記６記載の情報処理装置。
【０１４４】
（付記８）
前記第１の仮想ＯＳは、ＳＡＮ制御を行なうＳＡＮ用オペレーティングシステムであり、
前記第２の仮想ＯＳは、ＮＡＳ制御を行なうＮＡＳ用オペレーティングシステムであり、
前記情報処理装置は、上位装置とストレージ部との間の通信を処理することを特徴とする、付記１〜７のいずれか１項に記載の情報処理装置。
【０１４５】
（付記９）
第１の仮想オペレーティングシステム（ＯＳ：Operating System）と第２の仮想ＯＳとをコンピュータに実行させるプログラムであって、
前記第１の仮想ＯＳに共有データを送信する第２の仮想ＯＳにおいて、前記共有データを、前記第１の仮想ＯＳと前記第２の仮想ＯＳとのそれぞれからアクセス可能な共有メモリのデータ共有領域に格納し、
前記第２の仮想ＯＳにおいて、前記第１の仮想ＯＳに対して、前記データ共有領域に前記共有データが格納されたことを割り込み信号により通知し、
第１の仮想ＯＳにおいて、前記データ共有領域から前記共有データを読み出し、
前記第２の仮想ＯＳにおいて、当該第２の仮想ＯＳにおける負荷状態を表す負荷状態値が閾値以上であるか否かを判断し、
前記第２の仮想ＯＳにおける前記負荷状態値が閾値以上である場合には、前記第２の仮想ＯＳにおいて前記データ共有領域に前記共有データを格納し、第１の仮想ＯＳにおいて前記データ共有領域から定期的に前記共有データを読み出す第１のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送信し、
当該第２の仮想ＯＳにおける前記負荷状態値が閾値未満である場合には、前記第１の仮想ＯＳにおいて前記データ共有領域に前記共有データを格納し、前記第２の仮想ＯＳにおいて割り込み信号による前記第１の仮想ＯＳに対する通知を行ない、前記第１の仮想ＯＳにおいて前記データ共有領域から前記共有データを読み出す第２のモードで、前記第２の仮想ＯＳから前記第１の仮想ＯＳへ前記共有データを送信する
処理を前記コンピュータに実行させることを特徴とする、プログラム。
【０１４６】
（付記１０）
第２の仮想ＯＳにおいて、前記第１のモードから前記第２のモードへまたは前記第２のモードから前記第１のモードへの動作モードの変更が行なわれた場合に、
前記動作モードの変更前での基準時間あたりの共有データの送信回数と、前記動作モードの変更後の基準時間あたりの共有データの送信回数とを比較し、前記動作モードの変更前での基準時間あたりの共有データの送信回数が、前記動作モードの変更後の基準時間あたりの共有データの送信回数よりも多い場合には、前記動作モードを変更前の状態に戻す
処理を前記コンピュータに実行させることを特徴とする、付記９記載のプログラム。
【０１４７】
（付記１１）
前記動作モードの変更前での基準時間あたりの共有データの送信回数が、前記動作モードの変更後の基準時間あたりの共有データの送信回数よりも多い場合には、
前記閾値の値を予め規定された所定値分だけ引き上げる
処理を前記コンピュータに実行させることを特徴とする、付記１０記載のプログラム。
【符号の説明】
【０１４８】
１    ストレージ装置
１１    第１送信処理部
１１１    第１格納処理部
１１２    送信カウンタ更新部（第１カウンタ値更新部）
１２    第１受信処理部
１２１    第１読出処理部
１２２    更新判断部
１２３    受信カウンタ更新（第２カウンタ値更新部）
２１    負荷判断部
２２    第２送信処理部
２２１    第２格納処理部
２２２    ＩＰＩ通知部
２３    第３送信処理部
２３１    第３格納処理部
２３２    モード設定部
２３３    ＩＰＩ通知部（通知部）
２４    閾値更新部
２５    モード確認部
２６    第２受信処理部
２６１    第２読出処理部
２７    第３受信処理部
２７１    第３読出処理部
２７２    タイマ処理部
３０    ドライブエンクロージャ
３１    記憶装置
４０    コントローラエンクロージャ
１００ａ，１００ｂ，１００    ＣＭ
１０１，１０２    ＣＡ
１０３    ＤＡ
１０６    メモリ
１０７    ＳＳＤ
１０８    ＩＯＣ
１１０    ＣＰＵ
２００    ハイパーバイザ
３００    ＮＡＳ用ＯＳ（第１の仮想ＯＳ）
３０１    ＮＡＳ用ＯＳ（カーネル）
３０２    ＮＡＳ用ＯＳ（ファンクションファームウェア）
３１０    ＬＬＤ
３１１    インテリジェントＳＣＳＩドライバ
３１２    ＦＣドライバ
３１３    ｉＳＣＳＩドライバ
３２０    ＭＬＤ
３３０    ＵＬＤ
３４０    ファイルシステム
３５０    Ｓａｍｂａ／ＮＦＳサーバソフトウェア
３６０    ＳＣＳＩドライバ群
３７０    ＳＣＳＩアプリケーション
３８０    ネットワークレイヤ
３９０    ＯＳシステム制御部
４００    ＳＡＮ用ＯＳ（第２の仮想ＯＳ）
４０１    ＳＡＮ用ＯＳ（カーネル）
４０２    ＳＡＮ用ＯＳ（ファンクションファームウェア）  
４１０    インテリジェントＣＡエージェント
４１９    システム制御部
４２０    インテリジェントＣＡドライバ
４２１    ＳＣＳＩコマンドキュー
４２２    ＳＣＳＩステータスキュー
４２３    ＳＡＳ−ＣＡドライバ
４２４    ｉＳＣＳＩ−ＣＡドライバ
４２５    ＦＣ−ＣＡドライバ
４３０    ターゲットドライバ
４４０    ＣＡスレッド
４５０    ベーシックコントロール
４６０    バックグランドコントロール
４５１    オプティマイズドＮＡＳＩ／Ｏレイヤ
５００    ＧＯＳ間通信部
５０１    ＳＡＮ専用ボリューム
５０２    ＮＡＳ専用ボリューム
５１０ａ，５１０ｂ    ＧＯＳ間通信ドライバ
５２０    共有メモリ
５２１    データ共有領域
５２２    送信カウンタ値格納領域
５２３    受信カウンタ値格納領域
５２４    モード情報格納領域
【図１】
0006464777.tif 000002
【図２】
0006464777.tif 000003
【図３】
0006464777.tif 000004
【図４】
0006464777.tif 000005
【図５】
0006464777.tif 000006
【図６】
0006464777.tif 000007
【図７】
0006464777.tif 000008
【図８】
0006464777.tif 000009
【図９】
0006464777.tif 000010
【図１０】
0006464777.tif 000011
【図１１】
0006464777.tif 000012
【図１２】
0006464777.tif 000013
【図１３】
0006464777.tif 000014
【図１４】
0006464777.tif 000015
【図１５】
0006464777.tif 000016
【図１６】
0006464777.tif 000017
【図１７】
0006464777.tif 000018