(57)【要約】【課題】メンテナンスのスケジューリングを短時間で実行できるようにする。【解決手段】スケジューリング装置１は、実施期間を複数の単位期間に分割する。次にスケジューリング装置１は、複数の物理マシンそれぞれを、複数の単位期間のうちの１以上の単位期間内に、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との、制約条件を充足する実施が可能な物理マシングループに割り当てる。次にスケジューリング装置１は、複数の物理マシングループそれぞれについて、複数の単位期間のうちの一単位期間内での、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との作業実施期間を示す個別スケジュール情報を作成し、複数の物理マシングループそれぞれの個別スケジュール情報を統合した全体スケジュール情報を出力する。【選択図】図１
2020071779.tif 000002
【特許請求の範囲】
【請求項１】
複数の物理マシンに対するメンテナンスの実施期間を取得すると、前記実施期間を複数の単位期間に分割し、
前記複数の物理マシンそれぞれを、複数の物理マシングループのいずれかに割り当てる割り当て対象物理マシンとして選択し、
前記複数の物理マシンおよび前記複数の物理マシンで動作する複数の仮想マシンに関する構成情報、ならびに前記複数の仮想マシンそれぞれを異なる物理マシンへ移動させるのに要する移動所要時間および前記複数の物理マシンそれぞれのメンテナンス作業に要するメンテナンス所要時間を示す時間情報に基づいて、選択した前記割り当て対象物理マシンの割り当て後に、前記複数の単位期間のうちの１以上の単位期間内に、所定の制約条件を充足して、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との実施が可能な物理マシングループに、前記割り当て対象物理マシンを割り当て、
前記構成情報と前記時間情報とに基づいて、前記複数の物理マシングループそれぞれについて、前記複数の単位期間のうちの一単位期間内での、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との、前記制約条件を充足した作業実施期間を示す個別スケジュール情報を作成し、
前記複数の物理マシングループそれぞれについて作成した前記個別スケジュール情報を統合した全体スケジュール情報を出力する、
処理をコンピュータに実行させるスケジューリングプログラム。
【請求項２】
前記割り当て対象物理マシンの割り当てでは、前記複数の物理マシンの割り当て後に、前記複数の物理マシングループそれぞれが前記複数の単位期間のうちの１以上の単位期間において前記制約条件を充足可能となる、最少数の前記複数の物理マシングループに、前記割り当て対象物理マシンの割り当てを行う、請求項１記載のスケジューリングプログラム。
【請求項３】
前記割り当て対象物理マシンの割り当てでは、所定数の仮の物理マシングループを生成し、前記複数の物理マシンすべてについていずれかの前記仮の物理マシングループに割り当てたときに前記制約条件が充足可能か否かを判断し、充足不可能と判断すると前記仮の物理マシングループの数を増加させ、前記制約条件を充足可能か否かの判断と、充足不可能な場合の前記仮の物理マシングループの数の増加とを繰り返し、前記制約条件を充足可能と判断した前記仮の物理マシングループを前記複数の物理マシングループとする、請求項２記載のスケジューリングプログラム。
【請求項４】
前記割り当て対象物理マシンの割り当てでは、選択した前記割り当て対象物理マシンの割り当て後に、前記複数の単位期間のうちの１以上の単位期間内に、所定の制約条件を充足して、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との実施が可能な物理マシングループが複数検出された場合、検出された物理マシングループの中から所定の基準に従って特定した物理マシングループに前記割り当て対象物理マシンを割り当てる、請求項１ないし３のいずれかに記載のスケジューリングプログラム。
【請求項５】
ユーザが使用する使用仮想マシンの移動を回避する回避時間帯または前記使用仮想マシンの移動を許容する許容時間帯を取得し、前記回避時間帯または前記許容時間帯に基づいて、前記使用仮想マシンを移動させない移動回避時間帯を決定し、前記移動回避時間帯を避けて前記使用仮想マシンを移動させるという移動時間帯制約を前記制約条件に含める、処理を前記コンピュータにさらに実行させる請求項１ないし４のいずれかに記載のスケジューリングプログラム。
【請求項６】
前記複数の物理マシンの選択では、前記移動回避時間帯の時間が長い物理マシンほど先に前記割り当て対象物理マシンとして選択する、請求項５記載のスケジューリングプログラム。
【請求項７】
コンピュータが、
複数の物理マシンに対するメンテナンスの実施期間を取得すると、前記実施期間を複数の単位期間に分割し、
前記複数の物理マシンそれぞれを、複数の物理マシングループのいずれかに割り当てる割り当て対象物理マシンとして選択し、
前記複数の物理マシンおよび前記複数の物理マシンで動作する複数の仮想マシンに関する構成情報、ならびに前記複数の仮想マシンそれぞれを異なる物理マシンへ移動させるのに要する移動所要時間および前記複数の物理マシンそれぞれのメンテナンス作業に要するメンテナンス所要時間を示す時間情報に基づいて、選択した前記割り当て対象物理マシンの割り当て後に、前記複数の単位期間のうちの１以上の単位期間内に、所定の制約条件を充足して、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との実施が可能な物理マシングループに、前記割り当て対象物理マシンを割り当て、
前記構成情報と前記時間情報とに基づいて、前記複数の物理マシングループそれぞれについて、前記複数の単位期間のうちの一単位期間内での、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との、前記制約条件を充足した作業実施期間を示す個別スケジュール情報を作成し、
前記複数の物理マシングループそれぞれについて作成した前記個別スケジュール情報を統合した全体スケジュール情報を出力する、
スケジューリング方法。
【請求項８】
複数の物理マシンおよび前記複数の物理マシンで動作する複数の仮想マシンに関する構成情報、ならびに前記複数の仮想マシンそれぞれを異なる物理マシンへ移動させるのに要する移動所要時間および前記複数の物理マシンそれぞれのメンテナンス作業に要するメンテナンス所要時間を示す時間情報を記憶する記憶部と、
前記複数の物理マシンに対するメンテナンスの実施期間を取得すると、前記実施期間を複数の単位期間に分割し、前記複数の物理マシンそれぞれを、複数の物理マシングループのいずれかに割り当てる割り当て対象物理マシンとして選択し、前記構成情報と前記時間情報とに基づいて、選択した前記割り当て対象物理マシンの割り当て後に、前記複数の単位期間のうちの１以上の単位期間内に、所定の制約条件を充足して、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との実施が可能な物理マシングループに、前記割り当て対象物理マシンを割り当て、前記構成情報と前記時間情報とに基づいて、前記複数の物理マシングループそれぞれについて、前記複数の単位期間のうちの一単位期間内での、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との、前記制約条件を充足した作業実施期間を示す個別スケジュール情報を作成し、前記複数の物理マシングループそれぞれについて作成した前記個別スケジュール情報を統合した全体スケジュール情報を出力する処理部と、
を有するスケジューリング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケジューリングプログラム、スケジューリング方法、およびスケジューリング装置に関する。
【背景技術】
【０００２】
情報処理の分野では、物理的なコンピュータ（物理マシンや物理ホストと呼ぶことがある）上で、複数の仮想的なコンピュータ（仮想マシンや仮想ホストと呼ぶことがある）を動作させる仮想化技術が利用されている。各仮想マシン上では、ＯＳ（Operating System）などのソフトウェアを実行できる。仮想化技術を利用する物理マシンは、複数の仮想マシンを管理するためのソフトウェアを実行する。例えば、ハイパーバイザと呼ばれるソフトウェアが、ＣＰＵ（Central Processing Unit）の処理能力やＲＡＭ（Random Access Memory）の記憶領域を、演算のリソースとして複数の仮想マシンに割り振ることがある。
【０００３】
複数の物理マシンを含むシステムには、仮想マシンを実行する物理マシンを変更できるものがある。例えば、仮想マシンを終了させてから、あるいは終了させずに、ハイパーバイザ間で仮想マシンに関するデータの移動を可能とする技術が用いられている。このように仮想マシンを移動される処理は、マイグレーションと呼ばれる。仮想マシンのマイグレーションは、例えば物理マシンのメンテナンスの際に実行される。すなわち、メンテナンス中の物理マシンは運用を停止させることになるため、運用者は、メンテナンス対象の物理マシンで実行されている仮想マシンを他の物理マシンに移動させた後、その物理マシンのメンテナンス作業を行う。
【０００４】
物理マシン上で実行されている仮想マシンを移動させる際は、移動時期や移動先について、様々な制約条件がある。例えば移動中の仮想マシンは性能が低下するため、仮想マシンの移動時期は、仮想マシンの負荷の低い期間内に限られる。また仮想マシンの移動先の物理マシンは、移動対象の仮想マシンに対して十分なリソースを割り当て可能な物理マシンに限られる。システムの運用者は、仮想マシンの移動に関する様々な制約条件を満たすように、すべての物理マシンのメンテナンススケジュールを立てることとなる。
【０００５】
メンテナンスのスケジューリングは、コンピュータに行わせることも可能である。例えばシステムの運用者は、メンテナンススケジューリング用のスケジューラに、システム構成や仮想マシンの動作状況や、１台の物理マシンのメンテナンスに要する時間などの情報を入力する。すると、スケジューラが制約条件を満たすメンテナンススケジュールを出力する。
【０００６】
仮想マシンのマイグレーションに関する技術としては、例えば、リソース使用量が不足すると予測された物理サーバが今後動作不安定になることを抑制する仮想マシン移動制御方法が提案されている。
【０００７】
また、ユーザが仮想ホストの移動予定日を入力した場合に、その移動予定日が、メンテナンス予定日よりも後の場合に、再度移動予定日を修正するよう要請し、移動予定日に仮想ホストを、移動先サーバ機器へ移動予約するメンテナンス管理装置も提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１４−００６７３９号公報
【特許文献２】特開２０１５−１６１９５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
クラウドコンピューティングシステムの実行基盤（インフラ（infrastructure））は多数の物理マシンを含んでおり、各物理マシン上で複数の仮想マシンが実行されている。そのため物理マシンのメンテナンススケジューリングを行うには、非常に複雑で大規模な問題をコンピュータで解くことになる。このような大規模な問題は、計算時間や使用メモリ量の観点から、従来の技術では求解が困難である。
【００１０】
１つの側面では、本発明は、メンテナンスのスケジューリングを短時間で実行できるようにすることを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、スケジューリングプログラムが提供される。スケジューリングプログラムに基づいて、コンピュータは以下の処理を実行する。
コンピュータは、複数の物理マシンに対するメンテナンスの実施期間を取得すると、実施期間を複数の単位期間に分割する。次にコンピュータは、複数の物理マシンそれぞれを、複数の物理マシングループのいずれかに割り当てる割り当て対象物理マシンとして選択する。次にコンピュータは、複数の物理マシンおよび複数の物理マシンで動作する複数の仮想マシンに関する構成情報、ならびに複数の仮想マシンそれぞれを異なる物理マシンへ移動させるのに要する移動所要時間および複数の物理マシンそれぞれのメンテナンス作業に要するメンテナンス所要時間を示す時間情報に基づいて、選択した割り当て対象物理マシンの割り当て後に、複数の単位期間のうちの１以上の単位期間内に、所定の制約条件を充足して、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との実施が可能な物理マシングループに、割り当て対象物理マシンを割り当てる。次にコンピュータは、構成情報と時間情報とに基づいて、複数の物理マシングループそれぞれについて、複数の単位期間のうちの一単位期間内での、割り当てられた物理マシンで動作している仮想マシンの移動と割り当てられた物理マシンのメンテナンス作業との、制約条件を充足した作業実施期間を示す個別スケジュール情報を作成する。そしてコンピュータは、複数の物理マシングループそれぞれについて作成した個別スケジュール情報を統合した全体スケジュール情報を出力する。
【発明の効果】
【００１２】
１態様によれば、メンテナンスのスケジューリングが短時間で実行可能となる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】メンテナンスのスケジュール作成例を示す図である。
【図３】第２の実施の形態の情報処理システムの一例を示す図である。
【図４】管理サーバのハードウェア例を示す図である。
【図５】ライブマイグレーションの例を示す図である。
【図６】メンテナンスのスケジュールの一例を示す図である。
【図７】メンテナンスのスケジューリングへの分割統治法の適用方法を示す図である。
【図８】物理マシン集合と時刻集合との分割例を示す図である。
【図９】時刻グループに対応する期間内の作業期間の区分けを示す図である。
【図１０】部分問題ごとの制約を充足するスケジュールの求解結果の一例を示す図である。
【図１１】解の統合例を示す図である。
【図１２】物理マシン集合の分割数と問題の性質との関係を示す図である。
【図１３】時刻集合の分割数と問題の性質との関係を示す図である。
【図１４】ＬＭ回避時間帯の一例を示す図である。
【図１５】ＬＭ回避時間帯を考慮した部分問題の求解例を示す図である。
【図１６】時刻集合の分割数の決定例を示す図である。
【図１７】容量の決定例を示す図である。
【図１８】物理マシンの割り当て先の決定例を示す図である。
【図１９】物理マシン集合の分割数の理論下限値と物理マシングループ数との関係を示す図である。
【図２０】管理サーバの機能例を示す図である。
【図２１】メンテナンス実施期間情報の例を示す図である。
【図２２】メンテナンス対象マシン情報の例を示す図である。
【図２３】物理マシン構成テーブルの例を示す図である。
【図２４】仮想マシン構成テーブルの例を示す図である。
【図２５】仮想マシン稼働テーブルの例を示す図である。
【図２６】依存関係テーブルの例を示す図である。
【図２７】ａｎｔｉ−ａｆｆｉｎｉｔｙルールのグラフ彩色問題への適用例を示す図である。
【図２８】ＬＭ所要時間テーブルの例を示す図である。
【図２９】ＬＭ実施回避日時情報の例を示す図である。
【図３０】時刻グループ情報の例を示す図である。
【図３１】物理マシングループ情報の例を示す図である。
【図３２】メンテナンススケジュールテーブルの例を示す図である。
【図３３】ＬＭスケジュールテーブルの例を示す図である。
【図３４】管理サーバの処理例を示すフローチャートである。
【図３５】日程調整例を示すフローチャートである。
【図３６】グループ生成例を示すフローチャートの前半である。
【図３７】グループ生成例を示すフローチャートの後半である。
【図３８】物理マシンの割り当て例を示すフローチャートの前半である。
【図３９】物理マシンの割り当て例を示すフローチャートの後半である。
【図４０】生成する部分問題を説明する図である。
【図４１】部分問題生成例を示すフローチャートである。
【図４２】部分問題求解例を示すフローチャートである。
【図４３】スケジュール生成例を示すフローチャートである。
【図４４】ＬＭ実施回避日時設定画面の例を示す図である。
【図４５】利用者に対するＬＭスケジュール画面の例を示す図である。
【図４６】運用者に対するメンテナンススケジュール画面の例を示す図である。
【図４７】運用者に対するメンテナンススケジュール詳細表示画面の例を示す図である。
【図４８】物理マシン集合の分割数を多くした場合のメンテナンススケジュール画面の例（比較例）である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
図１は、第１の実施の形態の情報処理システムを示す図である。第１の実施の形態の情報処理システムは、スケジューリング装置１および物理マシン２，３，４，・・・を有する。スケジューリング装置１および物理マシン２，３，４，・・・はネットワークＮ１に接続されている。スケジューリング装置１は、物理マシン２，３，４，・・・における仮想マシンの移動および物理マシン２，３，４，・・・のメンテナンス作業のスケジュールを作成する。物理マシン２，３，４，・・・それぞれは、ＣＰＵやメモリなどの演算リソースを有し、演算リソースを用いて仮想マシンを実行する。例えば、物理マシン２，３，４，・・・それぞれは、ハイパーバイザを実行し、ハイパーバイザの機能により、仮想マシンに対する演算リソースの割り当てを行う。ここで、物理マシンをＰＭ（Physical Machine）と略記することがある。仮想マシンをＶＭ（Virtual Machine）と略記することがある。
【００１５】
ネットワークＮ１には、端末装置５も接続されている。端末装置５は、システムの運用および管理を行う運用者Ｕ１によって利用されるクライアントである。端末装置５は、インターネットなどの他のネットワークを介してネットワークＮ１に接続されてもよい。
【００１６】
物理マシン２，３，４，・・・は、自物理マシンで動作する仮想マシンを他の物理マシンに移動させる機能を有する。例えば、物理マシン２，３，４，・・・はライブマイグレーションと呼ばれる技術を用いて仮想マシンの移動を行う。ライブマイグレーションでは、移動対象の仮想マシンに割り当てられた移動元の物理マシンのＣＰＵリソースやメモリリソースの情報を移動先の物理マシンにコピーすることで、仮想マシンの起動状態を保ったまま仮想マシンを移動させる。あるいは、仮想マシンを移動させる技術として、仮想マシンを停止してから該当の仮想マシンの情報を移動先の物理マシンにコピーするコールドマイグレーションを用いることもできる。
【００１７】
システムの運用では、仮想マシンを実現するためのインフラである物理マシンに対するセキュリティパッチの適用やＯＳのアップグレードなどのメンテナンスが行われることがある。物理マシンのメンテナンスには、物理マシンの停止を伴うことが多い。物理マシンを停止させる場合、当該物理マシン上の仮想マシンも停止させることになり、仮想マシンを利用できなくなってしまう。
【００１８】
そこで、物理マシンのメンテナンスの前に、メンテナンス対象の物理マシン上の仮想マシンを別の物理マシンに移動させることで、メンテナンスによる仮想マシン利用への影響を軽減しながら、メンテナンス対象の物理マシンのメンテナンスを行うことがある。スケジューリング装置１は、そのための仮想マシンの移動およびメンテナンス作業のスケジュールの作成を支援する。スケジューリング装置１は、記憶部１ａおよび処理部１ｂを有する。
【００１９】
記憶部１ａは、ＲＡＭなどの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部１ｂは、ＣＰＵ、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１ｂはプログラムを実行するプロセッサでもよい。プロセッサは、複数のプロセッサの集合（マルチプロセッサ）も含み得る。
【００２０】
記憶部１ａは、物理マシンおよび物理マシンで動作する仮想マシンに関する構成情報Ｄ１を記憶する。構成情報Ｄ１は、インフラに関する情報を含む。例えば、構成情報Ｄ１は、物理マシンの構成を示す物理マシン構成情報ｄ１と仮想マシンの構成を示す仮想マシン構成情報ｄ２とを含む。
【００２１】
ここで、一例として、物理マシン２，３，４および仮想マシン２ａ，２ｂ，３ａ，３ｂ，４ａ，４ｂの識別情報を次の通りとする。物理マシン２の識別情報は“ＰＭ１”である。物理マシン３の識別情報は“ＰＭ２”である。物理マシン４の識別情報は“ＰＭ３”である。仮想マシン２ａの識別情報は“ＶＭ１”である。仮想マシン２ｂの識別情報は“ＶＭ２”である。仮想マシン３ａの識別情報は“ＶＭ３”である。仮想マシン３ｂの識別情報は“ＶＭ４”である。仮想マシン４ａの識別情報は“ＶＭ５”である。仮想マシン４ｂの識別情報は“ＶＭ６”である。
【００２２】
物理マシン構成情報ｄ１は、各物理マシンが備えるＣＰＵコア数、メモリ容量およびディスク容量の情報を含む。具体的には、物理マシン構成情報ｄ１には、物理マシン２（識別情報“ＰＭ１”）に対して、ＣＰＵコア数“６４”個、メモリ容量“２５６ＧＢ（Giga Bytes）”、ディスク容量“３２ＴＢ（Tera Bytes）”というレコードが登録されている。物理マシン構成情報ｄ１には、他の物理マシンに対しても同様のレコードが登録される。
【００２３】
仮想マシン構成情報ｄ２は、各仮想マシンに割り当てるＣＰＵコア数、メモリ容量、ディスク容量および当該仮想マシンの現配置（現在の配置先の物理マシン）の情報を含む。具体的には、仮想マシン構成情報ｄ２には、仮想マシン２ａ（識別情報“ＶＭ１”）に対して、ＣＰＵコア数“２”個、メモリ容量“３２ＧＢ”、ディスク容量“２ＴＢ”、現配置“ＰＭ１”（物理マシン２）というレコードが登録されている。仮想マシン構成情報ｄ２には、他の仮想マシンに対しても同様のレコードが登録される。
【００２４】
記憶部１ａは、メンテナンス作業に要する時間を示す時間情報Ｄ２を記憶する。例えば時間情報Ｄ２は、物理マシンから他の物理マシンへの仮想マシンの移動の所要時間を示す仮想マシン時間情報ｄ３と、物理マシンのメンテナンス作業の所要時間を示す物理マシン時間情報ｄ４とを含む。
【００２５】
仮想マシン時間情報ｄ３には、仮想マシンの識別情報に対応付けて、その仮想マシンの移動に要する時間（移動所要時間）が登録されている。移動所要時間は、例えば過去に仮想マシンを移動させたときに要した時間から求められた値である。
【００２６】
物理マシン時間情報ｄ４には、物理マシンの識別情報に対応付けて、その物理マシンのメンテナンス作業に要する時間（メンテナンス所要時間）が登録されている。メンテナンス所要時間は、例えばシステムの運用者が、メンテナンスの作業内容に応じて設定した値である。
【００２７】
さらに記憶部１ａは、割り当てられた物理マシンで動作している仮想マシンの移動と、被割り当て物理マシンのメンテナンス作業とに関する制約を示す制約条件Ｄ３を記憶する。制約条件Ｄ３には、例えば、ある物理マシン上の仮想マシンの所要リソースの合計が、当該物理マシンのリソースを上回らないという制約が含まれる。また制約条件Ｄ３には、例えば、仮想マシンのユーザから、その仮想マシンの移動を回避する回避時間帯が入力された場合、回避時間帯内にはその仮想マシンを移動させないという制約（移動時間帯制約）が含まれる。
【００２８】
図２は、メンテナンスのスケジュール作成例を示す図である。スケジューリング装置１は、メンテナンス実施期間が入力されると、メンテナンスのスケジュールの作成処理を開始する。例えば運用者Ｕ１が端末装置５にメンテナンス実施期間を入力する。端末装置５は、入力されたメンテナンスの実施期間をスケジューリング装置１に送信する。
【００２９】
スケジューリング装置１の処理部１ｂは、複数の物理マシン２，３，４，・・・を含む物理マシン集合に対するメンテナンスの実施期間を取得すると、実施期間を複数の単位期間に分割する。例えば処理部１ｂは、数日間あるいは数週間の実施期間が指定されたとき、その実施期間を１日ごとの単位期間に分割する。処理部１ｂは、実施期間内の所定間隔の時刻（例えば１分ごとの時刻）を、仮想マシンの移動の実施期間（開始時刻と終了時刻）やメンテナンス作業の実施期間（開始時刻と終了時刻）を示す単位とする。各単位期間は、実施期間の指定に用いる時刻が複数含まれる。そのため、単位期間を、複数の時刻の集合である時刻グループと言い換えることもできる。図２の例では、処理部１ｂは、メンテナンスの実施期間を５つの単位期間（τ0，τ1，τ2，τ3，τ4）に分割している。
【００３０】
次に処理部１ｂは、物理マシン集合を、その物理マシン集合の部分集合である複数の物理マシングループに分割する。各物理マシングループには、その物理マシングループに割り当てられた物理マシンが含まれる。
【００３１】
例えば処理部１ｂは、複数の物理マシンそれぞれを割り当て対象物理マシンとする。次に処理部１ｂは、複数の物理マシングループのうち、割り当て対象物理マシンの割り当て後に、複数の単位期間のうちの１以上の単位期間において、制約条件Ｄ３を充足可能な物理マシングループに、割り当て対象物理マシンを割り当てる。すべての物理マシンの割り当てが完了すると、物理マシン集合が複数の物理マシングループに分割されたこととなる。図２の例では、処理部１ｂは、物理マシン集合を４つの物理マシングループ（ｇ0，ｇ1，ｇ2，ｇ3）に分割している。
【００３２】
処理部１ｂは、物理マシン集合を分割する場合、１つの物理マシングループには空き物理マシンのみを割り当てる。空き物理マシンとは、仮想マシンが動作していない物理マシンである。処理部１ｂは、例えば物理マシン集合のなかから空き物理マシンを調査し、空き物理マシンの一部を１つの物理マシングループに割り当てる。図２の例では、物理マシングループ“ｇ0”に、識別情報“ＰＭ７”、“ＰＭ８”の空き物理マシンが割り当てられている。
【００３３】
処理部１ｂは、仮想マシンが動作している物理マシンを、残りの物理マシングループ（ｇ1，ｇ2，ｇ3）のうち、１以上の単位期間において制約条件Ｄ３を満たす物理マシングループに割り当てる。なおメンテナンスの実施期間内の最先の単位期間τ0については、空の物理マシンのみを含む物理マシングループｇ0のメンテナンス作業を行うこととなる。そのため処理部１ｂは、他の物理マシングループ（ｇ1，ｇ2，ｇ3）のうち、２番目以降の単位期間（τ1，τ2，τ3，τ4）の少なくとも１つの単位期間で制約条件を充足可能な物理マシングループを、仮想マシンが動作している物理マシンの割り当て先とする。図２の例では、物理マシングループ“ｇ1”に、識別情報“ＰＭ１”、”ＰＭ５”の物理マシンが割り当てられている。物理マシングループ“ｇ2”に、識別情報“ＰＭ４”、“ＰＭ２”の物理マシンが割り当てられている。物理マシングループ“ｇ3”に、識別情報”ＰＭ３”、“ＰＭ６”の物理マシンが割り当てられている。
【００３４】
なお処理部１ｂは、物理マシン集合の分割数（物理マシングループの数）として、可能な限り少ない数とすることができる。この場合、処理部１ｂは、複数の物理マシンの割り当て後に、複数の物理マシングループそれぞれが、複数の単位期間のうちの１以上の単位期間において制約条件を充足可能となる、最少の数の複数の物理マシングループに、物理マシン集合を分割する。
【００３５】
例えば処理部１ｂは、まず所定数の仮の物理マシングループを生成し、複数の物理マシンすべてについていずれかの仮の物理マシングループに割り当てたときに制約条件が充足可能か否かを判断する。ここで充足不可能と判断すると、処理部１ｂは、仮の物理マシングループの数を増加させ、制約条件を充足可能か否かの判断と、充足不可能な場合の仮の物理マシングループの数の増加とを繰り返す。そして処理部１ｂは、制約条件を充足可能と最初に判断したときの仮の物理マシングループを複数の物理マシングループとする。
【００３６】
なお、最初に生成する仮の物理マシングループの数は、例えば空き物理マシンのリソース量に基づく理論上の最小値である。処理部１ｂは、仮想マシンが稼働している物理マシンのリソース量の合計を、空き物理マシンのリソース量の合計で除算し、余りを切り上げた値を理論上の最小値とする。
【００３７】
物理マシングループの数を可能な限り少なくすることで、単位期間あたりにメンテナンス作業を実施できる物理マシンの数が増加し、全体のメンテナンス作業に要する期間を短縮できる。
【００３８】
物理マシン集合の分割が完了すると、処理部１ｂは、複数の物理マシングループそれぞれについて、制約条件Ｄ３を充足可能である制約充足単位期間を特定する。そして処理部１ｂは、制約充足単位期間における、被割り当て物理マシンで動作している稼動中仮想マシンの移動と被割り当て物理マシンのメンテナンス作業との作業実施期間を示す個別スケジュール情報を作成する。このような物理マシングループに関する単位期間ごとの個別スケジュール情報を作成することは、システム全体のスケジューリング問題に対する部分問題の求解である。
【００３９】
なお処理部１ｂは、各物理マシングループについて、一部の単位期間の部分問題を求解すればよい。例えば処理部１ｂは、物理マシングループ間で求解する部分問題の単位期間が重複しないようにして、複数の物理マシングループそれぞれについて、求解する部分問題を１つずつ選択する。このとき、物理マシン集合の分割の際に、制約条件を満足できないことが判明している単位期間については、部分問題の求解の対象から除外される。
【００４０】
具体的には、処理部１ｂは、空の物理マシンのみを含む物理マシングループｇ0については、メンテナンスの実施期間内の最先の単位期間τ0に対応する部分問題を、求解対象とする。処理部１ｂは、その他の物理マシングループ（ｇ1，ｇ2，ｇ3）については、可能な限り早い時間帯の単位期間に対応する部分問題を、求解対象とする。これにより、メンテナンスに要する期間を短縮できる。
【００４１】
処理部１ｂは、複数の物理マシングループごとの部分問題の求解が終了すると、複数の物理マシンで動作している複数の仮想マシンそれぞれの移動と複数の物理マシンそれぞれのメンテナンス作業との作業実施期間を示す全体スケジュール情報６を作成する。例えば処理部１ｂは、複数の物理マシングループそれぞれについて作成した個別スケジュール情報を統合して、全体スケジュール情報６を作成する。
【００４２】
処理部１ｂは、生成した全体スケジュール情報６を、例えば運用者Ｕ１が使用する端末装置５に送信する。端末装置５は、受信した全体スケジュール情報６の内容をモニタに表示する。これにより、運用者Ｕ１は、メンテナンスのスケジュールを把握することができる。
【００４３】
このようにスケジューリング装置１は、メンテナンスのスケジューリングに関する問題を分割問題に細分化して、物理マシングループごとの分割問題ごとに求解し、求解結果を統合することで全体スケジュール情報６を生成している。部分問題に分けたことで、スケジューリングの処理負荷が軽減され、メンテナンスのスケジュールを短時間で作成可能となる。
【００４４】
しかもスケジューリング装置１は、物理マシン集合を分割する際の分割数を、分割可能な最少の数とすることができる。これにより、単位期間あたりにメンテナンスできる物理マシン数が増加し、メンテナンス全体の期間が短縮される。
【００４５】
割り当て対象物理マシンの割り当てにおいて、スケジューリング装置１は、割り当て可能な物理マシングループを複数検出できる場合がある。この場合、スケジューリング装置１は、割り当て可能な物理マシングループの中から、所定の基準に従って特定した物理マシングループに割り当て対象物理マシンを割り当ててもよい。例えばスケジューリング装置１は、割り当て可能な物理マシングループのうち、空き容量が最小の物理マシングループに、割り当て対象物理マシンを割り当てる。
【００４６】
なお制約条件Ｄ３には、ユーザ指定により仮想マシンの移動時間を制約する移動時間帯制約を含めることができる。例えば処理部１ｂは、ユーザにより入力された移動を回避する回避時間帯または移動を許容する許容時間帯を取得する。処理部１ｂは、回避時間帯または許容時間帯に基づいて、ユーザが使用する使用仮想マシンを移動させない移動回避時間帯を決定する。そして処理部１ｂは、移動回避時間帯を避けて使用仮想マシンを移動させるという移動時間帯制約を制約条件Ｄ３に含める。
【００４７】
移動時間帯制約がある場合、処理部１ｂは、例えば一物理マシンで動作している仮想マシンの少なくとも１つで移動回避時間帯となる時間帯を、一物理マシンに対して仮想マシンの移動作業を行うことができない移動実施回避時間帯に決定する。そして処理部１ｂは、同一物理マシングループに割り当てられた物理マシンそれぞれの移動実施回避時間帯に基づいて、移動時間帯制約が充足するか否かを判断する。
【００４８】
また処理部１ｂは、物理マシン集合の分割の際に、移動回避時間帯の時間が長い物理マシンほど先に割り当て対象物理マシンとして、複数の物理マシングループのいずれかに割り当てる。これにより、割り当て先の制限が厳しい物理マシンを優先的に物理マシングループに割り当てることができ、すべての物理マシンに対して割り当て先の物理マシングループを決定できる可能性が高くなる。その結果、物理マシン集合を、より少ない数の物理マシングループに分割できる。
【００４９】
スケジューリング装置１は、メンテナンスのスケジューリング問題を複数の部分問題に分割して求解している。そのためスケジューリングの際の計算量が削減され、短時間でスケジュールを作成することができる。
【００５０】
しかも、スケジューリング装置１は、物理マシングループの数を可能な限り少なくしている。そのため短い期間でメンテナンスを完了可能な適切なスケジュールを作成することができる。
【００５１】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、仮想マシンの利用者により指定された期間内はその仮想マシンを移動させないという制約条件を含め、様々な制約条件を満たす、メンテナンスの適切なスケジューリングを短時間で実行可能とするものである。
【００５２】
図３は、第２の実施の形態の情報処理システムの一例を示す図である。第２の実施の形態の情報処理システムは、管理サーバ１００、物理マシン２００，３００，４００，・・・を有する。管理サーバ１００および物理マシン２００，３００，４００，・・・は、ネットワーク１０に接続されている。ネットワーク１０は、例えば、ＬＡＮ（Local Area Network）である。ネットワーク１０は、ネットワーク２０に接続されている。ネットワーク２０は、ネットワーク１０の外部のネットワークであり、例えば、インターネットやＷＡＮ（Wide Area Network）などである。ネットワーク２０には、利用者端末５００，６００が接続されている。また、ネットワーク１０には運用者端末７００が接続されている。
【００５３】
ここで、第２の実施の形態の情報処理システムは、ＩａａＳ（Infrastructure as a Service）と呼ばれるサービスを提供する。ＩａａＳでは、システムの運用者は、システム上のハードウェア資源をネットワーク経由で複数の利用者（テナント）に提供する。システムの利用者は、提供されるハードウェア資源を用いて、仮想マシンを構築し、当該仮想マシン上で種々の業務アプリケーションを利用する。
【００５４】
システムの運用者は、システムのインフラ（物理マシン、ネットワーク機器など）を運用しており、各装置の動作状況の監視および保守を行う。例えば運用者は、サービスの品質を維持するために、インフラ側のメンテナンス（例えば、物理マシン２００，３００，４００，・・・に対するセキュリティパッチの適用やＯＳのアップグレードなど）を行う。そこで、物理マシンに対してメンテナンスを行う前に、該当の物理マシン上で動作中の仮想マシンを別の物理マシンに移動する処理が行われる。第２の実施の形態の例では、仮想マシンの移動に、ライブマイグレーションの技術が利用される（ただし、仮想マシンの移動に、コールドマイグレーションを用いてもよい）。
【００５５】
管理サーバ１００は、物理マシン２００，３００，４００，・・・における仮想マシンのメンテナンスのスケジュールを管理するサーバコンピュータである。管理サーバ１００は、メンテナンス対象の物理マシンおよびメンテナンスの実施期間が入力されると、メンテナンス対象の物理マシン上で動作する仮想マシンのライブマイグレーションおよびメンテナンス作業のスケジュールを作成する。管理サーバ１００は、作成したスケジュールを、利用者端末５００，６００や運用者端末７００に送信する。また、管理サーバ１００は、作成したスケジュールが確定されると、確定されたスケジュールに従って、メンテナンス対象の物理マシンに仮想マシンのライブマイグレーションを指示する。管理サーバ１００は、第１の実施の形態のスケジューリング装置１の一例である。
【００５６】
物理マシン２００，３００，４００，・・・は、それぞれがＣＰＵやメモリなどの演算リソースを有し、演算リソースを用いて仮想マシンを実行するサーバコンピュータである。例えば、物理マシン２００，３００，４００，・・・それぞれは、ハイパーバイザを実行し、ハイパーバイザの機能により、仮想マシンに対する演算リソースの割り当てを行う。物理マシン２００，３００，４００，・・・は、第１の実施の形態の物理マシン２，３，４，・・・の一例である。
【００５７】
利用者端末５００，６００は、利用者によって利用されるクライアントコンピュータである。利用者端末５００，６００は、異なる利用者によって利用される。各利用者は、利用者端末５００，６００を操作して、物理マシン２００，３００，４００，・・・上の仮想マシンを利用する。利用者端末５００の利用者は、利用者端末５００を用いて、管理サーバ１００により提供されるライブマイグレーション（自身が利用する仮想マシンについてのライブマイグレーション）のスケジュールを確認することもある。利用者端末６００の利用者も同様に、利用者端末６００を用いて、管理サーバ１００により提供されるライブマイグレーションのスケジュールを確認することもある。利用者端末５００，６００は、第１の実施の形態の端末装置５の一例である。
【００５８】
運用者端末７００は、第２の実施の形態の情報処理システムの運用者（システム管理者）によって利用されるクライアントコンピュータである。運用者は、運用者端末７００を用いて、管理サーバ１００により提供される物理マシンのメンテナンスのスケジュールやメンテナンスに伴うライブマイグレーションのスケジュールを確認する。
【００５９】
図４は、管理サーバのハードウェア例を示す図である。管理サーバ１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６およびＮＩＣ（Network Interface Card）１０７を有する。各ハードウェアは管理サーバ１００のバスに接続されている。
【００６０】
プロセッサ１０１は、管理サーバ１００の情報処理を制御するハードウェアである。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００６１】
ＲＡＭ１０２は、管理サーバ１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００６２】
ＨＤＤ１０３は、管理サーバ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションプログラム、および各種データを記憶する。管理サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００６３】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、管理サーバ１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１として、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００６４】
入力信号処理部１０５は、管理サーバ１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２として、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００６５】
媒体リーダ１０６は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ１０６は、例えば、プロセッサ１０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００６６】
ＮＩＣ１０７は、ネットワーク１０を介して他の装置と通信を行う。ＮＩＣ１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
管理サーバ１００は、以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。物理マシン２００，３００，４００，・・・、利用者端末５００，６００および運用者端末７００も管理サーバ１００と同様のハードウェアを用いて実現できる。第１の実施の形態に示したスケジューリング装置１も、図４に示した管理サーバ１００と同様のハードウェアにより実現することができる。
【００６７】
ここで、図３に示したシステムにおける物理マシン２００，３００，４００のメンテナンスを実施する場合を想定する。サービスの品質を維持するために、インフラ側のメンテナンスは重要である。メンテナンスの作業内容は、例えば、物理マシン２００，３００，４００へのセキュリティパッチの適用、劣化した機器の交換などである。
【００６８】
個々の物理マシンに対しては、運用者は以下の流れに従ってメンテナンス作業を実施する。
（１）メンテナンス対象の物理マシン上で動作している仮想マシンを、メンテナンス済みの物理マシンにライブマイグレーションで移動させる。（２）空いた物理マシンに対してメンテナンス作業を実施する。
【００６９】
図５は、ライブマイグレーションの例を示す図である。図５の例では、物理マシン３００はメンテナンス済みであり、物理マシン２００がメンテナンス対象である。物理マシン２００，３００は、それぞれハイパーバイザ２１０，３１０を有している。ハイパーバイザ２１０，３１０が、仮想マシンへのリソースの割り当てを行う。例えば物理マシン２００のメンテナンス前は、物理マシン２００は、ハイパーバイザ２１０および仮想マシン２１１，２１２を有している。物理マシン２００のハイパーバイザ２１０は、物理マシン２００が備えるＣＰＵやメモリといったハードウェアのリソースを仮想マシン２１１，２１２に割り当てている。
【００７０】
例えば、物理マシン２００から物理マシン３００に仮想マシン２１１，２１２を移動する場合を想定する。移動をライブマイグレーションにより実施する場合、次のような手順を採ることが考えられる。
【００７１】
（１）物理マシン３００上で移動対象の仮想マシン２１２用のＣＰＵ／メモリリソースを予約する。（２）物理マシン２００で移動対象の仮想マシン２１２に割り当てられているメモリリソースのデータを、物理マシン３００で当該仮想マシン２１２用に新たに割り当てたメモリリソースにコピーする。（３）物理マシン２００から物理マシン３００へ仮想マシン２１２に割り当てていたＣＰＵリソースの状態をコピーし、物理マシン２００で仮想マシン２１２を停止させる。（４）物理マシン３００で仮想マシン２１２を再開し、物理マシン２００で仮想マシン２１２に割り当てていたリソースを解放する。これにより、物理マシン２００上で稼働している仮想マシン２１２を、物理マシン３００に移動させることができる。上記の手順はＰｒｅ−Ｃｏｐｙと呼ばれることもある。ただし、ライブマイグレーションにはＰｏｓｔ−Ｃｏｐｙなどの他の手順を用いてもよい。
【００７２】
ライブマイグレーションを行うことで、物理マシン２００上の仮想マシン２１１，２１２を稼働させたまま別の物理マシン３００に移動させることができる。仮想マシン２１１，２１２の利用者は、仮想マシン２１１，２１２を実行している物理マシンが変更されたことを意識せずに処理を継続できる。
【００７３】
以下の説明では、ライブマイグレーションを、ＬＭ（Live Migration）と略記することがある。
ＬＭで仮想マシン２１１，２１２を移動させた後、運用者は、物理マシン２００のメンテナンス作業を実施する。システム内のすべての物理マシン２００，３００，４００，・・・全体へのメンテナンスを行う場合、メンテナンス対象の物理マシンを順番に選択し、メンテナンス対象の物理マシンへのＬＭとメンテナンス作業とを繰り返し行うこととなる。
【００７４】
管理サーバ１００では、物理マシン２００，３００，４００，・・・それぞれに対して、いつメンテナンスを実行するのかをスケジューリングする。
スケジューリング処理への入力と出力は以下のような情報である。
［入力］
・物理マシン：Ｐ＝｛ｐ1，ｐ2，・・・｝
・空き物理マシン：Ｐe⊆Ｐ，１≦｜Ｐe｜
・仮想マシン：Ｖ＝｛ｖ1，ｖ2，・・・｝
・時刻：Ｔ＝｛ｔ1，ｔ2，・・・｝
時刻：Ｔ＝｛ｔ1，ｔ2，・・・｝は、スケジュール対象期間を離散化させたときの、各期間の開始時刻である。なお管理サーバ１００は、入力としてスケジュール対象期間を受け付け、管理サーバ１００がスケジュール対象期間を離散化させ、時刻Ｔ＝｛ｔ1，ｔ2，・・・｝を生成してもよい。
［出力］
・物理マシン：メンテナンス作業の開始時刻
・仮想マシン：ＬＭの開始時刻およびＬＭの移動先
図６は、メンテナンスのスケジュールの一例を示す図である。図６に示すスケジュール３１では、横軸に時刻が示されており、縦軸に物理マシンが示されている。そして各物理マシンに対応付けて、仮想マシン稼働中の期間、仮想マシンのＬＭの実施期間、物理マシンのメンテナンス作業の実施期間が示されている。
【００７５】
時刻ｔ1において、物理マシン名「ｐi」の物理マシンで仮想マシンが実行されていない。そこで管理サーバ１００は、まず物理マシン名「ｐi」の物理マシンに対してメンテナンス作業を実施することを決定する。次に管理サーバ１００は、物理マシン名「ｐi」の物理マシンのメンテナンス作業の終了後、物理マシン名「ｐ1」の物理マシンで実行されているすべての仮想マシンを、物理マシン名「ｐi」の物理マシンへＬＭで移動することを決定する。物理マシン名「ｐ1」の物理マシンで実行していたすべての仮想マシンを移動させることで、物理マシン名「ｐ1」の物理マシンは空き物理マシンとなる。そこで管理サーバ１００は、ＬＭの完了後に、物理マシン名「ｐ1」の物理マシンに対するメンテナンス作業を実施することを決定する。
【００７６】
管理サーバ１００は、システム内のすべての物理マシン２００，３００，４００，・・・に対して、メンテナンス作業の実施予定が決定するまで、スケジューリング処理を続ける。管理サーバ１００は、スケジューリングに要する時間は、物理マシンおよび仮想マシンの数が多いほど長期化する。
【００７７】
ここでスケジューリング対象期間内に、各物理マシンへのメンテナンス作業が１回だけ実施される。スケジューリング対象期間内に、各仮想マシンのＬＭが１回だけ実施される。そして仮想マシンのＬＭの移動先の候補は、その仮想マシンの初期配備先以外の物理マシンであり、移動先の候補数は「|Ｐ|−１」で表される。なお|Ｐ|は、集合Ｐの要素数を表している。
【００７８】
この場合、出力値の候補となり得る場合の数（探索空間の大きさ）は、以下の式で表される。
【００７９】
【数１】
2020071779.tif 000003
【００８０】
「（｜Ｔ｜）|P|」が物理マシンのメンテナンス作業の開始時刻についての場合の数であり、「（｜Ｔ｜・（｜Ｐ｜−１））|V|」が、仮想マシンのＬＭ開示時刻および移動先についての場合の数である。
【００８１】
図６に示したように、物理マシンに対してメンテナンス作業を実施するには、その物理マシンが空き物理マシンであることが条件となる。また仮想マシンのＬＭを実施するには、移動先の物理マシンがメンテナンス済みであることが条件となる。これらの条件以外にも、運用者がメンテナンス作業時に守るべき要件がある。このような要件が、メンテナンスのスケジューリングの際の制約となる。なお、制約には、ハード制約とソフト制約とがある。ハード制約は、常に満たすことが求められる制約である。ソフト制約は、できるだけ満たすことが求められる制約である。スケジューリングの解の探索において、ハード制約の少なくとも１つが満たされない場合、充足不能としてスケジューリングは失敗となる。スケジューリングの解の探索において、ソフト制約について満たされなくても、充足不能とはならない。
【００８２】
メンテナンスのスケジューリングに適用する制約の例としては、以下のようなものがある。
・「物理マシン上の仮想マシンのリソース量の合計≦その物理マシンのリソース量」であること。
・物理マシンへのＬＭは、その物理マシンへのメンテナンスが終わった後であること。
・ＬＭを同時並列に実施する物理マシン数が、予め設定した上限値（ｍａｘ＿ｌｍ）以下であること。
・１台の物理マシン内での並列のＬＭを禁止すること。
・初期配備先が同じ複数の仮想マシンそれぞれのＬＭでの移動先は同一であること。
・仮想マシンの利用者が指定した時間帯で、その仮想マシンのＬＭを回避すること。
【００８３】
ここで、利用者がＬＭを回避する時間帯を指定できることの重要性について説明する。
仮想マシンには、ＬＭの実施を回避すべき時間帯がある。例えば、仮想マシンのメモリ内容が頻繁に変化する時間帯にＬＭを行うと、ＬＭの所要時間が増大する。またＬＭであっても、仮想マシンを実行しているＣＰＵ状態の転送時には、仮想マシンの動作が一時的に停止する時間（ダウンタイム）が存在する。メモリ内容が頻繁に変化する時間帯にＬＭを行うと、ダウンタイムが増大する。ＬＭ中は仮想マシンの性能が低下するため、所要時間とダウンタイムの増大は、利用者の業務に影響を与える時間の増大を意味する。またＬＭの所要時間の増大は、物理マシン１台にあたり運用者の作業時間の増大にもつながる。
【００８４】
仮想マシンのメモリ内容が頻繁に変化する時間帯は、例えば、仮想マシンの過去の稼働状況から予測されるＬＭの所要時間に基づいて判定可能である。このような過去の稼働状況に基づく判定は、稼働パターンが周期的な仮想マシンに対して有効となる。また利用者が事前に把握している業務都合（例えば夜間に実施するバッチ処理の有無）に基づいて、仮想マシンのメモリ内容が頻繁に変化する時間帯を判定することもできる。利用者の業務都合は突発的に発生する場合があり、メンテナンスのスケジューリングは、突発的に発生した事態に対応できるように、短時間で実行できることが重要となる。
【００８５】
このように、クラウドシステムのインフラに対するメンテナンススケジューリングは非常に複雑で大規模な問題である。そのため、計算時間や使用メモリ量の観点から、組み合わせ最適化問題でよく用いられる０−１整数計画問題などを単純に適用しても、実用可能な時間内での求解は困難である。例えば、物理マシンと仮想マシンとの合計台数が１００台から数千台の規模になると、従来の組み合わせ最適化問題の探索手法では解くことができない。
【００８６】
そこで管理サーバ１００は、分割統治法を用いてメンテナンスのスケジューリングを行う。分割統治法は、そのままでは解くのが難しい大きな問題をいくつかの小さな問題に分割し、分割した各問題の解を統合することで最終的に最初の問題を解く手法である。分割統治法により計算量を削減することで，現実的な時間内（および使用メモリ量）で制約を充足するスケジュールを作成できる。
【００８７】
図７は、メンテナンスのスケジューリングへの分割統治法の適用方法を示す図である。メンテナンスのスケジューリングを行う場合、管理サーバ１００は、物理マシン集合と時刻集合とをそれぞれ分割する。図７の例では、物理マシン集合をｍ分割（ｍは１以上の整数）しており、離散化により生成された時刻集合をｎ分割（ｎはｍ以上の整数）している。これにより、メンテナンスの適切なスケジューリングを行うというスケジューリング問題３２が、複数の部分問題に分割される。
【００８８】
物理マシン集合がｍ個に分割されたことで、ｍ個の部分集合（物理マシングループ）が生成される。物理マシングループには、「｜Ｐ｜／ｍ」個の物理マシンが含まれる。また時刻集合がｎ個に分割されたことで、ｎ個の部分集合（時刻グループ）が生成される。時刻グループには、「｜Ｔ｜／ｎ」個の時刻が含まれる。そして物理マシングループと時刻グループとの組み合わせごとに、部分問題を生成することができる。複数の物理マシンそれぞれの仮想マシン数が均一であると仮定すると、部分問題あたりの場合の数は、以下の通りとなる。
【００８９】
【数２】
2020071779.tif 000004
【００９０】
このように全体のスケジューリング問題３２を部分問題に分割することで、分割数に応じて場合の数が指数関数的に減少する。
なお、システムのメンテナンスの実施には、メンテナンス対象の物理マシンで実行されている仮想マシンの移動先となる空き物理マシンが存在していることが前提となる。そこで管理サーバ１００は、物理マシン集合を分割する場合、空き物理マシンのみを有する物理マシングループを１つ作成する。そして空き物理マシンだけの物理マシングループに含まれない物理マシン集合を、複数の物理マシングループに分割する。
【００９１】
図８は、物理マシン集合と時刻集合との分割例を示す図である。図８に示すスケジューリング問題３３では、８台の物理マシン（Ｐ＝｛ｐ1，ｐ2，ｐ3，・・・，ｐ8｝）がある。このうち２台の物理マシンが空き物理マシン（Ｐe＝｛ｐ7，ｐ8｝）である。スケジューリング対象期間は、２０個の時間帯に離散化され、各時間帯の開始時刻を示す時刻集合（Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔ20｝）が生成されている。図８では、物理マシングループの境界、および時刻グループの境界を点線で示している。
【００９２】
物理マシン集合は４つの物理マシングループに分割されており、そのうちの１つには、空き物理マシンのみが含まれる。残りの３つの物理マシングループには、物理マシンが２台ずつ含まれる。この３つの物理マシングループそれぞれには、部分問題の求解のために、未定の移動先に対応する仮の物理マシンが追加されている。追加される仮の物理マシンの数は、空き物理マシンのみが含まれる物理マシングループ内の物理マシン数と同じである。図８の例では、各物理マシングループに、仮の物理マシンが２台ずつ追加されている。
【００９３】
時刻集合は、５つの時刻グループに分割されている。管理サーバ１００は、スケジューリングの際には、時刻グループに対応する期間を、ＬＭ作業期間とメンテナンス作業期間とに分ける。
【００９４】
図９は、時刻グループに対応する期間内の作業期間の区分けを示す図である。図９の例では、ＬＭ作業期間とメンテナンス作業期間との長さを同じとしている。この場合、時刻グループ３４内の時刻ｔ1〜時刻ｔ|T|／２ｎの期間がＬＭ作業期間であり、時刻ｔ|T|／２ｎ＋１〜時刻ｔ|T|／ｎの期間がメンテナンス作業期間である。
【００９５】
管理サーバ１００は、図８、図９に示した条件で部分問題を求解する。仮に管理サーバ１００がすべての部分問題を求解した場合、図１０に示すような求解結果が得られる。
図１０は、部分問題ごとの制約を充足するスケジュールの求解結果の一例を示す図である。スケジューリング問題３３の最初の時刻グループ「ｔ1〜ｔ4」では、空き物理マシンのみの物理マシングループ内の物理マシン「ｐ7〜ｐ8」に対してメンテナンス作業を実施する。そのため該当時刻グループについては、他の物理マシングループについての求解は行われない。また空き物理マシンのみの物理マシングループについては、メンテナンスが実行された後の期間についての求解は行われない。
【００９６】
求解を行った部分問題のうち制約を充足することができた部分問題については、求解の結果として、物理マシンのメンテナンス期間と、仮想マシンのＬＭの実施期間とが決定される。ただしこの時点では、ＬＭによる仮想マシンの移動先は未定である。
【００９７】
例えば物理マシングループ｛ｐ3〜ｐ4｝の物理マシンを時刻グループ｛ｔ17〜ｔ20｝でメンテナンスする場合のスケジューリング結果では、時刻ｔ17に、物理マシン名「ｐ3」の物理マシン上の仮想マシンのＬＭを実施する。次に時刻ｔ18に、物理マシン名「ｐ4」の物理マシン上の仮想マシンのＬＭを実施する。次に時刻ｔ19に、物理マシン名「ｐ3」の物理マシンのメンテナンス作業を実施する。そして時刻ｔ20に、物理マシン名「ｐ4」の物理マシンのメンテナンス作業を実施する。
【００９８】
なお部分問題の求解では、制約を充足するスケジュールの生成に失敗する場合がある。管理サーバ１００は、制約を充足できない部分問題については、ＵＮＳＡＴ（unsatisfiable）として管理する。
【００９９】
図１０には、管理サーバ１００がすべての部分問題を求解した場合の求解結果を示しているが、実際には、管理サーバ１００は一部の部分問題を求解すればよい。例えば管理サーバ１００は、物理マシングループ間で求解する部分問題の単位期間が重複しないようにして、複数の物理マシングループそれぞれについて、求解する部分問題を１つずつ選択し、選択した部分問題のみを求解することができる。管理サーバ１００は、部分問題ごとの求解結果から、「全物理マシンに対してメンテナンスを実施」することができ、かつ「作業終了日が最短」となるように、使用するスケジュール（部分問題の求解結果）を抽出する。そして管理サーバ１００は、抽出したスケジュールを編集し、全体のスケジュールを作成する。
【０１００】
図１１は、解の統合例を示す図である。複数の物理マシングループそれぞれについて、１つずつの求解結果４１〜４４が抽出されている。抽出された求解結果４１〜４４の時刻グループには重複がない。管理サーバ１００は、抽出した求解結果４１〜４４を統合し、システム全体に対するメンテナンスのスケジュール４５を作成する。
【０１０１】
例えば管理サーバ１００は、時刻が最も早い時刻グループ｛ｔ1〜ｔ4｝の求解結果４１から、メンテナンス作業が実施される物理マシンの物理マシン名「ｐ7，ｐ8」を取得する。管理サーバ１００は、取得した物理マシン名「ｐ7，ｐ8」を、次の時刻グループ｛ｔ5〜ｔ8｝の求解結果４２における未定の物理マシンの物理マシン名に設定する。
【０１０２】
次に管理サーバ１００は、時刻グループ｛ｔ5〜ｔ8｝の求解結果４２から、メンテナンス作業が実施される物理マシンの物理マシン名「ｐ3，ｐ4」を取得する。管理サーバ１００は、取得した物理マシン名「ｐ3，ｐ4」を、次の時刻グループ｛ｔ9〜ｔ12｝の求解結果４３における未定の物理マシンの物理マシン名に設定する。
【０１０３】
次に管理サーバ１００は、時刻グループ｛ｔ9〜ｔ12｝の求解結果４３から、メンテナンス作業が実施される物理マシンの物理マシン名「ｐ5，ｐ6」を取得する。管理サーバ１００は、取得した物理マシン名「ｐ5，ｐ6」を、次の時刻グループ｛ｔ13〜ｔ16」｝の求解結果４４における未定の物理マシンの物理マシン名に設定する。
【０１０４】
そして管理サーバ１００は、求解結果４１〜４４それぞれに示された各物理マシンに対するＬＭの実施予定とメンテナンス作業の実施予定とが設定されたスケジュール４５を作成する。初期状態で空き物理マシン（物理マシン名「ｐ7，ｐ8」）以外の物理マシンは、メンテナンス作業実施以前は、ＬＭで仮想マシンを移動させるまで仮想マシン稼働中の状態となる。また、すべての物理マシンに関し、メンテナンス作業実施後にＬＭで他の物理マシンから仮想マシンが移動してくると、仮想マシン稼働中の状態となる。
【０１０５】
このようにして、メンテナンスのスケジューリングに対して分割統治法を適用することができる。分割統治法を適用することで、計算量の削減が見込まれるが、物理マシン集合の分割数および時刻集合の適切な分割数に応じて、問題の性質が変化する。
【０１０６】
図１２は、物理マシン集合の分割数と問題の性質との関係を示す図である。図１２には、物理マシン集合についての分割数と問題の性質との関係４６として、分割数に応じた計算量、作業日数、および問題の難易度の変化が示されている。問題の難易度とは、部分問題に対する充足解の見つけやすさである。すなわち、問題の難易度が高い（難しい）ほど、部分問題の充足解を得られない可能性が高くなる。
【０１０７】
物理マシン集合の分割数が少ないほど、計算量が大きくなり、作業日数は短くなり、問題の難易度が難しくなる。物理マシン集合の分割数が多いほど、計算量が小さくなり、作業日数は長くなり、問題の難易度が易しくなる。分割数が少ないほど作業日数が短くなるのは、時刻グループあたりの作業台数が増えるためである。分割数が少ないほど問題の難易度が難しくなるのは、制約を考慮する物理マシン数が増えるためである。
【０１０８】
このように、物理マシンを分割しすぎた場合，運用者が作業を完了するまでに要する日数が増加してしまう。そして、問題の解が存在する（スケジュールが生成可能な）範囲で最も作業日数を短くできる分割数は、制約の内容によって大きく変化する。そのため、物理マシン集合の適切な分割数を一意に決定するのは困難である。
【０１０９】
図１３は、時刻集合の分割数と問題の性質との関係を示す図である。図１３には、時刻集合についての分割数と問題の性質との関係４７として、分割数に応じた計算量、作業日数、および問題の難易度の変化が示されている。
【０１１０】
時刻集合の分割数が少ないほど、計算量が大きくなり、作業日数は長くなり、問題の難易度が易しくなる。時刻集合の分割数が多いほど、計算量が小さくなり、作業日数は短くなり、問題の難易度が難しくなる。分割数が多いほど作業日数が短くなるのは、早めに作業を終了できる可能性が増えるためである。また分割数が多いほど問題の難易度が難しくなるのは、時間に関する制約が難化するためである。
【０１１１】
このように、物理マシンの場合と同様に、時刻集合の分割数に応じて問題の性質が変化する。そのため、時刻集合の適切な分割数を一意に決定するのも困難である。
しかも、スケジューリングにおいて満たすべき制約の１つとして、物理マシン内の仮想マシンへのＬＭの実施を回避すべき時間帯が存在する点が、適切な分割数の決定をさらに困難にしている。
【０１１２】
図１４は、ＬＭ回避時間帯の一例を示す図である。管理サーバ１００は、１つの部分問題を解くとき、物理マシン上で実行されている仮想マシンそれぞれについて設定されたＬＭ回避時間帯４８の情報を取得する。管理サーバ１００は、ＬＭ回避時間帯４８に基づいて、物理マシングループを生成する際に、離散化された各時刻について、物理マシングループに属する物理マシン上の仮想マシンのＬＭを実行可能か否かについて判断する。
【０１１３】
管理サーバ１００は、同じ物理マシングループに属するすべての物理マシンについて、ＬＭ実施回避時間帯を生成する。そして管理サーバ１００は、その物理マシングループについての部分問題を求解するとき、物理マシンそれぞれのＬＭ実施回避時間帯を避けて、物理マシンのＬＭの実施時間帯を決定する。
【０１１４】
図１５は、ＬＭ回避時間帯を考慮した部分問題の求解例を示す図である。図１５の例では、異なる物理マシンでのＬＭの並列実行が禁止されているものとする。
ここで、物理マシン名「ｐ3」、物理マシン名「ｐ4」が属する物理マシングループの部分問題５１，５２を求解するものとする。物理マシン名「ｐ3」の物理マシンは、時刻ｔ1，ｔ3〜ｔ6，ｔ8〜ｔ10が、ＬＭ実施回避時間帯である。物理マシン名「ｐ4」の物理マシンは、時刻ｔ1，ｔ3〜ｔ6，ｔ8〜ｔ10が、ＬＭ実施回避時間帯である。
【０１１５】
時刻グループ｛ｔ1，ｔ2，ｔ3，ｔ4，ｔ5｝において、物理マシン名「ｐ3」の物理マシンのＬＭを実施できる期間は、時刻ｔ2に対応する期間のみである。同様に、時刻グループ｛ｔ1，ｔ2，ｔ3，ｔ4，ｔ5｝において、物理マシン名「ｐ4」の物理マシンのＬＭを実施できる期間は、時刻ｔ2に対応する期間のみである。異なる物理マシンでのＬＭの並列実行が禁止されていた場合、時刻ｔ2において一方の物理マシンのＬＭを実行すると、他方の物理マシンのＬＭを実行可能な期間がない。従って時刻グループ｛ｔ1，ｔ2，ｔ3，ｔ4，ｔ5｝に関する部分問題５１の求解結果５３は、「ＵＮＳＡＴ」となる。同様に時刻グループ｛ｔ6，ｔ7，ｔ8，ｔ9，ｔ10｝に関する部分問題５２についても、求解結果５４が「ＵＮＳＡＴ」となる。
【０１１６】
このように、ＬＭ実施回避時間帯が存在するため、制約を充足する解が見つからないことがある。ＬＭ実施回避時間帯を考慮せずに、物理マシン集合または時刻集合を分割すると、解が常に見つからない物理マシングループが発生する可能性が高くなる。ＬＭ実施回避時間帯を時系列で考慮して分割する場合、次元数が大幅に増加（時刻数分）する。そのため、何らかの工夫をしなければ、計算時間の増大することや問題の難易度が高まることにより、適切な分割数の決定は困難である。そこで管理サーバ１００は、以下のようにして時刻集合および物理マシン集合の分割を行う。
【０１１７】
管理サーバ１００は、時刻集合の分割数については、例えば運用者が、ＬＭとメンテナンスの各作業を実施する時間帯に基づいて設定する。
図１６は、時刻集合の分割数の決定例を示す図である。図１６には、システム全体に関して、ＬＭ実施が可能（ＬＭ可）な時間帯とメンテナンス作業が可能な時間帯との区分（時間帯区分５５）を示している。
【０１１８】
システムのメンテナンスを実施する際、メンテナンス実施期間中に作業できない時間帯が存在する。例えば早朝、深夜、昼休みなどは、メンテナンスに関する作業は実施しない。物理マシンに対する作業順序は、メンテナンス実施前から空きの物理マシンを除き、ＬＭ→メンテナンス作業の順となる。そこで、運用者が管理サーバ１００へ、ＬＭとメンテナンス作業との実施可能な時間帯を入力する。例えば、運用者は、毎日の午前中の勤務時間帯をＬＭ実施可能な時間帯とし、毎日の午後の勤務時間帯をメンテナンス作業の実施可能な時間値とする。時間帯区分５５の入力を受けた管理サーバ１００は、ＬＭの実施可能な時間帯とメンテナンス作業の実施可能な時間帯とのペア５５ａ，５５ｂ，５５ｃを探索する。そして管理サーバ１００は、見つけ出したペア数を、時刻集合の分割数（ｎ）とする。この場合、１つの時刻グループに対応する時間帯の長さは、例えば２４時間となる。
【０１１９】
物理マシン集合の分割については、管理サーバ１００は、以下の要素からなるベクトルパッキング問題として扱うことで分割数を決定する。ベクトルパッキング問題は、ビンパッキング問題を変形したものである。ビンパッキング問題は、大きさの異なるアイテムの集合を固定サイズの箱に詰めるときに、使用する箱の最少の数を求める問題である。
【０１２０】
なおビンパッキング問題またはベクトルパッキング問題については、以下の文献が参考になる。
（文献１）D.S.Johnson, “Near-Optimal Bin Packing Algorithms,” Ph.D. Thesis, Massachusetts Institute of Technology, June, 1973. 
（文献２）A.Caprara and P.Toth, “Lower Bounds and Algorithms for the 2-Dimensional Vector Packing Problem,” Discrete Applied Mathematics, Vol.111, No.3, pp.231-262, 1 August 2001.
物理マシン集合の分割におけるベクトルパッキング問題では、１物理マシングループあたりの各要素の容量が定められ、同一物理マシングループに属する物理マシンの要素ごとの合計が、その要素の容量内に収まるような最少の分割数が求められる。
・ＬＭ作業可能時間
・メンテナンス作業可能時間
・リソース量（ＣＰＵコア数、メモリ量など）
・ＬＭの実施を回避する時間帯
管理サーバ１００は、上記要素のベクトルパッキング問題を解くため、ＬＭ作業時間、メンテナンス作業時間、リソース量の各要素の容量を決定する。例えば管理サーバ１００は、マイグレーション作業時間の容量を、時刻グループあたりのＬＭ作業可能時間に応じて決定する。また管理サーバ１００は、メンテナンス作業時間の容量を、時刻グループあたりのメンテナンス作業可能時間に応じて決定する。さらに管理サーバ１００は、リソース量の容量を、空き物理マシン群のリソース量に応じて決定する。
【０１２１】
図１７は、容量の決定例を示す図である。図１７の例では、システム内に５台の物理マシンがあり、そのうちの２台が空き物理マシンである。管理サーバ１００は、以下の情報に基づいて容量を決定する。
・物理マシンのリソース量：ｐi＝（ＣＰＵコア数，メモリ量［ＧＢ］）
ｐ0＝（５２，１２８），ｐ1＝（５２，１２８），ｐ2＝（５２，１２８），ｐ3＝（４８，１２８），ｐ4＝（４８，１２８），ｐ5＝（５２，１２８）
・空き物理マシン：Ｐe＝｛ｐ4，ｐ5｝
・時刻グループあたりのＬＭ作業可能時間：１８０分
・時刻グループあたりのメンテナンス作業可能時間：３００分
・同時並列にＬＭできる物理マシン数の上限：ｍａｘ＿ｌｍ＝２
・同時並列にメンテナンスできる物理マシン数の上限：ｍａｘ＿ｍａｉｎｔ＝２
管理サーバ１００は、物理マシンをＣＰＵコア数で昇順にソートする。そして管理サーバ１００は、ソート後の物理マシンの上位｜Ｐe｜台のＣＰＵコア数の合計を、ＣＰＵコア数の容量５６ａとする。図１７の例では、４８＋４８＝９６（個）が、ＣＰＵコア数の容量５６ａとなる。
【０１２２】
管理サーバ１００は、物理マシンをメモリ量で昇順にソートする。そして管理サーバ１００は、ソート後の物理マシンの上位｜Ｐe｜台のメモリ量の合計を、メモリの容量５６ｂとする。図１７の例では、１２８＋１２８＝２５６（ＧＢ）がメモリの容量５６ｂとなる。
【０１２３】
管理サーバ１００は、ｍａｘ＿ｌｍ×時刻グループあたりのＬＭ作業可能時間を、ＬＭ作業可能時間の容量５６ｃとする。図１７の例では、２×１８０＝３６０（分）がＬＭ作業可能時間の容量５６ｃとなる。
【０１２４】
管理サーバ１００は、ｍａｘ＿ｍａｉｎｔ×時刻グループあたりのメンテナンス作業可能時間を、メンテナンス作業可能時間の容量５６ｄとする。図１７の例では、２×３００＝６００（分）がメンテナンス作業可能時間の容量５６ｄとなる。
【０１２５】
管理サーバ１００は、ベクトルパッキング問題を解くとき、同一物理マシングループに属する物理マシンの各要素の合計が、該当要素の容量内に収まるように、物理マシンのグループ分けを行う。
【０１２６】
図１８は、物理マシンの割り当て先の決定例を示す図である。管理サーバ１００は、物理マシンを物理マシングループに割り当てる際に、割り当て先の物理マシングループ内の全物理マシンについてＬＭを実施できる時刻グループが存在するか否かを確認する。割り当て先の物理マシングループ内の全物理マシンについてＬＭを実施できる時刻グループが存在するということは、その物理マシングループについての部分問題の解が存在する可能性があることを意味する。
【０１２７】
図１８の例では、３つの物理マシングループ５７ａ，５７ｂ，５７ｃに、それぞれ１台ずつの物理マシンが割り当てられている。この状況において、管理サーバ１００が、新たに物理マシン名「ｐ’」の物理マシン５７ｄの割り当て先を探索する場合を想定する。
【０１２８】
ここで、ＬＭ所要時間：１、リソースの容量：５０、時刻グループ：｛ｔ1，・・・，ｔ5｝，｛ｔ6，・・・，ｔ10｝、物理マシンのリソース量：ｐ’＝２０，ｐa＝ｐb＝１０，ｐc＝４０とする。
【０１２９】
なおＬＭ所要時間は、離散化で生成された１つの時刻に対応する時間の長さ（連続する時刻の差）が、１単位である。
管理サーバ１００は、まず物理マシン５７ｄを、物理マシングループ５７ａに割り当てることができるか否かを判断する。物理マシングループ５７ａに割り当てられている物理マシン名「ｐa」の物理マシンは、時刻ｔ4〜ｔ10に対応する期間が、ＬＭ実施回避時間帯である。それに対して、物理マシン名「ｐ’」の物理マシン５７ｄのＬＭ実施回避時間帯は、時刻ｔ1〜ｔ5，ｔ9〜ｔ10に対応する期間である。すると物理マシン５７ｄを物理マシングループ５７ａに割り当ててしまうと、ＬＭ実施可能な期間が存在しなくなる。すなわち、２つの時刻グループいずれにおいても、属する物理マシン｛ｐa，ｐ’｝についてＬＭを行うことはできない。従って管理サーバ１００は、物理マシン５７ｄを物理マシングループ５７ａに割り当てることはできないと判断する。実際には、管理サーバ１００は、仮想マシン単位でのＬＭ回避時間帯を考慮し、物理マシン５７ｄを物理マシングループ５７ａに割り当てることができるか否かを判断する。
【０１３０】
次に管理サーバ１００は、物理マシン５７ｄを、物理マシングループ５７ｂに割り当てることができるか否かを判断する。物理マシングループ５７ｂに割り当てられている物理マシン名「ｐb」の物理マシンは、時刻ｔ1〜ｔ6，ｔ10に対応する期間が、ＬＭ実施回避時間帯である。すると物理マシン５７ｄを物理マシングループ５７ｂに割り当てた後も、時刻ｔ7〜ｔ8に対応する期間（期間の長さ「２」）は、ＬＭが可能な期間となる。実際には、管理サーバ１００は、仮想マシン単位でのＬＭ回避時間帯を考慮し、物理マシン５７ｄを物理マシングループ５７ｂに割り当てることができるか否かを判断する。この場合、２台の物理マシン｛ｐb，ｐ’｝については、時刻グループ｛ｔ6，・・・，ｔ10｝において、ＬＭが可能である。また２台の物理マシン｛ｐb，ｐ’｝それぞれのリソース量は「１０」、「２０」であり、合計してもリソースの容量「５０」を超えない。従って管理サーバ１００は、物理マシン５７ｄを物理マシングループ５７ｂに割り当てることができると判断する。
【０１３１】
次に管理サーバ１００は、物理マシン５７ｄを、物理マシングループ５７ｃに割り当てることができるか否かを判断する。物理マシングループ５７ｃに割り当てられている物理マシン名「ｐc」の物理マシンは、ＬＭ実施回避時間帯が存在しない。そのため、物理マシン５７ｄを物理マシングループ５７ｃに割り当てた後も、時刻ｔ6〜ｔ8に対応する期間（期間の長さ「３」）は、ＬＭが可能な期間となる。実際には、管理サーバ１００は、仮想マシン単位でのＬＭ回避時間帯を考慮し、物理マシン５７ｄを物理マシングループ５７ｃに割り当てることができるか否かを判断する。この場合、２台の物理マシン｛ｐc，ｐ’｝については、時刻グループ｛ｔ6，・・・，ｔ10｝において、ＬＭが可能である。ただし２台の物理マシン｛ｐc，ｐ’｝それぞれのリソース量は「４０」、「２０」であり、合計するとリソースの容量「５０」を超えてしまう。従って管理サーバ１００は、物理マシン５７ｄを物理マシングループ５７ｃに割り当てることはできないと判断する。
【０１３２】
管理サーバ１００は、このような物理マシンの物理マシングループへの割り当てを、すべての物理マシンに対して行う。その際、管理サーバ１００は、物理マシンを以下の基準でソートし、上位の物理マシンから順に割り当て先を決定する。
（第１の基準）ＬＭの実施を回避すべき時間の長さ（降順）
（第２の基準）リソース量（ＣＰＵコア数、メモリ量など）（降順）
管理サーバ１００は、第１の基準で物理マシンをソートし、同じ順番になった物理マシン同士で第２の基準でソートする。第２の基準は、リソースの種別ごとの基準に分かれる。管理サーバ１００は、各物理マシンのリソース量を、空き物理マシンの該当リソースの合計容量で正規化し、正規化後のリソース量の合計が大きいリソースほど、ソートの優先順を高くする。各リソースの正規化後のリソース量の合計は、以下の式で表される。
【０１３３】
【数３】
2020071779.tif 000005
【０１３４】
ここで、ａ(i,j)は、ｉ番目の物理マシンのｊ番目の要素（リソース）の量である。リソースの量は、空き物理マシンの該当リソースの合計容量を「１」とする正規化した値である。Ｄは、要素の次元数（制約として用いるリソースの種別数）である。管理サーバ１００は、まず、最も優先順が高いリソース量でソートする。次に管理サーバ１００は、優先順が同じとなる物理マシン同士について、次に優先順が高いリソース量でソートする。
【０１３５】
このように管理サーバ１００は、ＬＭ実施回避時間帯が長い物理マシンから順に、属する物理マシングループ（割り当て先）を判断する。これは、回避すべき時間帯が長い物理マシンを先に物理マシングループに割り当てたほうが、判断の順が後となる物理マシンの割り当て先判定時に候補先となる物理マシングループが増加するためである。
【０１３６】
すなわち、物理マシングループ内の物理マシン数が増えると、その物理マシングループについてのＬＭ実施回避時間帯が増加し、ＬＭ実施可能な時間帯が減少する。物理マシンを新たに物理マシングループに割り当てたことで、各時刻グループにおいて、その物理マシングループのＬＭ実施可能な時間帯が少なくなる。すると、図１８の物理マシングループ５７ａの場合のように、物理マシンを割り当てることができなくなる。そのため、管理サーバ１００は、ＬＭ実施回避時間帯が長い物理マシンから順に物理マシングループへの割り当てを行うことで、候補先とすることができない物理マシングループの発生を抑止する。
【０１３７】
また、管理サーバ１００は、物理マシンの物理マシングループへの割り当て（物理マシンのグループ化）を、少ない分割数から試行する。これは、物理マシングループが少ないほど運用者の作業終了日が早くなる可能性が高いためである。管理サーバ１００は、グループ化に失敗した場合はグループ数を順次大きくして、物理マシングループ化を試行する。
【０１３８】
なお、物理マシン集合の分割数（物理マシングループ数）については、例えば以下の式により理論下限値ｍ0を計算することができる。
【０１３９】
【数４】
2020071779.tif 000006
【０１４０】
式（４）では、リソースごとに、物理マシンのリソース量の合計値（正規化後の値）の天井関数の値を求め、その最大値を理論下限値ｍ0としている。天井関数は、実数に対して、その実数以上の最小の整数を求める関数である。実際の物理マシンのグループ化では、理論下限値ｍ0より物理マシングループ数が大きくなることがある。
【０１４１】
図１９は、物理マシン集合の分割数の理論下限値と物理マシングループ数との関係を示す図である。図１９の例では、１種類のリソース量のみに着目している。
第１の分割例では、５台の物理マシン｛ａ1，ａ2，ａ3，ａ4，ａ5｝それぞれのリソース量は、「０．６，０．４，０．６，０．４，１」である。リソース量の合計は「３」であり、分割数の理論下限値ｍ0は「３」となる。この場合、３つの物理マシングループ５８ａ〜５８ｃそれぞれに属する物理マシンのリソース量の合計が、容量「１」を超えないように、すべての物理マシンを３つの物理マシングループ５８ａ〜５８ｃに割り当てることができる。各物理マシングループ５８ａ〜５８ｃは、割り当てられた物理マシンのリソース量の合計が容量「１」と等しい。そのため、これ以上の物理マシングループ数を減らすことはできず、物理マシングループ数が理論下限値と等しい。
【０１４２】
第２の分割例では、５台の物理マシン｛ａ1，ａ2，ａ3，ａ4，ａ5｝それぞれのリソース量は、「０．６，０．６，０．６，０．６，０．６」である。リソース量の合計は「３」であり、分割数の理論下限値ｍ0は「３」となる。１つの物理マシングループに対して１台の物理マシンしか割り当てることができない。そのため５台の物理マシンを、５つの物理マシングループ５８ｄ〜５８ｈに分散させることとなる。すなわち実際の物理マシングループ数「５」は、理論下限値「３」よりも多くなる。
【０１４３】
管理サーバ１００は、物理マシンの分割数の理論下限値ｍ0から物理マシングループ化の試行を開始することで、無駄なグループ化処理の発生を抑止し、処理を効率化することができる。
【０１４４】
以下、管理サーバ１００によるメンテナンスのスケジューリング処理について詳細に説明する。
図２０は、管理サーバの機能例を示す図である。管理サーバ１００は、インフラ管理部１１１、およびスケジューラ１１２を有する。インフラ管理部１１１、およびスケジューラ１１２の機能は、プロセッサ１０１により実現される。例えば、プロセッサ１０１は、ＲＡＭ１０２に記憶された所定のプログラムを実行することで、インフラ管理部１１１およびスケジューラ１１２の機能を発揮する。あるいは、インフラ管理部１１１およびスケジューラ１１２は、ＦＰＧＡやＡＳＩＣなどのハードワイヤードロジックにより実現されてもよい。
【０１４５】
インフラ管理部１１１は、各物理マシンのハードウェアの構成や各仮想マシンに割り当てられるリソースの構成を管理する。例えば、物理マシン２００は、仮想マシン２１１，２１２を有する。物理マシン３００は、仮想マシン３１１，３１２を有する。
【０１４６】
インフラ管理部１１１は、インフラ構成情報記憶部１２０、ＶＭ性能情報記憶部１３０およびインフラ管理制御部１４０を有する。インフラ構成情報記憶部１２０およびＶＭ性能情報記憶部１３０は、例えば、ＲＡＭ１０２やＨＤＤ１０３の記憶領域を用いて実現される。
【０１４７】
インフラ構成情報記憶部１２０は、インフラ構成情報を記憶する。インフラ構成情報は、各物理マシンのハードウェアの構成や各仮想マシンに割り当てられるリソースの構成に関する情報である。
【０１４８】
ＶＭ性能情報記憶部１３０は、ＶＭ性能情報を記憶する。ＶＭ性能情報は、仮想マシンの性能に関する情報であり、各仮想マシンのＬＭの所要時間に関する情報を含む。また、ＶＭ性能情報は、ＬＭの所要時間の予測結果を得るために用いられた各仮想マシンの負荷の履歴（過去の各時刻における各仮想マシンの負荷の履歴）を含んでもよい。なお、各仮想マシンの負荷の履歴に基づくＬＭの所要時間の予測は、管理サーバ１００により行われてもよい。
【０１４９】
インフラ管理制御部１４０は、スケジューラ１１２により決定されたＬＭのスケジュールに従って、各物理マシンに対する仮想マシンのＬＭを指示する。
スケジューラ１１２は、物理マシンのメンテナンスを行う際に、メンテナンス対象の物理マシンで動作する仮想マシンのＬＭおよびメンテナンス作業のスケジュールを決定する。スケジューラ１１２は、メンテナンス実施期間情報を運用者端末７００から受け付けると、インフラ構成情報記憶部１２０およびＶＭ性能情報記憶部１３０に記憶された情報に基づいて、ＬＭのスケジュールを決定する。
【０１５０】
スケジューラ１１２は、グループ生成部１５０、部分問題生成部１６０、部分問題求解部１７０、スケジュール生成部１８０、およびイベント情報記憶部１９０を有する。イベント情報記憶部１９０は、例えば、ＲＡＭ１０２やＨＤＤ１０３の記憶領域を用いて実現される。
【０１５１】
イベント情報記憶部１９０は、仮想マシンのＬＭおよび物理マシンのメンテナンス作業のスケジュールの情報を記憶する。
グループ生成部１５０は、システム全体のメンテナンスのスケジューリング問題を部分問題に分割するための、物理マシングループと時刻グループとを生成する。例えばグループ生成部１５０は、時刻集合の分割数を決定し、時刻集合を決定した分割数で分割することで、時刻グループを生成する。グループ生成部１５０は、物理マシン集合の分割数を決定し、物理マシン集合を決定した分割数で分割することで物理マシングループを生成する。なおグループ生成部１５０は、物理マシン集合の分割数については、少ない分割数から順に物理マシンのグループ化を試行する。そしてグループ生成部１５０は、すべての時刻グループについて制約の充足不可能となるような物理グループが発生しない最少の分割数を、最終的な分割数とする。
【０１５２】
部分問題生成部１６０は、決定された物理マシン集合の分割数と時刻集合の分割数とに基づいて、メンテナンスのスケジューリング問題を部分問題に分割する。
部分問題求解部１７０は、分割によって生成された部分問題を求解する。部分問題の求解により、各部分問題ごとのメンテナンスのスケジュールが生成される。
【０１５３】
スケジュール生成部１８０は、部分問題の求解結果を統合し、システム全体のメンテナンスのスケジュールを生成する。スケジュール生成部１８０は、生成したスケジュールをイベント情報記憶部１９０に格納する。
【０１５４】
またスケジューラ１１２は、スケジューラ１１２内の各要素が出力した情報の、運用者が使用する運用者端末７００への提供、および運用者端末７００からスケジューラ１１２内の各要素へ入力する情報の受付を行う。例えばスケジューラ１１２は、運用者端末７００からメンテナンス実施期間とメンテナンス対象物理マシンを受信する。スケジューラ１１２は、受信したメンテナンス実施期間とメンテナンス対象物理マシンを、グループ生成部１５０に送信する。またスケジューラ１１２は、作成されたスケジュールをイベント情報記憶部１９０から取得し、運用者端末７００に送信する。
【０１５５】
なお、図２０に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図２０に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【０１５６】
図２１は、メンテナンス実施期間情報の例を示す図である。メンテナンス実施期間情報Ｍ１は、運用者端末７００により管理サーバ１００に送信される。管理サーバ１００では、スケジューラ１１２がメンテナンス実施期間情報Ｍ１を受信する。
【０１５７】
メンテナンス実施期間情報Ｍ１は、システムに含まれる複数の物理マシンに関するメンテナンスの実施期間の情報である。メンテナンス実施期間情報Ｍ１は、開始日時、終了日時、時刻グループの分割単位、ＬＭ開始時刻、ＬＭ終了時刻、メンテナンス開始時刻、およびメンテナンス終了時刻の項目を含む。
【０１５８】
開始日時の項目には、メンテナンスの実施期間の開始日時が登録される。終了日時の項目には、メンテナンスの実施期間の終了日時が登録される。例えば、メンテナンス実施期間情報Ｍ１は、開始日時“２０１８−０６−１６Ｔ００：００：００．０００Ｚ”、および終了日時“２０１８−０６−３０Ｔ２３：５９：００．０００Ｚ”という情報を含む。これは、メンテナンス実施期間が２０１８年６月１６日００時００分から２０１８年６月３０日２３時５９分まであることを示す。
【０１５９】
時刻グループの分割単位の項目には、時刻集合を複数の時刻グループに分割する際の、１時刻グループに対応する時間の長さが登録される。例えば、メンテナンス実施期間情報Ｍ１は、時刻グループの分割単位“１日（２４時間）”という情報を含む。これは、時刻集合を１日分の長さに対応する時刻グループ（２４時間分の時刻を含む）に分割することを示す。
【０１６０】
ＬＭ開始時刻の項目は、１つの時刻グループ内でのＬＭ実施可能期間の開始時刻が登録される。ＬＭ終了時刻の項目は、１つの時刻グループ内でのＬＭ実施可能期間の終了時刻が登録される。例えば、メンテナンス実施期間情報Ｍ１は、ＬＭ開始時刻“０９：００：００．０００Ｚ”、ＬＭ終了時刻“１１：５９：００．０００Ｚ”という情報を含む。これは、１日のうち９時００分から１１時５９分までの期間がＬＭ実施可能期間であることを示す。
【０１６１】
メンテナンス開始時刻の項目は、１つの時刻グループ内でのメンテナンス実施可能期間の開始時刻が登録される。メンテナンス終了時刻の項目は、１つの時刻グループ内でのメンテナンス実施可能期間の終了時刻が登録される。例えば、メンテナンス実施期間情報Ｍ１は、メンテナンス開始時刻“１２：００：００．０００Ｚ”、メンテナンス終了時刻“１７：５９：００．０００Ｚ”という情報を含む。これは、１日のうち１２時００分から１７時５９分までの期間がメンテナンス実施可能期間であることを示す。
【０１６２】
ここで、１つの物理マシンに対するメンテナンス作業は、メンテナンス実施期間のうちの一部の時間範囲を用いて行われる。管理サーバ１００は、各物理マシンのメンテナンス作業が、入力されたメンテナンス実施期間中に完了するようにスケジューリングする。
【０１６３】
例えば、管理サーバ１００は、第１の物理マシンに対するメンテナンス作業を行う前に、第１の物理マシン上のすべての仮想マシンを第２の物理マシンに移動させて、第１の物理マシンのメンテナンス作業を行えるようにする。
【０１６４】
図２２は、メンテナンス対象マシン情報の例を示す図である。メンテナンス対象マシン情報Ｍ２は、運用者端末７００により管理サーバ１００に送信される。管理サーバ１００では、スケジューラ１１２がメンテナンス対象マシン情報Ｍ２を受信する。
【０１６５】
メンテナンス対象マシン情報Ｍ２は、物理マシン名およびメンテナンス所要時間の項目を含む。
物理マシン名の項目には、物理マシンの名称が登録される。メンテナンス所要時間の項目には、当該物理マシンのメンテナンスの所要時間が登録される。例えば、メンテナンス対象マシン情報Ｍ２は、物理マシン名“ＰＭ０１”、メンテナンス所要時間“０２：００：００．０００”という情報を含む。これは、物理マシン名“ＰＭ０１”で示される物理マシンのメンテナンス作業の所要時間が２時間であることを示す。
【０１６６】
メンテナンス対象マシン情報Ｍ２には、メンテナンス対象の他の物理マシンに対しても、同様に物理マシン名とメンテナンス所要時間が登録される。
図２３は、物理マシン構成テーブルの例を示す図である。物理マシン構成テーブル１２１は、インフラ構成情報記憶部１２０に予め格納されている。物理マシン構成テーブル１２１は、物理マシン名、ＣＰＵコア数、メモリ容量およびディスク容量の項目を含む。
【０１６７】
物理マシン名の項目には、物理マシンの名称が登録される。ＣＰＵコア数の項目には、当該物理マシンが備えるＣＰＵコアの数が登録される。メモリ容量の項目には、当該物理マシンが備えるメモリ（ＲＡＭ）の容量が登録される。ディスク容量の項目には、当該物理マシンが備えるＨＤＤ（あるいは、当該物理マシンに対して外部ストレージに割り当てられた補助記憶領域）の容量が登録される。
【０１６８】
例えば、物理マシン構成テーブル１２１には、物理マシン名が“ＰＭ０１”、ＣＰＵコア数が“６４”、メモリ容量が“２５６ＧＢ”、ディスク容量が“３２ＴＢ”というレコードが登録されている。このレコードは、物理マシン名“ＰＭ０１”で示される物理マシンが備えるＣＰＵコア数が６４個、メモリ容量が２５６ＧＢ、ディスク容量が３２ＴＢであることを示す。
【０１６９】
物理マシン構成テーブル１２１には、他の物理マシンに対しても同様に、物理マシン名とＣＰＵコア数とメモリ容量とディスク容量とが登録される。
図２４は、仮想マシン構成テーブルの例を示す図である。仮想マシン構成テーブル１２２は、インフラ構成情報記憶部１２０に予め格納されている。仮想マシン構成テーブル１２２は、仮想マシン名、ユーザＩＤ（IDentifier）、ＣＰＵコア数、メモリ容量、ディスク容量、およびＬＭ所要時間の項目を含む。
【０１７０】
仮想マシン名の項目には、仮想マシンの名称が登録される。ユーザＩＤの項目には、仮想マシンを使用するユーザの識別子が登録される。ＣＰＵコア数の項目には、当該仮想マシンに割り当てられるＣＰＵコア数が登録される。メモリ容量の項目には、当該仮想マシンに割り当てられるメモリの容量が登録される。ディスク容量の項目には、当該仮想マシンに割り当てられるＨＤＤ（あるいは、物理マシンの外部ストレージの補助記憶装置）の容量が登録される。ＬＭ所要時間の項目には、仮想マシンのＬＭに要する時間が登録される。ＬＭ所要時間の項目に設定される所要時間は、例えばＶＭ性能情報記憶部１３０に示されるＬＭの所要時間と同じである。またＶＭ性能情報記憶部１３０に、各仮想マシンの負荷の履歴が含まれている場合、負荷の履歴から予測したＬＭの所要時間が、ＬＭ所要時間の項目に設定されていてもよい。
【０１７１】
例えば、仮想マシン構成テーブル１２２には、仮想マシン名が“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−１３”、ユーザＩＤが“ｕｓｅｒ１”、ＣＰＵコア数が“２”、メモリ容量が“３２ＧＢ”、ディスク容量が“２ＴＢ”、ＬＭ所要時間が“１６分”というレコードが登録されている。このレコードは、仮想マシン名“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−１３”で示される仮想マシンをユーザＩＤ“ｕｓｅｒ１”のユーザが利用していることを示す。またこのレコードは、該当仮想マシンを稼働させるのに使用するＣＰＵコア数が２個、メモリ容量が３２ＧＢ、ディスク容量が２ＴＢであることを示す。さらにこのレコードは、該当仮想マシンのＬＭに要する時間が１６分であることを示す。
【０１７２】
仮想マシン構成テーブル１２２には、他の仮想マシンに対しても同様に、仮想マシン名とユーザＩＤとＣＰＵコア数とメモリ容量とディスク容量とＬＭ所要時間とが登録される。
【０１７３】
図２５は、仮想マシン稼働テーブルの例を示す図である。仮想マシン稼働テーブル１２３は、インフラ構成情報記憶部１２０に予め格納されている。仮想マシン稼働テーブル１２３は、各仮想マシンの初期配置先の物理マシンを示す情報である。仮想マシン稼働テーブル１２３は、物理マシン名、仮想マシン名およびユーザＩＤの項目を含む。
【０１７４】
物理マシン名の項目には、物理マシンの名称が登録される。仮想マシン名の項目には、当該物理マシン上で稼働する仮想マシンの名称が登録される。ユーザＩＤの項目には、当該仮想マシンを利用するユーザのユーザＩＤが登録される。
【０１７５】
例えば、仮想マシン稼働テーブル１２３には、物理マシン名が“ＰＭ０１”、仮想マシン名が“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−１３”、ユーザＩＤが“ｕｓｅｒ１”というレコードが登録されている。このレコードは、物理マシン名“ＰＭ０１”で示される物理マシン上で、仮想マシン名“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−１３”で示される仮想マシンが稼働しており、ユーザＩＤ“ｕｓｅｒ１”のユーザが当該仮想マシンを利用していることを示す。
【０１７６】
仮想マシン稼働テーブル１２３には、他の仮想マシンに対しても同様に、配置先の物理マシン名と仮想マシン名とユーザＩＤとが登録される。
図２６は、依存関係テーブルの例を示す図である。依存関係テーブル１２４は、インフラ構成情報記憶部１２０に予め格納されている。依存関係テーブル１２４は、仮想マシンのグループに対する依存関係を示す情報である。依存関係テーブル１２４は、グループ名、仮想マシン名およびルールの項目を含む。
【０１７７】
グループ名の項目には、仮想マシンのグループの名称が登録される。仮想マシン名の項目には、該当のグループに属する仮想マシンの名称の組が登録される。ルールの項目には、該当のグループに属する仮想マシンを同一の物理マシン上で稼働させるか否かを示す情報が登録される。例えば、ルール“ａｎｔｉ−ａｆｆｉｎｉｔｙ”は、同一の物理マシン上で稼働させないこと（ａｎｔｉ−ａｆｆｉｎｉｔｙルールと呼ぶ）を示す。
【０１７８】
例えば、依存関係テーブル１２４には、グループ名が“Ｇ０１”、仮想マシン名が“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−１３”および“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−０３”、ルールが“ａｎｔｉ−ａｆｆｉｎｉｔｙ”というレコードが登録されている。このレコードは、グループ名“Ｇ０１”で示されるグループに、仮想マシン名“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−１３”および“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−０３”の２つの仮想マシンが所属し、これら仮想マシンを同一物理マシン上で稼働させないことを示す。
【０１７９】
依存関係テーブル１２４には、仮想マシンの他のグループに対しても同様に、グループ名と仮想マシン名とルールとが登録される。
なお、ａｎｔｉ−ａｆｆｉｎｉｔｙルールは、例えばグラフ彩色問題の１つとして扱うことができる。すなわちグループ生成部１５０は、グラフ彩色問題の解法を用いて、ａｎｔｉ−ａｆｆｉｎｉｔｙルールを充足可能な最少の物理マシン数を算出できる。
【０１８０】
図２７は、ａｎｔｉ−ａｆｆｉｎｉｔｙルールのグラフ彩色問題への適用例を示す図である。ａｎｔｉ−ａｆｆｉｎｉｔｙグループをグラフ彩色問題として扱う場合、仮想マシンを、グラフ彩色問題における頂点とする。図２７の例では、グラフ６０の頂点に、仮想マシンの仮想マシン名（ｖ1，ｖ2，ｖ3，ｖ4）が割り当てられている。グラフ６０の辺は、ａｎｔｉ−ａｆｆｉｎｉｔｙルールが存在する仮想マシン間を接続している。このようなグラフ６０についてのグラフ彩色問題のヒューリスティックの例としては、Ｗｅｌｓｈ−Ｐｏｗｅｌｌアルゴリズムがある。ヒューリスティックとは、ある程度のレベルで正解に近い解を得ることができるアルゴリズムを指す。
【０１８１】
Ｗｅｌｓｈ−Ｐｏｗｅｌｌアルゴリズムを用いた場合、グループ生成部１５０は、次数（頂点に接続された辺の数）により、頂点を降順でソートして彩色する。このアルゴリズムによれば、最大色数は最悪でもグラフの最大次数＋１となる。
【０１８２】
図２７の例では、３色で彩色できている。なお図２７では、彩色の違いをハッチングの違いに置き換えている。同じ色の頂点に対応する仮想マシンを同じ物理マシンで稼働させることで、最低でも３台の物理マシン（ｐ1，ｐ2，ｐ3）があれば、ａｎｔｉ−ａｆｆｉｎｉｔｙルールを充足できることが分かる。
【０１８３】
次にＶＭ性能情報記憶部１３０に格納されるＶＭ性能情報について説明する。例えばＶＭ性能情報記憶部１３０には、ＶＭの性能をＬＭの所要時間で表すＬＭ所要時間テーブルが格納される。
【０１８４】
図２８は、ＬＭ所要時間テーブルの例を示す図である。ＬＭ所要時間テーブル１３１は、ＶＭ性能情報記憶部１３０に予め格納されている。ＬＭ所要時間テーブル１３１は、仮想マシン名およびＬＭ所要時間の項目を含む。
【０１８５】
仮想マシン名の項目には、仮想マシンの名称が登録される。ＬＭ所要時間の項目には、該当の時刻において該当の仮想マシンに対して予測されるＬＭの所要時間が登録される。
例えば、ＬＭ所要時間テーブル１３１には、仮想マシン名が“ｓｅｒｖｅｒ−９０”、ＬＭ所要時間が“００：０４：００．０００”というレコードが登録されている。このレコードは、仮想マシン名“ｓｅｒｖｅｒ−９０”の仮想マシンのＬＭを完了する場合の当該ＬＭの所要時間が４分であることを示す。
【０１８６】
また、ＬＭ所要時間テーブル１３１には、仮想マシン名が“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−０３”、ＬＭ所要時間が“００：０８：００．０００”というレコードが登録されている。このレコードは、仮想マシン名“ａｃｃｏｕｎｔｉｎｇ−ｄｂ−０３”の仮想マシンのＬＭを完了する場合の当該ＬＭの所要時間が８分であることを示す。
【０１８７】
ＬＭ所要時間テーブル１３１には、他の仮想マシンに対しても同様に、仮想マシン名とＬＭ所要時間とが登録される。
次に利用者により指定されるＬＭ実施回避日時を示すＬＭ実施回避日時情報について説明する。
【０１８８】
図２９は、ＬＭ実施回避日時情報の例を示す図である。ＬＭ実施回避日時情報Ｍ３は、利用者端末５００，６００により、スケジューラ１１２に入力される。ＬＭ実施回避日時情報Ｍ３は、仮想マシン名、開始日時および終了日時の項目を含む。
【０１８９】
仮想マシン名の項目には、仮想マシンの名称が登録される。開始日時の項目には、ＬＭの実施を回避する期間（ＬＭ実施回避期間）の開始日時が登録される。終了日時の項目には、ＬＭの実施回避期間の終了日時が登録される。例えば、ＬＭ実施回避日時情報Ｍ３は、仮想マシン名“ｍｙｓｑｌ−６７”、開始日時“２０１８−０６−２０Ｔ１１：５０：００．０００Ｚ”、終了日時“２０１８−０６−２０Ｔ１７：５９：００．０００Ｚ”という情報を含む。これは、仮想マシン名“ｍｙｓｑｌ−６７”の仮想マシンのＬＭ実施回避期間が２０１８年６月２０日１１時５０分から２０１８年６月２０日１７時５９分であることを示す。
【０１９０】
ＬＭ実施回避日時情報Ｍ３には、他の仮想マシンについても同様に、仮想マシン名と開始日時と終了日時とが含まれ得る。
図３０は、時刻グループ情報の例を示す図である。時刻グループ情報Ｍ４は、部分問題生成部１６０により生成される。部分問題生成部１６０は、生成した時刻グループ情報Ｍ４を部分問題求解部１７０に送信する。部分問題求解部１７０は、受信した時刻グループ情報Ｍ４をメモリに格納し、時刻グループ情報Ｍ４に基づいて部分問題を求解する。時刻グループ情報Ｍ４は、グループ番号、開始時刻、および終了時刻の項目を含む。
【０１９１】
グループ番号の項目には、時刻グループの識別番号が登録される。開始時刻の項目には、該当する時刻グループに対応する時間帯の開始時刻が登録される。終了時刻の項目には、該当する時刻グループに対応する時間帯の終了時刻が登録される。例えば、時刻グループ情報Ｍ４には、グループ番号“０”、開始時刻“２０１８−０６−１６Ｔ００：００：００．０００Ｚ”、終了時刻“２０１８−０６−１６Ｔ２３：５９：００．０００Ｚ”という情報を含む。これはグループ番号“０”の時刻グループには、２０１８年６月１６日００時００分から２０１８年６月１６日２３時５９分までの、離散化により生成された時刻が含まれることを示す。
【０１９２】
時刻グループ情報Ｍ４には、他の時刻グループについても同様に、グループ番号と開始時刻と終了時刻とが含まれ得る。
図３１は、物理マシングループ情報の例を示す図である。物理マシングループ情報Ｍ５は、部分問題生成部１６０により生成される。部分問題生成部１６０は、生成した物理マシングループ情報Ｍ５を部分問題求解部１７０に送信する。部分問題求解部１７０は、受信した物理マシングループ情報Ｍ５をメモリに格納し、物理マシングループ情報Ｍ５に基づいて部分問題を求解する。物理マシングループ情報Ｍ５は、グループ番号、物理マシンの項目を含む。
【０１９３】
グループ番号の項目には、物理マシングループの識別番号が登録される。物理マシンの項目には、該当する物理マシングループに属する物理マシンの物理マシン名が登録される。例えば、物理マシングループ情報Ｍ５には、グループ番号“１０”、物理マシン“ＰＭ０１，ＰＭ０３，ＰＭ０４，ＰＭ０５，・・・”という情報を含む。これはグループ番号“１０”の物理マシングループには、物理マシン名“ＰＭ０１，ＰＭ０３，ＰＭ０４，ＰＭ０５，・・・”に対応する物理マシンが含まれることを示す。
【０１９４】
物理マシングループ情報Ｍ５には、他の物理マシングループについても同様に、グループ番号と物理マシンとが含まれ得る。
図３２は、メンテナンススケジュールテーブルの例を示す図である。メンテナンススケジュールテーブル１９１は、スケジュール生成部１８０により生成され、イベント情報記憶部１９０に格納される。メンテナンススケジュールテーブル１９１は、物理マシン名、開始日時および終了日時の項目を含む。
【０１９５】
物理マシン名の項目には、メンテナンス対象の物理マシンの名称が登録される。開始日時の項目には、当該物理マシンのメンテナンスの開始日時が登録される。終了日時の項目には、当該物理マシンのメンテナンスの終了日時が登録される。
【０１９６】
例えば、メンテナンススケジュールテーブル１９１には、物理マシン名が“ＰＭ０１”、開始日時が“２０１８−０６−１９Ｔ１２：００：００．０００Ｚ”、終了日時が“２０１８−０６−１９Ｔ１３：５９：００．０００Ｚ”というレコードが登録されている。このレコードは、物理マシン名“ＰＭ０１”の物理マシンのメンテナンスを２０１８年６月１９日１２時００分〜２０１８年６月１９日１３時５９分まで行う予定であることを示す。
【０１９７】
メンテナンススケジュールテーブル１９１には、メンテナンス対象の他の物理マシンに対しても同様に、物理マシン名と開始日時と終了日時とが登録される。
図３３は、ＬＭスケジュールテーブルの例を示す図である。ＬＭスケジュールテーブル１９２は、スケジュール生成部１８０により生成され、イベント情報記憶部１９０に格納される。ＬＭスケジュールテーブル１９２は、仮想マシン名、開始日時、終了日時、移動元、および移動先の項目を含む。
【０１９８】
仮想マシン名の項目には、ＬＭ対象の仮想マシンの名称が登録される。開始日時の項目には、該当の仮想マシンのＬＭの開始日時が登録される。終了日時の項目には、該当の仮想マシンのＬＭの終了日時が登録される。移動元の項目には、ＬＭの移動元の物理マシンの名称（物理マシン名）が登録される。移動先の項目には、ＬＭの移動先の物理マシンの名称（物理マシン名）が登録される。
【０１９９】
例えば、ＬＭスケジュールテーブル１９２には、仮想マシン名が“ｓｅｒｖｅｒ−９０”、開始日時が“２０１８−０６−２０Ｔ１１：０６：００．０００Ｚ”、終了日時が“２０１８−０６−２０Ｔ１１：０９：００．０００Ｚ”、移動元が“ＰＭ０２”、移動先が“ＰＭ０１”というレコードが登録されている。このレコードは、仮想マシン名“ｓｅｒｖｅｒ−９０”の仮想マシンのＬＭを２０１８年６月２０日１１時６分に開始し、２０１８年６月２０日１１時９分に終了することを示す。また、当該ＬＭの移動元が物理マシン名“ＰＭ０２”の物理マシンであり、移動先が物理マシン“ＰＭ０１”の物理マシンであることを示す。
【０２００】
ＬＭスケジュールテーブル１９２には、他の仮想マシンに対しても、仮想マシン名と開始日時と終了日時と移動元と移動先とが登録される。
なお、ＬＭスケジュールテーブル１９２のうち、仮想マシン名、開始日時および終了日時の項目の内容が利用者に提示される内容である。また、ＬＭスケジュールテーブル１９２のうち、仮想マシン名、開始日時、終了日時、移動元および移動先の項目が運用者に提示される内容である。
【０２０１】
次に、管理サーバ１００による処理手順を説明する。
図３４は、管理サーバの処理例を示すフローチャートである。以下、図３４に示す処理をステップ番号に沿って説明する。
【０２０２】
（Ｓ１）スケジューラ１１２は、全利用者それぞれが使用する利用者端末５００，６００から、ＶＭ実施回避日時を示すメッセージを受信する。このメッセージは、ＬＭ実施回避日時情報Ｍ３を含む。
【０２０３】
（Ｓ２）スケジューラ１１２は、運用者が使用する運用者端末７００から、日程調整実施を示すメッセージを受信する。このメッセージは、メンテナンス実施期間情報Ｍ１、メンテナンス対象マシン情報Ｍ２を含む。
【０２０４】
（Ｓ３）スケジューラ１１２は、メンテナンスの日程調整の処理を実行する。日程調整の処理の詳細は後述される。スケジューラ１１２は、日程調整の結果、各物理マシンのメンテナンススケジュールテーブル１９１および各仮想マシンのＬＭスケジュールテーブル１９２を作成する。
【０２０５】
（Ｓ４）スケジューラ１１２は、メンテナンスのスケジュールを利用者と運用者とに提示する。具体的には、スケジューラ１１２は、メンテナンススケジュールテーブル１９１およびＬＭスケジュールテーブル１９２に基づいて、利用者が利用する仮想マシンのＬＭの実施日時を示す画面情報を、利用者ごとに作成する。そしてスケジューラ１１２は、該当の利用者の利用者端末に、作成した画面情報を送信する。なお、スケジューラ１１２は、仮想マシン構成テーブル１２２や仮想マシン稼働テーブル１２３のユーザＩＤの項目により、各仮想マシンを利用する利用者を識別することができる。
【０２０６】
またスケジューラ１１２は、メンテナンススケジュールテーブル１９１およびＬＭスケジュールテーブル１９２に基づいて、各仮想マシンのＬＭおよび物理マシンのメンテナンス作業のスケジュールを示す画面情報を作成する。スケジューラ１１２は、作成した画面情報を運用者端末７００に送信する。
【０２０７】
（Ｓ５）スケジューラ１１２は、作成したメンテナンス日程をインフラ管理部１１１に登録する。具体的には、スケジューラ１１２は、ＬＭスケジュールテーブル１９２で示されるスケジュールで各仮想マシンのＬＭを行うようにインフラ管理部１１１を設定する。
【０２０８】
インフラ管理部１１１は、当該スケジュールに応じて、各仮想マシンのＬＭを物理マシン２００，３００，４００，・・・に指示する。すなわち、管理サーバ１００は、作成されたＬＭスケジュールテーブル１９２（スケジュール情報）に基づいて、該当の仮想マシンのＬＭ（移動）をメンテナンス対象の物理マシンに指示する。これにより、運用者による物理マシンのメンテナンス作業を効率化できる。
【０２０９】
図３５は、日程調整例を示すフローチャートである。以下、図３５に示す処理をステップ番号に沿って説明する。以下に示す手順は、図３４のステップＳ３に相当する。
（Ｓ１１）グループ生成部１５０は、物理マシン集合と時刻集合とのそれぞれのグループ化を行い、時刻グループ情報Ｍ４と物理マシングループ情報Ｍ５とを生成する。グループ生成処理の詳細は後述される。グループ生成部１５０は、生成した時刻グループ情報Ｍ４と物理マシングループ情報Ｍ５とを出力する。
【０２１０】
（Ｓ１２）部分問題生成部１６０は、時刻グループ情報Ｍ４と物理マシングループ情報Ｍ５に基づいて、メンテナンスのスケジューリング問題を分割し、複数の部分問題を生成する。部分問題生成処理の詳細は後述される。部分問題生成部１６０は、生成した複数の部分問題を出力する。
【０２１１】
（Ｓ１３）部分問題求解部１７０は、生成された部分問題それぞれについて、メンテナンスのスケジュールを求解する。部分問題求解処理の詳細は後述される。部分問題求解部１７０は、部分問題ごとの求解結果を出力する。
【０２１２】
（Ｓ１４）スケジュール生成部１８０は、部分問題ごとの求解結果に基づいて、システム全体のメンテナンスのスケジュールを生成する。スケジュール生成処理の詳細は後述される。生成されたスケジュールには、メンテナンススケジュールテーブル１９１とＬＭスケジュールテーブル１９２とが含まれる。
【０２１３】
（Ｓ１５）スケジュール生成部１８０は、生成したスケジュールをイベント情報記憶部１９０に格納する。
図３６は、グループ生成例を示すフローチャートの前半である。以下、図３６に示す処理をステップ番号に沿って説明する。以下に示す手順は、図３５のステップＳ１１に相当する。
【０２１４】
（Ｓ２１）グループ生成部１５０は、所定の間隔（例えば１分間隔）でメンテナンス実施期間を離散化することで得られた時刻集合（例えば１分ごとの時刻）を、時刻グループに分割する。例えばグループ生成部１５０は、メンテナンス実施期間情報Ｍ１に示されるメンテナンスの開始日時から終了日時までの期間を、時刻グループの分割単位で示される長さの期間に分割する。そしてグループ生成部１５０は、分割により生成された時間ごとの時刻グループを生成する。グループ生成部１５０は、生成した各時刻グループに、その時刻グループに対応する期間内の、離散化によって生成された時刻を含める。
【０２１５】
（Ｓ２２）グループ生成部１５０は、インフラ構成情報に基づいて、空き物理マシンを有する物理マシングループ（Ｐe）を生成する。例えばグループ生成部１５０は、仮想マシン稼働テーブル１２３に基づいて、仮想マシンが稼働していない空き物理マシンを特定する。そしてグループ生成部１５０は、空き物理マシンから所定数の物理マシンを選択し、選択した物理マシンを有する物理マシングループ（Ｐe）を生成する。
【０２１６】
（Ｓ２３）グループ生成部１５０は、残りの物理マシングループの分割数を示す変数ｍに、分割数の理論下限値ｍ0を設定する。なおグループ生成部１５０は、分割数の理論下限値ｍ0を、空き物理マシンを有する物理マシングループ（Ｐe）が既に生成されていることを考慮して、以下の式によって計算する。
【０２１７】
【数５】
2020071779.tif 000007
【０２１８】
すなわち、グループ生成部１５０は、式（４）に示す全体の物理マシンの集合Ｐを、生成済みの物理マシングループ（Ｐe）に含まれていない物理マシンの集合に置き換えて、式（４）と同様の計算を行う。
【０２１９】
（Ｓ２４）グループ生成部１５０は、物理マシングループ（Ｐe）に含まれない物理マシンの識別子をソートする。そしてグループ生成部１５０は、ソートした物理マシンの識別子の配列を、リストＰcに登録する。ソートの優先順位は、例えば（第１の基準）ＬＭの実施を回避すべき時間の長さ（降順）、（第２の基準）リソース量（ＣＰＵコア数、メモリ量など）（降順）の順である。
【０２２０】
（Ｓ２５）グループ生成部１５０は、物理マシングループの初期化処理を行う。具体的にはグループ生成部１５０は、新たに生成するｍ個の物理マシングループそれぞれに、０からｍ−１までの番号を付与する。そしてグループ生成部１５０は、変数ｉをステップＳ２６の処理を実行するごとに０から１ずつインクリメントしていき、ｉの値がｍ以上になったとき、物理マシングループの初期化処理を終了する。
【０２２１】
（Ｓ２６）グループ生成部１５０は、ｉ番目の物理マシングループＧP［ｉ］を空集合にする。
（Ｓ２７）グループ生成部１５０は、ステップＳ２６の処理をｍ回繰り返し実行し、新たに生成するｍ個の物理マシングループすべての初期化が終了すると、処理をステップＳ３１（図３７参照）に進める。
【０２２２】
なおステップＳ２５〜Ｓ２７で生成された物理マシングループは仮の物理マシングループである。作成した仮の物理マシングループへすべての物理マシンを割り当てることに失敗した場合は、数を増やして仮の物理マシングループが再作成される。作成した仮の物理マシングループへすべての物理マシンを割り当てることができた場合、その仮の物理マシングループが最終的な物理マシングループとなる。
【０２２３】
図３７は、グループ生成例を示すフローチャートの後半である。以下、図３７に示す処理をステップ番号に沿って説明する。
（Ｓ３１）グループ生成部１５０は、物理マシンのグループ化処理を行う。具体的には、グループ生成部１５０は、ステップＳ３２〜Ｓ３６の処理を、リストＰc内に物理マシンの識別子がなくなるか、ステップＳ３４でＮＯと判定されるまで繰り返す。
【０２２４】
（Ｓ３２）グループ生成部１５０は、リストＰc内の先頭の物理マシンの識別子を、ｐcに設定する（ｐc←ｃａｒ（Ｐc））。グループ生成部１５０は、リストＰc内の先頭以外の物理マシンの識別子を、新たにリストＰcの要素とする（Ｐc←ｃｄｒ（Ｐc））。これによりリストＰcから先頭の要素が除外される。
【０２２５】
（Ｓ３３）グループ生成部１５０は、ｐcに設定した識別子に対応する物理マシンの物理マシングループへの割り当てを行う（ｇ＝ｐｍ＿ｇｒｐ（ｐc，Ｇp））。物理マシンの割り当て処理の詳細は後述される。割り当て処理により割り当て先となった物理マシングループの番号が、変数ｇに設定される。
【０２２６】
（Ｓ３４）グループ生成部１５０は、変数ｇに値が設定されているか否かを判断する。グループ生成部１５０は、変数ｇに値が設定されている（ｇ≠ＮＵＬＬ）場合、処理をステップＳ３５に進める。またグループ生成部１５０は、変数ｇに値が設定されていない（ｇ＝ＮＵＬＬ）場合、処理をステップＳ３７に進める。
【０２２７】
（Ｓ３５）グループ生成部１５０は、割り当て先の物理マシングループＧp［ｇ］に、割り当て対象の物理マシンの識別子ｐcを追加する（Ｇp［ｇ］←Ｇp［ｇ］∪ｐc）。
（Ｓ３６）グループ生成部１５０は、リストＰc内に物理マシンの識別子がなくなった場合、物理マシングループを出力する。空き物理マシンの物理マシングループ（Ｐe）に含まれないすべての物理マシンについて、割り当て先の物理マシングループが決定できた場合に、ステップＳ３６においてリストＰc内に物理マシンの識別子がなくなったと判定される。その後、グループ生成部１５０は、グループ生成処理を終了する。
【０２２８】
（Ｓ３７）グループ生成部１５０は、変数ｇに値が設定されていない場合、変数ｍの値が時刻集合の分割数ｎ−１より小さいか否かを判断する。グループ生成部１５０は、変数ｍの値が時刻集合の分割数ｎ−１より小さい場合、処理をステップＳ３８に進める。またグループ生成部１５０は、変数ｍの値が時刻集合の分割数ｎ−１以上の場合、処理をステップＳ３９に進める。
【０２２９】
（Ｓ３８）グループ生成部１５０は、変数ｍの値を１だけインクリメントし、処理をステップＳ２４（図３６参照）に進める。
（Ｓ３９）グループ生成部１５０は、グループ化失敗メッセージを出力し、グループ化処理を終了する。この場合、図３５のステップＳ１２〜Ｓ１５の処理を行うことなく、日程調整処理がエラー終了する。
【０２３０】
図３８は、物理マシンの割り当て例を示すフローチャートの前半である。以下、図３８に示す処理をステップ番号に沿って説明する。
（Ｓ４１）グループ生成部１５０は、変数ｉに初期値「０」を設定する。
【０２３１】
（Ｓ４２）グループ生成部１５０は、ｉ番目の物理マシングループＧp［ｉ］に含まれている物理マシンの識別子と、割り当て対象の物理マシンの識別子ｐcとを、物理マシンの集合Ｐtの要素として登録する（Ｐt←Ｇp［ｉ］∪ｐc）。
【０２３２】
（Ｓ４３）グループ生成部１５０は、ｐcの識別子で示される物理マシン内に、ａｎｔｉ−ａｆｆｉｎｉｔｙルールが適用される仮想マシン（ＶＭ）が存在するか否かを判断する。例えばグループ生成部１５０は、依存関係テーブル１２４から、ａｎｔｉ−ａｆｆｉｎｉｔｙルールが適用される仮想マシンの仮想マシン名を取得する。そしてグループ生成部１５０は、仮想マシン稼働テーブル１２３を参照し、割り当て対象の物理マシン上で稼働している仮想マシンの仮想マシン名として、取得した仮想マシン名の少なくとも１つが登録されているか否かを判断する。グループ生成部１５０は、取得した仮想マシン名が登録されている場合、ａｎｔｉ−ａｆｆｉｎｉｔｙルールが適用される仮想マシンが存在すると判断する。グループ生成部１５０は、該当する仮想マシンが存在する場合、処理をステップＳ４４に進める。またグループ生成部１５０は、該当する仮想マシンが存在しない場合、処理をステップＳ４６に進める。
【０２３３】
（Ｓ４４）グループ生成部１５０は、集合Ｐt内の仮想マシンについて、ａｎｔｉ−ａｆｆｉｎｉｔｙを辺とするグラフ彩色問題を生成し、生成したグラフ彩色問題を求解する。求解することで、グラフ彩色問題の彩色数ｋが得られる。すなわち、ａｎｔｉ−ａｆｆｉｎｉｔｙルールを満たすための最小限の物理マシン数ｋ（ｋは２以上の整数）が得られる。
【０２３４】
（Ｓ４５）グループ生成部１５０は、グラフ彩色問題を求解することで得られた物理マシン数ｋが、空き物理マシンの物理マシングループ内の物理マシン数（｜Ｐe｜）以下か否かを判断する。グループ生成部１５０は、ｋが｜Ｐe｜以下であれば処理をステップＳ４６に進める。またグループ生成部１５０は、ｋが｜Ｐe｜より大きければ処理をステップＳ５７（図３９参照）に進める。
【０２３５】
（Ｓ４６）グループ生成部１５０は、ｐcの識別子で示される物理マシン内にＬＭ回避時間帯を含む仮想マシンが存在するか否かを判断する。グループ生成部１５０は、該当する仮想マシンが存在する場合、処理をステップＳ５１（図３９参照）に進める。またグループ生成部１５０は、該当する仮想マシンが存在しない場合、処理をステップＳ５５に進める（図３９参照）。
【０２３６】
図３９は、物理マシンの割り当て例を示すフローチャートの後半である。以下、図３９に示す処理をステップ番号に沿って説明する。
（Ｓ５１）グループ生成部１５０は、ＬＭ可能な時刻グループの確認処理を行う。具体的には、グループ生成部１５０は、ステップＳ５２の処理を、時刻グループの集合Ｇτに含まれるすべての時刻グループτについて実行する。
【０２３７】
（Ｓ５２）グループ生成部１５０は、物理マシンの集合Ｐtを１つの物理マシングループとしたときに、時刻グループτで制約を充足するＬＭができるか否かを確認する。この処理は、解集合プログラミングを用いて実装することができる。
【０２３８】
解集合プログラミングは、以下の文献が参考になる。
（文献３）G. Brewka, T. Eiter, and M. Truszczynski, “Answer set programming at a glance,” Communications of the ACM, vol. 54, no. 12, pp. 92-103, 2011.
解集合プログラミングによるＬＭができるか否かの確認処理の記述例は以下の通りである。
% 定数
%% 同時並列にＬＭできる仮想マシン数の上限
#const max_lm = 5.
% ファクト（定義）
%% 時刻：ts(T).
ts(0). ts(1). ts(2). %...
%% 仮想マシン：vm(V).
vm(0). vm(1). vm(2). %...
%% 仮想マシンVの初期配備先は物理マシンPs：init_accommo(V,Ps).
init_accommo(0,0). init_accommo(1,0). init_accommo(2,1). %...
%% 仮想マシンVのＬＭ所要時間はD：lm_duration(V,D).
lm_duration(0,1). lm_duration(1,4). lm_duration(2,2). %...
%% 時刻Tでの仮想マシンVのＬＭを回避：lm_unavail(V,T).
lm_unavail(0,100). lm_unavail(0,101). lm_unavail(0,102). %...
% スケジューリング対象のアトム
%% 物理マシンPs上の仮想マシンVは時刻TにＬＭを開始：lm(V,T,Ps).
1 { lm(V,T,Ps) : ts(T) } 1 :- init_accommo(V,Ps).
% 一時的なアトム
%% 仮想マシンVは時刻TでＬＭ中：l(V,T).
l(V,T) :- ts(T), lm(V,Ts,Ps,Pd), lm_duration(V,D), Ts <= T, T <= Ts+D-1.
%%ＬＭ移動元となる物理マシン：pm_src(Ps).
pm_src(Ps) :- init_accommo(V,Ps).
% ハード制約
%% 物理マシンPs内での並列ＬＭを禁止
:- ts(T), pm_src(Ps), not #count { V : l(V,T), init_accommo(V,Ps) } <= 1.
%% ＬＭの同時実行数を制限
:- ts(T), not #count { V : l(V,T) } <= max_lm.
%% 定義された時間内でＬＭを実施
:- lm(V,T,Ps,Pd), lm_duration(V,D), not ts(T..T+D-1).
%% 利用者が指定した時間帯でのＬＭを回避
:- l(V,T), lm_unavail(V,T).
以上が解集合プログラミングによるＬＭができるか否かの確認処理の記述である。
【０２３９】
このような解集合プログラミング技術を用いて、制約を充足するＬＭが可能か否かの判断処理を実行することができる。
（Ｓ５３）グループ生成部１５０は、時刻グループτについてステップＳ５２の処理が終了した場合、処理をステップＳ５４に進める。
【０２４０】
（Ｓ５４）グループ生成部１５０は、ＬＭ可能な時刻グループτが１以上存在するか否かを判断する。グループ生成部１５０は、ＬＭ可能な時刻グループτが存在する場合、処理をステップＳ５５に進める。またグループ生成部１５０は、ＬＭ可能な時刻グループτが存在しない場合、処理をステップＳ５７に進める。
【０２４１】
（Ｓ５５）グループ生成部１５０は、物理マシンの集合Ｐtが、ｉ番目の物理マシングループＧp［ｉ］の容量を満たすか否かを判断する。容量の判断対象の要素には、ＬＭ作業可能時間、メンテナンス作業可能時間、および各種リソース（ＣＰＵコア数、メモリなど）がある。例えばいずれの物理マシングループも同じ容量を有しているものとする。例えばグループ生成部１５０は、仮想マシン構成テーブル１２２を参照し、集合Ｐtに含まれる物理マシン上で稼働しているすべての仮想マシンのＬＭ所要時間の合計が、ＬＭ作業可能時間の容量以下であれば、ＬＭ作業可能時間に関する容量を満たすと判断する。またグループ生成部１５０は、メンテナンス対象マシン情報Ｍ２を参照し、集合Ｐtに含まれる物理マシンのメンテナンス所要時間の合計が、メンテナンス作業可能時間の容量以下であれば、メンテナンス作業可能時間に関する容量を満たすと判断する。さらに例えばグループ生成部１５０は、物理マシン構成テーブル１２１を参照し、集合Ｐtに含まれる物理マシンのリソースの種別ごとのリソース量の合計が、該当種別のリソースの容量以下であれば、リソースに関する容量を満たすと判断する。
【０２４２】
グループ生成部１５０は、判断対象の要素すべてについて、容量が満たされる場合、処理をステップＳ５６に進める。またグループ生成部１５０は、少なくとも１つの要素に関して容量が満たされない場合、処理をステップＳ５７に進める。
【０２４３】
（Ｓ５６）グループ生成部１５０は、割り当て対象の物理マシンｐcをｉ番目の物理マシングループＧp［ｉ］に割り当て可能であると判断し、変数ｉの値を変数ｇに設定する。その後、グループ生成部１５０は、物理マシンの割り当て処理を終了する。
【０２４４】
（Ｓ５７）グループ生成部１５０は、割り当てた対象の物理マシンｐcをｉ番目の物理マシングループＧp［ｉ］に割り当て不可能であると判断し、変数ｉの値が、物理マシングループ番号ｍ−１より小さいか否かを判断する。グループ生成部１５０は「ｉ＜ｍ−１」であれば、処理をステップＳ５８に進める。またグループ生成部１５０は「ｉ＜ｍ−１」でなければ「ｇ＝ＮＵＬＬ」として、物理マシン割り当て処理を終了する。
【０２４５】
（Ｓ５８）グループ生成部１５０は、変数ｉの値を１だけインクリメントして、処理をステップＳ４２（図３８参照）に進める。
図３６〜図３９に示したグループ化処理より、時刻グループと物理マシングループとが生成される。その後、部分問題生成部１６０により、部分問題生成処理が実行される。
【０２４６】
部分問題生成処理では、物理マシングループごとに、その物理マシングループの求解を行う時刻グループが１つずつ割り当てられる。
なお、図３８〜図３９に示した物理マシンの割り当て処理では、グループ生成部１５０は、物理マシングループを物理マシングループ番号に基づいて昇順に選択している。そしてグループ生成部１５０は、物理マシンを割り当て可能であると最初に判断した物理マシングループに物理マシンを割り当てている。すなわちグループ生成部１５０は、最初に制約条件を満たした物理マシングループに、割り当て対象の物理マシンを割り当てている。これは、ＦＦＤ（First-Fit Decreasing）と呼ばれる手法であるが、物理マシンの割り当て先の決定方法はＦＦＤに限定されない。
【０２４７】
物理マシンの割り当て先の決定方法は、ＦＦＤ以外にも例えばＢＦＤ（Best-Fit Decreasing）と呼ばれる手法がある。ＢＦＤを採用する場合、グループ生成部１５０は、制約条件を充足可能な物理マシングループの中で所定の基準値が最良となる物理マシングループを、割り当て対象の物理マシンの割り当て先に決定する。所定の基準値としては、例えばメモリなどのリソースの空き容量を示す値である。この場合、グループ生成部１５０は、リソースの空き容量が最小の物理マシングループに、割り当て対象の物理マシンを割り当てる。
【０２４８】
図４０は、生成する部分問題を説明する図である。図４０の例では、４つの物理マシングループｇ0〜ｇ3と５つの時刻グループτ0〜τ4とが生成されている。この場合、物理マシングループと時刻グループとの組み合わせは２０通り存在する。グループ生成部１５０は、ステップＳ５２において、これらの組み合わせについて、制約を充足するＬＭが可能か否かを確認している。グループ生成部１５０は、制約を充足するＬＭが不可能な物理マシングループと時刻グループとの組み合わせについては、ＵＮＳＡＴとする。
【０２４９】
部分問題生成部１６０は、まず空き物理マシンのみの物理マシングループｇ0に対して、対応する時間帯が最も早い時刻グループτ0を割り当てる。次に部分問題生成部１６０は、１つの時刻グループは１つの物理マシングループに割り当て可能という条件で、物理マシングループｇ1〜ｇ3に対して、できるだけ早い時間帯の時刻グループを割り当てる。ただし部分問題生成部１６０は、ＵＮＳＡＴとされている組み合わせとなるような割り当ては行わない。図４０の例では、物理マシングループｇ1に時刻グループτ2が割り当てられ、物理マシングループｇ2に時刻グループτ3が割り当てられ、物理マシングループｇ3に時刻グループτ1が割り当てられたものとする。部分問題生成部１６０は、割り当てられた物理マシングループと時刻グループとの組み合わせそれぞれについて、求解する部分問題を生成する。
【０２５０】
図４１は、部分問題生成例を示すフローチャートである。以下、図４１に示す処理をステップ番号に沿って説明する。以下に示す手順は、図３５のステップＳ１２に相当する。
（Ｓ６１）部分問題生成部１６０は、時刻グループと物理マシングループとに基づいて、空き物理マシンのみを含む物理マシングループＰeに、時刻グループを割り当てる。
【０２５１】
（Ｓ６２）部分問題生成部１６０は、空き物理マシンのみを含む物理マシングループＰe以外の物理マシングループに、複数の時刻グループそれぞれを割り当てる。
なお、ステップＳ６１，Ｓ６２に示す時刻グループの割り当ては、解集合プログラミング技術を用いて実装することができる。解集合プログラミングによる時刻グループの割り当て処理の記述例は以下の通りである。
% ファクト（定義）
%% 物理マシングループ：pm_group(G).
pm_group(0). pm_group(1). pm_group(2). %...
%% 時刻グループ：day(D).
day(1). day(2). day(3). %...
%% 物理マシングループ G は時刻グループDでＬＭ可能：sat(G,D).
sat(1,1). sat(2,1). sat(2,2). %...
% スケジューリング対象のアトム
%% 物理マシングループ G は時刻グループDでＬＭ（メンテナンス）を実施：ans(G,D).
1 { ans(G,D) : sat(G,D) } 1 :- pm_group(G).
% ハード制約
%% 各時刻グループに割り当てる物理マシングループは最大１台
:- day(D), not #count { G : ans(G,D) } <= 1.
% 目的関数
%% メンテナンスを実施する日程を最小化
:~ Sd = #sum { D : ans(G,D) }. [Sd]
以上が解集合プログラミングによる時刻グループの割り当て処理の記述である。
【０２５２】
（Ｓ６３）部分問題生成部１６０は、複数の物理マシングループそれぞれについて、割り当てた時刻グループをスケジュール期間とした、メンテナンスのスケジューリングに関する部分問題を生成する。その後、部分問題生成部１６０は、部分問題生成処理を終了する。
【０２５３】
生成された部分問題は、部分問題求解部１７０によって求解される。
図４２は、部分問題求解例を示すフローチャートである。以下、図４２に示す処理をステップ番号に沿って説明する。以下に示す手順は、図３５のステップＳ１３に相当する。
【０２５４】
（Ｓ７１）部分問題求解部１７０は、生成された部分問題ごとにその部分問題を求解する。具体的には、部分問題求解部１７０は、ステップＳ７２の処理を部分問題ごとに実行する。
【０２５５】
（Ｓ７２）部分問題求解部１７０は、制約充足判定ソルバを用いて部分問題を求解する。部分問題の求解は、解集合プログラミング技術を用いて実装することができる。解集合プログラミングによる部分問題求解処理の記述例は以下の通りである。
% 定数
%% 物理マシンのメンテナンスに要する時間
#const maint_duration = 15.
%% 同時並列にＬＭできる仮想マシン数の上限
#const max_lm = 5.
%% 同時並列にメンテナンスを実施できる物理マシン数の上限
#const max_maint = 5.
%% 物理マシン内で最初と最後に実施されるＬＭの最大許容時間差
# const max_td = 120.
% ファクト（定義）
%% 時刻：ts(T).
ts(0). ts(1). ts(2). %...
%% 仮想マシン：vm(V).
vm(0). vm(1). vm(2). %...
%% メンテナンス対象の物理マシン：pm(P).
pm(0). pm(1). pm(2). %...
%% ＬＭ移動先の候補となる物理マシン：tmp_pm(P).
tmp_pm(100). tmp_pm(101). tmp_pm(102). %...
%% 仮想マシンＶの初期配備先は物理マシンＰｓ：init_accommo(V,Ps).
init_accommo(0,0). init_accommo(1,0). init_accommo(2,1). %...
%% 仮想マシンＶのＬＭ所要時間はＤ：lm_duration(V,D).
lm_duration(0,1). lm_duration(1,4). lm_duration(2,2). %...
%% 仮想マシンのリソース（ＣＰＵコア数，メモリ量）：vm_cpu(V,Cv). vm_mem(V,Cm).
vm_cpu(0,2). vm_cpu(1,1). vm_cpu(2,4). %...
vm_mem(0,4096). vm_mem(1,16384). vm_mem(2,8192). %...
%% 物理マシンのリソース（ＣＰＵコア数，メモリ量）：pm_cpu(P,Cp). pm_mem(P,Mp).
pm_cpu(0,56). pm_cpu(1,56). pm_cpu(2,56). %...
pm_mem(0,256000). pm_mem(1,256000). pm_mem(2,256000). %...
%% 時刻Ｔでの仮想マシンＶのＬＭを回避：lm_unavail(V,T).
lm_unavail(0,100). lm_unavail(0,101). lm_unavail(0,102). %...
%% 時刻Ｔでの物理マシンＰのメンテナンスを回避：m_unavail(P,T).
m_unavail(1,300). m_unavail(1,301). m_unavail(1,302). %...
%% anti-affinity グループ：aa_rule(G).
aa_rule(0). aa_rule(1). aa_rule(2). %...
%% 仮想マシンＶは anti-affinity グループＧに所属：aa_group(G,V).
aa_group(0,10). aa_group(0,11). aa_group(0,20). %...
% スケジューリング対象のアトム
%% 仮想マシンＶは時刻ＴにＬＭを開始（物理マシンＰｓからＰｄへ移動）：lm(V,T,Ps,Pd).
1 { lm(V,T,Ps,Pd) : ts(T), pm(Pd), Ps!=Pd } 1 :- init_accommo(V,Ps).
%% 物理マシンＰのメンテナンスを時刻Ｔに開始：maint(P,T).
1 { maint(P,T) : ts(T) } 1 :- pm(P), not tmp_pm(P).
% 一時的なアトム
%% 仮想マシンＶは時刻ＴでＬＭ中：l(V,T).
l(V,T) :- ts(T), lm(V,Ts,Ps,Pd), lm_duration(V,D), Ts <= T, T <= Ts+D-1.
%% 物理マシンＰは時刻Ｔでメンテナンス中：m(P,T).
m(P,T) :- ts(T), maint(P,Tm), Tm <= T, T <= Tm+maint_duration-1.
%% ＬＭ移動元（先）となる物理マシン：pm_src(Ps). pm_dst(Pd).
pm_src(Ps) :- init_accommo(V,Ps).
pm_dst(Pd) :- lm(V,T,Ps,Pd).
%% ＬＭ実施前（後）の空き物理マシン：empty_src(P). empty_dst(P).
empty_src(P) :- pm(P), #count { V : lm(V,T,P,Pd) } == 0.
empty_dst(P) :- pm(P), #count { V : lm(V,T,Ps,P) } == 0.
:- Ps = #count { P : empty_src(P) }, not #count { P : empty_dst(P) } >= Ps.
% ハード制約
%% 物理マシンＰｓ内での並列ＬＭを禁止
:- ts(T), pm_src(Ps), not #count { V : l(V,T), init_accommo(V,Ps) } <= 1.
%% 物理マシンＰｓからの全ＬＭが終わった後にＰｓのメンテナンスを実施
:- pm_src(Ps), maint(Ps,Tm), Ts = #max { T+D-1 : lm(V,T,Ps,Pd), lm_duration(V,D) }, not Ts < Tm.
%% 物理マシンＰｄへのＬＭはＰｄのメンテナンスが終わった後
:- pm_dst(Pd), maint(Pd,Tm), Td = #min { T : lm(V,T,Ps,Pd) }, not Tm+maint_duration-1 < Td.
%% ΣＶ∈Ｐｄ仮想マシンＶのリソース量≦物理マシンＰｄのリソース量
:- pm_dst(Pd), pm_cpu(Pd,Cp), not #sum { Cv,V : vm_cpu(V,Cv), lm(V,T,Ps,Pd) } <= Cp.
:- pm_dst(Pd), pm_mem(Pd,Mp), not #sum { Mv,V : vm_mem(V,Mv), lm(V,T,Ps,Pd) } <= Mp.
%% anti-affinity グループＧに所属する仮想マシン間での並列ＬＭを禁止
:- ts(T), aa_rule(G), not #count { V : l(V,T), aa_group(G,V) } <= 1.
%% anti-affinity グループＧに所属する仮想マシンについて同一物理マシン上での稼働を禁止
:- aa_rule(G), Vaa = #count { V : aa_group(G,V) }, Paa = #count { Pd : lm(V,T,Ps,Pd), aa_group(G,V) }, not Vaa = Paa.
%% ＬＭの同時実行数を制限
:- ts(T), not #count { V : l(V,T) } <= max_lm.
%% メンテナンスの同時実行数を制限
:- ts(T), not #count { P : m(P,T) } <= max_maint.
%% 定義された時間内でＬＭを実施
:- lm(V,T,Ps,Pd), lm_duration(V,D), not ts(T..T+D-1).
%% 利用者が指定した時間帯でのＬＭを回避
:- l(V,T), lm_unavail(V,T).
%% 定義された時間内でメンテナンスを実施
:- maint(P,T), not ts(T..T+maint_duration-1).
%% 運用者が指定した時間帯でのメンテナンスを回避
:- m(P,T), m_unavail(P,T).
%% 物理マシンＰｓ内で最初と最後に実施されるＬＭの時間差を制限
:- pm_src(Ps), Tmax = #max { T+D-1 : lm(V,T,Ps,Pd), lm_duration(V,D) }, not #min { T+max_td : lm(V,T,Ps,Pd) } >= Tmax.
% ソフト制約
%% 初期配備先が同じ仮想マシン間でＬＭ移動先はなるべく一緒
:~ pm_src(Ps), P = #count { Pd : lm(V,T,Ps,Pd) }. [P@1,Ps]
以上が解集合プログラミングによる部分問題求解処理の記述である。
【０２５６】
（Ｓ７３）部分問題求解部１７０は、すべての部分問題の求解が終了すると、求解結果を出力し、部分問題求解処理を終了する。なおステップＳ７１〜Ｓ７３の処理は、部分問題ごとに並列で実行することも可能である。
【０２５７】
すべての部分問題の求解結果が得られると、その求解結果に基づいてスケジュール生成部１８０によりスケジュール生成処理が行われる。
図４３は、スケジュール生成例を示すフローチャートである。以下、図４３に示す処理をステップ番号に沿って説明する。以下に示す手順は、図３５のステップＳ１４に相当する。
【０２５８】
（Ｓ８１）スケジュール生成部１８０は、空き物理マシンのみの物理マシングループの求解結果以外の解の集合Ｓに含まれる求解結果を、対応する時刻グループの時間帯が早い順にソートし、リストＳ’に登録する（Ｓ’←ｓｏｌ＿ｓｏｒｔ（Ｓ））。
【０２５９】
（Ｓ８２）スケジュール生成部１８０は、空き物理マシンのみの物理マシングループＰeを、移動先の物理マシングループＰdに設定する。
（Ｓ８３）スケジュール生成部１８０は、解の編集処理を行う。具体的には、スケジュール生成部１８０は、ステップＳ８４〜Ｓ８６の処理を、リストＳ’内に部分問題がなくなるまで実行する。
【０２６０】
（Ｓ８４）スケジュール生成部１８０は、リストＳ’の先頭の求解結果を、編集対象の求解結果ｓに設定する（ｓ←ｃａｒ（Ｓ’））。またスケジュール生成部１８０は、リストＳ’の先頭以外の求解結果を、新たにリストＳ’の要素とする（Ｓ’←ｃｄｒ（Ｓ’））。これによりリストＳ’から先頭の要素が除外される。
【０２６１】
（Ｓ８５）スケジュール生成部１８０は、編集対象の求解結果ｓにおけるＬＭの移動先を、物理マシングループＰd内の物理マシンに変更する。
（Ｓ８６）スケジュール生成部１８０は、求解結果ｓでスケジューリングされている物理マシングループＰsを、移動先の物理マシングループＰdに設定する。
【０２６２】
（Ｓ８７）スケジュール生成部１８０は、リストＳ’内に求解結果がなくなった場合、処理をステップＳ８８に進める。
（Ｓ８８）スケジュール生成部１８０は、空き物理マシンのみの物理マシングループの求解結果と、ステップＳ８３〜Ｓ８７で編集した求解結果とを結合し、システム全体のメンテナンスのスケジュールを出力する。
【０２６３】
このようにして、メンテナンスのスケジュールを効率的に作成することができる。しかも、利用者が仮想マシンのＬＭ実施回避日時を指定した場合には、その仮想マシンについては、ＬＭ実施回避日時以外の日時にＬＭを行うようなスケジュールが作成される。なお利用者は、例えば利用者端末５００，６００に表示されるＬＭ回避日時設定画面を用いて、ＬＭ実施回避日時を指定することができる。
【０２６４】
図４４は、ＬＭ実施回避日時設定画面の例を示す図である。画面８００は、例えば管理サーバ１００から利用者端末５００に提供される画面情報に基づいて、利用者端末５００で表示される。例えば利用者端末５００は、画面８００に対応する画面情報を管理サーバ１００から受信し、当該画面情報に基づいて、利用者端末５００に内蔵または接続されたディスプレイ（表示装置）により、画面８００を表示する。ここで、利用者端末５００は、ユーザＩＤ“ｕｓｅｒ３”の利用者によって利用されるものとする。
【０２６５】
スケジューラ１１２は、仮想マシン構成テーブル１２２（または、仮想マシン稼働テーブル１２３）に基づいて、ＬＭスケジュールテーブル１９２に登録された各仮想マシンの利用者のユーザＩＤを特定する。また、ユーザＩＤに対応する利用者のユーザ名や端末のアドレスの情報は、ＲＡＭ１０２またはＨＤＤ１０３に予め格納されている。スケジューラ１１２は、当該情報を参照することで、ユーザ名や画面情報の送信先を特定する。
【０２６６】
画面８００は、ＶＭシンボル８０１，８０２、ＬＭ実施回避日時シンボル８１１、およびボタン８２１，８２２を有する。
ＶＭシンボル８０１，８０２は、該当の利用者が利用する、ＬＭ対象の仮想マシンを示す。例えば、ＶＭシンボル８０１は、仮想マシン名“ｓｅｒｖｅｒ−９０”の仮想マシンを示す。また、ＶＭシンボル８０２は、仮想マシン名“ｍｙｓｑｌ−６７”の仮想マシンを示す。画面８００の例では、ＶＭシンボル８０１，８０２それぞれの行の左側から右側へ向かう方向を時系列の正方向として、各仮想マシンのＬＭ実施回避日時を示す。
【０２６７】
ＬＭ実施回避日時シンボル８１１は、利用者によるＬＭ実施回避日時の選択を受け付けるためのシンボルである。例えば、利用者は、利用者端末５００に接続されたポインティングデバイスを用いて、所望の仮想マシンの行にＬＭ実施回避日時シンボル８１１を配置する。そして、利用者は、当該ポインティングデバイスを用いて、ＬＭ実施回避日時シンボル８１１の横方向の幅を変えることで、当該仮想マシンに対するＬＭ実施回避日時を選択する。ＬＭ実施回避日時シンボル８１１の例では、仮想マシン名“ｍｙｓｑｌ−６７”の仮想マシンに対するＬＭ実施回避日時として、２０１８年６月２０日１１時５０分〜同日１７時５９分が選択されている。
【０２６８】
ボタン８２１は、ＬＭ実施回避日時シンボル８１１によるＬＭ実施回避日時の選択を解除するためのボタンである。
ボタン８２２は、ＬＭ実施回避日時シンボル８１１を用いて選択されたＬＭ実施回避日時を設定するためのボタンである。利用者端末５００は、ボタン８２２に対する入力を受け付けると、選択された仮想マシンのＬＭ実施回避日時を示すＬＭ実施回避日時情報Ｍ３を含む回避日時メッセージを管理サーバ１００に送信する。
【０２６９】
図４５は、利用者に対するＬＭスケジュール画面の例を示す図である。画面８００ａは、管理サーバ１００から利用者端末５００に対して提供される画面の例である。画面８００ａは、画面８００によるＬＭ実施回避日時の選択に応じて調整されたＬＭスケジュールを示す。画面８００ａは、ＶＭシンボル８０１，８０２、ＬＭシンボル８３１，８３２、およびＬＭ実施回避日時シンボル８１１を有する。
【０２７０】
ＬＭシンボル８３１，８３２は、各仮想マシンのＬＭの実施予定の日時を示す。例えば、ＬＭシンボル８３１は、仮想マシン名“ｓｅｒｖｅｒ−９０”の仮想マシンに対して、２０１８年６月２０日１１時０６分〜同日１１時０９分にＬＭを実施することを示す。また、例えば、ＬＭシンボル８３２は、仮想マシン名“ｍｙｓｑｌ−６７”の仮想マシンに対して、２０１８年６月２０日１１時１０分〜同日１１時１１分にＬＭを実施することを示す。
【０２７１】
図４４、図４５には、利用者端末５００に提供される画面８００，８００ａを例示したが、利用者端末６００にも、当該利用者端末６００の利用者が利用する仮想マシンに関して、ＬＭ実施回避日時設定画面またはＬＭスケジュール画面が提供される。
【０２７２】
図４６は、運用者に対するメンテナンススケジュール画面の例を示す図である。画面９００は、管理サーバ１００から運用者端末７００に対して提供される画面の例である。画面９００は、システム全体のＬＭスケジュールに対応する物理マシンのメンテナンススケジュールを示す。運用者端末７００は、画面９００を描画するための画面情報を管理サーバ１００から受信し、当該画面情報に基づいて、運用者端末７００に内蔵または接続されたディスプレイ（表示装置）により、画面９００を表示する。
【０２７３】
画面９００は、ＰＭシンボル９０１〜９０７、ＬＭスケジュールシンボル９１１〜９１７、およびメンテナンスシンボル９２１〜９２７を有する。
ＰＭシンボル９０１〜９０７は、メンテナンス対象の物理マシンを示す。例えば、ＰＭシンボル９０１は、物理マシン名“ＰＭ０１”の物理マシンを示す。画面９００の例では、ＰＭシンボル９０１〜９０７それぞれの行の左側から右側へ向かう方向を時系列の正方向として、各物理マシン上の仮想マシンのＬＭ予定、およびメンテナンス作業スケジュールを示す。
【０２７４】
ＬＭスケジュールシンボル９１１〜９１７は、各仮想マシンのＬＭ予定を示す。ＬＭスケジュールシンボル９１１〜９１７は、ＬＭスケジュールテーブル１９２の内容を反映している。例えば、ＬＭスケジュールシンボル９１１は、物理マシン名“ＰＭ０１”の物理マシン上の複数の仮想マシンのＬＭ予定を示す。
【０２７５】
メンテナンスシンボル９２１〜９２７は、物理マシンのメンテナンススケジュールを示すシンボルである。メンテナンスシンボル９２１は、メンテナンススケジュールテーブル１９１の内容を反映しており、例えばメンテナンスシンボル９２１は、物理マシン名“ＰＭ０１”の物理マシンに対するメンテナンススケジュールを示す。
【０２７６】
画面９００を参照した運用者は、６月１９日に物理マシン名“ＰＭ０１”、“ＰＭ０３”、“ＰＭ０４”、“ＰＭ０５”などの物理マシンのＬＭを実施し、同日にそれらの物理マシンのメンテナンス作業を実施することを把握する。また運用者は、６月２０日に物理マシン名“ＰＭ０２”などの物理マシンのＬＭを実施し、同日にそれらの物理マシンのメンテナンス作業を実施することを把握する。さらに運用者は、６月２１日に物理マシン名“ＰＭ９Ｘ”、“ＰＭ９Ｙ”などの物理マシンのＬＭを実施し、同日にそれらの物理マシンのメンテナンス作業を実施することを把握する。
【０２７７】
このようなメンテナンススケジュールによれば、６月２１日には、システム全体のメンテナンスが完了する。すなわち物理マシングループの数が抑制されていることで、時刻グループあたりにメンテナンスを実施する物理マシン数が増加し、システム全体のメンテナンスに要する期間が短くなっている。
【０２７８】
運用者端末７００には、指定した時間グループにおけるメンテナンススケジュールの詳細を表示させることもできる。
図４７は、運用者に対するメンテナンススケジュール詳細表示画面の例を示す図である。画面９００ａは、管理サーバ１００から運用者端末７００に対して提供される画面の例である。画面９００ａは、画面９００に示されたスケジュールのうちの、６月２０日のスケジュールの詳細を示す。運用者端末７００は、画面９００ａを描画するための画面情報を管理サーバ１００から受信し、当該画面情報に基づいて、運用者端末７００に内蔵または接続されたディスプレイ（表示装置）により、画面９００ａを表示する。
【０２７９】
画面９００ａは、ＰＭシンボル９０１，９０２、ＬＭスケジュールシンボル９１１ａ〜９１１ｄ，９１２ａ〜９１２ｄ、メンテナンスシンボル９２２、およびＶＭ稼働スケジュールシンボル９３１ａ〜９３１ｄ，９３２ａ〜９３２ｄを有する。
【０２８０】
ＬＭスケジュールシンボル９１１ａ〜９１１ｄは、物理マシン名“ＰＭ０１”の物理マシンを移動先として複数の仮想マシンを移動させるＬＭの予定を示す。ＬＭスケジュールシンボル９１２ａ〜９１２ｄは、物理マシン名“ＰＭ０２”の物理マシンを移動元として複数の仮想マシンを移動させるＬＭの予定を示す。ＬＭスケジュールシンボル９１１ａ〜９１１ｄ，９１２ａ〜９１２ｄは、ＬＭスケジュールテーブル１９２の内容を反映している。
【０２８１】
ＶＭ稼働スケジュールシンボル９３１ａ〜９３１ｄは、物理マシン名“ＰＭ０１”の物理マシン上の複数の仮想マシンの稼働予定を示す。ＶＭ稼働スケジュールシンボル９３２ａ〜９３２ｄは、物理マシン名“ＰＭ０２”の物理マシン上の複数の仮想マシンの稼働予定を示す。ＶＭ稼働スケジュールシンボル９３１ａ〜９３１ｄ，９３２ａ〜９３２ｄ内には、対応する仮想マシンの仮想マシン名が表示されている。
【０２８２】
ＬＭの移動先となる物理マシンでは、各仮想マシンのＬＭ後に、その仮想マシンを稼働させるスケジュールとなっている。またＬＭの移動元となる物理マシンでは、各仮想マシンの稼働後に、その仮想マシンのＬＭを実施するスケジュールとなっている。例えば仮想マシン名“server-90”は、ＬＭ実施前には物理マシン名“ＰＭ０２”の物理マシンで稼働しており、物理マシン名“ＰＭ０１”の物理マシンへのＬＭが１１時６分から１１時９分の間に実施される。その後、仮想マシン名“server-90”は物理マシン名“ＰＭ０１”の物理マシン上で稼働する。
【０２８３】
このように管理サーバ１００は、メンテナンスのスケジュールに関する問題を、複数の部分問題に分割して求解するため、スケジュールを効率的に計算することができ、計算時間が短くなる。その結果、大規模なシステムのメンテナンススケジュールであっても、実用的な時間で算出可能である。
【０２８４】
しかも、物理マシン集合の分割数を、制約を満たす範囲で最少の分割数とするため、短い作業日数でのメンテナンススケジュールを作成することができる。換言すると、物理マシン集合の分割数が多くなると、作業日数が長期化する。
【０２８５】
図４８は、物理マシン集合の分割数を多くした場合のメンテナンススケジュール画面の例（比較例）である。画面９００ｂには、グループ生成部１５０を用いずに物理マシン集合の分割数を任意に指定した場合のメンテナンススケジュールが表示されている。図４８の例における物理マシン集合の分割数は、図４６に示した例の分割数よりも大きい値である。
【０２８６】
画面９００ｂに示されたスケジュールを図４６に示したスケジュールと比べると、物理マシン名“ＰＭ０４”、“ＰＭ０５”の物理マシンのＬＭおよびメンテナンス作業の実施日が、６月１９日から６月２２日にずれている。また物理マシン名“ＰＭ９Ｘ”、“ＰＭ９Ｙ”の物理マシンのＬＭおよびメンテナンス作業の実施日が、６月２１日から６月２７日にずれている。そのため図４８に示したスケジュール通りにメンテナンスを実施すると、メンテナンスが６月２７日までかかる。
【０２８７】
このように作業日数に差があるのは、物理マシン集合の分割数が多くなることで、時刻グループ（１日単位）あたりにメンテナンスを実施できる物理マシン数が減少するためである。１日あたりにメンテナンスを実施できる物理マシン数が少なくなれば、すべての物理マシンのメンテナンスを実施するのに多くの日数がかかる。
【０２８８】
それに対して、管理サーバ１００では、グループ生成部１５０が物理マシン集合の分割数として、制約を満たす範囲で最少の分割数を自動で決定するため、図４６に示したように、短い作業日数による効率的なスケジュールを作成することができる。しかも、メンテナンスを短期間で実施することができれば、各物理マシンへのパッチ適用などの作業が早期に実施されることとなり、システムの信頼性が向上する。
【０２８９】
さらにＬＭ実施回避日時を考慮したスケジューリングが可能なため、ＬＭを実施することによる利用者の業務への影響を抑止することができる。その結果、システム全体としてのサービス品質が向上する。
【０２９０】
なお第２の実施の形態では、ユーザは、使用する仮想マシンのＬＭを回避する時間帯を指定しているが、ＬＭを許容する時間帯を指定してもよい。ＬＭを許容する時間帯が指定された場合、管理サーバ１００は、指定された時間帯を除く時間帯がＬＭ回避時間帯であると判断する。
【０２９１】
さらに第１の実施の形態の情報処理は、処理部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１３に記録できる。
【０２９２】
例えば、プログラムを記録した記録媒体１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０２９３】
１  スケジューリング装置
１ａ  記憶部
１ｂ  処理部
２，３，４，・・・  物理マシン
２ａ，２ｂ，３ａ，３ｂ，４ａ，４ｂ，・・・  仮想マシン
５  端末装置
Ｄ１  構成情報
Ｄ２  時間情報
Ｄ３  制約条件
ｄ１  物理マシン構成情報
ｄ２  仮想マシン構成情報
ｄ３  仮想マシン時間情報
ｄ４  物理マシン時間情報
Ｎ１  ネットワーク
Ｕ１  運用者
【図１】
2020071779.tif 000008
【図２】
2020071779.tif 000009
【図３】
2020071779.tif 000010
【図４】
2020071779.tif 000011
【図５】
2020071779.tif 000012
【図６】
2020071779.tif 000013
【図７】
2020071779.tif 000014
【図８】
2020071779.tif 000015
【図９】
2020071779.tif 000016
【図１０】
2020071779.tif 000017
【図１１】
2020071779.tif 000018
【図１２】
2020071779.tif 000019
【図１３】
2020071779.tif 000020
【図１４】
2020071779.tif 000021
【図１５】
2020071779.tif 000022
【図１６】
2020071779.tif 000023
【図１７】
2020071779.tif 000024
【図１８】
2020071779.tif 000025
【図１９】
2020071779.tif 000026
【図２０】
2020071779.tif 000027
【図２１】
2020071779.tif 000028
【図２２】
2020071779.tif 000029
【図２３】
2020071779.tif 000030
【図２４】
2020071779.tif 000031
【図２５】
2020071779.tif 000032
【図２６】
2020071779.tif 000033
【図２７】
2020071779.tif 000034
【図２８】
2020071779.tif 000035
【図２９】
2020071779.tif 000036
【図３０】
2020071779.tif 000037
【図３１】
2020071779.tif 000038
【図３２】
2020071779.tif 000039
【図３３】
2020071779.tif 000040
【図３４】
2020071779.tif 000041
【図３５】
2020071779.tif 000042
【図３６】
2020071779.tif 000043
【図３７】
2020071779.tif 000044
【図３８】
2020071779.tif 000045
【図３９】
2020071779.tif 000046
【図４０】
2020071779.tif 000047
【図４１】
2020071779.tif 000048
【図４２】
2020071779.tif 000049
【図４３】
2020071779.tif 000050
【図４４】
2020071779.tif 000051
【図４５】
2020071779.tif 000052
【図４６】
2020071779.tif 000053
【図４７】
2020071779.tif 000054
【図４８】
2020071779.tif 000055