(57)【要約】【課題】様々な性能のプロセッサが搭載された計算機において、ＣＰＵリソースを効率的に利用できるようにプロセスをＣＰＵコアに割り当てることを可能とする。【解決手段】計算機１００のコア割当部２００は、各ＣＰＵコアに単位時間当たりの計算量を示す性能値を設定し、各プロセスに実行時に使用する計算量を示す負荷値を設定する。コア割当部２００は、プロセスがＣＰＵコアを専有するプロセスである場合には、当該プロセスを、当該プロセスの負荷値以上の性能値であって、最小の性能値が設定されたＣＰＵコアに割り当てる。【選択図】図１
2019071026.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵコアを搭載し、複数のプロセスを稼働させる計算機であって、
各々の前記ＣＰＵコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するＣＰＵコアを割り当てるコア割当部を備え、
前記コア割当部は、前記プロセスがＣＰＵコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたＣＰＵコアに割り当てる
ことを特徴とする計算機。
【請求項２】
前記コア割当部は、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるＣＰＵコアへ所定の順番で割り当てる
ことを特徴とする請求項１に記載の計算機。
【請求項３】
前記コア割当部は、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のＣＰＵコアへ割り当てる
ことを特徴とする請求項１に記載の計算機。
【請求項４】
前記コア割当部は、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のＣＰＵコアへ割り当てる
ことを特徴とする請求項１に記載の計算機。
【請求項５】
複数のＣＰＵコアを搭載し、複数のプロセスを稼働させる計算機におけるＣＰＵコア割当方法であって、
前記計算機は、
各々の前記ＣＰＵコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、
前記プロセスがＣＰＵコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたＣＰＵコアに割り当てるステップと
を実行することを特徴とするＣＰＵコア割当方法。
【請求項６】
前記計算機は、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるＣＰＵコアへ所定の順番で割り当てるステップ
を実行することを特徴とする請求項５に記載のＣＰＵコア割当方法。
【請求項７】
前記計算機は、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のＣＰＵコアへ割り当てるステップ
を実行することを特徴とする請求項５に記載のＣＰＵコア割当方法。
【請求項８】
前記計算機は、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のＣＰＵコアへ割り当てるステップ
を実行することを特徴とする請求項５に記載のＣＰＵコア割当方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセスの負荷値とＣＰＵ（Central Processing Unit）コアの性能値に応じて、プロセスをＣＰＵコアに割り当てる計算機およびＣＰＵコア割当方法に関する。
【背景技術】
【０００２】
ＩｏＴ（Internet of Things）や人工知能などの技術を応用したアプリケーション処理では、大量のデータを蓄積して処理する必要があり、リアルタイムに最適な計算機リソースを提供する俊敏性と高効率なリソース利用とが可能な計算機環境が求められている。このような計算機環境の一つとして、プロセッサ、メモリ、ストレージ、ネットワークリソースが細分化され、ラック単位でプールされて、アプリケーションの需要に応じて自動かつ動的に割り当てられる計算機アーキテクチャが出現している（非特許文献１参照）。このような計算機アーキテクチャは、ＲＳＡ（Rack Scale Architecture）、垂直統合機とも呼ばれる。
【０００３】
上記のような計算機アーキテクチャでは、搭載されるプロセッサは１種類とは限らず、サーバやパソコンに搭載されるＣＰＵの他に、人工知能技術を適用したデータ処理に用いられるＧＰＧＰＵ（General-Purpose computing on Graphics Processing Units）などが用いられ、その性能は異なる。また、高性能だが消費電力が大きいＣＰＵと、性能は落ちるが低消費電力のＣＰＵが搭載される。将来的には、１つのプロセッサ内に性能の異なるコアが搭載されることも予想される。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】インテル（登録商標）ラック・スケール・デザイン、[online]、[平成２９年９月２６日検索]、インターネット<URL: https://www.intel.co.jp/content/www/jp/ja/architecture-and-technology/rack-scale-design-overview.html>
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来までのＯＳ（Operating System）のスケジューラは、プロセスに対して当該プロセスを実行するプロセッサ内のコア（ＣＰＵコア）を割り当てる際に、各ＣＰＵコアの性能は同一という前提で割り当てていた。このために、上記したような計算機アーキテクチャの場合には、高性能のＣＰＵコアにも低性能なＣＰＵコアにも、同程度の計算量（負荷値）のプロセスを割り当ててしまい、全体としての処理効率が低下してしまうという問題が発生する。
【０００６】
また、ＤＰＤＫ（Data Plane Development Kit）プロセスのようなＣＰＵコアを専有する必要のあるプロセスに対して、必要以上に高性能なＣＰＵコアを割り当ててしまい、使用されないリソースが生じてしまう問題が発生する。
【０００７】
このような背景を鑑みて本発明がなされたのであり、本発明は、ＣＰＵリソースを効率的に利用できるように、プロセスにＣＰＵコアを割り当てることを可能とする計算機およびＣＰＵコア割当方法を提供することを課題とする。
【課題を解決するための手段】
【０００８】
前記した課題を解決するため、請求項１に記載の発明は、複数のＣＰＵコアを搭載し、複数のプロセスを稼働させる計算機であって、各々の前記ＣＰＵコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するＣＰＵコアを割り当てるコア割当部を備え、前記コア割当部が、前記プロセスがＣＰＵコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたＣＰＵコアに割り当てることを特徴とする計算機とした。
【０００９】
また、請求項５に記載の発明は、複数のＣＰＵコアを搭載し、複数のプロセスを稼働させる計算機におけるＣＰＵコア割当方法であって、前記計算機が、各々の前記ＣＰＵコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、前記プロセスがＣＰＵコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたＣＰＵコアに割り当てるステップとを実行することを特徴とするＣＰＵコア割当方法とした。
【００１０】
このような構成にすることで、計算機は、ＣＰＵコアを専有するプロセス（専有プロセス）を、当該プロセスの実行に必要で最小の性能値であるＣＰＵコアに割り当てる。これにより、従来までのＣＰＵコアの性能値を考慮しない割り当てと比較して、専有されたＣＰＵコアにおけるプロセスによって使用されない処理能力に相当する分の性能値を削減することが可能となり、計算機のリソースを効率的に利用することができる。
【００１１】
請求項２に記載の発明は、前記コア割当部が、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるＣＰＵコアへ所定の順番で割り当てることを特徴とする請求項１に記載の計算機とした。
【００１２】
また、請求項６に記載の発明は、前記計算機が、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるＣＰＵコアへ所定の順番で割り当てるステップを実行することを特徴とする請求項５に記載のＣＰＵコア割当方法とした。
【００１３】
このような構成にすることで、計算機は、１つのプロセスに専有されるＣＰＵコアを除くＣＰＵコアに、分散してプロセスを割り当てる。プロセスが、一部のＣＰＵコアに集中的に割り当てられるのではなく、各ＣＰＵコアに分散して割り当てられることで、同時に実行されるプロセスの数が増加し、全体の処理時間を短くすることができる。
【００１４】
請求項３に記載の発明は、前記コア割当部が、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のＣＰＵコアへ割り当てることを特徴とする請求項１に記載の計算機とした。
【００１５】
また、請求項７に記載の発明は、前記計算機が、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のＣＰＵコアへ割り当てるステップを実行することを特徴とする請求項５に記載のＣＰＵコア割当方法とした。
【００１６】
このような構成にすることで、計算機は、１つのプロセスに専有されるＣＰＵコアを除くＣＰＵコアの中で性能値が最小のＣＰＵコアに、集中的にプロセスを割り当てる。このために、プロセスが未割当のＣＰＵコアが増加することになり、２度目以降の割当処理において新たな専有プロセスにＣＰＵコアを割り当てることができる。また、性能値が大きいＣＰＵコアへの割り当てを後回しにしており、未割当のＣＰＵコアの性能値が大きい。このため、負荷値が大きい専有プロセスに未割当のＣＰＵコアを割り当てることができる。
【００１７】
請求項４に記載の発明は、前記コア割当部が、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のＣＰＵコアへ割り当てることを特徴とする請求項１に記載の計算機とした。
【００１８】
また、請求項８に記載の発明は、前記計算機が、前記専有プロセスではなくＣＰＵコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないＣＰＵコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のＣＰＵコアへ割り当てるステップを実行することを特徴とする請求項５に記載のＣＰＵコア割当方法とした。
【００１９】
このような構成にすることで、計算機は、１つのプロセスに専有されるＣＰＵコアを除くＣＰＵコアの中で性能値が最大のＣＰＵコアに、集中的にプロセスを割り当てる。このために、プロセスが未割当のＣＰＵコアが増加することになり、２度目以降の割当処理において新たな専有プロセスにＣＰＵコアを割り当てることができる。また、性能値が大きいＣＰＵコアから割り当てているために、１つのＣＰＵコアに割り当てるプロセスの数が大きくなる。このため、未割当のＣＰＵコアの数を増やすことができ、より多くの専有プロセスに未割当のＣＰＵコアを割り当てることができる。
【発明の効果】
【００２０】
本発明によれば、ＣＰＵリソースを効率的に利用できるように、プロセスにＣＰＵコアを割り当てることを可能とする計算機およびＣＰＵコア割当方法を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】第１の実施形態に係る計算機の全体構成を例示する図である。
【図２】第１の実施形態に係るＣＰＵコア性能加算値表のデータ構成例を示す図である。
【図３】第１の実施形態に係るＣＰＵコア性能値表のデータ構成例を示す図である。
【図４】第１の実施形態に係るプロセス負荷加算値表のデータ構成例を示す図である。
【図５】第１の実施形態に係るプロセス負荷値表のデータ構成例を示す図である。
【図６】第１の実施形態に係るプロセスコア割当表のデータ構成例を示す図である。
【図７】第１の実施形態に係るコア割当部が実行する割当決定処理の流れを示すフローチャートである。
【図８】第２の実施形態に係る計算機の全体構成を例示する図である。
【図９】第２の実施形態に係るコア割当部が割当決定処理を実行した後のプロセスコア割当表である。
【図１０】第２の実施形態に係るコア割当部が実行する割当決定処理の流れを示すフローチャートである。
【図１１】第３の実施形態に係る計算機の全体構成を例示する図である。
【図１２】第３の実施形態に係るコア割当部が割当決定処理を実行した後のプロセスコア割当表である。
【図１３】第３の実施形態に係るコア割当部が実行する割当決定処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２２】
≪第１の実施形態の全体構成≫
以下に、本発明を実施するための形態（実施形態）における計算機について説明する。図１は、第１の実施形態に係る計算機１００の全体構成を例示する図である。計算機１００は、制御部１６０、記憶部１７０、入出力部１８０を含んで構成される。ＲＳＡでは、１つのラックに複数の計算機１００が構成される場合もある。
【００２３】
制御部１６０は、ＣＰＵコアを搭載するＣＰＵやＧＰＧＰＵなど各種プロセッサから構成される。制御部１６０は、後述する記憶部１７０に記憶されるＯＳやアプリケーションのプログラムを実行することにより、計算機１００を機能させる。記憶部１７０は、ＲＡＭ（Random Access Memory）やＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）などから構成され、各種プログラムや計算途中のデータを記憶する。入出力部１８０は、不図示のディスプレイやキーボード、他の計算機とのデータの送受信を行う。
【００２４】
計算機１００は、論理的にはプロセス１１０とＯＳ１２０とで構成され、それぞれは記憶部１７０に記憶されるプログラムを制御部１６０が実行することで、計算機１００上で動作する。ＯＳ１２０は計算機１００全体を制御し、プロセス１１０はアプリケーション処理を行う。ＯＳ１２０は、スケジューラ１３０、ハードウェア管理部１４０、プロセス管理部１５０、および、コア割当部２００を含んで構成される。
【００２５】
スケジューラ１３０は、後述するコア割当部２００の指示を受け、プロセス１１０に制御部１６０に含まれるＣＰＵコアを割り当ててプロセスを起動したり、各ＣＰＵコアに割り当てられたプロセス１１０の切り替えを行う。ハードウェア管理部１４０は、計算機１００に搭載されたプロセッサやＨＤＤなどの情報を取得したり、制御したりする。ハードウェア管理部１４０は、プロセッサに含まれるＣＰＵコアの基本情報（数量、クロック数、ハイパースレッディングの有無など）を取得し、コア割当部２００に出力する。プロセス管理部１５０は、プロセス１１０の情報を取得したり、動作状態を管理する。プロセス管理部１５０は、プロセスの基本情報（優先度、ＤＰＤＫ利用の有無など）や起動するプロセスの情報を取得し、コア割当部２００に出力する。
【００２６】
≪コア割当部の構成≫
コア割当部２００は、ハードウェア管理部１４０からＣＰＵコアの基本情報（ＣＰＵコア基本情報）を、プロセス管理部１５０からプロセスの基本情報（プロセス基本情報）や起動するプロセスの情報を取得し、各ＣＰＵコアの性能値（ＣＰＵコア性能値）と各プロセスの負荷値（プロセス負荷値）を設定する。ＣＰＵコア性能値とは、ＣＰＵコアの性能を示す指標であり、単位時間当たり計算量を示す指標である。プロセス負荷値とは、プロセス実行時の計算量（実行時に使用する計算量）を示す指標である。コア割当部２００は、ＣＰＵコア性能値とプロセス負荷値とから、どのプロセスにどのＣＰＵコアを割り当てるか決定し、決定した結果をスケジューラ１３０に通知する。
【００２７】
コア割当部２００は、ＣＰＵコア情報管理部２１０、プロセス情報管理部２２０、割当決定部２３０、ＣＰＵコア性能加算値表２４０、ＣＰＵコア性能値表２５０、プロセス負荷加算値表２６０、プロセス負荷値表２７０、および、プロセスコア割当表２８０を含んで構成される。ＣＰＵコア情報管理部２１０とプロセス情報管理部２２０と割当決定部２３０とは、制御部１６０で実行される機能部であり、ＣＰＵコア性能加算値表２４０とＣＰＵコア性能値表２５０とプロセス負荷加算値表２６０とプロセス負荷値表２７０とプロセスコア割当表２８０とは、記憶部１７０に記憶される。
【００２８】
≪ＣＰＵコア情報管理部≫
ＣＰＵコア情報管理部２１０は、ハードウェア管理部１４０からＣＰＵコア基本情報を取得し、ＣＰＵコア性能加算値表２４０（後述する図２参照）を基にして、ＣＰＵコア性能値表２５０（後述する図３参照）を設定する。
【００２９】
図２は、第１の実施形態に係るＣＰＵコア性能加算値表２４０のデータ構成例を示す図である。ＣＰＵコア性能加算値表２４０は、例えば表形式のデータであり、１つのレコード（行）は、ＣＰＵコアの各基本情報に対するＣＰＵコア性能値への加算値を示していて、属性（列）として大項目２４１と小項目２４２と性能加算値２４３とを含む。ＣＰＵコア性能値への加算値（性能加算値）とは、個々のＣＰＵコア基本情報の性能の高低に応じて予め設定された数値である。個々のＣＰＵコア基本情報の性能加算値をＣＰＵコアごとに積算して、後記するＣＰＵコア性能値を求める。
【００３０】
ＣＰＵコア基本情報の大項目２４１には、クロック数とビット数とハイパースレッディングとがある。クロック数の小項目２４２には、１．０ＧＨｚ未満、１．０ＧＨｚ以上２．０ＧＨｚ未満などがあり、ビット数の小項目２４２には、３２ビットと６４ビットとがあって、ハイパースレッディングの小項目２４２には、無と有とがあり、それぞれの小項目２４２に対して性能加算値２４３が予め設定されている。例えば、レコード２４９は、クロック数が１．０ＧＨｚ以上２．０ＧＨｚ未満の場合には、ＣＰＵコアの性能値として１５０が加算されることを示している。
【００３１】
図３は、第１の実施形態に係るＣＰＵコア性能値表２５０のデータ構成例を示す図である。ＣＰＵコア性能値表２５０は、例えば表形式のデータであり、１つのレコード（行）は、１つのＣＰＵコアの基本情報と性能値とを示していて、属性（列）としてＣＰＵコア識別情報２５１、クロック数２５２、ビット数２５３、ハイパースレッディング２５４、および、性能値２５５を含む。ＣＰＵコア識別情報２５１、クロック数２５２、ビット数２５３、および、ハイパースレッディング２５４は、それぞれＣＰＵコアの識別情報、クロック数、ビット数、および、ハイパースレッディングの有無を示す。これらの属性の値は、ハードウェア管理部１４０から取得した値である。
【００３２】
性能値２５５は、ＣＰＵコアの性能値であり、ＣＰＵコア性能加算値表２４０（図２参照）に基づき、クロック数２５２、ビット数２５３、および、ハイパースレッディング２５４から設定される。
レコード２５９は、識別情報が「ＣＰＵ０１」であるＣＰＵコアについて、クロック数が３．０ＧＨｚ（性能加算値は３００）、ビット数が６４（性能加算値は１００）、ハイパースレッディングが有（性能加算値は１００）であり、性能加算値を合計して得られる性能値が５００であることを示している。
【００３３】
≪プロセス情報管理部≫
プロセス情報管理部２２０は、プロセス管理部１５０からプロセス基本情報を取得し、プロセス負荷加算値表２６０（後述する図４参照）を基にして、プロセス負荷値表２７０（後述する図５参照）を設定する。
【００３４】
図４は、第１の実施形態に係るプロセス負荷加算値表２６０のデータ構成例を示す図である。プロセス負荷加算値表２６０は、例えば表形式のデータであり、１つのレコード（行）は、プロセスの各基本情報に対するプロセス負荷値への加算値を示していて、属性（列）として大項目２６１と小項目２６２と負荷加算値２６３とを含む。プロセス負荷値への加算値（負荷加算値）とは、個々のプロセス基本情報の負荷の大小に応じて予め設定された数値である。個々のプロセス基本情報の負荷加算値をプロセスごとに積算して、後記するプロセス負荷値を求める。
【００３５】
プロセス基本情報の大項目２６１には、プロセス優先度と常駐プロセスとＤＰＤＫ利用とがある。プロセス優先度の小項目２６２には、０、１〜２５などがあり、常駐プロセスの小項目２６２には、常駐と非常駐とがあって、ＤＰＤＫ利用の小項目２６２には、有と無とがあり、それぞれの小項目２６２に対して負荷加算値２６３が予め設定されている。なお、プロセス優先度は、数値が高いほど優先度が高く、優先度が高いほどプロセス負荷値は高くなる。例えば、レコード２６９は、プロセス優先度が５０〜７４の場合には、プロセスの負荷値として８が加算されることを示している。
【００３６】
図５は、第１の実施形態に係るプロセス負荷値表２７０のデータ構成例を示す図である。プロセス負荷値表２７０は、例えば表形式のデータであり、１つのレコード（行）は、１つのプロセスの基本情報と負荷値とを示していて、属性（列）としてプロセス識別情報２７１、優先度２７２、常駐プロセス２７３、ＤＰＤＫ利用２７４、および、負荷値２７５を含む。プロセス識別情報２７１、優先度２７２、常駐プロセス２７３、および、ＤＰＤＫ利用２７４は、それぞれプロセスの識別情報、優先度、常駐プロセスの当否、ＤＰＤＫ利用の有無を示す。これらの属性の値は、プロセス管理部１５０から取得した値である。
【００３７】
負荷値２７５は、プロセスの負荷値であり、プロセス負荷加算値表２６０（図４参照）に基づき、優先度２７２、常駐プロセス２７３、および、ＤＰＤＫ利用２７４から設定される。
レコード２７９は、識別情報が「プロセス０５」であるプロセスについて、優先度が５０であり（負荷加算値は８）、常駐プロセスであって（負荷加算値は１０）、ＤＰＤＫ利用は無（負荷加算値は０）であり、負荷加算値を合計して得られる負荷値が１８であることを示している。
【００３８】
≪割当決定部≫
割当決定部２３０は、ＣＰＵコア性能値表２５０とプロセス負荷値表２７０とを参照して、プロセスコア割当表２８０（後述する図６参照）を更新しながら、どのプロセスにどのＣＰＵコアを割り当てるか決定する割当決定処理を実行し、実行結果であるプロセスとＣＰＵコアの対応をスケジューラ１３０に通知する。スケジューラ１３０は、通知内容に基づいてプロセスにＣＰＵコアを割り当てる。
【００３９】
図６は、第１の実施形態に係るプロセスコア割当表２８０のデータ構成例を示す図である。プロセスコア割当表２８０は、例えば表形式のデータであり、１つのレコード（行）は、プロセスがどのＣＰＵコアに割り当てられたかを示していて、属性（列）としてプロセス２８１、負荷値２８２、および、割当コア２８３を含む。プロセス２８１と負荷値２８２とは、それぞれプロセスの識別情報と負荷値であり、プロセス負荷値表２７０（図５参照）のプロセス識別情報２７１と負荷値２７５とにそれぞれ対応する。例えば、レコード２８９は、後述する割当決定処理の結果、プロセス０６にはＣＰＵコア０３が割り当てられたことを示す。
【００４０】
≪第１の実施形態の割当決定処理≫
第１の実施形態の割当決定処理では、割当決定部２３０は、最初に、ＣＰＵコアを専有するプロセス（専有プロセス）にＣＰＵコアを割り当てる。次に、割当決定部２３０は、専有されたＣＰＵコア以外のＣＰＵコアで、最初に性能値が大きい順に、次に小さい順にプロセスを割り当て、以下これを繰り返すことで、専有されたＣＰＵコア以外のＣＰＵコアに分散して（割り当てられたプロセスの負荷値の合計ができるかぎり均等になるように）プロセスを割り当てる。例えば、性能値が大きい順にＣＰＵコアＡ、ＣＰＵコアＢ、ＣＰＵコアＣがあるとすると、割当決定部２３０は、負荷値が大きいプロセスから順に、ＣＰＵコアＡ、ＣＰＵコアＢ、ＣＰＵコアＣ、ＣＰＵコアＣ、ＣＰＵコアＢ、ＣＰＵコアＡと割り当て、以下これを繰り返す。
【００４１】
図７は、第１の実施形態に係るコア割当部２００が実行する割当決定処理の流れを示すフローチャートである。図７を参照しながら、図６に示したプロセスコア割当表２８０の更新状況と合わせて、プロセスへのＣＰＵコアの割当決定処理を説明する。
ステップＳ１１において、ＣＰＵコア情報管理部２１０がＣＰＵコア性能値を、プロセス情報管理部２２０がプロセス負荷値を設定する。詳しくは、ＣＰＵコア情報管理部２１０は、ハードウェア管理部１４０からＣＰＵコア基本情報を取得し、ＣＰＵコア性能値表２５０（図３参照）のＣＰＵコア識別情報２５１、クロック数２５２、ビット数２５３、および、ハイパースレッディング２５４に格納して、ＣＰＵコア性能加算値表２４０（図２参照）を参照して性能値を算出し、性能値２５５に格納する。また、プロセス情報管理部２２０は、プロセス管理部１５０からプロセス基本情報を取得し、プロセス負荷値表２７０（図５参照）のプロセス識別情報２７１、優先度２７２、常駐プロセス２７３、および、ＤＰＤＫ利用２７４に格納して、プロセス負荷加算値表２６０（図４参照）を参照して負荷値を算出し、負荷値２７５に格納する。
【００４２】
ステップＳ１２において、割当決定部２３０は、プロセスコア割当表２８０（図６参照）を初期化する。詳しくは、割当決定部２３０は、プロセス負荷値表２７０のプロセス識別情報２７１と負荷値２７５とにあるデータをプロセスコア割当表２８０のプロセス２８１と負荷値２８２とに格納する。割当コア２８３は空白である。
【００４３】
ステップＳ１３において、割当決定部２３０は、ＣＰＵコアを専有するプロセス（専有プロセス）が存在するか否か判断し、存在すれば（Ｓ１３→Ｙ）ステップＳ１４に進み、存在しなければ（Ｓ１３→Ｎ）ステップＳ１５に進む。プロセスがＣＰＵコアを専有するか否かは、プロセス負荷値表２７０のＤＰＤＫ利用２７４が有か無かで判断できる。
【００４４】
ステップＳ１４において、割当決定部２３０は、各専有プロセスに対して、ＣＰＵコア性能値表２５０を参照し、プロセス負荷値以上の性能値を持つＣＰＵコアの中で、性能値が最小のＣＰＵコアを割り当てる。割当決定部２３０は、割り当てたＣＰＵコアの識別情報をプロセスコア割当表２８０の割当コア２８３に格納する。図５に示したプロセス負荷値表２７０の例では、プロセス０６がＤＰＤＫ利用２７４が有でＣＰＵコアを専有するため、割当決定部２３０は、性能値が負荷値の１２６以上であり、性能値が最小のＣＰＵコアを割り当てる。図３に示したＣＰＵコア性能値表２５０の例では、ＣＰＵ０３が割り当てられ、プロセスコア割当表２８０のレコード２８９の割当コア２８３に「ＣＰＵ０３」が格納される。
【００４５】
ステップＳ１５において、割当決定部２３０は、ステップＳ１４においてＣＰＵコアを割り当てた以外のプロセス（未割当プロセス）を負荷値が大きい順にソートする。以下のステップＳ１６〜Ｓ１９では、割当決定部２３０が、ソート結果の順番である負荷値の大きいプロセスから順に専有されていないＣＰＵコア（非専有ＣＰＵコア）を割り当てる。図６に示したプロセスコア割当表２８０の例では、ステップＳ１４でＣＰＵコアが割り当てられたプロセス０６を除いたプロセス０５、プロセス０４、プロセス０３、プロセス０２、プロセス０１の順にＣＰＵコアが割り当てられる。
【００４６】
ステップＳ１６において、割当決定部２３０は、ステップＳ１４にて割り当てが決まったＣＰＵコアを除き、性能値が大きいＣＰＵコアから順番に割り当てる。図３に示したＣＰＵコア性能値表２５０の例では、ＣＰＵ０１、ＣＰＵ０２の順に割り当てられる。図６に示したプロセスコア割当表２８０の例では、プロセス０５にＣＰＵ０１が、プロセス０４にＣＰＵ０２が割り当てられ、レコード２８８とレコード２８７の割当コア２８３にそれぞれ「ＣＰＵ０１」と「ＣＰＵ０２」とが格納される。
【００４７】
なお、ＣＰＵコアの未割当性能値がプロセスの負荷値より小さい場合には、当該ＣＰＵコアへの割り当てをスキップして、次に性能値の大きいＣＰＵコアに割り当てる。ここで、ＣＰＵコアの未割当性能値とは、性能値２５５（図３参照）から、既に当該ＣＰＵコアに割り当てられたプロセスの負荷値の合計を減算した残りの性能値のことである。
【００４８】
ステップＳ１７において、割当決定部２３０は、全てのプロセスにＣＰＵコアを割り当てたかを判断し、割り当てたならば（Ｓ１７→Ｙ）割当決定処理を終了し、割り当てていないならば（Ｓ１７→Ｎ）ステップＳ１８に進む。
【００４９】
ステップＳ１８において、割当決定部２３０は、ステップＳ１４にて割り当てが決まったＣＰＵコアを除き、性能値が小さいＣＰＵコアから順番に割り当てる。図３に示したＣＰＵコア性能値表２５０の例では、ＣＰＵ０２、ＣＰＵ０１の順に割り当てられる。図６に示したプロセスコア割当表２８０の例では、プロセス０３にＣＰＵ０２が、プロセス０２にＣＰＵ０１が割り当てられ、レコード２８６とレコード２８５の割当コア２８３にそれぞれ「ＣＰＵ０２」と「ＣＰＵ０１」とが格納される。
なお、ＣＰＵコアの未割当性能値がプロセスの負荷値より小さい場合には、当該ＣＰＵコアへの割り当てをスキップして、次に性能値の小さいＣＰＵコアに割り当てる。
【００５０】
ステップＳ１９において、割当決定部２３０は、全てのプロセスにＣＰＵコアを割り当てたかを判断し、割り当てたならば（Ｓ１９→Ｙ）割当決定処理を終了し、割り当てていないならば（Ｓ１９→Ｎ）ステップＳ１６に戻る。図６に示したプロセスコア割当表２８０の例では、プロセス０１が未割当であり、ステップＳ１６にて性能値が大きいＣＰＵ０１が割り当てられ、レコード２８４の割当コア２８３に「ＣＰＵ０１」が格納される。
【００５１】
以上に説明したように、コア割当部２００（割当決定部２３０）は、最初に専有プロセスにＣＰＵコアを割り当て、次に専有プロセスに割り当てられたＣＰＵコアを除くＣＰＵコアに、分散して（割り当てられたプロセスの負荷値の合計ができるかぎり均等になるように）プロセスを割り当てる。プロセスが、一部のＣＰＵコアに集中的に割り当てられるのではなく、各ＣＰＵコアに分散して割り当てられることで、同時に実行されるプロセスの数が増加し、全体の処理時間を短くすることができる。
【００５２】
≪第２の実施形態≫
第２の実施形態では、割当決定部２３０Ａが実行するプロセスへのＣＰＵコアの割り当ての方針が、第１の実施形態とは異なり、性能値が小さいＣＰＵコアに優先してプロセスを割り当てる。図８は、第２の実施形態に係る計算機１００の全体構成を例示する図である。割当決定部２３０Ａを除いて、他の構成要素は、第１の実施形態と同様である。
【００５３】
図９は、第２の実施形態に係るコア割当部２００が割当決定処理を実行した後のプロセスコア割当表２８０である。図１０は、第２の実施形態に係るコア割当部２００が実行する割当決定処理の流れを示すフローチャートである。図１０を参照しながら、図９に示したプロセスコア割当表２８０の更新状況と合わせて、プロセスへのＣＰＵコアの割当決定処理を説明する。
【００５４】
ステップＳ４１〜Ｓ４５は、ステップＳ１１〜Ｓ１５（図７参照）と同様の処理である。ここまでの処理で、プロセス０６がＤＰＤＫ利用が有でＣＰＵコアを専有するため、割当決定部２３０Ａは、性能値が負荷値の１２６以上であり、性能値が最小のＣＰＵコアを割り当てる。プロセスコア割当表２８０（図９参照）のレコード２８９Ａの割当コア２８３に「ＣＰＵ０３」が格納される。
【００５５】
ステップＳ４６において、割当決定部２３０Ａが、ステップＳ４４においてＣＰＵコアを割り当てた以外のプロセス（未割当プロセス）で負荷値が大きい順に、ステップＳ４７の処理を繰り返す。図５の例では、プロセス０５、プロセス０４、プロセス０３、プロセス０２、プロセス０１の順にＣＰＵコアが割り当てられる。
【００５６】
ステップＳ４７において、割当決定部２３０Ａは、未割当性能値が割り当てるプロセスの負荷値以上で、性能値が最小のＣＰＵコアにプロセスを割り当てる。図３に示すように、専有されたＣＰＵコア以外で性能値が最小のＣＰＵコアはＣＰＵ０２であり、プロセス０５、プロセス０４、プロセス０３、プロセス０２、プロセス０１の順にＣＰＵ０２に割り当てられ、レコード２８８Ａ〜２８４Ａ（図９参照）の順に、割当コア２８３に「ＣＰＵ０２」が格納される。ＣＰＵコアの未割当性能値が小さくなり、プロセス負荷値より小さい場合には、次に性能値の小さいＣＰＵコアに割り当てていく。
【００５７】
ステップＳ４８において、割当決定部２３０Ａが、ステップＳ４４においてＣＰＵコアを割り当てた以外のプロセス全てに対して、ステップＳ４７の処理を実行したか判断する。未処理のプロセスがあれば、ステップＳ４７に進み、全てのプロセスにＣＰＵコアを割り当てたならば、割当決定処理を終える。
【００５８】
以上に説明したように、コア割当部２００（割当決定部２３０Ａ）は、専有プロセスに割り当てられたＣＰＵコアを除くＣＰＵコアの中で性能値が最小のＣＰＵコアに、集中的にプロセスを割り当てる。このために、第１の実施形態と比べて、プロセスが未割当のＣＰＵコアが増加することになり、２度目以降の割当決定処理において新たな専有プロセスにＣＰＵコアを割り当てることができる。また、性能値が大きいＣＰＵコアへの割り当てを後回しにしており、未割当のＣＰＵコアの性能値が大きい。このため、負荷値が大きい専有プロセスに未割当のＣＰＵコアを割り当てることができる。
【００５９】
≪第３の実施形態≫
第３の実施形態では、割当決定部２３０Ｂが実行するプロセスへのＣＰＵコアの割り当ての方針が、第１の実施形態とは異なり、性能値が大きいＣＰＵコアに優先してプロセスを割り当てる。図１１は、第３の実施形態に係る計算機１００の全体構成を例示する図である。割当決定部２３０Ｂを除いて、他の構成要素は、第１の実施形態と同様である。
【００６０】
図１２は、第３の実施形態に係るコア割当部２００が割当決定処理を実行した後のプロセスコア割当表２８０である。図１３は、第３の実施形態に係るコア割当部２００が実行する割当決定処理の流れを示すフローチャートである。図１３を参照しながら、図１２に示したプロセスコア割当表２８０の更新状況と合わせて、プロセスへのＣＰＵコアの割当決定処理を説明する。
【００６１】
ステップＳ５１〜Ｓ５５は、ステップＳ１１〜Ｓ１５（図７参照）と同様の処理である。ここまでの処理で、プロセス０６がＤＰＤＫ利用が有でＣＰＵコアを専有するため、割当決定部２３０Ｂは、性能値が負荷値の１２６以上であり、性能値が最小のＣＰＵコアを割り当てる。プロセスコア割当表２８０（図１２参照）のレコード２８９Ｂの割当コア２８３に「ＣＰＵ０３」が格納される。
【００６２】
ステップＳ５６において、割当決定部２３０Ｂが、ステップＳ５４においてＣＰＵコアを割り当てた以外のプロセス（未割当プロセス）で負荷値が大きい順に、ステップＳ５７の処理を繰り返す。図５の例では、プロセス０５、プロセス０４、プロセス０３、プロセス０２、プロセス０１の順にＣＰＵコアが割り当てられる。
【００６３】
ステップＳ５７において、割当決定部２３０Ｂは、未割当性能値が割り当てるプロセスの負荷値以上で、性能値が最大のＣＰＵコアにプロセスを割り当てる。図３に示すように、専有されたＣＰＵコア以外で性能値が最大のＣＰＵコアはＣＰＵ０１であり、プロセス０５、プロセス０４、プロセス０３、プロセス０２、プロセス０１の順にＣＰＵ０１に割り当てられ、レコード２８８Ｂ〜２８４Ｂ（図１２参照）の順に、割当コア２８３に「ＣＰＵ０１」が格納される。ＣＰＵコアの未割当性能値が小さくなり、プロセス負荷値より小さい場合には、次に性能値の大きいＣＰＵコアに割り当てていく。
【００６４】
ステップＳ５８において、割当決定部２３０Ｂが、ステップＳ５４においてＣＰＵコアを割り当てた以外のプロセス全てに対して、ステップＳ５７の処理を実行したか判断する。未処理のプロセスがあれば、ステップＳ５７に進み、全てのプロセスにＣＰＵコアを割り当てたならば、割当決定処理を終える。
【００６５】
以上に説明したように、コア割当部２００（割当決定部２３０Ｂ）は、専有プロセスに割り当てられたＣＰＵコアを除くＣＰＵコアの中で性能値が最大のＣＰＵコアに、集中的にプロセスを割り当てる。このために、第１の実施形態と比べて、プロセスが未割当のＣＰＵコアが増加することになり、２度目以降の割当決定処理において新たな専有プロセスにＣＰＵコアを割り当てることができる。また、性能値が大きいＣＰＵコアから割り当てているために、第２の実施形態と比べて、１つのＣＰＵコアに割り当てるプロセスの数が大きくなる。このため、未割当のＣＰＵコアの数を増やすことができ、より多くの専有プロセスに未割当のＣＰＵコアを割り当てることができる。
【００６６】
≪変形例≫
コア割当部２００は、図４と図５に示したように、プロセス優先度や常駐プロセスの当否、ＤＰＤＫ利用の有無などのプロセス基本情報に基づいて負荷値を決定していたが、この他に、ＣＰＵ利用率や実行時間、プロセスの開始から終了までの全体計算量を考慮してプロセスの負荷値を決定してもよい。例えば、ＣＰＵ利用率が高いプロセスや実行時間の長いプロセスの負荷加算値を高く設定して、コア割当部２００は、負荷値を決定してもよい。なお、ＣＰＵ利用率や実行時間、全体計算量については、プロセスを予め実行して負荷加算値を設定する。
【００６７】
コア割当部２００は、１つの計算機１００の中におけるプロセスのＣＰＵコアへの割当を決定しているが、複数の計算機の中で全体のプロセスの負荷値、ＣＰＵコアの性能値を参照して、プロセスにＣＰＵコアを割り当てるようにしてもよい。
【００６８】
第１の実施形態では、ＣＰＵコアにプロセスを分散して割り当てるために、コア割当部２００は、最初に性能値が大きい順にＣＰＵコアを割り当て、次に小さい順に割り当て、以下これを繰り返していた。例えば、性能値が大きい順にＣＰＵコアＡ、ＣＰＵコアＢ、ＣＰＵコアＣがあるとすると、コア割当部２００は、負荷値が大きいプロセスから順に、ＣＰＵコアＡ、ＣＰＵコアＢ、ＣＰＵコアＣ、ＣＰＵコアＣ、ＣＰＵコアＢ、ＣＰＵコアＡと割り当て、以下これを繰り返す。
【００６９】
これに対して、コア割当部２００は、負荷値が小さいプロセスから順に、ＣＰＵコアＣ、ＣＰＵコアＢ、ＣＰＵコアＡ、ＣＰＵコアＡ、ＣＰＵコアＢ、ＣＰＵコアＣと割り当て、以下これを繰り返してもよい。また、コア割当部２００は、負荷値が大きいプロセスから順に、未割当性能値が大きいＣＰＵコアを割り当ててもよい。例えば、コア割当部２００は、ＣＰＵコアＡ、ＣＰＵコアＢ、ＣＰＵコアＣに負荷値が大きい方からプロセスを割り当てる。この割り当ての結果、未割当性能値の大きさが、ＣＰＵコアＢ、ＣＰＵコアＡ、ＣＰＵコアＣの順になったら、コア割当部２００は、負荷値が大きいプロセスから順にＣＰＵコアＢ、ＣＰＵコアＡ、ＣＰＵコアＣを割り当てていく。
【００７０】
第１の実施形態では、全てのＣＰＵコアにプロセスを割り当てており、割り当て後に新たな専有プロセスにＣＰＵコアを割り当てることができない。割り当て後に新たな専有プロセスにＣＰＵコアを割り当てることを考慮して、コア割当部２００は、所定の性能値を持つ所定の数のＣＰＵコアを除いて、プロセスを割り当てるようにしてもよい。
【００７１】
≪効果≫
以上に説明したように、第１〜３の実施形態においてコア割当部２００は、専有プロセスに対しては、プロセスの負荷値以上で最小の性能値のＣＰＵコアを割り当てることで、専有されたＣＰＵコアにおいて使用されないリソースを削減するようにして、効率的なＣＰＵ割り当てを行う。第１の実施形態においてコア割当部２００は、残りのＣＰＵコアに分散してプロセスを割り当てることで、同時に実行されるプロセス数を増加させ、全体のプロセスの処理時間を短縮することができる。第２の実施形態においてコア割当部２００は、性能値が小さいＣＰＵコアに集中的にプロセスを割り当てることで、割当決定処理後にプロセスを割り当てる場合であっても、負荷値が大きい専有プロセスに割り当てることができる。第３の実施形態においてコア割当部２００は、性能値が大きいＣＰＵコアに集中的にプロセスを割り当てることで、割当決定処理後にプロセスを割り当てる場合であっても、より多くの専有プロセスに割り当てられることができる。
【符号の説明】
【００７２】
１００  計算機
１１０  プロセス
１２０  ＯＳ
１３０  スケジューラ
１４０  ハードウェア管理部
１５０  プロセス管理
２００  コア割当部
２１０  ＣＰＵコア情報管理部
２２０  プロセス情報管理部
２３０、２３０Ａ、２３０Ｂ  割当決定部
２４０  ＣＰＵコア性能加算値表
２５０  ＣＰＵコア性能値表
２６０  プロセス負荷加算値表
２７０  プロセス負荷値表
２８０  プロセスコア割当表
【図１】
2019071026.tif 000003
【図２】
2019071026.tif 000004
【図３】
2019071026.tif 000005
【図４】
2019071026.tif 000006
【図５】
2019071026.tif 000007
【図６】
2019071026.tif 000008
【図７】
2019071026.tif 000009
【図８】
2019071026.tif 000010
【図９】
2019071026.tif 000011
【図１０】
2019071026.tif 000012
【図１１】
2019071026.tif 000013
【図１２】
2019071026.tif 000014
【図１３】
2019071026.tif 000015