JP2015130170A - ハードウェア故障を実行アプリケーションに注入する方法を可能にする方法及びコンピューティングシステム - Google Patents

ハードウェア故障を実行アプリケーションに注入する方法を可能にする方法及びコンピューティングシステム Download PDF

Info

Publication number
JP2015130170A
JP2015130170A JP2014264456A JP2014264456A JP2015130170A JP 2015130170 A JP2015130170 A JP 2015130170A JP 2014264456 A JP2014264456 A JP 2014264456A JP 2014264456 A JP2014264456 A JP 2014264456A JP 2015130170 A JP2015130170 A JP 2015130170A
Authority
JP
Japan
Prior art keywords
fault
daemon
hardware
application
software stack
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.)
Granted
Application number
JP2014264456A
Other languages
English (en)
Other versions
JP6507633B2 (ja
Inventor
アラステア サザン・ジェームズ
Alastair Southern James
アラステア サザン・ジェームズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2015130170A publication Critical patent/JP2015130170A/ja
Application granted granted Critical
Publication of JP6507633B2 publication Critical patent/JP6507633B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/263Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
    • G06F11/2242Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors in multi-processor systems, e.g. one processor becoming the test master

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

【課題】 実行アプリケーションにハードウェア障害を注入する方法を可能にする方法及びコンピューティングシステムを提供する。
【解決手段】 リンク付けされるノードを含むハードウェアコンポーネントを有する分散型コンピューティングシステムにおいてアプリケーションの実行にハードウェア故障を注入する方法であって、故障トリガの結果としてハードウェアコンポーネントを不活性化又は劣化することにより故障を注入させる拡張ソフトウェアスタックをロードするステップと、前記ノードの各々で故障トリガデーモンを実行するステップと、ハードウェアコンポーネントに故障を注入するよう該ハードウェアコンポーネントを制御する前記ソフトウェアスタックの層をトリガするために前記デーモンのうちの1つを用いて、劣化又は不活性化のための前記故障トリガを提供するステップと、前記の注入された故障を有する前記アプリケーションの実行を継続するステップと、を有する方法。
【選択図】 図5

Description

本発明は、高機能コンピュータ(high-performance computer:HPC)システムのようなコンピュータシステムにおいて予期される故障、及びアプリケーションの実行中にどれが生じるかをエミュレートする方法に関する。この種の方法は、本願明細書では故障注入として参照される。これは、基本的に、アプリケーションの実行中の「人工的」エラーの挿入と同等である。
本発明は、耐障害性分散コンピューティングの分野に特に用途を見出し、exascaleコンピュータで使用するための新しいアルゴリズムの試験に重点を置く。
耐障害性コンピュータプログラムは、例えば単純な計算から画像レンダリング及び大規模な複雑なシミュレーションまで、オンザフライ及びオフライン処理を含む広範なアプリケーション分野で必要である。1つの重要な例として、極めて重要なジョブ(例えば、運用気象予報)又はシステム(例えば、インターネット)は、障害に対して回復力がなければならない。本発明は、これらのアプリケーション分野の全範囲を扱う。
計算の集中するアプリケーションは、通常、HPCシステムで実行される。HPCシステムは、実行ファイルの処理スレッドが自律的に並列に動作できる複数の処理ユニット又はコアが存在する分散環境を設ける場合が多い。
多くの異なるハードウェア構成及びプログラミングモデルは、高性能コンピューティングに適用可能である。高性能コンピューティングへの現在一般的なアプローチは、それぞれ1又は複数のマルチコアプロセッサ(又は「チップ」)を有する複数のノードが高速ネットワークにより相互接続されるクラスタシステムである。各ノードは、該ノード内の全てのコアによりアクセス可能な自身のメモリ領域を有すると想定される。クラスタシステムは、ハードウェア制御のような一般的機能を実行するために既存のコードライブラリを利用して、ソースコードを書く人間のプログラマによりプログラミングできる。次に、ソースコードは、低級実行可能コード、例えば特定の命令セットを有するプロセッサ種類により実行可能なISA(Instruction Set Architecture)レベルのコードに、又は特定のプロセッサ専用のアセンブリ言語にコンパイルされる。アセンブリコードを実行可能機械コードにアセンブリング(又は仮想機械の場合には、インタープリティング)する最終段階が存在する場合が多い。実行可能形式のアプリケーション(単に「実行ファイル」として参照される場合が多い)は、オペレーティングシステム(O/S)の監視下で実行され、ハードウェアを制御するためにO/S及びライブラリを用いる。使用される異なるレイヤのソフトウェアは、ソフトウェアスタックとして一緒に参照されても良い。
本願明細書で用いられる用語「ソフトウェアスタック」は、アプリケーションを実行するために必要な全てのソフトウェアを含み、基本レベルソフトウェア(オペレーティングシステム又はO/S)、例えばノード、ディスク若しくは他のメモリ等(一種のシステムソフトウェアも)とアプリケーション自体との間の相互接続のようなハードウェアコンポーネントと相互作用するライブラリを含む。現在実行中のアプリケーションは、システムソフトウェアの上の、ソフトウェアスタックの最上位層として見える。
複数のコアを有するコンピュータシステムのためのアプリケーションは、(C/C++又はFortranのような)従来のコンピュータ言語で記述され、コンピュータにマルチコアの並列処理能力を活用させるためにライブラリにより補強されても良い。これに関し、通常、コアで動作する「プロセス」を参照する。(マルチスレッド)プロセスは、マルチコアCPU内の複数のコアに跨って実行しても良い。このようなライブラリの1つは、MPI(Message Passing Interface)であり、分散メモリモデルを用い(各プロセスは各自のメモリ領域を有すると想定される)、プロセス間の通信を実現する。MPIは、プロセスのグループを定め区別できるようにし、複数のプロセス若しくは処理要素が一緒に動作可能なために重要な機能である所謂「バリア同期」のためのルーチンを含む。
代替で、共有メモリ並列プログラミングでは、全てのプロセス又はコアは、同じメモリ又はメモリ領域にアクセスできる。共有メモリモデルでは、(あるプロセスにより行われた変更は他の全てのプロセスに透過なので)プロセス間のデータ中心を明示的に指定する必要がない。しかしながら、1つのプロセスのみが同時にデータを変更することを保証するよう共有メモリへのアクセスを制御するために、ライブラリを用いる必要がある。
Exascaleコンピュータ(つまり、1exaflop(毎秒1018個の浮動小数点演算)の持続的性能を有するHPCシステム)は、2020年までに展開されることが期待される。この期間中にExascaleシステムを開発するための幾つかの国家プロジェクトが公表されている。petascale(現在の技術水準、約1015flops)からexascaleへの遷移は、ハードウェア技術における崩壊的変化を必要とすることが予期される。プロセッサのクロック周波数にはもはや増大しないので、性能向上は、並列性又は同時並列性の増大(最大で約10億個のコア)によりもたらされるだろう。許容可能なウインドウ内のexascaleシステムの能力使用を保つという要件は、低能力(及び低コスト)コンポーネントが用いられる可能性が高く、各コンポーネントの平均故障時間(mean-time-to-failure)の短縮をもたらすことを意味する。したがって、exascaleシステムは、現在の技術水準のシステムより多くのコンポーネントを含むだろう。そして各コンポーネントは、該コンポーネントの現在の等価物より頻繁に故障する可能性が高い。(現在のシステムでは日単位であるのに対して)exascaleシステムのコンポーネント平均故障時間は分単位で測定される可能性が高い。
したがって、特にexascaleソフトウェアは、コンポーネント故障を通じて動作し続ける能力が必要である。これは、共有又は分散メモリを用いるかに関係なく、全ての他のシステムでも要求されるが、HPCシステムでは特に要求される。これを行うことが可能な新しいアルゴリズムの開発は、現行の研究の話題である。これらの新しいアルゴリズムを確実にテストするために、それらを今日の分散システムで及び故障の存在する状態で実行することが有用である。大規模な現在のシステムでも通常、コンポーネント故障の間には複数の日数の間隔があるので、このテストを実行するために人工的に故障を注入することが適切であり得る。
人工的に故障を注入する必要は新しいものではなく、幾つかのクラスの故障注入技術が存在する。これらは以下を含む。
・ハードウェアに基づく故障注入:故障をより起こり易くするようシステムの環境を変更することにより、物理レベルで達成される。例えば、電源妨害、強いイオン放射若しくは電磁干渉、又はレーザ故障の注入。
・ソフトウェアに基づく故障注入:ソフトウェア内で起こり得るハードウェア故障の効果を再現することにより達成される。
・シミュレーションに基づく故障注入:生じると期待される故障の統計的モデルを含む、潜在的に故障のあるシステムのモデルを生成することにより達成される。
・エミュレーションに基づく故障注入:FPGA(field-programmable gate array)上の回路レベルで故障のあるシステムをエミュレートし、次にこれらをホストシステムに注入する、シミュレーションに基づく故障注入の拡張である。
しかしながら、これらの従来技術の各々は欠陥があるので、故障注入を達成する代替方法を提供することが望ましい。
本発明の一態様の実施形態によると、リンク付けされるノードを含むハードウェアコンポーネントを有する分散型コンピューティングシステムにおいてアプリケーションの実行にハードウェア故障を注入する方法であって、故障トリガの結果としてハードウェアコンポーネントを不活性化又は劣化することにより故障を注入させる拡張ソフトウェアスタックをロードするステップと、前記ノードの各々で故障トリガデーモンを実行するステップと、ハードウェアコンポーネントに故障を注入するよう該ハードウェアコンポーネントを直接制御する前記ソフトウェアスタックの層をトリガするために前記デーモンのうちの1つを用いることにより、劣化又は不活性化のために前記故障トリガを提供するステップと、前記の注入された故障を有する前記アプリケーションの実行を継続するステップと、を有する方法が提供される。
したがって、本発明の実施形態は、故障注入のためにデーモン(ユーザ制御下にないバックグラウンドレベルのプログラム)を用いる。このデーモンに基づく方法は、従来のソフトウェアに基づく故障注入と従来のハードウェアに基づく故障注入との中間位置として見える。
本発明の実施形態では、ロードされるソフトウェアスタックは、故障を注入できるようソフトウェアスタックの標準部分(又はライブラリ)に関して変更される拡張ソフトウェアスタックである。変更は、アプリケーション層の下のスタックにのみである。
故障は、例えば問題となっているコンポーネントの速度又は他の性能属性を低下させることにより、1又は複数のハードウェアコンポーネントの不活性化(又はオフへの切り替え)又は1又は複数のハードウェアコンポーネントの劣化を有し得る。単一のデーモンは、ノードの各々での故障実行をトリガするよう動作し、アプリケーションは、故障を注入されたにもかかわらず実行を継続する。
本発明の実施形態は、ソフトウェアで実装されるが、評価中のアプリケーションコードと独立に動作し及びハードウェアコンポーネントを不活性化又は劣化させるためにハードウェアに直接故障を効率的に注入する能力を有することを意図する。実施形態は、アプリケーションが実行されるときにハードウェアが応答する方法を変更するよう、ハードウェアを直接制御するソフトウェアスタックの部分を用い得る。したがって、実施形態は、シミュレーション又はエミュレーションに基づく技術に密接に関連せず、故障を注入する方法の点でハードウェアに基づく方法と異なり、及び主として故障が注入される場所の点でソフトウェアに基づく方法と異なる。既存のソフトウェアに基づく方法の主な制限は、通常、アプリケーションとの密接な統合のための要件(アプリケーションが実行される方法へのソースコードの修正又は変更、例えばデバッガの使用)、exascaleシステムで経験され得る故障の全範囲を注入することが出来ないこと(通常、メッセージは妨害され変更され得るが、ノードの完全な障害及び可能な回復をテストする設備はない)、及び/又は拡張できない方法でシステム全体に渡る膨大なツールを実行する必要があること、である。
有利なことに、幾つかの本発明の実施形態では、各デーモンは、オペレーティングシステム内で、該デーモンのノード上のバックグラウンドプロセスとして実行する。したがって、ソリューションは拡張性がり、テストされるべきアプリケーション内でいかなるソースコード変更も必要ない。
したがって、望ましくは、故障はアプリケーション実行とは別個に及びソフトウェアスタック内の異なるレベルで提供されるので、故障はアプリケーション実行と完全に独立して注入される。
デーモンは、故障をトリガするために任意の適切な方法で動作しても良い。幾つかの実施形態では、拡張ソフトウェアスタックは、アプリケーションのためのライブラリの拡張バージョンを有し、デーモンは故障を注入するよう、ハードウェアを制御する拡張ライブラリをトリガする。例えば、ライブラリは、標準命令及びハードウェアのための1又は複数の代替命令を有しても良く、故障の導入及び代替命令は、故障をトリガするためにデーモンにより効率的に選択されても良い。
一例として、拡張ソフトウェアスタック内のMPI又は相互接続ライブラリは、デーモンを介して故障を注入させる機能を有しても良い。
他の実施形態では、前述の実施形態と自由に組み合わせられても良く(したがって、異なる故障が並列に及び逐次的に注入されても良い)、拡張ソフトウェアスタックは、アプリケーションのためのオペレーティングシステムの拡張バージョンを有し、デーモンは故障(場合によっては、別のトリガにより注入される故障と異なる故障)を注入するよう、ハードウェアを制御するオペレーティングシステムをトリガする。
このような例では、オペレーティングシステム自体がトリガされる。どこで故障が生じるかにかかわらず、故障がデーモンによりトリガされ、次にデーモンは、ハードウェアの動作を変更するために該ハードウェアを制御するソフトウェアスタックの部分(例えば、変更ライブラリ又はオペレーティングシステム)と相互作用する。
最大の柔軟性及び全クラスの故障をカバーするために、オペレーティングシステム及び任意の適用可能ライブラリの両方は、拡張できる。しかしながら、幾つかの場合には、デーモンは、オペレーティングシステムにいかなる変更も必要としない動作を行う(又は動作を省略する)ために、単に標準(拡張されていない)オペレーティングシステムをトリガできる。したがって、特定の故障が注入されるソフトウェアスタックの部分は、幾つかの種類の故障のために拡張される必要がない。しかしながら、他の故障は、注入のためにソフトウェアスタックの拡張を必要とする。したがって、ソフトウェアスタックは、広範な故障を提供し及び現実的なテストベッドを与えるために常に拡張されるだろう。
オペレーティングシステム又はライブラリが故障トリガで用いられるかは、ハードウェアが主としてオペレーティングシステムにより(メモリ又はCPUのようなノードに物理的に配置される部分のための場合に可能性が高い)又はライブラリにより(相互接続及び場合によってはネットワークメモリのようなノードに物理的に配置されない部分のための場合に可能性が高い)制御されるかに依存しても良い。
デーモン間に特定のリンクが存在しても良く、中央制御の特定の要素も存在しても良いが、望ましくは、デーモンは互いに独立して及び任意の中央制御と独立して実行する。これは、ハードウェア故障の正確なモデルを提供する。これは、侵襲性が最小限であり、拡張性を有する。したがって、各ノードは、通信の失敗により、どこかに注入された故障に気付くことができるだけである。
また、デーモンは、任意の適切な方法により制御されても良い。例えば、デーモンは、該デーモンが実行しているノードにどんな故障が注入されるべきかを示す1又は複数のファイルにより制御されても良い。故障のタイミングが示されても良く、したがって、ファイルはどんな故障がいつ注入されるかを示す。各デーモンは、異なる入力ファイルを送信され、又は関連情報について単一のファイルを全て解析し得る。したがって、中央制御の必要は取り除かれる。
特に、1又は複数の制御ファイルがいつ故障が注入されるべきか又はいつ制御ファイル配置が存在しないかの時間的指示を与えない場合、デーモンは、どんな故障を該デーモンがいつ注入するかの記録を保持できる。
したがって、各デーモンは、いつ故障が生じるかを、望ましくは統計的モデルを用いて決定しても良い。
故障により影響を受け得るハードウェアの一部のある重要な例は、相互接続である。したがって、故障を注入するようオペレーティングシステムを制御できることに加えて又は代替で、有利なことに、各デーモンは、故障を注入するよう、拡張MPI及び/又は他の拡張相互接続層のような拡張メッセージインタフェースを制御できる。
デーモンは、特定の故障の注入後、該特定の故障に関して更なる動作を行う必要がない。しかしながら、幾つかの実施形態では、デーモンは、劣化した又は不活性化したハードウェアコンポーネントの回復を指示するために、故障トリガの後に回復トリガを提供できる。有利なことに、回復トリガは、時間遅延の後にデーモンにより提供される。例えば、時間遅延は、ハードウェアコンポーネントが回復し得る故障を再生成するために、例えばノードのリブートによりハードウェア故障が自動的に解決される遅延を反映しても良い。
デーモンの使用及びアプリケーションレベルより下のソフトウェアのみが変更される拡張ソフトウェアスタックの使用の結果として、故障注入は、アプリケーションのソースコードへの変更を有しないで及びアプリケーションの構成、コンパイル及び実行のいずれへの変更も有しないで、実行できる。
当業者は、ソフトウェアスタックを形成する他の部分と同様に相互接続層を制御するオペレーティングシステム及びライブラリは、システム内に分散され、又は物理的記憶媒体に格納され、又はダウンロードされても良い。同様に、デーモンは、任意の方法で、望ましくはソフトウェアスタックと同じ方法で、分散されても良い。
上述のように、拡張ソフトウェアスタックは、任意の適切な方法で提供されても良い。一実施形態では、拡張ソフトウェアスタックは、ライブラリを検索するために、例えばLD_PRELOADにより指定される場所の変更されたリストを用いて例えばダイナミックリンカにより静的に又は動的にロードされる。LD_PRELOADは、検索ライブラリのダイナミックリンカにより用いられる場所のリストである。拡張ライブラリの場所は、LD_PRELOADを用いてリンカに指定される。
LD_PRELOAD及びそれと等価なものの目的は、リンカが先ず(システムライブラリの前に)これらの場所を探し、それらを含むライブラリがいつロードする又はロードされているかにかかわらず、本発明が、ハードウェアを制御するために用いられる機能を無効にできるようにする。さらに、LD_PRELOADにより指定されるライブラリは、故障を注入するための変更された機能を含む必要があるだけである。全ての他の機能について、アプリケーションは、場所の標準リストLD_LIBRARY_PATHにより指定される場所と共に、「標準」ライブラリに頼ることができる。
本発明の更なる態様の一実施形態によると、分散型コンピューティングシステムであって、ハードウェアコンポーネントと、実行アプリケーションにハードウェア故障を注入する方法を可能にするソフトウェアスタックと、を有し、前記分散型コンピューティングシステムは、相互作用にリンク付けされるノードと、前記アプリケーションのためのソフトウェアスタックの拡張バージョンであって、1又は複数のハードウェアコンポーネントを故障トリガに続いて不活性化又は劣化させるよう動作する、ソフトウェアスタックの拡張バージョンと、それぞれ単一のノードに関連付けられるデーモンであって、各デーモンは、ハードウェアコンポーネントに故障を注入するよう該ハードウェアコンポーネントを制御する前記ソフトウェアスタックの層をトリガすることにより、劣化又は不活性化のために故障トリガを提供するよう動作する、デーモンと、を有する分散型コンピューティングシステムが提供される。
この状況では、分散型コンピューティングシステムは、ハードウェア、並びに該ハードウェアのために現在提供されるソフトウェアスタックを有する。
本態様は、相互接続にリンク付けされるノードを含む分散型コンピューティングシステムを表す。しかしながら、当業者は、ハードウェア故障を注入する方法が、リンク付けされたノードのようなハードウェアを含む任意のコンピューティングシステムに適用可能であることを理解するだろう。システムの唯一の要件は、アプリケーションの耐障害性を評価するためのテストベッドとして動作できることである。
本発明の更に別の態様の一実施形態によると、リンク付けされたノードを含むハードウェアコンポーネントを有する分散型コンピューティングシステムの単一のノードで動作する故障トリガデーモンであって、前記コンピューティングシステムは、ハードウェア故障をアプリケーションの実行に注入する情報を実行するよう配置され、前記デーモンは、ソフトウェアスタックの一部が制御しているハードウェアコンポーネントを不活性化し又は劣化するよう前記ソフトウェアスタックの前記一部をトリガすることにより、ハードウェアコンポーネントの劣化又は不活性化のために故障トリガを提供するよう動作する、故障トリガデーモンが提供される。
本発明の更に別の態様の一実施形態によると、ソフトウェアスタックであって、アプリケーションと共に使用し、オペレーティングシステム層と、リンク付けされたノードを含むハードウェアコンポーネントを有する分散型コンピューティングシステムのハードウェアを制御する少なくとも1つのライブラリ層とを有し、前記ライブラリ層及び/又はオペレーティングシステムは、前記コンピューティングシステムの単一のノードで動作する故障トリガデーモンを用いて、前記アプリケーションの実行にハードウェア故障を注入できるよう拡張され、ハードウェアコンポーネントの劣化又は不活性化のために故障トリガを提供する、ソフトウェアスタックが提供される。
上述の態様の各々の個々の特徴及び小特徴は、他の態様で提供されても良い。したがって、例えば、上述の好適な方法の特徴は、上述の分散型コンピューティングシステム及び/又は故障トリガデーモン及び/又は拡張ソフトウェアスタックに適用されても良い。
方法のステップは、請求の範囲における該ステップの定義と異なる順序で実行され、依然として所望の結果を達成しても良い。例えば、ダイナミックリンカと共に、ソフトウェアスタックの一部又は全部は、アプリケーションの実行中に動的にロードでき、したがって、このステップのタイミングは、デーモンが実行する前、又はデーモンが実行している間であっても良い。
単に例として、添付の図面を参照する。
分散型コンピュータシステムの概略図である。 ソフトウェアに基づく耐故障性テストベッドを示すノード及び相互接続の概略図である。 メッセージキャプチャによる故障注入の方法を示す相互接続によりリンク付けされたノードの概略図である。 本発明の実施形態による方法を示す相互接続によりリンク付けされたノードの概略図である。 本発明の実施形態による方法において実行されるプロセスを示す概略フロー図である。 本発明の実施形態によるデーモンに基づく故障注入と故障注入を有しないシナリオとの間の差を示す2つの並列フローチャートのセットである。
最新世代のスーパーコンピュータは、数十万又は数百万個ものコアを含む。10Pflop/sを超える持続性能を有する2013年11月のTOP500リストの4個のシステムは、3,120,000(Tianhe-2)、560,640(Titan)、1,572,864(Sequoia)、705,024(Kcomputer)個のコアを含む(http://www.top500.org/list/2013/11/)。petascaleからexascaleへの移行では、主な性能利得は、システム内の合計コア数が10億個以上に増大することによりもたらされる(コア当たりのflopsは増大することが期待されない)。システム内のノー度数が増大するにつれ(及び、特に、許容可能な電力エンベロープを維持するために低コスト低エネルギノードが用いられる場合)、該システムのコンピュータ平均故障時間は、最終的にはシステムの平均シミュレーション実行より短い時間まで、短くなるだろう。したがって、ソフトウェア及び特にexascaleソフトウェアは、耐コンポーネント障害性を有する必要がある。
exascale及び他のシステムは、相互接続を介して共にネットワーク接続される例えば種々のノードを有する。全体システムが大きくなるにつれ、故障は該システムの任意の部分で生じ、exascaleシステムで動作されるソフトウェアはこれらの故障のうちの任意の故障を処理できる必要がある。アプリケーションが回復力を有するべき故障は、コンポーネントの完全な故障、コンポーネントの機能を低下させるコンポーネントの一部の故障、又はコンポーネントの性能劣化を含む(しかし、これらに限定されない)。
図1は、故障を経験し得る分散型コンピュータシステム10の概略である。システムは、相互接続30により接続される多数のノード20を有する点で、分散型である。相互接続は、冗長性を有しても良い。つまり、メッセージは、1より多い経路により任意の2個のノード間で渡され得る。アプリケーションは、特にexascaleでは、個々のノードにおいて、相互接続において、及びシステムの任意の他のコンポーネント(例えば、I/O、ディスク)において、故障(Xにより示す)に対する回復力がある必要がある。故障は、コンポーネントの完全な故障、機能を低下するコンポーネントの幾つかの部分の故障、又はコンポーネントの他の性能劣化を含んでも良い。
(システムが開発されると直ぐに生産的使用の準備が整うことを保証するために)exascaleシステムがソフトウェアを実行するために利用可能になる前に、該ソフトウェアを耐コンポーネント障害性を有するようにするために必要な方法を開発することが重要である。しかしながら、最大規模の現在のシステムでも、exascaleシステムが予測される程までは故障を経験しない。したがって、システムがexascaleで開発される前に、耐障害性アルゴリズムを評価するテストベッドを開発することが重要である。発明者等は、実行中アプリケーションと独立している及び望ましくはexascaleで(若しくは他の複合システムで)経験されるハードウェアコンポーネント故障からそれらのアプリケーションを区別できない、テストシステムに故障を注入する、ソフトウェアに基づく方法を提案することが望ましいことを理解している。これは、ある範囲の可能な耐障害性プログラミングアルゴリズムの信頼できるテストを可能にし、評価されるべき各ソフトウェアパッケージ内の合成故障を再実装する必要を有しないので効率的である。
<技術的課題>
発明者により特定された問題に関連する主な技術的課題は、例えばexascaleシステムで、アプリケーション実行の経験を正確に再生成するために、どのように最も効率的にシステムに故障を注入するかである。
アプリケーションの開発中及びテスト中に、テストシステムのコンポーネントを物理的に損傷することは望ましくない。これは、新しいアルゴリズムの開発をテストするために、ハードウェアに基づく故障注入を使用することを除外する(しかしながら、これらは、限られた数のコンポーネントのみが損傷されるとき、展開直前の完成したアルゴリズムの最終試験段階では適切であり得る)。シミュレーション及びエミュレーションに基づく方法は、(シミュレートされる又はエミュレートされる)特定のシステムを対象とするので、一般的な場合には適切ではない。さらに、シミュレーションに基づく方法の場合には、シミュレートされるシステムは、シミュレートしようとする実際のシステムより遙かに遅く動作し、実際のアプリケーションの実行を消費するシミュレーション時間内にする。
したがって、ソフトウェアに基づく方法の使用は、前述の実施形態における使用のために好ましい。また、技術的課題は、配置されるべき故障注入器のためのソフトウェアスタックの適切なレベル及び現実の故障を実装する最適な方法を識別することであると決定される。理想的には、解決策は、以下の特性の一部又は全部を有するべきである。
・アプリケーションソフトウェアに見えない。望ましくは、アプリケーションは、コンパイルされる、又は対象とされているexascaleシステムで実行される方法と異なる方法で実行される必要はない。
・故障の全てのクラスをカバーする。ソリューションは、有利なことに、ノード故障、メッセージ損失、及び任意のコンポーネントの性能劣化を含むexascaleシステムで経験され得る任意の種類の故障を再生できるよう十分に柔軟であり得る。理想的には、これらの故障は任意の時間に生じることができる。したがって、理想的な状況は、アプリケーションが実行しているハードウェアを制御する能力を有する。
・低性能オーバヘッド。アプリケーションに耐障害性を追加することの性能面の影響は定量化される。故障注入方法は、有利なことにアプリケーションの実行時間を有意に変更しない。
・拡張性。exascaleアプリケーションは、大規模システムでのテストを必要とする。したがって、故障注入方法は、有利なことに、複数の計算ノードに渡り同時に実行できる。
・再現性。アプリケーションに悪影響を与える故障が識別されると、アプリケーションを該障害に対して耐障害性を有するようにすることを目的とする可能な変更をテストするために、要求に応じて該障害を再生できることが望ましい。
<現在の技術水準>
ソフトウェアに基づく故障注入の現在の技術水準は、方法の2つの基本的サブクラスを有するように見える。故障注入の第1の(及び最も単純な)方法は、経験され得る可能な故障の統計的モデルを含むようアプリケーションソフトウェアを変更すること、及びそれらの故障の発生の結果もたらされ得る動作に実行中アプリケーションの動作を変更することである(例えば、相互接続の故障をシミュレートするためにメッセージが送信されない、又はノードの故障をシミュレートするためにMPIプロセスが終了される)。
図2は、テストされるべきアプリケーション内に埋め込まれる一般的な従来のソフトウェアに基づく耐障害性機能を示す。概略図は、相互接続30により接続される、分散型システム10の多数のノード20のうちの4個のみを示す。図は、オペレーティングシステム(O/S)の、並びにメッセージを渡すために用いられ及びノードの各々の内部及びそれらの間に含まれるMPI層の包含によりソフトウェアスタックの部分を示す。MPIライブラリ層は、図中で40を付される。ノード上で実行中のアプリケーションは各ノードにおいて示され、ブロックの右下隅にはアプリケーションコード内に故障が注入されていることを示す。アプリケーションソースコードは、経験され得る可能な故障の統計的モデルを含むよう、及び実行中アプリケーションの動作を該障害の発生の結果もたらされ得る動作に変更するよう、変更されても良い。
この従来の方法は、(アプリケーションが実行中にいつ故障が生じるかを制御するので)アプリケーション上の故障の影響が再生可能であることを保証し、小さいオーバヘッドを有し拡張性を有する可能性が高い。しかしながら、これは、上述の望ましい特性のうちの幾つかを満足しない。最も留意すべきことに、この方法はアプリケーションに見えないものではない。実際に、この方法は、任意の故障の全体的な特徴付けがアプリケーションソースコードに追加されなければならないので、ソースコードに対する有意な変更を必要とする(及び、この方法は、テストされるべき任意の新しいアプリケーションのために繰り返されなければならない)。この方法は、実行中の任意の時間に生じる故障の全てのクラスを網羅する可能性が低い。故障は、アプリケーションが、注入故障を含むよう変更された該アプリケーションのソースコードの一部を実行しているときにのみ生じることができる。大部分のアプリケーションは幾つかの実行段階を有するので、全部が変更される可能性は低く、さらに、2つの異なる実行段階の間のインタフェースにおいて生じる故障を網羅することは非常に困難である可能性が高い。さらに、この方法で注入された故障は、現実のシナリオを表現するために十分に変動されない。例えばノードをリブートするために又はあるノードから送信され別のノードで受信されるメッセージを妨害するために、アプリケーションは、ソフトウェアスタックの十分に広範な部分へのアクセスを有しない。良好なソリューションは、アプリケーションソフトウェアから分離され得る。これは、以下の通りであり得る。
・アプリケーションに都合の良いときにアプリケーションにそれ自体の故障を注入させるのではなく、アプリケーションが任意の又は少なくとも大部分の生じる故障に反応できることを要求する。
・シミュレートされた故障を関心のある各アプリケーションに個々に追加することを要求するのではなく、任意のアプリケーションと並行して実行できる汎用的ソリューションを提供する。
図3は、メッセージキャプチャによる故障注入の可能な方法の概略を示す。ここで、全体的なハードウェア及びソフトウェアスタックは図2に示したものと同じである。簡単のためにこれらの更なる説明は省略する。各ノードで動作中のデーモン又はスクリプトは、アプリケーションコードにより送信されるべきメッセージをキャプチャし、それらに選択的に故障を注入する。多くの(しかし全部ではない)場合では、故障注入は、別個の制御ノードから制御される。
この故障注入方法の第2のクラスは、主として、ノード(幾つかのノードは他の種類の故障を注入し得る)間で渡されるメッセージを妨害すること(及び場合によっては変更すること)に焦点を当てる。これらの方法は、メッセージ受け渡しプロセスを制御するために、オペレーティングシステム(O/S)レベルでスクリプト又はデーモンを使用する。統計的モデルは、いつ故障が注入されるべきかを決定する。次に、スクリプト又はデーモンは、メッセージが該メッセージの宛先に送信される前に、該メッセージを変更する(又は削除する又は遅延させる)。メッセージは、図3中に太い矢印で示される。ここで、中央制御は各ノードへの薄い矢印として示される。ここで、デーモン又はスクリプトは、メッセージを妨害することによりアプリケーションの実行と直接インタフェースする。したがって、これらの方法は、ハードウェアコンポーネント自体の性能を非活性化若しくは低下させない。しかし、妨害されたメッセージがハードウェアコンポーネント間で送信されるだけである。
これとは対照的に、本発明の実施形態による方法は、例えばオペレーティングシステム又はソフトウェアスタックのライブラリを介して、関連するハードウェアコンポーネントに故障トリガを提供し、アプリケーションコードとのいかなる相互作用も、又はアプリケーション実行自体の固有の効果も有しない。
メッセージ妨害方法は、通常、上述のアプリケーションに基づく技術より汎用的でありポータブルであり、(アプリケーションではなくO/S内で実行されるので)広範な故障をカプセル化できる。しかしながら、メッセージ妨害方法は、本発明の方法と比べて幾つかの深刻な制限を有する。これらは以下を含み得る。
・これらの方法の多くは、(例えば、デーモン又はスクリプトにメッセージが送信される前に該メッセージを妨害させるために)ソースコード又はアプリケーションを実行する方法のいずれかに変更を必要とする。
・これらの方法は、主として、「ソフト」故障(例えば、計算中のエラー又はメッセージの破損)に焦点を当てる。
・多くは、システムの全ノードへの故障の注入を管理する中央制御装置を有する。方法は、非常に大規模なシステムでのテストを可能にするために拡張性がない。
<本発明の実施形態>
したがって、分散型コンピューティングシステムにおいて、特にexascaleで期待される故障に対して耐障害性を有するアルゴリズムの開発により適するソリューションへの要求が依然として存在する。図4に、本発明の実施形態による配置を示す。図4は、図2及び3と同じバックグラウンド構造で示されるデーモンに基づく故障注入のために使用されるシステムの概略である。簡単のために、既に言及された部分の説明はここでは省略する。
各ノードで実行するデーモン50は、(統計的モデルに従って)いつ故障が生じるかを決定する。これらの故障は、(ノードのシャットダウンをトリガするために)O/Sに又は潜在的に故障する可能性のあるハードウェアコンポーネントとインタフェースするライブラリの拡張バージョンに(これらのライブラリは、LD_PRELOADを用いてアプリケーションに透過的にロードされる)注入される。標準ソフトウェアスタックと比べて追加コンポーネント(デーモン及び拡張ライブラリ機能60)は暗い陰影で示される。
本実施形態では、デーモンは各ノードで独立して実行し、統計的モデルに従っていつ及びどんな種類の故障が生じるかを決定する。潜在的に欠陥のあるハードウェアコンポーネント(例えば、相互接続、ディスク、メモリ)とインタフェースするO/S及びライブラリの拡張バージョンは、LD_PRELOAD環境変数を用いてアプリケーションに透過的にロードされる。これらの拡張ライブラリは、デーモンからのトリガに続いてハードウェアコンポーネントを不活性化させる(又はハードウェアコンポーネントの性能を低下させる)ための変更を含む点を除き、標準ソフトウェアスタックと同様に機能する。
アプリケーションには、結果として生じる故障は、ライブラリにより管理されるハードウェアコンポーネント内の実際の故障と区別できないだろう。さらに、各ノードでの故障は互いに独立して生じ、各ノードは、失敗した通信の結果として、システム内のいずれの場所における障害も単に検出できる(及びそれに反応できる)。再び、これは、実際のexascaleシステムで生じるものと一致する。特定のシナリオに対するアプリケーションの耐障害性を増大する新しい方法をテストするために同じ故障シナリオが複数回再生できるようにする目的で、各ノードのデーモンは、どんな故障がいつ注入されたかの記録を保持する。
図5は、本発明の実施形態による汎用的方法の概略フローチャートである。ステップS10で、拡張ソフトウェアスタックがロードされる。つまり、ソフトウェアスタックの特定部分又はソフトウェアスタックの全部は拡張されても良い。ロードは、(アプリケーションの実行中に)動的又は静的であっても良い。
ステップS20で、デーモンは各ノードで実行される。熟練した読者は、他の配置も可能なことを理解するだろう。例えば、幾つかの独特な実施形態では、デーモンは、ノードのサブセット、例えば全ての他のノードで実行されても良い。
幾つかの場合には、ステップS10及びS20は、例えばダイナミックリンクが用いられる場合には、並列に又は部分的に並列に実行されても良い。
ステップS30で、デーモンのうちの1つは、アプリケーションの実行中に故障トリガを提供する。勿論、例えばより広範囲の障害をシミュレートするために、追加故障が同時に注入されても良い。故障トリガは、拡張ソフトウェアスタックを介して(例えば、拡張されている場合、拡張ライブラリ又は拡張オペレーティングシステムを介して)注入されても良い。しかしながら、幾つかの実施形態では、全ての故障トリガが拡張ソフトウェアスタックを用いるわけではない。例えば、故障トリガは、その特定の故障のために拡張が必要でない場合、通常のオペレーティングシステムを介して提供されても良い。
ステップS40で、アプリケーションの実行は継続する。更なるトリガは、図示のように、同じ又は異なるデーモンに提供されても良い。
<ソフトウェアスタック>
ソフトウェアスタックは、拡張(又は変更)ライブラリを有する。標準ライブラリは、既に(該標準ライブラリの機能である)ハードウェアを制御する。しかしながら、標準ライブラリは、(デーモンにより促されたとき)ハードウェアを「破壊する」機能を有しない。なぜなら、(a)通常動作では実際にこのための使用例が存在しないから、及び(b)デーモンは標準システムの一部ではないから、である。
例えば、相互接続のコア又は1「区間(leg)」に影響を与える、本発明の実施形態を用いて生成され得るハードウェアコンポーネント性能及び機能の低下の多くの例がある。大部分の現在のCPUはマルチコアなので、1つの物理的コア内の障害は、必ずしもノードの完全な障害をもたらさないが、(必要な計算をすべきコアが1つ少なくなるので)ノードの性能を低下させるだろう。
したがって、拡張ライブラリは、標準ライブラリと基本的に異なる方法でハードウェアと相互作用しないが、拡張ライブラリは、標準ライブラリが同じライブラリ呼び出しを介してすることと異なることをするようハードウェアを促す(促しても良い)。例えば、標準的なMPI_Send()ルーチンの呼び出しはメッセージを送信させるが、拡張ライブラリは異なるバージョンのMPI_Send()を有しても良い。異なるバージョンのMPI_Send()は、通常はメッセージを送信するようハードウェアを催促するが、(デーモンにより故障が注入された場合には)メッセージを誤った場所へ送信させる、メッセージの破損したバージョンを送信させる、又は短い遅延の後にメッセージを送信させる。これらは、ハードウェアレベルの問題と等価である。
同様に、相互接続は、通常、特定のレベルの冗長性を有し構築される(したがって、メッセージは障害が生じたときには異なる経路により送信され得る)。したがって、1つの区間内の障害は、相互接続の全体的障害をもたらさないかも知れない。しかしながら、メッセージがより遠回りの経路により送信されなければならない場合(又は複数のメッセージが減少した帯域幅を争う場合)、相互接続の性能は低下する可能性が高い。
コンピュータシステム内のハードウェアと相互作用する任意のライブラリは拡張され得る。幾つかの例を以下に提供する。MPIは最も明らかな例である。なぜなら、MPIは(少なくとも部分的に)相互接続を制御するが、拡張された的確なライブラリはハードウェア利用可能性に依存する(及び時間とともに変化しても良い)。例えば、大変異なるライブラリは、Linux(登録商標)を実行するIntelに基づくクラスタではなく、SPARCに基づくシステムで用いられても良い。
相互接続を制御するためにMPI以外のライブラリを用いることができる。したがって、MPI以外のライブラリは拡張されても良い。例えば、infiniBand相互接続を制御する種々のlibib*ライブラリ(例えば、libibverbs、libibcm)が存在する。別の例は、ラスタ(lustre)ファイルシステムを制御するためにliblustreの使用であっても良い(しかしながら、Linuxを実行するシステムでは、これはO/Sを介して実行される可能性の方が高い)。C実行時ライブラリ(libc)は、ローカルメモリを破損させるために、例えばmalloc又はfreeの代替バージョンを指定することにより変更され得る。アプリケーションからハードウェアを隠すために(つまり、故障の出現を与える)、hwloc又はpthreadsのようなライブラリを変更することも可能であって良い。当業者は、これらが多くの異なる可能性のうちのほんの少数であることを理解するだろう。
図6は、本発明がどのように動作し得るかのより特定の実施形態を与えるために、故障注入無しとデーモンに基づく故障注入との間の比較を示す2つのフローチャートを示す。
左側のフローチャートでは、故障注入が無く、したがって、アプリケーションライブラリ及びハードウェアは正常に機能する。ステップS100で、アプリケーションはライブラリ呼び出しを行う。ステップS110で、ライブラリはハードウェアに命令を渡す。ステップS120で、ハードウェアは命令を実行する。
右側のフローチャートでは、変更又は拡張ライブラリの使用は、デーモンに基づく故障注入を可能にする。ステップS130で、アプリケーションは、標準的方法と全く同じにライブラリ呼び出しを行う。ライブラリ呼び出しが標準ライブラリに渡される場合、ステップS140で、標準ライブラリは命令をハードウェアに渡し、ステップS150で、ハードウェアは故障が挿入されずに命令を実行する。
他方で、呼び出しが変更ライブラリにリンク付けされる場合、ステップS160で、これは、標準ライブラリへの呼び出しを効率的に妨害する。ステップS170で、デーモン内の統計的モデルは、故障が変更ライブラリに注入されるべきか否かを決定する。ステップS180で、ライブラリは、ハードウェアに任意のトリガされる故障を注入する。ライブラリの変更バージョンは、デーモンと相互作用するために「フック(hook)」を有しても良い。したがって、例えば、各標準ライブラリ呼び出しは、デーモンが故障を注入する場合をカバーするためにelse文を伴い、if文(例えば、if(daemon.hasnofault())内にあっても良い。したがって、相互作用は反作用を示す。ライブラリは、何かを行わなければならないとき、先ずデーモンに問い合わせて、故障が注入されているかどうかを調べる。
S180は、前段落で言及した、(故障が無い場合に)通常実行で進むか又は変更関数呼び出しを実行するか(例えば、メッセージを誤った場所へ送信する)に関するif−else決定を行うライブラリを示す。
ステップS180で故障が注入されていない場合、ステップS190で元の命令はハードウェアに渡され、ステップS150でハードウェアは従来通り故障を有しない命令を実行する。
他方で、ステップS180で故障が注入された場合、ステップS200で変更された命令がハードウェアに渡され、ステップS210でハードウェアはアプリケーションにより期待される命令と異なる命令を実行して、故障を生じる。
本発明の実施形態は、以下の利点のいずれかを組み込み得る。
・ハードウェアコンポーネントとインタフェースする標準ライブラリを、デーモンからのトリガに応答してハードウェアの部分を無効化できる拡張バージョンで置き換えるために、LD_PRELOAD又は同様の機能を使用できる。
これは、故障が存在する場合、アプリケーションのソースコードに又はソースコードが構成され、コンパイルされ又は実行される方法にいかなる変更も有しないで、アプリケーションを実行できる。
・ハードウェアレベルの故障を制御可能な方法で実際のHPCシステムに直接注入するために、開発中の耐障害性アプリケーションと独立に実行する(基本的にソフトウェアに基づく)デーモンを使用できる。既存のソリューションはより限定的である。
ハードウェアに基づく方法。これらは、制御不可能な方法で故障を注入し、使用中のシステムに永久的な損傷を引き起こし得る。本発明の実施形態は、この制限を克服できる。
ソフトウェアに基づく方法。これらは、開発中の耐障害性アプリケーションのソースコードへの変更を必要とし、通常、注入インスタンスの限られたセット(これは、アプリケーションコードの全ての部分をカバーできない)に故障を注入できるだけである。本発明の実施形態は、このような制限に苦しまない。
他のデーモンに基づく方法(例えばFAIL-FCI)は、アプリケーションがデバッガにより実行されることを必要とする。デーモンは、デバッガを介してソフトウェアに故障を注入する(つまり、ソフトウェアは、ハードウェアレベルの故障をシミュレートするために用いられる)。これに対して、本発明の実施形態は、実際のハードウェアレベルの故障を導入することを提案する。
・最小限の侵襲性。各ノードのデーモンは、互いに独立に実行できる。あるノードにおける故障は、他のノードに間接的に(例えば、受信されるべきメッセージの物理的障害により)見えるようになるだけである。これは、ソリューションが拡張可能であること、及び注入された故障がアプリケーション内で実際の故障と同じように自身を表すことを保証する。
故障を注入するのに加えて、故障に続きノードを回復させる能力。ソフトウェアにハードウェアを制御させることにより、回復可能な故障に苦しむノードの影響を再現するために、デーモンは、ノードをシャットダウンし、次に(任意で)(場合によっては特定の時間遅延の後に)ノードをリブートする能力を有し得る。次に、このノードは、実行アプリケーションにより再利用され得る。
実施形態は、既存の従来技術に対して以下の利益のいずれか又は全部を有し得る。
・ハードウェアの動作を制御できるO/S内で実行するデーモンの使用は、(ハードウェアに基づく方法の結果として生じる)システムを損傷する危険を有しないで、(ソフトウェアに基づく方法と比べて)より広い範囲の故障を注入できる。
・デーモンの使用は、後の実行で、(ハードウェアレベルで)同じ欠陥動作を再現できる。したがって、提案されたソリューションが検討中の故障に対して耐障害性を有することを検証するための反復テストが、実行できる。
・デーモンは、注入された故障に続いてハードウェアコンポーネントを再起動する能力を有する。一方で、標準的なハードウェアに基づく故障注入器は、ノードの永久的な損傷をもたらす。これは、回復したノードを再利用できるアルゴリズムのテストを可能にする(及び、ノードの故障時間をシミュレートしなければならないソフトウェアに基づく注入器と比べて再起動のための現実的な時間枠を提供する)。
・他のソフトウェアに基づく故障注入方法とは対照的に、テストされるべき耐障害性アプリケーションにおいて、いかなるソースコード変更も必要なく、アプリケーションはデバッガを介して実行される必要がない。これは、故障(利用可能なデバッギングを有しないバイナリバージョンのみが利用可能な故障も含む)が存在する状況で任意のアプリケーションがテストできるという利点も有する。
・耐障害性アプリケーションの全てのコンポーネントをテストする能力、つまり故障の存在する状況で実行し続ける能力、及び期待される性能レベルを維持するためにノードがオンラインに戻ったとき、回復したノードを使用する能力(故障が生じたときにより小数のノードを積極的に使用するアプリケーションは、耐障害性があるが、場合によっては許容できない性能低下に苦しむ)の両方。
・低性能オーバヘッド。通常、O/Sは、各ノードで幾つかのバックグラウンドプロセスを実行する。これらに追加デーモンを追加することは、性能に大きな影響を与えない。
<まとめ>
本発明の実施形態は、耐障害性アルゴリズム並びにHPC及びexascaleコンピューティングのために開発されているソフトウェアのためのテストベッドを提供する。exascaleスーパーコンピュータは、現在の高性能コンピューティング(HPC)システムよりも遙かに頻繁にコンポーネント障害を経験するだろう。したがって、アプリケーションがこれらの障害を処理できるようにするために、耐障害性方法を開発する必要がある。本発明の実施形態は、今日の非常に小さな(及びより信頼できる)システムで用いることができる、exascaleシステムで期待される故障をエミュレートする新しい方法を提案する。
10 分散型システム
20 ノード
30 相互接続
40 MPIライブラリ層
50 デーモン
60 拡張ライブラリ機能

Claims (17)

  1. リンク付けされるノードを含むハードウェアコンポーネントを有する分散型コンピューティングシステムにおいてアプリケーションの実行にハードウェア故障を注入する方法であって、
    故障トリガの結果としてハードウェアコンポーネントを不活性化又は劣化することにより故障を注入させる拡張ソフトウェアスタックをロードするステップと、
    前記ノードの各々で故障トリガデーモンを実行するステップと、
    ハードウェアコンポーネントに故障を注入するよう該ハードウェアコンポーネントを制御する前記ソフトウェアスタックの層をトリガするために前記デーモンのうちの1つを用いて、劣化又は不活性化のための前記故障トリガを提供するステップと、
    前記の注入された故障を有する前記アプリケーションの実行を継続するステップと、
    を有する方法。
  2. 各デーモンは、オペレーティングシステム内の自身のノード上のバックグラウンドプロセスとして実行する、請求項1に記載の方法。
  3. 前記故障は、前記アプリケーションの実行と完全に独立に注入される、請求項1又は2に記載の方法。
  4. 前記拡張ソフトウェアスタックは、前記アプリケーションのためのハードウェアコンポーネントを制御するライブラリの拡張バージョンを有し、前記デーモンは、前記故障を注入するよう前記ハードウェアコンポーネントを制御する前記ライブラリをトリガする、請求項1乃至3のいずれか一項に記載の方法。
  5. 前記拡張ソフトウェアスタックは、前記アプリケーションのためのオペレーティングシステムの拡張バージョンを有し、前記デーモンは、前記故障を注入するよう前記ハードウェアを制御する前記オペレーティングシステムをトリガする、請求項1乃至4のいずれか一項に記載の方法。
  6. 前記デーモンは、互いに独立して及び中央制御と独立して実行する、請求項1乃至5のいずれか一項に記載の方法。
  7. 前記デーモンは、どんな故障が該デーモンが実行しているノードに注入されるべきかを示す1又は複数のファイルにより制御される、請求項1乃至6のいずれか一項に記載の方法。
  8. 各デーモンは、該デーモンがどんな障害をいつ注入するかの記録を保持する、請求項1乃至7のいずれか一項に記載の方法。
  9. 各デーモンは、望ましくは統計的モデルを用いて、いつ故障が生じるかを決定する、請求項1乃至8のいずれか一項に記載の方法。
  10. 各デーモンは、前記故障を注入するよう、拡張MPI及び/又は拡張相互接続層のような拡張メッセージインタフェースを制御する、請求項1乃至9のいずれか一項に記載の方法。
  11. 各デーモンは、前記劣化した又は不活性化されたハードウェアコンポーネントの回復を指示するために、前記故障トリガの後に回復トリガを提供する、請求項1乃至10のいずれか一項に記載の方法。
  12. 前記回復トリガは、時間遅延の後に前記デーモンにより提供される、請求項11に記載の方法。
  13. 前記故障注入は、前記アプリケーションのソースコードへの変更を有しないで及び前記アプリケーションの前記構成、コンパイル及び実行のいずれへの変更も有しないで、実行される、請求項1乃至12のいずれか一項に記載の方法。
  14. 前記拡張ソフトウェアスタックは、例えばLD_PRELOADにより指定される場所の変更リストと共に例えばライブラリの検索場所の変更リストを用いて動的リンカにより、静的又は動的にロードされる、請求項1乃至13のいずれか一項に記載の方法。
  15. 分散型コンピューティングシステムであって、ハードウェアコンポーネントと、実行アプリケーションにハードウェア故障を注入する方法を可能にするソフトウェアスタックと、を有し、前記分散型コンピューティングシステムは、
    相互作用にリンク付けされるノードと、
    前記アプリケーションのためのソフトウェアスタックの拡張バージョンであって、1又は複数のハードウェアコンポーネントを故障トリガに続いて不活性化又は劣化させるよう動作する、ソフトウェアスタックの拡張バージョンと、
    それぞれ単一のノードに関連付けられるデーモンであって、各デーモンは、ハードウェアコンポーネントに故障を注入するよう該ハードウェアコンポーネントを制御する前記ソフトウェアスタックの層をトリガすることにより、劣化又は不活性化のために故障トリガを提供するよう動作する、デーモンと、
    を有する分散型コンピューティングシステム。
  16. リンク付けされたノードを含むハードウェアコンポーネントを有する分散型コンピューティングシステムの単一のノードで動作する故障トリガデーモンであって、前記コンピューティングシステムは、ハードウェア故障をアプリケーションの実行に注入する情報を実行するよう配置され、前記デーモンは、ソフトウェアスタックの一部が制御しているハードウェアコンポーネントを不活性化し又は劣化するよう前記ソフトウェアスタックの前記一部をトリガすることにより、ハードウェアコンポーネントの劣化又は不活性化のために故障トリガを提供するよう動作する、故障トリガデーモン。
  17. ソフトウェアスタックであって、アプリケーションと共に使用し、オペレーティングシステム層と、リンク付けされたノードを含むハードウェアコンポーネントを有する分散型コンピューティングシステムのハードウェアを制御する少なくとも1つのライブラリ層とを有し、前記ライブラリ層及び/又はオペレーティングシステムは、前記コンピューティングシステムの単一のノードで動作する故障トリガデーモンを用いて、前記アプリケーションの実行にハードウェア故障を注入できるよう拡張され、前記デーモンは、ハードウェアコンポーネントの劣化又は不活性化のために故障トリガを提供する、ソフトウェアスタック。
JP2014264456A 2014-01-06 2014-12-26 ハードウェア故障を実行アプリケーションに注入する方法を可能にする方法及びコンピューティングシステム Active JP6507633B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP14150226.0A EP2891981B1 (en) 2014-01-06 2014-01-06 Method and computing system allowing a method of injecting hardware faults into an executing application
EP14150226.0 2014-01-06

Publications (2)

Publication Number Publication Date
JP2015130170A true JP2015130170A (ja) 2015-07-16
JP6507633B2 JP6507633B2 (ja) 2019-05-08

Family

ID=49949495

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014264456A Active JP6507633B2 (ja) 2014-01-06 2014-12-26 ハードウェア故障を実行アプリケーションに注入する方法を可能にする方法及びコンピューティングシステム

Country Status (3)

Country Link
US (1) US9454447B2 (ja)
EP (1) EP2891981B1 (ja)
JP (1) JP6507633B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073479A (zh) * 2016-11-14 2018-05-25 南京理工大学 一种用于星载计算机可靠性验证的故障注入方法
US10467126B2 (en) 2017-03-31 2019-11-05 Microsoft Technology Licensing, Llc Scenarios based fault injection
CN111448553B (zh) * 2017-12-08 2021-11-09 华为技术有限公司 故障注入系统和故障注入方法
CN110674028A (zh) * 2019-08-20 2020-01-10 华为技术有限公司 故障注入方法及其装置、业务服务系统
CN112256568B (zh) * 2020-10-13 2023-06-06 四川新网银行股份有限公司 一种基于分布式故障注入的方法
US11281521B1 (en) * 2021-03-10 2022-03-22 Keysight Technologies, Inc. Methods, systems and computer readable media for troubleshooting test environments using automated analysis of log file data
US11550683B2 (en) * 2021-04-09 2023-01-10 EMC IP Holding Company LLC Fault definition and injection process to simulate timing based errors in a distributed system

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009104490A (ja) * 2007-10-25 2009-05-14 Fujitsu Ltd プログラムのテスト装置
JP2011227700A (ja) * 2010-04-20 2011-11-10 Mitsubishi Electric Corp 周辺機器障害模擬システム、周辺機器障害模擬方法および周辺機器障害模擬プログラム
JP2012181737A (ja) * 2011-03-02 2012-09-20 Mitsubishi Electric Corp 計算機システム
JP2013196060A (ja) * 2012-03-15 2013-09-30 Toshiba Corp プログラム検証システムおよびその検証方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6477666B1 (en) 1999-11-22 2002-11-05 International Business Machines Corporation Automatic fault injection into a JAVA virtual machine (JVM)
US20040194063A1 (en) 2003-03-28 2004-09-30 Joel Pereira System and method for automated testing of a software module
US20040243882A1 (en) 2003-05-27 2004-12-02 Sun Microsystems, Inc. System and method for fault injection and monitoring
US7370101B1 (en) * 2003-12-19 2008-05-06 Sun Microsystems, Inc. Automated testing of cluster data services
US7165189B1 (en) * 2003-12-19 2007-01-16 Sun Microsystems, Inc. Distributed test framework for clustered systems
US7757215B1 (en) * 2006-04-11 2010-07-13 Oracle America, Inc. Dynamic fault injection during code-testing using a dynamic tracing framework
US8458650B2 (en) * 2010-03-29 2013-06-04 International Business Machines Corporation Injecting a fault into a stream operator in a data stream processing application
US8108728B2 (en) * 2010-04-02 2012-01-31 GM Global Technology Operations LLC Method and apparatus for operational-level functional and degradation fault analysis
DE102010037457B4 (de) * 2010-09-10 2012-06-21 Technische Universität Dresden Verfahren zur Datenverarbeitung zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zum Erzeugen von Programm-Code, Datenverarbeitungsanordnungen zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Datenverarbeitungsanordnungen zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
CN102354298A (zh) 2011-07-27 2012-02-15 哈尔滨工业大学 基于staf的高端容错机故障注入自动化测试平台及方法
EP2565790A1 (en) 2011-08-31 2013-03-06 Samsung Electronics Polska Spolka z organiczona odpowiedzialnoscia Method and system for injecting simulated errors

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009104490A (ja) * 2007-10-25 2009-05-14 Fujitsu Ltd プログラムのテスト装置
JP2011227700A (ja) * 2010-04-20 2011-11-10 Mitsubishi Electric Corp 周辺機器障害模擬システム、周辺機器障害模擬方法および周辺機器障害模擬プログラム
JP2012181737A (ja) * 2011-03-02 2012-09-20 Mitsubishi Electric Corp 計算機システム
JP2013196060A (ja) * 2012-03-15 2013-09-30 Toshiba Corp プログラム検証システムおよびその検証方法

Also Published As

Publication number Publication date
US20150193319A1 (en) 2015-07-09
EP2891981B1 (en) 2018-07-18
US9454447B2 (en) 2016-09-27
EP2891981A1 (en) 2015-07-08
JP6507633B2 (ja) 2019-05-08

Similar Documents

Publication Publication Date Title
JP6507633B2 (ja) ハードウェア故障を実行アプリケーションに注入する方法を可能にする方法及びコンピューティングシステム
US8726225B2 (en) Testing of a software system using instrumentation at a logging module
Guan et al. F-sefi: A fine-grained soft error fault injection tool for profiling application vulnerability
US20110145643A1 (en) Reproducible test framework for randomized stress test
Potyra et al. Evaluating fault-tolerant system designs using FAUmachine
US8683450B2 (en) Systems, methods, and media for testing software patches
Pattabiraman et al. Dynamic derivation of application-specific error detectors and their implementation in hardware
Guan et al. Design, use and evaluation of p-fsefi: A parallel soft error fault injection framework for emulating soft errors in parallel applications
Talebi et al. Undo workarounds for kernel bugs
Lenka et al. Fault injection techniques-a brief review
Mamone et al. On the analysis of real-time operating system reliability in embedded systems
Xu et al. DualVisor: Redundant hypervisor execution for achieving hardware error resilience in datacenters
Guerrero Balaguera et al. Understanding the Effects of Permanent Faults in GPU's Parallelism Management and Control Units
Jiang et al. Simplydroid: efficient event sequence simplification for android application
Höller et al. Software-based fault recovery via adaptive diversity for COTS multi-core processors
Gioachin et al. Robust non-intrusive record-replay with processor extraction
Guo et al. Match: An mpi fault tolerance benchmark suite
Dou et al. ShortCut: accelerating mostly-deterministic code regions
Gaiswinkler et al. Automated software diversity for hardware fault detection
Cerveira et al. Evaluation of restful frameworks under soft errors
KR101137034B1 (ko) 계층적 병렬 환경에서의 분산 런타임 진단을 위한 시스템 및 방법
Van Der Kouwe et al. A methodology to efficiently compare operating system stability
Duan et al. Better Late Than Never: An n-Variant Framework of Verification for Java Source Code on CPU x GPU Hybrid Platform
Georgakoudis et al. Evaluating the performance of global-restart recovery for MPI fault tolerance
WO2022178988A1 (zh) 虚拟机热迁移的方法及其装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180718

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180814

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180914

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: 20190305

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190318

R150 Certificate of patent or registration of utility model

Ref document number: 6507633

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150