JP5093242B2 - 自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラム - Google Patents
自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラム Download PDFInfo
- Publication number
- JP5093242B2 JP5093242B2 JP2009537771A JP2009537771A JP5093242B2 JP 5093242 B2 JP5093242 B2 JP 5093242B2 JP 2009537771 A JP2009537771 A JP 2009537771A JP 2009537771 A JP2009537771 A JP 2009537771A JP 5093242 B2 JP5093242 B2 JP 5093242B2
- Authority
- JP
- Japan
- Prior art keywords
- diagnosis
- cpu
- information
- diagnostic
- class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Description
本発明は自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラムに関する。
コンピュータに電源を投入したときや、コンピュータをリセットしたとき、各種デバイスの診断が行われる。この診断は、POST(Power On Self Test;電源投入時自己診断)と呼ばれる。
複数のCPU(Central Processing Unit)を有する装置では通常、複数のCPUが分担してPOSTを実行する。診断の種類によっては、各CPUに実行すべき診断を割り当てるために、排他制御が必要となる場合がある。
例えば、特許文献1には、複数のCPUが1つの記憶装置を共有する記憶装置における、システム内のリソースを占有した試験環境を必要とする試験プログラムの実行の制御方法が記載されている。
特許文献1に記載の制御方法は、メモリ領域を論理的に分割して各CPUに割り当て、各々のメモリ領域に試験プログラムの実行を制御するモニタプログラムをロードすることを含む。そして、同時に1つの試験プログラムが複数のCPUで実行されないようにする排他制御が、モニタプログラムにより実現される。
しかし、単純で一律な排他制御ではなく、ハードウェア構成に応じた範囲での排他制御を行うべき場合もある。また、一般に、各CPUに実行すべき診断を割り当てるには、診断の実行順序に関する制約も考慮すべきである。
そこで、図1のハードウェア構成を持つサーバ装置30を例として、複数のCPUが同じ診断を重複して実行してよいか否かという制約と、診断の実行順序に関する制約とをともに考慮して各CPUに実行すべき診断を割り当てる従来の方法について説明する。
図1のサーバ装置30は、2枚の基板がクロスバースイッチ(以下、XBと略す)20で接続された装置である。以下ではサーバ装置30が備える基板をシステムボートと呼び、SBと略す。SB0は、CPU00と、CPU01と、DIMM(Dual Inline Memory Module)02と、DIMM02へのデータの書き込みおよびDIMM02からのデータの読み出しを制御するMC(Memory Controller)03と、入出力部(I/Oと略す)04と、SRAM(Static Random Access Memory)05と、ROM(Read Only Memory)06と、制御部(以下、システムコントローラと呼び、SCと略す)07とを備える。SB1もSB0と同様の構成である。
SB0上のSC07は、SB0上のCPU00、CPU01、MC03、I/O04、SRAM05、およびROM06とバスで接続されている。SC07は、SB内のユニット間のデータ転送を制御し、また、XB20を介したSB1との間のデータ転送をも制御する。SB1上のSC17もSC07と同様である。
例えば、SB0上のCPU00がSB1上のDIMM12からデータを読み出すとき、データは、SB0上のSC07とSB1上のSC17の制御にしたがって読み出される。つまり、データは、SB1上でDIMM12から読み出され、MC13を経由してSC17へと送られ、XB20を介してSB0に送られ、SB0上でSC07からCPU00へと送られる。このようにデータ転送が可能な範囲を「ドメイン」と呼ぶことにすると、図1では、各SB内のユニット同士がバスで接続されており、SB0とSB1がXB20で接続されているため、サーバ装置30全体が1つのドメインである。
このような図1のサーバ装置30において、各CPUに実行すべき診断を割り当てる際には、以下の第1と第2の要件を考慮しなくてはならない。
第1の要件は、診断の性質に応じた排他制御を行わなくてはならないという要件である。具体的には、まず、性質に応じて診断を次の3つのクラスに分類する。
第1の要件は、診断の性質に応じた排他制御を行わなくてはならないという要件である。具体的には、まず、性質に応じて診断を次の3つのクラスに分類する。
・クラス1:1つのドメイン内で1つのCPUのみが行うべき診断のクラス
・クラス2:1つのSB内で1つのCPUのみが行うべき診断のクラス
・クラス3:各CPUが行うべき診断のクラス
クラス1の診断は、主にドメインに付随する部分を対象とする診断である。例えば、XB20を対象とする診断は、クラス1に分類することが適当である。
・クラス2:1つのSB内で1つのCPUのみが行うべき診断のクラス
・クラス3:各CPUが行うべき診断のクラス
クラス1の診断は、主にドメインに付随する部分を対象とする診断である。例えば、XB20を対象とする診断は、クラス1に分類することが適当である。
クラス2の診断は、主にSBに付随する部分を対象とする診断である。例えば、DIMMやI/Oなどの、SBごとに備えられたハードウェアを対象とする診断は、クラス2に分類することが適当である。
クラス3の診断は、主に各CPUを対象とする診断である。例えば、通常はCPU00内のレジスタやキャッシュメモリに他のCPUからアクセスすることは不可能である。つまり、CPU00内のレジスタやキャッシュメモリは、CPU00自身によってのみ診断することができる。よって、CPU内のレジスタやキャッシュメモリなどを対象とする診断は、クラス3に分類することが適当である。
このようなクラス分けに基づいて説明すると、第1の要件は、クラス1の診断が同一ドメイン内の複数のCPUによって重複して行われないように、かつ、クラス2の診断が同一SB内の複数のCPUによって重複して行われないように、排他制御をしなくてはならないという要件である。一方で、第1の要件は、クラス3の診断についてはCPU間の排他制御が不要であることを示してもいる。
そして、第2の要件は、診断同士の依存関係などに応じて決められた順序を守って診断を実行しなくてはならないという要件である。
例えば、CPU内のキャッシュメモリの診断は、メインメモリとして使われるDIMMからデータを読み出してキャッシュメモリに書き込むことや、キャッシュメモリからデータを読み出してDIMMに書き込むことを含む。つまり、キャッシュメモリの診断は、DIMMのライト/リードを必要とする。したがって、キャッシュメモリの診断の前に、DIMMの診断を行って、DIMMのライト/リードが正常に実行可能であることを確認しておく必要がある。
例えば、CPU内のキャッシュメモリの診断は、メインメモリとして使われるDIMMからデータを読み出してキャッシュメモリに書き込むことや、キャッシュメモリからデータを読み出してDIMMに書き込むことを含む。つまり、キャッシュメモリの診断は、DIMMのライト/リードを必要とする。したがって、キャッシュメモリの診断の前に、DIMMの診断を行って、DIMMのライト/リードが正常に実行可能であることを確認しておく必要がある。
以上の第1と第2の要件を満たすため、従来は次のような方法が採用されてきた。
まず、第1の要件を満たすために、ドメイン内の1つのCPUが予め静的にドメインマスタCPUとして選択され、各SB内の1つのCPUが予め静的にSBマスタCPUとして選択される。
まず、第1の要件を満たすために、ドメイン内の1つのCPUが予め静的にドメインマスタCPUとして選択され、各SB内の1つのCPUが予め静的にSBマスタCPUとして選択される。
ドメインマスタCPU以外のCPUがクラス1の診断を行うことは禁じられる。また、SBマスタCPU以外のCPUがクラス2の診断を行うことも禁じられる。
なお、SBマスタCPUに許されるクラス2の診断は、当該SBマスタCPUを含むSBに対する診断に限定される。例えば、SB0におけるSBマスタCPUがCPU00であり、SB1におけるSBマスタCPUがCPU10である場合、CPU00は、SB0を対象とするクラス2の診断を行うが、SB1を対象とするクラス2の診断を行ってはいけない。
なお、SBマスタCPUに許されるクラス2の診断は、当該SBマスタCPUを含むSBに対する診断に限定される。例えば、SB0におけるSBマスタCPUがCPU00であり、SB1におけるSBマスタCPUがCPU10である場合、CPU00は、SB0を対象とするクラス2の診断を行うが、SB1を対象とするクラス2の診断を行ってはいけない。
さらに、第2の要件を満たすため、図2に例示されたような診断順序テーブルが予め作成され、例えばROM06と16にそれぞれ格納される。図2の診断順序テーブルは、この診断順序テーブルに記載された順序どおりに診断を実行すべきことを規定している。
図2の診断順序テーブルはまた、第1と第2の要件を合わせて考慮するために、第1の要件に関する情報も含んでいる。すなわち、診断順序テーブルの右列には、左列に示された診断を実行するCPUが示されている。表中の「ドメイン内1CPU」、「SB内1CPU」、「全CPU」という表記は、それぞれ、クラス1、2、3を示す。
次に、図3のタイミングチャートを参照して、従来の方法による診断処理の流れを説明する。
この例では、図2に示したとおり、POSTは診断a〜診断mからなる。診断a〜診断mの実行順序は図2の診断順序テーブルで規定されているとおりである。そして、ドメインマスタCPUはCPU00であり、SB0におけるSBマスタCPUがCPU00であり、SB1におけるSBマスタCPUがCPU10である。
この例では、図2に示したとおり、POSTは診断a〜診断mからなる。診断a〜診断mの実行順序は図2の診断順序テーブルで規定されているとおりである。そして、ドメインマスタCPUはCPU00であり、SB0におけるSBマスタCPUがCPU00であり、SB1におけるSBマスタCPUがCPU10である。
図3に示した従来の方法では、第1の要件を満たすために、1つの診断が終わるたびに全CPUで同期をとる。図中の“sync”が付された水平な点線が同期を取るタイミングを表す。
すなわち、処理は次のように進む。図1の4つのCPUはそれぞれ診断順序テーブルを参照し、最初に実行すべき診断が診断aであり、診断aはクラス3であることを認識し、診断aを実行する。4つのCPUが全て診断aを実行し終わると、4つのCPUが同期する。この同期により、4つのCPUは、2番目の診断bに進むべきことを認識する。
同様にして、2番目の診断bも4つのCPUそれぞれによって実行され、その後4つのCPUが同期する。
続いて、4つのCPUは診断順序テーブルをそれぞれ参照し、3番目に実行すべき診断が診断cであり、診断cがクラス2の診断であることを認識する。この認識にしたがって、CPU00とCPU10はそれぞれ診断cを実行し、CPU01とCPU11は待機する。
続いて、4つのCPUは診断順序テーブルをそれぞれ参照し、3番目に実行すべき診断が診断cであり、診断cがクラス2の診断であることを認識する。この認識にしたがって、CPU00とCPU10はそれぞれ診断cを実行し、CPU01とCPU11は待機する。
そして、CPU00とCPU10の双方が診断cを実行し終わると、4つのCPUが同期し、4つのCPUは、4番目の診断に進むべきことを認識する。4番目の診断dと5番目の診断eもクラス2の診断なので、診断cと同様に処理が進む。
CPU00とCPU10の双方が診断eを実行し終わると、4つのCPUが同期し、4つのCPUは、6番目の診断に進むべきことを認識する。図2に示すように、6番目の診断fはクラス1の診断である。
よって、それぞれ診断順序テーブルを参照して認識した結果にしたがって、CPU00のみが診断fを実行し、CPU01とCPU10とCPU11は待機する。その後、CPU00が診断fを実行し終わると、4つのCPUが同期し、4つのCPUは、7番目の診断に進むべきことを認識する。
以下同様にして、1つの診断が終わるたびに全CPUが同期する。この繰り返しによって、13番目の診断mの実行が終了すると、全ての診断が終了する。
このように診断順序テーブルを参照し、同期をとることによって、第1と第2の要件がともに満たされる。例えば、CPU01はSBマスタCPUでもなくドメインマスタCPUでもないので、CPU01が診断bの次に実行すべき診断は診断hである。一方で、診断hは診断gの後に実行すべき診断である。同期をとることによって、CPU00が診断gを終える前にCPU01が診断hを始めてしまうといった事態を防ぐことができる。
このように診断順序テーブルを参照し、同期をとることによって、第1と第2の要件がともに満たされる。例えば、CPU01はSBマスタCPUでもなくドメインマスタCPUでもないので、CPU01が診断bの次に実行すべき診断は診断hである。一方で、診断hは診断gの後に実行すべき診断である。同期をとることによって、CPU00が診断gを終える前にCPU01が診断hを始めてしまうといった事態を防ぐことができる。
しかしながら、この従来の方法を採用した場合、無駄な待機時間が生じ、総診断時間が必要以上に長くなることがある。なぜなら、第1の要件を満たすためのドメインマスタCPUとSBマスタCPUの選択が、静的な選択であるためである。
静的な選択の結果、ドメインマスタCPUとSBマスタCPUとに処理が集中する一方で、その他のCPUは診断処理をせずに単に同期待ちをしている時間がある。例えば、図3において、CPU00が診断cから診断gを実行している間、CPU01は待機しているだけである。
この待機時間は無駄なことがある。なぜなら、ある2つの処理を同時に実行しても問題がないとしても、図2の診断順序テーブルでは固定的に順序が定められているので、処理を並列化することができないためである。
例えば、実際には診断cと診断dは、同時に実行することが許される性質の診断かもしれない。しかし、診断順序テーブルでは、必ず診断cを診断dの前に行うべきことが規定されている。また、診断順序テーブルでは、診断cと診断dの双方を、静的にSBマスタCPUとして定められた特定のCPUが実行すべきことも規定されている。
よって、従来の方法では、図3に示すように、静的に定められた特定のCPUが、静的に定められた特定の診断を、他のCPUによる診断の実行状況とは関係なく、必ず実行する必要がある。しかし、もし診断cと診断dを同時に実行することが許されるならば、CPU00とCPU10が診断cを実行している間に、CPU01とCPU11が診断dを実行せずに図3のようにただ待機しているのは時間の無駄である。
特開平10−49397号公報
そこで本発明は、複数の診断処理部が複数の診断処理を分担して行う場合に、診断の性質に応じた排他制御をするという要件と、実行順序に関して定められた優先順位を守るという要件とを満たしつつ、無駄な待機時間を短縮することにより、総診断時間を短縮することを目的とする。
本発明による情報処理装置は、記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させることにより自己診断処理を行う。前記情報処理装置は、優先順位情報を前記記憶部から読み出す優先順位情報読み出し部と、クラス情報を前記記憶部から読み出すクラス情報読み出し部と、進捗情報を前記記憶部から読み出す進捗情報読み出し部と、割り当て部を備える。
前記優先順位情報は、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す。前記クラス情報は、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表す。前記進捗情報は、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す。
前記割り当て部は、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換える。
本発明によれば、進捗情報は割り当て部によって書き換えられるので、動的に変化する。割り当て部は、このように動的に変化する進捗情報に基づいて診断処理部に診断処理を割り当てる。つまり、本発明によれば、診断処理部への診断処理の割り当ては動的に行われる。
また、本発明の別の実施態様によれば、上記情報処理装置が実行する自己診断処理方法および該自己診断処理方法をコンピュータに実行させる自己診断処理プログラムが提供される。
上記のように、本発明によれば、診断処理部への診断処理の割り当てが状況に応じて動的に行われるため、無駄な待機時間が短縮され、総診断時間も短縮される。
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
説明は次の順序で行う。まず、一実施形態による割り当て装置の機能ブロック図を参照して、一実施形態における割り当て装置の概要を説明する。次に、割り当て装置を実現するハードウェアと診断の対象となるハードウェアとを含む装置の一例であるサーバ装置のハードウェア構成を説明する。次に、診断のクラスと、診断処理の割り当てにおいて利用される各種テーブルの例とを説明する。その後、フローチャートを参照して、一実施形態による割り当て方法を説明し、続いて、タイミングチャートとデータの変遷を示す図を参照して、割り当ての具体例を説明する。最後に様々な変形例を説明する。
説明は次の順序で行う。まず、一実施形態による割り当て装置の機能ブロック図を参照して、一実施形態における割り当て装置の概要を説明する。次に、割り当て装置を実現するハードウェアと診断の対象となるハードウェアとを含む装置の一例であるサーバ装置のハードウェア構成を説明する。次に、診断のクラスと、診断処理の割り当てにおいて利用される各種テーブルの例とを説明する。その後、フローチャートを参照して、一実施形態による割り当て方法を説明し、続いて、タイミングチャートとデータの変遷を示す図を参照して、割り当ての具体例を説明する。最後に様々な変形例を説明する。
図4は、一実施形態における割り当て装置100の機能ブロック図である。割り当て装置100は、複数の診断処理を分担して実行する複数の診断部のうちの1つである診断部111を対象とした診断処理の割り当てを行う。なお、図4には複数の診断部のうちの診断部111のみを図示した。
割り当て装置100と診断部111とが1つのCPUによって実現されていてもよく、割り当て装置100と診断部111とが物理的に異なる装置により実現されてもよい。また、複数の診断部のそれぞれは、例えば、異なる複数のCPUにより実現される。
割り当て装置100は、グループ分け情報101を読み出すグループ分け情報読み出し部105、優先順位情報102を読み出す優先順位情報読み出し部106、クラス情報103を読み出すクラス情報読み出し部107、進捗情報104を読み出す進捗情報読み出し部108、診断部111に診断処理を割り当てる割り当て部109、および診断部111が診断を終了した後の後処理を行う終了部110を備える。
グループ分け情報101、優先順位情報102、クラス情報103、進捗情報104の具体的な格納場所は任意である。これらの情報は、バスあるいはXBなどのデータ伝送路を介して、それぞれの読み出し部によって読み出され、割り当て部109に与えられる。
グループ分け情報101は、最下層のクラスのグループとして、1つの診断部のみが属するグループを複数の診断部の各々に対して定義する。また、グループ分け情報101は、最下層以外のクラスにおいては、直下のクラスの1つ以上のグループを包含するグループを定義する。
以上により、グループ分け情報101は、複数の診断部の階層的なグループ分けを定義する。複数の診断部のそれぞれは、各クラスにおいて、いずれか1つのグループに属する。グループ分け情報101の具体例は図5を参照して後述する。
優先順位情報102は、複数の診断処理同士に対して実行順序の優先順位を規定する。優先順位情報102は、任意の診断xと診断yに対して、診断xが診断yよりも先に実行されねばならない、診断yが診断xよりも先に実行されねばならない、または、診断xと診断yのどちらが先に実行されても許される、ということを示す情報である。優先順位情報102の具体例は図6を参照して後述する。
クラス情報103は、複数の診断処理のそれぞれを、グループ分け情報101における複数のクラスのいずれかに関連づける情報である。
例えば、診断xをクラスwに関連づけるクラス情報103は、クラスwにおいて定義された1つのグループに属する1つ以上の診断部のうちの1つの診断部によってのみ、診断xが実行されるべきであるということを示す。つまり、クラス情報103は、診断xに関する排他制御を行うべき範囲が、クラスwのグループであることを示す。クラス情報103の具体例は図6を参照して後述する。
例えば、診断xをクラスwに関連づけるクラス情報103は、クラスwにおいて定義された1つのグループに属する1つ以上の診断部のうちの1つの診断部によってのみ、診断xが実行されるべきであるということを示す。つまり、クラス情報103は、診断xに関する排他制御を行うべき範囲が、クラスwのグループであることを示す。クラス情報103の具体例は図6を参照して後述する。
進捗情報104は、複数の診断部のそれぞれと、複数の診断処理のそれぞれとの組み合わせに対して進捗を示す。本実施形態において進捗には、「未診断」、「診断中」、「診断済」の3種類がある。なお、詳しくは後述するが、診断部zと診断xの組に対する進捗は、必ずしも診断部z自体による診断xの進捗だけを意味するのではない。
例えば、診断部zと診断xの組に対する進捗が「診断中」であることは、診断部zが診断xを実行中であることを示すのではなく、診断xのクラスにおいて診断部zと同じグループに属する診断部のいずれか(診断部z自体であってもよい)が診断xを実行中であることを示す。
グループ分け情報101と優先順位情報102とクラス情報103は静的な情報だが、進捗情報104は割り当て部109と終了部110によって書き換えられ、変化する動的な情報である。
割り当て部109は、グループ分け情報読み出し部105、優先順位情報読み出し部106、クラス情報読み出し部107、進捗情報読み出し部108からそれぞれ、グループ分け情報101、優先順位情報102、クラス情報103、進捗情報104を与えられる。
そして、割り当て部109は与えられた情報に基づいて、診断部111に割り当て可能な診断処理を選択する。また、割り当て部109は、選択した診断処理とクラス情報103とグループ分け情報101とに基づいて進捗情報104を書き換え、選択した診断処理を診断部111に割り当てる。また、割り当て部109は、診断部111に割り当てた診断処理を終了部110に通知する。
上記のとおり、従来の方法では、複数の診断処理の実行順序が予め1通りに限定され、特定の処理を特定のCPUが行うように静的に予め決められていた。しかし、本実施形態では、進捗情報104が示す状況に応じた割り当てを割り当て部109が行うため、診断部111の待機時間が短縮される。
上記のとおり、診断部111は割り当て装置100の外部にあってもよく、割り当て装置100に備えられていてもよい。診断部111は、割り当て部109により割り当てられた診断処理を実行し、診断処理を実行し終わると終了部110に診断の終了を通知する。
終了部110は、診断が終了したことを診断部111から通知されると、割り当て部109が診断部111に割り当てた診断処理とクラス情報103とグループ分け情報101とに基づいて進捗情報104を書き換える。
割り当て部109と終了部110の動作の具体例は、図8〜図13Hを参照して後述するが、上記のように動的に書き換えられる進捗情報104に基づいて診断処理の割り当てが行われるため、従来と比較した場合、無駄な待機時間が大きく減少する。また、診断処理の割り当ては優先順位情報102とクラス情報103とグループ分け情報101にも基づいて行われるため、診断の性質に応じた排他制御をするという要件と、実行順序に関して定められた優先順位を守るという要件とが満たされる。
次に、一実施形態において図4の割り当て装置100を実現する装置のハードウェア構成を説明する。本実施形態では、図1に示された構成のサーバ装置30により、図4の割り当て装置100が実現される。
図1に関して既に説明したとおり、サーバ装置30は、同様の構成をもつSB0とSB1が、データ伝送路であるXB20によって接続された装置である。
XB20を利用することにより、データの送信元と送信先とが1対1に接続され、高速なデータ転送が実現される。しかし、他の実施形態においてはXB20のかわりに、バス等の他のデータ伝送路を利用してもよい。このようにXB20で互いに接続された2枚のSBを含むサーバ装置30全体が、1つのドメインを構成している。
XB20を利用することにより、データの送信元と送信先とが1対1に接続され、高速なデータ転送が実現される。しかし、他の実施形態においてはXB20のかわりに、バス等の他のデータ伝送路を利用してもよい。このようにXB20で互いに接続された2枚のSBを含むサーバ装置30全体が、1つのドメインを構成している。
SB0は、CPU00、CPU01、DIMM02、MC03、I/O04、SRAM05、ROM06、およびSC07を備える。CPU00、CPU01、MC03、I/O04、SRAM05、およびROM06はバスによってSC07に接続され、DIMM02はバスによってMC03に接続されている。SB1も同様の構成である。
4つのCPU00〜11は、それぞれ内部にレジスタやキャッシュメモリ等を備える。あるCPUのレジスタやキャッシュメモリに格納されたデータは、他のCPUから参照することはできない。
DIMM02は、同じSB0内のCPU00とCPU01により、ワーキングエリアとして利用される。CPU00とDIMM02の間、およびCPU01とDIMM02の間のデータ転送は、SC07とMC03によって制御される。SB1上のDIMM12についても同様である。
さらに、SB0はXB20によってSB1と接続されているため、SB1上のCPU10またはCPU11が、SB0上のDIMM02に格納されたデータを読み出したり、DIMM02にデータを書き込んだりすることもある。逆に、CPU00またはCPU01がDIMM12に格納されたデータを読み出したり、DIMM12にデータを書き込んだりすることもある。
I/O04は、キーボードやポインティングデバイスなどの各種入力機器、およびディスプレイ、スピーカ、プリンタなどの各種出力機器とのインターフェイス機能を有する。I/O14も同様である。
SRAM05は、ROM06にプログラムコードが格納されたファームウェアをCPU00およびCPU01が実行する際のワーキングエリアとして使われる。本実施形態では、ファームウェアの一種であるBIOS(Basic Input/Output System)のプログラムコードがROM06に格納されている。サーバ装置30への電源投入時に、CPU00およびCPU01がBIOSのプログラムコードを実行することで、POSTを含むいくつかの処理が行われる。なお、ROM06は書き換え可能なEPROM(Erasable Programmable Read Only Memory)又はフラッシュメモリ(FLASH Memory)でもよい。
SB1上のSRAM15およびROM16も、SRAM05およびROM06と同様である。
さらに、SC07と17がハードディスクドライブ(HDD)等の不図示の記憶装置と接続されていてもよい。
さらに、SC07と17がハードディスクドライブ(HDD)等の不図示の記憶装置と接続されていてもよい。
上記の従来の方法と本実施形態とで異なるのは、ROM06と16に格納されたBIOSのプログラムコードの内容である。特にそのプログラムコードのうち、POSTを構成する複数の診断処理の割り当てに関する制御の部分が異なる。そのプログラムコードの違いによって、本実施形態においては、4つのCPUが従来とは異なる機能を有し、従来とは異なる動作をする。
すなわち、本実施形態では、図1のCPU00〜11のそれぞれが、図4のグループ分け情報読み出し部105、優先順位情報読み出し部106、クラス情報読み出し部107、進捗情報読み出し部108、割り当て部109、および終了部110の機能を実現する。CPU00と01はROM06に格納されたBIOSのプログラムコードにしたがって動作することにより、これら各部の機能を実現する。CPU10とCPU11も同様である。
なお、本実施形態では、図1のCPU00〜11のそれぞれが、図4の診断部111の機能も実現する。したがって、例えば図1のCPU00は、図4の割り当て装置100として機能することによって、CPU00が実現する診断部111に診断処理を割り当てる。そして、CPU00は、診断部111として機能することによって、CPU00がCPU00に割り当てた診断処理を実行する。さらに、CPU00は、割り当て装置100として機能することによって、診断処理の実行後の後処理を行う。
また、本実施形態では、図1のROM06と16の双方が、同内容の図4の優先順位情報102とクラス情報103を格納する。
そして、図1のSRAM05と15の双方が、同内容の図4のグループ分け情報101を格納する。グループ分け情報101は内容が変化しない静的な情報なので、例えば、サーバ装置30への電源投入直後に、ROM06に格納されたプログラムコードにしたがって、CPU00がグループ分け情報101の内容をSRAM05に書き込んでもよい。
そして、図1のSRAM05と15の双方が、同内容の図4のグループ分け情報101を格納する。グループ分け情報101は内容が変化しない静的な情報なので、例えば、サーバ装置30への電源投入直後に、ROM06に格納されたプログラムコードにしたがって、CPU00がグループ分け情報101の内容をSRAM05に書き込んでもよい。
また、図4の進捗情報104は、SRAM05と15に分散して格納される。
なお、図1のサーバ装置30は、図4の割り当て装置100と診断部111の機能を実現するだけではなく、診断の対象となるDIMM02等のハードウェアをも含む。
なお、図1のサーバ装置30は、図4の割り当て装置100と診断部111の機能を実現するだけではなく、診断の対象となるDIMM02等のハードウェアをも含む。
次に、本実施形態における診断のクラスについて説明する。本実施形態では、診断は次のようにクラス1〜3の3つのクラスに分類され、定義される。
・クラス1:1つのドメインに属するいずれか1つのCPUのみが行うべき診断のクラス
・クラス2:1つのSBに属するいずれか1つのCPUのみが行うべき診断のクラス
・クラス3:各CPUが行うべき診断のクラス
本実施形態では、ドメイン内で共用されるXB20などのハードウェア資源を対象とする診断は、クラス1の診断として定義されている。また、SBごとに備えられた、DIMMなどのハードウェア資源を対象とする診断は、クラス2の診断として定義されている。そして、CPUごとに備えられた、レジスタなどのハードウェア資源を対象とする診断は、クラス3の診断として定義されている。
・クラス1:1つのドメインに属するいずれか1つのCPUのみが行うべき診断のクラス
・クラス2:1つのSBに属するいずれか1つのCPUのみが行うべき診断のクラス
・クラス3:各CPUが行うべき診断のクラス
本実施形態では、ドメイン内で共用されるXB20などのハードウェア資源を対象とする診断は、クラス1の診断として定義されている。また、SBごとに備えられた、DIMMなどのハードウェア資源を対象とする診断は、クラス2の診断として定義されている。そして、CPUごとに備えられた、レジスタなどのハードウェア資源を対象とする診断は、クラス3の診断として定義されている。
このように、本実施形態では、図1のハードウェア構成と対応するように診断のクラスが定義されている。なお、クラス1が最上層のクラスである。
次に、図5〜図7を参照して、診断処理の割り当てにおいて利用される各種テーブルの例を説明する。
次に、図5〜図7を参照して、診断処理の割り当てにおいて利用される各種テーブルの例を説明する。
図5は、図4のグループ分け情報101の具体例であるグループ分けテーブルを示す図である。
グループ分けテーブルは、図1のサーバ装置30内の各CPUが各クラスにおいて属するグループを示す。図5において、各列が各CPUに対応し、各行が各クラスに対応する。
グループ分けテーブルは、図1のサーバ装置30内の各CPUが各クラスにおいて属するグループを示す。図5において、各列が各CPUに対応し、各行が各クラスに対応する。
図5によれば、最下層のクラス3では、4つのCPUが互いに異なるグループに属している。つまり、CPU00、CPU01、CPU10、CPU11がそれぞれ、グループG30、G31、G32、G33に属している。
また、図5によれば、クラス3の1つ上層のクラスであるクラス2では、CPU00とCPU01がグループG20に属し、CPU10とCPU11がグループG21に属している。これは、CPU00とCPU01がSB0に実装され、CPU10とCPU11がSB1に実装されていることに対応したグループ分けである。図5に例示したように、クラス2のグループはそれぞれ、直下のクラス3のグループを1つ以上包含する。
また、図5によれば、最上層のクラス1では、4つのCPU全てがグループG10に属している。これは、サーバ装置30全体が1つのドメインであり、4つのCPU全てがこのドメインに属していることに対応する。図5に例示したように、クラス1のグループは、直下のクラス2のグループを1つ以上包含する。
本実施形態では、図1のSRAM05と15の双方が、同じ内容のグループ分けテーブルを格納しているので、CPU00と01はSRAM05から、CPU10と11はSRAM15から、グループ分けテーブルの内容を読み出す。
図6は、図4の優先順位情報102とクラス情報103の対応を示す優先順位テーブルの具体例を示す図である。従来の方法では、図2の診断順序テーブルを使って、複数の診断を1列に並べた順序が規定されていたが、本実施形態では、図6の優先順位テーブルが用いられる。
優先順位テーブルの各行は、個々の診断に対応する。
優先順位テーブルの1番左の列は、「クラス」という見出しがつけられており、クラス情報103を表す。
優先順位テーブルの1番左の列は、「クラス」という見出しがつけられており、クラス情報103を表す。
例えば、診断a、診断c、診断fの各行には、それぞれ診断のクラスを表す「3」、「2」、「1」という値が書いてある。つまり、診断aは全CPUによってそれぞれ実行されるべきクラス3の診断であり、診断cは各SBに属するいずれか1個のCPUによってのみ実行されるべきクラス2の診断であり、診断fはドメインに属するいずれか1個のCPUによってのみ実行されるべきクラス1の診断であることが、1番左の列には示されている。
優先順位テーブルの1番左の列以外の各列は、個々の診断に対応し、優先順位情報102を表す。診断x(診断xは診断a〜mのいずれか)の行の診断y(診断yは診断a〜mのいずれか)の列のマスに「×」と書かれているとき、診断yが終了した後でないと診断xを実行することができない、つまり、診断yが診断xに優先することを示す。
一方、診断xの行の診断yの列のマスが空白のとき、診断yが終了していなくても診断xを実行することができることを示す。したがって、診断xの行の診断yの列のマスと、診断yの行の診断xの列のマスがともに空白のとき、診断xと診断yのどちらを先に実行しても許される。
また、診断xの行の診断xの列のマスは同一診断間の優先順位を判断する場合はないため、図6では斜線が引かれている。
本実施形態では、図1のROM06と16の双方が、同じ内容の優先順位テーブルを格納しているので、CPU00とCPU01はROM06から、CPU10とCPU11はROM16から、優先順位テーブルの内容を読み出す。
本実施形態では、図1のROM06と16の双方が、同じ内容の優先順位テーブルを格納しているので、CPU00とCPU01はROM06から、CPU10とCPU11はROM16から、優先順位テーブルの内容を読み出す。
なお、図6の優先順位テーブルに示された各診断のクラスは、従来の方法で使われる図2の診断順序テーブルに示されたクラスと同じである。しかし、優先順位の規定の仕方が図6と図2では異なる。
図2の診断順序テーブルでは、優先順位に関する制約を満たす実行順序のうちの特定の1通りの順序のみに、診断の実行順序が限定されている。しかし、図6では診断の実行順序に自由度がある。例えば、図2では、必ず診断cを診断dより前に実行しなくてはならないことが規定されているが、図6は、診断cと診断dのどちらを先に実行しても許されることを示している。
図7は、図4の進捗情報104の具体例である進捗管理テーブルを示す図である。進捗管理テーブルは、動的に書き換えられていくが、図7は初期状態を示す図である。
本実施形態では、図1のサーバ装置30に4つのCPUがあるため、進捗管理テーブルの行数は4であり、実行すべき診断が診断a〜mの13個であるため、進捗管理テーブルの列数は13である。
本実施形態では、図1のサーバ装置30に4つのCPUがあるため、進捗管理テーブルの行数は4であり、実行すべき診断が診断a〜mの13個であるため、進捗管理テーブルの列数は13である。
進捗管理テーブルのうち、CPUz(CPUzはCPU00〜11のいずれか)の行の診断y(診断yは診断a〜mのいずれか)の列のマスは、CPUzと診断yとの組み合わせに対する進捗を示す。進捗は、「未診断」、「診断中」、「診断済」の3種類に分類される。進捗管理テーブルによって、全てのCPUと全ての診断の全ての組み合わせに対する進捗が管理される。
以下では、診断済であることを符号「+」で表し、診断中であることを符号「−」で表し、未診断であることを空白で表す。図7は初期状態を示す図なので、全てのマスが空白である。
上記のとおり、本実施形態では、1つの進捗管理テーブルが、図1のSRAM05と15に分散されて格納されている。具体的には、進捗管理テーブルのうちCPU00とCPU01の行からなる部分はSB0上のSRAM05に格納され、CPU10とCPU11の行からなる部分はSB1上のSRAM15に格納されている。
このように進捗管理テーブルが分散されて格納されていても、各CPUは、進捗管理テーブルの全てのマスのデータを読み出したり書き換えたりすることが可能である。なぜなら、SB0とSB1はXB20で接続されているからである。
進捗管理テーブルは動的に書き換えられて内容が変化する。変化の具体例は図13A〜図13Hとともに後述する。
次に、図8〜図11を参照して、本実施形態による割り当て方法を説明する。本実施形態では、図1のCPU00〜11のそれぞれが、図8〜図11の処理を並行して実行する。図8は割り当て方法を示すフローチャート、図9〜図11は図8中のステップの詳細を示すフローチャートである。以下では便宜上、CPU00がこれらの処理を実行する場合を例として説明する。
次に、図8〜図11を参照して、本実施形態による割り当て方法を説明する。本実施形態では、図1のCPU00〜11のそれぞれが、図8〜図11の処理を並行して実行する。図8は割り当て方法を示すフローチャート、図9〜図11は図8中のステップの詳細を示すフローチャートである。以下では便宜上、CPU00がこれらの処理を実行する場合を例として説明する。
本実施形態における診断a〜mは、POSTを構成する診断処理である。したがって、サーバ装置30に電源が入れられると、POSTを実行するために、CPU00〜11のそれぞれが図8の処理を開始する。
図8のステップS101において、CPU00は、進捗管理テーブルを読み書きするためのロックを獲得する。
上記のように1つの進捗管理テーブルがどのCPUからも読み書き可能である。よって、他のCPU01、10、11と進捗管理テーブルの更新が競合するのを防ぐための排他制御が必要である。そのため、ステップS101でロックの獲得が行われる。
上記のように1つの進捗管理テーブルがどのCPUからも読み書き可能である。よって、他のCPU01、10、11と進捗管理テーブルの更新が競合するのを防ぐための排他制御が必要である。そのため、ステップS101でロックの獲得が行われる。
ロックを実現する具体的な方法としては、マルチプロセッサシステムにおける排他制御で利用される任意の方法を採用することができる。
ステップS101においてCPU00がロックの獲得を試み、獲得に成功すれば、処理はステップS102に進む。ロックの獲得に失敗した場合、CPU00は、例えば所定の時間待機してから、再度ロックの獲得を試みる。獲得に成功するまで、処理はステップS101より先に進むことはない。
ステップS101においてCPU00がロックの獲得を試み、獲得に成功すれば、処理はステップS102に進む。ロックの獲得に失敗した場合、CPU00は、例えば所定の時間待機してから、再度ロックの獲得を試みる。獲得に成功するまで、処理はステップS101より先に進むことはない。
次にステップS102において、CPU00は、進捗管理テーブルの自CPUの行(すなわちCPU00の行)を1番左の列から順に探索して、未診断の項目を探す。未診断の項目が見つかったら、あるいは進捗管理テーブルの全ての列を探索しても未診断の項目が見つからなかったら、処理はステップS103へ進む。
ステップS103では、ステップS102で未診断の項目が見つかったか否かをCPU00が判断する。もし未診断の項目がなければ、もはやCPU00が実行すべき診断は残っていないので、CPU00は図8の処理を終了する。
一方、ステップS102で未診断の項目が見つかった場合は、処理はステップS103からステップS104へと進む。
ステップS104でCPU00は、ステップS102で見つかった未診断の項目を選択する。以後、この選択された診断を「診断x」と呼んで説明する。本実施形態においては、診断xは診断a〜mのいずれかである。
ステップS104でCPU00は、ステップS102で見つかった未診断の項目を選択する。以後、この選択された診断を「診断x」と呼んで説明する。本実施形態においては、診断xは診断a〜mのいずれかである。
続いてステップS105で、CPU00は、進捗管理テーブルを参照して、診断xに優先して実行すべき全ての診断が診断済か否かをチェックする。ステップS105におけるチェックの詳細は図9を参照して後述するが、概略は次のとおりである。
ステップS105でチェックすべき進捗管理テーブルの行は、優先順位テーブルに定義されている診断xのクラスによって異なる、1つまたは複数の行である。
診断xがクラス1の診断である場合、つまりドメインに属するいずれか1つのCPUのみが診断xを実行すべき場合は、ステップS105で、全CPUの行がチェックされる。
診断xがクラス1の診断である場合、つまりドメインに属するいずれか1つのCPUのみが診断xを実行すべき場合は、ステップS105で、全CPUの行がチェックされる。
診断xがクラス2の診断である場合、つまり1枚のSBに属するいずれか1つのCPUのみが診断xを実行すべき場合は、自CPUと同一のSB内にある全CPUの行がチェックされる。例えば、CPU00が図8の処理を実行している場合は、CPU00を実装したSB0内にある全CPUの行、つまりCPU00とCPU01の行がチェックされる。
診断xがクラス3の診断である場合、つまり全CPUがそれぞれ診断xを実行すべき場合は、自CPUの行のみがチェックされる。例えば、CPU00が図8の処理を実行している場合は、CPU00の行のみがチェックされる。
診断xのクラスに応じてチェックすべき1つまたは複数の行において、診断xに優先して実行すべき全ての診断が診断済であれば、処理はステップS106に進む。それ以外の場合、処理はステップS109に進む。
ステップS106では、CPU00が、次に行う診断として診断xを選択し、この選択を進捗管理テーブルに反映し、ステップS101で獲得したロックを解除する。ステップS106の詳細は図10とあわせて後述するが、概略は次のとおりである。
ステップS106で書き換えるべき進捗管理テーブル中のマスは、診断xの列の1つまたは複数の行のマスである。診断xの列のどの行のマスを書き換えるべきかは、ステップS105と同様に、診断xのクラスによって異なる。
つまり、診断xがクラス1の診断の場合、CPU00は、診断xの列の、全CPUの行のマスを、診断中を示す記号「−」に書き換える。診断xがクラス2の診断の場合、CPU00は、診断xの列の、自CPUと同一のSB内にある全CPUの行のマスを、診断中を示す記号「−」に書き換える。診断xがクラス3の診断の場合、CPU00は、診断xの列の、自CPUの行のマスのみを、診断中を示す記号「−」に書き換える。
次にステップS107において、CPU00は診断xを実行し、診断xの終了後ステップS108に移行する。
ステップS108では、CPU00が、ステップS106で診断中を示す記号「−」を書き込んだ進捗管理テーブル中の各マスに、診断済を示す記号「+」を書き込む。そして処理はステップS101に戻る。
ステップS108では、CPU00が、ステップS106で診断中を示す記号「−」を書き込んだ進捗管理テーブル中の各マスに、診断済を示す記号「+」を書き込む。そして処理はステップS101に戻る。
一方、ステップS105からステップS109に進んだ場合、CPU00は、進捗管理テーブルの自CPUの行を、ステップS102の探索で見つけた診断xの次の列から順に探索して、未診断の項目を探す。未診断の項目が見つかったら、あるいは進捗管理テーブルの1番右の列まで探索しても未診断の項目が見つからなかったら、処理はステップS110へ進む。
ステップS110では、ステップS109で未診断の項目が見つかったか否かをCPU00が判断する。
もしステップS109で未診断の項目が見つかれば、処理はステップS104に戻る。そして、ステップS104において、ステップS109で見つかった診断を新たな「診断x」として、CPU00はステップS105以降の処理を再度実行する。
もしステップS109で未診断の項目が見つかれば、処理はステップS104に戻る。そして、ステップS104において、ステップS109で見つかった診断を新たな「診断x」として、CPU00はステップS105以降の処理を再度実行する。
もしステップS109で未診断の項目が見つからなければ、処理はステップS111に進む。この場合、少なくともステップS102で見つけた診断xは未診断なので、まだ実行すべき診断が残っている。しかし、今すぐに実行可能な診断は存在しない。よって、CPU00は、ステップS101で獲得したロックを一旦解除し、適当な時間待機(ウェイト)してから、ステップS101に戻る。
ステップS111における待機時間は、予め決められた方針にしたがっている。例えば、待機時間は、予め固定的に決められた時間、ランダムな長さの時間、あるいは進捗管理テーブルの状態に応じて決められる時間などである。
以上のようにして、ステップS103で未診断の項目が残っていないと判断されるまで、ステップS101〜ステップS111が繰り返し実行される。
次に、図8のステップS105の詳細を、図9のフローチャートを参照して説明する。図9の処理が実行されるのは、既に図8のステップS104で未診断の診断xが選択された後である。なお、図8の説明と同様に、便宜上、CPU00が図9の処理を実行する場合を例として説明する。
次に、図8のステップS105の詳細を、図9のフローチャートを参照して説明する。図9の処理が実行されるのは、既に図8のステップS104で未診断の診断xが選択された後である。なお、図8の説明と同様に、便宜上、CPU00が図9の処理を実行する場合を例として説明する。
図9のステップS201において、CPU00は、ステップS202以下の処理によるチェックを全診断に対して行ったか否かを判断する。全診断がチェック済であれば処理はステップS210に進み、それ以外の場合、処理はステップS202に進む。
本実施形態では、全診断とは診断a〜mの13個の診断である。CPU00は、優先順位テーブルまたは進捗管理テーブルを参照することにより、診断a〜mという13個の診断があることを認識することができる。
ステップS202で、CPU00は未チェックの診断を1つ選択する。以後、この選択された診断を「診断y」と呼んで説明する。本実施形態においては、診断yは診断a〜mのいずれかである。
続いてステップS203で、CPU00は、優先順位テーブルを参照して、診断yが診断xよりも優先順位が高いか否かを判定する。図6の優先順位テーブルにおいて診断xの行の診断yの列に「×」印がついていれば、診断yの方が診断xよりも優先順位が高いので、処理はステップS204に進む。図6の優先順位テーブルにおいて診断xの行の診断yの列が空白であれば、診断yは診断xよりも先に実行する必要がない診断なので、診断yはチェック済となり、処理はステップS201に戻る。同様に、診断yが診断xと等しい場合も、処理はステップS201に戻る。
ステップS204で、CPU00は、優先順位テーブルを参照して診断xのクラスを取得する。続いてステップS205で、CPU00は、ステップS204で取得したクラスにおいて、診断の割り当て対象であるCPU(すなわちCPU00自身)と同じグループに属する全CPUのリストを、グループ分けテーブルを参照することにより取得する。
図5のグループ分けテーブルを例として説明すると、ステップS204で取得したクラスがクラス1の場合、CPU00はグループ分けテーブルのクラス1の行を参照する。すると、CPU00と同じグループに属するのは、CPU00自身も含めて、CPU00、CPU01、CPU10、CPU11の4つである。よって、ステップS205でCPU00は、この4つのCPUを要素とするリストを取得する。
同様に、ステップS204で取得したクラスがクラス2の場合、CPU00はグループ分けテーブルのクラス2の行を参照する。すると、CPU00と同じグループに属するのは、CPU00自身も含めて、CPU00、CPU01の2つである。よって、ステップS205でCPU00は、この2つのCPUを要素とするリストを取得する。
同様に、ステップS204で取得したクラスがクラス3の場合、CPU00はグループ分けテーブルのクラス3の行を参照する。すると、CPU00と同じグループに属するのは、CPU00自身のみである。よって、ステップS205でCPU00は、CPU00のみを要素とするリストを取得する。
続いて処理はステップS206に進み、CPU00は、ステップS205で取得したリスト内の全CPUについてステップS207とステップS208のチェックを行ったか否かを判断する。全CPUがチェック済であれば、診断yがチェック済となって処理はステップS201に戻り、そうでなければ、処理はステップS207に進む。
ステップS207でCPU00は、ステップS205で取得したリストから未チェックのCPUを1つ選択する。以後、この選択されたCPUを「CPUz」と呼んで説明する。
続いてステップS208でCPU00は、進捗管理テーブルのCPUzの行の診断yの列のマスを参照する。このマスに、診断済を示す「+」の記号が書かれていれば処理はステップS206に戻り、そうでなければ、処理はステップS209に進む。
ステップS209が実行されるのは、診断xに優先して実行すべき全ての診断が診断済であるという条件が満たされていない場合である。この場合、診断xを実行することは許されないので、ステップS209でCPU00は「NG」という結果を得て図9の処理を終了し、処理は図8に戻る。以後、ステップS209で得られた結果が「NG」であることから、処理は図8のステップS105からステップS109に進む。
一方、ステップS201からステップS210へと処理が進んだ場合は、診断xに優先して実行すべき全ての診断が診断済であるという条件が満たされている場合である。よって、ステップS210でCPU00は「OK」という結果を得て図9の処理を終了し、処理は図8に戻る。以後、ステップS210で得られた結果が「OK」であることから、処理は図8のステップS105からステップS106に進む。
次に、図8のステップS106の詳細を、図10のフローチャートを参照して説明する。図10の処理が実行されるのは、未診断の診断xに優先して実行すべき全ての診断が診断済であることが既に図8のステップS105で判明している場合である。なお、図8の説明と同様に、便宜上、CPU00が図10の処理を実行する場合を例として説明する。
図10のステップS301において、CPU00は、優先順位テーブルを参照して診断xのクラスを取得する。
次にステップS302でCPU00は、ステップS301で取得したクラスにおいて、診断の割り当て対象であるCPU(すなわちCPU00自身)と同じグループに属する全CPUのリストを、グループ分けテーブルを参照することにより取得する。ステップS302は図9のステップS205と類似のステップなので、詳しい説明は省略する。
次にステップS302でCPU00は、ステップS301で取得したクラスにおいて、診断の割り当て対象であるCPU(すなわちCPU00自身)と同じグループに属する全CPUのリストを、グループ分けテーブルを参照することにより取得する。ステップS302は図9のステップS205と類似のステップなので、詳しい説明は省略する。
続いてステップS303でCPU00は、ステップS302で取得したリスト内の全CPUについて、ステップS304とステップS305による進捗管理テーブルの書き換えを行ったか否かを判断する。リスト内の全CPUについて進捗管理テーブルを書き換え済であれば処理はステップS306へ進み、そうでなければ処理はステップS304へ進む。
ステップS304でCPU00は、ステップS302で取得したリストから、進捗管理テーブルの書き換えをまだ行っていないCPUを1つ選択する。以後、この選択されたCPUを「CPUz」と呼んで説明する。
続いてステップS305でCPU00は、進捗管理テーブルのCPUzの行の診断xの列のマスを、診断中を示す「−」に書き換える。そして、処理はステップS303へ戻る。
ステップS303からステップS306に移行した場合、CPU00は、図10の処理の開始前に図8のステップS101で獲得したロックを解除し、図10の処理を終了する。
次に、図8のステップS108の詳細を、図11のフローチャートを参照して説明する。図11の処理が実行されるのは、図8のステップS107で診断xが実行され、診断xが終了した直後である。なお、図8の説明と同様に、便宜上、CPU00が図11の処理を実行する場合を例として説明する。
図11のステップS401において、CPU00は、進捗管理テーブルを書き換えるためのロックを獲得する。この処理は、図8のステップS101と同様のステップなので、詳しい説明は省略する。ロックの獲得に成功したら、処理はステップS402に進む。
ステップS402において、CPU00は、優先順位テーブルを参照して診断xのクラスを取得する。
次にステップS403でCPU00は、ステップS401で取得したクラスにおいて、診断の割り当て対象であるCPU(すなわちCPU00自身)と同じグループに属する全CPUのリストを、グループ分けテーブルを参照することにより取得する。ステップS403は、図9のステップS205や図10のステップS302と同様のステップなので、詳しい説明は省略する。
次にステップS403でCPU00は、ステップS401で取得したクラスにおいて、診断の割り当て対象であるCPU(すなわちCPU00自身)と同じグループに属する全CPUのリストを、グループ分けテーブルを参照することにより取得する。ステップS403は、図9のステップS205や図10のステップS302と同様のステップなので、詳しい説明は省略する。
続いてステップS404でCPU00は、ステップS403で取得したリスト内の全CPUについて、ステップS405とステップS406による進捗管理テーブルの書き換えを行ったか否かを判断する。リスト内の全CPUについて進捗管理テーブルを書き換え済であれば処理はステップS407へ進み、そうでなければ処理はステップS405へ進む。
ステップS405でCPU00は、ステップS403で取得したリストから、進捗管理テーブルの書き換えをまだ行っていないCPUを1つ選択する。以後、この選択されたCPUを「CPUz」と呼んで説明する。
続いてステップS406でCPU00は、進捗管理テーブルのCPUzの行の診断xの列のマスを、診断済を示す「+」に書き換える。そして、処理はステップS404へ戻る。
ステップS404からステップS407に移行した場合、CPU00は、ステップS401で獲得したロックを解除し、図11の処理を終了する。
次に、割り当て処理の具体例を、図12のタイミングチャートと、図13A〜図13Hの進捗管理テーブルのデータの変遷を参照しながら説明する。この具体例でも、図5と図6の各情報が利用される。
次に、割り当て処理の具体例を、図12のタイミングチャートと、図13A〜図13Hの進捗管理テーブルのデータの変遷を参照しながら説明する。この具体例でも、図5と図6の各情報が利用される。
図12では下向きの矢印が時間の流れを表している。図12は、CPU00、CPU01、CPU10、CPU11がそれぞれ図8の処理を並行して実行したときの一例である。図12中に水平な点線とともに示した1〜8という数字は、点線の時点を示す。
サーバ装置30に電源が投入されると、4つのCPUがそれぞれ図8の処理を開始する。この時点で、進捗管理テーブルは図7の初期状態である。
図12の例では、例えば、CPU00が1番先にステップS101でロックを獲得し、未診断の診断aをステップS102で見つけ出し、診断aよりも優先順位が高い診断は存在しないことから、ステップS106へ進む。そして、診断aはクラス3の診断なので、CPU00は、進捗管理テーブルのCPU00の行の診断aの列のマスを「−」と書き換え、ロックを解除し、診断aを実行する。
図12の例では、例えば、CPU00が1番先にステップS101でロックを獲得し、未診断の診断aをステップS102で見つけ出し、診断aよりも優先順位が高い診断は存在しないことから、ステップS106へ進む。そして、診断aはクラス3の診断なので、CPU00は、進捗管理テーブルのCPU00の行の診断aの列のマスを「−」と書き換え、ロックを解除し、診断aを実行する。
同様にして、例えばCPU01、CPU10、CPU11の順に各CPUがロックを獲得し、それぞれ診断aを実行する。
その後、例えばCPU00が1番先に診断aを終了したとすると、CPU00はステップS108において、進捗管理テーブルのCPU00の行の診断aの列のマスを「+」と書き換え、ステップS101に戻る。残りの3つのCPUも同様である。
その後、例えばCPU00が1番先に診断aを終了したとすると、CPU00はステップS108において、進捗管理テーブルのCPU00の行の診断aの列のマスを「+」と書き換え、ステップS101に戻る。残りの3つのCPUも同様である。
続いて、クラス3の診断である診断bも同様にして各CPUにより実行される。図12の時点1では、全CPUが診断aと診断bを終了している。
時点1におけるCPU00の動作は次のとおりである。CPU00は、ステップS101でロックを獲得し、未診断の診断cをステップS102で見つけ出す。診断cはクラス2の診断であり、クラス2でCPU00と同じグループG20に属するのはCPU00と01であり、診断cよりも優先順位が高い診断は診断aと診断bである。時点1においてCPU00と01は診断aと診断bを既に終了しているので、処理はステップS106に進む。ステップS106でCPU00は、進捗管理テーブルのCPU00と01の行の診断cの列のマスを「−」と書き換え、ロックを解除し、診断cを実行する。
時点1におけるCPU00の動作は次のとおりである。CPU00は、ステップS101でロックを獲得し、未診断の診断cをステップS102で見つけ出す。診断cはクラス2の診断であり、クラス2でCPU00と同じグループG20に属するのはCPU00と01であり、診断cよりも優先順位が高い診断は診断aと診断bである。時点1においてCPU00と01は診断aと診断bを既に終了しているので、処理はステップS106に進む。ステップS106でCPU00は、進捗管理テーブルのCPU00と01の行の診断cの列のマスを「−」と書き換え、ロックを解除し、診断cを実行する。
ロックが解除されると、ステップS101で待機していたCPU01が次にロックを獲得する。そして、CPU01はステップS102で未診断の項目を探す。
CPU01は、時点1において診断aと診断bを既に終了している。一方、CPU01は診断cをまだ実行していないが、診断cはクラス2の診断であり、クラス2においてCPU01と同じグループに属しているCPU00が、診断cを実行中である。よって、ステップS102でCPU01が見つける項目は診断dである。
CPU01は、時点1において診断aと診断bを既に終了している。一方、CPU01は診断cをまだ実行していないが、診断cはクラス2の診断であり、クラス2においてCPU01と同じグループに属しているCPU00が、診断cを実行中である。よって、ステップS102でCPU01が見つける項目は診断dである。
診断dはクラス2の診断であり、クラス2でCPU01と同じグループG20に属するのはCPU00と01であり、診断dよりも優先順位が高い診断は診断aと診断bである。時点1においてCPU00と01は診断aと診断bを既に終了しているので、処理はステップS106に進む。ステップS106でCPU01は、進捗管理テーブルのCPU00と01の行の診断dの列のマスを「−」と書き換え、ロックを解除し、診断dを実行する。
同様にして、CPU10が診断cを実行し、CPU11が診断dを実行する。すると、進捗管理テーブルは図13Aに示す状態となる。
なお、図4の進捗情報104に関して簡単に説明したが、進捗管理テーブルにおいて、CPUzと診断yとの組み合わせに対する進捗は、必ずしも、CPUz自体による診断yの実行の進捗を意味するわけではない。このことについて、図13AのCPU00の行を例として説明する。
なお、図4の進捗情報104に関して簡単に説明したが、進捗管理テーブルにおいて、CPUzと診断yとの組み合わせに対する進捗は、必ずしも、CPUz自体による診断yの実行の進捗を意味するわけではない。このことについて、図13AのCPU00の行を例として説明する。
上記で説明したとおり、進捗管理テーブルが図13Aの状態である時点において、CPU00は診断cを実行しているが、診断dを実行しているわけではない。それにもかかわらず、図13AのCPU00の行では、診断cとdの列の2つのマスに「−」と書かれている。
その理由は、診断dがクラス2の診断なので、SB0上の2つのCPU00とCPU01のうちどちらか一方が診断dを実行した場合には、他方のCPUは診断dを実行してはならないためである。
進捗管理テーブルにおいてCPU00の行の診断dの列のマスが空白であることは、単に「診断dがCPU00によってまだ実行されていない」ということを示すというよりも、「診断dがこれからCPU00に割り当てられる可能性がある」ということを示す。よって、「CPU01が診断dの実行を開始することにより、CPU00に診断dを割り当てる可能性がなくなった」ということを進捗管理テーブルに反映するために、図10の処理が実行され、CPU00の行の診断dの列のマスが「−」と書き換えられる。
診断yがクラス1の診断である場合も同様に、CPUz自体が診断yを実行していなくても、CPUzの行の診断yの列のマスが「−」や「+」と書き換えられる。
ここで図12の説明に戻ると、診断の実行にかかる時間は、診断の種類にもより、また、診断の対象の資源の状態にもよる。よって、図12の例のように、同じ診断cであってもCPU00の方がCPU10よりも短い時間で実行を終えることがある。
ここで図12の説明に戻ると、診断の実行にかかる時間は、診断の種類にもより、また、診断の対象の資源の状態にもよる。よって、図12の例のように、同じ診断cであってもCPU00の方がCPU10よりも短い時間で実行を終えることがある。
図12に示すように、時点2では、CPU00は診断cを終了しており、CPU01は診断dを実行中であり、CPU10は診断cを実行中であり、CPU11は診断dを終了している。よって、CPU00は時点2で、ステップS108を実行し、進捗管理テーブルのCPU00と01の行の診断cの列のマスを「+」に書き換える。そして、ステップS101に戻る。
同様にCPU11は時点2で、ステップS108を実行し、進捗管理テーブルのCPU10と11の行の診断dの列のマスを「+」に書き換える。そして、ステップS101に戻る。
CPU00は、ステップS101に戻ってロックを獲得すると、ステップS102で未診断の項目を探索し、診断eを見つける。診断eはクラス2の診断であり、クラス2でCPU00と同じグループG20に属するのはCPU00と01であり、診断eよりも優先順位が高い診断は診断aと診断bである。時点2において既にCPU00と01は診断aと診断bを終了しているので、処理はステップS106に進む。ステップS106でCPU00は、進捗管理テーブルのCPU00と01の行の診断eの列のマスを「−」と書き換え、ロックを解除し、診断eを実行する。
ロックが解除されると、ステップS101で待機していたCPU11が次にロックを獲得し、CPU00と同様にして診断eを実行する。以上により、進捗管理テーブルは、図13Bに示す状態となる。
続いて、時点3では、CPU01が診断dを終了し、ステップS108で、進捗管理テーブルのCPU00とCPU01の行の診断dの列のマスを「+」と書き換える。これにより、進捗管理テーブルは図13Cに示す状態となる。
続いてCPU01はステップS101でロックを獲得し、ステップS102で未診断の項目を探し、診断fを見つける。診断fはクラス1の診断であり、診断fよりも優先順位が高いのは診断a、b、cである。よって、ステップS105では、進捗管理テーブルの4行全ての、診断a、b、cの列のマスがチェックされる。
図12に示すように、時点3では、CPU10が診断cを実行中であり、そのため図13Cに示すように進捗管理テーブルのCPU10と11の行の診断cの列のマスには「−」と書かれている。よって、処理はステップS105からステップS109へ進む。
以後、ステップS109、S110を経てステップS104へ戻るループが繰り返し実行され、CPU01は未診断の診断g〜mについてステップS105(すなわち図9)の優先順位のチェックを実行する。しかし、診断g〜mはいずれも診断cより優先順位が低いため、結局ステップS111へ処理が進む。ステップS111でCPU01はロックを解除して待機する。待機後、CPU01の処理はステップS101に戻る。
時点3の少し後でCPU10は、診断cを終了し、ステップS108で、進捗管理テーブルのCPU10とCPU11の行の診断cの列のマスを「+」と書き換え、ステップS101に戻る。
CPU10が診断cを終了して、ステップS108で進捗管理テーブルが書き換えられると、ステップS101でロックの獲得を試みていたCPU01が、ロックの獲得に成功する。そして、ステップS102で未診断の項目を探し、診断fを見つける。
診断fはクラス1の診断であり、診断fよりも優先順位が高いのは診断a、b、cであり、この時点で進捗管理テーブルの4行全ての診断a、b、cの列のマスは「+」と書き換えられている。よって、処理はステップS105からステップS106へ進む。そして、CPU01は、ステップS106で、進捗管理テーブルの4行全ての診断fの列を「−」と書き換えてロックを解除し、ステップS107で診断fを実行する。
一方で、ロックが解除されると、診断cを終了したCPU10がステップS101でロックを獲得する。CPU10はステップS102で未診断の項目を探し、診断gを見つける。
診断gはクラス1の診断であり、診断gよりも優先順位が高いのは診断a、b、c、d、eである。一方、この時点でCPU00とCPU11がそれぞれ診断eを実行中であり、そのため、進捗管理テーブルの診断eの列の4つのマスは全て「−」と書かれている。よって、処理はステップS105からステップS109へ進む。
以後、ステップS109、S110を経てステップS104へ戻るループが繰り返し実行され、CPU10は未診断の診断h〜mについてステップS105(すなわち図9)の優先順位のチェックを実行する。しかし、診断h〜mはいずれも診断eより優先順位が低いため、結局ステップS111へ処理が進む。ステップS111でCPU10はロックを解除して待機する。待機後、CPU10の処理はステップS101に戻る。
図12に示すように、CPU10による診断cの終了に続いて、CPU00が診断eを終了する。CPU00はステップS108で進捗管理テーブルのCPU00とCPU01の行の診断eの列のマスを「+」と書き換え、ステップS101に戻ってロックを獲得する。
一方、この時点でCPU11が診断eを実行中である。よって、上記のCPU10と同様の理由で、CPU00もステップS111で待機することになる。
その後CPU11が診断eを終了し、ステップS108でCPU11は進捗管理テーブルのCPU10とCPU11の行の診断eの列のマスを「+」と書き換え、ステップS101に戻る。時点4は、こうして進捗管理テーブルが書き換えられた時点である。
その後CPU11が診断eを終了し、ステップS108でCPU11は進捗管理テーブルのCPU10とCPU11の行の診断eの列のマスを「+」と書き換え、ステップS101に戻る。時点4は、こうして進捗管理テーブルが書き換えられた時点である。
時点4において、CPU00と10と11とが、待機中あるいはロックの獲得を試行中の状態である。図12の例では、このうちCPU00が一番先にロックの獲得に成功したとする。CPU00は、ステップS101でロックを獲得し、ステップS102で、クラス1の診断である診断gを見つける。そして、診断gよりも優先順位が高い診断a、b、c、d、eの全ての列において、進捗管理テーブルの4行全てに「+」と書かれていることから、処理はステップS106に進む。
CPU00は、ステップS106で進捗管理テーブルの診断gの列の4行全てのマスに「−」と書き込み、ロックを解除し、ステップS107で診断gを実行する。
ロックが解除されると、次にCPU10がステップS101でロックを獲得し、ステップS102で診断hを見つける。診断hはクラス3の診断であり、時点4では、進捗管理テーブルのCPU10の行において、診断hよりも優先順位が高い診断a、b、c、d、eの列のマスにはいずれも「+」と書かれている。
ロックが解除されると、次にCPU10がステップS101でロックを獲得し、ステップS102で診断hを見つける。診断hはクラス3の診断であり、時点4では、進捗管理テーブルのCPU10の行において、診断hよりも優先順位が高い診断a、b、c、d、eの列のマスにはいずれも「+」と書かれている。
よって、処理はステップS105からステップS106へ進む。CPU10はステップS106で進捗管理テーブルのCPU10の行の診断hの列を「−」と書き換え、ロックを解除し、ステップS107で診断hを実行する。
ロックが解除されると、次にCPU11がステップS101でロックを獲得し、CPU10と同様にして診断hを実行する。この時点で、進捗管理テーブルは図13Dの状態となる。
図12の例では、CPU10による診断hとCPU11による診断hが、CPU00による診断gとCPU01による診断fのいずれよりも早く終了する。すると、CPU10はステップS108で進捗管理テーブルのCPU10の行の診断hの列のマスを「+」と書き換えてからステップS101に戻る。同様に、CPU11もステップS108で進捗管理テーブルのCPU11の行の診断hの列のマスを「+」と書き換えてからステップS101に戻る。
CPU10はステップS101でロックを獲得し、ステップS102で診断iを見つける。診断iはクラス3の診断であり、進捗管理テーブルのCPU10の行において、診断iよりも優先順位が高い診断a、b、c、d、eの列のマスにはいずれも「+」と書かれている。
よって、処理はステップS105からステップS106へ進む。CPU10はステップS106で進捗管理テーブルのCPU10の行の診断iの列を「−」と書き換え、ロックを解除し、ステップS107で診断iを実行する。
ロックが解除されると、次にCPU11がステップS101でロックを獲得し、CPU10と同様にして診断iを実行する。
一方で、時点5では、CPU00が、診断gを終了し、ステップS108で、進捗管理テーブルの4行全ての診断gの列のマスを「+」に書き換える。そして、CPU00はステップS101に戻ってロックを獲得し、ステップS102で診断hを見つける。診断hはクラス3の診断であり、時点5では、進捗管理テーブルのCPU00の行において、診断hよりも優先順位が高い診断a、b、c、d、eの列のマスにはいずれも「+」と書かれている。
一方で、時点5では、CPU00が、診断gを終了し、ステップS108で、進捗管理テーブルの4行全ての診断gの列のマスを「+」に書き換える。そして、CPU00はステップS101に戻ってロックを獲得し、ステップS102で診断hを見つける。診断hはクラス3の診断であり、時点5では、進捗管理テーブルのCPU00の行において、診断hよりも優先順位が高い診断a、b、c、d、eの列のマスにはいずれも「+」と書かれている。
よって、処理はステップS105からステップS106へ進む。CPU00はステップS106で進捗管理テーブルのCPU00の行の診断hの列のマスを「−」と書き換え、ロックを解除し、ステップS107で診断hを実行する。それにより、進捗管理テーブルは、図13Eの状態となる。
その後、CPU10とCPU11がそれぞれ診断iを終了する。CPU10とCPU11はそれぞれ、ステップS108で進捗管理テーブルのCPU10とCPU11の行の診断iの列のマスを「+」と書き換えてからステップS101に戻る。
続いてCPU10は、ステップS101でロックを獲得し、ステップS102で診断jを見つける。しかし、診断jよりも優先順位の高い診断のうち、クラス1の診断である診断fがまだCPU01により実行されている最中である。
よって、処理はステップS105からステップS109に進む。CPU10において未診断の他の診断k〜mも全て診断fより優先順位が低いため、結局CPU10はステップS111で待機し、待機後ステップS101へ戻る。
同様に、診断iを終了したCPU11も、ステップS111で待機し、その後ステップS101へ戻る。
その後、CPU00が、診断hを終了し、ステップS108で進捗管理テーブルのCPU00の行の診断hの列のマスを「+」と書き換えてからステップS101に戻る。また、CPU01が診断fを終了し、ステップS108で進捗管理テーブルのCPU01の行の診断fの列のマスを「+」と書き換えてからステップS101に戻る。
その後、CPU00が、診断hを終了し、ステップS108で進捗管理テーブルのCPU00の行の診断hの列のマスを「+」と書き換えてからステップS101に戻る。また、CPU01が診断fを終了し、ステップS108で進捗管理テーブルのCPU01の行の診断fの列のマスを「+」と書き換えてからステップS101に戻る。
こうして、時点6においては、4つのCPUがいずれもステップS101でロックを獲得しようとしている。例えば、CPU00が最初にロックの獲得に成功したとすると、CPU00はステップS102で診断iを見つける。
診断iはクラス3の診断であり、進捗管理テーブルのCPU00の行において、診断iよりも優先順位が高い全ての診断の列のマスには、時点6で「+」と書かれている。よって、CPU00はステップS106で、進捗管理テーブルのCPU00の行の診断iの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断iを実行する。
ロックが解除されると、続いてCPU01がロックを獲得し、ステップS102で診断hを見つける。診断hはクラス3の診断であり、進捗管理テーブルのCPU01の行において、診断hよりも優先順位が高い全ての診断の列のマスには、時点6で「+」と書かれている。よって、CPU01はステップS106で、進捗管理テーブルのCPU01の行の診断hの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断hを実行する。
ロックが解除されると、続いてCPU10がロックを獲得し、ステップS102で診断jを見つける。診断jはクラス3の診断であり、進捗管理テーブルのCPU10の行において、診断jよりも優先順位が高い全ての診断の列のマスには、時点6で「+」と書かれている。よって、CPU10はステップS106で、進捗管理テーブルのCPU10の行の診断jの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断jを実行する。
ロックが解除されると、続いてCPU11がロックを獲得し、CPU10と同様にして診断jを実行する。以上により、進捗管理テーブルは図13Fの状態となる。
続いて、CPU00が診断iを終了し、ステップS108で、進捗管理テーブルのCPU00の行の診断iの列のマスを「+」と書き換え、ステップS101に戻る。また、CPU01が診断hを終了し、ステップS108で、進捗管理テーブルのCPU01の行の診断hの列のマスを「+」と書き換え、ステップS101に戻る。
続いて、CPU00が診断iを終了し、ステップS108で、進捗管理テーブルのCPU00の行の診断iの列のマスを「+」と書き換え、ステップS101に戻る。また、CPU01が診断hを終了し、ステップS108で、進捗管理テーブルのCPU01の行の診断hの列のマスを「+」と書き換え、ステップS101に戻る。
さらに、CPU10とCPU11がそれぞれ、診断jを終了し、ステップS108で、進捗管理テーブルのCPU10とCPU11の行の診断jの列のマスを「+」と書き換え、ステップS101に戻る。この時点が時点7である。
時点7では、例えば最初にCPU00がロックを獲得し、ステップS102で診断jを見つけ、ステップS105からステップS106へ進む。そしてCPU00は、進捗管理テーブルのCPU00の行の診断jの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断jを実行する。
ロックが解除されると、次にCPU01がロックを獲得し、ステップS102で診断iを見つけ、ステップS105からステップS106へ進む。そしてCPU01は、進捗管理テーブルのCPU01の行の診断iの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断iを実行する。
ロックが解除されると、次にCPU10がロックを獲得し、ステップS102で診断kを見つける。診断kはクラス1の診断であり、進捗管理テーブルにおいて4行全ての、診断kより優先順位が高い診断a〜hの列のマスには、いずれも時点7で「+」と書かれている。
よって、処理はステップS105からステップS106へ進む。CPU10はステップS106で、進捗管理テーブルの4行全ての診断kの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断kを実行する。
ロックが解除されると、次にCPU11がロックを獲得し、ステップS102で診断lを見つける。診断lはクラス2の診断であり、クラス2においてCPU11と同じグループG21に属するのは、SB1に実装されたCPU10と11である。進捗管理テーブルにおいて、CPU10と11の2行の、診断lより優先順位が高い全ての診断の列のマスには、いずれも時点7で「+」と書かれている。
よって、処理はステップS105からステップS106へ進む。CPU11はステップS106で、進捗管理テーブルのCPU10とCPU11の2行の診断lの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断lを実行する。以上により、進捗管理テーブルは図13Gの状態となる。
そして、時点8の各CPUは次のような状態である。CPU00は、診断jを終了し、ステップS108で、進捗管理テーブルのCPU00の行の診断jの列のマスを「+」と書き換え、ステップS101に戻っている。CPU01は、診断iを終了し、ステップS108で、進捗管理テーブルのCPU01の行の診断iの列のマスを「+」と書き換え、ステップS101に戻っている。CPU10は診断kを実行中である。CPU11は、診断lを終了し、ステップS108で、進捗管理テーブルのCPU10とCPU11の行の診断lの列のマスを「+」と書き換え、ステップS101に戻っている。
図12の例では、時点8においてロックの獲得を試みているCPU00、01、11のうち、最初にCPU00が獲得に成功したとする。CPU00は、ステップS101でロックを獲得すると、ステップS102で診断lを見つける。診断lはクラス2の診断であり、進捗管理テーブルのCPU00と01の行の、診断lよりも優先順位の高い全ての診断の列のマスには、時点8で「+」と書かれている。
よって、処理はステップS105からステップS106へ進む。そして、CPU00はステップS106で、進捗管理テーブルのCPU00と01の2行の診断lの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断lを実行する。
ロックが解除されると、次にCPU01がステップS101でロックを獲得し、ステップS102で診断jを見つけ、ステップS105からステップS106へ進む。CPU01はステップS106で、進捗管理テーブルのCPU01の行の診断jの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断jを実行する。
ロックが解除されると、次にCPU11がステップS101でロックを獲得し、ステップS102で診断mを見つける。診断mはクラス3の診断であり、時点8において、進捗管理テーブルのCPU11の行の、診断mよりも優先順位の高い全ての診断の列のマスにはいずれも「+」と書かれている。よって、処理はステップS105からステップS106へ進む。
CPU11はステップS106で、進捗管理テーブルのCPU11の行の診断mの列のマスを「−」と書き換え、ロックを解除して、ステップS107で診断mを実行する。以上により、進捗管理テーブルは図13Hの状態となる。
その後、CPU10が、診断kを終了し、ステップS108で進捗管理テーブルの全ての行の診断kの列のマスを「+」と書き換え、ステップS101に戻る。そして、CPU10は、ステップS101でロックを獲得し、ステップS102で診断mを見つけ、ステップS105からステップS106に進む。
CPU10は、ステップS106で進捗管理テーブルのCPU10の行の診断mの列のマスを「−」と書き換え、ロックを解除し、ステップS107で診断mを実行する。
続いて、CPU11が診断mを終了し、ステップS108で、進捗管理テーブルのCPU11の行の診断mの列のマスを「+」と書き換え、ステップS101に戻り、ロックを獲得する。CPU11は、ステップS102において未診断の項目を探索するが、未診断の項目はもう残っていない。よって、ステップS103でCPU11は、未診断の項目がないと判断し、図8の処理を終了する。
続いて、CPU11が診断mを終了し、ステップS108で、進捗管理テーブルのCPU11の行の診断mの列のマスを「+」と書き換え、ステップS101に戻り、ロックを獲得する。CPU11は、ステップS102において未診断の項目を探索するが、未診断の項目はもう残っていない。よって、ステップS103でCPU11は、未診断の項目がないと判断し、図8の処理を終了する。
また、CPU00は診断lを終了し、CPU01は診断jを終了する。すると、CPU00は、ステップS108で進捗管理テーブルのCPU00と01の行の診断lの列のマスをともに「+」と書き換え、ステップS101に戻る。また、CPU01は、ステップS108で進捗管理テーブルのCPU01の行の診断jの列のマスを「+」と書き換え、ステップS101に戻る。
すると、CPU00はステップS101でロックを獲得し、ステップS102で診断mを見つけ、ステップS105からステップS106へ進んで、進捗管理テーブルのCPU00の行の診断mの列のマスを「−」と書き換え、ロックを解除する。そして、CPU00はステップS107で診断mを実行する。ロックが解除されると、CPU01がロックを獲得し、同様にして診断mを実行する。
その後、CPU10、00、01が順次診断mを終了し、CPU11と同様にしてそれぞれ図8の処理を終了する。
以上、図12〜図13Hの具体例について説明したが、図12に示すとおり、本実施形態では、各CPUがそれぞれ自CPUに割り当てた診断を同時に並行して実行していく。よって、従来の方法を示す図3と、本実施形態による図12とを比較すると、図12では無駄な待ち時間が少なくなっていることが分かる。
以上、図12〜図13Hの具体例について説明したが、図12に示すとおり、本実施形態では、各CPUがそれぞれ自CPUに割り当てた診断を同時に並行して実行していく。よって、従来の方法を示す図3と、本実施形態による図12とを比較すると、図12では無駄な待ち時間が少なくなっていることが分かる。
すなわち、図3に示した従来の方法では、一つのCPU00が診断a〜mを全て処理していたが、図12の例では診断d、f、kを他のCPUであるCPU01、CPU10又はCPU11が実行している。図12に例示したように、本実施形態によれば、状況に応じて診断が割り当てられるため、無駄な待機時間が減り、総診断時間は図3の従来の方法より短くなっている。
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
上記実施形態では、DIMMなどのSBごとに備えられたハードウェア資源を対象とする診断をクラス2の診断の例として挙げており、各SBにおいて当該SB上の1つのCPUが当該SB上のハードウェア資源を対象としたクラス2の診断を行うことを仮定していた。しかし、実施形態によって装置のハードウェア構成は異なるため、診断対象のハードウェア資源が実装されているSBと、診断を実行するCPUが実装されているSBとが、異なっていても診断を実行することが可能な場合がある。
上記実施形態では、DIMMなどのSBごとに備えられたハードウェア資源を対象とする診断をクラス2の診断の例として挙げており、各SBにおいて当該SB上の1つのCPUが当該SB上のハードウェア資源を対象としたクラス2の診断を行うことを仮定していた。しかし、実施形態によって装置のハードウェア構成は異なるため、診断対象のハードウェア資源が実装されているSBと、診断を実行するCPUが実装されているSBとが、異なっていても診断を実行することが可能な場合がある。
その場合、SBごとに備えられたハードウェア資源を対象とする診断を、クラス2の1つの診断ではなく、クラス1の複数の診断として定義することにより、さらに診断の並列化を進め、総診断時間を短縮することができる。例えば、SBごとに備えられたDIMMをそれぞれ対象とする“メモリ診断”というクラス2の1つの診断のかわりに、SB0が備えるDIMM02を対象とする“SB0のメモリ診断”と、SB1が備えるDIMM12を対象とする“SB1のメモリ診断”というクラス1の2つの診断を定義することができる。
このように診断を定義することによって、例えば、SB0にはCPU00という1つのCPUしかなく、CPU00が現在他の診断を実行中である場合でも、SB0以外のSB上のアイドル状態のCPUが、SB0のメモリ診断を行うことが可能となる。その結果、待機時間が減り、総診断時間を短縮することができる。
また、上記のようにして、SBごとに備えられたハードウェア資源を対象とする診断をクラス1の診断として定義することにより、CPUが実装されていないSBが存在するような装置に対しても、本発明を適用することができる。
なお、上記実施形態では、クラス1〜3という3つのクラスが定義されているが、クラスの数は2以上であれば任意である。ハードウェア構成や、診断の種類等に応じて、適宜クラスの数を決めることができる。例えば、1枚のSBのみからなるコンピュータに対しては、各CPUに対するクラスと、コンピュータ全体(すなわちSB全体)に対応するクラスの2つのクラスのみを定義することが適切である。
また、上記実施形態では、最下層のクラス3は各CPUに対応する。しかし、複数のコアを有するマルチコアプロセッサを実装した機器におけるPOSTでは、コアごとに行うべき診断も存在する。よって、例えば複数のマルチコアプロセッサを実装したSBを2枚以上含むサーバ装置においては、下から順に、1つのコア、1つのマルチコアプロセッサ(すなわち1つのCPU)、1枚のSB、サーバ装置全体(すなわち1つのドメイン)にそれぞれ対応する4つのクラスを定義してもよい。
あるいは、複数のコンピュータをクラスタ化して運用する場合、最上層のクラスがクラスタ全体に対応するクラスとして定義されていてもよい。
また、上記実施形態では、各CPUが並行して図8の処理をそれぞれ実行している。すなわち、各CPUは、自CPUへの診断の割り当てを行うとともに、診断も実行している。しかし、例えば図1のサーバ装置がSB0とSB1のほかにさらに不図示の1つの制御部を備え、その制御部がCPU00〜CPU11それぞれへの診断の割り当てを行うように、上記実施形態を変形することもできる。この変形例では、制御部は診断を行わず、CPU00〜CPU11は割り当てられた診断のみを行うので、ロックの獲得や解除が不要である。
また、上記実施形態では、各CPUが並行して図8の処理をそれぞれ実行している。すなわち、各CPUは、自CPUへの診断の割り当てを行うとともに、診断も実行している。しかし、例えば図1のサーバ装置がSB0とSB1のほかにさらに不図示の1つの制御部を備え、その制御部がCPU00〜CPU11それぞれへの診断の割り当てを行うように、上記実施形態を変形することもできる。この変形例では、制御部は診断を行わず、CPU00〜CPU11は割り当てられた診断のみを行うので、ロックの獲得や解除が不要である。
なお、図1にはサーバ装置30のハードウェア構成を例示したが、本発明の適用対象は、サーバ装置30やクライアント用のパーソナルコンピュータ(PC)に限らない。例えば、マルチプロセッサを搭載したルータ装置にも本発明を適用することができる。例えば、ルータに搭載された個々のプロセッサが、図4の割り当て装置100および診断部111として機能する。
また、上記実施形態では、同内容のグループ分けテーブルがSRAM05とSRAM15にそれぞれ格納され、同内容の優先順位テーブルがROM06と16にそれぞれ格納され、進捗管理テーブルはSRAM05と15に分散されて格納されている。しかし、これらのテーブルの格納場所は例示にすぎない。
各SB内にグループ分けテーブルや優先順位テーブルがそれぞれ格納されていなくてもよく、進捗管理テーブルが分散されていなくてもよい。
さらに、図5〜図7にはグループ分けテーブル、優先順位テーブル、および進捗管理テーブルの例を示したが、テーブル形式以外のデータ構造によって、グループ分け情報101、優先順位情報102、クラス情報103、および進捗情報104を表現してもよい。優先順位テーブルと進捗管理テーブルで使った記号も例示にすぎない。
さらに、図5〜図7にはグループ分けテーブル、優先順位テーブル、および進捗管理テーブルの例を示したが、テーブル形式以外のデータ構造によって、グループ分け情報101、優先順位情報102、クラス情報103、および進捗情報104を表現してもよい。優先順位テーブルと進捗管理テーブルで使った記号も例示にすぎない。
例えば、図6の優先順位テーブルでは、「×」または「空白」によって優先順位を示している。しかし、図6のうち「×」と書かれたマスに相当するデータのみを優先順位情報102として記憶し、データが存在しないことをもって図6のうち「空白」のマスに相当する内容を表すことも可能である。
また、図5〜図7の各テーブルにおける項目の並び順も任意である。これらのテーブルにおける項目の並び順によらず適切な割り当てが可能であることは、図8〜図11の説明から明らかである。
なお、上記実施形態ではPOSTを例として説明したが、POST以外の診断処理に対して本発明を適用することも可能である。
Claims (8)
- 記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させることにより自己診断処理を行う情報処理装置において、
前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出す優先順位情報読み出し部と、
前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すクラス情報読み出し部と、
前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出す進捗情報読み出し部と、
未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換える割り当て部を有することを特徴とする情報処理装置。 - 前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項1記載の情報処理装置。
- 前記進捗情報は、前記複数の診断処理のうち、完了した診断処理と実行中の診断処理と未実行の診断処理の情報を表し、
前記割り当て部は、前記診断処理部が割り当てられた診断処理を実行中である場合に、前記割り当てられた診断処理が実行中であるとして前記進捗情報を書き換えることを特徴とする請求項1記載の情報処理装置。 - 前記情報処理装置は、さらに、
前記クラス情報毎に、前記診断処理部が属するグループを表すとともに、全ての前記診断処理部が属する最上位のグループと1つの診断処理部のみが属する複数の最下位のグループを有するグループ分け情報を、前記記憶部から読み出すグループ分け情報読み出し部を有し、
前記割り当て部は、前記未実行の診断処理を、前記優先順位情報と前記クラス情報と前記グループ分け情報に基づいて、前記複数の診断処理部のいずれかに割り当てることを特徴とする請求項1記載の情報処理装置。 - 記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させる情報処理装置の自己診断処理方法において、
優先順位情報読み出し部が、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出すステップと、
クラス情報読み出し部が、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すステップと、
進捗情報読み出し部が、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出すステップと、
割り当て部が、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換えるステップを有することを特徴とする自己診断処理方法。 - 前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項5記載の自己診断処理方法。
- 記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させる情報処理装置の自己診断処理プログラムにおいて、
前記情報処理装置に、
優先順位情報読み出し部が、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出すステップと、
クラス情報読み出し部が、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すステップと、
進捗情報読み出し部が、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出すステップと、
割り当て部が、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換えるステップを実行させることを特徴とする自己診断処理プログラム。 - 前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項7記載の自己診断処理プログラム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2007/001123 WO2009050764A1 (ja) | 2007-10-16 | 2007-10-16 | 自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2009050764A1 JPWO2009050764A1 (ja) | 2011-02-24 |
JP5093242B2 true JP5093242B2 (ja) | 2012-12-12 |
Family
ID=40567060
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009537771A Expired - Fee Related JP5093242B2 (ja) | 2007-10-16 | 2007-10-16 | 自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20100199284A1 (ja) |
JP (1) | JP5093242B2 (ja) |
WO (1) | WO2009050764A1 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6070840B2 (ja) * | 2013-06-17 | 2017-02-01 | 富士通株式会社 | 情報処理装置、情報処理方法、及び情報処理プログラム |
JP6295113B2 (ja) * | 2014-03-17 | 2018-03-14 | ルネサスエレクトロニクス株式会社 | 自己診断装置及び自己診断方法 |
DE102014104717B4 (de) * | 2014-04-03 | 2019-08-01 | Hyperstone Gmbh | Verfahren und Vorrichtung zur Datenerneuerung für eine Erhöhung der Zuverlässigkeit von Flashspeichern |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0480846A (ja) * | 1990-07-23 | 1992-03-13 | Nec Corp | メモリ診断方式 |
JPH1049397A (ja) * | 1996-08-01 | 1998-02-20 | Nec Corp | 試験プログラム実行制御方法 |
JP2003044453A (ja) * | 2001-07-31 | 2003-02-14 | Toshiba Corp | 検査スケジュール作成システムおよび検査スケジュール作成方法 |
JP2007026235A (ja) * | 2005-07-20 | 2007-02-01 | Hitachi Ltd | マルチプロセッサシステムにおける検証プログラム実行方式 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6522987B1 (en) * | 1999-11-30 | 2003-02-18 | Agilent Technologies, Inc. | Monitoring system and method implementing a percent availability test |
US6804709B2 (en) * | 2001-02-20 | 2004-10-12 | Microsoft Corporation | System uses test controller to match different combination configuration capabilities of servers and clients and assign test cases for implementing distributed testing |
US7020797B2 (en) * | 2001-09-10 | 2006-03-28 | Optimyz Software, Inc. | Automated software testing management system |
US20080244524A1 (en) * | 2007-03-27 | 2008-10-02 | Tim Kelso | Program Test System |
US8448144B2 (en) * | 2008-04-02 | 2013-05-21 | International Business Machines Corporation | Testing software applications with progress tracking |
-
2007
- 2007-10-16 JP JP2009537771A patent/JP5093242B2/ja not_active Expired - Fee Related
- 2007-10-16 WO PCT/JP2007/001123 patent/WO2009050764A1/ja active Application Filing
-
2010
- 2010-04-12 US US12/758,308 patent/US20100199284A1/en not_active Abandoned
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0480846A (ja) * | 1990-07-23 | 1992-03-13 | Nec Corp | メモリ診断方式 |
JPH1049397A (ja) * | 1996-08-01 | 1998-02-20 | Nec Corp | 試験プログラム実行制御方法 |
JP2003044453A (ja) * | 2001-07-31 | 2003-02-14 | Toshiba Corp | 検査スケジュール作成システムおよび検査スケジュール作成方法 |
JP2007026235A (ja) * | 2005-07-20 | 2007-02-01 | Hitachi Ltd | マルチプロセッサシステムにおける検証プログラム実行方式 |
Also Published As
Publication number | Publication date |
---|---|
WO2009050764A1 (ja) | 2009-04-23 |
JPWO2009050764A1 (ja) | 2011-02-24 |
US20100199284A1 (en) | 2010-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9317204B2 (en) | System and method for I/O optimization in a multi-queued environment | |
CN104980454B (zh) | 一种资源数据共享方法、服务器及系统 | |
US8250310B2 (en) | Assigning data to NVRAM of shared access hybrid hard drives | |
CN1983196B (zh) | 用于将执行线程分组的系统和方法 | |
US8375390B2 (en) | Scheduling method and scheduling apparatus | |
JP4464378B2 (ja) | 同一データを纏める事で格納領域を節約する計算機システム、ストレージシステム及びそれらの制御方法 | |
US7904618B2 (en) | Buffer managing method and buffer managing apparatus | |
CN102289390A (zh) | 系统管理程序调度器 | |
JP5416860B2 (ja) | 計算機システムおよびその制御方法 | |
TW201140442A (en) | Accelerating a wake-up time of a system | |
US20200174675A1 (en) | Method and apparatus for managing data access | |
US10459771B2 (en) | Lightweight thread synchronization using shared memory state | |
JP5093242B2 (ja) | 自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラム | |
US10223269B2 (en) | Method and apparatus for preventing bank conflict in memory | |
US20080022052A1 (en) | Bus Coupled Multiprocessor | |
CN104520811A (zh) | 优化具有多个中央处理器的计算机的启动时间的系统及方法 | |
US20180004672A1 (en) | Cache unit and processor | |
JP4817115B2 (ja) | コンピュータシステム、並列初期化方法、及びブートプログラム | |
JP5941868B2 (ja) | 仮想計算機システムおよび仮想計算機におけるi/o実施方法 | |
JP5104501B2 (ja) | 仮想マシンシステム、ホスト計算機、仮想マシン構築方法およびプログラム | |
US20140013148A1 (en) | Barrier synchronization method, barrier synchronization apparatus and arithmetic processing unit | |
US9003274B2 (en) | Scheduling start-up and shut-down of mainframe applications using topographical relationships | |
JP6035993B2 (ja) | 情報処理装置、装置管理方法および装置管理プログラム | |
CN110383248A (zh) | 控制多核处理器的方法和相关计算机 | |
JP5076574B2 (ja) | メモリアクセス装置及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120821 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120903 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150928 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |