JP5880542B2 - マルチコアプロセッサシステムおよびスケジューリング方法 - Google Patents

マルチコアプロセッサシステムおよびスケジューリング方法 Download PDF

Info

Publication number
JP5880542B2
JP5880542B2 JP2013504459A JP2013504459A JP5880542B2 JP 5880542 B2 JP5880542 B2 JP 5880542B2 JP 2013504459 A JP2013504459 A JP 2013504459A JP 2013504459 A JP2013504459 A JP 2013504459A JP 5880542 B2 JP5880542 B2 JP 5880542B2
Authority
JP
Japan
Prior art keywords
cpu
thread
processor
cpus
processes
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.)
Expired - Fee Related
Application number
JP2013504459A
Other languages
English (en)
Other versions
JPWO2012124077A1 (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012124077A1 publication Critical patent/JPWO2012124077A1/ja
Application granted granted Critical
Publication of JP5880542B2 publication Critical patent/JP5880542B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • G06F9/5088Techniques for rebalancing the load in a distributed system involving task migration

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Description

本発明は、マルチコアプロセッサシステムにおけるプロセッサへのスレッド割り当てを変更するマルチコアプロセッサシステムおよびスケジューリング方法に関する。
マルチコアプロセッサシステムにおけるスケジューリング手法としては、負荷の高いノード(プロセッサ)から負荷の低いノードにスレッドを移動するという手法が知られている(たとえば、下記特許文献1参照。)。
同一プロセスに属するスレッド同士は同じデータを共有することが多く、また頻繁に通信をおこなうことが知られている。このため、同一プロセスに属するスレッドを同じプロセッサに割り当てることにより、プロセッサ間通信が削減でき、また、キャッシュの利用を効率化できるようになる。これを考慮したスケジューリング手法としては、プロセス起動時に過去の実行履歴から対象プロセス内の全スレッドを同一のプロセッサに割り当てるか、複数プロセッサに割り当てるかを決定する手法が知られている(たとえば、下記特許文献2参照。)。
特開平8−30472号公報 特開2002−278778号公報
プロセッサに対する負荷分散の点でみれば、スレッドを別々のプロセッサで実行した方が負荷バランスをとりやすい。しかし、上記特許文献2のようにプロセス起動時に同一のプロセッサに割り当てるか否かを決定する構成では、プロセスの起動時にしか決定を行わないためプロセス起動後に他のプロセスが起動もしくは終了を繰り返した場合の負荷バランスの変動には対応出来ないという問題がある。
また、特許文献1の技術では、負荷の高いプロセッサのスレッドを負荷の低いプロセッサのスレッドに移動させるだけであり、一つのプロセスを同じプロセッサに割り当てることはできない。仮に、特許文献1と特許文献2の技術を組み合わせ、負荷分散が必要なときに負荷バランスと同一プロセスに属するスレッドの割当先を考慮して、プロセスを複数のプロセッサに分散させるか否かを判断することが考えられるが、単に特許文献1と特許文献2の技術を組み合わせただけでは、負荷分散時に移動対象のスレッドを決定するための判断処理が増加するため、負荷分散のためのオーバーヘッドが増加するという問題が生じる。
すなわち、プロセス数が増大したとき、プロセスが断片化して複数のプロセッサに同一プロセスのスレッドが分散して割り当てられると、複数のプロセッサでスレッドを処理する組み合わせが膨大となる。このため、処理するプロセスを限られた時間で負荷バランスをとりつつ、同じプロセスを同じプロセッサに割り当てる組み合わせを見つけることは難しくなり、マルチコアプロセッサにおける多数のプロセスが断片化した際の断片化の改善および処理効率を向上できる手法が望まれていた。
開示のマルチコアプロセッサシステムおよびスケジューリング方法は、上述した問題点を解消するものであり、プロセスが断片化しても簡単に複数のプロセッサのプロセスを揃えることができることを目的とする。
上述した課題を解決し、目的を達成するため、開示技術は、複数のCPUと、前記複数のCPUによって共有されるメモリと、前記メモリに格納され、前記複数のCPUが実行しているプロセスの数を示す第1プロセス数と、前記複数のCPU毎に割り当てられたプロセスの数を示す第2プロセス数とに基づいて、前記複数のCPUへのスレッドの割り当ての変更を指示する監視ユニットと、を含む。
開示のマルチコアプロセッサシステムおよびスケジューリング方法によれば、プロセスが断片化しても簡単に複数のプロセッサのプロセスを揃えることができるという効果を奏する。
図1は、実施の形態にかかるマルチコアプロセッサシステムの構成例を示すブロック図である。 図2は、断片化監視部の内部構成を示すブロック図である。 図3は、断片化監視部の動作処理例を示すフローチャートである。 図4は、OSの負荷分散動作処理例を示すフローチャートである。 図5は、OSの負荷分散部の停止通知時の動作処理例を示すフローチャートである。 図6は、OSの負荷分散部の起動通知時の動作処理例を示すフローチャートである。 図7は、OSの負荷分散部がおこなう負荷分散処理例を示すフローチャートである。 図8は、スレッドの理想的な割り付け状態を示す図である。 図9は、プロセスの断片化が進んだ状態を示す図である。 図10は、他のプロセッサへのスレッドの移動状態を示す図である。 図11は、再割り当て後プロセスの断片化が改善された状態を示す図である。
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。
(実施の形態)
開示のマルチコアプロセッサシステムでは、通常は、負荷バランスのみを考慮してスレッド単位で負荷分散をおこなう。そして、プロセスが断片化し、プロセスに属するスレッドが複数のプロセッサに散らばって実行されたときには、任意のプロセッサを再起動させることにより、このプロセッサに割り当てられている処理を一旦他のプロセッサに分散させ、再起動させた任意のプロセッサに再度プロセスを移動するように負荷分散をおこなう。再起動するプロセッサは、プロセスの処理を他のプロセッサに一時的に全て移動させた後、再度プロセスの処理を受け入れる構成であれば良く、プロセッサの機能を一時停止させることに相当する。これにより、プロセスの断片化により複数のプロセッサに散らばったスレッドを一つのプロセッサにまとめやすくなり、単純な処理で断片化を軽減しつつプロセッサ間の負荷バランスを均等化できるようになる。
(マルチコアプロセッサシステムの構成例)
図1は、実施の形態にかかるマルチコアプロセッサシステムの構成例を示すブロック図である。図1に記載のように、マルチコアプロセッサシステム100は、複数のプロセッサ(CPU#0〜#3)101と、メモリ102とがバス103で結合された共有メモリ型のマルチコアプロセッサシステムを含む。
この実施の形態では、マルチコアプロセッサシステム100は、プロセスの断片化を監視する断片化監視部(監視ユニット)104を備え、バス103に接続されている。断片化監視部104は、断片化監視の機能を持っていれば論理回路等からなるハードウェア、あるいはソフトウェアのいずれでも実現できる。
オペレーティングシステム(OS)110は、複数のプロセッサ101がそれぞれ実行するプロセスをプロセッサ101毎に管理するプロセス管理部121と、プロセス内のスレッドをそれぞれ管理するスレッド管理部122を含む。また、複数のプロセッサ101の負荷を統合して監視する負荷監視部123と、プロセッサ101の負荷を他のプロセッサ101に割り当てる負荷分散部124とを含む。
メモリ102には、マルチコアプロセッサシステム100全体で稼働しているプロセッサ数を記録するための稼働プロセス数(第1プロセス数)を示す稼働プロセス数情報131と、複数のプロセッサ(CPU#0〜#3)101にそれぞれ割り当てられているプロセス数(第2プロセス数)を示す割当プロセス数情報132の記憶領域が設けられている。
起動中のプロセスから新たに別のプロセスを起動する場合は、起動中のプロセスからOS110にプロセス生成を依頼する。
OS110は、プロセス管理部121が指示したプロセスを生成し、プロセスの生成毎にメモリ102の稼働プロセス数情報131の値を1増やす。同時に、スレッド管理部122に依頼してプロセス内のスレッドを生成する。スレッドが生成されると、負荷分散部124が負荷監視部123が収集したプロセッサの負荷情報に基づいて、負荷の低いプロセッサに対して、生成したスレッドを割り当てる。
OS110のプロセス管理部121は、プロセッサ101に割り当てられているプロセス数をそれぞれ管理する。新たにスレッドが割り当てられたプロセッサ101は、このプロセッサ101に対応するOS110のプロセス管理部121とスレッド管理部122により、新たに割り当てられたスレッドと同じプロセスに属する他のスレッドが割り当てられているかを確認する。確認の結果、同じプロセスに属する他のスレッドが無い場合には、プロセス管理部121は、メモリ102のプロセッサ101に対応する割当プロセス数情報132の値を1増加させる。
また、OS110の負荷監視部123は、定期的に各プロセッサ101の負荷を監視し、負荷分散部124は、負荷が最大のプロセッサ101と、負荷が最小のプロセッサ101との間での負荷の差が一定以上になった場合は、負荷が最大のプロセッサ101から負荷が最小のプロセッサ101に任意のスレッドを移動させる。このとき、スレッドが移動した側のプロセッサ101では、割当プロセス数情報132を参照し、移動したスレッドと同じプロセスに属するスレッドが他のプロセッサ101にも割り当てられているかを確認する。確認の結果、割り当てられていない場合は、メモリ102の自プロセッサ101に対応する割当プロセス数情報132の値を1減少させる。また、スレッドが移動してきた側のプロセッサ101では新規にプロセスが生成されたときと同様に割当プロセス数情報132の値を変更する(1増加させる)。
また、稼働中のスレッドが新たにスレッドを生成する場合は、稼働中のスレッドがOS110に依頼し、OS110のスレッド管理部122がスレッドを生成する。このときに生成されたスレッドは、依頼元のスレッドと同じプロセスに属することになる。スレッドが生成されると、この生成されたスレッドは、新たにプロセスが生成されたときと同様に負荷分散部124により負荷の低いプロセッサ101に割り当てられて、このプロセッサ101に対する割当プロセス数情報132の値を変更する(1増加させる)。
稼働中のスレッドが終了した場合は、スレッド管理部122がスレッドを削除して、スレッドがプロセッサ101から移動して出て行くときと同様に、該当するプロセッサ101に同じプロセスに属するスレッドが無ければ割当プロセス数情報132の値を1減減少させる。また、マルチコアプロセッサシステム100全体で同じプロセスに属するスレッドが無ければ、プロセスが終了したとしてプロセス管理部121でプロセスを削除して、稼働プロセス数情報131の値を1減少させる。
上述した負荷の決定方法には、たとえばプロセッサ101の稼働率を利用する方法や、スレッドの待機時間を利用する方法、あらかじめスレッドの処理時間を測定しておき、割り当てられているスレッドの残り処理時間の合計を利用する方法、またこれら複数の指標を組み合わせて負荷を決定する方法などの方法があるが、この実施の形態ではいずれの方法で負荷を決定しても構わない。
図2は、断片化監視部の内部構成を示すブロック図である。断片化監視部104は、プロセス数取得部201と、断片化率算出部202と、再起動判断部203と、再起動要求出力部204と、バスIF部210とを含む。バスIF部210は、バス103に対し信号を入出力するためのインターフェースである。
プロセス数取得部201は、メモリ102に記憶された稼働プロセス数情報131と、プロセッサ毎の割当プロセス数情報132をそれぞれ取得する。断片化率算出部202は、プロセス数取得部201により取得した稼働プロセス数情報131と、割当プロセス数情報132に基づき、下記式によりプロセスの断片化率(断片化係数)を算出する。稼働プロセス数は、全てのプロセッサで現在稼働しているプロセス数、割り当てプロセス数の合計とは、各CPU101に割り当てられたプロセス数の合計である。
断片化率=割り当てプロセス数の合計/稼働プロセス数
再起動判断部203は、断片化率と所定の閾値とを比較する比較部203aを含む。比較部203aの比較により、断片化率が所定の閾値を超えた場合には、断片化が進行したと判断し、割当プロセス数情報132を参照し、最も割り当てプロセス数の多いプロセッサ101(OS110)にプロセスを再割り当てするための再起動要求を出力する。この再起動要求は、再起動要求出力部204を介して断片化が進んだプロセッサ101に出力される。
再起動判断部203において断片化の判断に用いる閾値は、下記の各条件1〜5のいずれか、もしくは組み合わせに基づき設定する。
1.プロセッサ数
プロセッサ数が多いほど断片化しやすい。したがって、この条件ではプロセッサ数が多いほど閾値を高めに設定する。
2.キャッシュサイズ
キャッシュサイズが大きければ断片化の影響は小さい。したがって、この条件ではキャッシュサイズが大きいほど閾値を低めに設定する。
3.コヒーレント操作時間
コヒーレント操作時間が短ければ断片化の影響は小さい。したがって、この条件ではコヒーレント操作時間が短いほど閾値を低めに設定する。
4.動作時間(プロセッサを停止させてから再起動させるまでの時間)
動作時間が長ければ閾値を高めに設定して再起動の頻度を下げる。
5.開示技術によりプロセスが揃う確率
プロセスが揃う確率が高ければ閾値は低めに設定する。
(プロセスの断片化解消処理動作)
(断片化監視部の動作)
図3は、断片化監視部の動作処理例を示すフローチャートである。断片化監視部104では、プロセス数取得部201は、定期的にメモリ102に記憶された稼働プロセス数情報131と、プロセッサ毎の割当プロセス数情報132をそれぞれ取得する(ステップS301)。つぎに、断片化率算出部202により、取得した稼働プロセス数情報131と、割当プロセス数情報132に基づき、断片化率を算出する(ステップS302)。
そして、再起動判断部203は、断片化率算出部202により算出された断片化率が所定の閾値を超えたか否かを判断する(ステップS303)。断片化係数が所定の閾値を超えた場合には(ステップS303:Yes)、断片化が進行したと判断する。そして、再起動判断部203は、最も割り当てプロセス数の多いプロセッサ101(OS110)に再起動要求を出力する(ステップS304)。そして、プロセッサ101の再起動によるプロセスの再割り当て終了を待ち、終了する。一方、断片化係数が所定の閾値未満の場合には(ステップS303:No)、断片化していないと判断する。そして、再起動判断部203は、一定時間待機し(ステップS306)、所定時間後、定期的に再度ステップS301以下の処理を実行する。
(OSによる負荷分散の処理動作)
図4は、OSの負荷分散動作処理例を示すフローチャートである。図3の処理により、OS110は、断片化監視部104からあるプロセッサ101に対する再起動要求を受ける(ステップS401)。これにより、OS110は、負荷分散部124に対して停止通知をおこなう(ステップS402)。そして、負荷分散部124によるスレッドの移動終了を確認する(ステップS403)。ここで、移動中のスレッドの移動終了を待ち(ステップS404:No)、スレッドの移動終了が確認されれば(ステップS404:Yes)、再起動要求を受けたプロセッサ101を再起動させ(ステップS405)、負荷分散部124に起動通知をおこない(ステップS406)、終了する。
図5は、OSの負荷分散部の停止通知時の動作処理例を示すフローチャートである。負荷分散部124は、停止通知を受けると(ステップS501)、最も処理の軽い稼働中のプロセッサ101を選択する(ステップS502)。つぎに、再起動要求を受けた停止予定のプロセッサ101から任意のスレッドを他のプロセッサ101に移動させる(ステップS503)。これにより、移動先のプロセッサ101の負荷情報を更新する(ステップS504)。
そして、停止予定のプロセッサ101の全スレッドを移動させたか判断する(ステップS505)。全スレッドが移動するまでの間は(ステップS505:No)、ステップS502以下の処理を再度実行する。そして、全スレッドが移動し終わると(ステップS505:Yes)、停止予定のプロセッサ101を停止状態として記憶する(ステップS506)。そして、停止予定のプロセッサ101に移動終了を通知し(ステップS507)、処理を終了する。
図6は、OSの負荷分散部の起動通知時の動作処理例を示すフローチャートである。負荷分散部124は、起動通知を受けると(ステップS601)、起動通知を受けたプロセッサ101を起動状態として記録し(ステップS602)、通常の負荷分散処理をおこない(ステップS603)、処理を終了する。
図7は、OSの負荷分散部がおこなう負荷分散処理例を示す図である。図6のステップS603の処理内容を記載してある。OS110の負荷分散部124は、負荷監視部123により監視した各プロセッサ101の負荷に基づき、最も負荷の大きいプロセッサ101と、最も負荷の小さいプロセッサ101とを選択する(ステップS701)。そして、負荷分散部124は、これら最も負荷の大きいプロセッサ101と、最も負荷の小さいプロセッサ101との間の負荷の差を所定の閾値と比較する(ステップS702)。比較の結果、負荷の差が閾値未満であれば(ステップS702:No)、負荷分散処理は不要であり処理を終了する。
一方、最も負荷の大きいプロセッサ101と、最も負荷の小さいプロセッサ101の負荷の差が閾値以上であれば(ステップS702:Yes)、以下の負荷分散処理をおこなう。ここで、負荷分散部124は、最も負荷が大きいプロセッサ101に割り当てられている全スレッドを他のプロセッサ101に割り当て、全プロセッサ101の負荷が均一になるように制御する。
はじめに、スレッド管理部122は、高負荷のプロセッサ101から最も負荷の高いスレッドを選択し(ステップS703)、プロセス管理部121は、選択したスレッドが属するプロセスを取得する(ステップS704)。各スレッドは、それぞれ処理量(負荷)が異なるため、ここでは、最も処理の高いスレッドから順に選択し、スレッド移動を処理するようにしている。
つぎに、負荷監視部123は、ステップS704で取得したプロセスに属するスレッドの割当先のプロセッサ101を取得する(ステップS705)。そして、負荷監視部123は、ステップS705にて取得したスレッドの割当先のプロセッサ101が全て同一プロセッサ101であるか否かを判断する(ステップS706)。この判断の結果、スレッドの割当先のプロセッサ101が全て同一プロセッサ101であれば(ステップS706:Yes)、スレッドの移動は不要であるため、ステップS703に戻り、違うスレッドに対する処理をおこなう。
一方、負荷監視部123は、ステップS706の判断結果、スレッドの割当先のプロセッサ101が全て同一のプロセッサ101でなければ(ステップS706:No)、つぎに、選択可能なスレッドがあるか判断する(ステップS707)。選択可能なスレッドがあれば(ステップS707:Yes)、負荷分散部124は、選択されたスレッドを低負荷のプロセッサ101に移動させる(ステップS708)。この際、複数のプロセッサ101でばらばらに実行されているスレッドを優先して再起動させるプロセッサ101に割り当てるよう、移動するスレッドを決定する。
一方、選択可能なスレッドが無ければ(ステップS707:No)、負荷分散部124は、任意のスレッドを低負荷のプロセッサ101に移動させる(ステップS709)。ステップS708、およびステップS709の処理後、負荷分散部124は、負荷情報を更新し(ステップS710)、ステップS701に戻り、ステップS701以下の処理を継続する。
(プロセスの断片化解消の具体的処理例)
つぎに、プロセスの断片化解消の具体的処理例について図8〜図11を用いて説明する。図8は、スレッドの理想的な割り付け状態を示す図である。単純な例として4つのプロセッサ101でそれぞれ4個のスレッドを持つプロセスが4個起動している状態として説明する。各スレッドの負荷量が均一だとすると、図8のように、一つのプロセッサ101に一つのプロセスが割り当てられている状態が理想的な状態となる。図中”A−1”とは、プロセスAに属する1番目のスレッドという意味である。他も同様で、この図ではA,B,C,Dの4つのプロセスがあり、A〜Dの4個のプロセスは、それぞれ1〜4までの4個のスレッドを持っているとする。
図9は、プロセスの断片化が進んだ状態を示す図である。プロセスおよびスレッドの起動と終了と負荷分散を繰り返した結果、図9に示すように各プロセスに属するスレッドが異なるプロセッサに分散され実行されているとする。
図9に示す状態のとき、稼働プロセス数は4となり、プロセッサ(CPU#0)101の割り当てプロセス数はA〜Dの4個、プロセッサ(CPU#1)101の割り当てプロセス数はプロセスA,Bの2個、プロセッサ(CPU#2)101の割り当てプロセス数はプロセスA,Cの2個、プロセッサ(CPU#3)101の割り当てプロセス数はプロセスC,Dの2個となっている。この際の断片化率は、割り当てプロセス数の合計=4+2+2+2=10、稼働プロセス数=4であるため、10/4=2.5となる。そして、求めた断片化率が閾値を超えていると、断片化監視部104の再起動判断部203は、最もプロセス数が多い(割り当てプロセス数が4個)のプロセッサ(CPU#0)101に再起動要求を出力する。
図10は、他のプロセッサへのスレッドの移動状態を示す図である。プロセッサ(第1CPU#0)101では、再起動要求を受けると、他のプロセッサ(第2群のCPU#1〜#3)101に対してプロセッサ(CPU#0)101へのスレッド割り当てを禁止する指示を出す。また、プロセッサ(CPU#0)101に割り当てられていたスレッドA−1,B−1,C−1,D−4(図中斜線のスレッド)を他のプロセッサ(CPU#1〜#3)101に移動させる。この際の移動は、上述したようにOS110の負荷分散部124が実行し、移動先の複数のプロセッサ(CPU#1〜#3)101の負荷が均等になるようにおこなう。
このとき、割り当て対象となるプロセッサ101の数が減るため、同じプロセスに属するスレッドが同じプロセッサに割り当てられる可能性が高くなる。図10に示す例では、プロセスBに属する全てのスレッドB1〜B4がプロセッサ(CPU#1)101に割り当てられ、また、プロセスDに属する全てのスレッドD−1〜D−4がプロセッサ(CPU#3)101に割り当てられた状態を示している。
上記説明では、プロセス数がA〜Dの4個だけとしたが、実際のシステムでは起動直後でも数十〜100を超えるプロセスが稼働しているため、再起動により一時的にプロセッサ101の数が一つ減るだけでも、全スレッドが同一プロセッサに割り当てられることが期待できる。
この後、プロセッサ(CPU#0)101は、割り当てられたスレッドを全て他のプロセッサ(CPU#1〜#3)101に移動させると、スレッドが移動完了したことを他のプロセッサ(CPU#1〜#3)101に通知し、再起動する。
プロセッサ(CPU#0)101の再起動後において、プロセッサ(CPU#1〜#3)101側ではOS110の負荷監視部123が、プロセッサ(CPU#0)101に割り当てられているスレッドが無く、負荷が極端に低い状態であることを検出する。これにより、負荷分散部124は、プロセッサ(CPU#1〜#3)101の中で負荷の高いプロセッサから順に、プロセッサ(CPU#0)101に対して全プロセッサの負荷が均一になるまでスレッドを移動させていく。
このようなスレッドの移動について、プロセス内のスレッド数に対して、負荷の高いプロセッサ101に割り当てられているスレッド数が少ないスレッドを優先して再起動させたプロセッサ(CPU#0)101に移動させる。上記の例では、各スレッドそのものの負荷は一定であるとしている(図中各スレッドの大きさを負荷としてある)。したがって、上記の例では、プロセッサ101に対する負荷はスレッドの数となる。
図10において、スレッド数が最も多く負荷が高いプロセッサ101は、プロセッサ(CPU#1)101であり、このプロセッサ(CPU#1)101からスレッドを一つプロセッサ(CPU#0)101に移動させる。プロセッサ(CPU#1)101には、プロセスBに属するスレッドが4つ(B−1〜B−4)と、プロセスAに属するスレッドが2つ(A−1,A−2)割り当てられており、プロセスのスレッドが揃っていないプロセスAに属するスレッド(A−1またはA−2)のうちの任意の一つ(たとえばA−2)をプロセッサ(CPU#0)101に移動させる。
これにより、全てのプロセッサ(CPU#1〜#3)101の負荷量が均一(スレッド数がいずれも4個)になるため、以降は、任意の順番でプロセッサ(CPU#1〜CPU#3)101に割り当てられているスレッドを一つずつプロセッサ(CPU#0)101に移動させていく。
この後、プロセッサ(CPU#1)101から残ったプロセスAに属するスレッド(たとえばA−1)をプロセッサ(CPU#0)101に移動させる。また、プロセッサ(CPU#2)101では、プロセスCに属するスレッドが3つ(C−1〜C−3)、プロセスAに属するスレッドが2つ(A−3,A−4)割り当てられているため、プロセスAに属するスレッドの任意の一つ(たとえばA−3)をプロセッサ(CPU#0)101に移動させる。さらに、プロセッサ(CPU#3)101では、プロセスDに属するスレッドが4つ(D−1〜D−4)、プロセスCに属するスレッドが一つ(C−4)割り当てられているため、プロセスCに属するスレッド(C−4)をプロセッサ(CPU#0)101に移動させる。これにより、全てのプロセッサ(CPU#0〜#3)101の負荷を均一にすることができ、スレッドの移動処理を終了する。
図11は、再割り当て後プロセスの断片化が改善された状態を示す図である。プロセッサ(CPU#0)101に対する再割り当て終了後においては、図11の例では、プロセスBに属する全スレッド(B−1〜B−4)が同一のプロセッサ(CPU#1)101に割り当てられ、また、プロセスDに属する全スレッド(D−1〜D−4)が同一のプロセッサ(CPU#3)101に割り当てられたことになる。また、プロセスAおよびプロセスCについても、断片化時(図9の状態)に比して、同じプロセッサ(CPU#0,#2)101に割り当てられているスレッドの数が増加している。
これにより、複数のプロセッサ(CPU#0〜#3)101で実行されるスレッドは、同一のプロセスに属するものが多くなり、処理効率を向上できるようになる。キャッシュ利用の効率化や、プロセッサ間通信の削減の観点からすれば、同じプロセスに属するスレッドが全て同じプロセッサ101で実行されていなくても、全スレッド中で同じプロセッサ101に割り当てられている割合が高ければ、ある程度の効果は期待できる。なお、図11の状態における断片化率は、(2+1+2+1)/4=1.5となり、断片化が軽減したことになる。
このように、プロセスの断片化が進行したときに、一つのプロセッサに割り当てられたスレッドを別のプロセッサに分散させ、擬似的に稼働プロセッサ数を減らすことで断片化を軽減することが期待できる。上記の例では、4つのプロセッサに対してプロセス数が4個で、スレッド数も1プロセスに付き均等に4つずつとする簡単な例とした。現実のシステムでは、プロセッサの数に比してプロセス数は遙かに多いため、断片化の解消が期待できる。
ところで、プロセス数が多くなると、プロセッサ間での負荷バランスを保ちつつ、断片化が最小になるようなプロセッサへのスレッドの割り当てを決定するのは非常に困難であったが、開示の技術によれば、通常は負荷バランスのみを考慮した割り当てをおこない、プロセスの断片化が規定以上進行したときのみ、任意のプロセッサを再起動させるだけでプロセスの断片化を解消できるようになる。また、開示技術は、プロセスの断片化を解消する処理について、断片化を最小にすることを主とするものではなく、簡単な処理で断片化を改善させるものである。このため、開示技術によれば、稼働プロセス数が多いほど、断片化を最小にするための手法や、断片化を考慮せずに負荷分散する手法に比べて、簡単な構成で断片化を解消し、同一のプロセッサで一つのプロセスのスレッドをまとめやすくなり、システム全体の処理効率を向上できるようになる。
一般的に、プロセッサ数とプロセス数との関係による全プロセスの組み合わせの探索については、
1.プロセッサ数:少、プロセス数:少の場合、全プロセス(スレッド)の組み合わせの探索が可能。
2.プロセッサ数:少、プロセス数:多の場合、全プロセスの組み合わせが爆発的に増大するので全探索は不可能。
3.プロセッサ数:多の場合、プロセッサ数が多いことだけでプロセスを揃えることが困難。
上記のように、プロセス数とスレッド数が多く、断片化を解消しつつ負荷バランスが均等になる最適なプロセスおよびスレッドのプロセッサへの割り当ての組み合わせを決定するには、非常に時間がかかる。この点、上記の開示技術を、プロセッサ数が少なく(2〜4CPU)、プロセス数が多い場合に適用することにより、プロセッサの再起動だけでプロセスを同一のプロセッサに揃えさせることができ、処理効率を向上できるようになる。
以上説明した開示技術では、通常時はプロセッサ間の負荷バランスのみを考慮したスケジューリングをおこなっており、通常時にスケジューリングのオーバーヘッドは増加しない。そして、プロセスの断片化が進んだときには、一時的に稼働プロセッサ数を減らすという簡単な処理で断片化を改善できる。このように、簡単な処理でプロセスの断片化を改善しつつ、プロセッサ間の負荷バランスを均等化できるようになる。
上述した本実施の形態に関し、さらに以下の付記を開示する。
(付記1)複数のCPUと、
前記複数のCPUによって共有されるメモリと、
前記メモリに格納され、前記複数のCPUが実行しているプロセスの数を示す第1プロセス数と、前記複数のCPUのそれぞれに割り当てられたプロセスの数を示す第2プロセス数とに基づいて、前記複数のCPUへのスレッドの割り当ての変更を指示する監視ユニットと、
を含むことを特徴とするマルチコアプロセッサシステム。
(付記2)前記監視ユニットは、前記第1プロセス数に対する前記第2プロセス数の割合と、所定の閾値とを比較する比較部を含むこと
を特徴とする付記1に記載のマルチコアプロセッサシステム。
(付記3)前記監視ユニットは、
前記比較部による比較結果が前記閾値を超えているときに、第1CPUにスレッドの割り当ての変更を指示すること
を特徴とする付記2に記載のマルチコアプロセッサシステム。
(付記4)前記監視ユニットが前記複数のCPUへのスレッドの割り当て変更を指示するとき、所定の第2プロセス数を有する第1CPUに再起動要求を出力すること
を特徴とする付記1または2に記載のマルチコアプロセッサシステム。
(付記5)前記第1プロセス数および第2プロセス数は前記メモリに格納されること
を特徴とする付記1〜4のいずれか一つに記載のマルチコアプロセッサシステム。
(付記6)前記監視ユニットは、閾値を、前記CPUの数、キャッシュサイズ、コヒーレント操作時間、前記CPUを停止させてから再起動させるまでの時間、プロセスが揃う確率、のいずれかあるいは組み合わせに基づき設定することを特徴とする付記2〜5のいずれか一つに記載のマルチコアプロセッサシステム。
(付記7)前記CPUのオペレーティングシステムは、
第1CPUに対する前記監視ユニットからの再起動要求を受けて、複数の前記CPUのうち、高負荷のCPUから順に高負荷のスレッドを前記第1CPUに再割り当てをおこなう負荷分散部を含むことを特徴とする付記3〜6のいずれか一つに記載のマルチコアプロセッサシステム。
(付記8)複数のCPUを有するマルチコアプロセッサシステムにおけるスケジューリング方法であって、
同一プロセスに含まれる複数のスレッドが異なる複数のCPUに割り当てられる割合に基づくスレッドの再割り当ての指示に基づき、
第1CPUへのスレッドの割り当ての禁止を、第1スレッドが割り当てられた第2CPU群に指示し、
前記第1CPUに割り当てられた第2スレッドを前記第2CPU群に移行し、
前記第2CPU群に移行された前記第1スレッドと前記第2スレッドの前記第1CPUへの割り当てを許可する
ことを特徴とするスケジューリング方法。
(付記9)前記第1スレッドと前記第2スレッドとが第1プロセスに含まれるとき、
前記第1プロセスとは異なる第2プロセスに含まれる第3スレッドを前記第1CPUに割り当てること
を特徴とする付記8に記載のスケジューリング方法。
(付記10)前記第1スレッドと前記第2スレッドとが異なるプロセスに含まれるとき、
前記第1スレッド、前記第2スレッド、または第3スレッドのいずれかのスレッドを前記第1CPUに割り当てること
を特徴とする付記8または9に記載のスケジューリング方法。
(付記11)前記第1CPUの負荷と前記第2CPU群の負荷との差があらかじめ定めた所定値より大きいとき、前記第2CPU群から前記第1CPUにスレッドを移行すること
を特徴とする付記8〜10のいずれか一つに記載のスケジューリング方法。
(付記12)前記第1CPUと、前記第2CPU群と、前記第1CPUおよび前記第2CPU群以外に実行中のCPUがあれば当該他のCPU群を含む全てのCPUが実行しているプロセスの数と、前記第1CPUと、前記第2CPU群と、前記他のCPU群のそれぞれに割り当てられたプロセスの数と、に基づいて前記割合を算出すること
を特徴とする付記8〜11のいずれか一つに記載のスケジューリング方法。
100 マルチコアプロセッサシステム
101 プロセッサ(CPU#0〜#3)
102 メモリ
103 バス
104 断片化監視部(監視ユニット)
110 オペレーティングシステム(OS)
121 プロセス管理部
122 スレッド管理部
123 負荷監視部
124 負荷分散部
131 稼働プロセス数情報
132 割当プロセス数情報
201 プロセス数取得部
202 断片化率算出部
203 再起動判断部
203a 比較部
204 再起動要求出力部
A〜D プロセス

Claims (10)

  1. 複数のCPUと、
    前記複数のCPUによって共有されるメモリと、
    前記メモリに格納され、前記複数のCPUが実行しているプロセスの数を示す第1プロセス数と、前記複数のCPU毎に割り当てられたプロセスの数を示す第2プロセス数とに基づいて、前記複数のCPUへのスレッドの割り当ての変更を指示する監視ユニットと、
    を含むことを特徴とするマルチコアプロセッサシステム。
  2. 前記監視ユニットは、前記第1プロセス数に対する前記複数のCPU分合計した前記第2プロセス数の割合と、所定の閾値とを比較する比較部を含むこと
    を特徴とする請求項1に記載のマルチコアプロセッサシステム。
  3. 前記監視ユニットは、
    前記比較部による比較結果が前記閾値を超えているときに、第1CPUにスレッドの割り当ての変更を指示すること
    を特徴とする請求項2に記載のマルチコアプロセッサシステム。
  4. 前記監視ユニットが前記複数のCPUへのスレッドの割り当て変更を指示するとき、割り当てられた所定の第2プロセス数が最も多い第1CPUに再起動要求を出力すること
    を特徴とする請求項1または2に記載のマルチコアプロセッサシステム。
  5. 前記第1プロセス数および第2プロセス数は前記メモリに格納されること
    を特徴とする請求項1〜4のいずれか一つに記載のマルチコアプロセッサシステム。
  6. 複数のCPUを有するマルチコアプロセッサシステムにおけるスケジューリング方法であって、
    前記複数のCPUが実行しているプロセスの数を示す第1プロセス数に対する、前記複数のCPU毎に割り当てられたプロセスの数を示す第2プロセス数割合に基づくスレッドの再割り当ての指示に基づき、
    第1CPUへのスレッドの割り当ての禁止を、第1スレッドが割り当てられた第2CPU群に指示した後、
    前記第1CPUに割り当てられた第2スレッドを前記第2CPU群に全て移行して前記第1CPUを再起動させた後、
    前記第2CPU群に移行された前記第1スレッドと前記第2スレッドの前記第1CPUへの再割り当てを許可する
    ことを特徴とするスケジューリング方法。
  7. 前記再割り当ての許可後に、
    前記第1スレッドと前記第2スレッドとが第1プロセスに含まれるとき、
    前記第1プロセスとは異なる第2プロセスに含まれる第3スレッドを前記第1CPUに割り当てること
    を特徴とする請求項6に記載のスケジューリング方法。
  8. 前記再割り当ての許可後に、
    前記第1スレッドと前記第2スレッドとが異なるプロセスに含まれるとき、
    前記第1スレッド、前記第2スレッド、または第3スレッドのいずれかのスレッドを前記第1CPUに割り当てること
    を特徴とする請求項6または7に記載のスケジューリング方法。
  9. 前記再割り当ての許可後に、
    前記第1CPUの負荷と前記第2CPU群の負荷との差があらかじめ定めた所定値より大きいとき、前記第2CPU群から前記第1CPUにスレッドを移行すること
    を特徴とする請求項6〜8のいずれか一つに記載のスケジューリング方法。
  10. 前記第1CPUと、前記第2CPU群と、前記第1CPUおよび前記第2CPU群以外に実行中のCPUがあれば当該他のCPU群を含む全てのCPUが実行しているプロセスの数と、前記第1CPUと、前記第2CPU群と、前記他のCPU群とのそれぞれのCPU毎に割り当てられたプロセスの数と、に基づいて前記割合を算出すること
    を特徴とする請求項6〜9のいずれか一つに記載のスケジューリング方法。
JP2013504459A 2011-03-16 2011-03-16 マルチコアプロセッサシステムおよびスケジューリング方法 Expired - Fee Related JP5880542B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/056261 WO2012124077A1 (ja) 2011-03-16 2011-03-16 マルチコアプロセッサシステムおよびスケジューリング方法

Publications (2)

Publication Number Publication Date
JPWO2012124077A1 JPWO2012124077A1 (ja) 2014-07-17
JP5880542B2 true JP5880542B2 (ja) 2016-03-09

Family

ID=46830206

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013504459A Expired - Fee Related JP5880542B2 (ja) 2011-03-16 2011-03-16 マルチコアプロセッサシステムおよびスケジューリング方法

Country Status (3)

Country Link
US (1) US20140019989A1 (ja)
JP (1) JP5880542B2 (ja)
WO (1) WO2012124077A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2626786B1 (en) * 2010-10-05 2016-04-20 Fujitsu Limited Multicore processor system, method of monitoring control, and monitoring control program
JP6387747B2 (ja) * 2013-09-27 2018-09-12 日本電気株式会社 情報処理装置、障害回避方法およびコンピュータプログラム
US9652298B2 (en) * 2014-01-29 2017-05-16 Vmware, Inc. Power-aware scheduling
JP6188607B2 (ja) * 2014-03-10 2017-08-30 株式会社日立製作所 インデクスツリーの探索方法及び計算機
US20160091882A1 (en) * 2014-09-29 2016-03-31 Siemens Aktiengesellschaft System and method of multi-core based software execution for programmable logic controllers
US10496448B2 (en) 2017-04-01 2019-12-03 Intel Corporation De-centralized load-balancing at processors
US11307903B2 (en) 2018-01-31 2022-04-19 Nvidia Corporation Dynamic partitioning of execution resources
US10817338B2 (en) * 2018-01-31 2020-10-27 Nvidia Corporation Dynamic partitioning of execution resources
US20210026699A1 (en) * 2018-03-30 2021-01-28 Nec Corporation Operation management apparatus, method, and non-transitory computer readable medium
CN115437739A (zh) * 2021-06-02 2022-12-06 伊姆西Ip控股有限责任公司 虚拟化***的资源管理方法、电子设备和计算机程序产品

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007316710A (ja) * 2006-05-23 2007-12-06 Nec Corp マルチプロセッサシステム、ワークロード管理方法
WO2010093003A1 (ja) * 2009-02-13 2010-08-19 日本電気株式会社 演算資源割当装置、演算資源割当方法、及び、演算資源割当プログラム

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5506987A (en) * 1991-02-01 1996-04-09 Digital Equipment Corporation Affinity scheduling of processes on symmetric multiprocessing systems
US5437032A (en) * 1993-11-04 1995-07-25 International Business Machines Corporation Task scheduler for a miltiprocessor system
JP3696901B2 (ja) * 1994-07-19 2005-09-21 キヤノン株式会社 負荷分散方法
US5884077A (en) * 1994-08-31 1999-03-16 Canon Kabushiki Kaisha Information processing system and method in which computer with high load borrows processor of computer with low load to execute process
JPH09138716A (ja) * 1995-11-14 1997-05-27 Toshiba Corp 電子計算機
JP3541335B2 (ja) * 1996-06-28 2004-07-07 富士通株式会社 情報処理装置及び分散処理制御方法
JP3006551B2 (ja) * 1996-07-12 2000-02-07 日本電気株式会社 複数コンピュータ間の業務分散システム、業務分散方法および業務分散プログラムを記録した記録媒体
JP3266029B2 (ja) * 1997-01-23 2002-03-18 日本電気株式会社 マルチプロセッサシステムにおけるディスパッチング方式、ディスパッチング方法およびディスパッチングプログラムを記録した記録媒体
US6601084B1 (en) * 1997-12-19 2003-07-29 Avaya Technology Corp. Dynamic load balancer for multiple network servers
US5991792A (en) * 1998-01-02 1999-11-23 International Business Machines Corporation Method, apparatus and computer program product for dynamically managing a thread pool of reusable threads in a computer system
US8411298B2 (en) * 2001-01-11 2013-04-02 Sharp Laboratories Of America, Inc. Methods and systems for printing device load-balancing
JP2002278778A (ja) * 2001-03-21 2002-09-27 Ricoh Co Ltd 対称型マルチプロセッサシステムにおけるスケジュール装置
US7287254B2 (en) * 2002-07-30 2007-10-23 Unisys Corporation Affinitizing threads in a multiprocessor system
US7760626B2 (en) * 2004-03-31 2010-07-20 Intel Corporation Load balancing and failover
US7882505B2 (en) * 2005-03-25 2011-02-01 Oracle America, Inc. Method and apparatus for switching between per-thread and per-processor resource pools in multi-threaded programs
US8032888B2 (en) * 2006-10-17 2011-10-04 Oracle America, Inc. Method and system for scheduling a thread in a multiprocessor system
US8935510B2 (en) * 2006-11-02 2015-01-13 Nec Corporation System structuring method in multiprocessor system and switching execution environment by separating from or rejoining the primary execution environment
JP2008158806A (ja) * 2006-12-22 2008-07-10 Matsushita Electric Ind Co Ltd 複数プロセッサエレメントを備えるプロセッサ用プログラム及びそのプログラムの生成方法及び生成装置
US9021491B2 (en) * 2010-03-15 2015-04-28 International Business Machines Corporation Dual mode reader writer lock

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007316710A (ja) * 2006-05-23 2007-12-06 Nec Corp マルチプロセッサシステム、ワークロード管理方法
WO2010093003A1 (ja) * 2009-02-13 2010-08-19 日本電気株式会社 演算資源割当装置、演算資源割当方法、及び、演算資源割当プログラム

Also Published As

Publication number Publication date
US20140019989A1 (en) 2014-01-16
JPWO2012124077A1 (ja) 2014-07-17
WO2012124077A1 (ja) 2012-09-20

Similar Documents

Publication Publication Date Title
JP5880542B2 (ja) マルチコアプロセッサシステムおよびスケジューリング方法
US9442763B2 (en) Resource allocation method and resource management platform
US9571561B2 (en) System and method for dynamically expanding virtual cluster and recording medium on which program for executing the method is recorded
JP5332065B2 (ja) クラスタ構成管理方法、管理装置及びプログラム
KR101781063B1 (ko) 동적 자원 관리를 위한 2단계 자원 관리 방법 및 장치
JP4920391B2 (ja) 計算機システムの管理方法、管理サーバ、計算機システム及びプログラム
KR101651871B1 (ko) 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
US20130283286A1 (en) Apparatus and method for resource allocation in clustered computing environment
WO2017020742A1 (zh) 负载均衡方法及设备
WO2015001850A1 (ja) タスク割り当て判定装置、制御方法、及びプログラム
JP2008191949A (ja) マルチコアシステムおよびマルチコアシステムの負荷分散方法
US20110004656A1 (en) Load assignment control method and load distribution system
JP2016126562A (ja) 情報処理システム、管理装置、及び情報処理システムの制御方法
CN110990154A (zh) 一种大数据应用优化方法、装置及存储介质
KR20100062958A (ko) 컴퓨팅 자원들을 제어하는 기술
JP2008217575A (ja) ストレージ装置及びその構成最適化方法
JP5471292B2 (ja) 仮想マシン移動制御プログラム,仮想マシン移動制御装置および仮想マシン移動制御方法
JP5435133B2 (ja) 情報処理装置、情報処理装置の制御方法及びプログラム
US9367439B2 (en) Physical memory usage prediction
CN107870877B (zh) 用于在存储***中管理数据访问的方法和***
CN115629854A (zh) 分布式任务调度方法、***、电子设备和存储介质
KR20150070930A (ko) 최적 비용을 고려한 마이그레이션 자원 할당 시스템 및 할당 방법
KR101932523B1 (ko) 가상 머신에 할당된 가상 gpu 메모리의 슬롯을 동적으로 증감시키는 방법 및 이를 구현하는 컴퓨팅 장치
US9503353B1 (en) Dynamic cross protocol tuner
JP2014078214A (ja) スケジュールシステム、スケジュール方法、スケジュールプログラム、及び、オペレーティングシステム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150324

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150525

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150707

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150907

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: 20160105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160118

R150 Certificate of patent or registration of utility model

Ref document number: 5880542

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees