JP4077815B2 - 発明者JohnW.Curryによる、オペレーティングシステムと共に使用される改良された診断モニタおよびその方法 - Google Patents
発明者JohnW.Curryによる、オペレーティングシステムと共に使用される改良された診断モニタおよびその方法 Download PDFInfo
- Publication number
- JP4077815B2 JP4077815B2 JP2004198724A JP2004198724A JP4077815B2 JP 4077815 B2 JP4077815 B2 JP 4077815B2 JP 2004198724 A JP2004198724 A JP 2004198724A JP 2004198724 A JP2004198724 A JP 2004198724A JP 4077815 B2 JP4077815 B2 JP 4077815B2
- Authority
- JP
- Japan
- Prior art keywords
- monitor
- kernel
- diagnostic
- trap
- call
- 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
- 238000000034 method Methods 0.000 title claims abstract description 81
- 235000021438 curry Nutrition 0.000 title 1
- 238000004458 analytical method Methods 0.000 claims description 63
- 238000012545 processing Methods 0.000 claims description 5
- 238000012544 monitoring process Methods 0.000 abstract description 6
- 230000006870 function Effects 0.000 description 109
- 230000008569 process Effects 0.000 description 31
- 238000012360 testing method Methods 0.000 description 28
- 238000003745 diagnosis Methods 0.000 description 18
- 230000008859 change Effects 0.000 description 14
- 238000001514 detection method Methods 0.000 description 13
- 230000008901 benefit Effects 0.000 description 8
- 230000001960 triggered effect Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000007704 transition Effects 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000013480 data collection Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000002955 isolation Methods 0.000 description 4
- 238000012631 diagnostic technique Methods 0.000 description 3
- 238000007689 inspection Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 241000283283 Orcinus orca Species 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000002405 diagnostic procedure Methods 0.000 description 2
- 230000008014 freezing Effects 0.000 description 2
- 238000007710 freezing Methods 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 241000238876 Acari Species 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0751—Error or fault detection not based on redundancy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/079—Root cause analysis, i.e. error or fault diagnosis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Debugging And Monitoring (AREA)
Description
本出願は、本発明の譲受人に譲渡された同時係属中の、発明者John W. Curryによって2003年2月27日に出願された「IMPROVED DIAGNOSTIC EXERCISER AND METHODS THREFOR」と題する、米国特許出願第10/376,436号に対し米国特許法第120条に基づく優先権を主張する。
コンピュータおよびオペレーティングシステムが複雑になるにつれて、障害および性能の分析はより難しくなってきている。
信頼性の理由から、コンピュータシステムは、使用に供する前に徹底的に試験することが非常に望ましい。
一般的に言うと、コンピュータシステムのハードウェアの特定の部分を試験するコードを作成することは可能である。
しかしながら、このような狭い部分に集中した試験は、概してコンピュータシステム全体に全体的にストレスを加えておらず、コンピュータシステムが現場で使用される傾向にある態様を反映していない。
製品OSの下で実行される診断実行装置は、特別なドライバおよび/またはオペレーティングシステム呼び出しを使用する専用に設計されたアプリケーションを使用することにより、特定の方法でコンピュータシステムにストレスを加えることができ、一定のエラーが発生したときにそれらを検出することができる。
これらの診断実行装置はOSを使用するので、それら診断実行装置のアプリケーションは、より十分に、かつ、例えば、マルチスレッド、高速ディスクI/Oオペレーション等の機能を伴うコンピュータシステムの現場での使用態様により類似した方法で、ハードウェアにストレスを加えることができる。
しかしながら、所与の診断実行装置が、製品オペレーティングシステムの下で実行されると、このような診断実行装置の能力は、そのオペレーティングシステムによって制約を受ける。
例えば、製品オペレーティングシステムは、競争に勝つために、現場の性能を得るように最適化される傾向があり、広範な診断能力を得るようには最適化されない傾向がある。
同様に、データ収集、エラー検出、およびエラー分析に役立つ他の機能を設けると、OSの性能が極度に阻害され、かつ/または、現場のコンピュータシステムのセキュリティが危険にさらされることになることから、このような機能は、製品OSでは利用可能でないことがある。
このことによって、カーネルクラッシュの状況では、診断実行装置の有用性が制限される傾向がある。
例えば、カーネルのブート中にカーネルがクラッシュすると、従来技術の診断実行装置の一般的な診断モニタは、起動されなくなってしまい、それによって、カーネルのブート障害の検出および分析にほとんど意味がなくなる。
しかしながら、このような診断技法は、カーネルダンプファイルに保存された情報によって本質的に制限される。
カーネルダンププログラムを最初に設計したプログラマが、一定の情報を保存しないようにしていた場合、このような情報は、カーネルダンプファイルにおいて分析用に利用できないことになる。
さらに、カーネルダンプファイルで利用可能な情報の内容およびフォーマットは、カーネルダンプを最初に設計したプログラマの裁量に応じて変わる場合がある。
したがって、カーネルダンプ情報を解読することは困難となることがあり、カーネルを最初に設計したプログラマを探し出して、カーネルダンプファイルの分析を援助してもらうことが必要になることがある。
OSが制作された時期と、特定のエラーが発生し、その結果、カーネルダンプが行われた時期との間に長い時間が経過している場合、そのプログラマは、もはや援助に役立たないおそれがあり、カーネルダンプデータを精密に調査するには、おそらくカーネルのエキスパートを使用する必要がある。
本発明は、一実施の形態では、コンピュータシステムが製品オペレーティングシステム(OS)を使用してユーザアプリケーションを実行する際に、コンピュータシステムを監視する、コンピュータ実施される方法に関する。
このOSは、カーネルトラップ処理を備えたOSカーネルを有する。
この方法は、診断モニタを設けることであって、たとえOSカーネルが実行できない場合であっても実行することができるように構成され、かつ、モニタトラップテーブルを有する、診断モニタを設けることを含む。
ユーザアプリケーションの実行中にトラップが発生した場合に、この方法は、当前記トラップがOSカーネルによってハンドリングされるべきか、または診断モニタによってハンドリングされるべきかを、診断モニタを使用して確認することを含む。
トラップがOSカーネルによってハンドリングされるべきである場合に、この方法は、トラップをOSカーネルに渡すことであって、それによって、ハンドリングさせる、トラップをOSカーネルに渡すことを含む。
この装置は、このOSカーネルと協働的に実行するように構成された診断モニタを含む。
このOSカーネルは、アプリケーションプログラムの実行中に生成されるトラップタイプのメッセージおよびインターラプトタイプのメッセージの少なくとも一方をハンドリングするカーネルトラップ処理を有する。
診断モニタは、たとえOSカーネルが実行できない場合であっても実行し続けることができる。
診断モニタは、トラップタイプのメッセージおよびインターラプトタイプのメッセージの少なくとも一方をハンドリングするモニタトラップテーブルを含む。
診断モニタは、アプリケーションプログラムの実行中に生成されるトラップを受け取るように構成され、かつ、受け取った所与のトラップについて、OSカーネルがその受け取ったトラップをハンドリングするのか、または診断モニタがその受け取ったトラップをハンドリングするのかを決定するように構成される。
このコンピュータ可読コードは、コンピュータシステムのエラーをハンドリングするように構成される。
この製品は、診断モニタを実施するコンピュータ可読コードを含む。
この診断モニタは、コンピュータシステムの製品オペレーティングシステム(OS)カーネルと協働して実行するように構成され、かつ、たとえOSカーネルが実行できない場合であっても、実行できるように構成される。
診断モニタは、コンピュータシステムで生成されるトラップを受け取るように構成されたモニタトラップテーブルを含む。
OSカーネルは、診断モニタから渡されたトラップをハンドリングするように構成されたカーネルトラップ処理を有する。
この製品は、システムの起動時に、OSカーネルのロード前に、診断モニタをロードするコンピュータ可読コードを含む。
添付図面において、同じ参照符号は、同様の要素を表す。
次に、添付図面に図示するような本発明のいくつかの好ましい実施の形態を参照して、本発明を詳細に説明する。
以下の説明では、本発明の実施の形態の十分な理解を提供するために、多数の具体的な詳細について説明する。
しかしながら、本発明は、これらの具体的な詳細の一部またはすべてがなくても実施可能であることが当業者には明らかであろう。
それ以外の場合には、本発明を不必要に分かりにくくしないように、既知のプロセスのステップおよび/または既知の構造は、詳細に説明されていない。
純粋なオフラインの診断手法によって提供される利点としては、例えば、コンピュータハードウェアへの広範なアクセスおよびコンピュータハードウェアの広範な制御と、エラー検出およびエラー分析の容易さとが挙げられる。
オンラインのOSベースの診断手法によって提供される利点としては、例えば、より十分に、かつ、コンピュータハードウェアが現場で受けるストレスをより良く表現する方法で、ハードウェアにストレスを加えることができることが挙げられる。
オフライン診断ツールは、個々のハードウェアサブシステムへの広範なアクセスおよび/またはその制御を行うことができるが、それらの診断手法は、局所化された刺激応答に基づく傾向がある。
したがって、被試験サブシステムが現場で受ける可能性のあるシナリオのほとんどを、実行された試験が確実にカバーするには、多数の刺激(およびその刺激の多数の並べ替え)を使用することが必要とされている。
診断アプリケーションがOSの下で実行される場合、ハードウェアの制御は、直接的な形式で行われることは少なくなり、ハードウェアへのアクセスは、はるかに多く制約される。
しかしながら、オンライン診断アプリケーションは、マルチスレッド、高速I/Oアクセス等のOSに関連した機能を使用して、概してコンピュータシステム全体に、より十分なストレスを加えることができる。
オンライン診断アプリケーションは、OSの下で実行されるので、コンピュータシステムは、コンピュータハードウェアが現場で受けるストレスにより類似した方法でストレスを受ける傾向がある。
なお、オフライン診断実行装置で行われる並べ替えのいくつかは、非現実的なものとなることがあり、かつ/または、コンピュータシステムが現場で決して受けないものとなることがある。
既存のOSベースの診断ツールは、製品OS(すなわち現場で使用されるOS)の下で実行される傾向があるので、セキュリティおよび性能への配慮から、既存のOSベースの診断ツールの診断能力および/または分析能力が厳しく制限される。
OSおよび/またはOSカーネルの設計に応じて、一定のタイプの情報は、エラー検出および/またはエラー分析用に、取り込みおよび/またはアクセスができないことがある。
ハードウェアへのアクセスおよび/またはハードウェアの制御は、きびしく制限されることがある。
たとえ情報が取り込まれる場合であっても、カーネルダンプ等の情報は、分析してエラー源を確認するのが困難な場合がある。
また、OSベースの診断ツールは、エラー源を簡単な方法で分離することも困難となる傾向がある。
ハードウェアシステムを十分に働かせて、コンピュータシステムが現場で使用されるやり方をより良く表す試験を使用してコンピュータシステムのより統制された試験を行うために、診断実行装置は、OSを使用する。
しかしながら、使用されるOSは、診断カーネルに基づく非製品OSである。
非製品OS、より具体的には、診断能力を向上させるように変更された非製品カーネルを使用することにより、本発明は、有利なことに、製品OSの制限を回避することができる。
なお、この制限は、例えばセキュリティおよび/または性能の理由に基づいて課されるものである。
診断試験が、制御された非製品環境で実行されるので、現場で配慮されるセキュリティおよび性能の重要性は低くなる。
この協働的という用語が本明細書で使用されるが、診断モニタは、非製品カーネルの下で動作しないので、非製品カーネルと協働的に実行されると言われる。
本発明の一定の実施の形態によると、理解しやすいように障害分析を提供するルールベースの機構(facilities)が提供される。
本発明の技法を使用すると、ブート中または診断アプリケーションプログラムの実行中にカーネルがクラッシュしたとしても、障害分析が容易になる。
この診断モニタは、カーネルのロードおよびブートの前にロードされ、トラップベクタテーブルを制御する。
カーネルのブート中、または、カーネル(すなわちOS)の実行中、発生するあらゆるトラップまたはインターラプトが、診断モニタによって検査されて、それらのトラップまたはインターラプトをどのようにハンドリングすべきかが判断されることになる。
特定のアーキテクチャに応じて、これらの状況には、一定のハードウェアイベントおよびいくつかのソフトウェア生成イベントが含まれる。
このトラップ/インターラプトベースのメカニズムは、本発明の診断モニタによって利用されて、エラー検出を容易にすることに加えて、一定のエラーに関するデータ収集およびデータ分析を容易にする。
そうでない場合には、診断モニタは、メモリのカーネルデータ構造体から収集できるあらゆる情報と共に、トラップ情報を検査し、この情報を使用してエラーを分離することになる。
カーネルパニックは、強制的なトラップを診断モニタに引き起こすことがある。
多くのアーキテクチャでは、タイムスライスイベントであるプロセスが、エラーでないトラップを引き起こすことがある。
これらのトラップは、診断モニタによって使用されて、ランタイムにおけるハードウェアパラメータおよびカーネルパラメータの「監視」が可能になる。
例えば、CPUがタイムスライストラップを有する場合に、診断モニタは、そのCPU上で実行されているプロセスに関連したプロセスデータ構造体を検査することにより、そのCPUがアイドルであったかどうかを判断することができる。
CPUがアイドルである場合には、診断モニタは、CPUを使用してエラーをチェックすることができる。
このように、診断モニタは、カーネルに対する自身の動作の影響を小さくすることができる。
すなわち、カーネルスレッドが或るセマフォを捕らえようと試みると、そのカーネルスレッドは、そのセマフォを獲得するまで、時間に制限なく捕らえようと試みることになる。
しかしながら、カーネルのセマフォルーチンが、或る時間の経過後、タイムアウトしてトラップを強制するように変更されると、診断モニタを使用して分析を行うことができる。
次いで、このローダは、ブートデバイス(ディスク等)から診断モニタを探し出して、その診断モニタを起動する。
診断モニタは、初期化を行い、自身が実行されているコンピュータのモデルが何であるかを判断しようと試みる。
一般に、所与の診断モニタは、特定のマシンアーキテクチャ向けにコンパイルされている。
次いで、診断モニタは、自身が実行されているコンピュータのモデルに適したライブラリモジュールをロードするようにローダに要求する。
このライブラリは、さまざまなハードウェアエラーの検出ルーチンおよび分離ルーチン等、監視されるコンピュータについてのモデル固有の情報を有する。
また、カーネルのシンボルテーブルもロードされて、診断モニタによって使用され、その結果、診断モニタは、固定されたカーネルデータ構造体の位置を知る。
ほとんどのランタイムカーネル構造体の位置は、一定の固定された構造体の位置を知ることにより推定することができる。
あらゆる例外について、カーネルは、それらの位置を、OSの初期化中または構造体作成時に診断モニタに渡すことができる。
加えて、診断モニタは、自身のトラップベクタテーブルも、使用されるものとしてインストールする。
次いで、診断モニタは、ローダに制御を返す。
図1は、診断を受けるコンピュータハードウェア102と診断実行装置104とを含む診断環境を、本発明の一実施の形態に従って示している。
このローダモジュール105は、システム起動時に、診断実行装置104の主要なコンポーネントをメモリにロードする役割を有する。
これらの主要なコンポーネントは、以下で説明する。
この診断カーネル106は、診断目的で使用される非製品OS(例えば、非製品Windows(商標)または非製品Linux OS)のカーネルを表す。
複数のドライバ107a、107b、107cが診断カーネル106と共に設けられる。
これらのドライバは、診断実行装置104がI/Oデバイスに関する情報を取得できるようにするために設けられたドライバのいくつかを表す。
しかしながら、診断モニタ(後述)が、カーネル106を監視する機能、エラー検出機能、およびエラー分析機能を実行できるようにするには、一定の変更が必要とされる。
一実施の形態では、カーネル106は、診断モニタおよびドライバの初期化を可能にし、診断アプリケーションの実行中に診断モニタと通信することを容易にし、かつ、追加された診断能力(プロセッサ親和性、物理メモリの割り当て等)を提供するように変更される。
製品カーネルに対する他の可能な変更点については、以下にさらに説明する。
この診断モニタ108は、エラーの検出および分析に必要とされる監視ソフトウェアを表す。
診断モニタ108は、カーネル106と通信し、カーネル106を監視するように設計される。
一実施の形態では、モニタ108およびカーネル106は、個別のバイナリファイルとして提供される。
それによって、モニタ108は、OSから独立したものとなる(すなわち、モニタ108は、カーネル106の下で実行されるのではなく、カーネル106と共に実行される)。
モニタ108は、好ましくは、カーネル106が使用しないメモリ位置にロードされて、カーネル106が、意図しない改変をモニタ108に行うことを回避する。
カーネル106にエラーが発生すると、モニタ108は、そのエラーの分析を試み、かつ、その問題を、FRU(フィールド交換可能ユニット(field replaceable unit))、または、違反の可能性のあるFRU(potential offending FRU)のリストへ分離することを試みる。
この意味で、本発明の診断実行装置は、通常はオフライン診断ツールに関連した木目の細かさを有するエラー分離を提供する。
モニタロジック110は、アーキテクチャ(例えば、PARISC(商標)、Itanium(商標)等)に依存する。
コンピュータハードウェア102の特定のアーキテクチャおよびボックス(box)のタイプ(これらに関する情報はリンク116を介して取得できる)に応じて、適切なモニタライブラリ112がロードされる。
このように、一実施の形態では、モニタライブラリ112は、特定アーキテクチャ向けおよび特定ボックス向けの双方のものである。
本明細書で後に説明するように、診断モニタ108の主要な機能の1つは、トラップハンドラを制御することである。
カーネル106が遭遇するどのトラップも、モニタ108によって検査される。
モニタ108は、そのトラップを自身でハンドリングするのか、またはそのトラップをカーネルに渡してハンドリングさせるのかを決定することになる。
このような場合、制御は、カーネルのトラップテーブルにおける、トラップをハンドリングするのに適切なオフセットに渡る。
このように、カーネルが関与している限り、カーネル自身のトラップテーブルは、カーネルがハンドリングする必要があるトラップをトランスペアレントな形式で得る。
それ以外のトラップは、モニタトラップテーブル114によって保持され、ハンドリングされる。
例えば、CPUアプリケーション130は、CPUの試験に重点を置くように設計され、メモリアプリケーション132は、メモリの試験に重点を置くように設計され、I/Oアプリケーション134は、I/Oサブシステムの試験に重点を置くように設計される。
コンピュータハードウェア102の他のサブシステムおよび/もしくは他の態様ならびに/またはOSを試験するために、他のアプリケーションが提供されてもよい。
これらの他のアプリケーションは、図1では、アプリケーション136によって総括して表されている。
図から分かるように、モニタロジック110は、コアモニタコード214に加えて、アーキテクチャルーチン210およびルールエンジン212を含む。
アーキテクチャルーチン210およびルールエンジン212は、説明を容易にするために、図2では、モニタロジック110とは別に示しているが、実際は、モニタロジック110の一部となっている。
アーキテクチャルーチン210は、所与のアーキテクチャレベルに基づいて標準的なタスクを実行できるルーチンを表す。
例えば、すべての汎用レジスタの内容を保存することが必要となる場合がある。
これは、アーキテクチャルーチンによって行われることになる。
汎用レジスタのサイズおよび個数は、検討対象の特定のアーキテクチャに依存する(例えば、PARISC 2.0は64ビット幅のレジスタを有し、一方、PARISC 1.0は32ビット幅のレジスタを有する)。
一実施の形態では、コアモニタは、アーキテクチャに依存するが、さまざまなモニタライブラリが、さまざまなボックスを収容するように提供され、それによって、所与のアーキテクチャに関するすべてのボックスに対してコアモニタを使用することが可能になる。
したがって、カーネル106(図1参照)によるあらゆるトラップ/インターラプトは、予期されるか否かを問わず、カーネル106を診断モニタ108に強制的に移行させることになる。
この機能により、診断モニタ108は、あらゆるエラートラップに直ちに気付くことが可能になり、その時点で、診断モニタ108は、他のすべてのプロセッサを停止でき、あらゆる状態情報を収集することができる。
エラーでないトラップの場合、例えば、診断モニタ108は、一定の統計値(もし必要ならば)を収集でき、次いで、トラップの基本的な機能を続行して、最終的にはカーネルに戻ることができる。
それ以外の場合には、カーネルは、自身のデフォルトトラップハンドラを使用することができる。
例えば、深刻なハードウェアエラー、重大なソフトウェアエラー、およびハードウェアリセットの場合、ハードウェアは、ファームウェアルーチンに自動的に分岐することができる。
PARISC(商標)マシンに関して、例えば、HPMC(高優先度マシンチェック(High Priority Machine Check))、LPMC(低優先度マシンチェック(Low Priority Machine Check))およびTOC(制御の転送(Transfer of Controls))が、ハードウェアをファームウェアルーチンに自動的に分岐させることができる。
次に、このファームウェアは、プロセッサのレジスタの状態を保存して、あらゆるエラー状況をクリアすることができる。
診断モニタ108の適切なトラップハンドラルーチンが、適切にセットアップされている場合には、ファームウェアルーチンは、診断モニタ108のハンドラに分岐することができる。
この時点で、診断モニタ108は、次の分析を開始することができる。
ルールエンジン212は、ルール220(後述)を解釈するために使用され、エラー分析にどのルールが使用されるか、また、エラー分析はいつ完了したか等の機能を含むこともできる。
所与のアーキテクチャの「ボックス」のタイプごとに1つのライブラリが存在してもよい。
このライブラリは、何が故障しているのかを解明するために、収集データを分析できるルール機能を(特に)含むことができる。
それらのルールへのインターフェースは、さまざまなアーキテクチャ間で同じにすることができる。
ルール220は、検討対象のアーキテクチャに特有のルールを表し、エラー分析に使用される。
ルール220は、さまざまなエラー状況の推論を有し、エラーを、障害のあるFRUに変換することができる。
特定ハードウェア向けルーチン222は、特定のボックスに特有のルーチンを含み、例えば、必要なあらゆる情報をその特定のボックスから収集することを容易にする。
図3は、初期化時のロードシーケンスを、本発明の一実施の形態に従って示している。
ブロック302において、ローダは、診断モニタ(診断モニタ108の2値画像等)がブートデバイス上に存在するかどうかを確認する。
ブートデバイスとしては、例えば、ハードディスク、CDROM、さらにはネットワークにおける特定の記憶位置がある。
診断モニタがブートデバイス上に存在しない場合には、ローダは、ブロック304において、カーネル(カーネル106等)がブートデバイス上に存在するかどうかを確認する。
カーネルがブートデバイス上に存在しない場合には、ロードプロセスは、ブロック306において、失敗したことを表示する。
この場合、モニタは存在せず(先のブロック302で判断)、したがって、ブロック310において、カーネルは、診断モニタが存在しないことを確認する。
この診断モニタの存在のチェックは、製品OSに対して行われた変更の一部であることに留意されたい。
カーネルは、診断モニタが存在しない状態では、管理するカーネルのトラップテーブルを用いて通常どおり実行される。
その後、ブロック332において、モニタロジック110は、初期化され、例えば、関連するアーキテクチャルーチン(図2のアーキテクチャルーチン210等)を使用して試験されるハードウェアのボックス情報を確認する。
次いで、このボックス情報は、ローダに渡され、それによって、ローダは、ブロック334において、必要なモニタライブラリがブートデバイスまたは別のデバイスに存在するかどうかを確認することができる。
必要なモニタライブラリが存在しない場合には、モニタをロードするプロセスは、失敗に終わる。
その場合、この方法は、ブロック304に戻って、カーネルのロードを開始する。
すなわち、その時点からの状況は、あたかもモニタがブートデバイス上に存在しなかったように取り扱われる。
必要なモニタライブラリがロードされ、(例えば動的リンク技術を使用して)モニタロジック110との通信に同期した後、制御はローダに戻される。
次いで、ローダは、ブロック338において、カーネルがブートデバイス上に存在するかどうかを確認する。
これは、製品OSの下で実行される既存の診断ツールによる状況と異なる。
既存の診断ツールが製品OSの下で実行される場合には、OSがロードされないと、診断ツールは、初期化されていないことになり、したがって、そのエラーの検出、分析、および/または報告が意味のないものになる。
他方、カーネルが発見されると、カーネルシンボルテーブルが、ブロック340においてロードされる。
一般的に言うと、このシンボルテーブルは、カーネルの重要な要素(データ構造体やサブルーチン等)のアドレスを提供する。
診断モニタは、カーネルシンボルテーブルに依拠し、カーネルシンボルテーブルは、カーネルバイナリの非ストリップ版(non-stripped version)に内蔵される。
したがって、一実施の形態では、ローダは、カーネルELFバイナリからそのシンボルテーブルを取得して、メモリに当前記シンボルテーブルをロードする。
カーネルは、メモリの固定アドレスにロードされることが好ましい。
ブロック310において、カーネルは、モニタが存在するかどうかを確認する。
一実施の形態では、モニタの存在に関する情報が、ローダからカーネルに渡される。
理由で何であろうとも、診断モニタが存在しないとみなされる場合には(ブロック310で確認)、カーネルは、自身の管理するトラップテーブルを用いて、ブロック312において通常どおり実行される。
他方、診断モニタが存在すると(ブロック310で確認)、カーネルは、任意選択で、(ブロック314において)診断モニタを呼び出すことができ、例えば、どのトラップが診断モニタのトラップテーブルによってハンドリングされ、どのトラップがカーネルのトラップテーブルによってハンドリングされるかを確認することができる。
もちろん、どのトラップがカーネルによってハンドリングされ、どのトラップが診断モニタによってハンドリングされるかに関する決定は、事前に行われ、ハードコード化することができる。
このような場合、任意選択のステップ314は省略することができる。
トラップは、通常のオペレーションの結果である場合もあるし、問題を表す場合もあるので、診断モニタは、トラップを検査して、トラップをどのようにハンドリングするかに関して、一定の決定を行う必要がある。
ブロック402において、診断モニタは、トラップがカーネルによってハンドリングされるべきか、それとも診断モニタ自身によってハンドリングされるべきかを確認する。
一実施の形態では、この決定は、変数の特定の位置のビットを検査するビットマスク技法を使用して行われる。
他の技法も使用することができ、この技法には、配列を使用するものが含まれる。
その場合、この方法はブロック404に進む。
ブロック404において、(例えば図3のブロック340において)先にロードされたシンボルテーブル、および/または、(例えばブロック314において)カーネルによる診断初期化呼び出し中に取得された情報を使用して、この方法は、適切なOSトラップテーブルのオフセットに分岐する。
これらのレジスタの値を一時的に記憶させて復帰させることをカーネルに強制的に行わせることができるが、それは、製品カーネルに対する一定の変更の追加を必要とすることがある。
例えば、IPF(商標)の実施態様の場合、この分岐テーブルは、最初に、すべての分岐がその分岐自身にジャンプするようにセットアップされる。
初期化中、モニタは、ロング分岐命令のアドレスを動的に計算することができ、分岐テーブルのすべての分岐を、カーネルトラップテーブルの適切なオフセットへ分岐するように変更することができる。
これが可能な理由は、カーネルトラップテーブルが固定アドレスに存在するからである。
この長いオフセットは、通常の相対分岐を使用して通常実行されるものよりも通常長いものである。
ロング分岐を使用することにより、メモリの任意の所望の位置にモニタを配置することができ、それでも、モニタは、カーネルトラップハンドラに到達することができる。
ロング分岐を使用しない場合には、モニタは、メモリにおいて、カーネルのトラップハンドラの近くに存在しなければならないことになる。
さらに、モニタのロング分岐テーブルにより、モニタは、カーネルによって利用される分岐レジスタの使用を回避することができる。
したがって、分岐レジスタの内容を把握するには、カーネルの変更がさらに必要となるが、把握する必要はない。
分岐レジスタを必要としない実施態様、例えばPARISC(商標)の場合、汎用レジスタを代わりに使用することができる。
例として、呼び出しの監視に使用されるブレークトラップ命令に関連した即値が指定され、それによって、診断モニタは、トラップがカーネルによる明示的なモニタ呼び出しであるかどうかを確認することが可能になる。
トラップが明示的なモニタ呼び出しである場合、そのトラップは、ブロック440においてハンドリングされる。
ブロック440については、以下で図6と共に説明する。
一例として、カーネルブートの失敗は、深刻なエラーである。
IPF(商標)では、例えば、マシンチェックアボート(MCA(Machine Check Abort))の状況の発生は、通常、深刻なエラーとみなされる。
PARISC(商標)では、例えば、高優先度マシンチェック(HPMC)状況の発生は、通常、深刻なエラーとみなされる。
例えば、エラーが深刻なものである場合に、プロセッサの所与のハードウェアレジスタの1ビットがセットされることがある。
診断モニタがコンピュータハードウェアに直接アクセスできることによって、ブロック408の決定が容易になる。
一般的に言うと、エラーの詳細は、ルールを使用して確認することができる。
例えば、或るプロセッサが深刻なエラー(例えばPARISC(商標)の場合のHPMC)を受ける可能性があるが、コンピュータシステムの他のプロセッサは、同じ深刻なエラーを受けないことがある。
外部インターラプト信号によってそれらのプロセッサをフリーズさせることにより、それらのプロセッサの状態をブロック412において収集して、ブロック414における分析を容易にすることができる。
もちろん、システムに1つのプロセッサしか存在しない場合には、存在しない他のプロセッサにインターラプト信号を送出する必要はなく、この場合には、ブロック410は必要ない。
特定ハードウェア向けルーチンは、プロセッサのさまざまなレジスタ、I/Oレジスタ、カーネルの一定のデータ構造体等を検査して、エラーおよび/またはエラーの原因を確認することができる。
その分析結果は、ブロック416において表示される。
一実施の形態では、その結果は、OSのシェルとは別のモニタシェルに表示することができる。
モニタシェルは、一定の診断に関連した入力および出力を可能にし、OSがクラッシュした場合であっても動作し続けることができる。
例えば、モニタシェルを使用して、一定のカーネルデータ構造体およびルーチンを指定することができ、検査用にそれらを表示するように指定できる。
このことは、図4のブロック418に表されている。
ブロック432において、ライブラリのルールおよび特定ハードウェア向けルーチンを使用して分析が実行され、エラーが、1つまたは2つ以上のFRU(フィールド交換可能ユニット)に絞り込まれる。
例えば、単一のビットエラーが発生した場合、ブロック432は、そのエラーを、単一のDIMMおよび/または単一のメモリスロットに絞り込むように試みることができる。
これは、標準的なOSを使用する従来技術の状況とは著しく異なる。
従来技術の状況では、経験豊富なユーザまたはエキスパートが、カーネルによってダンプされたデータを手動で分析しなければならないことになる。
それによって、モニタは、エラー検出タスクおよびエラー分析タスクを正確に実行するために必要なあらゆる情報を確実に取得することできる。
これと異なり、カーネルによってダンプされたデータは、場合によっては、エラー分析に必要なすべてのデータを含まないことがある。
アプリケーションプログラムは、後の時点でモニタ呼び出しを使用して、ログに記録されたエラーを(例えばさらに分析または表示を行うために)取り出すことができる。
ブロック436では、この方法は、エラーが深刻なものでないことから、次の命令に続き、呼び出し側に戻って実行の継続を可能にすることが好ましい。
例えば、カーネルは、リソース(例えばメモリ)の外部で実行されたり、解決できない問題(例えば解決不能なページフォルト)に直面したりする或る違法な状況に遭遇していることがある。
この場合、カーネルは、パニック呼び出しを行っていることがある。
このパニック呼び出しは、非製品カーネルによってモニタ呼び出しに変換され、それによって、診断モニタが関与することが可能になる。
一方、カーネルパニックに関係したモニタ呼び出しは、そのモニタ呼び出しを、カーネルパニックの結果により発生したものと特定する情報を含む。
パニックに関係したモニタ呼び出しが受け取られると、このモニタ呼び出しは、図5のブロック502〜510においてハンドリングされる。
この場合、モニタ呼び出しは、ハードウェアによってもたらされたものでもないし、カーネルパニックによって引き起こされたものでもない。
そうではなく、アプリケーションが、エラーの報告、または、例えばエラーについて問い合わせを行うために、モニタ呼び出しを行っている。
したがって、ブロック602において、診断モニタは、このモニタ呼び出しが、単なる通常のモニタ呼び出しか、または、モニタエラー呼び出しかを判断する。
すなわち、モニタエラー呼び出しでは、アプリケーションは、エラーが存在することをすでに判断していることになる。
エラーモニタ呼び出しは、例えば、ECC(エラー訂正コード(Error Correcting Code))回路装置に不具合があるとアプリケーションが判断した場合に行うことができる。
モニタ呼び出しがエラーモニタ呼び出しである場合、この方法は、ブロック604に進む。
ブロック604は図7に続き、この図7において、エラーモニタ呼び出しがハンドリングされる。
図7については、本明細書の後の部分に説明する。
ブロック606において、診断モニタは、受け取った非エラーモニタ呼び出しの性質を確認する。
一実施の形態では、この確認は、テーブルの呼び出しインデックスを調べることにより行われる。
アプリケーションによって行われるこのような非エラーモニタ呼び出しの例には、システムのプロセッサ数を求める呼び出しや、訂正可能なエラーが発生したかどうかを判断する呼び出しが含まれることがある。
図7では、エラーモニタ呼び出しが受け取られる。
このエラーモニタ呼び出しは、図4によってハンドリングされるハードウェア生成トラップとは異なる。
この場合、アプリケーションは、ハードウェアによるエラーが存在すると判断しており、診断モニタは、データ収集およびエラー分析の実行に移って、報告されたエラーモニタ呼び出しを確認する。
したがって、ブロック702において、診断モニタは、受信したエラーモニタ呼び出しを、アプリケーションによって提供されたあらゆるデータと共にログに記録する。
ブロック703において、エラーモニタ呼び出しは、例えばルールベースの分析を使用して分析される。
ブロック704において、診断モニタは、エラーモニタ呼び出しが深刻なエラーに関係するものかどうかを確認する。
HPMC(PARISC(商標))またはMCA(IPF(商標))は、明示的なタイプのトラップを引き起こす深刻なエラーの例を表す。
深刻であるが、トラップを引き起こさないタイプのエラーの例としては、例えば、セマフォのタイムアウトがある。
セマフォのタイムアウトでは、或るプロセッサが、或る一定の閾値よりも長い時間の間、セマフォを捕らえており、この状況は、ハングが差し迫っていることを示す。
この場合、例えば、セマフォはタイムアウトすることができ、その結果、モニタへの呼び出しが行われる。
したがって、この方法は、ブロック708に進み、ブロック708において、深刻なエラーモニタ呼び出しが、図5と共に先に説明した方法でハンドリングされる。
非製品カーネルを使用することにより、製品OSによって課される制限は、効果的に除去され、それによって、本発明の診断実行装置は、コンピュータハードウェアへより直接的にアクセスすることが可能になり、製品カーネルの場合に当前記製品カーネルから取得できなかった情報を有することが可能になる。
コンピュータハードウェアとカーネルデータ構造体とサブルーチンとにアクセスすることが強化されたことにより、本発明の診断実行装置のエラー検出能力およびエラー分析能力は向上する。
診断モニタが、非製品カーネルのロード前にロードされるので、たとえカーネルがロード中に障害を受けても、診断が可能である。
以下に説明する例では、Linuxオペレーティングシステムに基づく診断実行装置の例示の実施態様を説明する。
この付録Aの例示の実施態様は、本発明の一実施態様にすぎず、この特定の実施態様のために提案された設計選択、仮定、および限定はすべて、本発明を限定するものと包括的に解釈されるべきでないことに留意すべきである。
明らかに、本発明の限定は、本明細書の特許請求の範囲によって規定される。
[機能/特徴]
RAGEは、LINUXに基づくオフライン実行装置である。
RAGEは、個々のエグゼキュータブル(executable)がRAGEを監視できるような装備を有するように設計される。
RAGEの下で実行されるアプリケーションは、ハードウェアにストレスを加えるように設計されると共に、いくつかの診断能力を実行するように設計される。
RAGEMONは、RAGEを監視するように設計されたエグゼキュータブルである。
RAGEおよびこのモニタの双方は、ローダELILOによってメモリにロードされる。
ローダELILOは、標準的なLINUXローダの変更版である。
より多くのストレスパターンを生成することにより、一時的エラーをより良く取り込むこと。
ハードウェアエラー(すなわちMCA)を検出して、そのエラーから復旧する能力を有すること。
ハードウェアエラーをFRUまたは少なくともFRUの小さなリストに分離する能力を有すること。
特定の対象ハードウェア向けの「ポイントツーポイント」試験を追加する能力。
プラットフォームの移植性。
どのストレス試験スイートが実行されるべきか、および、どの対象で実行されるべきかを指定する能力。
小さな初期フットプリント(footprint)を有する高速ロード。
モニタは、カーネルがクラッシュしても依然として活動する。
一般に、RAGEは、依存するものとして以下のものを有する。
EFIルーチンサービス。
PALおよびSALのファームウェア呼び出し。
適切なコンパイラ。
LINUXカーネルは、Orcaをサポートする(ブート、実行などを行うことができる)ものと仮定する。
[設計の背景状況]
まず、RAGEは、ODEベースの診断機能を実行した後、オフライン環境で使用することができる。
RAGEは、調整された後、最終的に、コアとなる1組のODEベースの試験だけを残して、標準的なオフライン診断機能の多くと取って代わることができる。
この小さなコアとなる1組の試験は、キャッシュパターン試験およびTLBの機能用に、主としてCPUを中心に取り扱う。
次いで、RAGEは、システムの残りの部分にストレス試験を行うように起動することができる。
最終的な所望のシナリオは、1)コアODE試験、2)RAGE試験である。
図A1の図は、RAGE実行装置のプラットフォームを構成する基本モジュールを示している。
カーネルおよびモニタは、同じレベルにあることに留意されたい。
RAGEモニタは、カーネルの下で実行されるのではなく、カーネルと共に実行される。
RAGEアプリケーションは、予想されるように、カーネルの下で実行される。
そして、RAGEアプリケーションは、実際に、ハードウェアにストレスを加えることを実行する。
これらのアプリケーションは、ODEプラットフォームの下におけるODE診断機能と類似している。
以下のシナリオは、主要なRAGEモジュールのさらに詳細な説明を与える。
ローダの基本的な機能は、図A2の図に示されている。
カーネルローダがロードする最初のモジュールは、モニタである。
モニタは、ロードされると、或る初期化(図A2の符号1)を行い、次いで、自身がどのハードウェア上で実行されているかを判断する。
その情報に基づいて、モニタは、どのライブラリをロードするかをローダに通知する。
モニタは、それ自体、アーキテクチャにのみ特有のものである。
ライブラリは、我々が実行している特定のタイプのボックスに特別なルーチンの集まりとしてみなされるべきである。
適切なライブラリがロードされると、そのライブラリは、モニタを用いて初期化を行う(図A2の符号2)。
ローダは、モニタのトラップハンドラのアドレスをカーネルに渡す。
モニタがブートデバイス上に存在しない場合には、ローダは、RAGEモニタのトラップハンドラのアドレスとしてゼロを渡す。
このようにして、カーネルは、自身の内部トラップハンドラを使用するのか、それともモニタのトラップハンドラを使用するのかを知ることになる。
モニタのトラップハンドラのアドレスがゼロでない場合、カーネルは、モニタが存在すると仮定する(図A2の符号3参照)。
RAGEMONのジョブは、エラー発生時に、カーネルのどこに障害が発生したかを決定すること、および、交換を行うために、その問題をFRU(または少なくともFRUの順序リスト)へ分離することを試みることである。
これを行うために、RAGEMONは、カーネルが提供した情報を有する。
例えば、RAGEMONは、プロセスに利用可能となるメモリではなく、メモリのどの範囲がカーネルによって実際に占有されているかを知りたい。
RAGEMON(利用可能ならば)は、カーネルが実行されている間存在し、カーネルがブート中の際にも存在する。
カーネルは、常に(所定の)固定アドレスにロードされる。
アーキテクチャルーチンは、所与のアーキテクチャレベルに基づく標準的なタスクを実行するルーチンである。
例えば、すべての汎用レジスタの内容を保存する必要がある。
この保存は、アーキテクチャルーチンによって行われる。
汎用レジスタのサイズおよび個数は、使用されている特定のアーキテクチャに依存する(例えばPARISC 2.0は64ビット幅のレジスタを有する一方、PARISC 1.0は32ビット幅のレジスタを有する)。
モニタ自身も、アーキテクチャに依存することに留意されたい。
したがって、PARISC 2.0マシン用のモニタは、IA−64マシン用のモニタとは異なる。
したがって、カーネルによるあらゆるトラップ/インターラプトは、予期されるか否かを問わず、カーネルをモニタに強制的に移行させることになる。
この特徴により、モニタは、あらゆるエラートラップに直ちに気付くことが可能になる。
その時点で、モニタは、他のすべてプロセッサを停止でき、あらゆる状態情報を収集することができる。
エラーでないトラップの場合、モニタは、一定の統計値(もし必要ならば)を収集でき、次いで、トラップの基本的な機能を続行して、最終的にはカーネルに戻ることができる。
モニタは、カーネルシンボルテーブルからカーネルのトラップハンドラの位置を知る。
その結果、モニタは、カーネルトラップテーブルの適切なオフセットに分岐することができる。
そうでない場合には、カーネルは、自身のデフォルトトラップハンドラを使用する。
一定のエラートラップは、特別な方法で処理する必要がある。
MCAおよびCMCの場合、ハードウェアは、ファームウェアルーチンに自動的に分岐する。
次いで、このファームウェアは、プロセッサのレジスタの状態を保存して、あらゆるエラー状況をクリアする。
モニタの適切なトラップハンドラルーチンが、適切にセットアップされており、かつ、ファームウェアが、そのエラーを、再ブートが必要となるほど深刻であるとみなさない場合、ファームウェアルーチンは、モニタのハンドラに分岐する。
この時点で、モニタは、次の分析を開始することができる。
所与のアーキテクチャの「ボックス」のタイプごとに1つのライブラリが存在する。
このライブラリは、障害が発生したものを解明するために、収集データを分析するルール機能を(特に)含む。
それらのルールへのインターフェースは、アーキテクチャを問わず同じである。
このシェルの第1の目的は、モニタの分析をユーザに表示すること、および、ユーザが一定の状態情報を観察することを可能にすることである。
したがって、このモニタのシェルは、カーネルのシェルに見られる特徴の多くを伴わない非常に簡単なものである。
初心者のユーザは、モニタのFRUまたはFRUのリストに簡単に目を通し、したがって、モニタシェルと何ら対話することなく行動することが予想される。
しかし、エキスパートのユーザは、障害の状態についてより詳細な情報、および、場合によってはモニタの決定プロセスを観察したいことがある。
アプリケーションが診断時により良く機能できるように、カーネルを第1に変更しなければならない。しかしながら、目標は、この変更をできるだけ最小にすることである。以下のリストは、変更する必要のあるカーネルの領域を示している。
初期化(ドライバ用)
モニタインターフェース変更(以下のカーネルインターフェースの節を参照)
新しい診断能力
プロセス親和性(まだ存在しない場合)
物理的なメモリ割り当て
この文書で検討されるインターフェースのグループとして、以下の2つのグループが存在する。
内部モニタインターフェース
カーネル/アプリケーションインターフェース
カーネルからモニタ(RAGEMON)へのアクセスを可能にする方法として、以下の4つの基本的な方法がある。
2)カーネルパニック
3)明示的なモニタ呼び出し
4)明示的なモニタエラー呼び出し
カーネルの実行中、カーネルは、さまざまな時点で、トラップ、フォルト、インターラプト、またはチェックに遭遇することがある。
これらの状況のすべてが、エラー状況を示しているとは限らない。
しかしながら、このようないずれの状況も、カーネルをモニタに移行させることになる。
これは、カーネルのトラップハンドラが、モニタのハンドラを指し示しているからである。
これにより、モニタは、これらの重要なトラップ状況のいずれも取り込むことが保証される。
複数のプロセッサの場合、モニタは、プロセッサごとに個別のハンドラを提供しなければならないか、または、プロセッサがモニタコードのいずれの重要な部分も上書きしないようにするセマフォを使用しなければならない。
いずれにしても、モニタは、プロセッサがいくつ存在するかを知らなければならない。
これらのエラーでないトラップの1つが発生すると、モニタは、カーネルのレジスタの状態を変更しないように、適切なルーチンに分岐する。
カーネルパニックは、一般に、カーネルが或る違法な状況に遭遇した時、または、カーネルが或る問題(例えば解決できないページフォルト)を解決できない時に発生する。
カーネルパニックは、ソフトウェアエラーまたはハードウェアエラーが原因で発生し得る。
モニタは、カーネルパニックの区別を行うことができるように、カーネルパニックが発生した時点を知る必要がある。
カーネルのすべての「パニック」呼び出しは、ブレーク命令の変形(例えばブレーク2)を使用して実施される。
このブレーク命令の変形は、カーネルをモニタに強制的に移行させ、そこで、モニタは、そのパニックに適切な動作を決定することができる。
初期化中、カーネルは、情報をモニタに渡す必要があり、場合によってはモニタから情報を得る必要がある。
このタイプのカーネル/モニタ通信は、エラーとは無関係である。
これらのタイプの呼び出しの場合、モニタは、エラー状況を判断する必要もないし、カーネルをフリーズさせるように試みる必要もない。
あらゆるトラップ状況に対して、モニタに移行するので、標準的なモニタ呼び出しに対する別のブレーク命令の変形(例えばブレーク3)を使用することができる。
アプリケーションが、ハードウェアエラー状況を直接検出する場合がある。
そのアプリケーションは、システム呼び出しを使用して、カーネルに通知することができる。
次に、カーネルは、モニタエラー呼び出しを介してモニタに知らせることができる。
標準的なモニタ呼び出しと異なり、このエラー呼び出しは、モニタがカーネルをフリーズさせ、エラー情報を収集し、かつ、障害分析を開始すべきであることを示す。
この場合も、モニタに対する一貫性のあるインターフェースを維持するには、ブレークの変形(例えばブレーク3)を使用するのが便利である。
アプリケーションがこれらの呼び出しを直接起動できるようにすることは、さらに良いことであり、その結果、モニタは、エラーについての「新鮮な」情報を収集することができる。
ブレーク命令によって、モニタは、レジスタの状態について、エラーイベントの間近な「スナップショット」を有することが可能になる。
ブレーク命令は、即値フィールドを取ることに留意されたい。
このフィールドは、異なるタイプのモニタ呼び出しを区別するために使用される。
モニタは、エラー状況の通知を受けると、カーネルを「フリーズ」させる必要がある。
「フリーズ」は、基本的には、すべてのカーネルプロセスの停止を意味する。
この特徴は、或るプロセスが別のプロセスを妨害した場合の障害分析に有益である。
妨害を受けたプロセスは、トラップを引き起こすことができる。
この場合、トラップを引き起こしたプロセスを妨害した側のプロセスについての情報を有することは有益である。
トラップ発生時において、妨害した側のプロセスについて得ることができる情報が多いほど、その情報はより有益になる。
これは、1つのCPUしか存在せず、したがって、1つのスレッドしか存在しないので、それ以外のプロセスは実行できないからである。
しかし、マルチプロセッサシステム(MPシステム)では、他のプロセッサを停止しなければならない。
これを行うために、モニタは、「制御の転送」(TOCまたはリセットコマンド)を発行して、すべてのプロセッサを強制的に既知の場所に移行させる。
TOCは、カーネルを有効に「フリーズ」させる。
MPシステムでは、トラップを発生したプロセッサが深刻な機能不良状態である場合において、トラップを発生していないプロセッサにモニタを切り換えることができるとき、フリーズ呼び出しは有益である。
次いで、ファームウェアは、PDモナークプロセッサ(PD Monarch processor)上のモニタに戻る前に、すべてのプロセッサに強制的に状態を収集させ、「待ち合わせ(rendezvous)」させる。
他のエラーについては、ファームウェアは介入せず、モニタは、特別な外部インターラプトそのものを(ライブラリルーチンを介して)発行して、他のプロセッサを「フリーズ」させなければならない。
モニタ/カーネルインターフェースと異なり、ライブラリとモニタとの間の通信は、プロシージャ呼び出しを通じて行われる。
そして、ライブラリおよびモニタは、個別に実行可能であるので、通信を行うには、両者の間に、或る種のスタブメカニズムが存在しなければならない。
ライブラリは、RAGEが異なるボックス上で実行される場合に変化し得る特定「ボックス」向けのモジュールであることを想起されたい。
したがって、モニタとライブラリとの間には、或る種の標準的なインターフェースが存在する必要がある。
これにより、モニタは、どのライブラリが存在するかを知る必要はない。
モニタがライブラリに対して行うことができる標準的な1組の呼び出しが存在する。
この1組の読み出しによって、モニタは、ライブラリがどの「ボックス」用に記述されているかを問わず、必要な情報を得ることが可能になる。
これらの関数は、いくつかの分野、すなわち初期化、エラー復旧、エラー収集、および障害分析の分野に分類することができる。
起動時、ローダ(Rageldr)は、最初にモニタをロードする。
次いで、適切なライブラリモジュールがロードされる。
ローダは、そのライブラリモジュールに、モニタの呼び出し側エントリポイントのアドレスを渡す。
ローダは、そのライブラリモジュールに制御を渡し、それにより、そのライブラリモジュールは、モニタを用いて初期化を行うことができる。
その初期化が完了すると、制御はローダに戻され、その結果、ローダはカーネルをロードすることができる。
呼び出しを表す標準的な1組のインデックス番号がある。
ライブラリは、所望の呼び出しのインデックスを指定するスタブを有する。
ライブラリおよびモニタのいずれが通信を開始した場合も、両者が互いに通信できるように、モニタは同様のスタブを有する。
ローダがまずライブラリをロードし、ライブラリに一時的に制御を渡すと、ライブラリは、その呼び出し側エントリポイントのアドレスをモニタへ渡す必要がある。
ローダは、モニタの呼び出し側エントリポイントをライブラリにすでに渡している。
したがって、ライブラリは、Mon_Init()関数(モニタ初期化()関数)を呼び出して、その呼び出し側エントリポイントをモニタに渡すことができる。
また、この呼び出しは、深刻なエラー用のデフォルトの「ファームウェア介入」方法を使用するのか、それとも「バックドア(back door)」方法を使用するのかもモニタに通知する。
この関数は、ライブラリがメモリに適切にロードされていることを保証するように設計される。
このチェックサムの結果はゼロになるべきである。
したがって、この関数の戻り値はゼロであるべきである。
この関数は、カーネルが検出したプロセッサの総数を返す。
カーネルがモニタを用いて初期化を行う前に、この関数が呼び出された場合、または、カーネルが初期化中に障害を起こした場合に、この関数は0を返す。
Mon_Grs(proc_id)関数(モニタ汎用レジスタ状態(プロセッサID)関数)は、指定されたプロセッサがモニタに最後に移行した時、または、(モニタがエラー状況を検知した場合の)エラー時における、その指定されたプロセッサの汎用レジスタの状態を返すものである。
この関数は、引数としてプロセッサIDを受け取る。
プロセッサがモニタにいつ移行しても、そのレジスタの状態は保存される。
「バックドア」ライブラリでは、モニタは、特別なLib_Grs(proc_id)ルーチン(ライブラリ汎用レジスタ状態(プロセッサID)ルーチン)に依拠して、この情報を得る。
この関数が起動されると、モニタは、NVRAMのあらゆる実行フラグをクリアする。
このライブラリ関数は、プロセッサが依然として実行できるように、トラップを「復旧」する。
HPMCおよびLPMCに対して、デフォルトの「ファームウェア介入」方法が使用される場合、この関数は何も行わない。
ライブラリが深刻とみなすトラップを除いたほとんどのトラップに対して、このルーチンは、有効に「ノーオペレーション(no-op)」になるが、このルーチンは、必要な保存および「クリーンアップ」を行う。
これを行うことは、ボックスごとに変化し得るので、このルーチンは、詳細をモニタから抽象化することを可能にする。
デフォルトの場合、HPMCおよびLPMC以外のどのエラーについても、この関数はTOCを起動する。
一定のエラー状況は、モニタが現在実行されているプロセッサを不安定にする場合がある。
このような場合、システムがマルチプロセッサシステムであると、モニタを、より安定したプロセッサに切り換えることが有利である。
Lib_Collct()関数(ライブラリ収集()関数)は、現在実行中のプロセッサ上でエラー状況が発生したものとモニタが判断すると、モニタによって呼び出されるものである。
このルーチンは、すべてのレジスタ情報と、モニタがデフォルトの場合には収集しないそれ以外の情報とを収集する。
デフォルトの場合、HPMCおよびLPMCに対して、この関数は、ファームウェア呼び出しを行い、一定のエラー情報を取得する。
Lib_FaultAnal()関数(ライブラリ障害分析()関数)は、障害分析に必要とされる中心となる関数である。
すべてのプロセスについて、すべての情報が収集されると、モニタは、この関数を呼び出す。
この関数は、障害のあるFRUを決定するためにモニタが処理するルールリストを指し示す。
この関数は、標準的なprintf呼び出しと同じパラメータのシグネチャを有する。
モニタがそのジョブを行うことができるようにするために、標準的なカーネルに対して、以下のようないくつかの変更を行わなければならない。
2)ハートビート機能
3)時限付きセマフォ
4)明示的なモニタ呼び出し
5)ドライバ変更
モニタが存在する場合には、ローダは、カーネルを起動すると、モニタのトラップハンドラのアドレスを渡す。
モニタが存在しない場合には、ゼロが渡される。このようにして、カーネルは、モニタが利用可能かどうかを知る。
Rageカーネルは、ブートの開始時に、モニタの存在を検出すると、モニタを用いて初期化を行う必要がある。
初期化には、以下のような、一定のカーネルの仕様をモニタに指定することが必要とされる。
ローダは、カーネルのロード時に、カーネルシンボルテーブルもロードする。
モニタが、カーネルのグローバルアドレスのすべてにアクセスできるように、このテーブルへのポインタがモニタに与えられる。
これにより、カーネルが立ち上がらない場合であっても、モニタは、カーネルを分析することができる。
カーネルは、自身でハンドリングしたいすべてのトラップをモニタに指定する。
モニタは、そのアドレスを保存し、その結果、トラップが発生した時、モニタは、予め割り当てられた適切なルーチンを呼び出す。
モニタは、フリーメモリのカーネルの先頭を知ると、一定のエラーが、時間データ構造体またはランタイムに作成されたデータ構造体をコンパイルするのに関係するかどうかを判断することができる。
フリーメモリの先頭に加えて、モニタが、一定のランタイム構造体(例えばページアロケータのマップ構造体)の位置を知ることは有益である場合がある。
モニタがプロセッサの個数を知る必要があることは明らかである。
これは、例えば、モニタがフリーズを行う場合に重要である。
モニタは、プロセッサのすべてがいつチェックインしたかを知る必要がある。
また、モニタは、最初にトラップを発生したプロセッサのハードウェアの問題を回避するためにプロセッサを切り換えたい場合がある。
モニタは、障害発生時に実行されているすべてのプロセスの状態を知りたい。
あらゆるプロセッサがプロセスを実行している可能性があるので、実行中のすべてのプロセッサを知っていなければならない。
モニタは、自身でプロセッサの個数を求めることができるが、これは、カーネルが行わなければならないので、その理由から、モニタのコードを複製する。
したがって、モニタは、この情報についてはカーネルに依頼することになる。
一定のエラー状況によって、カーネルは、或る種の無限ループから抜け出せなくなる可能性がある。
通常のオペレーティングシステムでは、この種のエラーを診断することは困難である。
理想的には、モニタがハング状況を検出できるように、カーネルは、モニタで周期的に「チェックイン」することが有益である。
モニタの「ハートビート」機能は、まさにこの状況のために設計される。
ハートビート機能を実施することは、マルチプロセッサシステムよりもユニプロセッサシステムの方が難しい。
プロセッサがタイマインターラプトを発生するごとに、モニタが呼び出される。
この時、モニタは、前回のインターラプトから経過したインターバルタイマのチック数をチェックすることができる。
例えば4つ以上のタイムスライスが経過していると、モニタは、これを、エラー状況の可能性があるとみなす(エラーとみなされるタイムスライスの正確な個数は、カーネルの挙動に基づいてヒューリスティックに求められることに留意されたい)。
モニタは、(ライブラリからのルールによって指定される)アドレスキューを調べて、カーネルが、前回のタイマインターラプトの期間中に実行されていたのと概ね同じ付近で実行されているかどうかを確かめる。
そうである場合、これにより、モニタは、システムをフリーズさせ、カーネルハングを表示する。
次いで、モニタは、このハングをさらに分析することを試みる(すなわち、どのルーチンがハングしているか等を調査する)。
したがって、遅かれ早かれ、或るプロセッサがモニタに移行することになる。
その時点で、モニタは、タイマインターラプトを発生したプロセッサに加えて、他のプロセッサもチェックすることができる。
すべてのプロセッサのインターバルタイマが同期している場合(これは、診断命令を介して行うことができる)、モニタは、他の或るプロセッサが、あまりに長い時間を要したことからモニタで「チェックイン」できなかったかどうかを判断することができる。
モニタの受動的な性質のために、ユニプロセッサシステムは、ハングしても、モニタによって検出されない可能性がある。
カーネルが陥る無限ループが、インターバルタイマインターラプトをオフにし、かつ、他のタイプのトラップがループ内で発生しない場合には、モニタは、呼び出されないことになる。
セマフォ機能は、カーネルがハングする可能性のある、インターラプトのない主要なコード例である。
ユニプロセッサシステムでは、モニタが決して呼び出されないので、このようなハングは特に深刻である。
この可能性を低減するには、カーネルのすべてのセマフォ機能を時限付きにすべきである。
換言すると、すべてのセマフォ機能は、一定の時間の間だけセマフォにアクセスを試みるべきである。
その時間が経過すると、セマフォ機能はモニタを呼び出すべきである。
カーネルは、明示的なモニタ呼び出しを使用してモニタを直接呼び出すことができる。
前述したように、カーネルは、初期化中、モニタを呼び出す。
しかしながら、カーネルが、或る情報をモニタに追跡記録してほしい多くの状況が存在し得る。
例えば、どのプロセッサが所与の時刻に特定のセマフォを得たかをモニタが知ることは有益である。
そのように、他の或るプロセッサがそのセマフォ上でタイムアウトすると、モニタは、どのプロセッサがそのセマフォを得ていたかを知る。
また、特定のアプリケーションがプロセッサによっていつ実行されているかをモニタが知ることも有益である。
そのプロセッサがモニタにトラップを発生した場合に、モニタは、分析を行うために、カーネルではなく、アプリケーションシンボルテーブルを使用することを知ることができる。
これらの明示的な呼び出しにより、カーネルは、モニタが障害分析に使用できる情報をモニタに渡すことが可能になる。
これは、強力な特徴である。
最も平凡なカーネルは、発生する性能を重視するために、このようには装備されていない。
しかしながら、RAGEカーネルは、性能重視を、デバッグを行うためにカーネルの活動を追跡記録する機能とトレードオフする。
ライブラリのルールは、この追跡記録を行う特徴を他の特徴と共に使用して障害分析を行う。
これらの他の特徴には、ELFフォーマットのシンボルテーブルを使用してルーチンの名前を探し出すこと、呼び出し時に慣習的に行われる特徴を使用すること等が含まれる。
この呼び出し時の慣習的に行われる特徴は、サブルーチン呼び出しが、常に、戻りアドレスを有するgr2を使用して行われるという特徴である。
より高速なカーネルブートを容易にするために、カーネルのドライバの多くを変更しなければならない場合がある。
多くのI/Oカードを有する大規模システムでは、すべてのI/Oデバイスの初期化を必要とすることから、カーネルのブートは長くなることがある。
これまでのカーネルは、ユーザがコンソールと対話できる前に、すべてのI/Oデバイスを確実に初期化する。
しかしながら、RAGEでは、I/Oの初期化が遅れても構わない。
コアの不可欠なものを除くすべてのドライバは、LINUXモジュールにすることができる。
したがって、それらの初期化が遅れても、ユーザは、コンソールにアクセスすることができ、初期化されていないI/Oを必要としないRAGEアプリケーションを起動することができる。
それらのモジュールが初期化されると、RAGEアプリケーションを起動して、それらのモジュールに関連したI/Oにストレスを加えることができる。
RAGE I/Oを詳細にすることは、第2のRAGE開発段階の一部である。
RAGE I/Oの検討が完了すると、関連した検討報告により、RAGE I/Oのより詳細な内容が与えられることになる。
モニタが介入することにより、カーネルの性能は或る程度低下するが、RAGEアプリケーションのストレスの影響を低減するほど大幅にカーネルを劣化させるべきではない。
エラー状況が発生し、エラー情報が収集されると、モニタは、障害分析を開始する必要がある。
これを行うために、モニタは、ルールベースのエキスパートシステムの方法論を使用する。
これらのルールは、ライブラリモジュールに配置される。概念的には、各ルールは、以下のように見える。
ルールは、ルール処理を高速にするように順序付けられる。
換言すると、先にトリガされる可能性の高いルールは、ルールリストの先頭に近い箇所に配置される。
障害分析を開始するために、ルールリストの各ルールは、順次、評価される。
ルールの「IF」部の条件は、実際には、関数ポインタである。
指し示される各関数は、0または非ゼロの値のいずれかを返す。
ゼロは、「FALSE(偽)」の条件を表す。
次いで、その関数が実行され、その結果がチェックされる。
関数の戻り値がゼロである場合、そのルールの条件はそれ以上評価されない。
この場合、そのルールは、NOT−TRIGGERED(トリガされない)と言われる。
さらに、条件のいずれかがゼロである(すなわち、その関数ポインタが「NULL(ヌル)」である)場合、その条件は、FASLEとみなされる。
モニタは、TRIGGEREDのルールに到達するまで、ルールリストの各ルールの評価を続ける。
ルールのいずれもがTRIGGEREDでない場合、モニタは、この状況を表示して停止する。
そうでない場合、モニタは、TRIGGEREDのルールによって指定された動作のそれぞれを実行することを試みる。
或るルールがTRGGEREDであると、モニタは、ルールリストのルールをそれ以上評価しない。
また、どのトリガルールも、再びTRIGGEREDとなることができないように無効にされる。
この特徴は、ルール処理を高速化するためのものである。
モニタは、TRRIGGEREDのルールの各動作の関数を呼び出す。
各動作関数は、最初のものから開始して、順次呼び出される。
動作関数のすべてが呼び出されると、モニタは、そのルールを無効にし、次いで、ルールリストの先頭から開始して、次のTRIGGEREDのルールを探す。
ルールがどのように見えるかの例についての上記データ構造の節を参照されたい。
この特徴により、モニタは、分析中、どのようにしてその結論に達したかを初心者のユーザに英語で表示することが可能になる。
カーネルは、ELF−64バイナリである。
したがって、カーネルには、そのシンボルテーブルがバイナリで内蔵されている。
ライブラリのルールは、この特徴を使用して、カーネル内のエラー発生箇所を決定することができる。
また、アプリケーションも、ELF−64フォーマットにコンパイルされる。
例えば、シンボルテーブルは、バイナリで含まれた関数の全開始アドレスを含むので、特定のプロセッサが障害を起こしたアドレスが判明すると、そのプロセッサがその時に実行していた関数をシンボルテーブルから決定することができる。
モニタは、スタックの巻き戻しを利用して、プロシージャを過去に遡ってトレースすることができる。
上記説明では、本発明の診断モニタが、非製品OSと共に動作するように構成される。
上述したように、製品OSは、通常、診断のためではなく、性能および/またはセキュリティならびにおそらく互換性のために最適化されている。
したがって、製品OSの下で動作する診断実行装置は、通常、そのデータ収集能力、エラー検出能力、およびエラー分析実行能力がきびしく制限される。
製品カーネルの下で特権プロセスまたはドライバとして実行される傾向のある従来技術の診断ルーチンと異なり、本発明の診断モニタは、カーネルがロードされる前であってもロードされるように構成されることが好ましい。
このように、本発明の診断モニタは、たとえカーネルをロードできない場合であってもエラー分析データを提供することができる。
したがって、カーネルをクラッシュさせたエラーを分析するためにカーネルをダンプするといった多くの時間を要するプロセスおよびカーネルダンプデータを整理するといった大きな労力を要するプロセスが回避される利点がある。
特に、製品OSに対する変更の労力および/または程度を最小にすることが望ましく、変更に必要とされる作業量と、製品OSの性能の特徴および/またはセキュリティの特徴への影響との双方を最小にすることが望ましい。
モニタは、明らかに、より多くのルーチンエラーをハンドリングできるが、性能のトレードオフを考慮する必要がある。
したがって、本明細書のさまざまな実施の形態において、深刻なカーネルエラー、すなわち、カーネルをハングまたはクラッシュさせることができるカーネルエラー、を伴う状況においてのみモニタが必要とされることを、発明者は本明細書において考えている。
これらの深刻なカーネルエラーには、例えば、深刻なハードウェアエラー、カーネルパニック、およびタイムアウトしたセマフォが含まれる。
この装置804は、ローダモジュール805を含む。
このローダモジュール805は、システム起動時に診断モニタ808の主要なコンポーネントをメモリにロードする役割を有する。
これらの主要なコンポーネントについては、以下に説明する。
この製品カーネル806は、現場で使用される製品OS(例えば、製品Windows(商標)、製品UNIX(商標)、または製品Linux OS)のカーネルを表す。
複数のドライバ807a、807b、807cが製品カーネル806と共に設けられる。
これらのドライバは、カーネル806と共に設けられたI/Oドライバのいくつかを表す。
一実施の形態では、モニタ808およびカーネル806は、個別のバイナリファイルとして提供される。
それによって、モニタ808は、OSから独立したものとされる(すなわち、モニタ808は、カーネル806の下で実行されるのではなく、カーネル806と共に実行される)。
モニタ808は、カーネル806が使用しないメモリ位置にロードされて、カーネル806が、意図しない改変をモニタ808に行うことを回避することが好ましい。
深刻なエラーが発生すると、モニタ808は、そのエラーの分析を試み、かつ、その問題を、FRU(フィールド交換可能ユニット)、または、違反の可能性のあるFRUのリストへ分離することを試みる。
この意味で、本発明の装置は、通常はオフライン診断ツールに関連した木目の細かさを有するエラー分離を提供する。
モニタロジック810は、アーキテクチャ(例えば、PARISC(商標)、Itanium(商標)等)に依存する。
コンピュータハードウェア802の特定のアーキテクチャおよびボックスのタイプ(これらに関する情報はリンク816を介して取得できる)に応じて、適切なモニタライブラリ812がロードされる。
このように、一実施の形態では、モニタライブラリ812は、特定アーキテクチャ向けおよび特定ボックス向けの双方のものである。
本明細書で後に説明するように、診断モニタ808の主要な機能の1つは、トラップハンドラを制御することである。
カーネル806が遭遇するどのトラップも、モニタ808によって検査される。
モニタ808は、そのトラップを自身でハンドリングするのか、それともそのトラップをカーネルに譲ってハンドリングさせるのかを決定することになる。
このような場合、制御は、カーネルのトラップテーブルにおける、トラップをハンドリングするのに適切なオフセットに渡る。
このように、カーネルが関与している限り、カーネル自身のトラップテーブルは、カーネルがハンドリングする必要があるトラップをトランスペアレントな形式で得る。
それ以外のトラップ、例えば深刻なエラーに関係したトラップは、モニタトラップテーブル814によって保持され、ハンドリングされる。
先に説明した診断アプリケーションとは異なり、これらのユーザアプリケーションは、コンピュータシステムの通常の使用過程でユーザによって実行されるアプリケーションを表す。
これらのユーザアプリケーションには、例えば、データベースアプリケーション、スプレッドシートプログラム、グラフィックスプログラム、ウェブ関連プログラムなどが含まれ得る。
図から分かるように、モニタロジック810は、コアモニタコード914に加えて、アーキテクチャルーチン910およびルールエンジン912を含む。
アーキテクチャルーチン910およびルールエンジン912は、説明を容易にするために、図9では、モニタロジック810とは別に示しているが、実際は、モニタロジック810の一部となっている。
アーキテクチャルーチン910は、所与のアーキテクチャレベルに基づいて標準的なタスクを実行できるルーチンを表す。
例えば、すべての汎用レジスタの内容を保存することが、必要となる場合がある。
これは、アーキテクチャルーチンによって行われることになる。
汎用レジスタのサイズおよび個数は、検討対象の特定のアーキテクチャに依存する(例えば、PARISC 1.1は32ビット幅のレジスタを有する一方、PARISC 2.0は64ビット幅のレジスタを有する)。
一実施の形態では、コアモニタは、アーキテクチャに依存するが、さまざまなモニタライブラリが、さまざまなボックスを収容するように提供され、それによって、所与のアーキテクチャに関するすべてのボックスに対してコアモニタを使用することが可能になる。
したがって、カーネル806(図8参照)によるあらゆるトラップ/インターラプトは、予期されるか否かを問わず、カーネル806を診断モニタ808に強制的に移行させることになる。
ルーチンのトラップおよびエラーは、カーネルのトラップテーブルに戻されてハンドリングされる一方、深刻なトラップ/エラーは、診断モニタ自体によってハンドリングされる。
例えば、深刻なハードウェアエラー、重大なソフトウェアエラー、およびハードウェアリセットの場合、ハードウェアは、ファームウェアルーチンに自動的に分岐することができる。
PARISC(商標)マシンに関しては、例えば、HPMC(高優先度マシンチェック)、LPMC(低優先度マシンチェック)およびTOC(制御の転送)が、ハードウェアをファームウェアルーチンに自動的に分岐させることができる。
次に、このファームウェアは、プロセッサのレジスタの状態を保存して、あらゆるエラー状況をクリアすることができる。
診断モニタ808の適切なトラップハンドラルーチンが、適切にセットアップされている場合には、ファームウェアルーチンは、診断モニタ808のハンドラに分岐することができる。
この時点で、診断モニタ808は、次の分析を開始することができる。
所与のアーキテクチャの「ボックス」のタイプごとに1つのライブラリが存在してもよい。
このライブラリは、故障した物を解明するために、収集データを分析できるルール機能を(特に)含むことができる。
それらのルールへのインターフェースは、さまざまなアーキテクチャ間で同じにすることができる。
ルール920は、検討対象のボックスおよびアーキテクチャに特有のルールを表し、エラー分析に使用される。
ルール920は、さまざまなエラー状況の推論を有し、エラーを、障害のあるFRUに変換することができる。
特定ハードウェア向けルーチン922は、特定のボックスに特有のルーチンを含み、例えば、必要なあらゆる情報をその特定のボックスから収集することを容易にする。
このシーケンスは、図3Aおよび図3Bで説明したものと類似してので、本明細書では、重複して繰り返さないことにする。
当業者には容易に分かるように、診断モニタが存在すると、その診断モニタを最初にロードできるように製品カーネルを変更する必要がある。
さらに、製品カーネルは、システム初期化時にトラップテーブルを自動的に制御しないことが好ましい。
一実施の形態では、この変更には、(カーネル自体のトラップテーブルのベースアドレスではなく)診断モニタのトラップテーブルのベースアドレスを、このようなデータを記憶するように指定されたレジスタに記憶することが含まれる。
トラップは、通常のオペレーションの結果である場合もあるし、問題を表す場合もあるので、診断モニタは、トラップを検査して、トラップをどのようにハンドリングするかに関して、一定の決定を行う必要がある。
ブロック1002において、診断モニタは、トラップがカーネルによってハンドリングされるべきか、それとも診断モニタ自身によってハンドリングされるべきかを確認する。
一実施の形態では、この決定は、変数の特定の位置のビットを検査するビットマスク技法を使用して行われる。
一方、製品OSの性能に対する影響を最小にするように最適化を行うことができる。
例として、コードが、モニタのトラップテーブルの適切なアドレスおよびオフセットに自動的に分岐できるように、モニタによってハンドリングされるトラップを列挙することができる。
これに代えてまたはこれに加えて、コードが、カーネルのトラップテーブルの適切なアドレスおよびオフセットに自動的に分岐できるように、カーネル自身のトラップテーブルによってハンドリングされるトラップを列挙することもできる。
その場合、この方法はブロック1004に進む。
ブロック1004において、(例えば図3のブロック340において)先にロードされたシンボルテーブル、および/もしくは、(例えばブロック314において)カーネルによる診断初期化呼び出し中に取得された情報を使用し、かつ/または、ハードコード化された分岐命令を介して、この方法は、適切なOSトラップテーブルのオフセットに分岐する。
これらのレジスタの値を一時的に記憶させて復帰させることをカーネルに強制的に行わせることができるが、それは、製品カーネルに対する一定の変更の追加を必要とすることがある。
例えば、IPF(商標)の実施態様の場合、この分岐テーブルは、最初に、すべての分岐がその分岐自体にジャンプするようにセットアップされる。
初期化中、モニタは、ロング分岐命令のアドレスを動的に計算することができ、分岐テーブルのすべての分岐を、カーネルトラップテーブルの適切なオフセットへ分岐するように変更することができる。
これが可能な理由は、カーネルトラップテーブルが固定アドレスに存在するからである。
この長いオフセットは、通常の相対分岐を使用して通常実行されるものよりも通常長いものである。
ロング分岐を使用することにより、メモリの任意の所望の位置にモニタを配置することができ、それでも、モニタは、カーネルトラップハンドラに到達することができる。
ロング分岐を使用しない場合には、モニタは、メモリにおいて、カーネルのトラップハンドラの近くに存在しなければならないことになる。
さらに、モニタのロング分岐テーブルにより、モニタは、カーネルによって利用される分岐レジスタの使用を回避することができる。
したがって、分岐レジスタの内容を把握するには、カーネルの変更がさらに必要となるが、必ずしも把握する必要はない。
分岐レジスタを必要としない実施態様、例えばPARISC(商標)の場合、汎用レジスタを代わりに使用することができる。
例として、呼び出しの監視に使用されるブレークトラップ命令に関連した即値が指定され、それによって、診断モニタは、トラップがカーネルによる明示的なモニタ呼び出しであるかどうかを確認することが可能になる。
この場合、明示的なモニタ呼び出しが、受け取られている。
アプリケーションは、モニタが或る機能(例えば、エラーログ閾値(error logging threshold)の設定または訂正可能エラー情報を返すこと)を実行するように要求中である。
次いで、モニタは、この機能を実行し、アプリケーションに戻る。
HPMC(PARISC(商標))またはMCA(IPF(商標))は、明示的なタイプのトラップを引き起こす深刻なエラーの例を表す。
深刻であるが、トラップを引き起こさないタイプのエラーの例としては、例えば、セマフォのタイムアウトがある。
セマフォのタイムアウトでは、或るプロセッサが、或る一定の閾値よりも長い時間の間、セマフォを捕らえており、この状況は、ハングが差し迫っていることを示す。
この場合、セマフォは、例えばタイムアウトすることができ、その結果、モニタへの呼び出しが行われる。
一般的に言うと、診断モニタは、カーネルパニックを取り扱うのと同じ方法で深刻なエラーモニタ呼び出しを取り扱う。
カーネルパニックをハンドリングするステップは、本出願の図11と共に説明する。
一例として、カーネルブートの失敗は、深刻なエラーである。
上述したように、深刻なハードウェアエラーは、診断モニタがハンドリングする深刻なエラーの1つの分類である。
IPF(商標)では、例えば、マシンチェックアボート(MCA)の状況の発生は、通常、深刻なエラーとみなされる。
PARISC(商標)では、例えば、高優先度マシンチェック(HPMC)状況の発生は、通常、深刻なエラーとみなされる。
一般的に言うと、各アーキテクチャは、深刻なエラーを表すそれ自身の方法を有する。
しかしながら、エラーの詳細は、ボックスのタイプが異なると変化し得る。
例えば、エラーが深刻なものである場合に、プロセッサの所与のハードウェアレジスタの1ビットがセットされることがある。
一般的に言うと、エラーの詳細は、ルールを使用して確認することができる。
例えば、或るプロセッサが深刻なエラー(例えばPARISC(商標)の場合のHPMC)を受ける可能性があるが、コンピュータシステムの他のプロセッサは、同じ深刻なエラーを受けないことがある。
外部インターラプト信号によってそれらのプロセッサをフリーズさせることにより、それらのプロセッサの状態をブロック1012において収集して、ブロック1014における分析を容易にすることができる。
もちろん、システムに1つのプロセッサしか存在しない場合には、存在しない他のプロセッサにインターラプト信号を送出する必要はなく、この場合には、ブロック1010は必要ない。
特定ハードウェア向けルーチンは、プロセッサのさまざまなレジスタ、I/Oレジスタ、カーネルの一定のデータ構造体等を検査して、エラーおよび/またはエラーの原因を確認することができ、そのエラーを1つまたは2つ以上のFRU(フィールド交換可能ユニット)に絞り込むことができることが好ましい。
例えば、分析は、特定のCPUが、不具合を有し、交換の必要があることを正確に示すことができる。
その分析結果は、ブロック1016において表示される。
一実施の形態では、その結果は、OSのシェルとは別のモニタシェルに表示することができる。
モニタシェルは、一定の診断に関連した入力および出力を可能にし、OSがクラッシュした場合であっても動作し続けることができる。
例えば、モニタシェルを使用して、一定のカーネルデータ構造体およびルーチンを指定することができ、検査用にそれらを表示するように指定できる。
このことは、図10のブロック1018に表されている。
これは、標準的なOSを使用する従来技術の状況とは著しく異なる。
従来技術の状況では、経験豊富なユーザまたはエキスパートが、カーネルによってダンプされたデータを手動で分析しなければならないことになる。
それによって、モニタは、エラー検出タスクおよびエラー分析タスクを正確に実行するために必要なあらゆる情報を確実に取得することができる。
例えば、一実施の形態では、カーネルのマップファイルは、グローバルなカーネル変数のアドレスおよびカーネル関数アドレスを含むことができ、これらのすべてが、モニタによってアクセス可能である。
これと異なり、カーネルによってダンプされたデータは、場合によっては、エラー分析に必要なすべてのデータを含まないことがある。
例えば、カーネルは、リソース(例えばメモリ)の外部で実行されたり、解決できない問題(例えば解決不能なページフォルト)に直面したりする或る違法な状況に遭遇していることがある。
この場合、カーネルは、パニック呼び出しを行っていることがある。
このパニック呼び出しは、変更された製品カーネルによってモニタ呼び出しに変換され、それによって、診断モニタが関与することが可能になる。
一方、カーネルパニックに関係したモニタ呼び出しは、そのモニタ呼び出しを、カーネルパニックの結果により発生したものと特定する情報を含む。
パニックに関係したモニタ呼び出しが受け取られると、このモニタ呼び出しは、図11のブロック1102〜1110においてハンドリングされる。
ブロック1102〜1110は、図10Bのブロック1010〜1018によって実行されるのと類似の形式でエラーハンドリングを実行する。
通常の実行の期間中は、説明される3つのケース(例えば、深刻なハードウェアエラー、カーネルパニック、タイムアウトしたセマフォ)のいずれも発生せず、したがって、システムの性能に対するモニタの影響は最小限に抑えられる。
したがって、この発明について、いくつかの好ましい実施の形態の観点から説明してきたが、この発明の範囲内に入る変更、並べ替え、および均等物が存在する。
また、本発明の方法および装置を実施する多くの代替的な方法が存在することにも留意すべきである。
したがって、添付した特許請求の範囲は、本発明の真の精神および範囲内に入るすべての変更、並べ替え、および均等物を含むものとして解釈されることが意図されている。
104・・・診断実行装置、
105・・・ローダ、
106・・・診断カーネル、
110・・・モニタロジック、
112・・・モニタライブラリ、
114・・・モニタトラップテーブル、
130・・・CPUアプリケーション、
132・・・メモリアプリケーション、
134・・・I/Oアプリケーション、
136・・・他のアプリケーション、
210・・・アーキテクチャルーチン、
212・・・ルールエンジン、
214・・・モニタコード、
220・・・ルール、
222・・・特定ハードウェア向けルーチン、
224・・・ライブラリコード、
802・・・コンピュータハードウェア、
805・・・ローダ、
806・・・製品カーネル、
810・・・モニタロジック、
812・・・モニタライブラリ、
814・・・モニタトラップテーブル、
830,832,834,836・・・ユーザアプリケーション、
910・・・アーキテクチャルーチン、
912・・・ルールエンジン、
914・・・モニタコード、
920・・・ルール、
922・・・特定ハードウェア向けルーチン、
924・・・ライブラリコード、
Claims (8)
- コンピュータシステム(802)が、カーネルトラップ処理を備えたOSカーネル(806)を有する製品オペレーティングシステム(OS)を使用してユーザアプリケーション(830)を実行する際に、前記コンピュータシステム(802)を監視するコンピュータ実施される方法であって、
前記コンピュータが前記OSカーネル(806)を実行できない場合であっても、診断モニタ(808)を実行することができるように、ローダにより、ブートデバイスから前記OSカーネル(806)が使用しないメモリ領域に、トラップを処理するトラップハンドラを保持するモニタトラップテーブル(814)を有する診断モニタ(808)をロードすることと、
前記ユーザアプリケーションの実行中にトラップが発生した(encounter)場合に、前記診断モニタが、前記発生したトラップを示すビット列に対してマスクをかけて、特定の位置のビットを取り出し、取り出したビットが第1の値であるとき、前記トラップが前記OSカーネル(806)によってハンドリングされることを決定し、前記取り出したビットが前記第1の値と異なる第2の値であるとき、前記トラップが前記診断モニタによってハンドリングされることを決定する(1002)ことと、
前記トラップが前記OSカーネルによってハンドリングされるべきである場合に、前記トラップを前記OSカーネルに渡して(1004)ハンドリングさせることと
を含む方法。 - 前記OSカーネル(806)は、前記ユーザアプリケーション(830)を実行するように構成された製品カーネルである
請求項1に記載のコンピュータ実施される方法。 - 前記OSカーネルのロード(308)の前に、前記診断モニタがロードされる(322)
請求項2に記載のコンピュータ実施される方法。 - 前記トラップが前記診断モニタ(808)によってハンドリングされるべきである場合に、前記トラップが前記OSカーネルによるモニタ呼び出しを表しているかどうかを、前記診断モニタを使用して確認する(1006)ことと、
前記トラップが前記OSカーネルによる前記モニタ呼び出しを表している場合に、前記診断モニタを使用し(1040)、前記モニタ呼び出しをハンドリングすることと
をさらに含む請求項1に記載のコンピュータ実施される方法。 - 前記トラップが前記モニタ呼び出しを表していない場合に、前記診断モニタを使用することであって、
a)前記コンピュータシステムの他のあらゆるプロセッサにフリーズ信号を送出する(1010)ことと、
b)状態信号を収集する(1012)ことと、
c)前記状態情報の分析を実行する(1014)ことと
を行うこと
をさらに含む請求項4に記載のコンピュータ実施される方法。 - 前記トラップが前記モニタ呼び出しを表していない場合に、前記診断モニタを使用することであって、
d)前記分析の結果をシェルに表示する(1016)ことと、
e)前記シェルからのユーザ入力がある場合には、前記ユーザ入力を受け取る(1018)ことと
を行うこと、
をさらに含む請求項5に記載のコンピュータ実施される方法。 - 前記OSカーネル(806)を使用して、パニック呼び出しをモニタ呼び出しに変換することと、
前記モニタ呼び出しが前記診断モニタ(808)によって受け取られると、前記モニタ呼び出しが、前記パニック呼び出しを表しているのかどうかを、前記診断モニタ(808)を使用して確認することと、
前記モニタ呼び出しが前記パニック呼び出しを表している場合に、前記診断モニタを使用することであって、
a)前記コンピュータシステムの他のあらゆるプロセッサにフリーズ信号を送出する(1102)ことと、
b)状態情報を収集する(1104)ことと、
c)前記状態情報の分析を実行する(1106)ことと
を行うことと
をさらに含む請求項1に記載のコンピュータ実施される方法。 - 前記モニタ呼び出しが、前記パニック呼び出しを表している場合に、前記診断モニタを使用することであって、
d)前記分析の結果をシェルに表示する(1108)ことと、
e)前記シェルからのユーザ入力がある場合には、前記ユーザ入力を受け取る(1110)ことと
を行うこと
をさらに含む請求項7に記載のコンピュータ実施される方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/617,491 US6959262B2 (en) | 2003-02-27 | 2003-07-10 | Diagnostic monitor for use with an operating system and methods therefor |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005032247A JP2005032247A (ja) | 2005-02-03 |
JP4077815B2 true JP4077815B2 (ja) | 2008-04-23 |
Family
ID=32869800
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004198724A Expired - Fee Related JP4077815B2 (ja) | 2003-07-10 | 2004-07-06 | 発明者JohnW.Curryによる、オペレーティングシステムと共に使用される改良された診断モニタおよびその方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6959262B2 (ja) |
JP (1) | JP4077815B2 (ja) |
GB (1) | GB2404756B (ja) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7069543B2 (en) * | 2002-09-11 | 2006-06-27 | Sun Microsystems, Inc | Methods and systems for software watchdog support |
US7716357B2 (en) * | 2003-10-24 | 2010-05-11 | Microsoft Corporation | Service discovery and publication |
JP2005301639A (ja) * | 2004-04-12 | 2005-10-27 | Hitachi Ltd | Osの障害対応方法およびそのプログラム |
US7694121B2 (en) * | 2004-06-30 | 2010-04-06 | Microsoft Corporation | System and method for protected operating system boot using state validation |
US7415632B1 (en) * | 2004-10-29 | 2008-08-19 | Unisys Corporation | Detection and repair of corrupted critical data structures without operational interruption |
US7484127B2 (en) * | 2005-01-13 | 2009-01-27 | Nokia Siemens Networks Oy | Method and system for preserving crash dump in a diskless system |
US8214830B2 (en) * | 2005-01-19 | 2012-07-03 | Intel Corporation | Performance in a virtualization architecture with a processor abstraction layer |
JP2006285453A (ja) * | 2005-03-31 | 2006-10-19 | Oki Electric Ind Co Ltd | 情報処理装置、情報処理方法、および情報処理プログラム |
WO2006114020A1 (en) * | 2005-04-27 | 2006-11-02 | Intel Corporation | Method and system for a process monitor using a hardware communication format |
US7698597B2 (en) * | 2006-02-28 | 2010-04-13 | International Business Machines Corporation | Method of isolating erroneous software program components |
US7584383B2 (en) * | 2006-08-04 | 2009-09-01 | Sun Microsystems, Inc. | Method and system for kernel-level diagnostics using a hardware watchpoint facility |
US7926040B2 (en) * | 2006-09-06 | 2011-04-12 | International Business Machines Corporation | Method and system for timing code execution in a korn shell script |
US7594143B2 (en) * | 2006-10-31 | 2009-09-22 | Hewlett-Packard Development Company, L.P. | Analysis engine for analyzing a computer system condition |
US7571270B1 (en) | 2006-11-29 | 2009-08-04 | Consentry Networks, Inc. | Monitoring of shared-resource locks in a multi-processor system with locked-resource bits packed into registers to detect starved threads |
US7698598B1 (en) * | 2007-04-24 | 2010-04-13 | Netapp, Inc. | Automatic generation of core files and automatic generation of support information with generation of core files |
US20080270842A1 (en) * | 2007-04-26 | 2008-10-30 | Jenchang Ho | Computer operating system handling of severe hardware errors |
US20090193436A1 (en) * | 2008-01-30 | 2009-07-30 | Inventec Corporation | Alarm display system of cluster storage system and method thereof |
US20090228241A1 (en) * | 2008-03-07 | 2009-09-10 | Inventec Corporation | System testing method through subsystem performance-based generator |
US9632857B2 (en) * | 2009-01-15 | 2017-04-25 | International Business Machines Corporation | Intelligent dump suppression |
US9111036B2 (en) * | 2010-04-30 | 2015-08-18 | Red Hat, Inc. | Preloading unwind data for non-intrusive backtracing |
US8335891B2 (en) * | 2009-07-14 | 2012-12-18 | Hewlett-Packard Development Company, L.P. | Method and system for configuring a storage array |
US8677354B2 (en) * | 2010-07-12 | 2014-03-18 | International Business Machines Corporation | Controlling kernel symbol visibility and accessibility across operating system linkage spaces |
US20120042309A1 (en) * | 2010-08-10 | 2012-02-16 | Hank Risan | Method and system for automatically executing an operation after a media event |
US9122551B2 (en) * | 2011-06-17 | 2015-09-01 | The Boeing Comapny | Methods and systems for generating read-only operating systems |
CN103425541A (zh) * | 2012-05-25 | 2013-12-04 | 鸿富锦精密工业(深圳)有限公司 | 异常处理机制检测电子装置、系统及方法 |
US8943458B1 (en) * | 2013-09-16 | 2015-01-27 | International Business Machines Corporation | Determining chip burn-in workload using emulated application condition |
US11133088B2 (en) * | 2016-11-18 | 2021-09-28 | International Business Machines Corporation | Resolving conflicting data among data objects associated with a common entity |
US10810100B2 (en) * | 2017-01-10 | 2020-10-20 | Red Hat, Inc. | Providing dynamic instrumentation using domain-specific monitoring-language-to-kernel-bytecode compilation |
US10606679B2 (en) * | 2017-12-04 | 2020-03-31 | Arm Limited | Debug apparatus and method |
CN111367769B (zh) * | 2020-03-30 | 2023-07-21 | 浙江大华技术股份有限公司 | 应用故障处理方法及电子设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4591972A (en) * | 1982-11-15 | 1986-05-27 | Data General Corp. | Data processing system with unique microcode control |
US6341324B1 (en) * | 1995-10-06 | 2002-01-22 | Lsi Logic Corporation | Exception processing in superscalar microprocessor |
US6253317B1 (en) * | 1997-01-09 | 2001-06-26 | Sun Microsystems, Inc. | Method and apparatus for providing and handling traps |
US6714976B1 (en) * | 1997-03-20 | 2004-03-30 | Concord Communications, Inc. | Systems and methods for monitoring distributed applications using diagnostic information |
US6314530B1 (en) * | 1997-04-08 | 2001-11-06 | Advanced Micro Devices, Inc. | Processor having a trace access instruction to access on-chip trace memory |
US6075938A (en) * | 1997-06-10 | 2000-06-13 | The Board Of Trustees Of The Leland Stanford Junior University | Virtual machine monitors for scalable multiprocessors |
US6889167B2 (en) | 2003-02-27 | 2005-05-03 | Hewlett-Packard Development Company, L.P. | Diagnostic exerciser and methods therefor |
-
2003
- 2003-07-10 US US10/617,491 patent/US6959262B2/en not_active Expired - Fee Related
-
2004
- 2004-07-06 JP JP2004198724A patent/JP4077815B2/ja not_active Expired - Fee Related
- 2004-07-07 GB GB0415284A patent/GB2404756B/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
GB0415284D0 (en) | 2004-08-11 |
GB2404756B (en) | 2006-10-04 |
JP2005032247A (ja) | 2005-02-03 |
US20040172221A1 (en) | 2004-09-02 |
US6959262B2 (en) | 2005-10-25 |
GB2404756A (en) | 2005-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4077815B2 (ja) | 発明者JohnW.Curryによる、オペレーティングシステムと共に使用される改良された診断モニタおよびその方法 | |
US6889167B2 (en) | Diagnostic exerciser and methods therefor | |
US7594143B2 (en) | Analysis engine for analyzing a computer system condition | |
Gu et al. | Characterization of linux kernel behavior under errors | |
US9052967B2 (en) | Detecting resource deadlocks in multi-threaded programs by controlling scheduling in replay | |
US8949671B2 (en) | Fault detection, diagnosis, and prevention for complex computing systems | |
Edelstein et al. | Framework for testing multi‐threaded Java programs | |
US6691250B1 (en) | Fault handling process for enabling recovery, diagnosis, and self-testing of computer systems | |
US7721265B1 (en) | Source code debugging method and apparatus for use in script testing environment | |
US7805636B2 (en) | Bootable post crash analysis environment | |
US20100083250A1 (en) | Virtual machine system, and method for managing thereof | |
Gu et al. | Error Sensitivity of the Linux Kernel Executing on PowerPC G4 and Pentium 4 Processors. | |
TWI544410B (zh) | 利用執行單步驟以進行編碼診斷 | |
Rubanov et al. | Runtime verification of linux kernel modules based on call interception | |
Thane et al. | Replay debugging of real-time systems using time machines | |
da Silva et al. | Special session: AutoSoC-a suite of open-source automotive SoC benchmarks | |
US20040025093A1 (en) | System and method for collecting code coverage information on fatal error path code | |
Mendonca et al. | Robustness testing of the Windows DDK | |
US20030135787A1 (en) | Method and system using hardware assistance for continuance of trap mode during or after interruption sequences | |
Artho et al. | Using checkpointing and virtualization for fault injection | |
US7509533B1 (en) | Methods and apparatus for testing functionality of processing devices by isolation and testing | |
Jeong et al. | Diagnosing kernel concurrency failures with AITIA | |
US20100153926A1 (en) | Operating system aided code coverage | |
Smith et al. | Slicing event traces of large software systems | |
TW201723813A (zh) | 用於診斷執行串流指令的處理器之方法、設備、及系統 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060822 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061121 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20061226 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070424 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20070501 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070424 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070531 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070822 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070911 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070822 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071207 |
|
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: 20080107 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20071207 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080201 |
|
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: 20110208 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120208 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130208 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140208 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |