JP6969268B2 - 計算機およびcpuコア割当方法 - Google Patents

計算機およびcpuコア割当方法 Download PDF

Info

Publication number
JP6969268B2
JP6969268B2 JP2017197893A JP2017197893A JP6969268B2 JP 6969268 B2 JP6969268 B2 JP 6969268B2 JP 2017197893 A JP2017197893 A JP 2017197893A JP 2017197893 A JP2017197893 A JP 2017197893A JP 6969268 B2 JP6969268 B2 JP 6969268B2
Authority
JP
Japan
Prior art keywords
cpu core
cpu
value
core
performance value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017197893A
Other languages
English (en)
Other versions
JP2019071026A (ja
Inventor
雄大 北野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2017197893A priority Critical patent/JP6969268B2/ja
Publication of JP2019071026A publication Critical patent/JP2019071026A/ja
Application granted granted Critical
Publication of JP6969268B2 publication Critical patent/JP6969268B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Microcomputers (AREA)

Description

本発明は、プロセスの負荷値とCPU(Central Processing Unit)コアの性能値に応じて、プロセスをCPUコアに割り当てる計算機およびCPUコア割当方法に関する。
IoT(Internet of Things)や人工知能などの技術を応用したアプリケーション処理では、大量のデータを蓄積して処理する必要があり、リアルタイムに最適な計算機リソースを提供する俊敏性と高効率なリソース利用とが可能な計算機環境が求められている。このような計算機環境の一つとして、プロセッサ、メモリ、ストレージ、ネットワークリソースが細分化され、ラック単位でプールされて、アプリケーションの需要に応じて自動かつ動的に割り当てられる計算機アーキテクチャが出現している(非特許文献1参照)。このような計算機アーキテクチャは、RSA(Rack Scale Architecture)、垂直統合機とも呼ばれる。
上記のような計算機アーキテクチャでは、搭載されるプロセッサは1種類とは限らず、サーバやパソコンに搭載されるCPUの他に、人工知能技術を適用したデータ処理に用いられるGPGPU(General-Purpose computing on Graphics Processing Units)などが用いられ、その性能は異なる。また、高性能だが消費電力が大きいCPUと、性能は落ちるが低消費電力のCPUが搭載される。将来的には、1つのプロセッサ内に性能の異なるコアが搭載されることも予想される。
インテル(登録商標)ラック・スケール・デザイン、[online]、[平成29年9月26日検索]、インターネット<URL: https://www.intel.co.jp/content/www/jp/ja/architecture-and-technology/rack-scale-design-overview.html>
従来までのOS(Operating System)のスケジューラは、プロセスに対して当該プロセスを実行するプロセッサ内のコア(CPUコア)を割り当てる際に、各CPUコアの性能は同一という前提で割り当てていた。このために、上記したような計算機アーキテクチャの場合には、高性能のCPUコアにも低性能なCPUコアにも、同程度の計算量(負荷値)のプロセスを割り当ててしまい、全体としての処理効率が低下してしまうという問題が発生する。
また、DPDK(Data Plane Development Kit)プロセスのようなCPUコアを専有する必要のあるプロセスに対して、必要以上に高性能なCPUコアを割り当ててしまい、使用されないリソースが生じてしまう問題が発生する。
このような背景を鑑みて本発明がなされたのであり、本発明は、CPUリソースを効率的に利用できるように、プロセスにCPUコアを割り当てることを可能とする計算機およびCPUコア割当方法を提供することを課題とする。
前記した課題を解決するため、請求項に記載の発明は、複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機であって、各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するCPUコアを割り当てるコア割当部を備え、前記コア割当部が、前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当て、前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるCPUコアへ所定の順番で割り当て、前記所定の順番は、性能値が最大のCPUコアから順に割り当てる順番と、性能値が最小のCPUコアから順に割り当てる順番とを繰り返す順番であることを特徴とする計算機とした。
また、請求項に記載の発明は、複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機におけるCPUコア割当方法であって、前記計算機が、各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当てるステップと、前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるCPUコアへ所定の順番で割り当てるステップを実行し、前記所定の順番は、性能値が最大のCPUコアから順に割り当てる順番と、性能値が最小のCPUコアから順に割り当てる順番とを繰り返す順番であることを特徴とするCPUコア割当方法とした。
このような構成にすることで、計算機は、CPUコアを専有するプロセス(専有プロセス)を、当該プロセスの実行に必要で最小の性能値であるCPUコアに割り当てる。これにより、従来までのCPUコアの性能値を考慮しない割り当てと比較して、専有されたCPUコアにおけるプロセスによって使用されない処理能力に相当する分の性能値を削減することが可能となり、計算機のリソースを効率的に利用することができる。
また、計算機は、1つのプロセスに専有されるCPUコアを除くCPUコアに、分散してプロセスを割り当てる。プロセスが、一部のCPUコアに集中的に割り当てられるのではなく、各CPUコアに分散して割り当てられることで、同時に実行されるプロセスの数が増加し、全体の処理時間を短くすることができる。
請求項に記載の発明は、複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機であって、各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するCPUコアを割り当てるコア割当部を備え、前記コア割当部が、前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当て、前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のCPUコアへ割り当てることを特徴とする計算機とした。
また、請求項に記載の発明は、複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機におけるCPUコア割当方法であって、前記計算機が、各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当てるステップと、前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のCPUコアへ割り当てるステップを実行することを特徴とするCPUコア割当方法とした。
このような構成にすることで、計算機は、専有プロセスを、当該プロセスの実行に必要で最小の性能値であるCPUコアに割り当てる。これにより、従来までのCPUコアの性能値を考慮しない割り当てと比較して、専有されたCPUコアにおけるプロセスによって使用されない処理能力に相当する分の性能値を削減することが可能となり、計算機のリソースを効率的に利用することができる。
また、計算機は、1つのプロセスに専有されるCPUコアを除くCPUコアの中で性能値が最小のCPUコアに、集中的にプロセスを割り当てる。このために、プロセスが未割当のCPUコアが増加することになり、2度目以降の割当処理において新たな専有プロセスにCPUコアを割り当てることができる。また、性能値が大きいCPUコアへの割り当てを後回しにしており、未割当のCPUコアの性能値が大きい。このため、負荷値が大きい専有プロセスに未割当のCPUコアを割り当てることができる。
請求項に記載の発明は、複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機であって、各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するCPUコアを割り当てるコア割当部を備え、前記コア割当部が、前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当て、前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のCPUコアへ割り当てることを特徴とする計算機とした。
また、請求項に記載の発明は、複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機におけるCPUコア割当方法であって、前記計算機が、各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当てるステップと、前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のCPUコアへ割り当てるステップを実行することを特徴とするCPUコア割当方法とした。
このような構成にすることで、計算機は、専有プロセスを、当該プロセスの実行に必要で最小の性能値であるCPUコアに割り当てる。これにより、従来までのCPUコアの性能値を考慮しない割り当てと比較して、専有されたCPUコアにおけるプロセスによって使用されない処理能力に相当する分の性能値を削減することが可能となり、計算機のリソースを効率的に利用することができる。
また、計算機は、1つのプロセスに専有されるCPUコアを除くCPUコアの中で性能値が最大のCPUコアに、集中的にプロセスを割り当てる。このために、プロセスが未割当のCPUコアが増加することになり、2度目以降の割当処理において新たな専有プロセスにCPUコアを割り当てることができる。また、性能値が大きいCPUコアから割り当てているために、1つのCPUコアに割り当てるプロセスの数が大きくなる。このため、未割当のCPUコアの数を増やすことができ、より多くの専有プロセスに未割当のCPUコアを割り当てることができる。
本発明によれば、CPUリソースを効率的に利用できるように、プロセスにCPUコアを割り当てることを可能とする計算機およびCPUコア割当方法を提供することができる。
第1の実施形態に係る計算機の全体構成を例示する図である。 第1の実施形態に係るCPUコア性能加算値表のデータ構成例を示す図である。 第1の実施形態に係るCPUコア性能値表のデータ構成例を示す図である。 第1の実施形態に係るプロセス負荷加算値表のデータ構成例を示す図である。 第1の実施形態に係るプロセス負荷値表のデータ構成例を示す図である。 第1の実施形態に係るプロセスコア割当表のデータ構成例を示す図である。 第1の実施形態に係るコア割当部が実行する割当決定処理の流れを示すフローチャートである。 第2の実施形態に係る計算機の全体構成を例示する図である。 第2の実施形態に係るコア割当部が割当決定処理を実行した後のプロセスコア割当表である。 第2の実施形態に係るコア割当部が実行する割当決定処理の流れを示すフローチャートである。 第3の実施形態に係る計算機の全体構成を例示する図である。 第3の実施形態に係るコア割当部が割当決定処理を実行した後のプロセスコア割当表である。 第3の実施形態に係るコア割当部が実行する割当決定処理の流れを示すフローチャートである。
≪第1の実施形態の全体構成≫
以下に、本発明を実施するための形態(実施形態)における計算機について説明する。図1は、第1の実施形態に係る計算機100の全体構成を例示する図である。計算機100は、制御部160、記憶部170、入出力部180を含んで構成される。RSAでは、1つのラックに複数の計算機100が構成される場合もある。
制御部160は、CPUコアを搭載するCPUやGPGPUなど各種プロセッサから構成される。制御部160は、後述する記憶部170に記憶されるOSやアプリケーションのプログラムを実行することにより、計算機100を機能させる。記憶部170は、RAM(Random Access Memory)やHDD(Hard Disk Drive)、SSD(Solid State Drive)などから構成され、各種プログラムや計算途中のデータを記憶する。入出力部180は、不図示のディスプレイやキーボード、他の計算機とのデータの送受信を行う。
計算機100は、論理的にはプロセス110とOS120とで構成され、それぞれは記憶部170に記憶されるプログラムを制御部160が実行することで、計算機100上で動作する。OS120は計算機100全体を制御し、プロセス110はアプリケーション処理を行う。OS120は、スケジューラ130、ハードウェア管理部140、プロセス管理部150、および、コア割当部200を含んで構成される。
スケジューラ130は、後述するコア割当部200の指示を受け、プロセス110に制御部160に含まれるCPUコアを割り当ててプロセスを起動したり、各CPUコアに割り当てられたプロセス110の切り替えを行う。ハードウェア管理部140は、計算機100に搭載されたプロセッサやHDDなどの情報を取得したり、制御したりする。ハードウェア管理部140は、プロセッサに含まれるCPUコアの基本情報(数量、クロック数、ハイパースレッディングの有無など)を取得し、コア割当部200に出力する。プロセス管理部150は、プロセス110の情報を取得したり、動作状態を管理する。プロセス管理部150は、プロセスの基本情報(優先度、DPDK利用の有無など)や起動するプロセスの情報を取得し、コア割当部200に出力する。
≪コア割当部の構成≫
コア割当部200は、ハードウェア管理部140からCPUコアの基本情報(CPUコア基本情報)を、プロセス管理部150からプロセスの基本情報(プロセス基本情報)や起動するプロセスの情報を取得し、各CPUコアの性能値(CPUコア性能値)と各プロセスの負荷値(プロセス負荷値)を設定する。CPUコア性能値とは、CPUコアの性能を示す指標であり、単位時間当たり計算量を示す指標である。プロセス負荷値とは、プロセス実行時の計算量(実行時に使用する計算量)を示す指標である。コア割当部200は、CPUコア性能値とプロセス負荷値とから、どのプロセスにどのCPUコアを割り当てるか決定し、決定した結果をスケジューラ130に通知する。
コア割当部200は、CPUコア情報管理部210、プロセス情報管理部220、割当決定部230、CPUコア性能加算値表240、CPUコア性能値表250、プロセス負荷加算値表260、プロセス負荷値表270、および、プロセスコア割当表280を含んで構成される。CPUコア情報管理部210とプロセス情報管理部220と割当決定部230とは、制御部160で実行される機能部であり、CPUコア性能加算値表240とCPUコア性能値表250とプロセス負荷加算値表260とプロセス負荷値表270とプロセスコア割当表280とは、記憶部170に記憶される。
≪CPUコア情報管理部≫
CPUコア情報管理部210は、ハードウェア管理部140からCPUコア基本情報を取得し、CPUコア性能加算値表240(後述する図2参照)を基にして、CPUコア性能値表250(後述する図3参照)を設定する。
図2は、第1の実施形態に係るCPUコア性能加算値表240のデータ構成例を示す図である。CPUコア性能加算値表240は、例えば表形式のデータであり、1つのレコード(行)は、CPUコアの各基本情報に対するCPUコア性能値への加算値を示していて、属性(列)として大項目241と小項目242と性能加算値243とを含む。CPUコア性能値への加算値(性能加算値)とは、個々のCPUコア基本情報の性能の高低に応じて予め設定された数値である。個々のCPUコア基本情報の性能加算値をCPUコアごとに積算して、後記するCPUコア性能値を求める。
CPUコア基本情報の大項目241には、クロック数とビット数とハイパースレッディングとがある。クロック数の小項目242には、1.0GHz未満、1.0GHz以上2.0GHz未満などがあり、ビット数の小項目242には、32ビットと64ビットとがあって、ハイパースレッディングの小項目242には、無と有とがあり、それぞれの小項目242に対して性能加算値243が予め設定されている。例えば、レコード249は、クロック数が1.0GHz以上2.0GHz未満の場合には、CPUコアの性能値として150が加算されることを示している。
図3は、第1の実施形態に係るCPUコア性能値表250のデータ構成例を示す図である。CPUコア性能値表250は、例えば表形式のデータであり、1つのレコード(行)は、1つのCPUコアの基本情報と性能値とを示していて、属性(列)としてCPUコア識別情報251、クロック数252、ビット数253、ハイパースレッディング254、および、性能値255を含む。CPUコア識別情報251、クロック数252、ビット数253、および、ハイパースレッディング254は、それぞれCPUコアの識別情報、クロック数、ビット数、および、ハイパースレッディングの有無を示す。これらの属性の値は、ハードウェア管理部140から取得した値である。
性能値255は、CPUコアの性能値であり、CPUコア性能加算値表240(図2参照)に基づき、クロック数252、ビット数253、および、ハイパースレッディング254から設定される。
レコード259は、識別情報が「CPU01」であるCPUコアについて、クロック数が3.0GHz(性能加算値は300)、ビット数が64(性能加算値は100)、ハイパースレッディングが有(性能加算値は100)であり、性能加算値を合計して得られる性能値が500であることを示している。
≪プロセス情報管理部≫
プロセス情報管理部220は、プロセス管理部150からプロセス基本情報を取得し、プロセス負荷加算値表260(後述する図4参照)を基にして、プロセス負荷値表270(後述する図5参照)を設定する。
図4は、第1の実施形態に係るプロセス負荷加算値表260のデータ構成例を示す図である。プロセス負荷加算値表260は、例えば表形式のデータであり、1つのレコード(行)は、プロセスの各基本情報に対するプロセス負荷値への加算値を示していて、属性(列)として大項目261と小項目262と負荷加算値263とを含む。プロセス負荷値への加算値(負荷加算値)とは、個々のプロセス基本情報の負荷の大小に応じて予め設定された数値である。個々のプロセス基本情報の負荷加算値をプロセスごとに積算して、後記するプロセス負荷値を求める。
プロセス基本情報の大項目261には、プロセス優先度と常駐プロセスとDPDK利用とがある。プロセス優先度の小項目262には、0、1〜25などがあり、常駐プロセスの小項目262には、常駐と非常駐とがあって、DPDK利用の小項目262には、有と無とがあり、それぞれの小項目262に対して負荷加算値263が予め設定されている。なお、プロセス優先度は、数値が高いほど優先度が高く、優先度が高いほどプロセス負荷値は高くなる。例えば、レコード269は、プロセス優先度が50〜74の場合には、プロセスの負荷値として8が加算されることを示している。
図5は、第1の実施形態に係るプロセス負荷値表270のデータ構成例を示す図である。プロセス負荷値表270は、例えば表形式のデータであり、1つのレコード(行)は、1つのプロセスの基本情報と負荷値とを示していて、属性(列)としてプロセス識別情報271、優先度272、常駐プロセス273、DPDK利用274、および、負荷値275を含む。プロセス識別情報271、優先度272、常駐プロセス273、および、DPDK利用274は、それぞれプロセスの識別情報、優先度、常駐プロセスの当否、DPDK利用の有無を示す。これらの属性の値は、プロセス管理部150から取得した値である。
負荷値275は、プロセスの負荷値であり、プロセス負荷加算値表260(図4参照)に基づき、優先度272、常駐プロセス273、および、DPDK利用274から設定される。
レコード279は、識別情報が「プロセス05」であるプロセスについて、優先度が50であり(負荷加算値は8)、常駐プロセスであって(負荷加算値は10)、DPDK利用は無(負荷加算値は0)であり、負荷加算値を合計して得られる負荷値が18であることを示している。
≪割当決定部≫
割当決定部230は、CPUコア性能値表250とプロセス負荷値表270とを参照して、プロセスコア割当表280(後述する図6参照)を更新しながら、どのプロセスにどのCPUコアを割り当てるか決定する割当決定処理を実行し、実行結果であるプロセスとCPUコアの対応をスケジューラ130に通知する。スケジューラ130は、通知内容に基づいてプロセスにCPUコアを割り当てる。
図6は、第1の実施形態に係るプロセスコア割当表280のデータ構成例を示す図である。プロセスコア割当表280は、例えば表形式のデータであり、1つのレコード(行)は、プロセスがどのCPUコアに割り当てられたかを示していて、属性(列)としてプロセス281、負荷値282、および、割当コア283を含む。プロセス281と負荷値282とは、それぞれプロセスの識別情報と負荷値であり、プロセス負荷値表270(図5参照)のプロセス識別情報271と負荷値275とにそれぞれ対応する。例えば、レコード289は、後述する割当決定処理の結果、プロセス06にはCPUコア03が割り当てられたことを示す。
≪第1の実施形態の割当決定処理≫
第1の実施形態の割当決定処理では、割当決定部230は、最初に、CPUコアを専有するプロセス(専有プロセス)にCPUコアを割り当てる。次に、割当決定部230は、専有されたCPUコア以外のCPUコアで、最初に性能値が大きい順に、次に小さい順にプロセスを割り当て、以下これを繰り返すことで、専有されたCPUコア以外のCPUコアに分散して(割り当てられたプロセスの負荷値の合計ができるかぎり均等になるように)プロセスを割り当てる。例えば、性能値が大きい順にCPUコアA、CPUコアB、CPUコアCがあるとすると、割当決定部230は、負荷値が大きいプロセスから順に、CPUコアA、CPUコアB、CPUコアC、CPUコアC、CPUコアB、CPUコアAと割り当て、以下これを繰り返す。
図7は、第1の実施形態に係るコア割当部200が実行する割当決定処理の流れを示すフローチャートである。図7を参照しながら、図6に示したプロセスコア割当表280の更新状況と合わせて、プロセスへのCPUコアの割当決定処理を説明する。
ステップS11において、CPUコア情報管理部210がCPUコア性能値を、プロセス情報管理部220がプロセス負荷値を設定する。詳しくは、CPUコア情報管理部210は、ハードウェア管理部140からCPUコア基本情報を取得し、CPUコア性能値表250(図3参照)のCPUコア識別情報251、クロック数252、ビット数253、および、ハイパースレッディング254に格納して、CPUコア性能加算値表240(図2参照)を参照して性能値を算出し、性能値255に格納する。また、プロセス情報管理部220は、プロセス管理部150からプロセス基本情報を取得し、プロセス負荷値表270(図5参照)のプロセス識別情報271、優先度272、常駐プロセス273、および、DPDK利用274に格納して、プロセス負荷加算値表260(図4参照)を参照して負荷値を算出し、負荷値275に格納する。
ステップS12において、割当決定部230は、プロセスコア割当表280(図6参照)を初期化する。詳しくは、割当決定部230は、プロセス負荷値表270のプロセス識別情報271と負荷値275とにあるデータをプロセスコア割当表280のプロセス281と負荷値282とに格納する。割当コア283は空白である。
ステップS13において、割当決定部230は、CPUコアを専有するプロセス(専有プロセス)が存在するか否か判断し、存在すれば(S13→Y)ステップS14に進み、存在しなければ(S13→N)ステップS15に進む。プロセスがCPUコアを専有するか否かは、プロセス負荷値表270のDPDK利用274が有か無かで判断できる。
ステップS14において、割当決定部230は、各専有プロセスに対して、CPUコア性能値表250を参照し、プロセス負荷値以上の性能値を持つCPUコアの中で、性能値が最小のCPUコアを割り当てる。割当決定部230は、割り当てたCPUコアの識別情報をプロセスコア割当表280の割当コア283に格納する。図5に示したプロセス負荷値表270の例では、プロセス06がDPDK利用274が有でCPUコアを専有するため、割当決定部230は、性能値が負荷値の126以上であり、性能値が最小のCPUコアを割り当てる。図3に示したCPUコア性能値表250の例では、CPU03が割り当てられ、プロセスコア割当表280のレコード289の割当コア283に「CPU03」が格納される。
ステップS15において、割当決定部230は、ステップS14においてCPUコアを割り当てた以外のプロセス(未割当プロセス)を負荷値が大きい順にソートする。以下のステップS16〜S19では、割当決定部230が、ソート結果の順番である負荷値の大きいプロセスから順に専有されていないCPUコア(非専有CPUコア)を割り当てる。図6に示したプロセスコア割当表280の例では、ステップS14でCPUコアが割り当てられたプロセス06を除いたプロセス05、プロセス04、プロセス03、プロセス02、プロセス01の順にCPUコアが割り当てられる。
ステップS16において、割当決定部230は、ステップS14にて割り当てが決まったCPUコアを除き、性能値が大きいCPUコアから順番に割り当てる。図3に示したCPUコア性能値表250の例では、CPU01、CPU02の順に割り当てられる。図6に示したプロセスコア割当表280の例では、プロセス05にCPU01が、プロセス04にCPU02が割り当てられ、レコード288とレコード287の割当コア283にそれぞれ「CPU01」と「CPU02」とが格納される。
なお、CPUコアの未割当性能値がプロセスの負荷値より小さい場合には、当該CPUコアへの割り当てをスキップして、次に性能値の大きいCPUコアに割り当てる。ここで、CPUコアの未割当性能値とは、性能値255(図3参照)から、既に当該CPUコアに割り当てられたプロセスの負荷値の合計を減算した残りの性能値のことである。
ステップS17において、割当決定部230は、全てのプロセスにCPUコアを割り当てたかを判断し、割り当てたならば(S17→Y)割当決定処理を終了し、割り当てていないならば(S17→N)ステップS18に進む。
ステップS18において、割当決定部230は、ステップS14にて割り当てが決まったCPUコアを除き、性能値が小さいCPUコアから順番に割り当てる。図3に示したCPUコア性能値表250の例では、CPU02、CPU01の順に割り当てられる。図6に示したプロセスコア割当表280の例では、プロセス03にCPU02が、プロセス02にCPU01が割り当てられ、レコード286とレコード285の割当コア283にそれぞれ「CPU02」と「CPU01」とが格納される。
なお、CPUコアの未割当性能値がプロセスの負荷値より小さい場合には、当該CPUコアへの割り当てをスキップして、次に性能値の小さいCPUコアに割り当てる。
ステップS19において、割当決定部230は、全てのプロセスにCPUコアを割り当てたかを判断し、割り当てたならば(S19→Y)割当決定処理を終了し、割り当てていないならば(S19→N)ステップS16に戻る。図6に示したプロセスコア割当表280の例では、プロセス01が未割当であり、ステップS16にて性能値が大きいCPU01が割り当てられ、レコード284の割当コア283に「CPU01」が格納される。
以上に説明したように、コア割当部200(割当決定部230)は、最初に専有プロセスにCPUコアを割り当て、次に専有プロセスに割り当てられたCPUコアを除くCPUコアに、分散して(割り当てられたプロセスの負荷値の合計ができるかぎり均等になるように)プロセスを割り当てる。プロセスが、一部のCPUコアに集中的に割り当てられるのではなく、各CPUコアに分散して割り当てられることで、同時に実行されるプロセスの数が増加し、全体の処理時間を短くすることができる。
≪第2の実施形態≫
第2の実施形態では、割当決定部230Aが実行するプロセスへのCPUコアの割り当ての方針が、第1の実施形態とは異なり、性能値が小さいCPUコアに優先してプロセスを割り当てる。図8は、第2の実施形態に係る計算機100の全体構成を例示する図である。割当決定部230Aを除いて、他の構成要素は、第1の実施形態と同様である。
図9は、第2の実施形態に係るコア割当部200が割当決定処理を実行した後のプロセスコア割当表280である。図10は、第2の実施形態に係るコア割当部200が実行する割当決定処理の流れを示すフローチャートである。図10を参照しながら、図9に示したプロセスコア割当表280の更新状況と合わせて、プロセスへのCPUコアの割当決定処理を説明する。
ステップS41〜S45は、ステップS11〜S15(図7参照)と同様の処理である。ここまでの処理で、プロセス06がDPDK利用が有でCPUコアを専有するため、割当決定部230Aは、性能値が負荷値の126以上であり、性能値が最小のCPUコアを割り当てる。プロセスコア割当表280(図9参照)のレコード289Aの割当コア283に「CPU03」が格納される。
ステップS46において、割当決定部230Aが、ステップS44においてCPUコアを割り当てた以外のプロセス(未割当プロセス)で負荷値が大きい順に、ステップS47の処理を繰り返す。図5の例では、プロセス05、プロセス04、プロセス03、プロセス02、プロセス01の順にCPUコアが割り当てられる。
ステップS47において、割当決定部230Aは、未割当性能値が割り当てるプロセスの負荷値以上で、性能値が最小のCPUコアにプロセスを割り当てる。図3に示すように、専有されたCPUコア以外で性能値が最小のCPUコアはCPU02であり、プロセス05、プロセス04、プロセス03、プロセス02、プロセス01の順にCPU02に割り当てられ、レコード288A〜284A(図9参照)の順に、割当コア283に「CPU02」が格納される。CPUコアの未割当性能値が小さくなり、プロセス負荷値より小さい場合には、次に性能値の小さいCPUコアに割り当てていく。
ステップS48において、割当決定部230Aが、ステップS44においてCPUコアを割り当てた以外のプロセス全てに対して、ステップS47の処理を実行したか判断する。未処理のプロセスがあれば、ステップS47に進み、全てのプロセスにCPUコアを割り当てたならば、割当決定処理を終える。
以上に説明したように、コア割当部200(割当決定部230A)は、専有プロセスに割り当てられたCPUコアを除くCPUコアの中で性能値が最小のCPUコアに、集中的にプロセスを割り当てる。このために、第1の実施形態と比べて、プロセスが未割当のCPUコアが増加することになり、2度目以降の割当決定処理において新たな専有プロセスにCPUコアを割り当てることができる。また、性能値が大きいCPUコアへの割り当てを後回しにしており、未割当のCPUコアの性能値が大きい。このため、負荷値が大きい専有プロセスに未割当のCPUコアを割り当てることができる。
≪第3の実施形態≫
第3の実施形態では、割当決定部230Bが実行するプロセスへのCPUコアの割り当ての方針が、第1の実施形態とは異なり、性能値が大きいCPUコアに優先してプロセスを割り当てる。図11は、第3の実施形態に係る計算機100の全体構成を例示する図である。割当決定部230Bを除いて、他の構成要素は、第1の実施形態と同様である。
図12は、第3の実施形態に係るコア割当部200が割当決定処理を実行した後のプロセスコア割当表280である。図13は、第3の実施形態に係るコア割当部200が実行する割当決定処理の流れを示すフローチャートである。図13を参照しながら、図12に示したプロセスコア割当表280の更新状況と合わせて、プロセスへのCPUコアの割当決定処理を説明する。
ステップS51〜S55は、ステップS11〜S15(図7参照)と同様の処理である。ここまでの処理で、プロセス06がDPDK利用が有でCPUコアを専有するため、割当決定部230Bは、性能値が負荷値の126以上であり、性能値が最小のCPUコアを割り当てる。プロセスコア割当表280(図12参照)のレコード289Bの割当コア283に「CPU03」が格納される。
ステップS56において、割当決定部230Bが、ステップS54においてCPUコアを割り当てた以外のプロセス(未割当プロセス)で負荷値が大きい順に、ステップS57の処理を繰り返す。図5の例では、プロセス05、プロセス04、プロセス03、プロセス02、プロセス01の順にCPUコアが割り当てられる。
ステップS57において、割当決定部230Bは、未割当性能値が割り当てるプロセスの負荷値以上で、性能値が最大のCPUコアにプロセスを割り当てる。図3に示すように、専有されたCPUコア以外で性能値が最大のCPUコアはCPU01であり、プロセス05、プロセス04、プロセス03、プロセス02、プロセス01の順にCPU01に割り当てられ、レコード288B〜284B(図12参照)の順に、割当コア283に「CPU01」が格納される。CPUコアの未割当性能値が小さくなり、プロセス負荷値より小さい場合には、次に性能値の大きいCPUコアに割り当てていく。
ステップS58において、割当決定部230Bが、ステップS54においてCPUコアを割り当てた以外のプロセス全てに対して、ステップS57の処理を実行したか判断する。未処理のプロセスがあれば、ステップS57に進み、全てのプロセスにCPUコアを割り当てたならば、割当決定処理を終える。
以上に説明したように、コア割当部200(割当決定部230B)は、専有プロセスに割り当てられたCPUコアを除くCPUコアの中で性能値が最大のCPUコアに、集中的にプロセスを割り当てる。このために、第1の実施形態と比べて、プロセスが未割当のCPUコアが増加することになり、2度目以降の割当決定処理において新たな専有プロセスにCPUコアを割り当てることができる。また、性能値が大きいCPUコアから割り当てているために、第2の実施形態と比べて、1つのCPUコアに割り当てるプロセスの数が大きくなる。このため、未割当のCPUコアの数を増やすことができ、より多くの専有プロセスに未割当のCPUコアを割り当てることができる。
≪変形例≫
コア割当部200は、図4と図5に示したように、プロセス優先度や常駐プロセスの当否、DPDK利用の有無などのプロセス基本情報に基づいて負荷値を決定していたが、この他に、CPU利用率や実行時間、プロセスの開始から終了までの全体計算量を考慮してプロセスの負荷値を決定してもよい。例えば、CPU利用率が高いプロセスや実行時間の長いプロセスの負荷加算値を高く設定して、コア割当部200は、負荷値を決定してもよい。なお、CPU利用率や実行時間、全体計算量については、プロセスを予め実行して負荷加算値を設定する。
コア割当部200は、1つの計算機100の中におけるプロセスのCPUコアへの割当を決定しているが、複数の計算機の中で全体のプロセスの負荷値、CPUコアの性能値を参照して、プロセスにCPUコアを割り当てるようにしてもよい。
第1の実施形態では、CPUコアにプロセスを分散して割り当てるために、コア割当部200は、最初に性能値が大きい順にCPUコアを割り当て、次に小さい順に割り当て、以下これを繰り返していた。例えば、性能値が大きい順にCPUコアA、CPUコアB、CPUコアCがあるとすると、コア割当部200は、負荷値が大きいプロセスから順に、CPUコアA、CPUコアB、CPUコアC、CPUコアC、CPUコアB、CPUコアAと割り当て、以下これを繰り返す。
これに対して、コア割当部200は、負荷値が小さいプロセスから順に、CPUコアC、CPUコアB、CPUコアA、CPUコアA、CPUコアB、CPUコアCと割り当て、以下これを繰り返してもよい。また、コア割当部200は、負荷値が大きいプロセスから順に、未割当性能値が大きいCPUコアを割り当ててもよい。例えば、コア割当部200は、CPUコアA、CPUコアB、CPUコアCに負荷値が大きい方からプロセスを割り当てる。この割り当ての結果、未割当性能値の大きさが、CPUコアB、CPUコアA、CPUコアCの順になったら、コア割当部200は、負荷値が大きいプロセスから順にCPUコアB、CPUコアA、CPUコアCを割り当てていく。
第1の実施形態では、全てのCPUコアにプロセスを割り当てており、割り当て後に新たな専有プロセスにCPUコアを割り当てることができない。割り当て後に新たな専有プロセスにCPUコアを割り当てることを考慮して、コア割当部200は、所定の性能値を持つ所定の数のCPUコアを除いて、プロセスを割り当てるようにしてもよい。
≪効果≫
以上に説明したように、第1〜3の実施形態においてコア割当部200は、専有プロセスに対しては、プロセスの負荷値以上で最小の性能値のCPUコアを割り当てることで、専有されたCPUコアにおいて使用されないリソースを削減するようにして、効率的なCPU割り当てを行う。第1の実施形態においてコア割当部200は、残りのCPUコアに分散してプロセスを割り当てることで、同時に実行されるプロセス数を増加させ、全体のプロセスの処理時間を短縮することができる。第2の実施形態においてコア割当部200は、性能値が小さいCPUコアに集中的にプロセスを割り当てることで、割当決定処理後にプロセスを割り当てる場合であっても、負荷値が大きい専有プロセスに割り当てることができる。第3の実施形態においてコア割当部200は、性能値が大きいCPUコアに集中的にプロセスを割り当てることで、割当決定処理後にプロセスを割り当てる場合であっても、より多くの専有プロセスに割り当てられることができる。
100 計算機
110 プロセス
120 OS
130 スケジューラ
140 ハードウェア管理部
150 プロセス管理
200 コア割当部
210 CPUコア情報管理部
220 プロセス情報管理部
230、230A、230B 割当決定部
240 CPUコア性能加算値表
250 CPUコア性能値表
260 プロセス負荷加算値表
270 プロセス負荷値表
280 プロセスコア割当表

Claims (6)

  1. 複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機であって、
    各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するCPUコアを割り当てるコア割当部を備え、
    前記コア割当部は
    前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当て
    前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるCPUコアへ所定の順番で割り当て、
    前記所定の順番は、
    性能値が最大のCPUコアから順に割り当てる順番と、性能値が最小のCPUコアから順に割り当てる順番とを繰り返す順番である
    ことを特徴とする計算機。
  2. 複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機であって、
    各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するCPUコアを割り当てるコア割当部を備え、
    前記コア割当部は
    前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当て
    前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のCPUコアへ割り当てる
    ことを特徴とする計算機。
  3. 複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機であって、
    各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定して、前記プロセスが稼働するCPUコアを割り当てるコア割当部を備え、
    前記コア割当部は
    前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当て
    前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のCPUコアへ割り当てる
    ことを特徴とする計算機。
  4. 複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機におけるCPUコア割当方法であって、
    前記計算機は、
    各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、
    前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当てるステップと
    前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であるCPUコアへ所定の順番で割り当てるステップとを実行し、
    前記所定の順番は、
    性能値が最大のCPUコアから順に割り当てる順番と、性能値が最小のCPUコアから順に割り当てる順番とを繰り返す順番である
    ことを特徴とするCPUコア割当方法。
  5. 複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機におけるCPUコア割当方法であって、
    前記計算機は、
    各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、
    前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当てるステップと
    前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最小のCPUコアへ割り当てるステップと
    を実行することを特徴とするCPUコア割当方法。
  6. 複数のCPUコアを搭載し、複数のプロセスを稼働させる計算機におけるCPUコア割当方法であって、
    前記計算機は、
    各々の前記CPUコアに単位時間当たりの計算量を示す性能値を設定し、各々の前記プロセスに実行時に使用する前記計算量を示す負荷値を設定するステップと、
    前記プロセスがCPUコアを専有するプロセスを示す専有プロセスである場合に、当該専有プロセスを、当該専有プロセスの負荷値以上の性能値であって、最小の性能値が設定されたCPUコアに割り当てるステップと
    前記専有プロセスではなくCPUコアが割り当てられていないプロセスを示す未割当プロセスを、前記負荷値が大きい前記未割当プロセスから順番に、専有されていないCPUコアであり、性能値と割当済であるプロセスの負荷値の合計値との差が当該未割当プロセスの負荷値以上であって、性能値が最大のCPUコアへ割り当てるステップと
    を実行することを特徴とするCPUコア割当方法。
JP2017197893A 2017-10-11 2017-10-11 計算機およびcpuコア割当方法 Active JP6969268B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017197893A JP6969268B2 (ja) 2017-10-11 2017-10-11 計算機およびcpuコア割当方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017197893A JP6969268B2 (ja) 2017-10-11 2017-10-11 計算機およびcpuコア割当方法

Publications (2)

Publication Number Publication Date
JP2019071026A JP2019071026A (ja) 2019-05-09
JP6969268B2 true JP6969268B2 (ja) 2021-11-24

Family

ID=66441242

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017197893A Active JP6969268B2 (ja) 2017-10-11 2017-10-11 計算機およびcpuコア割当方法

Country Status (1)

Country Link
JP (1) JP6969268B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113032112A (zh) * 2019-12-25 2021-06-25 上海商汤智能科技有限公司 资源调度方法及装置、电子设备和存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5790758B2 (ja) * 2011-03-08 2015-10-07 富士通株式会社 スケジューリング方法およびスケジューリングシステム
US20150326495A1 (en) * 2012-12-14 2015-11-12 Nec Corporation System construction device and system construction method

Also Published As

Publication number Publication date
JP2019071026A (ja) 2019-05-09

Similar Documents

Publication Publication Date Title
Farahnakian et al. Energy-aware VM consolidation in cloud data centers using utilization prediction model
JP6241300B2 (ja) ジョブスケジューリング装置、ジョブスケジューリング方法、およびジョブスケジューリングプログラム
CN109783237B (zh) 一种资源配置方法及装置
US8261281B2 (en) Optimizing allocation of resources on partitions of a data processing system
US7992151B2 (en) Methods and apparatuses for core allocations
JP5040773B2 (ja) メモリバッファ割当装置およびプログラム
Arshad et al. Utilizing power consumption and SLA violations using dynamic VM consolidation in cloud data centers
JP5616523B2 (ja) 情報処理システム
Ahmad et al. An efficient list scheduling algorithm with task duplication for scientific big data workflow in heterogeneous computing environments
Deng et al. A data and task co-scheduling algorithm for scientific cloud workflows
Choi et al. Task Classification Based Energy‐Aware Consolidation in Clouds
Li et al. An energy-aware scheduling algorithm for big data applications in Spark
Qin Performance comparisons of load balancing algorithms for I/O-intensive workloads on clusters
CN111767023A (zh) 数据排序方法和数据排序系统
JP6969268B2 (ja) 計算機およびcpuコア割当方法
Farzaneh et al. A novel virtual machine placement algorithm using RF element in cloud infrastructure
Sudarsan et al. Scheduling resizable parallel applications
KR102563648B1 (ko) 멀티 프로세서 시스템 및 그 구동 방법
Divya et al. Workload characteristics and resource aware Hadoop scheduler
Lin et al. Joint deadline-constrained and influence-aware design for allocating MapReduce jobs in cloud computing systems
Qu et al. Improving the energy efficiency and performance of data-intensive workflows in virtualized clouds
CN113886057B (zh) 异构众核上基于剖析技术以及数据流信息的动态资源调度方法
Wang et al. Energy-aware task scheduling of mapreduce cluster
Rodrigo Álvarez et al. A2l2: An application aware flexible hpc scheduling model for low-latency allocation
JP2012038275A (ja) 取引計算シミュレーションシステム、方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191219

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201225

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210302

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210430

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210928

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211011

R150 Certificate of patent or registration of utility model

Ref document number: 6969268

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150