(57)【要約】【課題】マルチＣＰＵシステムにおける性能低下を抑制し得る、プロセススケジューリング装置、プロセススケジューリング方法、及びプログラムを提供する。【解決手段】プロセススケジューリング装置３０は、ＣＰＵ１０及び１１を有するコンピュータ１００においてプロセスのスケジューリングを行なうため、コンピュータ１００によって実行されるプロセス毎に取得された各ＣＰＵのキャッシュ又はメモリ１２へのアクセス状況を示す情報に基づいて、プロセス毎に、各ＣＰＵのキャッシュの内容の一貫性を維持するための維持コストを計算する、コスト計算部３１と、計算されたプロセス毎の維持コストに基づいて、プロセスそれぞれをグループに分ける、グルーピング部３２と、プロセスそれぞれを、グループ毎に、いずれかのＣＰＵに割り当てる、スケジューリング部３３と、を備えている。【選択図】図１
2013200827.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵを有するコンピュータにおいてプロセスのスケジューリングを行なうための装置であって、
前記コンピュータによって実行されるプロセス毎に取得された、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、コスト計算部と、
計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、グルーピング部と、
前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、スケジューリング部と、
を備えていることを特徴とするプロセススケジューリング装置。
【請求項２】
前記情報として、前記プロセス毎に、前記複数のＣＰＵそれぞれのキャッシュが無効化された回数が取得されており、
前記コスト計算部が、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記コストを計算する、
請求項１に記載のプロセススケジューリング装置。
【請求項３】
前記グルーピング部が、前記プロセスそれぞれを、前記回数が予め設定された閾値を越えているプロセスのグループと、前記回数が予め設定された閾値以下となっているプロセスのグループとに分ける、
請求項２に記載のプロセススケジューリング装置。
【請求項４】
前記コスト計算部が、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記プロセス毎に、当該プロセスが共有領域アクセス処理を実行している間の前記回数を計算し、計算した前記回数を前記コストとする、
請求項２に記載のプロセススケジューリング装置。
【請求項５】
前記コンピュータにおいて、前記複数のＣＰＵそれぞれと、前記コンピュータに備えられたメモリとによって、複数のノードが設定され、
前記情報として、前記プロセス毎に、当該プロセスが前記メモリに対して書き込み処理を実行したことの有無が取得されており、
前記コスト計算部が、前記情報に基づいて、前記プロセスそれぞれが前記メモリに対して書き込み処理を実行した回数を、前記ノード別に集計し、前記プロセス毎の前記ノード別に集計した、前記メモリにアクセスした回数を、前記コストとし、
前記グルーピング部が、前記プロセス毎に、前記メモリにアクセスした回数が最も高いノードを特定し、特定したノードが同一となるプロセスを一つのグループとする、
請求項１に記載のプロセススケジューリング装置。
【請求項６】
複数のＣＰＵを有するコンピュータにおいてプロセスのスケジューリングを行なうための方法であって、
（ａ）前記コンピュータによって実行されるプロセス毎に取得されている、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、ステップと、
（ｂ）前記（ａ）のステップで計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、ステップと、
（ｃ）前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、ステップと、
を有することを特徴とするプロセススケジューリング方法。
【請求項７】
複数のＣＰＵを有するコンピュータに、プロセスのスケジューリングを行なわせるためのプログラムであって、
前記コンピュータに、
（ａ）実行対象となるプロセス毎に取得されている、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、ステップと、
（ｂ）前記（ａ）のステップで計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、ステップと、
（ｃ）前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチＣＰＵシステムにおけるプロセスのスケジューリングを行なうための、プロセススケジューリング装置、プロセススケジューリング方法、及びこれらを実現するためのプログラムに関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Central Processing Unit）のクロック数の上昇には、限界が見え初めて来たため、複数のプロセッサコアを備えたマルチコアＣＰＵの利用が増加している。図１２は、従来からの一般的なマルチコアＣＰＵの概略構成を示す図である。図１２に示すように、一般的なマルチコアＣＰＵでは、各コアは、それぞれＬ１キャッシュ及びＬ２キャッシュを備えており、互いに、ＣＰＵに一つあるＬ３キャッシュを共有している。
【０００３】
また、コンピュータの更なる処理能力の向上のため、このようなマルチコアＣＰＵを複数搭載したマルチＣＰＵシステムの利用も増加している。但し、マルチコアＣＰＵを複数備えたマルチＣＰＵシステムでは、別々の物理ＣＰＵによって実行される各プロセスが、同じメモリ領域にアクセスする場合に、キャッシュ一貫性（キャッシュコヒーレンシ：cache coherency）を維持するためキャッシュ無効化処理が行われ、メモリアクセスが遅延する場合がある。この結果、システムにおける性能が低下するという問題が発生してしまう。
【０００４】
ここで、メモリアクセスの遅延について図１３を用いて説明する。図１３は、従来からのマルチＣＰＵシステムにおける動作を説明するための図である。図１３に示すように、ＣＰＵ２が、プロセスの実行のため、メモリにアクセスして、データＸのライトを要求している場合において、既に、別のＣＰＵ１が、自身のＬ３キャッシュにデータＸを読み込んでいるとする。
【０００５】
この場合、キャッシュの一貫性を維持するため、システムのキャッシュ一貫性維持機構（キャッシュコヒーレンシ機構）は、別のＣＰＵ１のＬ３キャッシュ上のデータＸを無効化し、メモリへの書き戻しを実行する。このため、別のＣＰＵ１は、再度メモリから自身のＬ３キャッシュにデータＸをロードする必要がある。
【０００６】
このようなキャッシュ無効化処理が行われると、メモリからデータをロードする間、ＣＰＵのデータアクセス（リード／ライト）は遅延させられ、自身のみで動作する場合にくらべて性能は大きく低下する。例えば、別々のＣＰＵ上で動作するプロセスが同一のロックを取り合う場合、プロセス間（スレッド間）で共有のメモリ領域にアクセスする場合、このようなキャッシュ無効化が多く発生し、システムにおける性能が低下する。
【０００７】
このため、従来から、メモリアクセスの遅延を抑制するための方法が提案されている（特許文献１及び２参照。）。このような方法では、プロセス（スレッド）をできるだけ同一のＣＰＵ上で実行することにより、キャッシュ無効化によるメモリアクセスの遅延が抑制されている。
【０００８】
具体的には、特許文献１に開示された方法では、まず、キャッシュに記憶されている共通データへの各プロセスのアクセスが検出される。そして、アクセスが検出された共通データのアドレスと、共通データへアクセスしたプロセスの識別情報と、同一プロセスによる同一データへのアクセスの回数とが記録される。次に、記憶された情報に基づいて、同一アドレスへのアクセス回数の多いプロセスが同一のＣＰＵに割り当てられる。
【０００９】
また、特許文献２に開示された方法では、まず、プロセスのメモリアクセス量及びメモリアクセス待ち時間等が、ＣＰＵに設けられた性能測定手段又はその他のＨＷ（Hard Wear）による性能測定手段によって取得される。次に、アクセス量又はアクセス時間が多いプロセスから順に、キャッシュの大きいＣＰＵに割り当てられる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００２−５５９６６号公報
【特許文献２】特開２００３‐０６１７５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ところで、特許文献１に開示された方法では、アクセス回数の多いプロセスが同一のＣＰＵに割り当てられるが、実際には、アクセス回数の多いプロセスほど、キャッシュ無効化処理を引き起こしているわけではない。また、アクセスが検出された共通データのアドレスを取得し、記憶することは、データ量が膨大となるため、ＣＰＵにとって負担となる。このため、特許文献１に開示された方法では、メモリアクセスの遅延抑制は不十分であり、システムの性能が低下するおそれがある。
【００１２】
また、特許文献２に開示された方法では、ＣＰＵのキャッシュ効率が考慮されていないため、同一メモリ領域にアクセスするプロセス群が別々のＣＰＵに割り当てられることがある。この場合、キャッシュ無効化処理の回数が逆に増加してしまうことから、特許文献２に開示された方法でも、メモリアクセスの遅延抑制は不十分であり、システムの性能が低下するおそれがある。
【００１３】
本発明の目的の一例は、上記問題を解消し、マルチＣＰＵシステムにおける性能低下を抑制し得る、プロセススケジューリング装置、プロセススケジューリング方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【００１４】
上記目的を達成するため、本発明の一側面におけるプロセススケジューリング装置は、複数のＣＰＵを有するコンピュータにおいてプロセスのスケジューリングを行なうための装置であって、
前記コンピュータによって実行されるプロセス毎に取得された、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、コスト計算部と、
計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、グルーピング部と、
前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、スケジューリング部と、を備えていることを特徴とする。
【００１５】
また、上記目的を達成するため、本発明の一側面におけるプロセススケジューリング方法は、複数のＣＰＵを有するコンピュータにおいてプロセスのスケジューリングを行なうための方法であって、
（ａ）前記コンピュータによって実行されるプロセス毎に取得されている、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、ステップと、
（ｂ）前記（ａ）のステップで計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、ステップと、
（ｃ）前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、ステップと、を有することを特徴とする。
【００１６】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、複数のＣＰＵを有するコンピュータに、プロセスのスケジューリングを行なわせるためのプログラムであって、
前記コンピュータに、
（ａ）実行対象となるプロセス毎に取得されている、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、ステップと、
（ｂ）前記（ａ）のステップで計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、ステップと、
（ｃ）前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、ステップと、を実行させる。
【発明の効果】
【００１７】
以上のように、本発明によれば、マルチＣＰＵシステムにおける性能低下を抑制することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明の実施の形態１におけるプロセススケジューリング装置の構成を示すブロック図である。
【図２】図２は、図１に示したコンピュータに設けられた性能情報取得部における処理を説明するための図である。
【図３】図３は、本発明の実施の形態１におけるプロセススケジューリング装置の動作を示すフロー図である。
【図４】図４は、本発明の実施の形態１において維持コストが計算されたプロセスの一例を示す図である。
【図５】図５は、図３に示したスケジューリング処理を概念的に説明する図である。
【図６】図６は、本発明の実施の形態２におけるプロセススケジューリング装置の動作を示すフロー図である。
【図７】図７は、本発明の実施の形態２におけるコスト計算処理を概念的に説明する図である。
【図８】図８は、本発明の実施の形態２におけるスケジューリング処理を概念的に説明する図である。
【図９】図９は、本発明の実施の形態３におけるプロセススケジューリング装置の動作を示すフロー図である。
【図１０】図１０は、本発明の実施の形態３における情報取得処理を概念的に示す図である。
【図１１】図１１は、本発明の実施の形態３におけるスケジューリング処理を概念的に説明する図である。
【図１２】図１２は、従来からの一般的なマルチコアＣＰＵの概略構成を示す図である。
【図１３】図１３は、従来からのマルチＣＰＵシステムにおける動作を説明するための図である。
【発明を実施するための形態】
【００１９】
（実施の形態１）
以下、本発明の実施の形態１における、プロセススケジューリング装置、プロセススケジューリング方法、及びプログラムについて、図１〜図１１を参照しながら説明する。
【００２０】
［装置構成］
最初に、本実施の形態１におけるプロセススケジューリング装置の構成を図１を用いて説明する。図１は、本発明の実施の形態１におけるプロセススケジューリング装置の構成を示すブロック図である。
【００２１】
図１に示すように、本実施の形態１におけるプロセススケジューリング装置３０は、ＣＰＵ１０及び１１を有するコンピュータ１００において、プロセスのスケジューリングを実行する装置である。本実施の形態１では、プロセススケジューリング装置３０は、コンピュータ１００に導入されているオペレーティングシステム２０上に後述するプログラムによって構築されている。
【００２２】
また、図１に示すように、本実施の形態１では、コンピュータ１００は、更に、主記憶装置としてのメモリ１２と、ＣＰＵ毎に設けられた性能情報取得部１３とを備えている。性能情報取得部１３は、コンピュータ１００によって実行されるプロセス毎に、対応するＣＰＵのキャッシュ又はメモリ１２へのアクセス状況を示す情報（以下「性能情報」と表記する。）を取得し、取得した情報をプロセススケジューリング装置に入力する。
【００２３】
更に、本実施の形態１では、ＣＰＵ１０及び１１は、図１２に示したマルチコアＣＰＵである。また、図１には、２つのＣＰＵのみが例示されているが、本実施の形態１において、コンピュータに備えられるＣＰＵの数は、特に限定されるものではない。
【００２４】
また、図１に示すように、プロセススケジューリング装置３０は、コスト計算部３１と、グルーピング部３２と、スケジューリング部３３とを備えている。このうち、コスト計算部３１は、性能情報取得部１３によってプロセス毎に取得された性能情報に基づいて、プロセス毎に、ＣＰＵ１０及び１１それぞれのキャッシュの内容の一貫性（キャッシュコヒーレンシ）を維持するためのコスト（以下「維持コスト」と表記する。）を計算する。
【００２５】
グルーピング部３２は、計算されたプロセス毎の維持コストに基づいて、プロセスそれぞれをグループに分ける。更に、スケジューリング部３３は、各プロセスを、グループ毎に、ＣＰＵ１０及び１１のいずれかに割り当てる。
【００２６】
このように、本実施の形態１では、プロセススケジューリング装置３０は、各ＣＰＵの実際のアクセス状況に基づいて、各プロセスについて、キャッシュ一貫性を維持するために必要な維持コストが計算される。そして、各プロセスのＣＰＵの割り当ては、計算された維持コストに基づいて、例えば、維持コストが高いプロセスはまとめて同じＣＰＵに割り当てられるので、メモリアクセスの遅延が抑制され、結果、マルチＣＰＵシステムにおける性能低下も抑制される。
【００２７】
ここで、図１に加えて図２を用いて、本実施の形態１におけるプロセススケジューリング装置３０の構成を更に具体的に説明する。図２は、図１に示したコンピュータに設けられた性能情報取得部における処理を説明するための図である。
【００２８】
まず、本実施の形態１では、コンピュータ１００に備えられた性能情報取得部１３は、性能情報として、プロセス毎に、対応するＣＰＵのキャッシュが無効化された回数を取得する。このため、コスト計算部３１は、各ＣＰＵのキャッシュが無効化された回数（以下「キャッシュ無効化回数」と表記する。）に基づいて、維持コストを計算する。
【００２９】
つまり、本実施の形態１では、「キャッシュ無効化回数」が、キャッシュ一貫性を維持するための維持コストとみなされて、取得される。そして、キャッシュ無効化回数が小さくなるようにスケジューリングを行うことで、システムの性能の向上が図られる。これは、キャッシュ無効化が発生したプロセスは、他のＣＰＵ上で実行されるプロセスと同一のメモリ領域にアクセスするため、他のＣＰＵのキャッシュ無効化を引き起こす要因となり、性能低下の原因になると考えられるからである。
【００３０】
なお、複数のＣＰＵが、同一のメモリ領域にアクセスする際において、各ＣＰＵがメモリに対して読み込み処理のみを実行した場合は、キャッシュの無効化は発生しない。いずれかのＣＰＵが、メモリに対して書き込み処理を実行すると、他方のＣＰＵのキャッシュが無効化され、性能低下が発生する。
【００３１】
具体的には、本実施の形態１では、性能情報取得部１３は、「キャッシュ無効化回数」として、あるＣＰＵが、他のＣＰＵのＭ状態のキャッシュラインに相当する、メモリのデータにアクセスした回数を取得する。この回数は、言い換えると、図２に示すように、他のＣＰＵにおいて、変更されたキャッシュが無効化された回数に相当する。
【００３２】
「Ｍ状態」とは、図２に示すように、キャッシュ一貫性を保つためのプロトコルの一つである「ＭＥＳＩプロトコル」で規定された状態であり、当該キャッシュラインが、そのキャッシュにのみ存在し、メインメモリ上の値から変更されている状態をいう。
【００３３】
性能情報取得部１３の具体例としては、例えば、ＣＰＵがインテル社製のＣＰＵであるならば、ＣＰＵ性能カウンタ（以下の参照文献１を参照。）が挙げられる。この場合、ＣＰＵ性能カウンタ「MSR_OFFCORE_RSP_0」のL3_CACHE_HIT_OTHER_CORE_HITM」を用いて、論理コア毎に、他ＣＰＵにＭ状態で存在するＬ３キャッシュラインへのアクセス回数が取得される。
参照文献１：「Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide, Part 2」
【００３４】
また、本実施の形態１では、コスト計算部３１は、性能情報取得部毎（ＣＰＵ毎）に設けられており、各コスト計算部３１は、性能情報取得部１３によって取得されたプロセス毎の「キャッシュ無効化回数」を、維持コストとする。更に、各コスト計算部３１は、このようにして得られた維持コストの値を、プロセス毎に、コスト記録部３４に記録する（口述の図４参照）。なお、上述した特許文献２には、ＣＰＵの性能カウンタの値をプロセス毎に記録する方式が開示されている。
【００３５】
また、本実施の形態１では、グルーピング部３２は、各プロセスを、キャッシュ無効化回数が予め設定された閾値を越えているプロセスのグループと、キャッシュ無効化回数が予め設定された閾値以下となっているプロセスのグループとに分けることができる。キャッシュ無効化回数が少ない場合は、性能低下を無視できるからである。
【００３６】
そして、この場合、スケジューリング部３３は、キャッシュ無効化回数が閾値を越えているプロセスのグループについては、同一のＣＰＵに割り当てる。この結果、同一のメモリ領域にアクセスする可能性が高いプロセスは、一つにまとめらえるので、キャッシュ無効化の発生が減少し、性能低下が抑制される。
【００３７】
［装置動作］
次に、本実施の形態１におけるプロセススケジューリング装置の動作について図３〜図５を用いて説明する。図３は、本発明の実施の形態１におけるプロセススケジューリング装置の動作を示すフロー図である。図４は、本発明の実施の形態１において維持コストが計算されたプロセスの一例を示す図である。図５は、図３に示したスケジューリング処理を概念的に説明する図である。
【００３８】
更に、本実施の形態１では、プロセススケジューリング装置３０を動作させることによって、プロセススケジューリング方法が実施される。よって、本実施の形態１におけるプロセススケジューリング方法の説明は、以下のプロセススケジューリング装置３０の動作説明に代える。なお、以下の説明においては、適宜図１及び図２を参酌する。
【００３９】
また、本実施の形態１では、プロセススケジューリング装置３０は、オペレーティングシステム２０に予め備えられているスケジューラと協調して、Ｌｉｎｕｘ（登録商標）  ＯＳにおけるマイグレーションスレッド（以下の参考文献２を参照。）のように動作する。
参考文献２：「詳解Ｌｉｎｕｘカーネル  第３版」、Daniel P. Bovet, Marco Cesati  著、高橋 浩和  監訳、杉田 由美子、清水 正明、高杉 昌督、平松 雅巳、安井 隆宏  訳
【００４０】
図３に示すように、まず、各コスト計算部３１は、コスト記録部３４に記録されている各プロセスの維持コストを初期化して０（ゼロ）に設定する（ステップＡ１）。続いて、各コスト計算部３１は、ＣＰＵ１０及び１１のうちの一つを選択する（ステップＡ２）。但し、今回のステップＡ２を実行する前に、既に図３に示すステップＡ１〜Ａ７が実行されている場合は、各コスト計算部３１は、前回の処理の際に選択していないＣＰＵを選択する。
【００４１】
次に、各コスト計算部３１は、対応する性能情報取得部１３からプロセス毎の性能情報を受け取り、プロセス毎にキャッシュ無効化回数（維持コスト）を求め、求めたキャッシュ無効化回数を維持コストとしてコスト記録部３４に記録する（ステップＡ３）。ステップＡ３が実行されると、図４に示すように、プロセス毎の維持コストが特定される。
【００４２】
次に、ステップＡ３が実行されると、グルーピング部３２は、プロセス毎に記録された維持コストの大きさの順に、各プロセスをソートする（ステップＡ４）。次に、ソートが完了すると、グルーピング部３２は、いずれかのプロセスの維持コストが設定された閾値Ｔを超えているかどうかを判定する（ステップＡ５）。
【００４３】
また、本実施の形態１では、ステップＡ５で判定基準となる「閾値Ｔ」は、コンピュータ１０のシステム構成に応じて、利用者が指定することができる。例えば、利用者は、ＣＰＵ性能カウンタ「UNCORE_HIT+OTHER_CORE_HIT_SNP+OTHER_CORE_HITM」より取得した、当該プロセスのＬ３キャッシュラインへのアクセス数に基づいて、閾値Ｔを指定することができる。閾値Ｔの具体例としては、アクセス数の８０％の値等が挙げられる。なお、閾値Ｔがこのような値に設定されている場合は、維持コストが閾値Ｔを超えるプロセスでは、Ｌ３キャッシュラインへの全アクセスの８割を超えるアクセスが、キャッシュ無効化となっている。
【００４４】
ステップＡ５の判定の結果、いずれのプロセスの維持コストも閾値Ｔを超えていない場合（全てのプロセスの維持コストが閾値Ｔ以下である場合）は、プロセススケジューリング装置３０における処理は一旦終了する。この場合は、キャッシュ無効化による性能低下が発生していない状態であると考えられるからである。
【００４５】
一方、ステップＡ５の判定の結果、いずれのプロセスの維持コストが閾値Ｔを超えている場合は、グルーピング部３２は、図４に示すように、維持コストの値が大きい上位Ｎ個（Ｎは任意の自然数）のプロセスを一つのグループに設定する（ステップＡ６）。なお、一つのグループにまとめる際のプロセス数Ｎは、特に限定されないが、例えば、ＣＰＵの「コア数」などに設定できる。
【００４６】
次に、スケジューリング部３３は、ステップＡ６で設定したグループに属するプロセスを、ステップＡ２で選択したＣＰＵに割り当てる（ステップＡ７）。これは、維持コストの値が大きい上位Ｎ個のプロセスを、別々のＣＰＵで動作させると、キャッシュ無効化による性能低下が発生し易くなるためである。
【００４７】
ステップＡ７が実行されると、維持コストが高いＮ個のプロセスＡ〜Ｈは、同じＣＰＵに割り当てられる。図５に示すように、例えば、維持コストが高いプロセスＢ及びプロセスＣの維持コストはスケジューリングにより減少する。なお、図５では、図４に示したプロセスの一部のみを図示している。
【００４８】
そして、ステップＡ１〜Ａ７は、一定時間の経過後、再度実行される。この場合は、ステップＡ２において、上述したように前回選択されたＣＰＵと異なるＣＰＵが選択されて、スケジューリングが実行される。つまり、選択対象となるＣＰＵはラウンドロビン方式によって選択される。このようにして、ステップＡ１〜Ａ７を繰り返すことにより、コンピュータ１００全体において、維持コストの低減が図られ、性能の低下が抑制される。
【００４９】
［実施の形態１の効果］
以上のように、本実施の形態１によれば、キャッシュ無効化回数が多いプロセスが同一のＣＰＵで実行されるようにスケジューリングが行われる。これにより、互いに別々のＣＰＵ上で動作させると同一のロックを取り合う複数のプロセス、更には、プロセス間／スレッド間で共有のメモリ領域にアクセスする複数のプロセスが、同一のＣＰＵによって実行される。この結果、各プロセスにおいてキャッシュ無効化回数が減少するため、メモリアクセスの遅延が低減され、マルチＣＰＵシステムにおける性能が向上する。
【００５０】
また、キャッシュ無効化回数が多いプロセスは、他のプロセスとのキャッシュ競合でキャッシュ無効化を発生させ、性能低下を引き起こす原因である。そして、利用者は、維持コストの計算結果を用いて、キャッシュ競合を引き起こすプロセスを特定することができるので、スケジュール時のＣＰＵの割り当ての手動設定、及びプログラム構造の改善を図ることもできる。
【００５１】
［プログラム］
また、本実施の形態１におけるプログラムは、コンピュータ１００に、図３に示すステップＡ１〜Ａ７を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態１におけるプロセススケジューリング装置とプロセススケジューリング方法とを実現することができる。この場合、コンピュータのＣＰＵ１０及び１１は、コスト計算部３１、グルーピング部３２、スケジューリング部３３として機能し、処理を行なう。また、コンピュータに備えられたハードディスク、メモリ等の記憶装置が、コスト記録部３４として機能する。
【００５２】
また、本実施の形態１におけるプログラムは、コンピュータ読み取り可能な記録媒体に格納された状態で提供されても良いし、インターネット等のネットワーク介して流通されるものであっても良い。記録媒体の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【００５３】
（実施の形態２）
次に、本発明の実施の形態２における、プロセススケジューリング装置、プロセススケジューリング方法、及びプログラムについて、図６〜図８を参照しながら説明する。また、以下の説明では、適宜、図１を参照する。
【００５４】
本実施の形態２におけるプロセススケジューリング装置は、図１に示した実施の形態１におけるプロセススケジューリング装置１０と同様の構成を備えている。但し、本実施の形態２では、コスト計算部３１は、各ＣＰＵのキャッシュ無効化回数に基づいて、プロセス毎に、各プロセスが共有領域アクセス処理を実行している間のキャッシュ無効化回数を計算し、計算したキャッシュ無効化回数を維持コストとする。
【００５５】
つまり、本実施の形態２においては、共有領域アクセス処理時における維持コストが大きいプロセスが、同一のＣＰＵによって実行されるようにスケジューリングが実行される。また、「共有領域アクセス処理」とは、一般的には、ロック処理、共有メモリへのアクセス処理等が該当する。更に、共有領域アクセス処理は、利用者によって定義されていても良く、この場合は、利用者は、プログラミング時において、プロセス間でメモリ競合が発生し得る任意の処理を、共有領域アクセス処理として定義する。また、共有領域アクセス処理は、既存のプログラムから抽出されたロック処理であっても良い。
【００５６】
ここで、図６〜図８を用いて、本実施の形態２におけるプロセススケジューリング装置の動作について説明する。図６は、本発明の実施の形態２におけるプロセススケジューリング装置の動作を示すフロー図である。図７は、本発明の実施の形態２におけるコスト計算処理を概念的に説明する図である。図８は、本発明の実施の形態２におけるスケジューリング処理を概念的に説明する図である。
【００５７】
なお、本実施の形態２においても、プロセススケジューリング装置を動作させることによって、プロセススケジューリング方法が実施される。よって、本実施の形態２におけるプロセススケジューリング方法の説明も、以下のプロセススケジューリング装置の動作説明に代える。
【００５８】
まず、本実施の形態２では、前提として、各コスト計算部３１は、常時、対応する性能情報取得部１３からプロセス毎の性能情報としてキャッシュ無効化回数を受け取り、これをコスト記録部３４に記録しているとする。記録されたキャッシュ無効化回数は、維持コストの計算に用いられる。
【００５９】
続いて、図６に示すように、各コスト計算部３１は、対応するＣＰＵにおいて、いずれかのプロセスが共有領域アクセス処理を実行したかどうかを判定する（ステップＢ１）。ステップＢ１の判定の結果、いずれのプロセスも共有領域アクセス処理を実行していない場合は、各コスト計算部３１は、待機状態となり、設定時間の経過後、再度ステップＢ１を実行する。
【００６０】
一方、ステップＢ１の判定の結果、いずれかのプロセスが共有領域アクセス処理を実行した場合は、各コスト計算部３１は、共有領域アクセス処理を実行したプロセスを特定する（ステップＢ２）。
【００６１】
次に、各コスト計算部３１は、特定したプロセスについて、コスト記録部３４から、共有領域アクセス処理の前後におけるキャッシュ無効化回数を取得する。そして、各コスト計算部３１は、図７に示すように、両者の差分、即ち、共有領域アクセス処理の実行中のキャッシュ無効化回数を計算し、計算した差分を維持コストとする（ステップＢ３）。また、各コスト計算部３１は、計算した維持コストをコスト記録部３４に記録する。
【００６２】
次に、グルーピング部３２は、ステップＢ３で計算された維持コストが設定された閾値Ｔを超えているかどうかを判定する（ステップＢ４）。なお、閾値Ｔの設定は、図３に示したステップＡ５の場合と同様に行われる。
【００６３】
ステップＢ４の判定の結果、維持コストが閾値Ｔを超えていない場合は、プロセススケジューリング装置３０における処理は一旦終了する。一方、ステップＢ４の判定の結果、維持コストが閾値Ｔを超えている場合は、グルーピング部３２は、維持コストが閾値Ｔを超えたプロセスを一つのグループに設定する（ステップＢ５）。
【００６４】
次に、スケジューリング部３３は、任意のＣＰＵを選択し、ステップＢ５で設定したグループに属するプロセスを、選択したＣＰＵに割り当てる（ステップＢ６）。そして、ステップＢ６が実行されると、再度、ステップＢ１〜Ｂ６が実行される。このように、本実施の形態２では、各プロセスが共有領域アクセス処理を実行する度に、スケジューリングが実行される。また、選択対象となるＣＰＵはラウンドロビン方式によって選択される。
【００６５】
具体的には、図８に示すように、共有領域アクセス処理１を実行するプロセスＡは、ＣＰＵ１０で実行される予定であったが、ステップＢ６の実行により、ＣＰＵ１１に割り当てられる。維持コストが閾値を超えているプロセスを、別々のＣＰＵで動作させると、キャッシュ無効化による性能低下が発生し易いが、共有領域アクセス処理１を実行するプロセスは全てＣＰＵ１１で実行されるので、マルチＣＰＵシステムにおける性能低下は抑制される。
【００６６】
また、本実施の形態２におけるプログラムは、コンピュータ１００に、図６に示すステップＢ１〜Ｂ６を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態２におけるプロセススケジューリング装置とプロセススケジューリング方法とを実現することができる。この場合、コンピュータのＣＰＵ１０及び１１は、コスト計算部３１、グルーピング部３２、スケジューリング部３３として機能し、処理を行なう。また、コンピュータに備えられたハードディスク、メモリ等の記憶装置が、コスト記録部３４として機能する。
【００６７】
また、本実施の形態２におけるプログラムも、実施の形態１と同様に、コンピュータ読み取り可能な記録媒体に格納された状態で提供されていても良いし、インターネット等のネットワーク介して流通されるものであっても良い。
【００６８】
（実施の形態３）
次に、本発明の実施の形態３における、プロセススケジューリング装置、プロセススケジューリング方法、及びプログラムについて、図９〜図１１を参照しながら説明する。また、以下の説明では、適宜、図１を参照する。
【００６９】
本実施の形態３におけるプロセススケジューリング装置は、図１に示した実施の形態１におけるプロセススケジューリング装置１０と同様の構成を備えている。但し、本実施の形態３では、コンピュータ１００において、ＣＰＵそれぞれと、コンピュータに備えられたメモリとによって、複数のＮＵＭＡ（Non-Uniform Memory Access）ノードが設定されている。また、本実施の形態３では、メモリ１２は、複数備えられていても良い。また、性能情報取得部１３は、性能情報として、各プロセスがメモリ１２に対して書き込み処理を実行したことの有無を取得する。
【００７０】
そして、各コスト計算部３１は、本実施の形態３では、性能情報に基づいて、各プロセスがメモリ１２に対して書き込み処理を実行した回数を、ＮＵＭＡノード別に集計し、プロセス毎のＮＵＭＡノード別に集計した、メモリにアクセスした回数を、維持コストとする。そして、グルーピング部３２は、プロセス毎に、メモリ１２にアクセスした回数が最も高いＮＵＭＡノードを特定し、特定したＮＵＭＡノードが同一となるプロセスを一つのグループとする。
【００７１】
ここで、図９〜図１１を用いて、本実施の形態３におけるプロセススケジューリング装置の動作について説明する。図９は、本発明の実施の形態３におけるプロセススケジューリング装置の動作を示すフロー図である。図１０は、本発明の実施の形態３における情報取得処理を概念的に示す図である。図１１は、本発明の実施の形態３におけるスケジューリング処理を概念的に説明する図である。
【００７２】
なお、本実施の形態３においても、プロセススケジューリング装置を動作させることによって、プロセススケジューリング方法が実施される。よって、本実施の形態３におけるプロセススケジューリング方法の説明も、以下のプロセススケジューリング装置の動作説明に代える。
【００７３】
まず、本実施の形態３では、前提として、図１０に示すように、性能情報取得部１３は、プロセスがメモリに書き込み処理を実行すると、書き込みが行われたページを取得し、対応するビットを１に設定し、更に、このことを対応するコスト計算部３１に通知する。また、各コスト計算部３１は、ＮＵＭＡノードに対応するカウンタを保持しており、性能情報取得部１３がビットを０から１に変化させると、書き込みが行われたページが属するＮＵＭＡノードのカウンタをインクリメントする。
【００７４】
続いて、図９に示すように、各コスト計算部３１は、設定時間毎に、ＮＵＭＡノードのカウンタを集計し、プロセス毎のＮＵＭＡノード別のカウンタ値（各プロセスのＮＵＭＡノード別のメモリへの書き込み回数）を、維持コストとして、コスト記録部３４に記録する（ステップＣ１）。
【００７５】
次に、グルーピング部３２は、維持コストに基づいて、プロセス毎に、維持コスト（カウンタ値）が最大となるＮＵＭＡノードを特定する（ステップＣ２）。そして、図１１に示すように、グルーピング部３２は、プロセスを、特定されたＮＵＭＡノードが同じプロセスが一つのグループとなるようにグルーピングする（ステップＣ３）。
【００７６】
その後、図１１に示すように、グルーピング部３２は、各グループが別々のＣＰＵに割り当てられるよう、各プロセスをグループ毎に各ＣＰＵに割り当てる（ステップＣ４）。この結果、同様のメモリ領域に対して書き込み処理を実行する可能性が高いプロセスは、同一のＣＰＵに割り当てられるので、キャッシュ効率が向上し、結果、マルチＣＰＵシステムの性能も向上する。
【００７７】
また、本実施の形態３におけるプログラムは、コンピュータ１００に、図９に示すステップＣ１〜Ｃ４を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態３におけるプロセススケジューリング装置とプロセススケジューリング方法とを実現することができる。この場合、コンピュータのＣＰＵ１０及び１１は、コスト計算部３１、グルーピング部３２、スケジューリング部３３として機能し、処理を行なう。また、コンピュータに備えられたハードディスク、メモリ等の記憶装置が、コスト記録部３４として機能する。
【００７８】
また、本実施の形態３におけるプログラムも、実施の形態１と同様に、コンピュータ読み取り可能な記録媒体に格納された状態で提供されても良いし、インターネット等のネットワーク介して流通されるものであっても良い。
【００７９】
上述した実施の形態の一部又は全部は、以下に記載する（付記１）〜（付記１５）によって表現することができるが、以下の記載に限定されるものではない。
【００８０】
（付記１）
複数のＣＰＵを有するコンピュータにおいてプロセスのスケジューリングを行なうための装置であって、
前記コンピュータによって実行されるプロセス毎に取得された、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、コスト計算部と、
計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、グルーピング部と、
前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、スケジューリング部と、
を備えていることを特徴とするプロセススケジューリング装置。
【００８１】
（付記２）
前記情報として、前記プロセス毎に、前記複数のＣＰＵそれぞれのキャッシュが無効化された回数が取得されており、
前記コスト計算部が、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記コストを計算する、
付記１に記載のプロセススケジューリング装置。
【００８２】
（付記３）
前記グルーピング部が、前記プロセスそれぞれを、前記回数が予め設定された閾値を越えているプロセスのグループと、前記回数が予め設定された閾値以下となっているプロセスのグループとに分ける、
付記２に記載のプロセススケジューリング装置。
【００８３】
（付記４）
前記コスト計算部が、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記プロセス毎に、当該プロセスが共有領域アクセス処理を実行している間の前記回数を計算し、計算した前記回数を前記コストとする、
付記２に記載のプロセススケジューリング装置。
【００８４】
（付記５）
前記コンピュータにおいて、前記複数のＣＰＵそれぞれと、前記コンピュータに備えられたメモリとによって、複数のノードが設定され、
前記情報として、前記プロセス毎に、当該プロセスが前記メモリに対して書き込み処理を実行したことの有無が取得されており、
前記コスト計算部が、前記情報に基づいて、前記プロセスそれぞれが前記メモリに対して書き込み処理を実行した回数を、前記ノード別に集計し、前記プロセス毎の前記ノード別に集計した、前記メモリにアクセスした回数を、前記コストとし、
前記グルーピング部が、前記プロセス毎に、前記メモリにアクセスした回数が最も高いノードを特定し、特定したノードが同一となるプロセスを一つのグループとする、
付記１に記載のプロセススケジューリング装置。
【００８５】
（付記６）
複数のＣＰＵを有するコンピュータにおいてプロセスのスケジューリングを行なうための方法であって、
（ａ）前記コンピュータによって実行されるプロセス毎に取得されている、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、ステップと、
（ｂ）前記（ａ）のステップで計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、ステップと、
（ｃ）前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、ステップと、
を有することを特徴とするプロセススケジューリング方法。
【００８６】
（付記７）
前記情報として、前記プロセス毎に、前記複数のＣＰＵそれぞれのキャッシュが無効化された回数が取得されており、
前記（ａ）のステップにおいて、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記コストを計算する、
付記６に記載のプロセススケジューリング方法。
【００８７】
（付記８）
前記（ｂ）のステップにおいて、前記プロセスそれぞれを、前記回数が予め設定された閾値を越えているプロセスのグループと、前記回数が予め設定された閾値以下となっているプロセスのグループとに分ける、
付記７に記載のプロセススケジューリング方法。
【００８８】
（付記９）
前記（ａ）のステップにおいて、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記プロセス毎に、当該プロセスが共有領域アクセス処理を実行している間の前記回数を計算し、計算した前記回数を前記コストとする、
付記７に記載のプロセススケジューリング方法。
【００８９】
（付記１０）
前記コンピュータにおいて、前記複数のＣＰＵそれぞれと、前記コンピュータに備えられたメモリとによって、複数のノードが設定され、
前記情報として、前記プロセス毎に、当該プロセスが前記メモリに対して書き込み処理を実行したことの有無が取得されており、
前記（ａ）のステップにおいて、前記情報に基づいて、前記プロセスそれぞれが前記メモリに対して書き込み処理を実行した回数を、前記ノード別に集計し、前記プロセス毎の前記ノード別に集計した、前記メモリにアクセスした回数を、前記コストとし、
前記（ｂ）のステップにおいて、前記プロセス毎に、前記メモリにアクセスした回数が最も高いノードを特定し、特定したノードが同一となるプロセスを一つのグループとする、
付記６に記載のプロセススケジューリング方法。
【００９０】
（付記１１）
複数のＣＰＵを有するコンピュータに、プロセスのスケジューリングを行なわせるためのプログラムであって、
前記コンピュータに、
（ａ）実行対象となるプロセス毎に取得されている、前記複数のＣＰＵそれぞれのキャッシュ又は前記コンピュータのメモリへのアクセス状況を示す情報に基づいて、前記プロセス毎に、前複数のＣＰＵそれぞれのキャッシュの内容の一貫性を維持するためのコストを計算する、ステップと、
（ｂ）前記（ａ）のステップで計算された前記プロセス毎の前記コストに基づいて、前記プロセスそれぞれをグループに分ける、ステップと、
（ｃ）前記プロセスそれぞれを、前記グループ毎に、前記複数のＣＰＵのいずれかに割り当てる、ステップと、
を実行させるプログラム。
【００９１】
（付記１２）
前記情報として、前記プロセス毎に、前記複数のＣＰＵそれぞれのキャッシュが無効化された回数が取得されており、
前記（ａ）のステップにおいて、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記コストを計算する、
付記１１に記載のプログラム。
【００９２】
（付記１３）
前記（ｂ）のステップにおいて、前記プロセスそれぞれを、前記回数が予め設定された閾値を越えているプロセスのグループと、前記回数が予め設定された閾値以下となっているプロセスのグループとに分ける、
付記１２に記載のプログラム。
【００９３】
（付記１４）
前記（ａ）のステップにおいて、取得された前記複数のＣＰＵそれぞれのキャッシュが無効化された回数に基づいて、前記プロセス毎に、当該プロセスが共有領域アクセス処理を実行している間の前記回数を計算し、計算した前記回数を前記コストとする、
付記１２に記載のプログラム。
【００９４】
（付記１５）
前記コンピュータにおいて、前記複数のＣＰＵそれぞれと、前記コンピュータに備えられたメモリとによって、複数のノードが設定され、
前記情報として、前記プロセス毎に、当該プロセスが前記メモリに対して書き込み処理を実行したことの有無が取得されており、
前記（ａ）のステップにおいて、前記情報に基づいて、前記プロセスそれぞれが前記メモリに対して書き込み処理を実行した回数を、前記ノード別に集計し、前記プロセス毎の前記ノード別に集計した、前記メモリにアクセスした回数を、前記コストとし、
前記（ｂ）のステップにおいて、前記プロセス毎に、前記メモリにアクセスした回数が最も高いノードを特定し、特定したノードが同一となるプロセスを一つのグループとする、
付記１１に記載のプログラム。
【産業上の利用可能性】
【００９５】
本発明によれば、マルチＣＰＵシステムにおける性能低下を抑制することができる。本発明は、マルチＣＰＵシステムを搭載するサーバコンピュータ等に有用である。
【符号の説明】
【００９６】
１０、１１  ＣＰＵ
１２  メインメモリ
１３  性能情報取得部
２０  オペレーティングシステム
３０  プロセススケジューリング装置
３１  コスト計算部
３２  グルーピング部
３３  スケジューリング部
３４  コスト記録部
１００  コンピュータ
【図１】
2013200827.tif 000003
【図２】
2013200827.tif 000004
【図３】
2013200827.tif 000005
【図４】
2013200827.tif 000006
【図５】
2013200827.tif 000007
【図６】
2013200827.tif 000008
【図７】
2013200827.tif 000009
【図８】
2013200827.tif 000010
【図９】
2013200827.tif 000011
【図１０】
2013200827.tif 000012
【図１１】
2013200827.tif 000013
【図１２】
2013200827.tif 000014
【図１３】
2013200827.tif 000015