(57)【特許請求の範囲】
【請求項１】
データ処理性能と電力消費量の異なる複数種類のＣＰＵを種類毎に複数個搭載した非対称マルチＣＰＵシステムであって、
全体的なデータ処理性能と電力消費量の最大値が段階的に相違するように複数の仮想プロセッサとＣＰＵの種類及び個数の組合せの形態との対応関係を規定する定義情報と、データ処理の環境といずれの前記仮想プロセッサを選択すれば良いかを示す仮想プロセッサの選択情報とを対応付けるＣＰＵの割当てルール情報と、を有し、前記ＣＰＵの割当てルール情報からデータ処理の環境に応じた仮想プロセッサの選択情報を選択し、該選択した仮想プロセッサの選択情報に基づいて前記定義情報の複数の仮想プロセッサの中から一つの仮想プロセッサを選択し、該選択した一つの仮想プロセッサに対応する前記定義情報のＣＰＵの種類及び個数の組合せで特定されるＣＰＵにデータ処理を割当て、
データ処理に割当てるＣＰＵの種類と個数の制御は、ユーザースペースの制御プログラムによって、データ処理に用いることが可能なＣＰＵの種類と個数をカーネルに通知する処理であり、
前記ＣＰＵの割当てルール情報は、システムブートに際して、ユーザー設定により最初から使用しないＣＰＵについてはその動作をインアクティブにすることを含む、マルチＣＰＵシステム。
【請求項２】
請求項１において、前記制御プログラムによって通知する処理は、前記ユーザースペースからスケジューラを制御するカーネル機能によって実現される、マルチＣＰＵシステム。
【請求項３】
請求項２において、前記制御プログラムを実行するＣＰＵは、データ処理性能と電力消費量が相対的に小さなＣＰＵのグループ中の所定のＣＰＵである、マルチＣＰＵシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は非対称マルチＣＰＵシステム、更にはそれにおけるスケーリング方法に関し、例えば携帯情報端末装置への適用により、バッテリー駆動時間を伸張することに有効な技術に関する。
【背景技術】
【０００２】
高いデータ処理性能を保証しながらバッテリー駆動時間を延ばすための技術として、特許文献１に記載の技術がある。これは、データ処理を実行する第１のＣＰＵの他に、この第１のＣＰＵよりピーク性能が低く、電力効率が高い第２のＣＰＵと設け、第２のＣＰＵで負荷を監視し、負荷が大きい場合第１のＣＰＵにより処理を実行させ、前記負荷が小さい場合は第１のＣＰＵに代わり第２のＣＰＵに前記処理を実行させるものである。これによって、負荷の状態や温度変化に応じて、システム動作時のリーク電力を低減する。【０００３】
また、特許文献２には、マルチプロセッサシステムにおいて、タスクを各プロセッサで実行する際に必要となる消費電力情報を管理する管理部を設け、タスクを実行させるプロセッサの選択時に前記消費電力情報を使用し、単位消費電力量当たりの実行処理量が最大となるプロセッサを選択し、そのプロセッサにタスクを割当てる、という技術が記載される。これによって、モバイル端末等の使用可能な電力量が限られているような環境において、限られた電力量でより多くの処理量を実行することができるマルチプロセッサシステムを実現可能になる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２８０３７８号公報
【特許文献２】特開２０１１−２０９８４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明者は、複数のＣＰＵに非対称に処理が割当てられる非対称マルチＣＰＵシステムにおけるＣＰＵ処理のスケーリングについて検討した。すなわち、タスクを実行するＣＰＵの割当てを、データ処理性能の高いＣＰＵと低消費電力のＣＰＵとの間で可変とすることである。その手法として、データ処理性能の高いＣＰＵのグループと低消費電力のＣＰＵのグループとの間で、システム負荷に応じて、使用するＣＰＵのグループを排他的に切替えることが提案されている。また、データ処理性能の高いＣＰＵのグループに含まれるＣＰＵと低消費電力のＣＰＵのグループに含まれるＣＰＵとを一対一に対応させ、対応するＣＰＵ同士で、ＤＶＦＳ処理などを用いることによって、システム負荷に応じて使用するＣＰＵを排他的に切替えることが提案されている。しかしながら、それらの提案は、タスク処理に使用可能なＣＰＵの最大数が双方のＣＰＵグループに属する全てのＣＰＵの半数に制限されてしまうことになるため、ＣＰＵリソースの稼動効率が悪いという問題がある。更に、高いデータ処理性能のＣＰＵと低いデータ処理性能のＣＰＵを排他的に切替えることから、実現できる性能が、データ処理性能の高いグループから選択された複数のＣＰＵとデータ処理性能の低いグループの中から選択された複数のＣＰＵの総和になり、中間的なデータ処理性能を実現できないことがある。言い換えると、ある瞬間に非対称マルチＣＰＵシステムが必要とする処理性能を適切に満たすように制御することができず、必要な処理性能を過剰に満たすようなＣＰＵの組合せを選択してしまう虞がある。これにより、無駄な電力を消費してしまうことが懸念される。しかしながら、双方のグループに対して、データ処理性能の高いＣＰＵには負荷の大きなタスクだけを割当て、低消費電力のＣＰＵには負荷の小さなタスクだけを割当てるようにして、全部のＣＰＵを最大限利用可能にするには、ＯＳのカーネル、特にタスクスケジューラ若しくはタスクディスパッチャーをそのようなＣＰＵシステムに最適化することが必要である。しかしながら、そのような最適化を実現することは容易ではない。特許文献１，２の技術もそれに対する解決策を示唆するものではない。【０００６】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。【０００８】
すなわち、データ処理性能と電力消費量の異なる複数種類のＣＰＵを夫々複数個搭載した非対称マルチＣＰＵシステムにおいて、全体的なデータ処理性能と電力消費量の最大値にバリエーションを持たせるように（全体的なデータ処理性能と電力消費量の最大値が段階的に相違するように）、前記ＣＰＵの種類と個数の組合せの形態を複数定義しておき、データ処理の環境に応じて定義情報から選択した形態に従って、データ処理に割当てるＣＰＵの種類と個数を制御する。
【発明の効果】
【０００９】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。【００１０】
すなわち、データ処理負荷などのデータ処理環境に応じて無駄な電力消費を抑え、且つ必要なデータ処理性能を満たすＣＰＵの組合せを容易に選択することができる。
【図面の簡単な説明】
【００１１】
【図１】図１はプロセッサのハードウェア及びソフトウェアの構成を階層的に例示する説明図である。
【図２】図２は非対称マルチＣＰＵシステムのシステム構成例を示すシステム構成図である。
【図３】図３はＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄとの組合せの形態を例示する説明図である。
【図４Ａ】図４Ａは使用するＣＰＵのグループをシステム負荷などに応じて排他的に切替える手法を比較例として示す説明図である。
【図４Ｂ】図４Ｂはデータ処理性能の高いＣＰＵのグループに含まれる複数のＣＰＵと低消費電力のＣＰＵのグループに含まれる複数のＣＰＵとを一対一対応させ、対応されるＣＰＵの間で、システム負荷に応じて使用するＣＰＵを排他的に切替える手法を比較例として示す説明図である。
【図５Ａ】図５Ａは図４Ａの場合におけるＣＰＵの種類と個数に関する組合せ形態を例示する説明図である。
【図５Ｂ】図５Ｂは図４Ｂの場合におけるＣＰＵの種類と個数に関する組合せ形態を例示する説明図である。
【図６】図６は仮想プロセッサの割当て処理の制御フローを例示するフローチャートである。
【図７】図７はガバナが、熱の発生状況、電池残容量、処理負荷の情報をどのように入手するかの一例を示す説明図である。
【図８】図８はガバナがどのようにして仮想プロセッサの切換えが必要かを判別し、その結果に従って適切な仮想プロセッサをどのように選択するのか、という処理例を示す説明図である。
【図９】図９は仮想プロセッサの段階的な更新と共にスキップ更新も採用可能にした場合の仮想プロセッサの割当て制御を例示するフローチャートである。
【図１０】図１０はＣＰＵの電源制御も考慮したときのプロセッサのハードウェア及びソフトウェアの構成を階層的に例示する説明図である。
【図１１】図１１は図１０の構成を採用した場合における初期化部分の処理フローを例示するフローチャートである。
【図１２】図１２はステップ１８−４、１８−５で不要なＣＰＵを減らす時の判断に使用する規準を規定するテーブルの一例を示す説明図である。
【図１３】図１３はシステム稼働中にも図１０のガバナからＣＰＵホットプラグを制御することで、省電力効果を更に強化する場合の処理フローを例示するフローチャートである。
【図１４】図１４は図１０の例に対してＤＶＦＳ制御を更に組合せることで、消費電力を必要最低限に抑えて連続的な性能向上を図る制御を可能にするプロセッサのハードウェア及びソフトウェアの構成を階層的に例示する説明図である。
【図１５】図１５は図６にＤＶＦＳ処理を追加した制御フローを例示するフローチャートである。
【図１６】図１６はステップ２５のＤＶＦＳ処理の内容を例示する説明図である。
【図１７】図１７は選択されている仮想プロセッサの処理性能の範囲から隣の処理性能の範囲に入らない範囲でＣＰＵの同期クロック周波数をスケーリングするようにした変形例を示す説明図である。
【発明を実施するための形態】
【００１２】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について、その概要を説明する。代表的な実施の形態における概要説明において、括弧を付して参照する図面中の参照符号は、それが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１３】
〔１〕＜データ処理性能と電力消費量が多段階に相違するＣＰＵの種類と個数の組合せ形態＞
データ処理性能と電力消費量の異なる複数種類のＣＰＵ（８ａ〜８ｄ，９ａ〜９ｄ）を種類毎に複数個搭載した非対称マルチＣＰＵシステムは、全体的なデータ処理性能と電力消費量の最大値にバリエーションを持たせる（全体的なデータ処理性能と電力消費量の最大値が段階的に相違する）ようにＣＰＵの種類と個数の組合せの複数の形態を定義する定義情報（１０，１３）を有し、データ処理の環境に応じて前記定義情報から選択した形態で特定されるＣＰＵにデータ処理を割当てる（２１）。
【００１４】
これによれば、データ処理に対するＣＰＵの割当てを定義情報に基づいて、データ処理性能の高いＣＰＵには負荷の大きなタスクだけを割当て、低消費電力のＣＰＵには負荷の小さなタスクだけを割当てるように制御することができる。よって、ＯＳのタスクスケジューラ若しくはタスクディスパッチャーに全て依存しなくてもよく、そのような処理のためにＯＳのタスクスケジューラ若しくはタスクディスパッチャーを最適化することを要しない。また、最大で全てのＣＰＵを利用可能であるから、ＣＰＵリソースの稼動効率もよく、更に、ＣＰＵに対するデータ処理の割当てで実現できる性能が、高いデータ処理性能か、低いデータ処理性能かに限定されず、中間的なデータ処理性能も実現できるから、無駄な電力を消費する虞はほとんど想定されない。したがって、データ処理環境の負荷に応じて無駄な電力消費を抑え且つ必要なデータ処理性能を容易に実現することができる。
【００１５】
〔２〕＜データ処理性能と電力消費量が段階に増加する方向に組合せた形態＞
項１において、前記定義情報が保有するＣＰＵの種類と個数の組合せの複数の形態は、データ処理性能と電力消費量を段階に増加させる方向にＣＰＵの種類と個数を組合せた形態である（１０，１３）。
【００１６】
これによれば、必要な処理性能を満足する最小性能の形態を一意的に選択可能である。
【００１７】
〔３〕＜要求される処理性能を段階的に満たす方向に組合せた形態で＞
項１において、前記定義情報が保有するＣＰＵの種類と個数の組合せの複数の形態は、データ処理の環境に応じて要求される処理性能を段階的に満たす方向にＣＰＵの種類と個数を組合せた形態であり（１０，１３）、要求される処理性能を満たす最小性能の形態を選択する。
【００１８】
これによれば、必要な処理性能を満足する最小性能の形態を一意的に選択可能である。
【００１９】
〔４〕＜データ処理の負荷、発熱状況、電池残量、ユーザー設定＞
項２又は３において前記データ処理の環境は、データ処理の負荷（１ｂ）の大小で把握される第１環境、データ処理の負荷（１ｂ）の大小及び発熱状況（１ｃ）で把握される第２環境、データ処理の負荷（１ｂ）の大小、発熱状況（１ｃ）及び電池残量（１ｄ）で把握される第３環境、又はユーザー設定（１ｅ、１ｆ）、データ処理の負荷（１ｂ）の大小、発熱状況（１ｃ）及び電池残量（１ｄ）で把握される第４環境である。
【００２０】
これによれば、第１環境により、データ処理能力に対する余裕度と言う点でデータ処理の環境を把握することができる。第２環境により、発熱状況を考慮したデータ処理能力の余裕度と言う点でデータ処理の環境を把握することができる。第３環境により、発熱状況と電源供給限界を考慮したデータ処理能力の余裕度と言う点でデータ処理の環境を把握することができる。第４環境により、発熱状況と電源供給限界を考慮したデータ処理能力の余裕度と言う点でデータ処理の環境を把握することができると共に、ユーザー設定をデータ処理環境に反映させることができる。
【００２１】
〔５〕＜データ処理性能と電力消費量によるＣＰＵの発熱状況＞
項４において、前記発熱状況は、データ処理性能と電力消費量の相対的に大きなＣＰＵのグループに含まれるＣＰＵの発熱状況である。
【００２２】
これによれば、データ処理能力に影響を及ぼす発熱状態の把握が可能になる。もちろん、データ処理性能と電力消費量の小さなＣＰＵの発熱状況を監視することでも構わない。
【００２３】
〔６〕＜データ処理性能と電力消費量の大きな種類と小さな種類＞
項１において、前記ＣＰＵの種類は、ＣＰＵのデータ処理性能と電力消費量の大小の別に応じて分類されたＣＰＵの複数のグループである。例えば、前記ＣＰＵの種類は、データ処理性能と電力消費量の大きなＣＰＵのグループ（８）と、データ処理性能と電力消費量の小さなＣＰＵのグループ（９）とである。
【００２４】
これによれば、グループ分けを２グループとすることにより制御を過度に複雑化させることなく、形態の定義毎にＣＰＵの割り振りを変えることができる。もちろん、３グループ以上のグループ分けを行っても構わない。
【００２５】
〔７〕＜搭載ＣＰＵの個数よりも多い組合せ形態数＞
項１において、前記ＣＰＵの種類と個数の組合せの形態の数は、搭載しているＣＰＵの個数よりも多い。
【００２６】
これによれば、ＣＰＵの種類と個数の組合せの形態についての段階を細分化でき、電力消費とデータ処理性能の段階的な制御精度の向上に資することができる。なお、組合せの形態の数は、搭載しているＣＰＵの個数と同じ、もしくはそれ以下であっても良いことは、もちろんである。
【００２７】
〔８〕＜ユーザースペースの制御プログラムによってカーネルに通知＞
項１において、データ処理に割当てるＣＰＵの種類と個数の制御は、ユーザースペースの制御プログラム（１）によって、データ処理に用いることが可能なＣＰＵの種類と個数をカーネルに通知する処理である。
【００２８】
これによれば、定義情報に基づいてＣＰＵの割当て制御を容易に行うことができる。
【００２９】
〔９〕＜コントロールグループと称するカーネル機能＞
項８において、前記制御プログラムによって通知する処理は、ユーザースペースからカーネルのスケジューラを制御するカーネル機能によって実現される。
【００３０】
これによれば、カーネルの既存機能を有効に流用することができる。なお、前記制御プログラムによって通知する処理を、カーネル空間で実現してもよいことはもちろんである。
【００３１】
〔１０〕＜制御プログラムを実行するＣＰＵ＞
項９において、前記制御プログラムを実行するＣＰＵは、データ処理性能と電力消費量が相対的に小さなＣＰＵのグループ（９）の中の所定のＣＰＵである。
【００３２】
これによれば、高度な処理を要しないデータ処理についてデータ処理性能と電力消費量が相対的に小さなＣＰＵグループのＣＰＵを用いることが、電力消費を低減しようすとるシステムへの適合性に優れる。
【００３３】
〔１１〕＜データ処理に割当てるＣＰＵの種類と個数の初期割当て設定＞
項３において、ブート処理に際して前記所定のＣＰＵは、前記データ処理の環境として少なくともユーザー設定（１ｆ）に応じて前記定義情報から一つの前記形態を選択し、選択した形態に従ってデータ処理に使用するＣＰＵをアクティブにし、使用しないＣＰＵをインアクティブにする（１８−５）。
【００３４】
これによれば、システムブートに際して、ユーザー設定により、最初から使用しないＣＰＵについてはその動作をインアクティブにすることにより、最初から無駄な電力消費を抑えることができる。使用しないＣＰＵをシステムブート時にインアクティブにしない場合、当該ＣＰＵは電源供給状態のまま待機することになるため、それと比して、さらなる低消費電力を実現することができる。
【００３５】
〔１２〕＜割当ての更新＞
項１１において、データ処理に使用するＣＰＵの種類と個数の割当てを更新するとき、インアクティブなＣＰＵを使用対象に割当てる場合は、当該ＣＰＵをアクティブ化し、逆にアクティブなＣＰＵを使用対象から除外する場合は、当該ＣＰＵをインアクティブ化する（２１−２）。
【００３６】
これによれば、ＣＰＵの割当てを更新するときにも、使用しないＣＰＵによる無駄な電力消費を抑えることができる。
【００３７】
〔１３〕＜形態の割当て更新における段階的更新とスキップ更新＞
項１１において、データ処理に割当てるＣＰＵの種類と個数の割当てを更新するとき、選択する前記形態を、１段ずつ段階的に更新する段階的更新（２１）又は選択する前記形態を一度に複数段スキップして更新するスキップ更新（２１ｂ）とし、データ処理環境の変化が所定の範囲内のときは前記段階的更新、データ処理環境の変化が前記所定の範囲を超えたときは前記スキップ更新とする。
【００３８】
これにより、急激な負荷の変動などに対してデータ処理の良好な追従性を得る事ができる。例えばＣＰＵがスタンバイ状態を抜けてタスクの実行を開始するとき、段階的更新では即座に高いデータ処理性能を得ることができない場合があるからである。
【００３９】
〔１４〕＜クロック供給停止又は／及び電源供給停止＞
項１１において、ＣＰＵのインアクティブ化は当該ＣＰＵへの同期クロックの供給停止又は／及び電源供給停止であり（２１−２）、アクティブ化は当該ＣＰＵへの同期クロックの供給開始又は／及び電源供給開始である。
【００４０】
これによれば、ＣＰＵのアクティブ化、インアクティブ化の処理を容易に行うことができる。
【００４１】
〔１５〕＜ＤＶＦＳによる最大性能の拡張＞
項１において、データ処理環境として前記定義情報で定義された最大性能を超える性能要求があったときは、ＤＶＦＳ（Dynamic Voltage/Frequency Scaling）処理（２５）を実行して、その要求度合に応じて所定のＣＰＵの電源電圧及び同期クロック周波数の何れか一方又は双方を上昇させる。
【００４２】
これにより、定義情報で定義された最大性能を超える性能要求に対しても容易に応えることができる。特に、最大性能を超える性能要求に対してだけＤＶＦＳ処理を行うものとすれば、定義情報で定義された形態によるＣＰＵの割当て制御を簡素化することができる。
【００４３】
〔１６〕＜ＤＶＦＳ処理による制御形態を定義するＤＶＦＳ定義情報＞
項１５において、前記性能要求の度合に応じてＤＶＦＳ処理対象とするＣＰＵ及び当該ＣＰＵに対する電源電圧及び同期クロック周波数の上昇度合を定義したＤＶＦＳ用定義情報（図１６）を有し、当該定義情報を参照してＤＶＦＳ処理を実行する。
【００４４】
これによれば、前記最大性能を超える性能要求に応ずる電源電圧及び同期クロック周波数の倍率制御を容易に行うことができる。
【００４５】
〔１７〕＜データ処理性能と電力消費量が多段階に相違するＣＰＵの種類と個数の組合せ形態＞
データ処理性能と電力消費量の異なる複数種類のＣＰＵ（８ａ〜８ｄ，９ａ〜９ｄ）を種類毎に複数個搭載した非対称マルチＣＰＵシステムにおいて、使用するＣＰＵの種類と個数の組合せをデータ処理の環境に応じてスケーリングする、マルチＣＰＵシステムのスケーリング方法は、
（ａ）データ処理の環境を判別する判別処理（１９）と、
（ｂ）その判別結果に基づいて、全体的なデータ処理性能と電力消費量の最大値が段階的に相違するようにＣＰＵの種類と個数の組合せの複数の形態を定義する定義情報（１０，１３）から一つの形態を選択する選択処理（２１）と、
（ｃ）選択した形態で特定されるＣＰＵにデータ処理を割当てる制御処理（２１）と、を含む。
【００４６】
これによれば、データ処理に対するＣＰＵの割当てを定義情報に対する判別処理の結果にしたがって行えばよいから、データ処理性能の高いＣＰＵには負荷の大きなタスクだけを割当て、低消費電力のＣＰＵには負荷の小さなタスクだけを割当てるようにする制御をＯＳのタスクスケジューラ若しくはタスクディスパッチャーに全て依存しなくてもよく、そのような処理のためにＯＳのタスクスケジューラ若しくはタスクディスパッチャーを最適化することを要しない。また、最大で全てのＣＰＵを利用可能であるからＣＰＵリソースの稼動効率もよく、更に、ＣＰＵに対するデータ処理の割当てで実現できる性能が、高いデータ処理性能か、低いデータ処理性能かに限定されず、中間的なデータ処理性能も実現できるから、無駄な電力を消費する虞はほとんど想定されない。したがって、その方法を利用することにより、データ処理負荷などのデータ処理環境に応じて無駄な電力消費を抑え且つ必要なデータ処理性能を容易に実現することができる。
【００４７】
〔１８〕＜データ処理性能と電力消費量が段階に増加する方向に組合せた形態＞
項１７において、前記定義情報が保有するＣＰＵの種類と個数の組合せの複数の形態は、データ処理性能と電力消費量を段階的に増加させる方向にＣＰＵの種類と個数を組合せた形態（１０，１３）である。
【００４８】
これによれば、必要な処理性能を満足する最小性能の形態を一意的に選択可能である。
【００４９】
〔１９〕＜要求される処理性能を段階的に満たす方向に組合せた形態で＞
項１７において、前記定義情報が保有するＣＰＵの種類と個数の組合せの複数の形態は、データ処理の環境に応じて要求される処理性能を段階的に満たす方向にＣＰＵの種類と個数を組合せた形態（１０，１３）であり、要求される処理性能を満たす最小性能の形態を選択する。
【００５０】
これによれば、必要な処理性能を満足する最小性能の形態を一意的に選択可能である。
【００５１】
〔２０〕＜データ処理の負荷、発熱状況、電池残量、ユーザー設定＞
請求項１８又は１９において前記データ処理の環境は、データ処理の負荷（１ｂ）の大小で把握される第１環境、データ処理の負荷の大小及び発熱状況（１ｃ）で把握される第２環境、データ処理の負荷の大小、発熱状況及び電池残量（１ｄ）で把握される第３環境、又はユーザー設定（１ｅ，１ｆ）、データ処理の負荷の大小、発熱状況及び電池残量で把握される第４環境である、マルチＣＰＵシステムのスケーリング方法。
【００５２】
これによれば、第１環境により、データ処理能力に対する余裕度と言う点でデータ処理の環境を把握することができる。第２環境により、発熱状況を考慮したデータ処理能力の余裕度と言う点でデータ処理の環境を把握することができる。第３環境により、発熱状況と電源供給限界を考慮したデータ処理能力の余裕度と言う点でデータ処理の環境を把握することができる。第４環境により、発熱状況と電源供給限界を考慮したデータ処理能力の余裕度と言う点でデータ処理の環境を把握することができると共に、ユーザー設定をデータ処理環境に反映させることができる。
【００５３】
〔２１〕＜データ処理性能と電力消費量によるＣＰＵの発熱状況＞
項２０において、前記発熱状況は、データ処理性能と電力消費量の相対的に大きなＣＰＵのグループに含まれるＣＰＵの発熱状況である。
【００５４】
これによれば、データ処理能力に影響を及ぼす発熱状態の把握が可能になる。もちろん、データ処理性能と電力消費量が相対的に小さなＣＰＵのグループ中のＣＰＵの発熱状況を監視することでも構わない。
【００５５】
〔２２〕＜データ処理性能と電力消費量の大きな種類と小さな種類＞
項１７において、前記ＣＰＵの種類は、ＣＰＵのデータ処理性能と電力消費量の大小の別に応じて分類されたＣＰＵの複数のグループである。例えば、前記ＣＰＵの種類は、データ処理性能と電力消費量の大きなＣＰＵのグループ（８）と、データ処理性能と電力消費量の小さなＣＰＵのグループ（９）とである。
【００５６】
これによれば、グループ分けを２グループとすることにより制御を過度に複雑化させることなく、形態の定義毎にＣＰＵの割り振りを変えることができる。もちろん、３グループ以上のグループ分けを行っても構わない。
【００５７】
〔２３〕＜搭載ＣＰＵの個数よりも多い組合せ形態数＞
項１７において、前記ＣＰＵの種類と個数の組合せの形態の数は、例えば、搭載しているＣＰＵの個数よりも数の多くすることが望ましい。
【００５８】
これによれば、ＣＰＵの種類と個数の組合せの形態についての段階を細分化でき、電力消費とデータ処理性能の段階的な制御精度の向上に資することができる。
【００５９】
なお、組合せの形態の数は、搭載しているＣＰＵの個数と同じ、もしくはそれ以下であっても良いことは、もちろんである。
【００６０】
〔２４〕＜ユーザースペースの制御プログラムによってカーネルに通知＞
項１７において、データ処理に割当てるＣＰＵの種類と個数を制御する処理は、ユーザースペースの制御プログラム（１）によって、データ処理に用いることが可能なＣＰＵの種類と個数をカーネルに通知する処理である。
【００６１】
これによれば、定義情報で参照した形態をＣＰＵの割当て制御に容易に橋渡しすることができる。
【００６２】
〔２５〕＜コントロールグループと称するカーネル機能＞
項１７において、前記制御プログラムによって通知する処理は、ユーザースペースからカーネルのスケジューラを制御するカーネル機能によって実現される。
【００６３】
これによれば、カーネルの既存機能を有効に流用することができる。
【００６４】
〔２６〕＜制御プログラムを実行するＣＰＵ＞
項２５において、前記制御プログラムを実行するＣＰＵは、データ処理性能と電力消費量が相対的に小さなＣＰＵのグループ（９）中の所定のＣＰＵである。
【００６５】
これによれば、高度な処理を要しないデータ処理についてデータ処理性能と電力消費量が小さなＣＰＵを用いることが、電力消費を低減しようすとるシステムへの適合性に優れる。
【００６６】
〔２７〕＜データ処理に割当てるＣＰＵの種類と個数の初期割当て設定＞
項２６において、ブート処理に際して前記所定のＣＰＵは前記データ処理の環境として少なくともユーザー設定（１ｆ）に応じて前記定義情報から一つの前記形態を選択し、選択した形態に従ってデータ処理に使用するＣＰＵをアクティブにし、使用から外されるＣＰＵをインアクティブにする（１８−５）。
【００６７】
これによれば、システムブートに際して、ユーザー設定により最初から使用しないＣＰＵについてはその動作をインアクティブにすることにより、最初から無駄な電力消費を抑えることができる。使用しないＣＰＵをインアクティブにしない場合には、当該ＣＰＵは電源供給状態のまま待機することになり、これよりも低消費電力を実現することができる。
【００６８】
〔２８〕＜割当ての更新＞
項２７において、データ処理に使用するＣＰＵの種類と個数の割当てを更新するとき、インアクティブなＣＰＵを使用対象に割当てる場合は当該ＣＰＵをアクティブ化し、逆にアクティブなＣＰＵを使用対象から外す場合は当該ＣＰＵをインアクティブ化する（２１−２）。
【００６９】
これによれば、ＣＰＵの割当てを更新するときにも不使用に変更されるＣＰＵによる無駄な電力消費を抑えることができる。
【００７０】
〔２９〕＜形態の割当て更新における段階的更新とスキップ更新＞
項２７において、データ処理に割当てるＣＰＵの種類と個数の割当てを更新するとき、選択する前記形態を、１段ずつ段階的に更新する段階的更新（２１）又は選択する前記形態を一度に複数段飛越して更新するスキップ更新（２１ｂ）とし、データ処理環境の変化が所定の範囲のときは前記段階的更新、データ処理環境の変化が前記所定の範囲を超えたときは前記スキップ更新とする。
【００７１】
これにより、急激な負荷の変動などに対してデータ処理の良好な追従性を得る事ができる。例えばＣＰＵがスタンバイジョイ状態を抜けてタスクの実行を開始するとき段階的更新では即座に高いデータ処理性能を得ることができない場合があるからである。
【００７２】
〔３０〕＜クロック供給停止又は／及び電源供給停止＞
項２７において、ＣＰＵのインアクティブ化は当該ＣＰＵへの同期クロックの供給停止及び電源供給停止であり（２１−２）、アクティブ化は当該ＣＰＵへの同期クロックの供給開始及び電源供給開始である。
【００７３】
これによれば、ＣＰＵのアクティブ化、インアクティブ化の処理を容易に行うことができる。
【００７４】
〔３１〕＜ＤＶＦＳによる最大性能の拡張＞
項１７において、データ処理環境として前記定義情報で定義された最大性能を超える性能要求があったときは、ＤＶＦＳ（Dynamic Voltage/Frequency Scaling）処理（２５）を実行して、その要求度合に応じて所定のＣＰＵの電源電圧及び同期クロック周波数の何れか一方又は双方を上昇させる。
【００７５】
これにより、定義情報で定義された最大性能を超える性能要求に対しても容易に答えることができる。特に、最大性能を超える性能要求に対してだけＤＶＦＳ処理を行うものとすれば、定義情報で定義された形態によるＣＯＵの割当て制御を簡素化することができる。
【００７６】
〔３２〕＜ＤＶＦＳ処理による制御形態を定義するＤＶＦＳ定義情報＞
項３１において、前記性能要求の度合に応じてＤＶＦＳ処理対象とするＣＰＵ及び当該ＣＰＵに対する電源電圧及び同期クロック周波数の上昇度合を定義したＤＶＦＳ用定義情報（図１６）を有し、当該定義情報を参照してＤＶＦＳ処理を実行する。
【００７７】
これによれば、前記最大性能を超える性能要求に応ずる電源電圧及び同期クロック周波数の倍率制御を容易に行うことができる。
【００７８】
２．実施の形態の詳細
実施の形態について更に詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００７９】
《マルチＣＰＵシステム》
図２には非対称マルチＣＰＵシステムのシステム構成例が示される。特に制限されないが、同図には、プロセッサ１００と周辺機器１０１がバス（若しくはネットワーク）１０２を介して接続されたシステム構成が例示される。プロセッサ１００はシングルチップで構成されていても或いはマルチチップで構成されていてもよい。周辺機器１０１は各種デバイスや装置によって構成されて良い。例えばマルチＣＰＵシステムとして携帯情報通信端末装置を想定すると、プロセッサ１００は通信プロトコル処理及びアプリケーション処理などを行い、周辺機器１０１は液晶ディスプレイ、タッチパネル、バッテリーなどを有する。
【００８０】
ここで、プロセッサ１００は、データ処理性能と電力消費量の異なる複数種類のＣＰＵを種類毎に複数個搭載した非対称マルチプロセッサとして構成される。プロセッサ１００は複数種類のＣＰＵ（中央処理装置）として、データ処理性能が高く電力消費の大きなＣＰＵの第１グループ（BigCPUs）８と低消費電力でデータ処理性能が低いＣＰＵの第２グループ（LittleCPUs）９とを有する。第１グループ８のＣＰＵ（BigCPU）は、特に制限されないが、参照符号８ａ〜８ｄで示された４個のＣＰＵ（ＣＰＵ＿Ｂ＃０〜ＣＰＵ＿Ｂ＃３）であり、第２グループ９のＣＰＵ（LittleCPU）は、特に制限されないが、参照符号９ａ〜９ｄで示された４個のＣＰＵ（ＣＰＵ＿Ｌ＃０〜ＣＰＵ＿Ｌ＃３）である。第１グループ８のＣＰＵ８ａ〜８ｄと第２グループ９のＣＰＵ９ａ〜９ｄの夫々は同じアーキテクチャを有する。例えば第１グループ８のＣＰＵ８ａ〜８ｄに対して第２グループ９のＣＰＵ９ａ〜９ｄがキャッシュメモリの構成が異なる場合、ソフトウェアエミュレーションによって、全く同じアーキテクチャとなるように仮想的に実現されている。第１グループ８のＣＰＵ８ａ〜８ｄ及び第２グループ９のＣＰＵ９ａ〜９ｄはバス１１０を介してメモリ１１１、入出力インタフェース回路１１２、及び周辺モジュール１１３に接続される。周辺モジュール１１３は、特に図示はしないが、割り込みコントローラ、ＤＭＡ（Direct Memory Access）コントローラ、通信コントローラなどを有する。入出力インタフェース回路１１２は周辺機器１０１に接続される。
【００８１】
《プロセッサのハードウェア及びソフトウェアの構成》
図１にはプロセッサ１００のハードウェア及びソフトウェアの構成を階層的に例示する。ここでは、ハードウェア層（HW）１２０、ファームウェア層（Firmware）１２１、カーネル層（Kernel）１２２、ユーザースペース層（Userspace）１２３の４階層で構成されている。
【００８２】
上記第１グループ（BigCPU）８のＣＰＵと第２グループ９のＣＰＵ（LittleCPU）は各々任意の個数であっても構わないが、ここでは説明をわかりやすくするために、上述のとおり、高性能を優先して消費電流も大きい４個のＣＰＵ（BigCPU）８ａ〜８ｄと性能をほどほどにして消費電流を抑えた４個のＣＰＵ（LittleCPU）９ａ〜９ｄで構成されるものとする。
【００８３】
ファームウェア層（Firmware）１２１はブートコード（Boot）７などの下位ソフトウェア群であり、例えばメモリ１１１のＲＯＭに格納されている。
【００８４】
カーネル層（Kernel）１２２はLinux（登録商標）などのオペレーティングシステム（OS）であり、図１には代表的なコンポーネントであるスケジューラ（Scheduler）４、デバイスドライバ（Device Driver）５、及びパワーマネジメント（Power Management）６の各機能が示されている。スケジューラ（Scheduler）４はタスク管理に用いられる機能であり、データ処理を構成するプロセスを優先順位などにしたがって動作可能なＣＰＵに割当てるスケジューリング若しくはディスパッチを行う。デバイスドライバ（Device Driver）５はビデオカードやＬＡＮカードなどのハードウェアデバイスと情報を入出力するためのデバイス管理を行う。パワーマネジメント６はサスペンド／レジュームなどの電源管理、そしてシステム負荷や温度などに応じた電源電圧及び周波数の動的制御（ＤＶＦＳ）を行う。
【００８５】
ユーザー層（Userspace）１２３ではユーザーのアプリケーションソフトウェアが実行される。図１ではこのアプリケーションソフトウェアを要求処理性能が低いままのスロープロセスグループ（Slow Process Group）３と、要求処理性能が状況によって高くなったり低くなったり変化するダイナミックプロセスグループ（Dynamic Process Group）２の２つのグループに分類する。また、図１では左側に位置しているソフトウェアはＣＰＵ（BigCPU）８ａ〜８ｄで実行され、右側に位置するソフトウェアはＣＰＵ（LittleCPU）９ａ〜９ｄで実行する。スロープロセスグループ３はＣＰＵ（LittleCPU）９ａ〜９ｄで実行するので右側に、ダイナミックプロセスグループ４は要求処理性能によって、ＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄで実行するので図１の左右にまたがるように配置してある。ダイナミックプロセスグループ４を実行するＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄの組合せはガバナ（Governor）１が要求処理性能に応じて制御信号１ａで切替える。この切替えはガバナ１からカーネル１２２のスケジューラ４に作用して行われる。この作用は、リナックス（登録商標）ＯＳがサポートするコントロールグループ（Ｃグループ）と称するカーネル機能（カーネルがサポートする制御プログラム）を用いて行われる。ガバナ（Governor）１は例えばアンドロイド（登録商標）ＯＳがサポートする制御プログラムを流用することが可能である。なお、ガバナ（Governor）１がカーネル内にあっても良いことはもちろんである。
【００８６】
次に、ＣＰＵの組合せを切替える仕組みについて説明する。
【００８７】
《ＣＰＵの組合せを切替える仕組みの代表例》
図３にはＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄとの組合せの形態が例示される。図においてＣＰＵ（BigCPU）８ａ〜８ｄをＢ１〜Ｂ４と図示し、ＣＰＵ（LittleCPU）９ａ〜９ｄをＬ１〜Ｌ４と図示する。ここでは、ＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄとの組合せのグループを表す仮想プロセッサVi(i=1~12)という概念を導入する。図３の行列式は４個のＣＰＵ（BigCPU）８ａ〜８ｄと４個のＣＰＵ（LittleCPU）９ａ〜９ｄで構成するベクタ１２を１２個の仮想プロセッサＶｉ＝（ｉ＝１〜１２）にマッピングしている。マッピングした状態は１３で示される「可能な組合せ」として図示される。図３ではＣＰＵ（LittleCPU）９ａ〜９ｄの夫々のＣＰＵの性能を単位（１）としてＣＰＵ（BigCPU）８ａ〜８ｄの性能がその２倍、消費電流についてもＣＰＵ（BigCPU）８ａ〜８ｄが２倍と設定してある。よって仮想プロセッサＶｉの添え字ｉは性能を示す。行列１１は４個のＣＰＵ（BigCPU）８ａ〜８ｄと４個のＣＰＵ（LittleCPU）９ａ〜９ｄを１３で示される組合せにしたがって１２個の仮想プロセッサＶｉ（ｉ＝１〜１２）にマッピングする変換行列である。
【００８８】
１２個の仮想プロセッサＶｉ（ｉ＝１〜１２）及び１３で示される組合せの形態は、全体的なデータ処理性能と電力消費量の最大値が段階的に相違するようにＣＰＵ８ａ〜８ｄ，９ａ〜９ｄの組合せの複数の形態を定義する定義情報としての性質を有する。換言すれば、１２個の仮想プロセッサＶｉ（ｉ＝１〜１２）及び１３で示される組合せの形態は、データ処理性能と電力消費量を段階的に増加させる方向にＣＰＵの種類と個数を組合せた形態である。更に観点を変えれば、それは、処理負荷などのデータ処理の環境に応じて要求される処理性能を段階的に満たす方向にＣＰＵの種類と個数を組合せた形態であり、要求される処理性能を満たす最小性能の形態を指定可能にする、複数の組合せ形態のマッピングである。
【００８９】
図４Ａ及び図４ＢにはＣＰＵの組合せの比較例が示される。図４Ａはシステム負荷などに応じて、使用するＣＰＵのグループ８と９を排他的に切替える手法が例示される、図４Ｂにはデータ処理性能の高いＣＰＵのグループ８に含まれるＣＰＵ８ａ〜８ｄと低消費電力のＣＰＵのグループ９に含まれるＣＰＵ９ａ〜９ｄとを一対一対応させ、対応されるＣＰＵの間で、システム負荷に応じて使用するＣＰＵを排他的に切替える手法が例示される。この場合も図３と同様にＣＰＵ９ａ〜９ｄと８ａ〜８ｄとの処理性能及び電力消費との関係を１：２とすると、図４Ａ及び図４Ｂの場合におけるＣＰＵの種類と個数に関する組合せは図５Ａ及び図５Ｂのようになる。
【００９０】
図４Ａ及び図４Ｂの場合には最大で４個のＣＰＵしか選択できないから、１３ａの「可能な組合せ」の例からも明らかなように、性能値９以上のＶ９〜Ｖ１２を実現することができない。Ｖ９以上の性能が要求された時にはＣＰＵの周波数を上げることで対応できるが同時に電源電圧を上げることが必要になるが、消費電流は周波数の１乗、電圧の２乗に比例するのでやはり無駄な消費電力を消費することになってしまう。
【００９１】
図６には仮想プロセッサの割当て処理の制御フローチャートが例示される。まず、消費電力を抑えたＣＰＵ（LittleCPU）９ａ〜９ｄの内の所定の一つのＣＰＵでブートコード7を実行して、ＯＳのカーネル（スケジューラ４、デバイスドライバ５及びパワーマネジメント６のコードを含む）１２２を、ブートコード７を実行した上記所定のＣＰＵで起動する。特に制限されないが、図６においてステップ１８の処理には、それに続けてユーザースペース１２３でスロープロセスグループ３に含まれるプログラムを実行するところまでを含むものとする。
【００９２】
ステップ１９では、ガバナ（Governor）１が、データ処理環境として、熱の発生状況（Temperature）１ｃ、電池残容量（Battery Level）１ｄ、データ処理の負荷である処理負荷（CPU Load）１ｂをこの順番にチェックする。チェック結果に従って仮想プロセッサＶｉの切換えが必要かを判断する（ステップ２０）。変更が必要と判別された場合には、適切な仮想プロセッサＶｉを選択して、これをダイナミックプロセッサグループ２に割当てる（ステップ２１）。
【００９３】
ガバナ１が、熱の発生状況１ｃ、電池残容量１ｄ、処理負荷１ｂの情報をどのように入手するかの一例は図７に例示される。熱の発生１ｃと電池残容量１ｄは各々ハードウェア層１２０のサーマルセンサ（Thermal Sensor）２５とバッテリーセンサ（Battery Sensor）２６からデバイスドライバ（Device Driver）５経由で入手する。処理負荷（CPU Load）１ｂはカーネル層１２２のスケジューラ４からから入手する。処理負荷１ｂは例えばＣＰＵ占有率によって把握する。尚、図7ではファームウェア層１２１は図示を省略してある。
【００９４】
ガバナ（Governor）１がどのようにして仮想プロセッサＶｉの切換えが必要かを判別し、その結果に従って適切な仮想プロセッサＶｉをどのように選択するのか、という処理例を、図８を参照しながら説明する。図８には前記の３つの入力である熱の発生状況（Temperature）１ｃ、電池残容量（Battery Level）１ｄ、処理負荷（CPU Load）１ｂに従って適切な仮想プロセッサＶｉを選択する動作(Operation)がまとめてある。図８の中の閾値などの具体的な数値やOperation(Choose V1など)は仕組みを説明するための単なる一例であり、実際のシステムに応じて変化可能であることは言うまでもない。図８の例では温度が摂氏７０度より大きい場合、異常事態と判断して電池残容量や処理負荷にかかわらず仮想プロセッサとして一番消費電流の小さいＶ１を選択する。
【００９５】
ステップ２０において、仮想プロセッサの変更が必要か否かの判別条件の一例が図８に示される。図８でOperationがNOPの場合、すなわち温度が摂氏７０度以下で、電池残容量が５０%以上かつ処理負荷が３０%以上７０%以下の場合と、電池残容量が５０%以下かつ処理負荷が３０%以上の場合の２条件となる。図６のステップ２１で適切な仮想プロセッサ Ｖｉ を選択する条件は、図８においてで上記以外の残りの３つの条件となることが分かる。すなわち温度が摂氏７０度以下で、電池残容量が５０%以上かつ処理負荷が７０%より大きい場合は、一つ上の処理量の仮想プロセッサを割当てる（Ｖｉ→Ｖｉ＋１）。逆に処理負荷が３０%より小さい場合は一つ下の処理量の仮想プロセッサに移行する（Ｖｉ→Ｖｉ−１）。電池残容量が５０%以下の場合は処理負荷が３０%より小さい場合には一つ下の処理量の仮想プロセッサに移行する（Ｖｉ→Ｖｉ−１）。但し、図８の例では、既に最大処理性能のＶ１２や最小処理性能のＶ１に割当てられていて、現状より上や下に移行できない場合は現状に留まるようにされることは言うまでもない。
【００９６】
図６のステップ２１で仮想プロセッサＶｉをダイナミックプロセスグループに割当て後、イベントを待つ（ステップ２２）。イベント待ちの間に、ステップ２１で割当てたれた仮想プロセッサＶｉで図１のダイナミックプロセスグループ２のプロセスが実行される。ステップ２２で待つイベントは、再度、仮想プロセッサ割当て処理を要求するイベントであり、例えば、ある時間間隔で起動されるタイマー割込みや、温度が所定の閾値以上に上昇した場合の熱センサー割込みなどである。ここで説明した熱の発生状況の確認と取り扱いは一例であり、必須条件ではない。以上説明したステップ１９乃至２２の処理は一連のプログラム処理の終了がステップ２３で判定されるまで繰り返し行われる。
【００９７】
仮想プロセッサＶｉの割当て処理を制御する図１のガバナ（Governor）１は例えばＣＰＵ（LittleCPU）９ａ〜９ｄの内の一つのＣＰＵで動作させるものとした。図ではユーザースペース層１２３にあるがカーネル層１２２にあってもよい。ユーザースペース層１２３のソフトウェアで高性能処理が必要なものは、仮想プロセッサＶｉを動的に切替えられるダイナミックプロセスグループ２に入れておく。以上説明したように、ダイナミックプロセスグループ２のデータ処理に対するＣＰＵの割当て、すなわち仮想プロセッサＶｉの割当てを、図８に例示するルールに基づいて図３定義情報にしたがって行えばよい。要するに、電池の残容量や、プロセッサ内の熱の発生状況、又は実行するプログラムの負荷に従って、データ処理に用いるＣＰＵのセットをＣＰＵ（Big CPU）８ａ〜８ｄとＣＰＵ（Little CPU）９ａ〜９ｄの最適な組合せで実行することができる。したがって、データ処理性能の高いＣＰＵには負荷の大きなタスクだけを割当て、低消費電力のＣＰＵには負荷の小さなタスクだけを割当てるようにする制御をＯＳのスケジューラ４（若しくはタスクディスパッチャー）に全て依存しなくてもよい。したがって、そのような処理のためにＯＳのスケジューラ４（若しくはタスクディスパッチャー）を最適化することを要しない。また、最大で全てのＣＰＵ８ａ〜８ｄ、９ａ〜９ｄを利用可能であるからＣＰＵリソースの稼動効率もよく、更に、ＣＰＵに対するデータ処理の割当てで実現できる性能が、高いデータ処理性能か、低いデータ処理性能かに限定されず、中間的なデータ処理性能も実現できるから、無駄な電力を消費する虞はほとんど想定されない。したがって、データ処理負荷などのデータ処理環境に応じて無駄な電力消費を抑え且つ必要なデータ処理性能を容易に実現することができる。
【００９８】
《仮想プロセッサＶｉの割当て更新における段階的更新とスキップ更新》
仮想プロセッサＶｉの割当てルールの一例として示した図８は、仮想プロセッサＶｉの割当てを更新するとき、仮想プロセッサＶｉを、１段ずつ段階的に更新する段階的更新とする。これだけに限定されるものではなく、更新先の仮想プロセッサＶｉを一度に複数段飛越して（スキップして）更新するスキップ更新を採用する事が可能である。図９には仮想プロセッサＶｉの段階的な更新と共にスキップ更新も採用可能にした場合の仮想プロセッサ割当てフローが例示される。ここではユーザーから仮想プロセッサ選択の急上昇、急降下の指示がある場合の例を示す。ユーザーが負荷の重たいアプリケーションを立ち上げる場合には仮想プロセッサ選択の急上昇が、負荷の重たいアプリケーションの実行終了後には電池容量の無駄な消耗を減らすために、すみやかな急降下が必要 となる。図７のユーザーインストラクション（User Instruction）１ｅによる急上昇、急降下の指示があれば仮想プロセッサの変更が必要と判別され（図９のステップ２０）、その要因が急上昇又は急降下の指示であるかの判定が次のステップ２０ｂで行われる。急上昇又は急効果の指示がある場合にはステップ２１ｂの指示に従った仮想プロセッサＶｉの選択を行う。この例では急上昇の場合、最大性能のＶ１２を選択し、急降下の場合は最小性能のＶ１を選択しているが、個別の要求に従った任意の選択とすることは妨げられない。
【００９９】
《ＣＰＵの電源制御》
ユーザー設定や、電池残量が少なくなった時のポリシーが省電優先となっている場合は、使用しないＣＰＵの電源を動的に落とす仕組みを更に採用することによって、更なる消費電力の削減が可能になる。またプロセッサ１００内部の温度が異常に上昇した時にＣＰＵ（Big CPU）８ａ〜８ｄに関連の電源を全て落とすことで温度を下げることが可能となる。このことを更に適用した具体例について説明する。図１０にはＣＰＵの電源制御も考慮したときのプロセッサ１００のハードウェア及びソフトウェアの構成を階層的に例示する。ここでの説明に直接関係のない部分は図示を省略した。
【０１００】
図１に対して図１０で追加した重要なコンポーネントは、ＣＰＵホットプラグ（CPUHotplug）６ａとパワーマネージメントワードウェア（PowerManagement HW）１４である。ＣＰＵホットプラグ（CPUHotplug）６ａはリナックス（登録商標）カーネル（Linux Kernel）のパワーマネジメント（PowerManagement）６の一機能で、ハードウェア層１２０のパワーマネージメントハードウェア１４を用いることにより、搭載されている全てのＣＰＵ８ａ〜８ｄ，９ａ〜９ｄの電源のオン・オフを、その稼働中に実行できる。他のＯＳを使用する場合でも同等の機能が使用できる。ＣＰＵホットプラグ６ａはユーザースペース層１２３へのインタフェースを持っており、図１０の例では、が例えばガバナ（Governor）１からこのインタフェースを制御することで、図１に基づいて説明した省電効果を更に強化することができる。
【０１０１】
図１１には図１０の構成を採用した場合における初期化部分の処理フローが例示される。図１１に示す初期化部分は図６の図４のブート処理（Boot）１８に対応されえる。
【０１０２】
図１１のステップ１８−１では
各種設定を行う。例えば、使用するオンチップモジュール類全ての電源オン、クロック周波数設定、割り込みベクタテーブルの設定などを行う。各種設定を行った後にカーネル層（Kerne）１２２のプログラムを起動する（ステップ１８−２）。カーネル層１２２のプログラムを起動した後に初期化処理の一環として、ユーザー設定モード、温度及び電池残量をチェックし（ステップ１８−３）、そのチェック結果に基づいて、動作させるべきＣＰＵを減らす必要があるか否かを判別する（ステップ１８−４）。減らす必要があるときは、不要なものをＣＰＵホットプラグ６ａの機能を用いて使用対象から除外する（ステップ１８−５）。
【０１０３】
図１２にはステップ１８−４、１８−５で不要なＣＰＵを減らす時の判断に使用する規準を規定するテーブルの一例が示される。熱の発生状況（Temperature）１ｃ、電池残容量（Battery Level）１ｄ、ユーザーセッティング（User Setting）１ｆに従ってＣＰＵを減らすための処理（Operation）が行われる。処理（Operation）の内容はその仕組みを説明するための単なる一例であり、実際のシステムに応じて変化可能であることは言うまでもない。図１２の例では温度が摂氏７０度より大きい場合、異常事態と判断して電池残容量やユーザーセッティングにかかわらずＣＰＵ（LittleCPU）９ａ〜９ｄの内の一つのＣＰＵの電源だけをオンにする。温度が摂氏７０度より低い場合は、処理能力を重視するのか、或いは低消費電力を優先させるのか、というユーザーセッティングとバッテリーレベルに従った選択が行われる。
【０１０４】
ブート処理においてユーザー設定等に従って、使用するＣＰＵの電源をオン、使用しないＣＰＵの電源をオフにすることにより、システムブートに際して、ユーザー設定により最初から使用しないＣＰＵについてはその動作をインアクティブにすることができるから、最初から無駄な電力消費を抑えることができる。使用しないＣＰＵをインアクティブにしない場合には、当該ＣＰＵは電源供給状態のまま待機することになり、これよりも低消費電力を実現することができる。
【０１０５】
次に、初期設定後のシステム稼働中に、データ処理に使用するＣＰＵの種類と個数の割当てを更新可能にすることについて説明する。システム稼働中にも図１０のガバナ（Governor）１からＣＰＵホットプラグ６ａを制御することで省電力効果を更に強化する。図１３にはその処理フローが例示される。
【０１０６】
図１３では図６のフローチャートにステップ２１−２を追加した。ガバナ（Governor）１が適切な仮想プロセッサＶｉを選択してダイナミックプロセスグループ２に割当てた後、使用しなくなったＣＰＵの電源をＣＰＵホットプラグ６ａで動的にオフにする。電源をオフすることで無駄なリーク電流が流れなくなり大きな省電力効果が得られる。特に動作中の消費電流だけでなくリーク電流の大きいパフォーマンス重視のＣＰＵ（BigCPU）８ａ〜８ｄの電源を、使用していない場合にオフできる効果は大きい。
【０１０７】
《ＤＶＦＳ制御》
仮想プロセッサＶｉの割当てが動的に切替えられるダイナミックプロセスグループ２へのＣＰＵの割当てがＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄの８個全てになってきる状態で、更に性能向上要求が来ても、図３の選択形態だけではその状態にとどまり性能向上は得られない。消費電力を増加させてもよいならば、ＣＰＵの電圧と周波数の両者をアップすることで更なる性能向上が可能である。この技術はＤＶＦＳ(Dynamic  Voltage  Frequency Scaling)という名前で知られている。しかし消費電力は電圧の２乗、周波数の１乗に比例するため、消費電力の増加を必要最低限に抑えるために極め細かい制御が必要である。非対称マルチプロセッサシステムでの効率のよい実装方法は知られていない。前述の図１０の例に対してＤＶＦＳ制御を更に組合せることで消費電力を必要最低限に抑えて連続的な性能向上を図る制御が可能になる。図１４にはＤＶＦＳ制御を更に追加したプロセッサ１００のハードウェア及びソフトウェアの構成を階層的に例示する。ここでの説明に直接関係のない部分は図示を省略した。
【０１０８】
図１４で採用した重要なコンポーネントは、ＤＶＦＳ６ｂ、パワーマネージメントハードウェア（PowerManagement HW）１４、及びクロックコントロールハードウェア（Clock Control HW）１６である。ＤＶＦＳ６ｂはリナックス（登録商標）カーネル（Linux Kernel）のパワーマネジメント（PowerManagement）６の一機能で、ハードウェア層１２０のパワーマネージメントハードウェア（PowerManagement HW）１４とクロックコントロールハードウェア（Clock Control HW）１６を用いて、搭載されている全てのＣＰＵ８ａ〜８ｄ，９ａ〜９ｄの電源電圧１４ａ，１４ｂと同期クロック１６ａ，１６ｂを連動させて動的に制御する。ＤＶＦＳ６ｂはガバナ１から与えられるブーストリクエスト（Boost Request）１５に応答して制御を開始する。
【０１０９】
図１５には図６にＤＶＦＳ処理を追加した制御フローが例示される。同図から明らかなように、仮想プロセッサＶｉの割当てが動的に切替えられるダイナミックプロセスグループ２がＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄの８個全てを使用している最高性能（Ｖ１２）が選択されている状態で（ステップＳ２０ｃ参照）、更に性能向上要求が来た時にＤＶＦＳ処理(ステップ２５)を実行する。
【０１１０】
図１６にはステップ２５のＤＶＦＳ処理の内容が例示される。本明細書の例ではＣＰＵ（LittleCPU）９ａ〜９ｄの処理性能を基準の１とし、ＣＰＵ（BigCPU）８ａ〜８ｄの処理性能を２と想定しているが、ここでは更に両方のグループ８，９のＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄに当初供給されている電源電圧を基準の１として、ステップ２５のＤＶＦＳ処理でこの電源電圧を１．２倍に上げて同期クロック周波数もそれに連動して高速化するものとすると、両方のグループ８，９のＣＰＵ（BigCPU）８ａ〜８ｄとＣＰＵ（LittleCPU）９ａ〜９ｄの処理性能が各々１．５と３になるものと想定する。但し、これらの想定はこの例をわかりやすく説明するためのもので実際のシステムに応じて変化することは言うまでもない。
【０１１１】
図１６ではＤＶＦＳ処理を適用する前の仮想プロセッサＶ１２における最高性能の状態(合成性能が１２)を基準に性能向上の複数の形態を例示してある。これを基準に、例えば合計性能の１３を実現する場合は、ＣＰＵ（LittleCPU）１９ａ〜１９ｄの内の２個のＣＰＵにＤＶＦＳ処理を適用する。ＣＰＵ（LittleCPU）９ａ〜９ｄの内の２個の性能が各々、１から１．５に向上するので性能内訳に記述してあるように合計性能が１３となる。合計性能が１４以上の場合も同様である。「ＢｉｇＣＰＵ電圧」、「Little  ＣＰＵ電圧」の欄には、性能向上に必要な電圧の増加も性能向上に応じて増加するように記載されている。例えば合計性能の１４を実現する場合、ＣＰＵ（LittleCPU）９ａ〜９ｄの内の２個とＣＰＵ（ＵBigCPU）８ａ〜８ｄの内の１個にＤＶＦＳ処理を適用することも可能であるが、ステップ２５のＤＶＦＳ処理では図１６の定義に従った定義情報に従って、片方の電源電圧だけを１．２に増加させる形態を選択するものとする。双方のグループのＣＰＵの電源電圧を上げるよりも、低電力のＣＰＵ（LittleCPU）だけに対して電源電圧を上げた方が低消費電力に優れるからである。
【０１１２】
一旦要求性能に応じてデータ処理性能を高くした後、要求性能が低くなった時も同様に図１６の定義に従って周波数と電源電圧を下げていくことになる。
【０１１３】
《仮想プロセッサの変更に及ばないシステム負荷変動に対するＣＰＵクロック制御》
図８に示される仮想;プロセッサの選択若しくは更新の論理において仮想プロセッサの変更に及ばないシステム負荷変動に対して仮想プロセッサＶｉ選択のオペレーション（Operation）はノンオペレーション（ＮＯＰ）としたが、これに限定されない。図１７のように、選択されている仮想プロセッサの処理性能の範囲から隣の処理性能の仮想プロセッサの性能の範囲に入らない範囲で、ＣＰＵの同期クロック周波数をスケーリングするようにしてもよい。
【０１１４】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１１５】
例えばＣＰＵの種類はデータ処理性能の高いＣＰＵのグループと低消費電力のＣＰＵのグループとの２種類に限定されず、その中間のデータ処理能力を有するＣＰＵのグループを追加したりして、３種類以上とすることも可能である。また、一つのグループに属するＣＰＵの数は４個に限定されず、各グループに属するＣＰＵの数も揃っていることに限定されない。本明細書においてＣＰＵはプロセッサコアと同義である。したがって、ＣＰＵは演算部、命令制御部、データフェッチ部だけでなく、キャッシュメモリ、アドレス変換バッファ、ＲＡＭ、ＦＰＵなどのアクセラレータのハードウェアを含んでも、また、それらをソフトウェアでエミュレーションする機能を備えたものであって良いことは言うまでもない。
【０１１６】
また、全体的なデータ処理性能と電力消費量の最大値が段階的に相違するように定義情報によって定義されるＣＰＵの種類と個数の組合せの複数の形態は、図３に例示されるようなＶ１〜Ｖ１２の複数段階の形態に限定されず、組合せ内容や段階の数は適宜変更可能である。
【０１１７】
また、データ処理の環境に応じて前記定義情報から選択した形態で特定されるＣＰＵにデータ処理を割当てる処理は、特定のＣＰＵがガバナやＣグループの制御プログラムを用いてカーネル層１２２のスケジューラ４に作用する手法に限定されない。カーネル層１２２の他の機能を用いて実現することも可能である。
【０１１８】
データ処理の環境は、データ処理の負荷、発熱状況、電池残量、ユーザー設定に限定されない。
【０１１９】
また、上記ではデータ処理の環境として把握する要素として、ユーザー設定（１ｅ、１ｆ）、データ処理の負荷（１ｂ）の大小、発熱状況（１ｃ）及び電池残量（１ｄ）を説明したが、必ずしもそれに限定されない。また、それら要素は、データ処理の負荷（１ｂ）の大小単独で把握し、データ処理の負荷（１ｂ）の大小及び発熱状況（１ｃ）で把握し、又は、データ処理の負荷（１ｂ）の大小、発熱状況（１ｃ）及び電池残量（１ｄ）で把握してもよい。
【０１２０】
マルチＣＰＵシステムは所謂big.LITTLE CPUコアを搭載したSoC（System on a chip）やマイクロコンピュータなどを用いた電子機器（データ処理システム）に応用することができる。
【産業上の利用可能性】
【０１２１】
本発明はデータ処理性能と電力消費量の異なる複数種類のＣＰＵを種類毎に複数個搭載した非対称マルチＣＰＵシステム、更には、そのようなシステムにおいて、使用するＣＰＵの種類と個数の組合せをデータ処理の環境に応じてスケーリングする、マルチＣＰＵシステムのスケーリング方法に広く適用することができる。たま、スマートフォンに代表されるバッテリ駆動型の携帯情報端末装置などに適用することができる。
【符号の説明】
【０１２２】
１  ガバナ（Governor）
１ａ  要求処理性能に応じた制御信号
１ｂ  処理負荷（CPU Load）
１ｃ  熱の発生状況（Temperature）
１ｄ  電池残容量（Battery Level）
１ｅ  ユーザーインストラクション（User Instruction）
１ｆ  ユーザーセッティング（User Setting）
２  ダイナミックプロセスグループ（Dynamic Process Group）
３  スロープロセスグループ（Slow Process Group）
４  スケジューラ（Scheduler）
５  デバイスドライバ（Device Driver）
６  パワーマネジメント（Power Management）
６ａ  ＣＰＵホットプラグ（CPUHotplug）
６ｂ  ＤＶＦＳ
７  ブートコード（Boot）
８  データ処理性能が高く電力消費の大きなＣＰＵの第１グループ（BigCPUs）
８ａ〜８ｄ  第１グループ８のＣＰＵ（ＣＰＵ＿Ｂ＃０〜ＣＰＵ＿Ｂ＃３）
９  低消費電力でデータ処理性能が低いＣＰＵの第２グループ（LittleCPUs）
９ａ〜９ｄ  第２グループ９のＣＰＵ（ＣＰＵ＿Ｌ＃０〜ＣＰＵ＿Ｌ＃３）
Ｖｉ  仮想プロセッサ
１４  パワーマネージメントワードウェア（Power Management HW）
１４ａ、１４ｂ  電源電圧
１５  ブーストリクエスト（Boost Request）
１６  クロックコントロールハードウェア（Clock Control HW）
１６ａ，１６ｂ  同期クロック
１００  プロセッサ
１０１  周辺機器
１０２  バス（若しくはネットワーク）
１１０  バス
１１１  メモリ
１１２  入出力インタフェース回路
１１３  周辺モジュール
１２０  ハードウェア層（HW）
１２１  ファームウェア層（Firmware）
１２２  カーネル層（Kernel）
１２３  ユーザースペース層（User space）
【図１】
0006483609.tif 000002
【図２】
0006483609.tif 000003
【図３】
0006483609.tif 000004
【図４Ａ】
0006483609.tif 000005
【図４Ｂ】
0006483609.tif 000006
【図５Ａ】
0006483609.tif 000007
【図５Ｂ】
0006483609.tif 000008
【図６】
0006483609.tif 000009
【図７】
0006483609.tif 000010
【図８】
0006483609.tif 000011
【図９】
0006483609.tif 000012
【図１０】
0006483609.tif 000013
【図１１】
0006483609.tif 000014
【図１２】
0006483609.tif 000015
【図１３】
0006483609.tif 000016
【図１４】
0006483609.tif 000017
【図１５】
0006483609.tif 000018
【図１６】
0006483609.tif 000019
【図１７】
0006483609.tif 000020