(57)【要約】【課題】  異なる性能を持つハードディスクを用いた仮想計算機システムにおいて、アクセスの態様ごとに設定した安定的な入出力性能を得る。【解決手段】ディスク制御装置は、プロセッサから発行されるＩＯ命令による仮想ディスクイメージファイルへのアクセスが、少なくともシーケンシャルアクセスか又はランダムアクセスかのアクセスの態様を判断し、判断されたアクセスの態様に従って、アクセス目標時間管理テーブルに予め設定された仮想ディスクイメージファイルに対する入出力処理の目標入出力時間と実際にかかる入出力時間の関係から、実際の入出力時間が短い場合に、目標入出力時間まで入出力処理を休止するように制御する。【選択図】図２
2014026569.tif 000002
【特許請求の範囲】
【請求項１】
ＩＯ命令を発行するプロセッサと、ハードディスク上に形成される複数の仮想ディスクイメージファイルと、該プロセッサから発行されるＩＯ命令に従い、アクセス先となる該仮想ディスクイメージファイルの入出力処理を制御するディスク制御装置を有する仮想計算機システムであって、
該ディスク制御装置は、該ＩＯ命令による該仮想ディスクイメージファイルへのアクセスが、少なくともシーケンシャルアクセスか又はランダムアクセスかのアクセスの態様を判断し、
判断されたアクセスの態様に従って、予め設定された該仮想ディスクイメージファイルに対する入出力処理の目標入出力時間と実際にかかる入出力時間の関係から、実際の入出力時間が短い場合には、該目標入出力時間まで入出力処理を休止するように制御することを特徴とする仮想計算機システム。
【請求項２】
前記仮想計算機システムは、該仮想ディスクイメージファイルに対するＩＯ命令であるwrite命令及びread命令の、シーケンシャルアクセスかランダムアクセスかのアクセスの態様ごとに、多重度及び入出力するデータ容量に応じた目標入出力時間を登録するアクセス目標時間管理テーブルを有し、
前記ディスク制御装置は、ＩＯ命令であるwrite命令及びread命令に伴う、該仮想ディスクイメージファイルの入出力処理に要する実際の時間を算出し、
該アクセス目標時間管理テーブルに登録された、アクセスの態様と、多重度と、データ容量に応じた目標入出力時間と、該算出された入出力時間との差分を計算し、
該差分の時間、アクセス先となる該仮想ディスクイメージファイルに対する入出力処理を休止するように制御する
ことを特徴とする請求項１の仮想計算機システム。
【請求項３】
前記仮想計算機システムは、更に、複数の仮想ディスクイメージファイルへのアクセスの履歴を保持するアクセス履歴管理テーブルと、複数の仮想ディスクイメージファイルへのアクセスの状態を保持する多重度管理テーブルを有し、
該多重度管理テーブルを参照して、同じハードディスクに対するアクセスの多重度を求め、
該アクセス履歴管理テーブルを参照して、最新のアクセス先となる該仮想ディスクイメージファイルのアドレスを記録すると共に、過去にアクセスした該仮想ディスクイメージファイルのアドレスから、現在行われている仮想ディスクイメージファイルへのアクセスがシーケンシャルアクセスかランダムアクセスかのアクセスの態様を判断することを特徴とする請求項２の仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想計算機システムに係り、特に、仮想計算機システムで使用されるハードディスクに配置される仮想ディスクイメージに対する入出力性能制御に関する。
【背景技術】
【０００２】
計算機等の装置の製造メーカは、一般的に資材の調達リスクを回避する観点から装置に実装される部品をマルチベンダで購入している。サーバに搭載されるハードディスクも例外ではない。各ベンダのハードディスクは回転数やキャッシュ容量等の基本性能は同一であっても、入出力性能は異なることが多い。これは、各ベンダがハードディスク毎にもっとも高い性能を発揮させるため、ハードウェアやソフトウェアともに独自の技術を投入しているためである。
【０００３】
しかるに、現状ではディスク性能をベンダ間で統一的に定めるような試みは行われていない。そのため、製造メーカが、複数ベンダのハードディスクを同じ計算機システムに搭載した場合、ディスク性能の差がその計算機システムの入出力時間の差としてユーザに見えてしまう可能性がある。
【０００４】
また、サーバの使用期間が長期化すると、稼働中にハードディスクに故障が発生するおそれがある。その場合、故障のハードディスクを同じハードディスクと交換する必要があるが、そのハードディスクはもはや製造中止で在庫がなく調達できず、新しい世代の高性能なハードディスクを使用しなければならないことがある。この場合、レガシーなＯＳをエミュレートする仮想計算機システムにおいては、性能の大幅な向上が入出力完了割り込みのタイミングに影響し、想定外のシステム障害を引き起こす可能性がある。なお、特許文献１には、アレイディスクが故障した場合、アレイディスクの予防交換の判定基準をアレイディスクの世代毎に動的に変更することにより、世代ごとの信頼性を考慮してディスクの予備交換を行うようにしたアレイディスク群の保守管理システムが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１７１２３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、複数のベンダやモデルのハードディスクを採用した仮想計算機システムではハードディスクごとに入出力性能が異なるため、安定した性能を確保することが難しい。
【０００７】
そこで、本発明の目的は、異なる性能を持つハードディスクを用いた仮想計算機システムにおいて、ディスクへのアクセスの態様ごとに設定した安定的な入出力性能を得ることにある。
【課題を解決するための手段】
【０００８】
本発明に係る仮想計算機システムは、好ましくは、ＩＯ命令を発行するプロセッサと、ハードディスク上に形成される複数の仮想ディスクイメージファイルと、該プロセッサから発行されるＩＯ命令に従い、アクセス先となる該仮想ディスクイメージファイルの入出力処理を制御するディスク制御装置を有する仮想計算機システムであって、
該ディスク制御装置は、該ＩＯ命令による該仮想ディスクイメージファイルへのアクセスが、少なくともシーケンシャルアクセスか又はランダムアクセスかのアクセスの態様を判断し、
判断されたアクセスの態様に従って、予め設定された該仮想ディスクイメージファイルに対する入出力処理の目標入出力時間と実際にかかる入出力時間の関係から、実際の入出力時間が短い場合には、該目標入出力時間まで入出力処理を休止するように制御することを特徴とする仮想計算機システムとして構成される。
【０００９】
好ましい例では、前記仮想計算機システムは、該仮想ディスクイメージファイルに対するＩＯ命令であるwrite命令及びread命令の、シーケンシャルアクセスかランダムアクセスかのアクセスの態様ごとに、多重度及び入出力するデータ容量に応じた目標入出力時間を登録するアクセス目標時間管理テーブルを有し、
前記ディスク制御装置は、ＩＯ命令であるwrite命令及びread命令に伴う、該仮想ディスクイメージファイルの入出力処理に要する実際の時間を算出し、
該アクセス目標時間管理テーブルに登録された、アクセスの態様と、多重度と、データ容量に応じた目標入出力時間と、該算出された入出力時間との差分を計算し、
該差分の時間、アクセス先となる該仮想ディスクイメージファイルに対する入出力処理を休止するように制御する、前記仮想計算機システムとして構成される。
【００１０】
更に好ましい例では、前記仮想計算機システムは、更に、複数の仮想ディスクイメージファイルへのアクセスの履歴を保持するアクセス履歴管理テーブルと、複数の仮想ディスクイメージファイルへのアクセスの状態を保持する多重度管理テーブルを有し、
該多重度管理テーブルを参照して、同じハードディスクに対するアクセスの多重度を求め、
該アクセス履歴管理テーブルを参照して、最新のアクセス先となる該仮想ディスクイメージファイルのアドレスを記録すると共に、過去にアクセスした該仮想ディスクイメージファイルのアドレスから、現在行われている仮想ディスクイメージファイルへのアクセスがシーケンシャルアクセスかランダムアクセスかのアクセスの態様を判断することを特徴とする、前記仮想計算機システムとして構成される。
【発明の効果】
【００１１】
本発明によれば、異なる性能を持つハードディスクを用いた仮想計算機システムにおいて、アクセスの態様ごとに設定した安定的な入出力性能を得ることが可能である。
【図面の簡単な説明】
【００１２】
【図１】ソフトウェアエミュレーション方式を用いた計算機の構成を概念的に示す図。
【図２】ソフトウェアエミュレーション方式を用いた計算機のエミュレーションプログラム構成例を示す図。
【図３】ソフトウェアエミュレーション方式を用いた計算機におけるＤＫＣの処理動作を示すフローチャート。
【図４】一実施例における、ソフトウェアエミュレーション方式を用いた計算機における性能チューニング処理を加えたディスク制御部の処理動作を示すフローチャート。
【図５】一実施例におけるＩＯ命令の構成例を示す図。
【図６】一実施例における多重度管理テーブルの例を示す図。
【図７】一実施例におけるアクセス履歴管理テーブルの例を示す図。
【図８】一実施例における目標入出力時間テーブルの例を示す図。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、本発明の一実施例について説明する。
本実施例は、仮想計算機システムにおいてハードディスクに配置される仮想ディスクイメージはソフトウェアエミュレーション方式を用いた計算機で実現される。
そこで、図１にソフトウェアエミュレーション方式を用いた計算機の構成について概念的に示す。この計算機は、プロセッサやメモリ等の汎用ハードウェア１６と、汎用ハードウェアの基本的な制御を行うために汎用ハードウェアに組み込まれたファームウェア１５と、計算機システム全体を管理するホストＯＳ１４と、汎用ハードウェアに所定の機能を実現させるエミュレーションプログラム１３と、ホストＯＳに搭載されたゲストＯＳ１２と、ユーザプログラム１１を備えて構成される。なお、ホストＯＳ１４のシステム関数は計時動作を行うタイマを有する。
【００１４】
図２は、ソフトウェアエミュレーション方式を用いた計算機のミュレーションプログラムの構成を示す。
エミュレーションプログラム２３は、命令を実行する命令実行プロセッサ（ＩＰ）２３１と、ＩＰから発行されるＩＯ命令に従い各ＩＯへ命令を転送しＩＯ処理全般を制御するＩ／Ｏプロセッサ（ＩＯＰ）２３２と、ＩＯＰからの命令を受け仮想ディスクイメージファイル２３５のＩＯ処理を実行するディスクコントローラ（ＤＫＣ）２３３を有して構成される。これらは１プロセス中でスレッドとして実装するものとする。なお、ＩＯ命令の構成については図５を参照して後述する。
【００１５】
複数の仮想ディスクイメージファイル２３５−１，２３５−２（総じて２３５と表す）は、ハードディスクを含む汎用ハードウェア２６上に構築されたファイルである。ＤＫＣ２３３−１，２３３−２は、それぞれ対応する仮想ディスクイメージファイル２３５−１，２３５−２に接続され、ホストＯＳ１４が管理するファイルシステムを通してこれらを制御する。仮想ディスクイメージファイル２３５−１，２３５−２は、それぞれデバイスアドレス「１００」、「１０１」を有し、エミュレーション対象のゲストＯＳ２２からＤＫＣ２３３を通して制御される。
【００１６】
また、ＤＫＣ２３３は、ＩＯ（この例では仮想ディスクイメージファイル）へのアクセスの多重度を管理する多重度管理テーブル６０を有している（図６を参照して後述）。更に、ＤＫＣ２３３は、ＩＯへのアクセスの履歴を管理するアクセス履歴管理テーブル７０を有している（図７を参照して後述）。また、ホストＯＳ１４上には、ＩＯに対する目標入出力時間を管理するアクセス目標時間管理テーブル８０を有している（図８を参照して後述）。
【００１７】
なお、本実施例では１台のハードディスクに２つの仮想ディスクイメージを構築しているが、ハードディスク台数及び仮想ディスクイメージの数等は本例に限定されない。
【００１８】
図５は、ＩＰ２３１から発行されるＩＯ命令の構成例を示す。
ＩＯ命令は、ＩＯ命令が実行されるＩＯ（この例では仮想ディスクイメージファイル）のアドレスを示すデバイスアドレス５１、実行するコマンド５２、ゲストＯＳ１２が指定するハードディスク上のセクタ位置を示すセクタアドレス（ＬＢＡ）５３、データ量を示すデータサイズ５４、ハードディスクへの書き込みデータ又はハードディスクから読み込んだデータを格納する仮想メモリ上のアドレスを示すデータアドレス５５を有して構成される。ここで、コマンド５２には、仮想ディスクイメージファイルにデータを書き込むライト(Write)コマンド、仮想ディスクイメージファイルに記録されたデータを読み出すリード(Read)コマンド、ディスク上をシーク(Seek)するシークコマンド等がある。
例えば、ＩＰ２３１からデバイスアドレス「１００」の仮想ディスクイメージファイルへ発行されたＩＯ命令は、ＩＯＰ２３２を経由し、ＤＫＣ２３３−１へ転送される。
【００１９】
図６は、多重度管理テーブルの例を示す。
多重度管理テーブル６０はアクセスの多重度を管理するものであり、グローバル変数として実装され、ＤＫＣ２３３−１及び２３３−２の各スレッドからアクセス可能とする。ここで、アクセスフラグとして、アクセス中は「１」、非アクセス時は「０」を記憶する。デバイスアドレス「１００」への命令実行の例では、６１にアクセス中フラグ「１」を記録し、アクセスが終わると「０」に戻される。アクセスの多重度は、これらフラグの値の合計値として表される。
【００２０】
図示の例では、デバイスアドレスが「＃１００」の仮想ディスクイメージファイルのフラグはアクセス中で「１」、デバイスアドレスが「＃１０１」の仮想ディスクイメージファイルのフラグは非アクセスで「０」なので、多重度は「１」となる。
また、デバイスアドレスが「＃１００」と「＃１０１」の両方の仮想ディスクイメージファイルがアクセス中のときは、両方のフラグともに「１」であるので、多重度は「２」（即ち、２＝「１」＋「１」）となる。
図２の例では、２つの仮想ディスクイメージファイルしか示していないが、例えば他の例として、１つのハードディスク上に８個の仮想ディスクイメージファイルが定義される場合、最大で全ての仮想ディスクイメージファイルがアクセス中のときがあるとすると、多重度は最大「８」となることがある。
【００２１】
図７は、アクセス履歴管理テーブルの例を示す。
アクセス履歴管理テーブル７０は、ＩＯ（この例では仮想ディスクイメージファイル）へのアクセス履歴を管理する。このアクセス履歴管理テーブル７０は、８回分（＃１から＃８まで）のアクセス履歴と、アクセス先となるセクタアドレス（ＬＢＡ）７１を保存する。９番目（＃９の位置）の場所７２は、アクセスの最新の履歴位置の番号を保持する。この例では、最新の履歴場所は＃４であることを示す。因みに、次回のアクセス履歴の保管場所は、＃５の位置となる。
【００２２】
アクセス履歴管理テーブル７０で管理されるアクセス履歴は、アクセスパターン（アクセスの態様）を解析する処理に用いられるため、アクセスパターンが判断できる程度の数（本例では８回分）のアクセス履歴を記録しておくことで足りるとしている。８番目を超えるアクセスの履歴は、再び＃１の場所に戻って（サイクリックに）その位置にオーバーライトする。
図示の例でアクセスパターンについて言えば、＃１〜＃３まではデバイスアドレスが順次増えているのでシーケンシャルアクセスであり、＃４でランダムアクセスに変わった。＃５〜＃８までは古い前のアクセスパターンの状態を示している。
【００２３】
図８は、アクセス目標時間管理テーブルの例を示す。
アクセス目標時間管理テーブル８０は、仮想ディスクイメージファイルに対するwrite命令及びread命令の、アクセスパターン（シーケンシャルアクセス、ランダムアクセス）ごとの目標入出力時間を登録して管理する。write命令及びread命令の多重度に対応して、アクセスパターンにおける異なるデータ量（**ＫＢ）のデータを入出力するに要する目標入出力時間（μs）を登録する。例えば、多重度「２」で２４ＫＢ（キロバイト）のデータをシーケンシャルアクセスで仮想ディスクイメージファイルにwriteする場合の目標時間は１５００μs、同じく多重度「２」で４ＫＢのデータをランダムアクセスで仮想ディスクイメージファイルにwriteする場合の目標時間は３０００μs、である。
【００２４】
図３は、ソフトウェアエミュレーション方式を用いた計算機におけるＤＫＣ２３３における処理動作を示すフローチャートである。
ＤＫＣ２３３は、ＩＰ２３１から発行されたＩＯ命令の命令解析を行う（Ｓ３０１）。この命令解析は、受信したＩＯ命令が、ディスクアクセス命令（Read命令又はWrite命令）か、それ以外の命令かを判定する。ここで、ディスクアクセス命令とは、ディスクに対してＩＯ処理（Read/Write）を伴う命令であり、それ以外の命令とは、例えば、割込み命令や診断命令等のように、ディスクに対してＩＯ処理（Read/Write）を伴わない命令である。
【００２５】
命令解析の結果、ディスクアクセス命令以外の場合、エミュレーション処理（Ｓ３０２）にて仮想的に命令を処理し、終了報告を行う。一方、ＩＯ命令がディスクアクセス命令であった場合、ゲストＯＳの指定するエミュレーション対象のディスクセクタアドレス（ＬＢＡ）５３を仮想ディスクイメージファイル２３５−１又は２３５−２の位置に変換し、ＳＥＥＫにて読み書き位置を目的の場所に移動する（Ｓ３０３）。
次に、Ｉ／Ｏ処理(Ｓ３０４)においてRead/Write処理を実行した後（Ｓ３０４）、ＩＯＰ２３２経由でＩＰ２３１へＩ／Ｏ終了報告をする（Ｓ３０５）。
【００２６】
本実施例で特徴的なことは、図４に示すように、図３の処理動作におけるハードディスクへのＩＯ性能をアクセスパターンで決められた目標性能に調整することができる。アクセスパターンとは、ディスクに対するアクセスが、シーケンシャルアクセスか、ランダムアクセスか、或いは多重度アクセスか、のようなアクセスの仕方をいう。
【００２７】
以下、図４を用いて、本実施例の特徴的な処理について説明する。
図４のフローチャートにおいて、ＤＫＣ２３３は、図３と同様に命令解析を行う（Ｓ４０１）。命令解析の結果、ディスクアクセス命令以外の命令の場合には、図３と同様に、エミュレーション処理を実施し（Ｓ４０２）、Ｉ／Ｏ終了報告をする（Ｓ４１２）。
【００２８】
命令解析の結果、ディスクアクセス命令（Read命令又はWrite命令）であった場合、アクセスパターンの解析処理を行う（Ｓ４０３）。アクセスパターンの解析処理は、アクセス履歴管理テーブル７０を参照して、アクセス履歴を記録し、また９番目（７２）に最終更新位置を記録する。即ち、ＩＯ命令（図５）のセクタアドレス５３で示されるアドレスを＃５番目の位置に記録して（即ちアクセス履歴の最も古い位置に上書きして）、９番目（７２）を「５」を更新する（５番目が最新の履歴位置になる）。かつ、＃５番目に記録されるセクタアドレスがその前の位置（＃４番目）のセクタアドレスに比べて、＋１かを判断する。＋１の場合、セクタアドレスは連続しているのでシーケンシャルアクセスと判断する。一方、＋１でない場合はアドレスが連続していないので、ランダムアクセスと判断する。
【００２９】
次に、多重度管理テーブル６０を更新する（Ｓ４０４）。即ち、アクセス先となるデバイスアドレスのアクセスフラグを「１」を記録する。
次に、Ｉ／Ｏ開始時間取得処理（Ｓ４０５）にて、ホストＯＳ１４からＩ／Ｏ処理の開始時間を取得してメモリに記録する。この取得動作は、ホストＯＳ１４のシステム関数からマイクロ秒単位で行われる。
【００３０】
ＳＥＥＫ（Ｓ４０６）では、ゲストＯＳの指定するエミュレーション対象のディスクセクタアドレス（ＬＢＡ）５３を仮想ディスクイメージファイル２３５−１又は２３５−２の位置に変換し、ＳＥＥＫにて読み書き位置を目的の場所に移動する。なお、本実施例で使用するゲストＯＳのディスクは５１２Ｂｙｔｅ/セクタの固定長ディスクとし、仮想ディスクイメージファイル２３５−１，２３５−２上の読み書き位置は５１２Ｂｙｔｅ×ＬＢＡで決定する。
【００３１】
その後、Ｉ／Ｏ処理(Ｓ４０７)でRead/Write処理を実行する。そして、Ｉ／Ｏ時間計算処理（Ｓ４０８）において、Ｉ／Ｏ処理終了時間をホストＯＳ１４のシステム関数から取得し、当初取得していたＩ／Ｏ処理の開始時間の差分を計算して、本件Ｉ／Ｏ処理に要した時間を算出する。
【００３２】
ｓｌｅｅｐ時間判定処理（Ｓ４０９）では、ＩＰ２３１から転送されるＩＯ命令によって転送されるデータサイズ５４、アクセス解析処理(Ｓ４０３)で得られたアクセスパターン、及び多重度管理テーブルの更新処理（Ｓ４０４）で得られた同一ハードディスク内の多重度を基に、アクセス目標時間管理テーブル８０を参照して、当該データサイズ、アクセスパターン、多重度に応じた目標入出力時間を取得する。そして、この取得された目標入出力時間と、Ｉ／Ｏ時間計算処理（Ｓ４０８）で得た実際にＩ／Ｏ処理に要した時間との差分を計算する。この結果算出された時間（ここではｓｌｅｅｐ時間という）が、アクセスパターンによって調整すべき時間となる（即ちハードディスクへのＩＯ性能をアクセスパターンで決められた目標性能に調整することになる）。
【００３３】
ｓｌｅｅｐ実行処理（Ｓ４１０）では、ｓｌｅｅｐ時間判定処理（Ｓ４０９）で算出した時間の間、ｓｌｅｅｐする。例えば、ＩＰ２３１から発行された命令が、Write命令で、シーケンシャルアクセス、データ長２４ＫＢ、多重度「１」の場合、アクセス目標時間管理テーブル８０から、１０００（μs）が目標入出力時間となる。一方、実際のＩ／Ｏ処理時間が６００（μs）であった場合には、その差分時間である４００（μs）の間ｓｌｅｅｐ（即ちアクセス先のセクタに対する入出力処理の一時的な休止）を実行する。なお、Ｉ／Ｏ時間が目標時間を上回っている場合、ｓｌｅｅｐ処理は行わずに、先の処理へと進む。
【００３４】
この処理で、Ｉ／Ｏアクセスは完了するので、多重度管理テーブル６０を更新処理（Ｓ４１１）にて多重度管理テーブル６０のアクセスフラグ（６１）に「０」を記録する。そして最後に、Ｉ／Ｏ終了報告（Ｓ４１２）を実施して、一連の処理を終了する。
【００３５】
このように、本実施例によれば、複数のハードディスク間で実際のアクセスの入出力時間が異なったとしても、アクセスするＩＯ命令に伴うデータサイズ、アクセスパターン、多重度に応じて、アクセス目標時間管理テーブルに予め設定された目標入出力時間に対する差分の時間だけＩＯ処理をＳｌｅｅｐさせることで、好ましい入出力時間を確保することができ、ディスクへのアクセスの態様ごと安定的な入出力性能を得ることが可能となる。
【符号の説明】
【００３６】
１１：ユーザプログラム  １２：ゲストＯＳ  １３：エミュレーションプログラム
１４：ホストＯＳ  １５：ファームウェア  １６：汎用ハードウェア
２３１：命令実行プロセッサ
２３２：Ｉ／Ｏプロセッサ
２３３、２３３−１，２３３−２：ディスクコントローラ
２３５、２３５−１、２３５−２：仮想ディスクイメージファイル
【図１】
2014026569.tif 000003
【図２】
2014026569.tif 000004
【図３】
2014026569.tif 000005
【図４】
2014026569.tif 000006
【図５】
2014026569.tif 000007
【図６】
2014026569.tif 000008
【図７】
2014026569.tif 000009
【図８】
2014026569.tif 000010