以下に添付図面を参照して、この発明にかかるマルチコアプロセッサシステム、制御方法および制御プログラムの好適な実施の形態を詳細に説明する。
図1は、本実施の形態にかかるデータ復元処理の一例を示す説明図である。図1に示すように、マルチコアプロセッサ100は、複数のCPU(たとえば、CPU#0〜CPU#3)を備えたプロセッサ群である。マルチコアプロセッサ100は、複数のCPU以外に、電源101と、ローカルメモリバス102と、共有メモリバス103とを備えている。
電源101は、各CPUおよび各CPUがアクセスするローカルメモリに電力を供給する。また、電源101は、OSからの指示に応じて、指定されたCPUおよびローカルメモリのみの電力の供給を停止することが可能である。同様に、電源101は、OSからの指示に応じて、指定されたCPUおよびローカルメモリのみの電力の供給を復帰させることもできる。また、各CPUはOSによって制御されるが、CPUが停止中は対応するOSも停止中になる。したがって、各OSは自CPUの電源のOFFを制御すると共に、他CPUの電源のONを制御する。
ローカルメモリバス102は、各CPUとローカルメモリとのアクセスを可能にするバスである。また、各CPUは、ローカルメモリバス102を経由して他のプロセッサのローカルメモリにもアクセスすることができる。
共有メモリバス103は、マルチコアプロセッサ100と共有メモリ104とのアクセスを可能にするバスである。共有メモリ104は、不揮発性メモリもしくは、常時電力が供給されるデータ消失の恐れのないメモリである。
本実施の形態の場合、図1のように、上述したような構成のマルチコアプロセッサ100に、データ復元装置110を追加することによって、CPUと共にローカルメモリへの電力供給が停止されても、ローカルメモリ内のデータを復元することができる。
(従来の電源停止・始動手順)
本実施の形態にかかるデータ復元処理を説明する前に、従来のマルチコアプロセッサの電源停止および始動の手順について説明する。
従来の電源停止時では、マルチコアプロセッサ100にデータ復元装置110が備わっておらず、停止対象となるCPUのOS(たとえば、CPU#0のOS)が電源停止処理を開始する。OSは、まず、停止対象のCPUのレジスタとローカルメモリ内のデータを共有メモリ104に待避させる。次に、OSは、キャッシュの内容を共有メモリ104に書き戻す。続いて、OSは、他のCPUのOSへ電力停止を通知する。最後に、OSから電源101へ電力供給の停止指示が行われ、電源が切られる。
次に、従来の電源始動時では、稼働中のCPUのOS(たとえば、CPU#1のOS)が停止中のCPUの電源復帰処理を開始する。OSは、まず、電源101に対して復帰させるCPUへの電力供給の始動指示を行い、電源を入れる。次に、OSは、共有メモリ104に待避したレジスタおよびローカルメモリのデータを復帰させたCPUのレジスタおよびローカルメモリ内に復元する。
以上説明したように、従来の電源停止の場合には、ローカルメモリ内のデータを共有メモリ104に待避するまで、ローカルメモリへの電力供給の停止を待機しなければならなない。同様に、電源始動の場合にも、電源停止の際に共有メモリ104にローカルメモリ内のデータが待避されている場合には、すべてのデータをローカルメモリ内に復元するまで、CPUは通常の動作に移行することはできない。
(RAID技術)
図2は、RAID技術を利用したマルチコアプロセッサの構成例を示す説明図である。従来の電源停止の際のデータの待避時間を省略するための対策案として、RAID技術が利用されることがある。具体的には、電源停止時にローカルメモリのデータを回避しなくても、冗長化したデータから停止されたCPUのローカルメモリに格納されていたデータを復元することができる。
図2に例示したマルチコアプロセッサ200の場合、CPU#1が停止しても、ローカルメモリ0に格納されたDATA1と、ローカルメモリ2に格納されたDATA3と、ローカルメモリ3に格納されたParity1によってDATA2を復元することができる。同様に、DATA6についても、ローカルメモリ0,2,3にそれぞれ格納されたDATA5、Parity2、DATA4によって復元することができる。
図3は、RAID1の運用を示す説明図であり、図4は、RAID5の運用を示す説明図である。RAID技術とは、複数のハードディスクドライブ(以下、「HDD」と呼ぶ)を仮想的な1台のHDDとして運用する技術である。RAID技術の中には図3に示したRAID1のように、1つのデータ(たとえばデータA)を、RADIコントローラによって、複数のHDDにそれぞれ格納するミラーリングがある。
また、図4に示したRADI5のように、格納用のデータ(たとえばデータA〜F)の他に、冗長データ(パリティデータ(たとえばPar1やPar2))を分散して格納する。いずれかのHDDが破損したとしても、パリティデータを利用して半損したデータを復元することができる。
具体的には、下記のように破損したHDD以外のHDDに格納されている各データ同士の排他的論理和を求めることによって破損したHDDに格納されていたデータを復元する。
Par1 =AxorBxorC
A =BxorCxorPar1
B =AxorBxorPar1
C =BxorC xorPar1
Par2 =DxorExorF
D =ExorFxorPar2
E =DxorFxorPar2
F =BxorCxorPar2
上述したいずれの手法もHDDに格納するデータを冗長化することによって予期せぬHDDの故障からデータを保護することができる。したがって、従来より、RAID5やRAID5に類似したRAID6を利用してCPUのローカルメモリなど揮発性メモリに格納されたデータを保護する手法があった。
ところが、マルチコアプロセッサ100のように、複数のローカルメモリに格納されたデータをRAID5の手法によって分散すると、複数のCPUが停止中になってしまうような事態には対応できない可能性が高い。
RAID技術の場合、複数のHDDの中の1つのHDDが故障した場合に残りのHDDに格納されたデータを利用して故障したHDDに格納されたデータを復元する。したがって、同じ手法をマルチコアプロセッサに適用すると、複数のCPUの電源が停止された場合には、ローカルメモリに格納されたデータを復元することができない。
RAID5の手法におけるパリティデータを多数作成して複数のCPUが停止してもローカルメモリに格納されていたデータを復元することも可能ではあるが、ローカルメモリにおけるパリティデータの比率が増し、CPUが使用できる領域を縮小させてしまう。
そこで、本実施の形態では、ローカルメモリへの電力供給が停止後に、停止したローカルメモリの内容をパリティデータから復元して、共有メモリ104に待避すると共に、稼働中のローカルメモリの構成に合わせて、新たなパリティデータを再構築する。
図1に戻って説明すると、データ復元装置110は、CPU#1およびローカルメモリ1への電力供給が停止した後、冗長データからローカルメモリの内容を共有メモリ104上に復元する(ステップS201)。具体的には、ローカルメモリ1に格納されていたDATA2がDATA1、DATA3およびParity1によって復元され共有メモリ104内の待避領域#1に格納される。なお、実際には続いて、ローカルメモリ1に格納されていたDATA6についても同様に、DATA5、DATA3、DATA4およびParity2によって復元されるが、ここでは説明を省略する。
ステップS201の復元後、データ復元装置110は、稼働中のCPUの数に応じてパリティデータを再構築する(ステップS202)。すなわち、CPU#1が停止する前は、4つのCPUのローカルメモリを利用して、各ローカルメモリに格納されているデータをそれぞれ復元可能なパリティデータが格納されていた。ところが、CPU#1が停止してしまった。そこで、CPU#1の停止後は、稼働中の3つのCPUのローカルメモリを利用して、各ローカルメモリに格納されているデータをそれぞれ復元可能なパリティデータを生成(再構築)して、ローカルメモリに、それぞれ格納する。
パリティデータの再構築後であれば、さらに別のCPUのローカルメモリの電源を止めても、再構築後のパリティデータからデータを復元できるため、同様の手順を行うことで複数のローカルメモリの電源停止に対応できる。したがって、ローカルメモリの電源停止時に事前にローカルメモリの内容を待避しておく必要がなくなるため、ローカルメモリの電源停止動作を高速化することができる。
以下に、図1に例示したような高速な電源停止を実現するためのデータ復元装置110の具体的な構成例および処理手順について説明する。
(データ復元装置のハードウェア構成)
図5は、データ復元装置のハードウェア構成を示すブロック図である。図5において、データ復元装置110は、CPU(Central Processing Unit)501と、ROM(Read‐Only Memory)502と、RAM(Random Access Memory)503と、磁気ディスクドライブ504と、磁気ディスク505と、I/F(Interface)506と、を備えている。また、各構成部はバス500によってそれぞれ接続されている。
ここで、CPU501は、データ復元装置の全体の制御を司る。ROM502は、ブートプログラムや、データ復元処理を実現するためのデータ復元プログラムなどの各種プログラムを記憶している。RAM503は、CPU501のワークエリアとして使用される。磁気ディスクドライブ504は、CPU501の制御にしたがって磁気ディスク505に対するデータのリード/ライトを制御する。磁気ディスク505は、磁気ディスクドライブ504の制御で書き込まれたデータを記憶する。なお、記憶媒体として図5の例では磁気ディスク505を挙げたが、光ディスクや半導体メモリなど他の媒体を利用してもよい。
インターフェース(以下、「I/F」と略する。)506は、所定の通信規格に応じたバスによって、マルチコアプロセッサ内の各CPUや、各CPUがアクセスする揮発性メモリ(ローカルメモリ)、また、共有メモリ104との相互通信を実現する。
(データ復元装置の機能的構成)
図6は、データ復元装置の機能的構成を示すブロック図である。データ復元装置110は、停止検出部601と、復元部602と、作成部603と、格納部604と、始動検出部605と、復帰部606と、を含む構成である。この制御部となる機能(停止検出部601〜復帰部606)は、具体的には、たとえば、図5に示したROM502、RAM503、磁気ディスク505などの記憶装置に記憶されたプログラムをCPU501に実行させることにより、または、I/F506により、その機能を実現する。
停止検出部601は、OSなどの上位プログラムからプロセッサへの停止指示を検出する機能を有している。具体的には、停止検出部601は、マルチコアプロセッサ600内の複数のプロセッサ(プロセッサ0〜プロセッサn)の中のいずれかのプロセッサへの停止指示を検出する。なお、検出結果は、RAM503、磁気ディスク504などの記憶領域に記憶される。
復元部602は、電力の供給が停止した揮発性メモリに格納されていたデータを共有メモリ104に復元する機能を有する。具体的には、復元部602は、検出部601によって停止指示が検出されると、停止指示先のプロセッサ以外の稼働中のプロセッサ群がアクセスする揮発性メモリに格納されているパリティデータに基づいて、揮発性メモリに格納されていたデータを復元する。そして、復元部602は、復元したデータを稼働中のプロセッサ群がアクセス可能な共有メモリ104内に格納する。復元されたデータは、一時的に、RAM503、磁気ディスク505などの記憶領域に記憶される。
作成部603は、新たなパリティデータを作成する機能を有する。具体的には、作成部603は、復元部602によってデータの復元が実行された後に、稼働中のプロセッサ群がアクセスする揮発性メモリにそれぞれ格納されているデータを復元するパリティデータを作成する。なお、作成されたパリティデータは、RAM503、磁気ディスク505などの記憶領域に記憶される。
格納部604は、作成されたパリティデータを稼働中のプロセッサの揮発性メモリに格納する機能を有する。具体的には、格納部604は、作成部603によって作成されたパリティデータを、それぞれ稼働中のプロセッサ群がアクセスする揮発性メモリにそれぞれ格納する。
このとき、格納部604は、パリティデータによって復元されるデータが格納されている揮発性メモリ以外の揮発性メモリに格納する。たとえば、揮発性メモリ1に格納されたデータを復元するパリティデータは、揮発性メモリ1以外の稼働中のプロセッサの揮発性メモリに格納される。
なお、作成部603は、複数のプロセッサの中のいずれかのプロセッサの揮発性メモリに新たにデータが追加または新たなデータに更新されると、新たなデータを復元するパリティデータを作成する。すなわち、揮発性メモリに格納されているデータが更新されると、その都度、最新のデータを復元するためのパリティデータを作成する。
したがって、格納部604は、作成部603によって作成されたパリティデータを、それぞれ稼働中のプロセッサ群がアクセスする揮発性メモリのうち、新たなデータが追加または新たなデータに更新された揮発性メモリ以外の揮発性メモリに格納する。
始動検出部605は、上位プログラムからのプロセッサへの指示を検出する機能を有する。具体的には、始動検出部605は、複数のプロセッサの中の停止中のプロセッサへの電力供給の始動を検出する。なお、検出結果は、RAM503、磁気ディスク505なの記憶領域に記憶される。
復帰部606は、電力供給が開始されたプロセッサの揮発性メモリに、待避中のデータを復帰する機能を有する。具体的には、復帰部606は、始動検出部605によって電力供給の始動が検出された場合、共有メモリ104に復元されたデータを、電力供給の始動が検出されたプロセッサがアクセスする揮発性メモリに格納する。
また、復元部602によるデータの復元中に、始動検出部605によって、電力供給の始動が検出された場合、揮発性メモリに格納されていたデータのうち、共有メモリ104に復元されていないデータがある。これらのデータについて、復帰部606は、稼働中のプロセッサ群がアクセスする揮発性メモリに格納されているパリティデータを用いて復元して復帰させる。
作成部603は、上述した復帰部606によってデータが復元された場合には、稼働中のプロセッサ群がアクセスする揮発性メモリにそれぞれ格納されているデータを復元するパリティデータを作成する。また、格納部604は、作成部603によって作成されたパリティデータを、パリティデータによって復元されるデータが格納されている揮発性メモリ以外の揮発性メモリに格納する。すなわち、揮発性メモリ1に格納されていたデータを復元するパリティデータは、揮発性メモリ1以外の稼働中の揮発性メモリ群に格納される。
また、データ復元装置110は、上述した停止検出部601や始動検出部605の検出機能に加えて、いずれかのプロセッサから揮発性メモリに格納されているデータに対する読込要求を検出する読込検出機能を用意してもよい。
具体的には、読込検出機能によって、読込要求が検出されたデータが格納されている揮発性メモリが稼働中でない場合、データ復元装置110は、データが共有メモリ104に格納されていることをデータの読込を実行するプロセッサに通知する。通知を受けたプロセッサは、通知に基づいて所望のデータが格納されていない揮発性メモリではなく、実際に所望のデータが格納されている共有メモリ104に格納されているデータを読み込むことができる。
また、停止中の揮発性メモリに格納されていたデータに対して、共有メモリ104に復元する前に読込要求が発生した場合がある。上述のような場合、データ復元装置110は、復元部602の機能を利用して、パリティデータに基づいて、停止中の揮発性メモリに格納されていたデータを復元する。さらに、データ復元装置110は、復元したデータの格納先を、データの読込を実行するプロセッサに通知することによって、所望するデータを読み込ませることができる。
またデータ復元装置110は、さらに、稼働中のプロセッサ数に応じて、本実施の形態にかかるデータ復元処理と、従来のデータ待避処理とのいずれかを選択的に適用させてもよい。稼働中のプロセッサ数が極端に少なくなってしまうと、稼働中の揮発性メモリの容量に占めるパリティデータ量の割合が増してしまう。すなわち、プロセッサが本来の処理に利用できる揮発性メモリの容量が小さくなり、プロセッサの機能低下を招いてしまい、結果として電力効率が悪化してしまう。
そこで、データ復元装置110を適用するマルチコアプロセッサ600のプロセッサの総数や、揮発性メモリの容量に応じて、あらかじめ定めたCPU数の規定値をしきい値として、しきい値を基準に本実施の形態にかかるデータ復元処理と、従来のデータ待避処理とのいずれを利用するか自動的に判断する構成にすることもできる。しきい値を利用した判断を行うことによって、データ復元装置110は、マルチコアプロセッサ600内の各プロセッサの稼働状況に応じて、最も電力効率のよい動作となるように支援することができる。
具体的には、たとえば、マルチコアプロセッサ600によって実行中のOSによって、稼働中のプロセッサの数がしきい値以上か否かを判断する処理を実行させる。そして、プロセッサが、マルチコアプロセッサ600のいずれかのプロセッサへの停止指示を受け付けると、稼働中のプロセッサの数がしきい値以上と判断された場合、OSは、停止指示が受け付けられたプロセッサおよび当該プロセッサがアクセスする揮発性メモリへの電力供給の停止指示を電源101に出力して、即座に電力供給を停止する。
すなわち、データ復元装置110では、本実施の形態にかかるデータ復元処理を実行させるため、揮発性メモリへの電力供給が停止しても、格納されていたデータは、共有メモリ104内に復元される。
一方、稼働中のプロセッサの数がしきい値以上ではないと判断された場合、パリティデータ量が大きくなってしまう。そこで、OSは、従来技術と同様に、揮発性メモリ内のデータを共有メモリ104に待避させるまで電力供給の停止を待つ。
具体的には、OSは、マルチコアプロセッサ600に、稼働中のプロセッサの数がしきい値以上ではないと判断された場合、停止指示が受け付けられたプロセッサの揮発性メモリに格納されているデータを共有メモリ104に転送する。また、OSは、上述の転送によって揮発性メモリに格納されているデータが共有メモリ104に転送された後、揮発性メモリへの電力供給の停止指示を電源101に出力する。
(データ復元処理の手順)
図7は、データ復元装置によるデータ復元処理の手順を示すフローチャートである。図7のフローチャートは、データ復元装置110が、プロセッサに対する停止指示を受けた際に、揮発性メモリに格納されていたデータを自動的に復元して共有メモリ104に格納するまでの手順を示している。図7の各処理を実行することによって、データ復元装置110を備えたマルチコアプロセッサ600は、停止指示を受けたプロセッサの揮発性メモリに格納された内容の待避処理を待つことなく、即座に電源を停止することができる。
図7において、データ復元装置110は、まず、停止検出部601によって停止指示を検出したか否かを判断する(ステップS701)。ステップS701において、停止指示を検出したと判断された場合(ステップS701:Yes)、データ復元装置20は、ステップS704の処理に移行し、停止対象となる揮発性メモリに格納されていたデータの復元処理を行う。
なお、ステップS701において、停止指示を検出していないと判断された場合(ステップS701:No)、データ復元装置110は、OSが現在稼働中の揮発性メモリに対して新たなデータを格納するか否かを判断する(ステップS702)。ステップS702によって、新たなデータを格納するか否かは、マルチコアプロセッサ600を動作させる上位のプログラム(ここではOS(Operating System))からの書込指示を受けたか否かに応じて判断される。
ステップS702において、新たなデータを格納すると判断された場合(ステップS702:Yes)、データ復元装置110は、作成部603によって、揮発性メモリに格納された新たなデータを復元するためのパリティデータを作成し、格納部604によって稼働中のプロセッサの揮発性メモリに格納される(ステップS703)。
一方、ステップS701によって停止指示を検出したと判断された場合、データ復元装置110は、復元部602によって、パリティデータを用いて停止したプロセッサの揮発性メモリに格納されていたデータを共有メモリ104に復元する(ステップS704)。
ステップS703,S704の処理が完了した後、もしくは、ステップS702において、新たなデータを格納しないと判断された場合(ステップS702:No)、データ復元装置110は、始動検出部605によって始動指示を検出したか否かを判断する(ステップS705)。
ステップS705によって始動指示を検出した場合(ステップS705:Yes)、データ復元装置110は、復帰部606によって、共有メモリ104にステップS704によって復元したデータを、始動したプロセッサの揮発性メモリに復帰する(ステップS706)。一方、ステップS705によって始動指示を検出しなかった場合(ステップS705:No)、ステップS706の処理を行わずに、ステップS707の処理に移行する。
その後、データ復元装置110は、OSなどの上位システムから終了指示を受けたか否かを判断する(ステップS707)。データ復元装置110は、終了指示を受けなければ(ステップS707:No)、ステップS701〜S706までの処理を繰り返す。そして、ステップS707において、データ復元装置110は、終了指示を受けると(ステップS707:Yes)、そのまま一連の処理を終了する。
以上説明したように、データ復元装置110を用意することによって、マルチコアプロセッサ600のいずれかのプロセッサとその揮発性メモリへの電力供給を停止させても揮発性メモリに格納されていたデータを復元することができる。したがって、従来のように、揮発性メモリ内のデータの待避を考慮することなく、高速にCPUを停止して消費電力を大幅に削減することができる。また、データ復元装置110は、マルチコアプロセッサ600において、稼働中のプロセッサ数に応じて電源停止時のデータ待避の手法を自動的に選択させることもできる。
次に、上述したようなデータ復元処理を実現するデータ復元装置110の具体的な適用例として、データ復元装置110の機能を、RAIDコントローラによって実現する実施例1〜3について詳しく説明する。
(実施例1)
図8は、RAIDコントローラを備えたマルチコアプロセッサの構成例を示すブロック図である。実施例1では、RAIDコントローラ801によって、データ復元装置110の機能を実現する。マルチコアプロセッサ800のRAIDコントローラ801は、ローカルメモリバス102によって、各CPUとローカルメモリとが接続されている。また、各CPUもローカルメモリバス102を経由して他のCPUのローカルメモリにアクセスできる構成になっている。
図9は、実施例1におけるRAIDコントローラの内部構成例を示すブロック図である。RAIDコントローラ801は、メモリアクセス監視部901と、パリティ生成部902と、パリティ再構築部903と、コマンド受信部904と、復元データ生成部905と、データ待避部906とを備えている。
メモリアクセス監視部901は、CPUからローカルメモリへのアクセスを監視する。また、パリティ生成部902は、ローカルメモリに格納されたデータを復元するためのパリティデータを生成する。
パリティ再構築部903は、ローカルメモリに書込があった場合に対応するパリティデータを更新する。コマンド受信部904は、OSから出力されたコマンドを受信してコマンドの内容に応じた処理を実行する。復元データ生成部905は、パリティデータを利用して、停止されたローカルメモリに格納されていたデータを共有メモリ104内に復元する。データ待避部906は、電源停止時にローカルメモリに格納されていたデータを一時的に待避させる。なお、上述した各機能部の詳細な処理手順は後述する。
なお、ローカルメモリのデータ領域は、通常のデータ領域として利用する領域と、パリティデータ領域に分割されている。また、現在稼働しているローカルメモリがN個有り、現在稼働しているローカルメモリの中でm番目のローカルメモリのアドレスxの値を書き換えたとすると、(N×x+m)/(N−1)…(1)式の整数部分が同一となるx,mの組み合わせの場所からデータを読み込んでパリティデータを生成する。
また、(N×x+m)/(N−1)2…(2)式の整数部分をy、余りをkとすると、N−1−k番目のローカルメモリのy番目のアドレスにパリティデータを書き込む。なお、パリティデータの生成には幾つか手法が知られているが、ここで説明する実施例1〜3では、RAID5技術と同様に排他論理和によりパリティデータを生成する。
具体的には、パリティ生成部902では、上記(1),(2)式から、現在稼働しているローカルメモリ数がNでk番目のローカルメモリのy番目のアドレスにパリティデータを再構築する。そして、上記(1),(2)式から逆算して、N×x+m=(N×x+m)/(N−1)を満たすm,xの組み合わせのローカルメモリ/アドレスからデータを読み込んで排他論理和によりパリティデータを生成する。
<通常時の動作>
図10は、通常時の動作例を示す説明図である。まず、RAIDコントローラ801の通常時の動作について説明する。図10のように、通常時RAIDコントローラ801は、稼働中のいずれかのCPUからローカルメモリへのアクセスが発生すると、アクセス内容に応じて、パリティデータを生成する。
具体的には、図10のようにCPU#0からローカルメモリ0への書込処理が行われると、書込処理によって、ローカルメモリ0のデータの内容が更新される。このとき、メモリアクセス監視部901は、CPU#0からのアクセスを検出する。そして、検出されたアクセスが書込処理であったため、パリティ生成部902は、書込処理後のデータを復元するパリティデータ(Parity11,21,31)を生成する。生成されたパリティデータは、パリティ生成部902によって、CPU#3のパリティデータ領域に格納される。
図11は、通常時のRAIDコントローラの動作手順を示すフローチャートである。通常時とは、マルチコアプロセッサが稼働中のCPUのみの動作であり、CPUの停止や、停止中のCPUの復帰などの動作が発生していない状態を意味する。
図10において、RAIDコントローラ801は、まずメモリアクセス監視部901において、ローカルメモリへの書込を検出する(ステップS1101)。その後、RAIDコントローラ801は、パリティ生成部902において、まず、対応するデータを読み込み(ステップS1102)、パリティデータを生成する(ステップS1103)。その後、RAIDコントローラ801は、対応するパリティデータを更新し(ステップS1104)、一連の処理を終了する。
以上説明したように、通常時RAIDコントローラ801では、ローカルメモリへの書込が検出された場合には、その都度、書き込まれたデータを復元するためのパリティデータを生成し、生成されたパリティデータを最新のパリティデータとして更新しておく。したがって、どのようなタイミングで電源停止が発生しても、最新データを復元することができる。
<電源停止時の動作>
図12は、電源停止時の動作例を示す説明図である。図12に例示したように、稼働中のCPUの中のいずれか1つのCPUの電源停止が行われた場合、停止されたCPUのローカルメモリも、格納されているデータを待避することなく、即座に電力供給が停止し、電源停止状態となる。RAIDコントローラ801は、電力供給停止後に、稼働中のローカルメモリに格納されている冗長データから電源停止したローカルメモリに格納されていたデータの内容を共有メモリ104上に復元する(ステップS1201)。
図13は、実施例1における電源停止時のOSの動作手順を示すフローチャートである。図13のフローチャートは、電源停止時にOSからRAIDコントローラ801へ出力される指示内容と、その手順を表している。
図13において、OSはまず、稼働中のCPU数が規定値以下か否かを判断する(ステップS1301)。ステップS1301において、稼働中のCPU数が規定値以下でないと判断された場合(ステップS1301:No)、OSは、パリティデータが再構築中か否かを判断する(ステップS1302)。
ステップS1302において、パリティが再構築中であると判断された場合(ステップS1302:Yes)、OSは、再構築中が完了するまで待ち(ステップS1303)、レジスタの内容を共有メモリ104に待避させる(ステップS1304)。なお、ステップS1302において、パリティが再構築中ではないと判断された場合(ステップS1302:No)、ステップS1303によって待機することなく、ステップS1304の処理に移行する。
その後、OSは、キャッシュをフラッシュして(ステップS1305)、RAIDコントローラ801に対象となるCPUの停止を通知する(ステップS1306)。さらに、OSは、他のプロセッサに対象となるCPUの停止を通知し(ステップS1307)、電源機構を操作して(ステップS1308)、対象となるCPUへの電力供給を完全に停止させ、一連の処理を終了する。
一方、ステップS1301において、CPU数が規定値以下であると判断された場合(ステップS1301:Yes)、OSは、レジスタの内容を共有メモリ104に待避し(ステップS1309)、ローカルメモリの内容を共有メモリ104に待避する(ステップS1310)。その後、OSは、キャッシュをフラッシュし(ステップS1311)、ス
テップS1307の処理に移行する。
図14は、電源停止時のRAIDコントローラによる動作手順を示すフローチャートである。図14のフローチャートは、電源停止時にRAIDコントローラ801内の各機能部がどのような処理を行うかを表している。
図14において、RAIDコントローラ801は、コマンド受信部904が電源停止コマンドの受信をトリガに動作を開始する。まず、コマンド受信部904は、停止後のCPU数が規定値以下か否かを判断する(ステップS1401)。ステップS1401において、CPU数が規定値以下ではないと判断された場合(ステップS1401:No)、コマンド受信部904は、停止したCPUのローカルメモリの内容の待避を開始して(ステ
ップS1402)、パリティデータの再構築を開始する(ステップS1403)。
ステップS1402によってローカルメモリの内容の待避が開始されると、データ待避部906は、未待避のデータを検索する(ステップS1411)。復元データ生成部905は、ステップS1411の検索結果を利用して、対応するデータを読み込み(ステップS1421)、復元データを生成する(ステップS1422)。復元データ生成部905によって復元データが生成されると、データ待避部906は、共有メモリ104に復元データを待避する(ステップS1412)。データ待避部906による待避処理は、未待避のデータがなくなるまで繰り返し行われる。
一方、ステップS1401において、CPU数が規定値以下であると判断された場合(ステップS1401:Yes)、ステップS1402と同様に停止したCPUのローカルメモリの内容の待避を開始する(ステップS1404)。ステップS1404の場合は、ステップS1402とは異なり、従来の待避処理を行う。すなわち、ステップS1404の待避処理が完了するまで、ローカルメモリへの電力供給が継続される。
一方、ステップS1402の待避処理が開始された場合、ステップS1403の処理後に、パリティ再構築部903によって未再構成データを検索する(ステップS1431)。その後、パリティ生成部902によって、対応するデータを読み込み(ステップS1441)、パリティデータを生成する(ステップS1442)。その後、パリティ生成部902によって、生成されたパリティデータを各ローカルメモリへ書き込む(ステップS1443)。上述したパリティデータの生成は、未再構成データがなくなるまで、繰り返し行われる。
図15〜18は、CPU#1の停止動作の手順を示す説明図である。図15では、ローカルメモリ1が停止された状態を表している。ローカルメモリ1の停止に伴い、ローカルメモリ1に格納されたデータを復元しなければならない。また、同時に、稼働中のローカルメモリが停止されても格納されていたデータを復元可能にするため、パリティデータを再構築しなければならない。
復元データ生成部905では、DATA11,31およびParity11,21,31によってDATA21が復元される。復元されたデータはデータ待避部906によって共有メモリ104に格納される。また、パリティ生成部902では、稼働中のローカルメモリに格納されているデータを復元するパリティデータ(Parity11,31)を生成する。生成されたパリティデータは、パリティ再構築部903によってローカルメモリ3に格納される。
引き続き、図16のように、復元データ生成部905では、DATA12,41およびParity41,12,22によってDATA22が復元される。復元されたデータはデータ待避部906によって共有メモリ104に格納される。また、パリティ生成部902では、稼働中のローカルメモリに格納されているデータを復元するパリティデータ(Parity41,12)を生成する。生成されたパリティデータは、パリティ再構築部903によってローカルメモリ2に格納される。
引き続き、図17のように、復元データ生成部905では、DATA32,43およびParity23,33,43によってDATA23が復元される。復元されたデータはデータ待避部906によって共有メモリ104に格納される。また、パリティ生成部902では、稼働中のローカルメモリに格納されているデータを復元するパリティデータ(Parity32,42)を生成する。生成されたパリティデータは、パリティ再構築部903によってローカルメモリ0に格納される。
最後に、図18のように、停止されたローカルメモリに格納されたDATA2Nまでの処理が終了すると、復元データ生成部905の処理は終了し、パリティ生成部902では、稼働中のローカルメモリに格納されているデータを復元するパリティデータ(Parity3N,4N)を生成する。生成されたパリティデータは、パリティ再構築部903によってローカルメモリ0に格納される。
上述の図13〜18にて説明したように、電源停止時にはOSからRAIDコントローラ801へ電力供給の停止に関する指示が入力される。RAIDコントローラ801は、コマンド受信部904によってOSからの指示に応答してデータの復元やパリティデータの再構築を行う。したがって、ローカルメモリ内のデータの待避を待たずに済むため、高速な電源停止が可能となる。
<電源停止中のアクセス>
図19は、電源停止中のローカルメモリへのアクセス例を示す説明図である。マルチコアプロセッサ800によって実行する処理の内容によっては図19のように電源停止中のローカルメモリに対するアクセスが発生することがある。アクセスとは、データの読込を行う読込処理と、データの書込を行う書込処理とを意味する。
読込処理、書込処理いずれの場合も実際のアクセス先であるローカルメモリ1は停止中であり、対象となるデータは存在しない。そこで、RAIDコントローラ801は、CPU#0からのアクセスを検出して、CPU#0の要求をローカルメモリ1の代わりに受け持って、実際に対象となるデータが存在するメモリ(たとえば共有メモリ104)へ誘導する。
図20は、電源停止中のRAIDコントローラによるアクセス手順を示すフローチャートである。図20のフローチャートは、停止中のローカルメモリへのアクセスが発生した際のアクセス内容に応じたRAIDコントローラ801の動作の違いを表している。
図20において、メモリアクセス監視部901は、停止中のローカルメモリへのアクセスの検出をトリガにして処理を開始する。メモリアクセス監視部901は、まず、検出したアクセスが読込処理か否かを判断する(ステップS2001)。ステップS2001において、検出したアクセスが読込処理であると判断された場合(ステップS2001:Yes)、メモリアクセス監視部901は、アクセス先のデータが再構成済みか否かを判断する(ステップS2002)。
ステップS2002において、再構成済みのデータでないと判断された場合(ステップS2002:No)、メモリアクセス監視部901は、現状ではアクセス対象となるデータが存在しないため、パリティデータからローカルメモリに格納されていたデータを復元する(ステップS2003)。一方、ステップS2003において、再構成済みのデータであると判断された場合(ステップS2002:Yes)、対象となるデータは共有メモリ104に復元済みであることを意味する。したがって、メモリアクセス監視部901は、共有メモリ104に待避したデータを読み込む(ステップS2004)。
ステップS2001によってアクセスが読込処理と判断された場合には、ステップS2003もしくはS2004の処理によって対象となるデータが読み込まれる。したがって、メモリアクセス監視部901は、読込元CPUにデータを返して(ステップS2005)、一連の処理を終了する。
なお、ステップS2001において、読込処理ではないと判断された場合(ステップS2001:No)、メモリアクセス監視部901は、今回検出したアクセスは書込処理であると判断する。したがって、メモリアクセス監視部901は、共有メモリ104の待避領域へ対象となるデータを書き込んで(ステップS2006)、一連の処理を終了する。アクセスが書込処理であった場合には、今回のアクセスによってデータ自体が更新されてしまう。したがって、読込処理のようにローカルメモリに格納されていたデータを復元する必要はない。
また、上述したように、今回検出されたアクセスが読込処理であり、対象となるデータが再構成されていなかった場合には、ステップS2003によってデータが復元されている。ステップS2003において、データを復元する際の処理の主体は復元データ生成部905となる。
具体的に説明すると、復元データ生成部905は、ステップS2003の処理がトリガとなり、一連の処理を開始する。復元データ生成部905は、まず、対応するデータ(パリティデータ)を読み込み(ステップS2011)、読み込んだデータを利用して、ローカルメモリに格納されていたデータを復元データとして生成する(ステップS2012)。ステップS2012によって生成されたデータは、メモリアクセス監視部901に返され、ステップS2005の処理に利用される。以下に、停止中のローカルメモリへの読込処理と書込処理との手順について具体例を挙げて説明する。
図21,22は、電源停止中のローカルメモリへの読込手順を示す説明図である。図21では、CPU#0から停止中のCPU#1のローカルメモリ1へ読込処理の要求が発生している。CPU#0は、ローカルメモリ1に格納されている(実際には格納されていた)データを順に読み出すため、まず、先頭のDATA21を読込処理の対象のデータとしている。
メモリアクセス監視部901は、CPU#0からの読込処理を検出すると、DATA21が共有メモリ104に再構成済みのデータか否かを判断する。図21の例では、ローカルメモリ1のDATA21〜23までが共有メモリ104に再構成済みのデータである。したがって、メモリアクセス監視部901は、CPU#0に共有メモリ104に格納されているDATA21を読み込ませる。
CPU#0は、ローカルメモリ1に格納されていたデータをDATA21から順番に読み込んでいくが、図22に例示したように、対象データがDATA24以降となると共有メモリ104から読み込むことができない。そこで、RAIDコントローラ801は、復元データ生成部905によって、再構成が済んでいないデータを復元する。
たとえば、図22のように、DATA24を復元するには、復元データ生成部905は、稼働中のCPU#0,2,3のローカルメモリ0,2,3に格納されているDATA14,34およびParity14,24,34の排他的論理和演算を満たすデータを生成することによって、DATA24を得ることができる。DATA25以降についても同様の手順で復元することができる。メモリアクセス監視部901は、復元データ生成部905によって復元されたデータをCPU#0に読み込ませることによって、停止中のローカルメモリ1であっても稼働中と遜色なくデータを読み込むことができる。
図23,24は、電源停止中のローカルメモリへの書込手順を示す説明図である。図23では、CPU#0から停止中のCPU#1のローカルメモリ1への書込処理の要求が発生している。CPU#0は、ローカルメモリ1に格納されている(実際には格納されていた)データの中のアドレス順に順次書き込むため、まず、先頭のDATA21を書込処理の対象のデータとしている。
メモリアクセス監視部901は、CPU#0からの書込処理を検出すると、共有メモリ104にDATA21を書き込ませる。その後、図24ように対象となるデータがDATA24に移行しても、メモリアクセス監視部901は、図23の処理と同様に共有メモリ104にDATA24を書き込ませる。
読込処理とは異なり、書込処理の際には、書込後のデータが最新のデータとなるため、共有メモリ104に対象となるデータが再構成済みか否かを判断する必要はない。いずれのデータであっても、メモリアクセス監視部901は、CPU#0に対して一様に共有メモリ104に書き込むように誘導すればよい。
以上説明したように、停止中のローカルメモリへのアクセスが発生した場合には、アクセスが、読込処理であるのか書込処理であるのかに応じてRAIDコントローラ801の処理内容が異なる。読込処理であった場合には、さらに、読込処理の対象となるデータが再構成済みのデータであれば単純に共有メモリ104から読み込むように誘導すればよいが、再構成済みのデータではない場合には、逐一復元データを生成して、アクセス元のCPUに読み込ませる必要がある。
しかしながら、読込処理が完了した後は、データ自体に変更はないためそのまま一連の処理を終わらせることができる。また、書込処理によってデータ自体の変更があった場合でも、稼働中のCPUのローカルメモリには影響しないためパリティデータを再構築する必要はない。
<電源復帰時の動作>
図25は、電源復帰時の動作例を示す説明図である。次に、一旦、電源停止されたCPUに再度電力が供給される電源復帰時の動作について説明する。図25のように、CPU#1およびローカルメモリ1の電力供給が再開すると、RAIDコントローラ801は、まず、共有メモリ104に待避されていたデータを、ローカルメモリ1に復元する(ステップS2501)。
続いて、RAIDコントローラ801は、電源復帰後の稼働中のCPUの数に応じてパリティデータを再構築する(ステップS2502)。CPU#1が復帰したことによって、CPU#0〜3が稼働中となった。したがって、各CPUのローカルメモリは、自ローカルメモリに格納しているデータを復元するためのパリティデータを、自ローカルメモリ以外の3つのローカルメモリのパリティ領域に格納する。
図26は、実施例1における電源復帰時のOSの動作手順を示すフローチャートである。図26のフローチャートは、停止中のCPUが他のCPUからの復帰指示を受けて、通常動作の処理を再開するまでの手順を示している。
図26において、OSは、停止中のCPU以外の他のCPUにおける電源復帰の決定処理をトリガに動作を開始する。まずOSは、上述の他のCPUから停止中のCPUの電源機構を操作させる(ステップS2601)。
その後、OSは、電源復帰の対象CPUにおいて、RADIコントローラ801に復帰を通知する(ステップS2611)。続いて、OSは、レジスタの内容を復元し(ステップS2612)、他のプロセッサ(他のCPU)に復帰を通知する(ステップS2613)。その後、OSは、復帰させたCPUの処理を再開させることによって(ステップS2614)、一連の復帰処理を終了する。
図27は、電源復帰時のRAIDコントローラによる動作手順を示すフローチャートである。図27のフローチャートは、OSから電源復帰指示を受けた際のRAIDコントローラ801の動作を表している。
図27において、RAIDコントローラ801は、コマンド受信部904において、OSから出力された電源復帰に関するコマンドの受信をトリガに処理を開始する。まず、コマンド受信部904は、復帰処理の対象となるデータが再構成中か否かを判断する(ステップS2701)。なお、対象となるデータとはOSから復帰指示がなされたCPUがアクセスするローカルメモリに格納されていたデータを意味する。
ステップS2701において、再構成中であると判断された場合(ステップS2701:Yes)、ローカルメモリの復元とパリティデータの再構築を開始する(ステップS2702)。一方、再構成中でないと判断された場合も(ステップS2701:No)、同様に、ローカルメモリの復元とパリティデータの再構築を開始する(ステップS2704)。後述するように、ステップS2702の場合は、再構成中のデータについては、パリティデータを利用して復元してから、データ待避部906の処理に移行する。一方、ステップS2704の場合には、再構成中のデータを扱う必要がないため、そのままデータ待避部906の処理に移行する。
ステップS2702の処理の後、コマンド受信部904は、ローカルメモリに格納されていたデータの復元を開始し(ステップS2703)、復元データ生成部905によって復元データの生成を実行させる。
復元データ生成部905では、まず、未再構築のパリティデータを検索し(ステップS2741)、対応するデータを読み込む(ステップS2702)。その後、復元データ生成部905は、ステップS2742において読み込んだデータを用いて復元データを生成する(ステップS2743)。ステップS2743による復元データの生成は未再構築のパリティデータがなくなるまで繰り返して実行される。
コマンド受信部904の処理に戻り、ステップS2701において再構成中ではないと判断された場合(ステップS2701:No)、コマンド受信部904は、ローカルメモリに格納されていたデータの復元を開始する(ステップS2704)。上述したように、ステップS2704の場合、ステップS27002の処理と異なり、再構成中のデータは存在しないため、復元データ生成部905による復元データの生成は行われない。
また、コマンド受信部904は、ステップS2702およびS2704が開始されると、パリティ再構築部903によって未再構成データの検索が行われる(ステップS2711)。ステップS2711における未再構成データとは、各ローカルメモリに格納されているデータの中の、電源復帰後に稼働中のCPU数に応じたパリティデータの再構築が済んでいないデータを意味する。
続いて、パリティ生成部902によって、パリティ再構築部903によって検索された未再構成データを対象としたパリティデータの生成が行われる。まず、パリティ生成部902は、対応するデータを読み込み(ステップS2721)、対応するデータを復元するためのパリティデータを生成する(ステップS2722)。その後。パリティ生成部902は、生成したパリティデータを、各CPUのローカルメモリに書き込んで(ステップS2723)、一連の処理を終了する。
また、データ待避部906では、コマンド受信部904のステップS2702もしくはS2704の処理の後、データ待避処理が開始される。データ待避部906は、まず、ローカルメモリに未復旧のデータを検索する(ステップS2731)。その後、ステップS2731によって検索されたデータをローカルメモリへ復旧する(ステップS2732)。上述したデータ待機処理は、未復旧のデータがなくなるまで繰り返し行われる。
図28,29は、CPU#1の復帰動作の手順を示す説明図である。図28では、停止中であったCPU#1の復帰指示が行われ、CPU#1およびローカルメモリ1への電力供給が開始されている。ローカルメモリ1に格納されていたデータは電源停止時に一旦すべて消失している。そこで、RAIDコントローラ801は、ローカルメモリ1が復帰状態になると、共有メモリ104に待避されていたデータを順次、ローカルメモリ内に復元する。
具体的には、図28のようにRAIDコントローラ801は、まず、データ待避部906によって、共有メモリ104からDATA21を読み込み、ローカルメモリ1内に復帰する。その後、パリティデータ生成部902は、現在各ローカルメモリに格納されているデータを復元するための、パリティデータを生成する。
図28の例では、パリティ生成部902は、ローカルメモリ0に格納されているDATA11と、ローカルメモリ1に格納されているDATA21とローカルメモリ2に格納されているDATA31を利用してParity11,21,31を生成する。生成されたパリティデータ(Parity11,21,31)は、パリティ再構築部903によって、現在ローカルメモリ3の中のパリティデータ(Parity11,31)が格納されている位置に上書きされる。
RAIDコントローラ801は、DATA11以降のデータについても同様に共有メモリ104から読み出してローカルメモリ1に格納する。その後、未再構成のデータを処理する場合がある。ここで未再構成とは、電源停止後に、パリティデータによって共有メモリ104に復元データが生成されていないデータを意味する。本来、停止されたローカルメモリに格納されていたデータは、パリティデータによって共有メモリ104に再構成される。ところが、電源停止から復帰までの期間が短い場合にはすべてのデータが共有メモリ104に再構成される前の状態で復帰処理が始まってしまうこともある。
図29では、DATA24が共有メモリ104内に再構成されていない場合を表している。このような再構成されていないデータの場合、単純に共有メモリ104から読み込んでローカルメモリ1に復帰させることはできない。そこで、復元データ生成部905によって、パリティデータからDATA24が生成される。
DATA24は、具体的には、ローカルメモリ0に格納されたDATA14と、ローカルメモリ2に格納されたDATA34と、ローカルメモリ3に格納されたParity14,24,34との排他的論理和演算を行うことによって得られる。図28のように、CPUの電源が停止された後に再構築されたパリティデータは、図28のローカルメモリ3に格納されていたParity11,31と自ローカルメモリ以外の2つのDATAに基づいて対象となるデータが復元されている。
したがって、Parity14,24,34など、3つのローカルメモリに格納されているデータによって復元されるようなパリティデータが格納されていることは、すなわち、DATA24以降のデータのように、停止後のパリティデータの再構築の済んでいないデータがあることを意味している。
上述の図25〜29にて説明したように、電源停止時にはOSからRAIDコントローラ801へ電力供給の再開に関する指示が入力される。RAIDコントローラ801は、コマンド受信部904によってOSからの指示に応答してデータの復元やパリティデータの再構築を行う。RAIDコントローラ801は、電源停止中に他のCPUから停止中のローカルメモリへのアクセスが発生し、データの内容が更新されるような場合であっても、共有メモリ104に復元したデータに対して書込処理を施すように誘導している(詳しくは上記<停止中のアクセス>参照)。したがって、共有メモリ104に待避されているデータをローカルメモリに復帰させるだけで、ローカルメモリは、即座に最新の更新内容が反映されたデータが格納されたことになる。
<電源復帰中のアクセス>
図30は、復元中のローカルメモリへのアクセス例を示す説明図である。マルチコアプロセッサ800によって実行する処理の内容やタイミングによっては、図30のように復帰中のローカルメモリに対するアクセスが発生することがある。復帰処理によって既にローカルメモリ内に復帰したデータに対するアクセスの場合には問題がない。
ところが、図30のように、ローカルメモリ内に復帰していないデータに対するアクセスの場合には、対象となるデータは存在しない。そこで、RAIDコントローラ801は、CPU#0からのアクセスを検出して、CPU#0の要求をローカルメモリ1の代わりに受け持って、実際に対象となるデータを復元してアクセス可能にする。
図31は、復元中のRAIDコントローラによるアクセス手順を示すフローチャートである。図31のフローチャートは、復元中のローカルメモリへのアクセスが発生した際のアクセス内容に応じたRAIDコントローラ801の動作の違いを表している。
図31において、メモリアクセス監視部901は、復元中のローカルメモリへのアクセスの検出をトリガにして処理を開始する。メモリアクセス監視部901は、まず、検出したアクセスが読込処理か否かを判断する(ステップS3101)。ステップS3101において、検出したアクセスが読込処理であると判断された場合(ステップS3101:Yes)、メモリアクセス監視部901は、アクセス先のデータが再構成済みか否かを判断する(ステップS3102)。
ステップS3102において、再構成済みのデータでないと判断された場合(ステップS3102:No)、メモリアクセス監視部901は、現状ではアクセス対象となるデータが存在しないため、パリティデータからローカルメモリに格納されていたデータを復元する(ステップS3103)。一方、ステップS3102において、再構成済みのデータであると判断された場合(ステップS3102:Yes)、対象となるデータは共有メモリ104に復元済みであることを意味する。したがって、メモリアクセス監視部901は、共有メモリ104に待避したデータを読み込む(ステップS3104)。
ステップS3101によってアクセスが読込処理と判断された場合には、ステップS3103もしくはS3104の処理によって対象となるデータが読み込まれる。したがって、メモリアクセス監視部901は、読込元CPUにデータを返して(ステップS3105)、一連の処理を終了する。
なお、ステップS3101において、読込処理ではないと判断された場合(ステップS3101:No)、メモリアクセス監視部901は、今回検出したアクセスは書込処理であると判断する。したがって、メモリアクセス監視部901は、対象となるローカルメモリへ書き込んで(ステップS3106)、一連の処理を終了する。その後、ステップS3106によって書き込まれたデータが最新のデータとなるため、メモリアクセス監視部901は、最新のデータを復元するためのパリティデータを生成して現在のパリティデータに対して更新を行う(ステップS3107)。
ステップS3107によってパリティデータの更新の指示がなされると、パリティ生成部902では、上述したように最新のデータを復元するためのパリティデータを生成する。パリティ生成部902は、まず、対象となるデータの読込を行う(ステップS3121)。
続いてパリティ生成部902は、ステップS3121において読み込まれたデータを用いてパリティデータを生成する(ステップS3122)。最後に、パリティ生成部902は、対応するパリティデータを、ステップS3122にて生成されたパリティデータに更新して(ステップS3123)、一連の処理を終了する。
また、上述したように、今回検出されたアクセスが読込処理であり、対象となるデータが再構成されていなかった場合には、ステップS3103によってデータが復元されている。ステップS3103において、データを復元する際の処理の主体は復元データ生成部905となる。
具体的に説明すると、復元データ生成部905は、ステップS3103の処理がトリガとなり、一連の処理を開始する。復元データ生成部905は、まず、対応するデータ(パリティデータ)を読み込み(ステップS3111)、読み込んだデータを利用して、ローカルメモリに格納されていたデータを復元データとして生成する(ステップS3112)。
ステップS3112によって生成されたデータは、メモリアクセス監視部901に返され、ステップS3105の処理に利用される。以下に、復元中のローカルメモリへの読込処理と書込処理との手順について具体例を挙げて説明する。
図32〜34は、復元中のCPU#1への読込動作の手順を示す説明図である。図32では、CPU#0からCPU#1がアクセスするローカルメモリ1に格納されている各データに対する読込動作が発生している。図32のように、ローカルメモリ1には、DATA21,22のデータが復元済みである。したがって、CPU#0は、DATA21を読み込む際には、ローカルメモリ1を参照する。このときRAIDコントローラ801のメモリアクセス監視部901は、CPU#0による読込動作の発生を検出する。
図33に示すように、CPU#0が、DATA23を読み込む場合、メモリアクセス監視部901は、CPU#0に通知して、データ待避部906によって、共有メモリ104に復帰されたDATA23を読み込ませる。
さらに、図34に示すように、ローカルメモリ1にも共有メモリ104にも復元されていないDATA24を読み込む場合、RAIDコントローラ801は、まず、メモリアクセス監視部901によって、復元中のデータへのアクセスであることを検出する。
復元データ生成部905では、ローカルメモリ1以外の稼働中のローカルメモリ(ローカルメモリ0,2,3)に格納されているDATA13,DATA33およびParity14,24,34によってDATA24を復元する。復元されたデータは、ローカルメモリ1に格納され、CPU#0によって読み込まれる。
図35,36は、復元中のCPU#1への書込動作の手順を示す説明図である。図35では、CPU#0からCPU#1がアクセスするローカルメモリ1に格納されている各データに対する書込動作が発生している。図35のように、ローカルメモリ1には、DATA21,22のデータが復元済みである。したがって、CPU#0は、DATA21への書込を行う際には、ローカルメモリ1にそのままアクセスする。このときRAIDコントローラ801のメモリアクセス監視部901は、CPU#0による書込動作の発生を検出する。
また、図35のように、DATA21の内容が更新されると、パリティ生成部902は、更新後のデータを復元できるように、新たなパリティデータを生成し、現在のパリティデータに上書きする。
その後、図36のように、ローカルメモリ1内に復元されていないDATA24への書込処理が発生した場合には、CPU#0は、そのままローカルメモリ1への書込処理を行う。読込処理と異なり、書込処理の場合には、データの内容が上書きされるため、DATA24を復元する必要がない。なお、新たにDATA24が書き込まれた場合、パリティ生成部902は、更新後のデータを復元できるように、新たなパリティデータを生成し、現在のパリティデータに上書きする。
以上説明したように、復元中のローカルメモリへのアクセスが発生した場合には、読込処理であるのか書込処理であるのかに応じてRAIDコントローラ801の処理内容が異なる。読込処理であった場合には、さらに、読込処理の対象となるデータが再構成済みのデータであれば単純に共有メモリ104から読み込むように誘導すればよいが、再構成済みのデータではない場合には、逐一復元データを生成して、アクセス元のCPUに読み込ませる必要がある。
しかしながら、読込処理が完了した後は、データ自体に変更はないためそのまま一連の処理を終わらせることができる。また、書込処理によってデータ自体の変更があった場合には、書込処理を反映させた最新のパリティデータを生成して稼働中のCPUのローカルメモリへ格納することによって、また、急にCPUの電源停止が起こっても、高速に最新のデータを復元することができる。
以上説明したように、実施例1では、CPUへの電源停止に伴ってローカルメモリへの電力供給が停止して消費電力を削減する構成になっている。通常、揮発性メモリであるローカルメモリへの電力の供給が停止すると、格納されていたデータは消失してしまい、復元することはできない。ところが、実施例1のデータ復元装置110は、あらかじめ、各ローカルメモリに格納されているデータを復元するためのパリティデータを、稼働中のローカルメモリにそれぞれ格納する。したがって、もしCPU1が電源停止となり、ローカルメモリ1への電力の供給が急に途絶えたとしても、ローカルメモリ1に格納されているデータ自体は消失してしまうが、即座に格納されていたデータを復元することができる。
また、マルチコアプロセッサ800では、不必要なCPUを停止させて、電力効率を上げるために、各CPUに対する電源停止や電源復帰が頻繁に発生するような利用形態が想定される。したがって、パリティデータによるデータの復元やパリティデータの再構築が完全に完了する前にもかかわらず、データの復元が不完全な状態のローカルメモリへアクセスが発生することもある。
そこで、実施例1では、RAIDコントローラ801によって、対象となるデータが現在どのような状態であるかを管理している。したがって、CPUによるアクセスエラーやデータの更新漏れのない、適切かつ効率的なアクセスを支援することができる。
(実施例2)
図37は、アクセス監視バスを備えたマルチコアプロセッサの構成例を示す説明図である。実施例2および後述する実施例3は、実施例1とは異なり、ローカルメモリバス102の備わっていないマルチコアプロセッサ3700を利用する場合について説明する。マルチコアプロセッサによっては設計や構造の制約上、実施例1のようなローカルメモリバス102を備えていないものもある。実施例2,3では、上述のようにローカルメモリなバス102が備えられていないマルチコアプロセッサを対象としたデータ復元処理の実施例について説明する。
ローカルメモリバス102が備わっていないとは、ローカルメモリ同士が相互にアクセスできないということを意味する。すなわち、各CPUは、自CPU以外の他のCPUがどのようなアクセスを行っているかを把握することができない。
そこで、実施例2のマルチコアプロセッサ3700の場合、新たにアクセス監視バス3701を追加した構成にすることによって、RAIDコントローラ3800による各ローカルメモリへのアクセスの監視や、パリティデータの更新およびローカルメモリ電源停止時のデータ待避を可能にする。
図38は、実施例2におけるRAIDコントローラの内部構成を示すブロック図である。図38のように、RAIDコントローラ3800は、実施例1と同様に、ローカルメモリの更新を監視するメモリアクセス監視部901と、パリティデータを生成するパリティ生成部902と、パリティデータの再構築を行うパリティ再構築部903と、CPUからの電源停止のコマンドを受信するコマンド受信部904と、パリティデータからローカルメモリに格納されていたデータを復元する復元データ生成部905と、電源停止時にローカルメモリの内容を待避するデータ待避部906と、を備えている。
加えて、実施例2のRAIDコントローラ3800は、電源再開時にローカルメモリの内容を復元するデータ復帰部907と、ローカルメモリの稼働状態を記録するローカルメモリ稼働情報テーブル3801とを備えている。ローカルメモリ稼働情報テーブル3801は、CPU#0〜3の稼働状況を管理するデータテーブルである。したがって、対応するCPUの稼働状況に応じて、「稼働」もしくは「停止」のいずれかの情報が設定されている。
<電源停止時の動作>
図39は、実施例2における電源停止時のOSの動作手順を示すフローチャートである。図39のフローチャートは、マルチコアプロセッサ3700内のいずれかのCPUの電源停止時にOSからRAIDコントローラ3800へ出力される指示内容と、その手順を表している。
図39において、OSは電源停止の決定をトリガに動作を開始する。まず、OSは、現在のCPU数が規定値以下か否かを判断する(ステップS3901)。ステップS3901において、CPU数が規定値以下ではないと判断された場合(ステップS3901:No)、OSは、パリティが再構成中か否かを判断する(ステップS3902)。
ステップS3902において、パリティが再構成中であると判断された場合(ステップS3902:Yes)、OSは、再構成が完了するまで待ち(ステップS3903)、レジスタの内容を共有メモリ104に待避させる(ステップS3904)。なお、ステップS3902において、パリティが再構成中ではないと判断された場合(ステップS390
2:No)、ステップS3903によって待機することなく、ステップS3904の処理に移行する。
その後、OSは、キャッシュをフラッシュして(ステップS3905)、RAIDコントローラ3800に対象となるCPUの停止を通知する(ステップS3906)。さらに、OSは、他のプロセッサに対象となるCPUの停止を通知し(ステップS3907)、電源機構を操作して(ステップS3908)、対象となるCPUへの電力供給を完全に停
止させ、一連の処理を終了する。
一方、ステップS3901において、CPU数が規定値以下と判断された場合(ステップS3901:Yes)、OSは、レジスタの内容をメモリに待避し(ステップS3909)、ローカルメモリの内容をメモリに待避する(ステップS3910)。その後、OSは、キャッシュをフラッシュし(ステップS3911)、ステップS3907の処理に移
行する。
以上説明したように、マルチコアプロセッサ3700のCPUを停止させて、稼働中のローカルメモリのいずれかへの電力の供給を停止する場合は、まず、OSなどの上位プログラムによって、従来通りレジスタの待避とキャッシュのフラッシュを行う。その後、OSは、ローカルメモリの内容は待避せずにRAIDコントローラ3800に自CPUの停止を通知してから電源を切る。
なお、電源を切る際に、直前に別のCPUの電源が停止されており、パリティデータが再構築中の場合は、RAIDコントローラ3800に現在の状態を問い合わせる。そして、再構築が終了するまで待ってから自CPUの電源を切る。また、実施例1でも説明したが、停止するCPU数が増えるとローカルメモリ一つあたりのパリティデータに必要な領域が(データ領域サイズ/稼働数)と増えてしまう。
したがって、あらかじめ用意されたパリティデータ領域に収まらなくなった場合に備えて、現在の稼働ローカルメモリ数が規定値以下の場合は、RAIDコントローラ3800は利用せず、従来通り、ローカルメモリに格納されているデータを共有メモリ104に待避してから電源を停止する処理を採用する。以下には、上述した電源停止時に各機能部の処理内容について、それぞれ説明する。
図40は、コマンド受信部の動作手順を示すフローチャートである。図40のフローチャートは、電源停止時にコマンド受信部904によって実行される処理内容を表している。図40に示しているように、電源停止はOSからCPUへの電源停止コマンドによってその処理が実行される。したがって、RAIDコントローラ3800では、コマンド受信部904によるコマンド受信によって一連の動作が開始される。
図40において、コマンド受信部904は、なんらかのコマンド受信をトリガに動作を開始する。まず、コマンド受信部904は、受信コマンドを解析する(ステップS4001)。ステップS4001の解析の結果、コマンドが電源停止の指示だった場合(ステップS4001:電源停止)、コマンド受信部904は、ローカルメモリ稼働情報テーブル3801を待避中に更新する(ステップS4002)。さらに、コマンド受信部904は、データ待避部906に対して、停止したローカルメモリを通知して(ステップS4003)、一連の処理を終了する。
一方、ステップS4001の解析の結果、コマンドが電源復帰の指示だった場合(ステップS4001:電源復帰)、コマンド受信部904は、ローカルメモリ稼働情報テーブル3801を停止中に更新する(ステップS4004)。さらに、コマンド受信部904は、データ復帰部907に対して復帰したローカルメモリを通知して(ステップS4005)、一連の処理を終了する。
図41は、実施例2におけるデータ待避部の動作手順を示すフローチャートである。図41のフローチャートは、電源停止時にデータ待避部906によって実行される処理内容を表している。
図41において、データ待避部906は、まず、アドレスを0に設定すると(ステップS4101)、復元データ生成部905に復元対象のローカルメモリとアドレスを指示する(ステップS4102)。さらに、データ待避部906は、復元データ生成部905から受け取ったデータを共有メモリ104に待避する(ステップS4103)。
その後、データ待避部906は、停止後のCPU数が規定値以上か否かを判断する(ステップS4104)。ステップS4104において、CPU数が規定値以上と判断された場合(ステップS4104:Yes)、データ待避部906は、復元に使ったパリティデータの場所をパリティ再構築部903に通知する(ステップS4105)。
その後、データ待避部906は、アドレスをインクリメントし(ステップS4106)、データ領域の待避が完了したか否かを判断する(ステップS4107)。なお、ステップS4104において、CPU数が規定値以上ではないと判断された場合(ステップS4104:No)、データ待避部906は、ステップS4105の処理を行わずに、ステップS4106の処理に移行してアドレスをインクリメントする。
その後、データ待避部906は、ステップS4107において、データ領域の待避が完了するまでステップS4102の処理に戻り、インクリメント後のアドレスを対象とした処理を繰り返す(ステップS4107:Noのループ)。
ステップS4107において、データ領域の待避が完了したと判断された場合(ステップS4107:Yes)、データ待避部906は、停止後のCPU数が規定値以下か否かを判断する(ステップS4108)。ステップS4108において、CPU数が規定値以下であると判断された場合(ステップS4108:Yes)、データ待避部906は、パリティ再構築部903に待避完了を通知して(ステップS4109)、一連の処理を終了
する。
なお、ステップS4108において、停止後のCPU数が規定値以下ではないと判断された場合(ステップS4108:No)、データ待避部906は、ステップS4109の処理を行わずに、そのまま一連の処理を終了する。
図42は、実施例2における復元データ生成部の動作手順を示すフローチャートである。図42のフローチャートは、電源停止時に復元データ生成部905によって実行される処理内容を表している。
図42において、復元データ生成部905は、まず、指示された復元対象に対応するデータを読み込む(ステップS4201)。その後、復元データ生成部905は、復元データを生成し(ステップS4202)、一連の処理を終了する。
図43は、パリティ再構築部の動作手順を示すフローチャートである。図43のフローチャートは、パリティ再構築部903による通知内容に応じたパリティデータに関する処理を表している。図43の各処理を実行することによって、パリティ再構築部903は、適切なパリティデータを生成すると共に、生成したパリティデータを適切な箇所に格納することができる。
図43において、パリティ再構築部903は、他の機能部からの、なんらかの通知の受信をトリガに動作を開始する。まず、パリティ再構築部903が受信する通知としては、パリティデータの生成の通知、待避完了の通知、復元完了の通知の3種類がある。したがって、いずれの通知を受信したかに応じてパリティ再構築部903の動作内容も変化する。
まず、パリティデータの生成が通知された場合、パリティ再構築部903は、パリティ生成部902に通知されたパリティの場所を指示する(ステップS4301)。その後、パリティ再構築部903は、生成されたパリティデータを書き込み(ステップS4302)、一連の処理を終了する。
次に、待避完了が通知された場合、パリティ再構築部903は、停止前後の稼働中のローカルメモリ数から未再構成の領域を算出する(ステップS4303)。さらに、パリティ再構築部903は、パリティ生成部902にパリティの場所を指示すると(ステップS4304)、生成されたパリティデータを書き込む(ステップS4305)。
その後、パリティ再構築部903は、未再構成のデータがあるか否かを判断する(ステップS4306)。ステップS4306において、未再構成のデータがあると判断された場合(ステップS4306:Yes)、パリティ再構築部903は、ステップS4304の処理に戻り、未再構成のデータに対する処理を継続する。
一方、ステップS4306において、未再構成のデータがないと判断されると(ステップS4306:No)、パリティ再構築部903は、ローカルメモリ稼働委情報テーブル3801を停止に更新して(ステップS4307)、一連の処理を終了する。
また、復元完了が通知された場合、パリティ再構築部903は、稼働ローカルメモリ数から復帰したローカルメモリの未再構成領域を算出する(ステップS4308)。その後、パリティ再構築部903は、パリティ生成部902にパリティの場所を指示し(ステップS4309)、生成されたパリティデータを書き込む(ステップS4310)。
そして、パリティ再構築部903は、未再構成のデータがあるか否かを判断する(ステップS4311)。ステップS4311において、未再構成のデータがあると判断された場合(ステップS4311:Yes)、パリティ再構築部903は、ステップS4309の処理に戻り、未再構成のデータに対する処理を継続する。
一方、ステップS4311において、未再構成のデータがないと判断されると(ステップS4311:No)、パリティ再構築部903は、ローカルメモリ稼働情報テーブル3801を稼働中に更新して(ステップS4312)、一連の処理を終了する。
図44は、パリティ生成部の動作手順を示すフローチャートである。図43のフローチャートは、パリティ生成部902によって実行される処理内容を表している。
図44において、パリティ生成部902は、まず、指示されたパリティに対応するデータを読み込む(ステップS4401)。その後、パリティ生成部902は、パリティデータを生成し(ステップS4402)、一連の処理を終了する。
以上、図40〜44にて説明したように、コマンド受信部904は、RAIDコントローラ3800では、電源停止が通知されると、まずコマンド受信部904が受信したコマンドの情報に応じてローカルメモリ稼働情報テーブル3801を更新する。また、データ待避部906に停止したローカルメモリの内容の待避を指示する。また、停止後の稼働ローカルメモリ数が規定値以上の場合はパリティ再構築部903にも指示を出し、平行してパリティデータの再構築を行う。
また、パリティ再構築部903では、データ復帰部907によって待避領域から復帰したデータに対応するパリティデータを再構築する。そして、待避領域から復帰したデータの再構築が終了すると、復帰したローカルメモリのパリティ領域に対応するパリティデータを再構築する。
そして、データ待避部906およびパリティ再構築部903では、データ待避部906が停止されたローカルメモリのデータ領域の先頭から待避を行う。このとき、データ復帰部907を利用して、データを復元した後、あらかじめ定められた待避領域へ待避していく。データ復帰部907では、データ待避部906から指示されたデータを復元するためのパリティデータとこれに対応するデータを稼働中のローカルメモリから読み込んで停止したローカルメモリのデータを復帰する。
また、パリティ再構築部903ではここで待避が完了したパリティデータ領域にパリティ生成部902を利用して順次パリティデータを再構築していく。停止したローカルメモリの全データ領域の待避が完了したら、残りの領域に対しても順次パリティデータを生成していく。
<電源復帰時の動作>
図45は、実施例2における電源復帰時のOSの動作手順を示すフローチャートである。図45のフローチャートは、実施例2において、マルチコアプロセッサ3700のなかの停止中のCPUの電源を復帰させる際のOSの処理内容を示している。
図45において、OSは、電源停止からの復帰をトリガに処理を開始する。まず、OSは、他のプロセッサのローカルメモリを待避中か否かを判断する(ステップS4501)。ステップS4501において、他のプロセッサのローカルメモリを待避中であると判断された場合(ステップS4501:Yes)、OSは、待避が完了するまで待機状態となる(ステップS4502)。
OSは、他のプロセッサのローカルメモリが待避中ではない(ステップS4501:No)、もしくは、待避が完了するまで待つと(ステップS4502)、RAIDコントローラ3800に復帰を通知する(ステップS4503)。その後、OSは、プロセッサのレジスタの内容を復元する(ステップS4504)。
さらに、OSは、RAIDコントローラ3800によりローカルメモリが復元されるまで待ち(ステップS4505)、他のプロセッサに復帰を通知する(ステップS4506)。その後、OSは、通常の処理を再開させて(ステップS4507)、一連の復帰処理を終了する。
以上説明したように、実施例2では、CPUへの電力供給を再開する場合は、電力供給が再開されたCPUによって実行されているOSよりレジスタの内容を復元する。また、OSは、同時にRAIDコントローラ3800に自身の復帰を通知するため、RAIDコントローラ3800による復元の完了を待って停止前の処理を再開することができる。
図46は、データ復帰部の動作手順を示すフローチャートである。図46は、電源復帰時におけるデータ復帰部907にて実行される処理内容を表している。
図46において、データ復帰部907は、まず、ローカルメモリ稼働情報テーブル3801を確認し(ステップS4601)、待避中か否かを判断する(ステップS4602)。ステップS4602において、ローカルメモリ稼働情報テーブル3801が待避中と判断された場合(ステップS4602:Yes)、データ復帰部907は、データ待避部906に待避中止を通知する(ステップS4603)。
その後、データ復帰部907は、データ待避部906から最後に待避したアドレスを取得し(ステップS4604)、その後、アドレスを0に、終了アドレスをステップS4604によって取得したアドレスに設定する(ステップS4605)。
一方、ステップS4602において、待避中でないと判断された場合(ステップS4602:No)、データ復帰部907は、アドレスを0、終了アドレスをデータ領域の最終アドレスに設定する(ステップS4606)。
ステップS4605もしくはステップS4606において、アドレス設定が行われると、データ復帰部907は、待避したデータをローカルメモリに復帰させる(ステップS4607)。そして、データ復帰部907は、復元後のCPU数が規定値以上か否かを判断する(ステップS4608)。
ステップS4608において、復元後のCPU数が規定値以上と判断された場合(ステップS4608:Yes)、データ復帰部907は、復帰したデータに対応するパリティデータをパリティ再構築部903に通知する(ステップS4609)。その後、データ復帰部907は、アドレスをインクリメントする(ステップS4610)。
一方、ステップS4608において、復元後のCPU数が規定値以上ではないと判断された場合(ステップS4608:No)、データ復帰部907は、ステップS4609の処理を行わずに、ステップS4611の処理に移行する。
次に、データ復帰部907は、終了アドレスに到達したか否かを判断する(ステップS4611)。ステップS4611において、終了アドレスに到達していない場合(ステップS4611:No)、データ復帰部907は、ステップS4607に戻り、インクリメント後のアドレスを対象に処理を行う。
その後、ステップS4611において、終了アドレスに到達したと判断された場合(ステップS4611:Yes)、データ復帰部907は、復元後のCPU数が規定値以上か否かを判断する(ステップS4612)。ステップS4612において、CPU数が規定値以上であると判断された場合(ステップS4612:Yes)、データ復帰部907は、パリティ再構築部903に復元終了を通知して(ステップS4613)、一連の処理を終了する。一方、ステップS4612において、CPU数が規定値以上ではないと判断された場合(ステップS4612:No)、データ復帰部907は、ステップS4613の処理を行わずに、一連の処理を終了する。
以上説明したように、実施例2のデータ復帰部907は、ローカルメモリ稼働情報テーブル3801を参照して復帰したローカルメモリが直前に停止されたものでなければ全データは待避済みと判断する。したがって、データ復帰部907は、待避されたデータからローカルメモリに復元する。また、直前に停止されたCPUの場合は、データ待避部906は、ローカルメモリ稼働情報テーブル3801を参照する。そして、未待避のデータがある場合は復元データ生成部905によって、未処理の再構築前のパリティデータからローカルメモリへデータを復元することによって、漏れなくデータを復帰することができる。
(実施例3)
実施例3では、実施例2と、同じく図51に示したマルチコアプロセッサ3700の構成を利用する。しかしながら、実施例2と異なり、RAIDコントローラ3800にローカルメモリの待避復帰状況を記録する待避復帰情報4801(図48参照)を追加する。待避復帰情報4801にローカルメモリの待避復帰状況を記録してメモリアクセス監視部901に読込処理と書込処理の双方を監視させることによって、電源復帰時のローカルメモリへのデータ復元の高速化が期待できる。
<電源停止時の動作>
図47は、実施例3における電源復帰時のOSの動作手順を示すフローチャートである。図47のフローチャートは、マルチコアプロセッサ3700内のいずれかのCPUの電源停止時にOSからRAIDコントローラ4800(図37参照)へ出力される指示内容と、その手順を表している。
図47において、マルチコアプロセッサのOSは、電源停止からの復帰指示をトリガに動作を開始する。まず、OSは、RAIDコントローラ4800に復帰を通知する(ステップS4701)。つぎに、OSは、復帰したプロセッサ(たとえばCPU#1)のレジスタの内容を復元すると(ステップS4702)、他のプロセッサに復帰を通知する(ステップS4703)。その後、OSは、復帰したプロセッサの通常の処理を再開させ(ステップS4704)、電源復帰時の一連の動作を終了する。以上説明したように、実施例3の場合、電源復帰時のOSは、RAIDコントローラ4800によるローカルメモリの内容の復帰を待たずに処理を開始する。
図48は、実施例3におけるRAIDコントローラの内部構成を示すブロック図である。図48に示したように、実施例3の場合、RAIDコントローラ4800は、実施例2のRAIDコントローラ3800に待避復帰情報4801が追加された構成になっている。
また、RAIDコントローラ4800の場合、メモリアクセス監視部901では、実施例2にて説明した監視処理に加えて、復帰中のローカルメモリへのアクセスを監視することができる。復帰中のローカルメモリへのアクセスを監視することによって、RAIDコントローラ4800は、復帰前のローカルメモリデータへのリードがあった場合には、RAIDコントローラ4800が対象のデータを先に復帰して値を返すことができる。そして、RAIDコントローラ4800は、ライトがあった場合には、通常通りパリティデータを更新して、対象となるデータを復帰しないように待避復帰情報を更新することができる。
図49は、メモリアクセス監視部の動作手順を示すフローチャートである。図49のフローチャートは、メモリアクセス監視部901によって実行される処理内容を表している。
図49において、メモリアクセス監視部901は、いずれかのローカルメモリへのアクセスの検出をトリガに動作を開始する。そして、メモリアクセス監視部901は、まず、ローカルメモリ稼働情報テーブル3801の対象エントリを確認する(ステップS4901)。次に、メモリアクセス監視部901は、ステップS4901において確認したエントリが復帰中か否かを判断する(ステップS4902)。
ステップS4902において、確認したエントリが復帰中であると判断された場合(ステップS4902:Yes)、続いて、メモリアクセス監視部901は、確認したエントリがいずれかのローカルメモリへのライトアクセスか否かを判断する(ステップS4903)。ステップS4903において、確認したエントリがライトアクセスであると判断された場合(ステップS4903:Yes)、メモリアクセス監視部901は、対応するパリティデータの場所を算出する(ステップS4904)。
ステップS4904によってパリティデータの場所が算出されると、メモリアクセス監視部901は、パリティ生成部902に算出した場所を通知する(ステップS4905)。その後、メモリアクセス監視部901は、生成されたパリティデータをローカルメモリに書き込み(ステップS4906)、書き込みデータに対応する待避復帰情報4801を復帰に更新して(ステップS4907)、一連の処理を終了する。
一方、ステップS4903において、確認したエントリがライトアクセスではないと判断された場合(ステップS4903:No)、メモリアクセス監視部901は、対応する待避復帰情報4801を確認する(ステップS4908)。そして、メモリアクセス監視部901は、待避復帰情報4801を確認した結果が、復帰状態か否かを判断する(ステップS4909)。
ステップS4909において、確認した結果が復帰状態であった場合(ステップS4909:Yes)、メモリアクセス監視部901は、一連の処理を終了する。一方、確認した結果が復帰状態ではなかった場合(ステップS4909:No)、メモリアクセス監視部901は、今回のアクセスがリードアクセスであると判断して、以後の処理を行う。
まず、メモリアクセス監視部901は、復元データ生成部905にリード先の場所を通知する(ステップS4910)。その後、メモリアクセス監視部901は、復元したデータをアクセス元に返し(ステップS4911)、復元したデータをローカルメモリに書き込む(ステップS4912)。したがって、メモリアクセス監視部901は、対応する待機復帰情報4801を復帰に更新する(ステップS4913)。
その後、メモリアクセス監視部901は、復元後のCPU数が規定値以上か否かを判断する(ステップS4914)。ステップS4914において、CPU数が規定値以上と判断された場合(ステップS4914:Yes)、メモリアクセス監視部901は、復帰したデータに対応するパリティデータをパリティ再構築部903に通知して(ステップS4915)、一連の処理を終了する。一方、ステップS4914において、CPU数が規定値上ではないと判断された場合(ステップS4914:No)、メモリアクセス監視部901は、そのまま一連の処理を終了する。
また、ステップS4902において、確認したエントリが復帰中でないと判断された場合(ステップS4902:No)、メモリアクセス監視部901は、確認したエントリがいずれかのローカルメモリへのライトアクセスか否かを判断する(ステップS4916)。ステップS4916において、確認したエントリがライトアクセスであると判断された場合(ステップS4916:Yes)、メモリアクセス監視部901は、対応するパリティデータの場所を算出する(ステップS4917)。
ステップS4917によってパリティデータの場所が算出されると、メモリアクセス監視部901は、パリティ生成部902に算出した場所を通知する(ステップS4918)。その後、メモリアクセス監視部901は、生成されたパリティデータをローカルメモリに書き込み(ステップS4919)、一連の処理を終了する。一方、ステップS4916において、確認したエントリがライトアクセスではないと判断された場合(ステップS4916:No)、メモリアクセス監視部901は、そのまま一連の処理を終了する。
図50は、実施例3におけるデータ待避部の動作手順を示すフローチャートである。図50のフローチャートは、データ待避部906によって実行される処理内容を表している。
図50において、データ待避部906は、まず、アドレスを0に設定し(ステップS5001)、復元データ生成部905に復元対象のローカルメモリとアドレスを指示する(ステップS5002)。その後、データ待避部906は、復元データ生成部905から受け取ったデータを共有メモリ104に待避する(ステップS5003)。
続いて、データ待避部906は、停止後のCPU数が規定値以上か否を判断する(ステップS5004)。ステップS5004において、CPU数が規定値以上であると判断された場合(ステップS5004:Yes)、データ待避部906は、復元に使ったパリティデータの場所をパリティ再構築部903に通知する(ステップS5005)。
その後、データ待避部906は、対応する待避復帰情報4801を待避に更新し(ステップS5006)、アドレスをインクリメントする(ステップS5007)。一方、ステップS5004において、CPU数が規定値以上ではないと判断された場合(ステップS5004:No)、データ待避部906は、ステップS5005〜S5006の処理を行わずに、そのままステップS5007において、アドレスをインクリメントする。
ステップS5007の処理の後、データ待避部906は、データ領域の待避が完了したか否かを判断し(ステップS5008)、待避が完了していると判断された場合には(ステップS5008:Yes)、さらに、停止後のCPU数が規定値以下か否かを判断する(ステップS5009)。
なお、ステップS5008において、データ領域の待避が完了していないと判断された場合(ステップS5008:No)、データ待避部906は、ステップS5002の処理に移行して、次のアドレスを対象にした処理を行う。そして、データ待避部906は、ステップS5009において、停止後のCPU数が規定値以下と判断された場合(ステップS5009:Yes)、パリティ再構築部903に待避完了を通知して(ステップS5010)、一連の処理を終了する。
一方、ステップS5009において、停止後のCPU数が規定値以下ではないと判断された場合(ステップS5009:No)、データ待避部906は、そのまま一連の処理を終了する。
図51は、実施例3における復元データ生成部の動作手順を示すフローチャートである。図51のフローチャートは、実施例3の復元データ生成部905によって実行される処理内容を表している。
図51において、復元データ生成部905は、まず、ローカルメモリ稼働情報テーブル3801を確認する(ステップS5101)。その後、復元データ生成部905は、アドレスを0、終了アドレスを、データ領域の最終アドレスに設定する(ステップS5102)。
続いて、復元データ生成部905は、稼働情報が待避中か否かを判断する(ステップS5103)。ステップS5103において、稼働情報が待避中と判断された場合(ステップS5103:Yes)、復元データ生成部905は、対象の待避復帰情報4801を確認し(ステップS5104)、対象データが待避中か否かを判断する(ステップS510
5)。
ステップS5105において、対象データが待避中であると判断された場合(ステップS5105:Yes)、ステップS5109の処理に移行する。一方、ステップS5105において、対象データが待避中でないと判断された場合(ステップS5105:No)、復元データ生成部905は、待避したデータをローカルメモリに復帰し(ステップS5106)、その後、復元後のCPU数が規定値以上か否かを判断する(ステップS5107)。
また、ステップS5103において、稼働情報が待避中ではないと判断された場合(ステップS5103:No)にも、復元データ生成部905は、ステップS5106の処理に移行して待避したデータをローカルメモリに復帰する。
ステップS5107において、復元後のCPU数が規定値以上であると判断された場合(ステップS5107:Yes)、復元データ生成部905は、復帰したデータに対応するパリティデータをパリティ再構築部903に通知する(ステップS5108)。なお、ステップS5107において、復元後のCPU数が規定値以上でないと判断された場合(ステップS5107:No)、復元データ生成部905は、ステップS5109の処理に移行する。
その後、復元データ生成部905は、アドレスをインクリメントして(ステップS5109)、インクリメント後のアドレスが終了アドレスに到達したか否かを判断する(ステップS5110)。ステップS5110において、終了アドレスに到達していない場合には(ステップS5110:No)、復元データ生成部905は、ステップS5103の処理に戻って、次のアドレスに対しての処理を行う。
その後、ステップS5110において、終了アドレスに到達したと判断された場合(ステップS5110:Yes)、復元データ生成部905は、復元後のCPU数が規定値以上か否かを判断する(ステップS5111)。
そして、CPU数が規定値以上と判断された場合(ステップS5111:Yes)、復元データ生成部905は、パリティ再構築部903に復元終了を通知して(ステップS5112)、一連の処理を終了する。なお、ステップS5111において、CPU数が規定値以上でないと判断された場合(ステップS5111:No)、復元データ生成部905は、そのまま一連の処理を終了する。
以上説明したように、実施例3の場合、メモリアクセス監視部901は、また、データ待避部906では、データ待避時に待避復帰情報4801を更新する。したがって、データ復帰部907では、待避復帰情報4801を参照して未復帰の情報を復帰すると共に、待避復帰情報を更新することができる。したがって、誤ったデータを待避させるような事態を防ぐと共に、実施例2と比較してより高速な電源停止を実現することができる。
(電力の比較)
図52は、データ復元処理を採用した場合の電力比較例を示す説明図である。マルチコアプロセッサの場合、あらかじめ配置されるCPU数や、同時に稼働させるCPU数も様々であり、使用状況に応じて電力効率は大きく変わる。しかしながら、従来の技術では、こまめな電源のON/OFFは、ローカルメモリに格納されているデータの待避時間を考慮すると待避時間の発生によって十分な省電力効果が得られないことが多かった。
そこで、図52を用いて、本実施の形態にかかるデータ復元処理を適用したマルチコアプロセッサと、それ以外のマルチコアプロセッサとの簡単な消費電力の比較結果を例示した。ここではCPUを4つ備えたマルチコアプロセッサについて説明する。
図52の上段はローカルメモリの電源を切らない場合の電力を、中断は、従来手法(データを待避するまで電力を供給する)で電力を切る場合の電力を、下段は、本実施の形態にかかるデータ復元処理を利用した場合の電力をそれぞれ表している。また、本実施の形態にかかるデータ復元処理を利用した場合、CPUが3つ以上稼働中であれば、パリティデータを生成するように設定している。
また、図52では、上段以外は、左から右にかけて4つのCPUが稼働している場合、3つのCPUが稼働している場合、2つのCPUが稼働している場合、1つのCPUが稼働している場合の電力変化を表している。
図52において、常時4つのCPUが稼働中の上段の手法では常に電力:4(相対値)が消費される。そして、中段の従来手法の場合、稼働中のCPU数に応じた電力4→3→2→1の電力が消費される。当然のことながら、消費する電力は最小1まで抑えることができる。しかしながら、稼働中のCPUの数の変更に要する処理速度が遅く、マルチコアプロセッサとしての機能の低下が避けられない。
そして、下段の本実施の形態にかかるデータ復元処理では、パリティデータを作成してパリティの領域に格納するため、稼働しているCPUの数が同じであれば、電源を切らない手法や、従来手法よりも電力の消費が大きくなってしまっている。しかしながら、CPUの数を変更させる場合であっても、データの待避を行わないため、処理速度が速く、即座に新たなCPU数に応じた処理に移行することができる。
したがって、本実施の形態にかかるデータ復元処理は、特にCPU数が比較的少なく、なおかつ、稼働させるCPU数が頻繁に変化するようなマルチコアプロセッサへ適用すれば、電力効率の高いシステムの提供が期待できる。
以上説明したように、本実施の形態にかかるマルチコアプロセッサシステム、制御方法および制御プログラムによれば、揮発性メモリ内に格納されていたデータが消失しても、あらかじめ格納しておいたパリティデータによって揮発性メモリ内に格納されたデータを復元することができる。したがって、ローカルメモリの電源停止時に事前にローカルメモリの内容を待避しておく必要がなくなるため、ローカルメモリの電源停止動作を高速化することができる。
また、上記技術は、さらに、稼働中の揮発性メモリ数が変化した場合には、格納可能な揮発性メモリの数に応じてパリティデータを作成する。したがって、プロセッサ数が頻繁に変化するような環境であっても、適切な構成のパリティデータを作成することができる。
また、上記技術では、さらに、一旦電源停止となったプロセッサが始動する場合には、共有メモリに復元されたデータを自動的に揮発性メモリに復帰することもできる。また、プロセッサが始動した際に、共有メモリ内に復元が済んでいないデータに関しては、パリティデータを利用して再構成した後に揮発性メモリに復帰する。したがって、プロセッサの停止や再開が頻繁に起こっても、揮発性メモリに格納され、一旦消失したデータを余すことなく復元することができる。
また、上記技術では、さらに、稼働中のプロセッサがアクセスする揮発性メモリが停止中である場合には、揮発性メモリに格納されていたデータが再構成されているか否かに応じて、プロセッサのアクセス先を変更することができる。また、揮発性メモリに格納されていたデータが再構成されていなかった場合には、アクセス対象となるデータの再構成を行いプロセッサによるアクセスを支援する。したがって、マルチコアプロセッサの中に停止中のプロセッサが存在しても稼働中の他のプロセッサは他のプロセッサの稼働状態を考慮することなく通常と同じ手順で所望のデータにアクセスすることができる。
また、上記技術では、さらに、稼働中のプロセッサ数に応じて、揮発性メモリに格納されているデータの待避処理の手法を変更することができる。すなわち、稼働中のプロセッサ数が多く、揮発性メモリにパリティデータを格納しても、各プロセッサの処理速度を低下させない場合には、パリティデータを利用した待避処理を採用して高速な電源停止を実現する。稼働中のプロセッサ数が少なく、パリティデータの格納によって揮発性メモリの容量が圧迫され、プロセッサの処理速度の低下を招いてしまう恐れのある場合には、パリティデータを格納せずに、従来の手法によってデータを待避する。したがって、稼働中のプロセッサ数に応じて最も効率のよい手法を利用するため、マルチコアプロセッサの処理速度を想定値以内に保つことができる。
なお、本実施の形態で説明した制御方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御プログラムは、インターネットなどのネットワークを介して配布してもよい。
また、本実施の形態で説明したデータ復元装置110は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述したデータ復元装置110の機能(停止検出部601〜復帰部606)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、データ復元装置110を製造することができる。