この出願は、ロックステップシステムのエラーリカバリ能力を改善してシステム信頼性を改善するエラーリカバリ方法及び装置を提供する。
第1の態様によれば、エラーリカバリ方法が提供される。当該方法は、ロックステップモードにある少なくとも2つの中央演算処理ユニットCPUのうち第1のCPUがエラーを有するときに、割込みを受信し、上記少なくとも2つのCPUにより、割込みに応答してロックステップモードから抜け、エラーが発生した第1のCPUのエラーのタイプを決定し、そして、エラーが回復可能なエラーである場合に、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って、第1のCPUに対してエラーリカバリを実行する、ことを含む。従って、この出願のこの実施形態のソリューションでは、ロックステップCPUのエラータイプについての決定に基づいて、エラータイプが回復可能である場合に、上記少なくとも2つのCPUが、サービスプログラムが中断された位置で再び動作するように、エラーが発生したCPUを、正常動作しているCPUの状態に従って回復させることができる。従って、この出願のこの実施形態では、ロックステップシステムのエラーリカバリ能力を改善することができ、システムの信頼性を改善することができる。
第1の態様を参照するに、第1の態様の一部の実装において、割込みをトリガした時点における第2のCPUの状態は、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを含み、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含み、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って第1のCPUに対してエラーリカバリを実行することは、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストをメモリから取得し、そして、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新することを含む。
第1の態様を参照するに、第1の態様の一部の実装において、第2のCPUのソフトウェア可視CPUコンテキストと、割込みをトリガした時点におけるキャッシュ内のデータとが、メモリに保存される。
第1の態様を参照するに、第1の態様の一部の実装において、ロックステップCPUの上記少なくとも2つのCPUがロックステップモードから抜け出てスプリットモードに入るとき、ソフトウェア可視CPUの数が1から複数に変化する。この場合、一方では、複数のCPUのコンテキストが異なるスタックに格納されることを保証するために、CPUコンテキストのメモリスタックの初期化が実行される。これは、データが上書きされることを防止することができる。加えて、CPUがロックステップモードに再び入るときにデータが喪失され得ないことを保証するために、CPU L1/L2キャッシュ内のデータが外部メモリにフラッシュ(flush)される。他方では、システムの非同期エラーがこの時点で直ちに報告され得ることを保証するために、上記少なくとも2つのCPUは別々に例外ベクトルテーブルのエントリにジャンプし、CPUのエラーを同期させ、そして、その後のエラータイプのクエリに備える。
第1の態様を参照するに、第1の態様の一部の実装において、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って第1のCPUに対してエラーリカバリを実行することは、第1のCPUを用いることにより、第1のCPUと第2のCPUとの間のハードウェアチャネルを通じて、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを取得し、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新することを含み、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
なお、一部の特殊なケースでは、例えばシステムサスペンションなど、レベルが不明なレジスタでエラーが発生する。その場合、全てのレベルのレジスタが、ハードウェアチャネルベースの方法で修復され得る。
第1の態様を参照するに、第1の態様の一部の実装において、当該方法は更に、第1のCPUのソフトウェア可視CPUコンテキストが更新された後に、第1のCPU及び第2のCPUのソフトウェア不可視マイクロアーキテクチャ状態をリセットするとともに、第1のCPU及び第2のCPUのそれぞれのソフトウェア可視CPUコンテキストを保持して、第1のCPU及び第2のCPUがロックステップモードに再び入るようにする、ことを含む。換言すれば、エラーCPUは、全てのソフトウェア不可視ハードウェア状態をリセットし、CPUキャッシュ内のデータをクリアするとともに、システムレジスタ及び一般レジスタ内のソフトウェア可視状態を取っておく。従って、リセットする前、上記少なくとも2つのCPUによってセットされたソフトウェア可視状態は完全に同じである。リセットした後、上記少なくとも2つのCPUのソフトウェア可視状態は依然として同じであり、上記少なくとも2つのCPUは、外部メモリからデータ及び命令を取得し、同じ入力命令ストリームを受信する。
第1の態様を参照するに、第1の態様の一部の実装において、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って第1のCPUに対してエラーリカバリを実行することは、
第1のCPU及び第2のCPUをそれぞれリセットするとともに、初期化命令を実行してソフトウェア可視CPUコンテキストを回復させることで、第1のCPU及び第2のCPUがロックステップモードに再び入るようにすることを含み、初期化命令は、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを含み、第1のCPUのソフトウェア可視CPUコンテキストを、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストに回復するために使用され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
一部の実装において、第1のCPU及び第2のCPUは同時にリセットされ得るとともに、第1のCPU及び第2のCPUがロックステップモードに再び入るように初期化命令を同時に実行し得る。従って、リセットする前、上記少なくとも2つのCPUによってセットされたソフトウェア可視状態は完全に同じである。リセットした後、上記少なくとも2つのCPUのソフトウェア可視状態は依然として同じであり、上記少なくとも2つのCPUは、外部メモリからデータ及び命令を取得し、同じ入力命令ストリームを受信する。
第1の態様を参照するに、第1の態様の一部の実装において、上記少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定することは、第1のCPUに対応するアドバンスド・コンフィギュレーション・アンド・パワー・インタフェースACPIテーブルに従って、エラーのタイプを決定することを含み、ACPIテーブルは、CPUのリライアビリティ・アベイラビリティ・アンド・サービサビリティRASノードの状態レジスタがポーリングされたときに発見されたエラーを記録するために使用される。斯くして、CPUにRASエラーが発生したとき、CPUが中断され、あるいは、システムが異常となりUEFI又はBIOSに入る。UEFI又はBIOSは、全てのRASノードの状態レジスタをトラバースし、そのCPUに対応するエラーをメモリテーブル(すなわち、APCIテーブル)に記録する。従って、オペレーティングシステムのACPIドライバは、テーブルを解析して、システム内のどのノードがどのタイプのエラーを有するのかを知ることができる。あるいは、第1のCPUは、第1のCPUのRASノードの状態レジスタにポーリングして、エラーのタイプを決定する。斯くして、CPUにRASエラーが発生したとき、CPUが中断され、あるいはシステムが異常となる。この場合、ACPIテーブルにクエリして原因を得る代わりに、RASドライバが直接、全てのRASノードの状態レジスタを順にトラバースしてエラーの原因を決定する。
取り得る一実装において、第2のCPUは更に、第2のCPUのRASノードの状態レジスタにポーリングして、第2のCPUが正常に動作することを決定し得る。
取り得る一実装において、第2のCPUは更に、第2のCPUに対応するACPIテーブルに従って、第2のCPUが正常に動作することを決定し得る。
取り得る一実装において、上記少なくとも2つのCPUがスプリットモードに入るときに、各CPUが、当該CPUにエラーが発生したかを決定してもよく、RASノード又はACPIテーブルにクエリする必要はない。換言すれば、この場合、どのCPUであるかは、エラーが発生したCPUであり、どのCPUが正常に動作するCPUであるのかは直接的に決定され得る。
第1の態様を参照するに、第1の態様の一部の実装において、ロックステップモードにある少なくとも2つの中央演算処理ユニットCPUにより割込みを受信することは、上記少なくとも2つのCPUにより、割込みコントローラによって送信された割込みを受信することを含み、割込みコントローラは、上記少なくとも2つのCPUの出力が一致しないと比較器回路が決定した場合に、割込みを上記少なくとも2つのCPUに送信する。
取り得る一実装において、比較回路は、専用のハードウェア回路によって実装されることができ、クリティカルパス上には配置されない。例えば、比較回路は、CPUの外側に配置され得る。斯くして、比較回路はCPUの性能に影響を及ぼさない。
取り得る一実装において、比較回路は、CPUクロックサイクルレベルでの比較回路である。具体的には、比較回路及びCPUが同一周波数にあることを保証するために、ロックステップCPUに対応する比較回路が、クロック源をロックステップCPUと共有し、サイクル毎のデータ比較を実装する。従って、時間内にエラーを発見することができ、エラーリカバリ又は他の更なる処理を可能な限り早く実行することができる。
第1の態様を参照するに、第1の態様の一部の実装において、上記少なくとも2つのCPUの出力は、上記少なくとも2つのCPUの各々の内部バス出力、上記少なくとも2つのCPUの各々の外部バス出力、及び上記少なくとも2つのCPUの各々のL3キャッシュ制御ロジック出力のうちの少なくとも1つを含む。
第1の態様を参照するに、第1の態様の一部の実装において、上記少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定することは、比較器回路に対応するRASノードの状態レジスタにクエリして、上記少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定することを含む。
この場合、取得したCPUの出力が一致しないと比較器が決定したとき、RAS割込みを報告することができ、比較器に対応するRASノードのレジスタに、例えば、エラーデータアドレス、エラーモジュール、及びエラータイプのうちの少なくとも1つといった、比較器の不一致データについての情報が提供される。
第1の態様を参照するに、第1の態様の一部の実装において、当該方法は更に、エラーが回復不可能なエラーである場合に、上記少なくとも2つのCPUを動作させることを止めることを含む。
第2の態様によれば、エラーリカバリ装置が提供される。当該装置は、第1の中央演算処理ユニットCPU及び第2のCPUを含む。
第1のCPUは、第1のCPU及び第2のCPUがロックステップモードにあるときに第1のCPUで発生するエラーによってトリガされる割込みを受信し、割込みに応答してロックステップモードから抜け、エラーのタイプを決定し、そして、エラーが回復可能なエラーである場合に、割込みをトリガした時点における第2のCPUの状態に従ってエラーリカバリを実行するように構成され、第2のCPUは、割込みを受信し、ロックステップモードを抜け出るように構成される。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPUは具体的に、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストをメモリから取得し、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新するように構成され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
第2の態様を参照するに、第2の態様の一部の実装において、第2のCPUは更に、第2のCPUのソフトウェア可視CPUコンテキストと、割込みをトリガした時点におけるキャッシュ内のデータとを、メモリに保存するように構成される。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPUは具体的に、第1のCPUと第2のCPUとの間のハードウェアチャネルを通じて、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを取得し、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新するように構成され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPUは更に、ソフトウェア可視CPUコンテキストが更新された後に、第1のCPUのソフトウェア不可視マイクロアーキテクチャ状態をリセットするとともに、第1のCPUのソフトウェア可視CPUコンテキストを保持して、第1のCPUがロックステップモードに再び入るようにする、ように構成され、第2のCPUは更に、第1のCPUのソフトウェア可視CPUコンテキストが更新された後に、第2のCPUのソフトウェア不可視マイクロアーキテクチャ状態をリセットするとともに、第2のCPUのソフトウェア可視CPUコンテキストを保持して、第2のCPUがロックステップモードに再び入るようにする、ように構成される。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPUは具体的に、リセットされ、且つリセット後に、具体的に、初期化命令を実行してソフトウェア可視CPUコンテキストを回復し、第1のCPUがロックステップモードに再び入るようにする、ように構成され、初期化命令は、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを含み、第1のCPUのソフトウェア可視CPUコンテキストを、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストに回復するために使用され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
第2のCPUは具体的に、リセットされ、且つリセット後に、具体的に、初期化命令を実行して、第2のCPUがロックステップモードに再び入るようにする、ように構成される。
一部の実装において、第1のCPU及び第2のCPUは同時にリセットされ得るとともに、第1のCPU及び第2のCPUがロックステップモードに再び入るように初期化命令を同時に実行し得る。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPUは具体的に、第1のCPUに対応するアドバンスド・コンフィギュレーション・アンド・パワー・インタフェースACPIテーブルに従って、エラーのタイプを決定するように構成され、ACPIテーブルは、CPUのリライアビリティ・アベイラビリティ・アンド・サービサビリティRASノードの状態レジスタがポーリングされたときに発見されたエラーを記録するために使用され、又は、第1のCPUのRASノードの状態レジスタにポーリングして、エラーのタイプを決定するように構成される。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPUは具体的に、割込みコントローラによって送信された割込みを受信するように構成され、割込みコントローラは、第1のCPUの出力と第2のCPUの出力とが一致しないと比較器回路が決定した場合に、割込みを第1のCPU及び第2のCPUに送信し、第2のCPUは具体的に、割込みコントローラによって送信された割込みを受信するように構成される。
第2の態様を参照するに、第2の態様の一部の実装において、CPUの出力は、当該CPUの内部バス出力、当該CPUの外部バス出力、及び当該CPUのL3キャッシュ制御ロジック出力のうちの少なくとも1つを含む。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPUは更に、比較器回路に対応するRASノードの状態レジスタにクエリして、エラーが発生した第1のCPUとエラーのタイプとを決定するように構成される。
第2の態様を参照するに、第2の態様の一部の実装において、第1のCPU及び第2のCPUは更に、エラーが回復不可能なエラーである場合に動作を停止する。
第2の態様を参照するに、第2の態様の一部の実装において、当該装置は更に、割込みコントローラ及び比較器回路を含む。比較器回路は、第1のCPU及び第2のCPUの出力を取得し、第1のCPUの出力と第2のCPUの出力とが一致しないと決定した場合に第1の信号を割込みコントローラに送信するように構成され、第1の信号は、割込みコントローラが割込みを第1のCPU及び第2のCPUに送信すべきことを指し示すために使用され、割込みコントローラは、第1の信号に従って割込みを第1のCPU及び第2のCPUに送信する。
第3の態様によれば、エラーリカバリ装置が提供される。当該装置は、決定ユニット及びリカバリユニットを含む。ロックステップモードにある少なくとも2つの中央演算処理ユニットCPUのうち第1のCPUにエラーが発生し、少なくとも2つのCPUがロックステップモードから抜け出るときに、決定ユニットは、第1のCPUにおけるエラーのタイプを決定するように構成され、リカバリユニットは、エラーが回復可能なエラーである場合に、割込みをトリガした時点における少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って、第1のCPUに対してエラーリカバリを実行するように構成される。
第3の態様を参照するに、第3の態様の一部の実装において、リカバリユニットは具体的に、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストをメモリから取得し、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新するように構成され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
第3の態様を参照するに、第3の態様の一部の実装において、当該装置は更にCPUコンテキスト管理ユニットを含む。CPUコンテキスト管理ユニットは、第2のCPUのソフトウェア可視CPUコンテキストと、割込みをトリガした時点におけるキャッシュ内のデータとを、メモリに保存するように構成される。
第3の態様を参照するに、第3の態様の一部の実装において、当該装置は更に初期化ユニットを含む。初期化ユニットは、第1のCPU及び第2のCPUがリセットされた後に、初期化命令を実行してソフトウェア可視CPUコンテキストを回復することで、第1のCPU及び第2のCPUがロックステップモードに再び入るようにする、ように構成され、初期化命令は、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを含み、第1のCPUのソフトウェア可視CPUコンテキストを、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストに回復するために使用され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
第3の態様を参照するに、第3の態様の一部の実装において、決定ユニットは具体的に、第1のCPUに対応するアドバンスド・コンフィギュレーション・アンド・パワー・インタフェースACPIテーブルに従って、エラーのタイプを決定するように構成され、ACPIテーブルは、CPUのリライアビリティ・アベイラビリティ・アンド・サービサビリティRASノードの状態レジスタがポーリングされたときに発見されたエラーを記録するために使用される、又は、第1のCPUのRASノードの状態レジスタにポーリングして、エラーのタイプを決定するように構成される。
第3の態様を参照するに、第3の態様の一部の実装において、決定ユニットは具体的に、比較器回路に対応するRASノードの状態レジスタにクエリして、少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定するように構成され、比較器回路は、少なくとも2つのCPUの出力が一致しないと決定したときに、第1の信号を割込みコントローラに送信するように構成され、第1の信号は、少なくとも2つのCPUがロックステップモードから抜け出ることをトリガするための割込みを、割込みコントローラが少なくとも2つのCPUに送信すべきことを指し示すために使用される。
第3の態様を参照するに、第3の態様の一部の実装において、少なくとも2つのCPUの出力は、少なくとも2つのCPUの各々の内部バス出力、少なくとも2つのCPUの各々の外部バス出力、及び少なくとも2つのCPUの各々のL3キャッシュ制御ロジック出力のうちの少なくとも1つを含む。
第3の態様を参照するに、第3の態様の一部の実装において、決定ユニットは更に、エラーが回復不可能なエラーである場合に、動作を停止するように少なくとも2つのCPUを制御するように構成される。
第4の態様によれば、エラーをクエリするための比較回路が提供される。当該比較回路は、ロックステップモードにある少なくとも2つのCPUの外部に配置され、当該比較回路は、上記少なくとも2つのCPUの出力が一致しないことを決定し、上記少なくとも2つのCPUの一致しない出力に従って第1の信号を割込みコントローラに送信する、ように構成され、第1の信号は、割込みコントローラが上記少なくとも2つのCPUに割込みを送信すべきことを指し示すために使用され、割込みは、上記少なくとも2つのCPUのうちの少なくとも1つにエラーが発生したことを指し示すために使用される。
第4の態様を参照するに、第4の態様の一部の実装において、少なくとも2つのCPUの出力は、少なくとも2つのCPUの各々の内部バス出力、少なくとも2つのCPUの各々の外部バス出力、及び少なくとも2つのCPUの各々のL3キャッシュ制御ロジック出力のうちの少なくとも1つを含む。
第5の態様によれば、エラーリカバリ装置が提供される。当該装置は、第1の態様の方法/動作/ステップ/アクションに対応するモジュールを含む。
第6の態様によれば、エラーリカバリ装置が提供される。当該装置は、プロセッサを含み、プロセッサは、メモリに格納されたプログラムコードを呼び出して、第1の態様に従ったいずれかの手法で一部又は全ての動作を実行するように構成される。
第6の態様において、プログラムコードを格納したメモリは、エラーリカバリ装置の内部に配置されてもよいし(エラーリカバリ装置が、プロセッサに加えてメモリを更に含んでもよいし)、あるいは、エラーリカバリ装置の外部に配置されてもよい(メモリは、別の装置のメモリであってもよい)。一例として、プロセッサはロックステップCPUとすることができ、当該ロックステップCPUが、少なくとも2つの物理CPUを含む。
オプションで、メモリは不揮発性メモリである。
エラーリカバリ装置がプロセッサ及びメモリを含む場合、プロセッサ及びメモリは互いに結合され得る。
一例として、エラーリカバリ装置は、端末であってもよいし、あるいは、端末内にあってエラーリカバリを実行するように構成された装置(例えば、チップ、又は、端末に整合して端末によって使用されることができる装置)であってもよい。端末は具体的に、スマートフォン、車載機器、ウェアラブル装置、又はこれらに類するものとし得る。オプションで、前述の車載機器は、自動車とは独立であるが、自動車に適用されることができるコンピュータシステムであってもよいし、あるいは、自動車(例えば、自動運転車)に統合されたコンピュータシステムであってもよい。
第7の態様によれば、コンピュータ読み取り可能記憶媒体が提供される。当該コンピュータ読み取り可能記憶媒体はプログラムコードを格納し、該プログラムコードは、第1の態様に従った方法における一部又は全部の動作を実行するために使用される命令を含む。
オプションで、当該コンピュータ読み取り可能記憶媒体は端末内に配置され、該端末は、エラーリカバリを実行することができる装置とし得る。
第8の態様によれば、この出願の一実施形態は、コンピュータプログラムプロダクトを提供する。当該コンピュータプログラムプロダクトがエラーリカバリ装置上で実行されるとき、エラーリカバリ装置が、第1の態様に従った方法における動作の一部又は全てを実行する。
第9の態様によれば、チップが提供される。当該チップはプロセッサを含み、該プロセッサは、第1の態様に従った方法における一部又は全ての動作を実行するように構成される。
最初に、この出願の実施形態における関連用語を説明する。
ロックステップCPU(lockstep CPU):ロックステップCPUは、論理CPUであり、少なくとも2つの物理CPU(CPUとも称する)を含み、又は少なくとも2つの物理コアを含む。一例として、少なくとも2つのCPUは、1つのチップ上に配され、又は異なるチップ上に分散され得る。これは、この出願のこの実施形態において限定されることではない。一部の記載では、ロックステップCPUをロックステップ論理CPUと呼ぶこともある。説明を容易にするために、以下では説明のために、1つの論理CPUが少なくとも2つのCPUを含む例を用いる。
ロックステップCPU内の少なくとも2つのCPUがロックステップモードにあるとき、これら少なくとも2つのCPUは、同じコード又は同じ命令を実行し、1つのCPUの計算結果を出力する。この場合、1つのCPUのみがソフトウェアに対して可視であるが、ロックステップCPUは少なくとも2つの(例えば、複数の)CPUを含む。
スプリットCPU(split CPU):ロックステップCPU内の少なくとも2つのCPUが、スプリットモードへと、ロックステップモードから抜け、スプリットモードにおいてこれらCPUは通常通りに別々に動作する。この場合、これら少なくとも2つのCPUはソフトウェアに対して可視である。
理解され得ることには、ロックステップモードにある少なくとも2つのCPUは同じ出力結果を有するはずである。上記少なくとも2つのCPUの出力結果が一致しないとすれば、少なくとも1つのCPUが異常に動作している(換言すれば、エラーが発生している)。1つのCPUに欠陥があるとき、ロックステップCPUは異常である。ロックステップCPU内のCPUは、ロックステップモードから抜け出て、スプリットモードに入る必要がある。
CPU例外ジャンプ:CPUの動作しているときに、エラーが発生したり割込みに応答する必要があったりする場合、CPUは例外ベクトルテーブル又は割込みベクトルテーブルのエントリにジャンプし、エラー又は割込みを処理するための機能が使用される。この処理の後、CPUは、元の中断された位置に戻って動作を続け得る。一例として、ロックステップCPUが異常であるとき、ロックステップCPU内のCPUが異常にジャンプし、スプリットモードに入り、そして、エラーリカバリを実行する。
以下、添付の図面を参照して、この出願の技術的ソリューションを説明する。
図1は、この出願の一実施形態に従ったプラットフォームソフトウェア及びハードウェアにおけるシステムの一実装形態を示している。図1に示すように、ハードウェア部分は、中央演算処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、メモリ、及びこれらに類するものを含み得る。CPUは、ロックステップCPU0、ロックステップCPU1、及び通常CPU2、通常CPU3などを含む。これは、この出願のこの実施形態において特に限定されることではない。ロックステップCPUは、ロックステップ論理CPUと称されることもあり、少なくとも2つのCPU(物理CPUとも称される)を含む。一例として、これら少なくとも2つのCPUのうちの一方をプライマリCPUと呼ぶことができ、これら少なくとも2つのCPUのうちの他方をセカンダリCPU又は冗長CPUと呼ぶことができる。ソフトウェア部分は、実行中の異なるサービスプログラムと、ハードウェアモジュールを管理するソフトウェアモジュールとを含む。一例として、サービスプログラムは、例えば、自動車安全水準(ASIL)-Dサービスプログラム#1、ASIL-Dサービスプログラム#2、ASIL-Bサービスプログラム、又は共通プログラムである。一例として、ハードウェアモジュールを管理するソフトウェアモジュールは、例えば、ロックステップCPU0を管理するエラーマネジャ#1と、ロックステップCPU1を管理するエラーマネジャ#2とし得る。
理解され得ることには、ロックステップCPUはセキュリティ要求を満たすことができるので、比較的高い安全水準要求を持つサービスプログラムはロックステップCPU上で実行されることができ、比較的低い安全水準要求を持つサービスプログラムは通常CPU上で実行されることができる。例えば、ASIL-Dサービスプログラム#1はロックステップCPU0上で動作し、ASIL-Dサービスプログラム#2はロックステップCPU2上で動作し、ASIL-Bサービスプログラム及び共通プログラムがCPU2又はCPU3上で動作し得る。1つパーティションにおける無効が、他のパーティション内のプログラムの動作に影響を及ぼすのを防ぐために、異なる安全水準のアプリケーションは、コンテナ又は仮想マシンを用いてアイソレートされる。
図2は、この出願の一実施形態に従ったシステムアーキテクチャの概略図である。この出願のこの実施形態におけるシステムアーキテクチャは、ハードウェアアーキテクチャ及びソフトウェアアーキテクチャを含む。ハードウェアアーキテクチャは、エラー検出及び訂正のためのハードウェアプラットフォームを提供するために使用され、ソフトウェアアーキテクチャは、ハードウェアプラットフォームに基づくエラー訂正ソリューションを提供するために使用される。
ハードウェアアーキテクチャは、ハードウェアレイヤ又は基礎ハードウェアレイヤとも称され得る。ハードウェアレイヤは、少なくとも1つのロックステップCPU及び割込みコントローラを含み得る。割込みコントローラは、ロックステップCPU内のCPUにエラーが発生したときに割込み制御を実行するように構成される。
図2に示すように、ハードウェアレイヤは、ロックステップCPU0及びロックステップCPU1を含む。ロックステップCPU0は更に、プライマリCPU0及び少なくとも1つのセカンダリCPU0を含む。ロックステップCPU1は更に、プライマリCPU1及び少なくとも1つのセカンダリCPU1を含む。図2は、一例として1つのセカンダリCPUのみを示しているが、この出願のこの実施形態に対する限定を構成するものではない。
オプションで、この出願のこの実施形態において、少なくとも1つの比較器(又は比較回路と称する)が、各ロックステップCPU内に配置され、該ロックステップCPUに含まれる少なくとも2つのCPUの出力を取得して比較するように構成される。一例において、ロックステップCPUの外部に配置された比較器を使用することにより、ロックステップCPUに含まれる各CPUの出力が取得されて比較され得る。
具体的に、比較回路は、専用のハードウェア回路によって実装されることができ、クリティカルパス上には配置されない。例えば、比較回路は、CPUの外部に配置され得る。斯くして、比較回路はCPUの性能に影響を及ぼさない。
オプションで、比較回路は、CPUクロックサイクルレベルでの比較回路である。具体的には、比較回路及びCPUが同一周波数にあることを保証するために、ロックステップCPUに対応する比較回路が、クロック源をロックステップCPUと共有し、サイクル毎のデータ比較を実装する。従って、時間内にエラーを発見することができ、エラーリカバリ又は他の更なる処理を可能な限り早く実行することができる。一例において、上記少なくとも1つの比較器及びロックステップCPUは、クロック源をロックステップCPUと共有するようにチップ上に配置され得る。しかしながら、これは、この出願のこの実施形態において限定されることではない。
オプションで、この出願のこの実施形態において、CPUの出力は、上記少なくとも2つのCPUの各々の内部バス出力、各CPUの外部バス出力、及び各CPUのL3キャッシュ制御ロジック出力(L3_CTRL)のうちの少なくとも1つを含む。一例として、CPUの内部バス出力は、例えば、CPUのL1キャッシュであり、CPUの外部バス出力は、例えば、CPUのL2キャッシュである。
この出願のこの実施形態において、L3_CTRL、すなわち、セカンダリCPUに対応する冗長L3_CTRLが追加され得る。一例として、図2に示すように、ロックステップCPU0のL3キャッシュ制御ロジックは、例えば、L3_CTRL0、L3_RAM、L3_CTRL0’を含み、ロックステップCPU1のL3キャッシュ制御ロジックは、例えば、L3_CTRL1、L3_RAM、L3_CTRL1’を含む。これは、この出願のこの実施形態において限定されることではない。
一例として、図2に示すように、ロックステップCPU0を例として用いる。CPU内部出力比較器0が、プライマリCPU0の内部バス出力を、上記少なくとも1つのセカンダリCPU0の内部バス出力と比較するように構成され得る。CPU外部出力比較器0が、プライマリCPU0の外部バス出力を、上記少なくとも1つのセカンダリCPU0の外部バス出力と比較するように構成され得る。L3キャッシュ制御ロジック出力比較器0が、プライマリCPU0のL3制キャッシュ御ロジック出力(L3_CTRL0)を、上記少なくとも1つのセカンダリCPU0のL3キャッシュ制御ロジック出力(L3_CTRL0’)と比較するように構成され得る。
なお、CPU内部出力比較器は、CPUの外部に配置されてもよく、データラインを用いてCPUの内部バス出力を取得する。これは、この出願のこの実施形態において限定されることではない。
なお、図2のハードウェアレイヤは、単なる一例として用いられており、この出願に対する限定を構成するものではない。
例えば、この出願のこの実施形態において、1つのロックステップCPUが、CPU内部出力比較器、CPU外部出力比較器、及びL3キャッシュ制御ロジック出力比較器のうちの1つ以上を備え得る。他の一例として、異なるロックステップCPUは異なる比較器設定手法を使用してもよい。例えば、ロックステップCPU0はCPU内部出力比較器0のみを備え、ロックステップCPU1はCPU外部出力比較器1のみを備える。
一具体例において、CPU外部出力比較器は第1レベル比較回路として設定されることができ、L3キャッシュ制御ロジック出力比較器は第2レベル比較回路として設定されることができるが、CPU内部出力比較器は設定されない。換言すれば、CPUの内部バスによって出力されるデータは比較されない。斯くして、1つのレベルの比較回路を削減することができる。この場合、CPU内部のエラーがCPUの外部に伝達されるときに、該エラーはCPUの外部の比較回路によって発見されることができる。
他の一例では、この出願のこの実施形態において、1つのロックステップCPUが、2つの物理CPUを含んでもよいし、あるいは3つの物理CPUを含んでもよい。
取り得る一実装において、ロックステップモードにある少なくとも2つのCPUの出力が一致しないことを発見したとき、比較器(例えば、前述の比較器のうちのいずれか1つ)は信号を割込みコントローラに送信することができ、該信号は、割込みコントローラが割込みを上記少なくとも2つのCPUに送信すべきことを指し示すために使用される。信号を受信した後、割込みコントローラは割込みをロックステップCPUに送信する。該割込みは、上記少なくとも2つのCPUが異常であることを指し示す。ロックステップCPU内の上記少なくとも2つのCPUが割込みを受信すると、上記少なくとも2つのCPUはロックステップモードから抜け、すなわち、スプリットモードに入る。スプリットモードにおいて比較器は動作しない。
取り得る一実装において、スプリットモードにおいて、ロックステップCPU内のプライマリCPUに対応するL3_CTRLは動作し、ロックステップCPU内のセカンダリCPUに対応する冗長L3_CTRLはgated_off状態にある。この場合、ロックステップCPU内の全てのCPU(プライマリCPU及びセカンダリCPUを含む)の要求が、動作状態にあるL3_CTRLに送信され、そして、L3_CTRLによって変換されてL3_RAMに出力される。一例として、CPUによって送信される要求は、例えば、読出/書込要求、クエリ要求、置換要求である。これは、この出願のこの実施形態において限定されることではない。
ソフトウェアアーキテクチャは、ソフトウェアレイヤとも称され得る。図2に示すように、ソフトウェアレイヤは、主に、ロックステップマネジャ、リライアビリティ・アベイラビリティ・アンド・サービサビリティ(RAS)エラーマネジャ、及びヘルスモニタリングモジュールを含む。ロックステップマネジャは、ロックステップCPU内の少なくとも2つのCPUを管理するように構成される。RASエラーマネジャは、ロックステップCPU内のCPUにエラーが発生したときに、エラーが発生したCPU及びエラーのタイプを決定するために使用される。ヘルスモニタリングモジュールは、エラーのタイプについての決定処理を実行することを担う。
一例として、ロックステップマネジャは、ロックステップコンフィギュレータ、スプリットモードマネジャ、CPUコンテキストマネジャ、エラークエラ(querier)及びコレクタ(corrector)、及びリセット同期(reset-sync)オペレータを含み得る。
ロックステップコンフィギュレータは、コンピュータシステム内の少なくとも2つの物理CPUを1つのロックステップ論理CPUとして設定するとともに、システム内のロックステップ論理CPUの数を設定する。
スプリットモードマネジャは、ロックステップ例外ベクトルテーブル及び割込み処理機能を管理する。ロックステップCPU内の上記少なくとも2つのCPUによって出力されたデータ一致しないことを比較器が発見したとき、割込みコントローラが割込みを上記少なくとも2つのCPUに送信し、上記少なくとも2つのCPUが、ロックステップモードからスプリットモードに入る。この場合、スプリットモードにある上記少なくとも2つのCPUが、CPUコンテキストマネジャ及び割込み処理機能を呼び出すために、別々に例外ベクトルテーブルのエントリにジャンプする。
取り得る一実装において、上記少なくとも2つのCPUがスプリットモードに入ると、各CPUは、当該CPUにエラーが発生しているかを決定し得る。換言すれば、この場合、エラーが発生したCPUがどのCPUであるのか、及び正常に動作しているCPUがどのCPUであるかが決定され得る。
CPUコンテキストマネジャは、上記少なくとも2つのCPUがロックステップモードから抜け出たときに、その後のエラー訂正に備えるために、ソフトウェア可視CPUコンテキスト及びL1/L2キャッシュ内のデータをL3キャッシュ又はメモリ内の異なるスタックに格納する。ここで、ソフトウェア可視CPUコンテキストは、カーネルモード及びユーザモードにおけるCPU状態、すなわち、CPUに対応するシステムレジスタのデータ及び汎用レジスタのデータを含む。
エラークエラ及びエラーコレクタは、割込み処理機能によって呼び出され得る。一例において、CPUがスプリットモードに入り、エラーが発生したCPUが決定されると、エラークエラ及びコレクタは、エラーが発生したCPUに対応するRASエラーマネジャにクエリして、エラーが発生したCPUのエラーのタイプを決定し得る。他の一例において、CPUがスプリットモードに入り、エラーが発生したCPUが決定されない場合、エラークエラ及びコレクタは、各CPUに対応するRASエラーマネジャにクエリして、エラーが発生したCPU及びエラーのタイプを決定し得る。
この出願のこの実施形態において、エラータイプは、回復可能なエラーと回復不可能なエラーとを含む。CPUのエラータイプが回復不可能なエラーであると決定されたとき、ヘルスモニタリングモジュールに、例えばエラーが発生したCPUをオフラインに持ち込むなど、エラーが発生したCPUに対して決定処理を行うことが通知される。CPUのエラータイプが回復可能なエラーであると決定されたとき、エラークエラ及びコレクタが、エラーが発生したCPUを訂正する。
リセット同期オペレータは、スプリットモードにある上記少なくとも2つの物理CPUが再びロックステップモードに入ることを可能にする。リセット同期オペレータは、ハードウェア的に実施されてもよいし、あるいはソフトウェア的に実装されてもよい。これは、この出願のこの実施形態において限定されることではない。
RASエラーマネジャは、アドバンスド・コンフィギュレーション・アンド・パワー・インタフェース(ACPI)モードにおけるエラーパーサ、及び非ACPIモードにおけるエラークエラを含み得る。
一例として、RASエラーマネジャは1つ以上のRASノードを含み、各RASノードが1つ以上の状態レジスタに対応し、状態レジスタは、CPUで発生する様々なタイプのエラーを格納するように構成される。
ACPIモードにおけるエラーパーサは、ACPIモードにおいてエラークエリを実行することができる。具体的には、エラーパーサは、ACPIテーブルを用いてCPUのエラー状態をクエリし得る。CPUにRASエラーが発生した場合、CPUは割込まれ、あるいは、システムが、異常であり、ユニファイド・エクステンシブル・ファームウェア・インタフェース(UEFI)又は基本入/出力システム(BIOS)に入る。UEFI又はBIOSは、全てのRASノードの状態レジスタをトラバースし、CPUに対応するエラーをメモリテーブル(すなわち、APCIテーブル)に記録する。オペレーティングシステムのACPIドライバが、テーブルを解析して、システム内のどのノードがどのタイプのエラーを有するのかを知ることができる。
非ACPIモードにおけるエラークエラは、非ACPIモードにおいてエラークエリを実行することができる。一例として、図3において、メモリ管理ユニット(MMU)、L1データ(L1 data、略してL1 D)キャッシュ、L1インジケータ(L1I)キャッシュ、L3キャッシュ、L2キャッシュが各々1つのRASノードを有する。CPUにRASエラーが発生したとき、CPUが割込まれ、あるいはシステムが異常である。この場合、ACPIテーブルにクエリすることによって原因を取得することに代えて、RASドライバが直接的に全てのRASノードの状態レジスタを順にトラバースして、エラーの原因を決定する。
なお、この出願のこの実施形態では、エラーをクエリするためにACPIモードが
優先的に使用され得る。このモードでエラーが発見されない場合に、非ACPIモードを用いてエラーをクエリし得る。これは何故なら、RASノードにおけるプロデューサエラーの場合、RASレジスタはエラーを記録するが、システムはエラーを報告しないからである。CPUがエラーデータを消費する場合にのみ、消費者側で例外が報告される。この場合、ACPIテーブルにエラーが記録されない可能性がある。この場合、エラーのタイプを決定するために、非ACPIモードを用いて全てのRASノードの状態レジスタにポーリングする必要がある。
なお、プロデューサエラーは、エンティティがエラーを生成し、該エラーが該エンティティに関するプロデューサエラーであることを指す。このタイプのエラーは、生成された直後にはトリガされず、消費中にのみ報告される。例えば、メモリがエラーを生成する。メモリがエラーを生成すると、メモリは該エラーを積極的には報告しない。該エラーは、他のコンポーネントが該エラーを読むときにのみトリガされる。
オプションで、この出願のこの実施形態において、ロックステップCPUに対応する比較器のために、1つ以上のRASノードが更に配置され得る。例えば、CPU内部出力比較器0、CPU外部出力比較器0、及びL3キャッシュ制御ロジック出力比較器0の各々に対して1つのRASノードが配置される。これは、この出願のこの実施形態において限定されることではない。この場合、取得したCPUの出力が一致しないと比較器が決定したとき、RAS割込みを報告することができ、比較器に対応するRASノードのレジスタに、例えば、エラーデータアドレス、エラーモジュール、及びエラータイプのうちの少なくとも1つといった、比較器の不一致データについての情報が提供される。エラーモジュールは、例えば、L1キャッシュコントローラ、L2キャッシュコントローラ、及びL3コントローラを含む。
また、この出願のこの実施形態における前述の機能又はモジュールの名称は単に例にすぎない。特定の実装において、図2に示すシステムアーキテクチャにおける機能又はモジュールの名称は、代わりに他の名称であってもよい。これは、この出願のこの実施形態において特に限定されることではない。
図4は、この本出願の一実施形態に従ったエラーリカバリ方法の概略フローチャートである。図4に示す方法は、図1のシステムによって実行されることができ、あるいは図2のシステムによって実行されることができる。しかしながら、この出願のこの実施形態はそれに限定されるものではない。理解されるべきことには、図4は、サービス処理方法のステップ又は動作を示している。しかしながら、これらのステップ又は動作は単に例に過ぎない。この出願のこの実施形態において、代わりに他の動作又は図4の動作の変形が実行されてもよい。また、図4のステップは、図4に示したものとは異なる順序で実行されてもよく、場合により、図4の動作の全てを実行する必要はない。
401:ロックステップマネジャの初期化を実行する。
一例として、ロックステップマネジャの初期化は、リソース構成の初期化、例外ベクトルテーブルの初期化、割込み処理機能の初期化を含む。これは、この出願のこの実施形態において限定されることではない。オプションで、RASエラーマネジャの初期化が更に実行されてもよい。
図5は、ロックステップマネジャの初期化の一具体例を示している。図5に示すように、ロックステップマネジャの初期化の前のフェーズで、コンフィギュレーションファイルが読み出され得る。
次に、リソース構成の初期化、例外ベクトルテーブルの初期化、割込み処理機能の初期化が実行される。
リソース構成の初期化中に、サービス要求に基づくロックステップ論理CPUのグループを形成するように、2つ以上の隣接物理CPUが選択される。例えば、高い安全水準のタスクを実行するために1つのロックステップCPUが必要とされる場合、リソース構成の初期化中に、物理CPU0及び物理CPU1が、そのタスクのサービスプログラムを動作させるためのロックステップ論理CPUのグループとして設定され得る。
例外ベクトルテーブルの初期化は、ロックステップCPUがスプリットモードに入り、エラーを同期させてデータ整合性を管理し、割込みを処理するときのCPUコンテキストのメモリスタックの初期化である。ロックステップCPU内の上記少なくとも2つのCPUがロックステップモードから抜け出てスプリットモードに入るとき、ソフトウェア可視CPUの数が1から複数に変化する。この場合、一方では、複数のCPUのコンテキストが異なるスタックに格納されることを保証するために、CPUコンテキストのメモリスタックの初期化が実行される。これは、データが上書きされることを防止することができる。他方では、システムの非同期エラーがこの時点で直ちに報告され得ることを保証するために、上記少なくとも2つのCPUは別々に例外ベクトルテーブルのエントリにジャンプし、CPUのエラーを同期させ、そして、その後のエラータイプのクエリに備える。加えて、CPUがロックステップモードに再び入るときにデータが喪失され得ないことを保証するために、CPU L1/L2キャッシュ内のデータが外部メモリにフラッシュされる。
割込み処理機能の初期化は割込みを処理することができ、例えば、ロックステップCPU内のCPUにエラーが発生したときに生成される割込みを処理することができ。一例として、ソフトウェアレイヤが、例外ベクトルテーブルのエントリを用いることによって割込み処理機能を呼び出し、次いで、割込み処理機能が、エラークエラ及びコレクタを呼び出してエラーをクエリし、そして、エラータイプに従って、対応する訂正を実行する。
リソース構成の初期化、例外ベクトルテーブルの初期化、及び割込み処理機能の初期化が完了した後、ロックステップコア管理モジュールの初期化後のフェーズに入る。
そして、ロックステップマネジャの初期化が終了する。
402:ロックステップモードにある上記少なくとも2つのCPUの出力が一致しないことを決定する。
一実装において、ロックステップCPUに含まれる上記少なくとも2つのCPUの各々の出力が、ロックステップCPUの外部に配置された比較回路を用いることによって取得され、そして、該比較回路が、上記少なくとも2つのCPUの出力が一致しているかを決定する。具体的に、比較回路については、図2の説明を参照されたい。簡潔さのため、詳細をここで再び説明することはしない。
ロックステップモードにある上記少なくとも2つのCPUの出力が一致しないと決定した場合、比較回路は信号を割込みコントローラに送信し、割込みコントローラが、該信号に従って、割込みをCPUに送信する。この場合、上記少なくとも2つのCPUはロックステップモードからスプリットモードに入る。スプリットモードにある上記少なくとも2つのCPUは、CPUのエラーを同期させるために、別々に割込みベクトルテーブルのエントリにジャンプする。次いで、403及び404が実行される。
403:CPUコンテキストを保存して管理する。
一例として、スプリットモードにある上記少なくとも2つの物理CPUは、これら少なくとも2つの物理CPUに対応するCPUコンテキストを解放する。上記少なくとも2つのCPUのCPUコンテキストのうちの少なくとも1つは正しくないので、これら少なくとも2つのCPUコンテキスト及びキャッシュ内のデータをメモリ内の異なるスタックアドレスへとリフレッシュする必要がある。
一例として、図6は、CPUコンテキストの保存及び回復の一例を示している。図6に示すように、ロックステップCPU0’がスプリットモードに入った後、ロックステップCPU0’内のCPU0及びCPU1は別々に割込み要求(IRQ)エントリにジャンプする。次いで、CPU0のコンテキストがメモリ内のスタック0に格納され、CPU1のコンテキストがメモリ内のスタック1に格納される。エラークエリが実行された後、CPU0及びCPU1のどちらのCPUが正しいCPUであるか、並びにCPU0及びCPU1のどちらのCPUがエラーCPUであるかを決定することができる。そして、エラーが回復可能なエラーである場合、エラークエリの結果に従ってエラーが訂正される。例えば、メモリに格納された正常CPUのコンテキストに従って、エラーCPUの状態が設定され得る。例えば、CPU0にエラーが発生し、CPU1が正しく動作している場合、CPU0に対してエラー訂正を行うために、スタック1に格納されたコンテキストがCPU0に復元される。そして、これら2つのCPUは再びロックステップモードに入ることができる。
404:エラークエリを実行する。
具体的には、404は、エラークエラ及びコレクタによって実行され得る。エラークエラ及びコレクタは、クエリ情報をRASエラーマネジャに送信することができ、RASエラーマネジャは、エラークエリを実行することができる。一例として、RASエラーマネジャはACPIモード及び非ACPIモードにおいてエラークエリを実行する。具体的に、ACPIモード及び非ACPIモードについては、前述の説明を参照されたい。簡潔さのため、詳細をここで再び説明することはしない。
オプションで、この出願のこの実施形態において、比較器に対応するRASノードにクエリして、エラーが発生したCPU及びエラーのタイプを決定することができ、他のRASノードにポーリングする必要はない。この場合、ロックステップエラーは一般的なRASエラーとみなされ得る。エラークエリは、ハードウェアによって提供される比較器に対応するRASノードのレジスタを読み出すことによって実行され得る。ACPIモード又は非ACPIモードを用いて、比較器のRASエラーノードにポーリングすることができる。レジスタは、エラーデータアドレス、エラーモジュール、エラータイプ、及びこれらに類するもののうちの少なくとも1つを含むからである。従って、比較器に対応するRASノードのレジスタを読み出すことにより、エラータイプを決定することができる。一例として、ロックステップエラーは、ロックステップCPUがロックステップモードにあるときに上記少なくとも2つのCPUの出力が一致しないというエラーを指し得る。
一例として、回復可能なエラーは、非アンコンテイナブルエラー(UC)タイプのエラー、予め設定された閾値を超えない発生数を持つ非UCタイプのエラー、システムサスペンション、又はこれらに類するものを含む。これは、この出願のこの実施形態において限定されることではない。一例として、回復不可能なエラーは、UCタイプのエラー、予め設定された閾値を超える発生数を持つ非UCタイプのエラー、及び未知のタイプのエラーのうちの少なくとも1つを含み得る。これは、この出願のこの実施形態において限定されることではない。
取り得る一部の実装において、アンコンテイナブルエラータイプ又は未知エラータイプでは、ヘルスモニタリングモジュールに、システムヘルスモニタリングを実行することが通知され得る。換言すれば、405が実行される。非UCタイプのエラーの発生数が予め設定された閾値を超えたとき、ヘルスモニタリングモジュールに、システムヘルスモニタリングを実行することが通知され得る。換言すれば、405が実行される。非UCタイプのエラーでは、エラーの発生数が予め設定された閾値を超えない場合、406に示すようにソフトウェアを用いてエラーリカバリが実行され得る。CPUシステムがサスペンドされたとき、エラーが伝播しない場合には、407に示すように、ハードウェアチャネルを用いてエラーリカバリを行うことができる。
一部のオプション実施形態において、ロックステップCPUが2つのCPUを含み、これら2つの物理CPUによって出力されたデータが一致しないと比較器が決定した場合、比較器に対応するRASノードを用いて、どちらのCPUがエラーを有するのか、及びどのタイプのエラーが発生したのかを決定し得る。
一部のオプション実施形態において、ロックステップCPUが3つ以上の物理CPUを含み、これら3つ以上の物理CPUによって出力されたデータが一致しないと比較器が決定した場合、エラーが発生したCPUは、2つ以上から1つを決定することの原理に従って決定され得る。ここで、2つ以上から1つを決定するとは、上記少なくとも3つのCPUのうちの1つの出力結果が他のCPUの出力結果と一致しない場合に、このCPUにエラーが発生したと決定され得ることを意味する。この場合、取り得る一手法において、エラーCPUはオフラインに持ち込まれ得るとともに、少なくとも2つの他のCPUはロックステップモードに入って動作を続け得る。あるいは、取り得る他の一手法において、比較器に対応するRASノードを用いて、どのCPUがエラーを有するのか、及びどのタイプのエラーが発生したのかを決定してもよく、次いで、エラーのタイプに従って、エラーが発生したCPUに対して回復を実行すべきかを決定し得る。
405:ヘルスモニタリングモジュールがシステムヘルスモニタリングを実行する。
具体的には、ヘルスモニタリングモジュールは、エラーCPUをオフラインに持ち込むことができ、あるいは、ロックステップCPU内の全てのCPUを、動作を停止するように制御することができる。例えば、自動運転シナリオにおいて、ヘルスモニタリングモジュールは、マイクロコントローラユニット(MCU)が引き継いで非常ブレーキをかけるように、自動運転モジュールを抜け出ることをシステムに通知し得る。
406:ソフトウェアを用いて回復を実行する。
具体的には、正しいCPUのコンテキストが、例外ベクトルテーブルのエントリ位置で、L1/L2キャッシュからメモリにフラッシュされるので、この場合、正しいCPUのコンテキストをエラーCPUに復元して、エラーCPUに対する回復を行い得る。
なお、ソフトウェア修復は通常、例えば、ARM64アーキテクチャにおけるEL0レベルレジスタ、E1レベルレジスタ、X86アーキテクチャにおけるRING0レベルレジスタ、又はRING3レベルレジスタといった、共通レベルのレジスタで使用される。一般に、エラーが発生したCPUのエラー許可レベルは、ステップ404でエラークエリを行うことによって決定され得る。
407:ハードウェアチャネルを用いてエラーCPUを回復させる。
具体的には、エラーCPUは、正しいCPUの状態に従って同期され得る。この場合、正しいCPUは、正しいCPUとエラーCPUとの間のハードウェアチャネルを通じて、正しいCPUのソフトウェア可視CPUコンテキストをエラーCPUに同期させ得る。図7は、この出願の一実施形態に従ったハードウェアチャネルに基づくエラー訂正の一例を示している。
エラーCPUに対して701A-704Aが実行され、正しいCPUに対して701B-704Bが実行される。
701A:エラーCPUをリセットし、すなわち、CPUのマイクロアーキテクチャ状態をリセットし、エラーCPUのシングルコアリカバリを実行する。ここで、シングルコアリカバリは、エラーCPUに対しては回復が実行されるが、正しいCPUに対しては回復が行われないことを意味する。
702A:シングルコアリカバリの後、エラーCPUがリカバリモードに入り、同時に、リカバリモードに入ったことを正しいCPUに通知する。一例として、エラーCPUは、割込み的に又は他の手法で、リカバリモードに入ったことを正しいCPUに通知し得る。これは、この出願のこの実施形態において限定されることではない。
さらに、リカバリモードにおいて、エラーCPUは、ハードウェアチャネルを用いることによって、正しいCPUのソフトウェア可視状態を取得し、正しいCPUのソフトウェア可視状態に従って回復を実行し得る。一例として、ハードウェアチャネルは、正しいCPUとエラーCPUとの間のデータチャネルとし得る。
703A:エラーCPUの状態が回復された後、エラーCPU及び正しいCPUが同時にリセット同期状態に入る。703Aについては、408の説明を参照されたい。
704A:リセット同期が完了した後、ロックステップに参画する全てのCPUが再びロックステップモードに入る。704Aについては、409の説明を参照されたい。
701B:エラーCPUがリセットされるとき、正しいCPUはスピン待機状態にある。スピン待機状態において、正しいCPUは、エラーCPUからの、リカバリモードに入ったことの通知を待つ。一例として、エラーCPUは、割込み的に又は他の手法で、そのモードに入ったことを正しいCPUに通知し得る。これは、この出願のこの実施形態において限定されることではない。
702B:リカバリモードに入った後、エラーCPUに対する回復を実行するために、正しいCPUは、正しいCPUのレジスタ内のソフトウェア可視状態を、ハードウェアチャネルを用いることによってエラーCPUに送信する。
703B:ソフトウェア可視状態の伝送が完了すると、正しいCPU及びエラーCPUが同時にリセット同期状態に入る。703Bについては、408の説明を参照されたい。
704B:リセット同期が完了した後、ロックステップに参画する全てのCPUが再びロックステップモードに入る。704Bについては、409の説明を参照されたい。
なお、一部の特殊なケースでは、例えばシステムサスペンションなど、レベルが不明なレジスタでエラーが発生する。その場合、全てのレベルのレジスタが、ハードウェアチャネルベースの方法で修復され得る。この場合、回復される必要があるレジスタの数が多いので、回復速さがソフトウェアリカバリのそれよりも遅い。
408:リセット同期に入る。
エラーCPUコアの内部のソフトウェア可視状態が回復された後、正しいCPUがリセット同期を実行し、すなわち、内部マイクロアーキテクチャをリセットする。取り得る一実装において、エラーCPUは、全てのソフトウェア不可視ハードウェア状態をリセットし、CPUキャッシュ内のデータをクリアするとともに、システムレジスタ及び一般レジスタ内のソフトウェア可視状態を取っておく。これに基づき、リセット同期は従来のCPUリセットとは異なり、リセット同期は完全なリセットではない。従って、必要とされる時間は比較的短く、例えば、数十CPUクロックサイクルであり得る。
オプションで、上記少なくとも2つのCPUがリセットされた後に、初期化命令を実行して、ソフトウェア可視CPUコンテキストを回復することで、上記少なくとも2つのCPUがロックステップモードに再び入るようにすることができ、初期化命令は、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを含み、第1のCPUのソフトウェア可視CPUコンテキストを、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストに回復するために使用され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。一実装において、初期化命令は初期化ユニットによって実行され得る。
取り得る一実装において、ロックステップに参画する上記少なくとも2つのCPUは、ソフトウェアが初期化命令をプリプレースする位置にリセットされ、初期化命令は、割込み時点の前述の正しいCPUのCPU PCポインタ及びシステムレジスタ(すなわち、システムレジスタ又はデータの値)を含む。リセットした後、上記少なくとも2つのCPUが同時に初期化命令を実行する。
リセット同期が実行される前、上記少なくとも2つの物理CPUによって設定されたソフトウェア可視状態は完全に同じである。リセット同期が実行された後、上記少なくとも2つの物理CPUのソフトウェア可視状態はなおも同じであり、上記少なくとも2つのCPUは、外部メモリからデータ及び命令を取得し、同じ入力命令ストリームを受信する。
409:ロックステップCPUは、前の退出位置で動作を続ける。
リセット同期が実行された後、1つのケースにおいて、ロックステップに参画する全てのCPUのマイクロアーキテクチャ状態は各々、リセット後の初期状態である。ソフトウェア可視状態は、サービスが中断される前の状態である。別の1つのケースにおいて、ロックステップに参画する全てのCPUが同時に初期化命令を実行し、それ故に、ロックステップCPUは、前にサービスプログラムが中断された位置から動作を続けることができる。
さらに、ロックステップCPUに対応する比較器は、ロックステップCPU内の上記少なくとも2つの物理CPUに対してサイクル毎の比較を実行し続ける。
従って、この出願の実施形態では、ロックステップモードにある上記少なくとも2つのCPUは、少なくとも1つのCPUにエラーが発生したときにロックステップモードから抜け出ることができ、エラーが発生したCPU及び正常に動作するCPUが決定される。これに基づき、そのエラーが回復可能である場合、エラーが発生したCPUを、正常に動作するCPUに基づいて回復させることができる。これは、上記少なくとも2つのCPUが、サービスプログラムが中断された位置で再び動作する助けとなる。従って、この出願の実施形態では、ロックステップシステムのエラーリカバリ能力を改善することができ、システムの信頼性を改善することができる。
図8は、この出願の一実施形態に従ったエラーリカバリ方法の概略フローチャートである。一例として、当該方法は、図1又は図2に示したシステムによって実行され得る。当該方法は、810-830を含む。
810:ロックステップモードにある少なくとも2つのCPUが割込みを受信し、該割込みは、上記少なくとも2つのCPUのうち少なくとも1つにエラーが発生したことを指し示すために使用される。
820:上記少なくとも2つのCPUが、割込みに応答してロックステップモードから抜け出る。
830:上記少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定する。
840:エラーが回復可能なエラーである場合に、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って、第1のCPUに対してエラーリカバリを実行する。
従って、この出願の実施形態では、ロックステップモードにある上記少なくとも2つのCPUは、少なくとも1つのCPUにエラーが発生したときにロックステップモードから抜け出ることができ、エラーが発生したCPU及びエラーのタイプが決定される。これに基づき、そのエラーが回復可能である場合、エラーが発生したCPUを、正常に動作するCPUに基づいて回復させることができる。これは、上記少なくとも2つのCPUが、サービスプログラムが中断された位置で再び動作する助けとなる。従って、この出願の実施形態では、ロックステップシステムのエラーリカバリ能力を改善することができ、システムの信頼性を改善することができる。
なお、1つ以上の第1のCPUと1つ以上の第2のCPUとが存在し得る。
一例として、CPUの状態は、ソフトウェア可視状態及び/又はCPUのソフトウェア不可視ハードウェア状態を含み得る。ソフトウェア可視状態は、CPUコンテキストとも称され、汎用レジスタの値(又はデータ)及びシステムレジスタの値(又はデータ)を含む。ソフトウェア不可視ハードウェア状態は、ソフトウェア不可視マイクロアーキテクチャ状態と称されることもあり、プロセッサ上で実行され得る。
取り得る一設計において、エラーが回復不可能なエラーである場合に、上記少なくとも2つのCPUは動作を停止する。
一部の実装において、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って第1のCPUに対してエラーリカバリを実行することは、
割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストをメモリから取得し、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新することを含み、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
一部の実装において、第2のCPUは更に、第2のCPUのソフトウェア可視CPUコンテキストと、割込みをトリガした時点におけるキャッシュ内のデータとを、メモリに保存するように構成される。
一部の実装において、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って第1のCPUに対してエラーリカバリを実行することは、
第1のCPUと第2のCPUとの間のハードウェアチャネルを通じて、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを取得し、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新することを含み、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
なお、一部の特殊なケースでは、例えばシステムサスペンションなど、レベルが不明なレジスタでエラーが発生する。その場合、全てのレベルのレジスタが、ハードウェアチャネルベースの方法で修復され得る。
一部の実装において、当該方法は更に、第1のCPUのソフトウェア可視CPUコンテキストが更新された後に、第1のCPU及び第2のCPUのソフトウェア不可視マイクロアーキテクチャ状態をリセットするとともに、第1のCPU及び第2のCPUのそれぞれのソフトウェア可視CPUコンテキストを保持して、第1のCPU及び第2のCPUがロックステップモードに再び入るようにする、ことを含む。換言すれば、エラーCPUは、全てのソフトウェア不可視ハードウェア状態をリセットし、CPUキャッシュ内のデータをクリアするとともに、システムレジスタ及び一般レジスタ内のソフトウェア可視状態を取っておく。
従って、リセットする前、上記少なくとも2つのCPUによってセットされたソフトウェア可視状態は完全に同じである。リセットした後、上記少なくとも2つのCPUのソフトウェア可視状態は依然として同じであり、上記少なくとも2つのCPUは、外部メモリからデータ及び命令を取得し、同じ入力命令ストリームを受信する。
一部の実装において、割込みをトリガした時点における上記少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って第1のCPUに対してエラーリカバリを実行することは、
第1のCPU及び第2のCPUをそれぞれリセットするとともに、初期化命令を実行してソフトウェア可視CPUコンテキストを回復させることで、第1のCPU及び第2のCPUがロックステップモードに再び入るようにすることを含み、初期化命令は、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを含み、第1のCPUのソフトウェア可視CPUコンテキストを、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストに回復するために使用され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
従って、リセットする前、上記少なくとも2つのCPUによってセットされたソフトウェア可視状態は完全に同じである。リセットした後、上記少なくとも2つのCPUのソフトウェア可視状態は依然として同じであり、上記少なくとも2つのCPUは、外部メモリからデータ及び命令を取得し、同じ入力命令ストリームを受信する。
一部の実装において、上記少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定することは、
第1のCPUにより、第1のCPUに対応するアドバンスド・コンフィギュレーション・アンド・パワー・インタフェースACPIテーブルに従って、エラーのタイプを決定することを含み、ACPIテーブルは、CPUのリライアビリティ・アベイラビリティ・アンド・サービサビリティRASノードの状態レジスタがポーリングされたときに発見されたエラーを記録するために使用される。斯くして、CPUにRASエラーが発生したとき、CPUが中断され、あるいは、システムが異常となりUEFI又はBIOSに入る。UEFI又はBIOSは、全てのRASノードの状態レジスタをトラバースし、そのCPUに対応するエラーをメモリテーブル(すなわち、APCIテーブル)に記録する。従って、オペレーティングシステムのACPIドライバは、テーブルを解析して、システム内のどのノードがどのタイプのエラーを有するのかを知ることができる。
あるいは、第1のCPUは、第1のCPUのRASノードの状態レジスタにポーリングして、エラーのタイプを決定する。斯くして、CPUにRASエラーが発生したとき、CPUが中断され、あるいはシステムが異常となる。この場合、ACPIテーブルにクエリして原因を得る代わりに、RASドライバが直接、全てのRASノードの状態レジスタを順にトラバースしてエラーの原因を決定する。
オプションで、第2のCPUは更に、第2のCPUのRASノードの状態レジスタにポーリングして、第2のCPUが正常に動作することを決定し得る。
オプションで、第2のCPUは更に、第2のCPUに対応するACPIテーブルに従って、第2のCPUが正常に動作することを決定し得る。
オプションで、上記少なくとも2つのCPUがスプリットモードに入るときに、各CPUが、当該CPUにエラーが発生したかを決定してもよく、RASノード又はACPIテーブルにクエリする必要はない。換言すれば、この場合、どのCPUであるかは、エラーが発生したCPUであり、どのCPUが正常に動作するCPUであるのかは直接的に決定され得る。
一部の実装において、少なくとも2つのCPUにより割込みを受信することは、
上記少なくとも2つのCPUにより、割込みコントローラによって送信された割込みを受信することを含み、割込みコントローラは、上記少なくとも2つのCPUの出力が一致しないと比較器回路が決定した場合に、割込みを上記少なくとも2つのCPUに送信する。
一部の実装において、上記少なくとも2つのCPUの出力は、上記少なくとも2つのCPUの各々の内部バス出力、上記少なくとも2つのCPUの各々の外部バス出力、及び上記少なくとも2つのCPUの各々のL3キャッシュ制御ロジック出力のうちの少なくとも1つを含む。
一部の実装において、上記少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定することは、
比較器回路に対応するRASノードの状態レジスタにクエリして、上記少なくとも2つのCPUのうちエラーが発生した第1のCPUと、エラーのタイプとを決定することを含む。
この場合、取得したCPUの出力が一致しないと比較器が決定したとき、RAS割込みを報告することができ、比較器に対応するRASノードのレジスタに、例えば、エラーデータアドレス、エラーモジュール、及びエラータイプのうちの少なくとも1つといった、比較器の不一致データについての情報が提供される。
図8に示すエラーリカバリ方法は、前述の方法実施形態に対応するエラーリカバリ方法の各プロセスを実施することができる。詳細については、前述の説明を参照されたい。繰り返しを避けるため、詳細をここで再び説明することはしない。
以上、図1-図8を参照して、この出願の実施形態におけるエラーリカバリ方法を詳細に説明した。以下、図9を参照して、この出願の実施形態におけるエラーリカバリ装置を詳細に説明する。理解されるべきことには、図9のエラーリカバリ装置は、この出願の実施形態におけるエラーリカバリ方法のステップを実行することができる。図9に示すエラーリカバリ装置を以下にて説明するとき、繰り返しての説明は適宜に省略する。
図9は、この出願の一実施形態に従ったエラーリカバリ装置900の概略ブロック図である。
図9に示す装置900はロックステップCPU910を含み、ロックステップCPU910は、第1のCPU9110及び第2のCPU9120を含む。
第1のCPU9110は、第1のCPU9110及び第2のCPU9120がロックステップモードにあるときに第1のCPU9110で発生するエラーによってトリガされる割込みを受信し、
割込みに応答してロックステップモードから抜け、エラーのタイプを決定し、そして、
エラーが回復可能なエラーである場合に、割込みをトリガした時点における第2のCPU9120の状態に従ってエラーリカバリを実行する、ように構成される。
第2のCPU9120は、割込みを受信し、ロックステップモードを抜け出るように構成される。
一部の実装において、第1のCPU9110は具体的に、
割込みをトリガした時点における第2のCPU9120のソフトウェア可視CPUコンテキストをメモリから取得し、第2のCPU9120のソフトウェア可視CPUコンテキストに従って、第1のCPU9110のソフトウェア可視CPUコンテキストを更新するように構成され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
一部の実装において、第2のCPU9120は更に、第2のCPU9120のソフトウェア可視CPUコンテキストと、割込みをトリガした時点におけるキャッシュ内のデータとを、メモリに保存するように構成される。
一部の実装において、第1のCPU9110は具体的に、
第1のCPU9110と第2のCPU9120との間のハードウェアチャネルを通じて、割込みをトリガした時点における第2のCPU9120のソフトウェア可視CPUコンテキストを取得し、第2のCPU9120のソフトウェア可視CPUコンテキストに従って、第1のCPU9110のソフトウェア可視CPUコンテキストを更新するように構成され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
一部の実装において、第1のCPU9110は更に、ソフトウェア可視CPUコンテキストが更新された後に、第1のCPU9110のソフトウェア不可視マイクロアーキテクチャ状態をリセットするとともに、第1のCPU9110のソフトウェア可視CPUコンテキストを保持して、第1のCPU9110がロックステップモードに再び入るようにする、ように構成され、
第2のCPU9120は更に、第1のCPU9110のソフトウェア可視CPUコンテキストが更新された後に、第2のCPU9120のソフトウェア不可視マイクロアーキテクチャ状態をリセットするとともに、第2のCPU9120のソフトウェア可視CPUコンテキストを保持して、第2のCPU9120がロックステップモードに再び入るようにする、ように構成される。
一部の実装において、第1のCPU9110は具体的に、リセットされ、且つリセット後に、具体的に、初期化命令を実行してソフトウェア可視CPUコンテキストを回復し、第1のCPU9110がロックステップモードに再び入るようにする、ように構成され、初期化命令は、割込みをトリガした時点における第2のCPU9120のソフトウェア可視CPUコンテキストを含み、初期化命令は、第1のCPU9110のソフトウェア可視CPUコンテキストを、割込みをトリガした時点における第2のCPU9120のソフトウェア可視CPUコンテキストに回復するために使用され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
第2のCPU9120は具体的に、リセットされ、且つリセット後に、具体的に、初期化命令を実行して、第2のCPU9120がロックステップモードに再び入るようにする、ように構成される。
一部の実装において、第1のCPU及び第2のCPUは同時にリセットされ得るとともに、第1のCPU及び第2のCPUがロックステップモードに再び入るように初期化命令を同時に実行し得る。
一部の実装において、第1のCPU9110は具体的に、
第1のCPU9110に対応するアドバンスド・コンフィギュレーション・アンド・パワー・インタフェースACPIテーブルに従って、エラーのタイプを決定するように構成され、ACPIテーブルは、CPUのリライアビリティ・アベイラビリティ・アンド・サービサビリティRASノードの状態レジスタがポーリングされたときに発見されたエラーを記録するために使用され、又は、
第1のCPU9110のRASノードの状態レジスタにポーリングして、エラーのタイプを決定するように構成される。
一部の実装において、第1のCPU9110は具体的に、割込みコントローラによって送信された割込みを受信するように構成され、割込みコントローラは、第1のCPU9110の出力と第2のCPU9120の出力とが一致しないと比較器回路が決定した場合に、割込みを第1のCPU9110及び第2のCPU9120に送信する。
第2のCPU9120は具体的に、割込みコントローラによって送信された割込みを受信するように構成される。
一部の実装において、第1のCPU9110は更に、
比較器回路に対応するRASノードの状態レジスタにクエリして、エラーが発生した第1のCPU9110とエラーのタイプとを決定するように構成される。
一部の実装において、第1のCPU9110及び第2のCPU9120は更に、エラーが回復不可能なエラーである場合に動作を停止する。
一部の実装において、当該装置900は更に、割込みコントローラ及び比較器回路を含み得る。
比較器回路は、第1のCPU9110及び第2のCPU9120の出力を取得し、第1のCPU9110の出力と第2のCPU9120の出力とが一致しないと決定した場合に第1の信号を割込みコントローラに送信するように構成され、第1の信号は、割込みコントローラが割込みを第1のCPU9110及び第2のCPU9120に送信すべきことを指し示すために使用される。
割込みコントローラは、第1の信号に従って割込みを第1のCPU9110及び第2のCPU9120に送信する。
オプションで、システムは更に記憶ユニット920を含み得る。取り得る一手法において、記憶ユニット920は命令を格納するように構成される。オプションで、記憶ユニット920はまた、データ又は情報を格納するように構成され得る。記憶ユニット920は、メモリを用いることによって実装され得る。
取り得る一設計において、第1のCPU9110及び第2のCPU9120は、装置900が前述のエラーリカバリ方法を実行するように、記憶ユニット920に格納された命令を実行するように構成され得る。
さらに、第1のCPU9110、第2のCPU9120、及び記憶ユニット920は、制御信号及び/又はデータ信号を転送するために、内部接続パスを用いて互いに通信し得る。例えば、記憶ユニット920がコンピュータプログラムを格納するように構成され、第1のCPU9110及び第2のCPU9120が、記憶ユニット920からコンピュータプログラムを呼び出し、コンピュータプログラムを実行して、前述のエラーリカバリ方法を完了するように構成され得る。記憶ユニット920は、ロックステップCPU910に統合されてもよいし、あるいはロックステップCPU910とは別に配されてもよい。
メモリは、以下のタイプのうちの1つ以上、すなわち、フラッシュメモリ、ハードディスク型メモリ、マイクロマルチメディアカードメモリ、カードメモリ(例えば、SD又はXDメモリ)、ランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、読み出し専用メモリ(ROM)、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、プログラマブル読み出し専用メモリ(PROM)、磁気メモリ、磁気ディスク、又は光ディスクのうちの1つ以上とし得る。例えば、メモリは、コンピュータプログラム(当該コンピュータプログラムは、この出願の実施形態におけるエラーリカバリ方法に対応するプログラムである)を格納し得る。処理ユニットがコンピュータプログラムを実行するとき、処理ユニットは、この出願の実施形態におけるエラーリカバリ方法を実行することができる。
メモリは更に、コンピュータプログラム以外のデータを格納する。例えば、メモリは、この出願におけるエラーリカバリ方法の処理プロセスにおけるデータを格納し得る。
図9に示す装置900は、前述の方法実施形態に対応するエラーリカバリ方法の各プロセスを実装することができる。具体的に、装置900については、前述の説明を参照されたい。繰り返しを避けるため、詳細をここで再び説明することはしない。
図10は、この出願の一実施形態に従ったエラーリカバリ装置1000の概略ブロック図である。装置1000は、決定ユニット1010及びリカバリユニット1020を含む。
ロックステップモードにある少なくとも2つの中央演算処理ユニットCPUのうち第1のCPUにエラーが発生し、少なくとも2つのCPUがロックステップモードから抜け出るときに、決定ユニット1010は、第1のCPUにおけるエラーのタイプを決定するように構成され、
リカバリユニット1020は、エラーが回復可能なエラーである場合に、割込みをトリガした時点における少なくとも2つのCPUのうち正しく動作していた第2のCPUの状態に従って、第1のCPUに対してエラーリカバリを実行するように構成される。
一部の実装において、リカバリユニット1020は具体的に、
割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストをメモリから取得し、第2のCPUのソフトウェア可視CPUコンテキストに従って、第1のCPUのソフトウェア可視CPUコンテキストを更新するように構成され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
一部の実装において、当該装置は更にCPUコンテキスト管理ユニットを含む。CPUコンテキスト管理ユニットは、第2のCPUのソフトウェア可視CPUコンテキストと、割込みをトリガした時点におけるキャッシュ内のデータとを、メモリに保存するように構成される。
一部の実装において、当該装置は更に初期化ユニットを含む。初期化ユニットは、第1のCPU及び第2のCPUがリセットされた後に、初期化命令を実行してソフトウェア可視CPUコンテキストを回復することで、第1のCPU及び第2のCPUがロックステップモードに再び入るようにする、ように構成され、初期化命令は、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストを含み、第1のCPUのソフトウェア可視CPUコンテキストを、割込みをトリガした時点における第2のCPUのソフトウェア可視CPUコンテキストに回復するために使用され、CPUコンテキストは、システムレジスタの値及び汎用レジスタの値を含む。
一部の実装において、決定ユニット1010は具体的に、
第1のCPUに対応するアドバンスド・コンフィギュレーション・アンド・パワー・インタフェースACPIテーブルに従って、エラーのタイプを決定するように構成され、ACPIテーブルは、CPUのリライアビリティ・アベイラビリティ・アンド・サービサビリティRASノードの状態レジスタがポーリングされたときに発見されたエラーを記録するために使用され、又は
第1のCPUのRASノードの状態レジスタにポーリングして、エラーのタイプを決定するように構成される。
一部の実装において、決定ユニット1010は具体的に、
比較器回路に対応するRASノードの状態レジスタにクエリして、エラーが発生した第1のCPUと、エラーのタイプとを決定するように構成され、比較器回路は、少なくとも2つのCPUの出力が一致しないと決定したときに、第1の信号を割込みコントローラに送信するように構成され、第1の信号は、少なくとも2つのCPUがロックステップモードから抜け出ることをトリガするための割込みを、割込みコントローラが少なくとも2つのCPUに送信すべきことを指し示すために使用される。
一部の実装において、少なくとも2つのCPUの出力は、少なくとも2つのCPUの各々の内部バス出力、少なくとも2つのCPUの各々の外部バス出力、及び少なくとも2つのCPUの各々のL3キャッシュ制御ロジック出力のうちの少なくとも1つを含む。
一部の実装において、決定ユニット1010は更に、エラーが回復不可能なエラーである場合に、動作を停止するように少なくとも2つのCPUを制御するように構成される。
図10に示すエラーリカバリ装置1000は、前述の方法実施形態に対応するエラーリカバリ方法の対応するプロセスを実装することができる。具体的に、エラーリカバリ装置1000については、前述の説明を参照されたい。繰り返しを避けるため、詳細をここで再び説明することはしない。
一例として、エラーリカバリ装置は、端末であってもよいし、あるいは、端末内にあってエラーリカバリを実行するように構成された装置(例えば、チップ、又は、端末に整合して端末によって使用されることができる装置)であってもよい。端末は具体的に、スマートフォン、車載機器、ウェアラブル装置、又はこれらに類するものとし得る。オプションで、前述の車載機器は、自動車とは独立であるが、自動車に適用されることができるコンピュータシステムであってもよいし、あるいは、自動車(例えば、自動運転車)に統合されたコンピュータシステムであってもよい。
この出願の一実施形態は更に、コンピュータ読み取り可能記憶媒体を提供する。当該コンピュータ読み取り可能記憶媒体はプログラムコードを格納し、該プログラムコードは、前述の実施形態のうちのいずれかの実施形態に従った方法における一部又は全部の動作を実行するために使用される命令を含む。
オプションで、当該コンピュータ読み取り可能記憶媒体は端末内に配置され、該端末は、エラーリカバリを実行することができる装置とし得る。
この出願の一実施形態は更に、コンピュータプログラムプロダクトを提供する。当該コンピュータプログラムプロダクトがエラーリカバリ装置上で実行されるとき、エラーリカバリ装置が、前述の実施形態のうちのいずれかの実施形態に従った方法における動作の一部又は全てを実行する。
この出願の一実施形態は更にチップを提供する。当該チップはプロセッサを含み、該プロセッサは、前述の実施形態のうちのいずれかの実施形態に従った方法における一部又は全ての動作を実行するように構成される。
この出願の実施形態は、別個に使用されたり、あるいは一緒に使用されたりし得る。これは、ここで限定されることではない。
理解されるべきことには、この出願の実施形態における例えば“第1の”及び“第2の”などの記載は、記載されるオブジェクトを単に指し示して区別するために使用されているに過ぎず、シーケンスを示すものではなく、この出願の実施形態においてデバイスの数量が具体的に限られることを示すものではなく、また、この出願の実施形態に対する何らかの限定を構成するはずもない。
理解されるべきことには、上述のプロセスのシーケンス番号は、この出願の様々な実施態様における実行順序を意味するものではない。プロセスの実行順序は、プロセスの機能及び内部ロジックに従って決定されるべきであり、この出願の実施態様の実装プロセスに対する何らかの限定として解釈されるべきでない。
当業者が認識し得ることには、この明細書に開示された実施形態にて記述された例と組み合わせて、ユニット及びアルゴリズムステップは、電子ハードウェアによって、又はコンピュータソフトウェアと電子ハードウェアとの組み合わせによって実装され得る。機能がハードウェアによって実行されるのか、それともソフトウェアによって実行されるのかは、技術的ソリューションの特定の用途及び設計制約に依存する。当業者は、特定の用途ごとに、記載された機能を実装するために異なる方法を用いることができるのであり、その実装がこの出願の範囲を超えるものであると考えるべきではない。
当業者によって明確に理解され得ることには、簡便且つ簡潔な説明の目的のため、上述のシステム、装置、及びユニットの詳細な動作プロセスについては、上述の方法の実施形態における対応するプロセスを参照されたく、ここで再び詳細を説明することはしない。
この出願にて提供された幾つかの実施形態において、理解されるべきことには、開示されたシステム、装置、及び方法は、その他のようにして実施されてもよい。例えば、記載された装置の実施形態は単なる例である。例えば、ユニットへの分割は、単なる論理機能分割であり、実際の実装においてはその他の分割とし得る。例えば、複数のユニット又はコンポーネントが別のシステムへと組み合わされたり統合されたりしてもよく、あるいは、一部の機構が無視されたり実行されなかったりしてもよい。また、図示又は説明された相互結合又は直接結合又は通信接続は、何らかのインタフェースを用いることによって実装され得る。装置又はユニットの間の間接結合又は通信接続は、電子的な形態、機械的な形態、又はその他の形態にて実装され得る。
別々の部分として記載されたユニットは、物理的に別々であってもなくてもよく、また、ユニットとして示された部分は、物理的なユニットであってもなくてもよく、一箇所にあってもよいし複数のネットワークユニットに分散されてもよい。それらユニットの一部又は全てが、実施形態のソリューションの目的を達成するように、実際の要求に従って選択され得る。
また、この出願の実施形態における複数の機能ユニットが1つの処理ユニットへと統合されてもよく、あるいは、それらユニットの各々が物理的に単独で存在してもよく、あるいは、2つ以上のユニットが1つのユニットへと統合される。
機能がソフトウェア機能ユニットの形態で実装されて、独立したプロダクトとして販売又は使用されるとき、その機能はコンピュータ読み取り可能記憶媒体に格納されてもよい。このような理解に基づき、この出願の技術的ソリューションは本質的に、又は先行技術に対して寄与する部分は、又は技術的ソリューションの一部は、ソフトウェアプロダクトの形態で実装され得る。ソフトウェアプロダクトは、記憶媒体に格納されるとともに、この出願の実施形態にて記載された方法のステップの全て又は一部を実行するようにコンピュータ装置(これは、パーソナルコンピュータ、サーバ、又はネットワーク装置)に命令する幾つかの命令を含む。上述の記憶媒体は、例えばUSBフラッシュドライブ、リムーバブルハードディスク、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク、又は光ディスクなどの、プログラムコードを記憶することができる任意の媒体を含む。
以上の説明は、単にこの出願の特定の実装であり、この出願の保護範囲を限定することを意図するものではない。この出願にて開示された技術的範囲内で当業者が容易に考え付く如何なる変形又は置換も、この出願の保護範囲に入るものである。従って、この出願の保護範囲は、請求項の保護範囲に従うものである。