(57)【要約】      （修正有）【課題】プロビジョニングに使用されるデータ処理システムにおいて、事前にキャッシュすべきＯＳのイメージを選択する技術を提供する。【解決手段】互いに異なる複数のＯＳのイメージを有する第１プールと、複数のデータ処理システムを有する第２プールとを含むプロビジョニング・システムにおいて、第１プール内の各ＯＳのイメージについて、該ＯＳのイメージが次のプロビジョニングにおいて使用される確率を算出し、対象データ処理システムにおけるキャッシュのために第１プールから選択可能な１以上のＯＳのイメージのあらゆる組み合わせの中で、その組み合わせのキャッシュを仮定して得られる次のプロビジョニングにおけるＯＳのイメージの転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせを、対象データ処理システムにおいてキャッシュすべき１以上のＯＳのイメージとして決定し、決定した組み合わせのＯＳのイメージの転送を要求する。【選択図】図４
2012068790.tif 000002
【特許請求の範囲】
【請求項１】
互いに異なる複数のオペレーティング・システム(ＯＳ)のイメージを有する第１プールと、複数のデータ処理システムを有する第２プールとを含むプロビジョニング・システムにおいて、前記複数のデータ処理システムの１つである対象データ処理システムにおいてキャッシュすべき１以上のＯＳのイメージを前記第１プール内の前記複数のＯＳのイメージから選択する選択方法であって、コンピュータの処理により、
前記第１プール内の各ＯＳのイメージについて、該ＯＳのイメージが次のプロビジョニングにおいて使用される確率を算出するステップと、
前記対象データ処理システムにおけるキャッシュのために前記第１プール内の前記複数のＯＳのイメージから選択可能な１以上のＯＳのイメージのあらゆる組み合わせの中で、そのキャッシュを仮定して得られる前記次のプロビジョニングにおける前記対象データ処理システムへのＯＳのイメージの転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせを、キャッシュすべき１以上のＯＳのイメージとして決定するステップと、
を含む選択方法。
【請求項２】
前記確率を算出するステップは、前記第１プール内の前記各ＯＳのイメージについて、該ＯＳのイメージを用いて作成され、かつ前記第２プール内のいずれかのデータ処理システムにおいて現在稼動中のリソースの数を求めるステップを含む、請求項１に記載の選択方法。
【請求項３】
前記決定するステップは、前記第１プール内のi番目のＯＳのイメージについて、該ＯＳのイメージのサイズをSi、該ＯＳのイメージを使用して作成され、かつ現在稼動中のリソースの数をpi、及び該ＯＳのイメージの前記対象データ処理システムにおけるキャッシュの状態を２値で表す変数をxiとした場合に、キャッシュする１以上のＯＳのイメージの合計サイズが前記対象データ処理システムにおけるキャッシュ・サイズを超えないという条件の下、前記第１プール内の全ＯＳのイメージについてのpi *Si *xiの総和を最大にするxiのパターンを算出するステップと、算出したxiのパターンに基づき前記転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせ決定するステップとを含む、請求項２に記載の選択方法。  
【請求項４】
前記第１プール内の全ＯＳのイメージについての前記pi *Si *xiの総和を最大にするxiのパターンを、０−１ナップサック問題の近似アルゴリズムを用いて算出する、請求項３に記載の選択方法。
【請求項５】
プロビジョニング時に前記対象データ処理システムにおいて前記第１プール内のＯＳのイメージの転送要求が生じたことに応答して、前記対象データ処理システムにおいてキャッシュされている１以上のＯＳのイメージから前記対象データ処理システムにおいて使用中のＯＳのイメージを除いた残りのＯＳのイメージに対し、
該ＯＳのイメージを用いて作成され、かつ前記第２プール内のいずれかのデータ処理システムにおいて現在稼動中であるリソースの数を求めるステップと、
前記キャッシュ・サイズから前記使用中のＯＳのイメージと新たに転送されるＯＳのイメージのサイズとを引いた値を新たなキャッシュ・サイズとして、前記対象データ処理システムへのＯＳのイメージの転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせを新たに決定するステップと、
前記残りＯＳのイメージのうち、前記新たに決定された組み合わせに含まれないＯＳのイメージを前記対象データ処理システムから削除するステップとを更に含む、請求項４に記載の選択方法。
【請求項６】
前記リソースは、前記第１プール内のいずれかのＯＳのイメージを用いて前記第２プール内のいずれかのデータ処理システム上のハイパーバイザにより提供される仮想マシンである、請求項４に記載の選択方法。  
【請求項７】
前記第１プールは更に、各ＯＳのイメージについて、該ＯＳのイメージを基に作成されるカスタマイズされたＯＳのイメージから前記ＯＳのイメージを差し引いた差分のイメージを１以上有し、前記最小の期待値を与える前記第１プール内の１以上のＯＳのイメージの組み合わせは、ＯＳのイメージと該ＯＳのイメージに対応する差分のイメージとの転送時間の期待値を最小にする、請求項４に記載の選択方法。  
【請求項８】
請求項１乃至７のいずれかに記載の方法を、前記コンピュータに実行させる選択プログラム。
【請求項９】
前記コンピュータは、前記対象データ処理システムである、請求項８に記載の選択プログラム。
【請求項１０】
互いに異なる複数のオペレーティング・システム(ＯＳ)のイメージを有する第１プールから、複数のデータ処理システムを有する第２プール内の対象とするデータ処理システムにおいてキャッシュする１以上のＯＳのイメージを選択するための装置であって、
前記第１プール内の各ＯＳのイメージについて、該ＯＳのイメージが次のプロビジョニングにおいて使用される確率を算出する確率算出部と、
前記対象とするデータ処理システムにおけるキャッシュのために前記第１プールから選択可能な１以上のＯＳのイメージのあらゆる組み合わせの中で、その組み合わせのＯＳのイメージのキャッシュを仮定して得られる前記次のプロビジョニングにおける前記対象データ処理システムへのＯＳのイメージの転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせを、前記対象データ処理システムにおいてキャッシュすべき１以上のＯＳのイメージとして決定する組み合わせ決定部と、
を含む装置。
【請求項１１】
前記確率算出部は、前記第１プール内の前記各ＯＳのイメージについて、該ＯＳのイメージを用いて作成され、かつ前記第２プール内のいずれかのデータ処理システムにおいて現在稼動中のリソースの数を求めることにより、前記確率を算出する、請求項１０に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロビジョニングに使用されるデータ処理システムにおいて事前にキャッシュすべきＯＳのイメージを選択する技術に関する。
【背景技術】
【０００２】
従来、迅速なプロビジョニングをするための方法として、予め所定のオペレーティング・システム（ＯＳ）／アプリケーションをインストールしたコンピュータのディスク・イメージをリポジトリ・サーバに複数種類用意しておき、プロビジョニング時にはリポジトリ・サーバから必要なディスク・イメージを選んで、プロビジョニングするコンピュータにコピーするクローン・インストールが知られている。
【０００３】
しかしネットワーク経由での完全なディスク・イメージの転送は時間を要する。また、非常に多くのリソース要求が一度になされる場合、リポジトリ・サーバがボトルネックとなって処理が遅延するおそれがある。
【０００４】
上記問題に関し、特許文献１は、サーバとクライアント間で仮想マシンを転送する際に、仮想マシンのイメージ・ファイルの差分データのみを転送することで、処理の高速化を図る技術を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２００８／０２０１４１４９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１が開示する技術は、イメージ・ファイルの差分データの取得、及び転送方法に限定されている。即ち、特許文献１は、そのようにイメージ・ファイルの差分データのみの転送によって高速化を図れるようにするための、ベースとなるイメージ・ファイルのキャッシュや、キャッシュすべきイメージ・ファイルの選択方法について何ら開示していない。
【０００７】
この発明は、上記の問題点を解決するためになされたものであって、プロビジョニングに使用されるデータ処理システムにおいて事前にキャッシュすべきＯＳのイメージを選択する技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の第１の態様においては、互いに異なる複数のオペレーティング・システム(ＯＳ)のイメージを有する第１プールと、複数のデータ処理システムを有する第２プールとを含むプロビジョニング・システムにおいて、前記複数のデータ処理システムの１つである対象データ処理システムにおいてキャッシュすべき１以上のＯＳのイメージを前記第１プール内の前記複数のＯＳのイメージから選択する選択方法であって、コンピュータの処理により、前記第１プール内の各ＯＳのイメージについて、該ＯＳのイメージが次のプロビジョニングにおいて使用される確率を算出するステップと、前記対象データ処理システムにおけるキャッシュのために前記第１プール内の前記複数のＯＳのイメージから選択可能な１以上のＯＳのイメージのあらゆる組み合わせの中で、そのキャッシュを仮定して得られる前記次のプロビジョニングにおける前記対象データ処理システムへのＯＳのイメージの転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせを、キャッシュすべき１以上のＯＳのイメージとして決定するステップと、を含む選択方法を提供する。
【０００９】
好ましくは、前記確率を算出するステップは、前記第１プール内の前記各ＯＳのイメージについて、該ＯＳのイメージを用いて作成され、かつ前記第２プール内のいずれかのデータ処理システムにおいて現在稼動中のリソースの数を求めるステップを含む。求めたＯＳのイメージごとのリソースの数は、それぞれ、前記プロビジョニング・システムにおいて現在稼動中のリソースの総数で割ってもよく、あるいはそのまま、前記転送時間の期待値を求めるのに利用してもよい。
【００１０】
更に好ましくは、前記決定するステップは、前記第１プール内のi番目のＯＳのイメージについて、該ＯＳのイメージのサイズをSi、該ＯＳのイメージを使用して作成され、かつ現在稼動中のリソースの数をpi、及び該ＯＳのイメージの前記対象データ処理システムにおけるキャッシュの状態を２値で表す変数をxiとした場合に、キャッシュする１以上のＯＳのイメージの合計サイズが前記対象データ処理システムにおけるキャッシュ・サイズを超えないという条件の下、前記第１プール内の全ＯＳのイメージについてのpi *Si *xiの総和を最大にするxiのパターンを算出するステップと、算出したxiのパターンに基づき前記転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせ決定するステップとを含む。  
【００１１】
更にまた好ましくは、前記第１プール内の全ＯＳのイメージについての前記pi *Si *xiの総和を最大にするxiのパターンを、０−１ナップサック問題の近似アルゴリズムを用いて算出する。
【００１２】
更にまた好ましくは、プロビジョニング時に前記対象データ処理システムにおいて前記第１プール内のＯＳのイメージの転送要求が生じたことに応答して、前記対象データ処理システムにおいてキャッシュされている１以上のＯＳのイメージから前記対象データ処理システムにおいて使用中のＯＳのイメージを除いた残りのＯＳのイメージに対し、該ＯＳのイメージを用いて作成され、かつ前記第２プール内のいずれかのデータ処理システムにおいて現在稼動中であるリソースの数を取得するステップと、前記キャッシュ・サイズから前記使用中のＯＳのイメージと新たに転送されるＯＳのイメージのサイズとを引いた値を新たなキャッシュ・サイズとして、前記対象データ処理システムへのＯＳのイメージの転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせを新たに決定するステップと、前記残りＯＳのイメージのうち、前記新たに決定された組み合わせに含まれないＯＳのイメージを前記対象データ処理システムから削除するステップとを含む。
【００１３】
また好ましくは、プロビジョニングによって提供される前記リソースは、前記第１プール内のいずれかのＯＳのイメージを用いて前記第２プール内のいずれかのデータ処理システム上のハイパーバイザにより提供される仮想マシンである。
【００１４】
また好ましくは、前記第１プールは更に、各ＯＳのイメージについて、該ＯＳのイメージを基に作成されるカスタマイズされたＯＳのイメージから前記ＯＳのイメージを差し引いた差分のイメージを１以上有し、前記最小の期待値を与える前記第１プール内のＯＳの１以上のイメージの組み合わせは、ＯＳのイメージと該ＯＳのイメージに対応する差分のイメージとの転送時間の期待値を最小にする。
【００１５】
以上、キャッシュすべき１以上のＯＳのイメージを選択する選択方法として本発明を説明したが、本発明は、コンピュータに上記選択方法を実行させる選択プログラム及び該選択プログラムをコンピュータにインストールすることによって実現される選択装置として把握することもできる。
【発明の効果】
【００１６】
本発明によれば、プロビジョニングに使用されるデータ処理システムに対し、ＯＳのイメージの転送時間の期待値を最小にする１以上のＯＳのイメージの組み合わせが決定され、決定された組み合わせが、データ処理システムにおいて事前にキャッシュすべき１以上のＯＳのイメージの組み合わせとして決定される。そのため、該決定に従って１以上のＯＳのイメージを事前にキャッシュすると、プロビジョニング時において、カスタマイズされたＯＳのイメージからキャッシュされているベースとなるＯＳのイメージを差し引いた差分のイメージのみを転送すればよい機会が増え、プロビジョニングの高速化を一層促進できる。本発明のその他の効果については、各実施の形態の記載から理解される。
【図面の簡単な説明】
【００１７】
【図１Ａ】プロビジョニング・システムのリクエスト前の初期状態を示す図である。
【図１Ｂ】プロビジョニング・システムの第１のリクエスト時の状態を示す図である。
【図１Ｃ】プロビジョニング・システムの第２のリクエスト時の状態を示す図である。
【図２】本発明の実施形態に係る選択装置２００の機能ブロック図である。
【図３】ある時点におけるプロビジョニング・システムの状態を示す図である。
【図４】本発明の実施形態に係る選択装置２００による事前キャッシュ処理の流れを示すフローチャートである。
【図５】本発明の実施形態に係る選択装置２００によるキャッシュミス時のイメージ削除処理の流れを示すフローチャートである。
【図６】０−１ナップサック問題の近似アルゴリズムに基づく処理の流れを示すフローチャートである。
【図７】本発明の実施形態に係るコンピュータ５０のハードウェア構成の一例を示す。
【発明を実施するための形態】
【００１８】
以下、本発明を実施するための形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１９】
本発明の説明に入る前に、図１Ａ乃至図１Ｃを参照して本発明が前提とするプロビジョニング・システムを説明する。図１Ａは、ユーザからのリクエストを受け付ける前のプロビジョニング・システム１００ａ内の初期状態を示す。プロビジョニング・システム１００ａは、ユーザからリソースのリクエストを受信し、該リクエストを満たす仮想マシンを構築してユーザに提供するプロビジョニング・マネージャ１０２と、仮想マシンを構築するために使用される複数種類のオペレーティング・システム（ＯＳ）のイメージを保管するイメージ・プール１０６としてのリポジトリ・サーバ１０４と、仮想マシンを構築するために使用される複数のホストマシン１１０、１２０を含むホストマシン・プール１０８とから構成される。プロビジョニング・マネージャ１０２、リポジトリ・サーバ１０４、及びホストマシン・プール１０８内の各ホストマシン１１０、１２０は、ネットワーク１０１を介して互いに接続される。
なお、図１Ａでは、ホストマシン・プール１０８内に２台のホストマシンが示されているが、ホストマシンの台数に制限はないことを理解されたい。
【００２０】
ホストマシン・プール１０８内のホストマシン１１０、１２０はそれぞれ、イメージ・キャッシュ１１６、１２６とデータディスク・プール１１８、１２８とを備える。イメージ・キャッシュ１１６、１２６は、リポジトリ・サーバ１０４から予め受信した主要なＯＳのイメージを記憶する。データディスク・プール１１８、１２８は、フォーマット済みの固定サイズのデータディスクを保管する。また、各ホストマシン１１０、１２０には、プロビジョニング・マネージャ１０２の指示に従って仮想マシンを構築し管理できるように、ホストＯＳ１１２、１２２上で動作するハイパーバイザ１１４、１２４がそれぞれインストールされている。
【００２１】
図１Ｂは、ユーザからのリクエストを受け付けた際のプロビジョニング・システム１００ｂ内の状態を示す。プロビジョニング・マネージャ１０２は、ユーザからリソースのリクエストを受信すると、ユーザのリクエストを満たす仮想マシンを構築するのに最も適したホストマシンを選択する。図１Ｂに示す例では、ユーザのリクエストはＯＳイメージ１を用いて構築される仮想マシンである。ホストマシン１１０、１２０はどちらもイメージ・キャッシュ１１６、１２６にＯＳイメージ１をキャッシュしているので、いずれのホストマシンを選択したとしても仮想マシンの構築に要する時間は同じである。図１Ｂに示す例では、プロビジョニング・マネージャ１０２は、仮想マシン構築のためにホストマシン１１０を選択している。
【００２２】
ホストマシン１１０のハイパーバイザ１１４は、プロビジョニング・マネージャ１０２からＯＳイメージ１を使用する仮想マシン構築の指示を受けると、ＯＳイメージ１に対する差分イメージ１ａをコピー・オン・ライト（ｃｏｐｙ−ｏｎ−ｗｒｉｔｅ、ｃｏｗ）データとして作成する。続いてハイパーバイザ１１４は、ベースとなるＯＳイメージ１と差分イメージ１ａとを組み合わせてスナップショット・ボリュームを作成し、仮想マシンとして構築するゲストＯＳ１ａ１３２のシステム・ディスクとする（矢印１３０参照）。
【００２３】
上記スナップショット・ボリュームは、例えばLinux（商標）のLogical Volume Managerを用いて作成できる。しかし、そのようなスナップショット・ボリュームを作成できない場合は、ベースとなるＯＳイメージ１と差分イメージ１ａとをマージして、ゲストＯＳ１ａ１３２のシステム・ディスクを作成してもよい。マージ処理では、データの処理単位ごとにｃｏｗデータ内に変更データがあるか否かを判断し、ある場合はｃｏｗデータ内の変更データから、ない場合はベースとなる元のＯＳイメージ１の該当箇所からコピーを行ってシステム・ディスクを作成する。そのためマージ処理によりシステム・ディスクを作成する場合は、スナップショット・ボリュームを作成する場合に比べて処理に時間を要する。
【００２４】
ハイパーバイザ１１４はまた、データディスク・プール１１８から使用可能なデータディスクを選択し、ゲストＯＳ１ａ１３２に割り当てる（矢印１３４参照）。最後にハイパーバイザ１１４は、ゲストＯＳ１ａ１３２をブートする。プロビジョニング・マネージャ１０２は、ブートされたゲストＯＳ１ａ１３２をユーザに提供する。ユーザは、ＯＳイメージ１に対し、設定の変更やアプリケーションの追加等カスタマイズを行うことができる。この際カスタマイズ情報は、ｃｏｗデータとして作成された差分イメージ１ａに保存される。カスタマイズを行ったユーザは、ゲストＯＳ１ａ１３２の使用終了時に、プロビジョニング・マネージャ１０２に対しカスタマイズ情報の保存を要求できる。保存が要求された場合そのカスタマイズ情報である差分イメージ１ａは、ホストマシン１１０からリポジトリ・サーバ１０４へ転送され、イメージ・プール１０６に保管される（矢印１３６参照）。  
【００２５】
図１Ｃは、図１Ｂに示したプロビジョニング後に新たにユーザからリクエストを受け付けた際のプロビジョニング・システム１００ｃ内の状態を示す。図１Ｃに示す例においても、ユーザのリクエストはＯＳイメージ１を用いて構築される仮想マシンである。プロビジョニング・マネージャ１０２は、前回ホストマシン１１０を選択したことから、今回はホストマシン１２０を選択して仮想マシンを提供する。
【００２６】
ホストマシン１２０のハイパーバイザ１２４は、プロビジョニング・マネージャ１０２からＯＳイメージ１を使用する仮想マシン構築の指示を受けると、リポジトリ・サーバ１０４のイメージ・プール１０６から、差分イメージ１ａを差分イメージ１ｂとしてそのイメージ・キャッシュ１２６にコピーする（矢印１３８参照）。続いてハイパーバイザ１２４は、ベースとなるＯＳイメージ１と差分イメージ１ｂとを組み合わせてスナップショット・ボリュームを作成し、仮想マシンとして構築するゲストＯＳ１ｂ１４０のシステム・ディスクとする（矢印１４２参照）。
【００２７】
ハイパーバイザ１２４はまた、データディスク・プール１２８から使用可能なデータディスクを選択し、ゲストＯＳ１ｂ１４０に割り当てる（矢印１４４参照）。最後にハイパーバイザ１２４は、ゲストＯＳ１ｂ１４０をブートする。プロビジョニング・マネージャ１０２は、ブートされたゲストＯＳ１ｂ１４０をユーザに提供する。
【００２８】
このように実際のプロビジョニング時には、カスタマイズ情報である差分イメージのみをリポジトリ・サーバ１０４からホストマシン１１０、１２０へ転送すればよいようにするために、ベースとなる主要なＯＳのイメージを各ホストマシン１１０、１２０に事前に記憶させることもできる。しかし本発明では、プロビジョニングの高速化を一層促進するために、キャッシュするベースとなるＯＳのイメージのより効率的な選択手法を開発した。以下その選択手法について説明する。
【００２９】
本発明のキャッシュするベースとなるＯＳのイメージの選択手法は、プロビジョニング・システム１００ａ、ｂ、ｃを構成する、プロビジョニング・マネージャ１０２とホストマシン・プール１０８内の各ホストマシン１１０、１２０のいずれに実装してもよい。しかしながら、計算速度や資源の有効活用の観点から、本発明を各ホストマシン１１０、１２０にそれぞれ実装し、それによって処理を分散させる方が好ましい。そこで以下では、本発明をホストマシン・プール１０８内の各ホストマシン１１０、１２０に実装する場合について説明する。なお、本発明を実装するホストマシンを以下では選択装置とよぶ。
【００３０】
図２は、本発明の実施形態に係る選択装置２００の機能ブロック図を示す。本実施例において選択装置２００は、図示しない他のホストマシンと共にプロビジョニング・システムにおけるホストマシン・プール２１２を構成する。選択装置２００はまた、ネットワーク２１４を介して、ユーザからリソースのリクエストを受信し、該リクエストを満たすリソースをユーザに提供するプロビジョニング・マネージャ２１６と、互いに異なる複数のＯＳのイメージを有するイメージ・プール２２２としてのリポジトリ・サーバ２２０とに接続される。そして、選択装置２００は、イメージ・プール２２２から、キャッシュする１以上のＯＳのイメージを選択するために、確率算出部２０２と、組み合わせ決定部２０４と、キャッシュする１以上のＯＳのベース・イメージを記憶するイメージ記憶部２０６と、転送要求部２０８と、削除部２１０とを含む。
【００３１】
ここで、リポジトリ・サーバ２２０のイメージ・プール２２２に保管される互いに異なる複数のＯＳのイメージは、例えば、Red HatやOpen SUSE等のLinux（商標）ＯＳ、Windows（登録商標）等のＯＳのイメージであってよい。また、イメージ・プール２２２は、各ＯＳのイメージについて、カスタマイズされたＯＳのイメージからベースとなるＯＳのイメージを差し引いた差分のイメージ（複数可）を更に有してもよい。なお、以下ではベースとなるＯＳのイメージをベース・イメージという。
【００３２】
プロビジョニング・マネージャ２１６は、図１Ａ乃至図１Ｃを参照して説明したプロビジョニング・マネージャ１０２の機能に加えて、カウンタとしての機能（カウント部２１８）を更に有する。カウント部２１８の詳細については後述する。なお、選択装置２００は、図１Ａ乃至図１Ｃを参照して説明したホストマシン・プール１０８内の各ホストマシン１１０、１２０と同様に、プロビジョニング・マネージャ２１６の指示に従ってリソースを構築するための機能構成を更に有する。かかる機能構成は既に説明した通りであるからここでは説明を省略する。
【００３３】
確率算出部２０２は、イメージ・プール２２２内の各ベース・イメージについて、該ベース・イメージが次のプロビジョニングにおいて使用される確率を算出する。このようなあるベース・イメージが次のプロビジョニングで使用される確率は、そのベース・イメージから作成され、かつホストマシン・プール２１２内のいずれかのホストマシン上で現在稼動中のリソースの数に比例すると仮定して求めてよい。
【００３４】
即ち、確率算出部２０２は、上記確率を、イメージ・プール２２２内の各ベース・イメージについて、該ベース・イメージとホストマシン・プール２１２内のいずれかのホストマシンとを使用して作成され、かつ現在稼動中のリソースの数pを、イメージ・プール２２０内のいずれかのベース・イメージとホストマシン・プール２１２内のいずれかのホストマシンとを使用して作成され、かつ現在稼動中のリソースの数Nで除算することにより算出してもよい。
【００３５】
なお、本実施例では、プロビジョニングのためにベース・イメージとホストマシンとを使用して作成されるリソースは仮想マシンであるとする。また、確率算出部２０２は、キャッシュするベース・イメージの選択処理においては、上記確率を、第１プール内の各ベース・イメージについて算出するが、キャッシュミスにより行うベース・イメージの削除処理では、上記確率を、イメージ記憶部２０６にキャッシュされている１以上のベース・イメージから選択装置２００において使用中のベース・イメージを除いた残りのベース・イメージについて算出する。
【００３６】
ここで、図３を参照して、プロビジョニングによって作成され、かつ、現在稼動中である仮想マシンの数pのカウント方法を具体的に説明する。図３は、あるプロビジョニング・システムにおけるリポジトリ・サーバ３００とホストマシン・プール内のホストマシン３０４、３１４、３２２の現在の状況を示す。なお、ホストマシン・プールには、図３に示す３つのホストマシン３０４、３１４、３２２のみが含まれるとする。
【００３７】
まず、イメージ・プール３０２に格納されるベース・イメージ１に注目する。すると、ベース・イメージ１に対しては、差分イメージ１ａと差分イメージ１ｂとが存在する。従って、ベース・イメージ１から作成され、かつ現在稼動中の仮想マシンは、ホストマシン３０４における仮想マシン３１０及び３１２と、ホストマシン３１４における仮想マシン３２０の３つである。従って、ベース・イメージ１についての稼動中の仮想マシンの数pは３となる。
【００３８】
一方、ベース・イメージ２に対しては、差分イメージ２ａのみが存在する。従って、ベース・イメージ２から作成され、かつ現在稼動中の仮想マシンは、ホストマシン３２２における仮想マシン３２８及び３３０の２つであり、ベース・イメージ２についての稼動中の仮想マシンの数pは２となる。そして、図３に示すプロビジョニング・システム内において現在稼動中の仮想マシンは、仮想マシン３１０、３１２、３２０、３２８及び３３０の５つであるから、仮想マシンの数Nは５となる。最終的に求める確率は、ベース・イメージ１については、３／５＝０．６、ベース・イメージ２については、２／５＝０．４となる。
【００３９】
確率算出部２０２は、このようにしてカウントされるベース・イメージごとの現在稼動中の仮想マシンの数pを、プロビジョニング・マネージャ２１６に要求し、プロビジョニング・マネージャ２１６の後述するカウント部２１８から、ベース・イメージごとの現在稼動中の仮想マシンの数pを取得してよい。そして確率算出部２０２は、イメージ・プール２２２内のいずれかのベース・イメージから作成され、かつ現在稼動中の全仮想マシンの数Nを、ベース・イメージごとの現在稼動中の仮想マシンの数pを合計することにより求めてよい。
【００４０】
本実施例におけるプロビジョニング・マネージャ２１６はカウント部２１８を有し、カウント部２１８は、イメージ・プール２２２内のベース・イメージごとのカウンタを有する。カウント部２１８は、プロビジョニング・マネージャ２１６におけるユーザからの仮想マシン作成のリクエストの受信に応答して、該リクエストにより指定されるベース・イメージのカウンタを１インクリメントする。カウント部２１８はまた、プロビジョニング・マネージャ１０２における仮想マシン破棄のリクエストの受信に応答して、該リクエストにおいて指定されるベース・イメージのカウンタを１デクリメントする。カウント部２１８は、確率算出部２０２からの要求に応答して、各ベース・イメージのカウンタの現在の値を、該ベース・イメージから作成され、かつ現在稼動中の仮想マシンの数pとして返す。  
【００４１】
確率算出部２０２は、プロビジョニング・マネージャ２１６から、ベース・イメージごとの現在稼動中の仮想マシンの数pを取得すると、これを基に各ベース・イメージが次のプロビジョニングで使用される確率p/Nを求め、後述する組み合わせ決定部２０４へ渡す。なお、確率算出部２０２は、確率p/Nの代わりに、各ベース・イメージの現在稼動中の仮想マシンの数pをそのまま後述する組み合わせ決定部２０４へ渡してもよい。
【００４２】
組み合わせ決定部２０４は、選択装置２００におけるキャッシュのためにイメージ・プール２２２内の１以上のベース・イメージから選択可能な１以上のベース・イメージのあらゆる組み合わせの中で、その組み合わせのベース・イメージのキャッシュを仮定して得られる次のプロビジョニングにおける選択装置２００へのイメージの転送時間の期待値E1を最小にする１以上のベース・イメージの組み合わせを、選択装置２００においてキャッシュすべき１以上のベース・イメージとして決定する。なお、注目する転送時間の期待値E1は、ベース・イメージと該ベース・イメージに対する差分イメージとを合わせたカスタム・イメージの転送時間の期待値である。しかしながら、後述するように、最小の期待値を与えるベース・イメージの組み合わせは、カスタム・イメージの転送時間の期待値E1のみならず、ベース・イメージの転送時間の期待値をも最小化する。
【００４３】
上記カスタム・イメージの転送時間の期待値E1は、次式により表される。
【数１】
2012068790.tif 000003
上式における各変数の定義は次の通りである。
i：イメージ・プール２２２に格納されている各ベース・イメージのインデックス
xi：イメージ記憶部２０６におけるインデックスiのベース・イメージのキャッシュ状態を示す２値変数。キャッシュされている場合値１を、そうでない場合値０をとる
Si：インデックスiのベース・イメージのサイズ
j：イメージ・プール２２２に格納されている各差分イメージのインデックス
Di：インデックスiのベース・イメージをそのベース・イメージとする差分イメージのインデックスの集合
Δj：インデックスjの差分イメージのサイズ
T：選択装置２００におけるイメージのコピーのスループット
N：プロビジョニング・システム内で稼動中の仮想マシンの数
nj：インデックスjの差分イメージを用いて作成された稼動中の仮想マシンの数
【００４４】
数式１によりカスタム・イメージの転送時間の期待値E1が表されることを以下に説明する。上述のように２値変数xiは、xi＝１のときインデックスiのベース・イメージがイメージ記憶部２０６にキャッシュされており、xi＝０のときインデックスiのベース・イメージがイメージ記憶部２０６にキャッシュされていないことを示す。従って、xi＝０の場合、インデックスiのベース・イメージはイメージ記憶部２０６にキャッシュされていないので、インデックスiのベース・イメージとインデックスjの差分イメージとを基に作成されるカスタム・イメージの転送時間は(Si+Δj)/Tとなる。但し、インデックスjは集合Diの要素である（以下同じ）。
【００４５】
一方、xi＝１の場合、インデックスiのベース・イメージはイメージ記憶部２０６にキャッシュされているので、インデックスiのベース・イメージとインデックスjの差分イメージとを基に作成されるカスタム・イメージの転送時間はΔj/Tとなる。これら２つのケースを、２値変数xiを使って表すことを考える。すると、インデックスiのベース・イメージとインデックスjの差分イメージを基に作成されるカスタム・イメージの転送時間は、{(1- xi）* Si+Δj}/Tより表わされる。
【００４６】
また、本実施例では、インデックスjの差分イメージが次のプロビジョニングで使用される確率は、インデックスjの差分イメージから作成された現在稼動中の仮想マシンの数に比例すると仮定する。すると上記確率はnj/ Nより表わされる。従って、カスタム・イメージの転送時間の期待値E1は、個々のカスタム・イメージの転送時間を示す{(1- xi）* Si+Δj}/Tと、該カスタム・イメージが次のプロビジョニングで使用される確率nj/ Nとの積を、全てのカスタム・イメージで総和をとることにより求められ、最終的に数式１が得られる。そして、数式１において転送時間の期待値E1を最小にするxiの割り当てを求めることが、選択装置２００においてキャッシュする１以上のベース・イメージの組み合わせを求めることになる。
【００４７】
そこで数式１の右辺を、イメージ・プール２２２内のベース・イメージごとに求められる稼動中の仮想マシンの数を用いて変形する。かかる稼動中の仮想マシンの数は、上述したように確率算出部２０２に対し、確率nj/ Nの代わりに要求することにより取得される。すると、カスタム・イメージの転送時間の期待値E1は次のように書き直される。
【００４８】
【数２】
2012068790.tif 000004
ここでpiは、確率算出部２０２より取得される、インデックスiのベース・イメージから作成されたカスタム・イメージを用いて稼動中の仮想マシンの数を示す。
【００４９】
数式２をみると、第１項目と第２項目はxiを含んでいないため定数となる。従って、転送時間の期待値E1を最小にするには、第３項を最小にすればよいが、第３項目にはマイナスがついている。結局、転送時間の期待値E1を最小化にするには、次式を最大化すればよい。
【数３】
2012068790.tif 000005
なお、ベース・イメージの転送時間の期待値は、数式２において第２項を除いたものであるから、カスタム・イメージの転送時間の期待値E1を最小にするベース・イメージの組み合わせは、ベース・イメージの転送時間の期待値をも最小化することに留意されたい。
【００５０】
ところで選択装置２００におけるキャッシュのためにイメージ・プール２２２内の１以上のベース・イメージから選択可能なベース・イメージの組み合わせは、その組み合わせのベース・イメージの合計サイズが、選択装置２００におけるキャッシュ・サイズを超えないものである必要がある。従って、数式３を最大化する際には、次式で表される条件が課される。
【数４】
2012068790.tif 000006
ここでWは、選択装置２００おけるキャッシュ・サイズ（例えば、イメージ記憶部２０６の容量）を示す。
【００５１】
このように、転送時間の期待値E1を最小にするxiの割り当てを求める問題は、数式４で示される条件の下、数式３で表される値を最大化する問題に置き換えられる。この問題は、０−１ナップサック問題として捉えることができ、０−１ナップサック問題の近似アルゴリズムを用いて解くことができる。
【００５２】
０−１ナップサック問題とは、「容量Mのと、N個のアイテム（k番目のアイテムは、価値value[k]、容量weight[k]を有する）が与えられたとき、ナップサックの容量Mを超えないという条件の下で、ナップサックに詰めるアイテムの価値の和を最大化するにはどのアイテムを選択すればよいか」というである。
【００５３】
従って、サイズWのキャッシュは容量Mのに、イメージ・プール２２２内の各ベース・イメージはN個のアイテムに、ベース・イメージのサイズSiはアイテムのweight[k]に、ベース・イメージについての（pi *Si）はアイテムの価値value[k]にそれぞれ対応させることで、転送時間の期待値E1を最小にするxiの割り当てを求める問題を、０−１ナップサック問題として解くことが可能となる。
【００５４】
０−１ナップサックの問題の解法は公知であり、複数のアルゴリズムが提案されている。本実施例では、TimothyJ. Rolfe, ”AnAlternative Dynamic Programming Solution for the 0/1 Knapsack”, ACM SIGC SE Bulletin, Volume 39, Issue 4, December 2007, Pages 54-56のセクション３．に記載されているアルゴリズムを使用する。この解法は、ナップサックの容量Mの条件の下、N個のアイテム（k番目のアイテムは、価値value[k]、容量weight[k]を有する）を１つ１つ試しながら、ボトムアップ方式で価値の和の最大値を求める手法である。以下、上記アルゴリズムの概要を説明する。
【００５５】
まず、前準備として、各容量wt（0 以上M以下の整数）に対し求められる価値の和の最大値を格納するための配列bestVal[wt]を用意し、wt=0の要素を値0で初期化する。また、各容量wt（0 以上M以下の整数）について価値の和の最大値を与えるアイテムの組み合わせを示す、M×Nサイズの２次元のboolean配列trial[wt][k]を用意し、各要素をfalseで初期化する。そして小さい容量wtから順に、次の（１）〜（４）の処理を繰り返して、各容量wtについての価値の和の最大値と、その最大値を与えるアイテムの組み合わせとを求める。その際、bestVal[wt]>＝bestVal[wt-1]であるとして、最初にbestVal[wt]の値をbestVal[wt-1]の値で初期化する。また最大値を与えるアイテムの識別子bestKを値０で初期化する。
【００５６】
（１）N個のアイテムのうちk番目（kは1からNまでの正の整数）のアイテムを入れることを考える。まず、k番目のアイテムを入れた場合に、容量wtを超えないこと、また、k番目のアイテムを入れた場合に、重複したアイテムの利用にならないことを確認する。どちらか一方でも該当する場合、k番目のアイテムを検討対象から外す。なお、重複アイテムの利用は、trial [wt-weight[k]]の行をチェックすることにより確認できる。
【００５７】
（２）（１）においてk番目のアイテムを検討対象とする場合、k番目のアイテムを入れるとして考えた場合の価値の和の最大値と、k番目のアイテムを入れないとして考えた場合の価値の和の最大値とを比較し、大きいほうを価値の和の最大値とする。
【００５８】
（３）（２）において、k番目のアイテムを入れるとした場合の価値の和の最大値は、現在の容量wtからk番目のアイテムの容量weight[k]を引いた容量についての価値の和の最大値bestVal[wt-weight[k]]に、k番目のアイテムの価値value[k]を足すことにより求められる。なお（２）において、k番目のアイテムを入れるとして考えた場合の価値の和の最大値の方が大きい場合、該最大の価値の和をbestVal[wt]に、アイテムの識別子kをbestKにそれぞれ登録する。
【００５９】
（４）容量wtに対し全アイテムの検討が終了し、かつbestVal[wt-1]よりも大きい価値の和の最大値が得られた場合、行列trialのwt-weight[bestK]行の各要素の値を、wt行の各要素にコピーする。但し、要素trial[wt][bestK]については、値trueを登録する。これは、容量wtのナップサックに詰めるアイテムの価値の和を最大化するのは、容量wt-weight[bestK]のナップサックに詰めるアイテムの価値の和を最大化するアイテムの集合に、bestKのアイテムを加えたアイテムの集合だからである。一方、容量wtに対し、bestVal[wt-1]よりも大きい価値の和の最大値が得られなかった場合、行列trialのwt-1行の各要素の値を、wt行の各要素にコピーする。
【００６０】
組み合わせ決定部２０４は、０−１ナップサック問題の近似アルゴリズムを用いて転送時間の期待値E1を最小にするxiの割り当てを求めると、その結果を転送要求部２０８に渡す。
【００６１】
転送要求部２０８は、組み合わせ決定部２０４により渡されたxiの割り当て結果に基づいて、リポジトリ・サーバ２２０にベース・イメージの転送を要求する。即ち、転送要求部２０８は、xiの値が１であるベース・イメージの転送をリポジトリ・サーバ２２０に要求する。転送要求部２０８が受信したベース・イメージは、その後イメージ記憶部２０６に格納され事前キャッシュされる。
【００６２】
組み合わせ決定部２０４はまた、プロビジョニング時に選択装置２００において指定されたベース・イメージがなく、イメージ・プール２２２内のベース・イメージの転送要求が生じたことに応答して、イメージ記憶部２０６にキャッシュされている１以上のベース・イメージから選択装置２００において現在使用中のベース・イメージを除いた残りのベース・イメージに対し、選択装置２００へのイメージの転送時間の期待値を最小にするベース・イメージの組み合わせを新たに決定する。なお、注目する転送時間の期待値E2は、ベース・イメージと該ベース・イメージに対する差分イメージとを合わせたカスタム・イメージの転送時間の期待値である。しかしながら、後述するように、最小の期待値E2を与える新たなベース・イメージの組み合わせは、カスタム・イメージの転送時間の期待値のみならず、ベース・イメージの転送時間の期待値をも最小化する。
【００６３】
新たなベース・イメージの組み合わせの決定は、新たに転送されるベース・イメージを記憶するためのスペースをイメージ記憶部２０６内に用意するために行われる。従って、イメージ記憶部２０６にキャッシュされている１以上のベース・イメージから選択装置２００において現在使用中のベース・イメージを除いた残りのベース・イメージ（以下、単に残りのベース・イメージという）のうち、新たに決定される組み合わせに含まれないベース・イメージは、イメージ記憶部２０６から削除される。
【００６４】
上記カスタム・イメージの転送時間の期待値E2は、数式１に関して説明したのと同様の考えにより求められ、次式により表される。
【数５】
2012068790.tif 000007
上式における各変数の定義は数式１に関して説明したのと同じであるから、ここでは新たに導入した変数について説明する。
C：選択装置２００のイメージ記憶部２０６内に記憶されているベース・イメージのインデックスの集合
R：選択装置２００において現在稼動中の仮想マシンの生成に用いられたベース・イメージのインデックスの集合
【００６５】
数式５において転送時間の期待値E2を最小にするxiの割り当てを求めることが、イメージ記憶部２０６に残しておくべきベース・イメージの組み合わせを求めることになる。
【００６６】
そこで数式５の右辺を、残りのベース・イメージ内のベース・イメージごとに求められる稼動中の仮想マシンの数を用いて変形する。かかる稼動中の仮想マシンの数は、上述したように確率算出部２０２に対し、確率nj/ Nの代わりに要求することにより取得される。すると、転送時間の期待値E2は次のように書き直される。
【数６】
2012068790.tif 000008
ここでpiは、確率算出部２０２から取得される、インデックスiのベース・イメージから作成されたカスタム・イメージを用いて稼動中の仮想マシンの数を示す。
【００６７】
数式６をみると、第１項目と第２項目はxiを含んでいないため定数となる。従って、転送時間の期待値E2を最小にするには、第３項を最小にすればよいが、第３項目にはマイナスがついている。結局、転送時間の期待値E2を最小化するには、次式を最大化すればよい。
【数７】
2012068790.tif 000009
なお、ベース・イメージの転送時間の期待値は、数式６において第２項を除いたものであるから、カスタム・イメージの転送時間の期待値E2を最小にするベース・イメージの組み合わせは、ベース・イメージの転送時間の期待値をも最小化することに留意されたい。
【００６８】
ところでイメージ記憶部２０６には、選択装置２００において現在使用中のベース・イメージが記憶されており、また、新たに転送されるベース・イメージのためのスペースを用意しておく必要もある。従って、数式７を最大化する際には、次式で表される条件が課される。
【数８】
2012068790.tif 000010
Wは、数式４に関して説明したとおりキャッシュ・サイズを示す。kは、新たに転送されるベース・イメージのインデックスを示し、Skは、新たに転送されるベース・イメージのサイズを示す。
【００６９】
このように、転送時間の期待値E2を最小にするxiの割り当てを求める問題は、数式８で示される条件の下、数式７で表される値を最大化する問題に置き換えられる。そしてこの問題も、０−１ナップサック問題として捉えることができ、０−１ナップサック問題の近似アルゴリズムを用いて解くことができる。
【００７０】
組み合わせ決定部２０４は、０−１ナップサック問題の近似アルゴリズムを用いて転送時間の期待値E2を最小にするxiの割り当てが求めると、その結果を削除部２１０に渡す。
【００７１】
削除部２１０は、組み合わせ決定部２０４により渡されたxiの割り当て結果に基づいて、イメージ記憶部２０６に記憶されたベース・イメージを削除する。即ち、削除部２１０は、xiの値が０であるベース・イメージをイメージ記憶部２０６から削除する。
【００７２】
次に図４及び図５を参照して、本発明の選択装置２００による処理の流れを説明する。図４は、本発明の選択装置２００によるベース・イメージのキャッシュ処理の流れを示すフローチャートである。図５は、本発明の選択装置２００によるベース・イメージの削除処理の流れを示すフローチャートである。
【００７３】
図４に示す処理は、選択装置２００が新たにホストマシン・プール２１２にホストマシンとして追加される際に開始され、確率算出部２０２は、イメージ・プール２２２内の各ベース・イメージについて、該ベース・イメージが次のプロビジョニングにおいて使用される確率を算出する（ステップ４００）。算出されたベース・イメージごとの確率は、組み合わせ決定部２０２に渡される。
【００７４】
上述したように、あるベース・イメージが次のプロビジョニングで使用される確率は、そのベース・イメージから作成され、かつ現在稼動中の仮想マシンの数に比例すると仮定して求めてよい。更に確率算出部２０２は、ベース・イメージごとの現在稼動中の仮想マシンの数を、プロビジョニング・マネージャ２１６のカウント部２１８から取得し、取得したベース・イメージごとの稼動中の仮想マシン数を、そのまま組み合わせ決定部２０２に渡してもよい。
【００７５】
確率算出部２０２からベース・イメージごとの確率又は稼動中の仮想マシンの数を受け取ると、組み合わせ決定部２０４は、選択装置２００におけるキャッシュのためにイメージ・プール２２２内の１以上のベース・イメージから選択可能な１以上のベース・イメージのあらゆる組み合わせの中で、その組み合わせのキャッシュを仮定して得られる次のプロビジョニングにおける選択装置２００へのベース・イメージの転送時間の期待値を最小にする１以上のベース・イメージの組み合わせを、キャッシュすべき１以上のベース・イメージとして決定する（ステップ４０５）。決定したベース・イメージの組み合わせは、転送要求部２０８へ渡される。
【００７６】
上述したように、転送時間の期待値を最小にするベース・イメージの組み合わせを求める問題は、キャッシュする１以上のベース・イメージの合計サイズが選択装置２００におけるキャッシュ・サイズを超えないという条件の下、イメージ・プール２２２内の全ベース・イメージについてのpi *Si *xiの総和を最大化するxiのパターンを算出する問題に置き換えられる。そしてこの問題は０−１ナップサック問題の近似アルゴリズムを用いて算出することができる。なお、変数pi、Si 、xiのそれぞれの意味は、数式１及び２に関して説明した通りである。０−１ナップサック問題の近似アルゴリズムの処理のフローは、図６を参照して後述する。
【００７７】
転送要求部２０８は、決定されたベース・イメージの組み合わせの結果に基づいて、リポジトリ・サーバ２２０にベース・イメージの転送を要求し、リポジトリ・サーバ２２０から受信したベース・イメージをイメージ記憶部２０６に保存する（ステップ４１０）。そして処理は終了する。
【００７８】
図５に示す処理は、プロビジョニング時に選択装置２００においてキャッシュミスが生じ、リポジトリ・サーバ２２０に対しベース・イメージの転送を要求する必要が生じたことに応答してステップ５００から開始される。ステップ５００において、確率算出部２０２は、イメージ記憶部２０６にキャッシュされている１以上のベース・イメージから選択装置２００において使用中のベース・イメージを除いた残りのベース・イメージについて、該ベース・イメージが次のプロビジョニングにおいて使用される確率を算出する。算出されたベース・イメージごとの確率は、組み合わせ決定部２０２に渡される。
【００７９】
上述したように、あるベース・イメージが次のプロビジョニングで使用される確率は、そのベース・イメージから作成され、かつ現在稼動中の仮想マシンの数に比例すると仮定して求めてよい。更に確率算出部２０２は、ベース・イメージごとの現在稼動中の仮想マシンの数をプロビジョニング・マネージャ２１６のカウント部２１８から取得し、取得したベース・イメージごとの稼動中の仮想マシン数を、そのまま組み合わせ決定部２０２に渡してもよい。
【００８０】
確率算出部２０２からベース・イメージごとの確率又は稼動中の仮想マシンの数を受け取ると、組み合わせ決定部２０４は、選択装置２００におけるキャッシュ・サイズから使用中のベース・イメージと新たに転送されるベース・イメージのサイズとを差し引いた値を、新たなキャッシュ・サイズとして、イメージ記憶部２０６内の残りのベース・イメージについて、選択装置２００へのベース・イメージの転送時間の期待値を最小にするベース・イメージの組み合わせを新たに決定する（ステップ５０５）。決定したベース・イメージの組み合わせは、削除部２１０へ渡される。
【００８１】
上述したように、転送時間の期待値を最小にするベース・イメージの組み合わせを求める上記問題は、イメージ記憶部２０６内の残りのベース・イメージのうちイメージ記憶部２０６に残す１以上のベース・イメージの合計サイズが、上記新たなキャッシュ・サイズを超えないという条件の下、イメージ記憶部２０６内の残りのベース・イメージの全てについてのpi*Si *xiの総和を最大化するxiのパターンを算出する問題に置き換えられる。そしてこの問題は０−１ナップサック問題の近似アルゴリズムを用いて算出することができる。なお、変数pi、Si 、xiのそれぞれの意味は、数式５及び６に関して説明した通りである。０−１ナップサック問題の近似アルゴリズムの処理のフローは、図６を参照して後述する。
【００８２】
削除部２１０は、決定されたベース・イメージの組み合わせの結果に基づき、結果の組み合わせに含まれないベース・イメージをイメージ記憶部２０６から削除する（ステップ５１０）。そして処理は終了する。
【００８３】
次に図６を参照して、０−１ナップサック問題の近似アルゴリズムの処理の流れを説明する。まず、アルゴリズムの擬似コードを以下に示す。該擬似コードは、上述したTimothyにより提案されるアルゴリズムに基づくものであり、使用されている変数や配列は、上記アルゴリズムに関して説明した通りである。但し、擬似コードでは、ナップサックの容量をmaxWeight、アイテムの個数をn（k番目のアイテムは価値value[k]、重さweight[k]を有する）とした。
【００８４】
01  for ( wt = 1; wt <= maxWeight; wt++ )
02  { intbestK = 0, testWt;
03  
04  //Initial guess: the knapsack forwt-1.
05  bestVal[wt] = bestVal[wt-1];
06  for ( k = 1; k <= n; k++ )
07  { testWt = wt -weight[k];
08  if( testWt >= 0 && ! trial[testWt][k] )
09  if( bestVal[wt] < value[k]+bestVal[testWt] )
10  {bestK = k;
11  bestVal[wt] =value[k] 
12  + bestVal[testWt];
13  }
14  }
15  if (bestK> 0)
16  { testWt = wt -weight[bestK];
17  System.arraycopy(trial[testWt],0,
18  trial[wt],0, n+1);
19  trial[wt][bestK]= true;
20  }
21  else // Finishusing the wt-1 solution
22  System.arraycopy(trial[wt-1], 0,
23  trial[wt],0, n+1);
24  }
【００８５】
図６は、上記擬似コードに沿った０−１ナップサック問題の近似アルゴリズムの処理の流れを示すフローチャートである。図６に示す処理はステップ６００から開始し、容量の小さい方から順に価値の和の最大値を求めるために、まず、容量wtに値１を設定する。続いてステップ６０５において、容量wtが、maxWeight以下であるか否かを判定する。
【００８６】
ステップ６０５において、容量wtがmaxWeight以下である場合、処理はステップ６１０へ進み、容量wtのナップサックに詰めるアイテムの価値の和の最大値bestVal[wt]をbestVal[wt-1]の値で、該最大値を与えるアイテムbestKを値0で、それぞれ初期化する。また検討対象のアイテムのインデックスkに値１を設定する。
【００８７】
続いて、ステップ６１５において、検討対象のアイテムのインデックスkがnより小さいか否かを判定する。検討対象のアイテムのインデックスkがnより小さい場合、即ち、n個の全アイテムについての検討がまだ終わっていない場合(ステップ６１５：ＹＥＳ）、処理はステップ６２０へ進み、容量wtからインデックスkのアイテムの容量weight[k]を引いた値を、残りの空き容量を示す変数testWtに設定する。
【００８８】
続いて、ステップ６２５において、変数testWtの値が0以上、かつtrial[testWt][k]がfalseであるか否かを判定する。変数testWtの値が0以上であり、かつtrial[testWt][k]がfalseである場合、即ち、インデックスkのアイテムを入れても容量wtを超えず、かつインデックスkのアイテムが、容量testWtに対し価値の和を最大化するアイテムの１つでない場合（ステップ６２５：ＹＥＳ）、処理はステップ６３０へ進み、インデックスkのアイテムを入れた場合の価値の和の最大値tを、bestVal[testWt]の値にvalue[k]の値を足すことにより求める。
【００８９】
続いて処理はステップ６３５へ進み、インデックスkのアイテムを入れた場合の価値の和の最大値tが、インデックスkのアイテムを入れない場合の価値の和の最大値bestVal[wt]より大きいか否かを判定する。インデックスkのアイテムを入れた場合の価値の和の最大値tが大きい場合（ステップ６３５：ＹＥＳ）、処理はステップ６４０へ進み、bestVal[wt]にインデックスkのアイテムを入れた場合の価値の和の最大値tを、また、bestKにインデックスkの値を、それぞれ設定する。
【００９０】
ステップ６２５において、変数testWtの値が0より小さいか、又はtrial[testWt][k]がtrueである場合、即ち、インデックスkのアイテムを入れると容量wtを超えてしまうか、又はインデックスkのアイテムが、容量testWtに対し価値の和を最大化するアイテムの１つである場合（ステップ６２５：ＮＯ）、又は、ステップ６３５においてインデックスkのアイテムを入れない場合の価値の和の最大値bestVal[wt]の方が大きい場合、或いはステップ６４０から、処理はステップ６４５へ進み、アイテムのインデックスkを１インクリメントする。そして処理はステップ６１５へ戻り、次のインデックスのアイテムについて再び同様の処理を行う。
【００９１】
ステップ６１５において、検討対象のアイテムのインデックスkがnに等しい場合、即ち、容量wtに対しn個の全アイテムについての検討が終わった場合(ステップ６１５：ＮＯ）、処理はステップ６５０へ進み、bestKの値が０より大きいか否かを判定する。bestKの値が０より大きい場合（ステップ６５０：ＹＥＳ）、即ち、容量wtに対し、bestVal[wt-1]よりも大きい価値の和の最大値が得られた場合、変数testWtに、容量wtからインデックスbestKのアイテムの容量weight[bestK]を引いた値を設定し、trial[testWt]行の各要素の値を、trial[wt]行のの各要素へコピーし、更に、要素trial[wt][bestK]には、値trueを上書きする（ステップ６５５）。
【００９２】
一方、bestKの値が０である場合（ステップ６５０：ＮＯ）、即ち、容量wtに対し、bestVal[wt-1]よりも大きい価値の和の最大値が得られなかった場合、trial[testWt-1]行の各要素の値を、trial[wt]行の各要素へコピーする（ステップ６６０）。ステップ６５５及びステップ６６０のいずれかにより、容量wtのナップサックに詰めるアイテムの価値の和を最大化するアイテムの組み合わせが、trial[wt]に登録される。
【００９３】
ステップ６５５又はステップ６６０から、処理はステップ６６５へ進み、容量wtを１インクリメントする。続いて、処理はステップ６０５へ戻り、容量wtが目的のmaxWeightを超えるまで、上述した一連の処理を繰り返す。そしてステップ６０５において、容量wtがmaxWeightを超えている場合、処理は終了する。
【００９４】
最終的に求めるべき、容量maxWeightについて価値の和を最大化するアイテムの組み合わせは、trial[maxWeight]行の各値より得られる。即ち、trial[maxWeight][k]=trueならば、インデックスkのアイテムは容量maxWeightについて価値の和を最大化するアイテムの１つである。trial[maxWeight][k]=falseならば、インデックスkのアイテムは容量maxWeightについて価値の和を最大化するアイテムの１つで
【００９５】
図６を参照して説明した０−１ナップサック問題の近似アルゴリズムの本発明への適用は次のようにして行う。まず、Uをベース・イメージのサイズの単位（例えば、256MB）とする。そして、各変数に次のように値を設定する。
maxWeight=キャッシュのサイズを単位Uで切り上げた値（例えば、100GB）
N=キャッシュする候補となるベース・イメージの総数
weight[i]=インデックスiのベース・イメージのサイズSiを単位Uで切り上げた値
value[i]=pi*Si
bestValue=要素数maxWeight/Uの配列（各要素の初期値は０）
trial=要素数maxWeiht/U×Nの２次元Boolean配列（各要素の初期値はfalse）
trial[maxWeight][i]=trueならばxi=1、falseならばxi=0
【００９６】
上記近似アルゴリズムでは、本来連続量であるアイテムの大きさを離散量で近似することにより高速化を実現している。離散化の単位Uの大きさによって、正確性と速度が変わる。即ち、単位Uが大きいほど、アルゴリズムは早くなるが、正確性が低下する。逆に、単位Uが小さいほど、アルゴリズムは遅くなるが、正確性が向上する。
【００９７】
図７は、本実施形態に係るコンピュータ５０のハードウェア構成の一例を示した図である。コンピュータ５０は、バス２に接続されたメインＣＰＵ（中央処理装置）１とメインメモリ４を含んでいる。ハードディスク装置１３、３０、及びＣＤ−ＲＯＭ装置２６、２９、フレキシブル・ディスク装置２０、ＭＯ装置２８、ＤＶＤ装置３１のようなリムーバブル・ストレージ（記録メディアを交換可能な外部記憶システム）がフレキシブル・ディスクコントローラ１９、ＩＤＥコントローラ２５、ＳＣＳＩコントローラ２７などを経由してバス２へ接続されている。
【００９８】
フレキシブル・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭのような記憶メディアが、リムーバブル・ストレージに挿入される。これらの記憶メディアやハードディスク装置１３、３０、ＲＯＭ１４には、オペレーティング・システムと協働してＣＰＵ等に命令を与え、本発明を実施するためのコンピュータ・プログラムのコードを記録することができる。即ち、上記説明した数々の記憶装置には、コンピュータ５０にインストールされ、コンピュータ５０を命令実行装置２００、８００、又は１１００として機能させるバイトコード実行プログラムを記録することができる。
【００９９】
コンピュータ５０を選択装置２００として機能させる選択プログラムは、確率算出モジュール、組み合わせ決定モジュール、転送要求モジュール、削除モジュールを含む。これらモジュールは、ＣＰＵ１等に働きかけて、コンピュータ５０を、確率算出部２０２、組み合わせ決定部２０４、イメージ記憶部２０６、転送要求部２０８、削除部２１０としてそれぞれ機能させる。コンピュータ・プログラムは圧縮し、また複数に分割して複数の媒体に記録することもできる。
【０１００】
コンピュータ５０は、キーボード／マウス・コントローラ５を経由して、キーボード６やマウス７のような入力デバイスからの入力を受ける。コンピュータ５０は、オーディオコントローラ２１を経由して、マイク２４からの入力を受け、またスピーカー２３から音声を出力する。コンピュータ５０は、視覚データをユーザに提示するための表示装置１１に、グラフィックスコントローラ１０を経由して接続される。コンピュータ５０は、ネットワーク・アダプタ１８（イーサネット（登録商標）・カードやトークンリング・カード）等を介してネットワークに接続し、他のコンピュータ等と通信を行うことが可能である。
【０１０１】
以上の説明により、本実施形態に係るコンピュータ５０は、通常のパーソナルコンピュータ、ワークステーション、メインフレームなどの情報処理装置、又は、これらの組み合わせによって実現されることが容易に理解されるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【０１０２】
以上、実施形態を用いて本発明の説明をしたが、本発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更または改良を加えることが可能であることが当業者に明らかである。従って、そのような変更または改良を加えた形態も当然に本発明の技術的範囲に含まれる。
【図１Ａ】
2012068790.tif 000011
【図１Ｂ】
2012068790.tif 000012
【図１Ｃ】
2012068790.tif 000013
【図２】
2012068790.tif 000014
【図３】
2012068790.tif 000015
【図４】
2012068790.tif 000016
【図５】
2012068790.tif 000017
【図６】
2012068790.tif 000018
【図７】
2012068790.tif 000019