(57)【要約】      （修正有）【課題】ノードのネットワークにおける障害管理方法を提供する。【解決手段】ストレージ媒体４４は、計算ブレードのノード６１のストレージ媒体６４に、障害が発生していないノード４１のローカルバックアップを送信する。障害が発生していないノード５１〜５３のローカルバックアップは複製されずにローカルに保持され、障害が発生した進行中のタスクと同じタスクの間に現在の計算バックアップ状態から計算を再開するためにそれら自体の障害が発生していないノード５１〜５３を通じて検索される。ストレージ媒体４６は、ノード６１をすでに含んでいる同じ追加された計算ブレードのノード６２及び６３に関連付けられるストレージ媒体６５及び６６に、その関連付けられる障害が発生していないノードの状態のローカルバックアップだけでなく、障害が発生したノード４２の状態のローカルバックアップの複製も送信する。【選択図】図５
2020017268.tif 000002
【特許請求の範囲】
【請求項１】
ノードネットワーク(21〜63)における障害管理方法であって、同じ計算を実行する前記ネットワークノードの全部または一部のうちの考慮中のノード(21〜53)ごとに、
●第1に、この考慮中のノード(21〜53)の状態をこの考慮中のノード(21〜53)のストレージ媒体(31〜56)にローカルにバックアップするためのステップであって、このストレージ媒体(31〜56)とこの考慮中のノード(21〜53)との間のリンクが、このストレージ媒体(31〜56)から別のノード(21〜63)へリダイレクトされ得る、ステップと、
●次いで、前記考慮中のノードに障害が発生した場合(21、42)、このストレージ媒体(31、45)を、前記考慮中のノード(21、42)とは異なる動作ノード(23、43)に接続するために、前記考慮中のノード(21、42)とそのストレージ媒体(31、45)との間の前記リンクをリダイレクトすることによって、この考慮中のノード(21、42)の前記状態の前記ローカルバックアップを検索するためのステップであって、この動作ノード(23、43)が、前記計算をすでに実行している、ステップであって、
●前記検索ステップに使用されるこれらの考慮中のノード(21〜53)の前記ローカルバックアップが、それらがこの計算の同じ状態に対応するように互いにコヒーレントである、ステップと、
●次いで、少なくとも1つの考慮中のノードに障害が発生した場合(21、42)、前記考慮中のノード(21、42)の前記障害発生時に、この考慮中のノード(21、42)のこのローカルバックアップを、前記ネットワークに追加された新しい追加のノード(61〜63)に返すためのステップと、
を備える、方法。
【請求項２】
前記返すステップにおいて、前記障害が発生したノード(42)の計算ブレードと同じ計算ブレード内のノード(41〜43)のすべてのローカルバックアップが、前記考慮中のノードの前記障害発生時に前記ネットワークに追加された新しい計算ブレード(61〜63)に返されることを特徴とする、請求項1に記載の障害管理方法。
【請求項３】
●前記返すステップの後、ノード(21、42)に障害が発生したタスクと同じタスクの間に前記ローカルバックアップから前記計算を再開するステップ
を備えることを特徴とする、請求項1または2に記載の障害管理方法。
【請求項４】
前記再開フェーズ中に、
●前記考慮中のノード(51〜53)に障害が発生していない場合、および前記考慮中のノード(51〜53)が障害が発生しているノード(42)と同じ計算ブレードに属していない場合、前記考慮中のノード(51〜53)を再開するステップであって、この考慮中のノード(51〜53)の前記状態の前記ローカルバックアップから実行される、ステップと、
●前記考慮中のノード(42)に障害が発生している場合、前記考慮中のノード(42)とは異なる動作ノード(62)を再開するステップであって、前記動作ノードによってこの考慮中のノード(42)の前記状態の前記ローカルバックアップを前記検索することから実行され、前記検索が、前記考慮中のノード(42)と同じ計算ブレード上に位置する中間ノード(43)を介して実行され、これは前記考慮中のノード(42)とは異なり、また前記動作ノード(62)とは異なる、ステップと、
●好ましくは、前記考慮中のノード(41、43)が、障害が発生しているノード(42)と同じ計算ブレードに属する場合、前記考慮中のノード(41、43)とは異なる動作ノード(61〜63)を再開するステップであって、前記動作ノード(61〜63)によって、この考慮中のノード(41、43)の前記状態の前記ローカルバックアップを前記検索することから実行される、ステップと
を備えることを特徴とする、請求項3に記載の障害管理方法。
【請求項５】
前記ノード(21〜63)に対するすべての再開ステップが、これらのすべてのノード(21〜63)が1つの同じ計算状態で再開するように互いに同期されることを特徴とする、請求項1から4のいずれか一項に記載の障害管理方法。
【請求項６】
これらのすべてのステップが、同じ計算を実行する前記ネットワークのすべての前記ノード(21〜63)に対して実行されることを特徴とする、請求項1から5のいずれか一項に記載の障害管理方法。
【請求項７】
前記ストレージ媒体(31〜56)を前記動作ノード(21〜53)に接続するための、前記考慮中のノード(21〜53)とそのストレージ媒体(31〜56)との間の前記リンクの前記リダイレクトが、複数のノード(21〜53)をそれらのストレージ媒体(31〜56)に接続するスイッチ(1)におけるスイッチ変更によって実行されることを特徴とする、請求項1から6のいずれか一項に記載の障害管理方法。
【請求項８】
前記検索ステップが、前記障害が発生したノード(21、42)の前記状態の前記ローカルバックアップの前記ストレージ媒体(31、45)のアタッチメントを、前記障害が発生したノード(21、42)がアタッチされているスイッチ(1)と、前記障害が発生したノード(21、42)の状態の前記ローカルバックアップのそのストレージ媒体(31、45)とを介して変更するが、前記障害が発生しているノード(21、42)自体は通過することなしに変更することを特徴とする、請求項1から7のいずれか一項に記載の障害管理方法。
【請求項９】
アタッチメントの前記変更が、前記スイッチ(1)にコマンドを送信することによって達成され、このコマンドが、管理ポート(11、14)によって前記スイッチ(1)にアタッチされた前記ノード(22、23)のうちの1つを通過することを特徴とする、請求項8に記載の障害管理方法。
【請求項１０】
このスイッチ(1)がPCIeスイッチであることを特徴とする、請求項7から9のいずれか一項に記載の障害管理方法。
【請求項１１】
3〜10個のノード(21〜63)が同じスイッチにアタッチされていることを特徴とする、請求項7から10のいずれか一項に記載の障害管理方法。
【請求項１２】
考慮中のノードに障害が発生しない場合でも、同じ計算を実行する前記ネットワークの前記ノード(21〜53)の全部または一部について、これらのすべてのノード(21〜53)に対するグローバルバックアップのステップが、これらのノード(21〜53)に対するすべてのローカルバックアップのステップよりも少ない頻度で実行されることも備えることを特徴とする、請求項1から11のいずれか一項に記載の障害管理方法。
【請求項１３】
同じ計算を実行する前記ネットワークの前記ノード(21〜53)の全部または一部に対して、前記ストレージ媒体(31〜56)がフラッシュメモリであることを特徴とする、請求項1から12のいずれか一項に記載の障害管理方法。
【請求項１４】
これらのフラッシュメモリがNVMeメモリであることを特徴とする、請求項13に記載の障害管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノードネットワークにおける障害を管理するための方法、およびこの障害管理に関連付けられるノードネットワークセクションに関する。
【背景技術】
【０００２】
同じ計算を実行するノードのネットワークにおいては、1つまたは複数のレベルにおいてバックアップが実行される。したがって、これらはマルチレベルバックアップである。障害が発生した場合、単にバックアップが行われることにより、完全に再起動することなしに計算を少なくとも部分的に回復することができる。計算の一部または全体の大部分またはほぼ完全な計算を回復するために、障害の種類に応じて、ある程度のバックアップが使用される。
【０００３】
分散アプリケーションは、クラスタのMTBF(「平均障害間隔」)とも呼ばれるネットワーク障害が発生することなく、平均よりはるかに長く持続する可能性があるため、多くの中断の機会がある。一般的に、内部の障害管理ソリューションはなく、計算ノードに物理的な障害が発生した場合にローカルのバックアップデータが失われる可能性がある。その後、単一の計算ノードが失われたためにローカルバックアップデータを回復できなくなったため、すべての計算ステップが失われる。
【０００４】
バックアップから「チェックポイント/再起動」ソリューションとして知られるバックアップおよび検索ソリューションがあり、アプリケーションが異なる速度に応じて異なるレベルのバックアップにそれらのコンテキストを定期的に保存することを可能にしている。
【０００５】
異なるバックアップレベルは、非常にローカルなものから非常にグローバルなものまで、最も単純で速いものから最も複雑なもの、最も遅いもの、および最も高価なもの、最も堅牢性が低く脆弱なもの、最も堅牢性があり回復力のあるものまで、多岐にわたる。
【０００６】
FTIライブラリ(「フォールトトレランスインターフェース」)による以前の方法は、以下の4つの知られているバックアップのレベルがあると述べている。
●ローカルバックアップを実行する第1のレベル、L1。これは単純で安価であり、非常に頻繁に実行され、その結果、障害発生の間にもたらす計算時間の損失は最小であり、この第1のレベル、L1における検索能力を伴う。
●パートナーノードでの複製によって第1の中間バックアップを実行する第2のレベル、L2は、それほど単純ではなく、もう少し高価であり、障害発生の間にもたらす計算時間の損失はより大きく、検索はこの第2のレベル、L2でのみ可能である。
●リードソロモン符号化によって第2の中間保存を行う第3のレベル、L3は、さらに単純ではなく、さらに少し高価になり、障害発生の間にもたらす計算時間の損失はさらに大きく、この第3のレベル、L3でのみ回復可能である。
●ファイルシステムの観点からグローバルバックアップを実行する第4のレベル、L4は、複雑で非常に高価であり、障害発生の間の計算時間の損失が大幅に減少し、検索はこの第4のレベル、L4でのみ可能である。
【０００７】
ローカルレベル、L1からグローバルレベル、L4まで、バックアップはますます堅牢で回復力のあるものになるが、それはまたますます複雑で高価なものになる。このため、第1のレベル、L1でのバックアップは頻繁に実行され、第2のレベル、L2でのバックアップ実行頻度がわずかに少なく、第3のレベル、L3でのバックアップ実行頻度はさらに少なく、第4のレベル、L4でのバックアップは比較的まれである。したがって、統計的には、障害が発生したとき、回復され得る最後のコヒーレント状態は、第1のレベル、L1におけるごく最近のもの、第2のレベル、L2におけるあまり最近のものではないもの、第3のレベル、L3におけるさらにあまり最近のものではないもの、第4のレベル、L4におけるさらに古いものである。その結果、失われる仕事量は、第1のレベル、L1においては非常に少なく、第2のレベル、L2においては比較的限られており、第3のレベル、L3においては顕著であり、第4のレベル、L4においてはより大きい。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、前述の欠点を少なくとも部分的に克服することによってノードネットワークにおける障害管理の手段を提供することである。
【０００９】
より具体的には、本発明は、考慮中の少なくとも1つのレベルのバックアップについて、一方では効率と他方ではコストおよび複雑さとの間の妥協点を改善することによって、ノードのネットワークにおける障害管理の手段を提供することを目的とする。
【００１０】
より具体的には、本発明の目的は、コストおよび複雑さがローカルレベルバックアップのコストおよび複雑さ、好ましくは第1のレベル、L1内のコストおよび複雑さと類似または同等であるという点でより有利である、中間レベルのバックアップ、好ましくは第1の中間バックアップ、第2のレベル、L2の効率と類似または同等の効率を有するノードのネットワークにおける障害管理の手段を提供することである。
【課題を解決するための手段】
【００１１】
これを達成するために、本発明は、そのため、ノードが不良であるとき、おそらく隣接ノード上にコピーを作成することによって、ただし、この隣接ノード上のバックアップコピーが、障害が発生していないノードの大部分またはすべてのものであることはなく、ストレージ媒体にバックアップが作成されるように、ストレージ媒体とそのリダイレクションノードとの間に別のノードへのリンクを作成することを提案する。ストレージ媒体とそのノードとの間のリンクは直接ではなく、以前のノードに障害が発生し始めたときにこのストレージ媒体を別のノードにリンクするためにこのリンクを再構成することができるネットワーク要素を通じて間接的に行われる。このネットワーク要素は、いくつかのノードをそれらのそれぞれのストレージ媒体にリンクし、各ノードはその関連付けられるストレージ媒体に(または、おそらくその関連付けられる複数のストレージ媒体に)接続される。
【００１２】
要約すると、このノードの障害にもかかわらず、障害が発生しているノードに対してバックアップを利用できるため、第2のレベル、L2と同等の効率レベルが得られるが、障害が発生していない大多数のノードの大部分またはすべてのノードに対する単純なローカルバックアップよりも複雑な動作なしであり、これは考慮中の計算を実行するネットワーク内のノードの過半数またはさらに大多数であり、コストおよび複雑さは第1レベル、L1のものと類似していないとしても少なくとも同程度である。
【００１３】
したがって、本発明の実装形態の方法によれば、第2のレベル、L2のコストが節約される一方で、計算ノードで障害が発生した場合、第1のレベル、L1におけるバックアップからアプリケーションを再起動する能力が維持される。従来は第2のレベル、L2において実行されていた隣接ノードへのコピーは、ここではすべての計算ノードに対して予防的な観点でアプリケーションの実行中には実行されず、故障の場合にのみ、および故障が発生した後に障害が発生したノードに対してのみ実行される。コピーは、ローカルバックアップからのアップロードによって、不足しているデータでアプリケーションを再開するためにのみ作成される。
【００１４】
一方、ローカルバックアップと類似または同等のコストと複雑さのこのバックアップは、中間バックアップの有効性を有し、お金に対する価値を大いに高める。
【００１５】
他方、このバックアップは、中間バックアップの効率を有するローカルバックアップと類似または同等のコストおよび複雑さであり、好ましくは、最も深刻な障害に対処するための最後の手段として、グローバルバックアップ以外のものを維持しないことによって、従来のローカルバックアップおよび1つまたは複数の従来の中間バックアップの両方の置換えを可能にする。本発明によって提案されたローカル-中間バックアップによってほとんどの障害を管理することができ、後者は中間バックアップと同じくらい効果的であるが、実際にはローカルバックアップを犠牲にしている。
【００１６】
本発明によって提供されるこのバックアップは、効率と複雑さとの間の最適な妥協点であり、ローカル戦略に従って使用される。このローカル戦略では、障害が発生しているノードのバックアップを回復し、それをこの機会に追加された新しいノードにアタッチするために、計算ノードとそれらの関連付けられるメモリとの間のリンクリダイレクションメカニズムが使用され、同じタスクの間の利点として、障害が発生していない、および好ましくは障害が発生しているノードを有する計算ブレードと統合されていないノードは、保持され、それら自体のローカルバックアップから再開される。
【００１７】
このようにして、障害が発生していないすべてのノードのローカルバックアップを保存すると、再開が容易になる。
【００１８】
したがって、グローバルバックアップに関連付けられる再開を実行することによって複雑化のリスクが回避される。
【００１９】
よりローカルな戦略は、障害が発生しているノードのバックアップを検索し、それをグローバルバックアップに統合して、リソースマネージャによって新しいタスクを再開できるようにするために、計算ノードと関連付けられるメモリとの間のリンクリダイレクションメカニズムを使用する。
【００２０】
この目的のために、本発明は、同じ計算を実行するネットワークのノードの全部または一部のうちの考慮中のノードごとに、第1に、ネットワークのためのローカルバックアップステップであって、この考慮中のノードの状態を、この考慮中のノードのストレージ媒体を通じて、このストレージ媒体とこのノードとの間のリンクが、このストレージ媒体から別のノードにリダイレクトすることができる、ステップと、次いで、考慮中のノードに障害が発生した場合、このストレージ媒体を考慮中のノードとは異なる動作ノードに接続するために、考慮中のノードとそのストレージ媒体との間の前記リンクをリダイレクトすることによって、考慮中のノードの状態を検索するローカルバックアップのステップであって、この動作ノードはすでに計算を実行しているので、検索ステップに使用される考慮中のこれらのノードのローカルバックアップは互いにコヒーレントであるため、この計算の同じ状態に対応する、ステップと、次いで、考慮中の少なくとも1つのノードに障害が発生した場合、この考慮中のノードの障害発生時に、考慮中のノードのローカルバックアップをネットワークに追加された新しい追加のノードに返すステップとを備える、ノードのネットワークにおける障害管理方法を提案する。
【００２１】
好ましいバージョンによれば、本発明は、上述の本発明の目的に適用される、互いに部分的に組み合わせて、または互いに全体的に組み合わせて、別々に使用され得る以下の特性のうちの1つまたは複数を備える。
【００２２】
好ましくは、返すステップにおいて、障害が発生したノードの計算ブレードと同じ計算ブレードの一部であるノードのすべてのローカルバックアップが、考慮中のノードの障害発生中にネットワークに追加された新しい計算ブレードに返される。
【００２３】
したがって、一方では、媒体とノードとの間のリンクのリダイレクトは、たとえ大きな障害があっても、また計算ブレード全体の中で比較的一般化されている場合でも実行することができる。他方では、新しい計算ブレードが完全に動作可能になると、その後、この新しい計算ブレード内に新しい障害が発生し、本発明によって推奨されるメカニズムによって同様の方法で管理される可能性があるのに対して、同じ計算ブレードが保持されていた場合、保存された計算の同じブレード内の新しい障害は管理がより困難になる。
【００２４】
障害の管理プロセスは、返すステップの後に、ノードが障害を発生し始めるタスクと同じタスクの間にローカルバックアップに基づく計算のため再開するステップを備えることが好ましい。
【００２５】
したがって、再開はさらに簡単で迅速に実行され、発生した障害の検索による実行中の計算の妨害は最小限に抑えられるので、進行中のこの計算を実装するためのダウンタイムは適切に短縮される。
【００２６】
好ましくは、再開ステップ中に:障害が発生しておらず、障害が発生したノードと同じ計算ブレードに属していない場合、考慮中のノードを再開することが、この考慮中のノードの状態のローカルバックアップから実行され、考慮中のノードに障害が発生している場合、考慮中のノードとは異なる動作ノードを再開することが、動作ノードによってこの考慮中のノードの状態のローカルバックアップを検索することから実行され、考慮中のノードと同じ計算ブレード上に位置する中間ノードを介して検索が実行されるが、これは考慮中のノードとは異なり、また動作ノードとは異なり、好ましくは、考慮中のノードに障害が発生しているノードと同じ計算ブレードに属する場合、考慮中のノードとは異なる動作ノードを再開することが、動作ノードによって、この考慮中のノードの状態のローカルバックアップを検索することから実行される。
【００２７】
したがって、障害が発生したノードのローカルバックアップの検索は、より簡単でより速い方法で実行され、検索するノードは、障害が発生したノードに非常に近い。
【００２８】
ノードに対するすべての再開ステップは、同じ計算状態でこれらのすべてのノードを再開するように互いに同期されることが好ましい。
【００２９】
したがって、これにより、再開後に実行される残りの計算の完全な一貫性が保証される。
【００３０】
これらすべてのステップは、同じ計算を実行するネットワークのすべてのノードに対して実行されることが好ましい。
【００３１】
したがって、本発明によって提案される障害管理方法の利点は、同じ計算を実行するネットワークのすべてのノードに拡張されることによって一般化される。
【００３２】
ストレージ媒体を動作ノードに接続するための当該ノードとそのストレージ媒体との間の前記リンクのリダイレクトは、いくつかのノードをそれらのストレージ媒体に接続するスイッチを介したルーティングの変更によって達成されることが好ましい。
【００３３】
したがって、このリダイレクトは、信頼性があり制御されているネットワーク要素に対して実行される単純な動作によって実行される。
【００３４】
好ましくは、検索ステップは、障害が発生したノードがアタッチされていたスイッチと、障害が発生したノードの状態に関するローカルバックアップストレージ媒体を通じて、しかし、障害が発生したノード自体を通過することなしに、障害が発生したノードの状態からローカルバックアップストレージ媒体のアタッチメントを変更する。
【００３５】
したがって、障害が発生したノードの完全な物理的障害の場合でも、リダイレクトを実行することができる。
【００３６】
アタッチメントの変更は、スイッチにコマンドを送信することによって達成されることが好ましく、このコマンドは、スイッチにアタッチされ、管理ポートを使用するノードのうちの1つを通過する。
【００３７】
したがって、管理ポートは、同じスイッチにアタッチされた障害が発生したノードのためのストレージ媒体を回復するために割り当てられる。
【００３８】
このスイッチはPCIeスイッチ(周辺機器相互接続エクスプレス)であることが好ましい。
【００３９】
このスイッチは、マイクロプロセッサを介さずにデバイスが互いに通信するのに特に適しているため、特に有利である。したがって、たとえば、障害が発生している計算ノードを回避することができる。
【００４０】
このPCIeスイッチを使用すると、ストレージ媒体、たとえばストレージディスクを再アタッチすることが可能になり、これは障害が発生した計算ノードの別の計算ノードへのローカルバックアップを含む。この動作は高速で、ローカルバックアップデータの体系的なコピーを必要とせず、具体的には、障害がない計算ノードには必要ない。
【００４１】
同じスイッチに3〜10個のノードがアタッチされていることが好ましい。
【００４２】
したがって、スイッチは、このノードの小グループ内のノードに障害が発生した場合、このノードの小グループを容易に管理することができる。
【００４３】
障害管理方法はまた、同じ計算を実行するネットワークのノードの全部または一部について、たとえ考慮中のノードに障害が発生しなくても、これらのノードのすべてについてのグローバルバックアップステップを、これらのノードのすべてのローカルバックアップステップよりも少ない頻度で実行することを含むことが好ましい。
【００４４】
したがって、一方では、大多数の障害を単純かつ効率的な方法で管理するために本発明によって提供されるローカル-中間バックアップ、そして他方では、より複雑でより高価であるが少数の重大な障害のために確保されるグローバルバックアップは、本発明によって提案された障害管理方法の全体的な複雑さと全体的な効率との間の優れた妥協点である。
【００４５】
このように複数のバックアップレベルを使用し、高速ローカルバックアップおよびより複雑で高価なリモートグローバルバックアップを使用した、耐障害性アプリケーションの文脈では、本発明によって提案された障害管理方法は、たとえこれが完全な障害であっても、ノード上の物理的障害に続いてアプリケーションが再起動することを可能にし、ほとんどの場合、しばしばはるかに古いリモートバックアップを再起動する必要はなく、より最近で、より安価な、すべてのローカルバックアップから開始する。しかしながら、よりまれな障害のケースでは、リモートグローバルバックアップの使用が必要になる場合がある。障害が発生した計算ノードからローカルデータを回復する機能により、ほとんどの場合、最新のローカルバックアップからアプリケーションを再起動することが可能になる。
【００４６】
好ましくは、同じ計算を実行するネットワーク上のノードの全部または一部について、ストレージ媒体はフラッシュメモリである。
【００４７】
したがって、使用されるメモリは単純、高速、かつ永続的である。
【００４８】
これらのフラッシュメモリは、NVMe(不揮発性メモリエクスプレス)メモリであることが好ましい。
【００４９】
したがって、使用されるメモリは、PCIeスイッチ(周辺機器相互接続エクスプレス)と通信するために特によく適している。
【００５０】
計算ノードのネットワークは、少なくとも1000個の計算ノード、理想的には少なくとも5000個の計算ノード、さらに好ましくは少なくとも10000個の計算ノードを備えることが好ましく、大規模なネットワークのために、現在の計算を完全に失うことがさらに危機的になるため、本発明による障害管理方法がさらに重要になる。
【００５１】
アプリケーションがより多数の計算ノードで構成されるクラスタ上で実行されている場合は、耐障害性の原則がより重要になる。プロセッサ、メモリ、および他のデバイスの数が多いほど、実行プロセスの終了前に障害が発生する可能性が高くなる。このタイプのプラットフォーム上で実行することを意図されたアプリケーションは、障害の直前に存在した状態にできるだけ近い状態で「再起動」に必要なデータを保護することを可能にするフォールトトレランスライブラリ(「チェックポイント」)を使用する。したがって、これらのアプリケーションは最初から計算をやり直す必要はない。
【００５２】
本発明の他の特徴および利点は、例および添付の図面を参照しながら与えられる本発明の好ましいバージョンの以下の説明を読めば明らかになるであろう。
【図面の簡単な説明】
【００５３】
【図１】本発明による障害管理方法の例が取り得るネットワークの一部に関する本発明の一バージョンによる、PCIeスイッチによって互いに接続されたノードのグループおよびそれらのストレージ媒体を含むネットワーク部分の例を概略的に表す図である。
【図２】本発明の一バージョンによる、障害管理方法中のローカルバックアップステップの進行の例を概略的に表す図である。
【図３】本発明の一バージョンによる、障害管理方法中に障害が発生しているノードを引き起こす障害の発生の例を概略的に表す図である。
【図４】本発明の一バージョンによる、障害管理方法中に障害が発生しているノードのためのローカルバックアップを回復するためのステップの進行の例を概略的に表す図である。
【図５】ノードまたは少なくとも1つのノードに障害が発生した計算ブレード内のすべての計算ノードのローカルバックアップのための複製ステップの進行の例を概略的に表しており、本発明の一バージョンによる障害管理方法の間に別の計算ブレードからのノードが追加されている図である。
【図６】障害が発生している計算ノードなしで、すべての計算ブレードのそれ自体のローカルバックアップから計算を再開するための、および少なくとも1つの障害が発生しているノードを有する計算ブレード内のノードのバックアップの複製から追加された新しい計算ブレードのためのステップの進行の例を概略的に表しており、本発明の一バージョンによる障害管理のプロセス中に、障害が発生した同じタスク中に計算が再開され、少なくとも1つの計算ノードの障害が引き起こされる図である。
【発明を実施するための形態】
【００５４】
図1は、本発明による障害管理方法の例が取り得るネットワークの一部に関する本発明の一バージョンによる、PCIeスイッチによって互いに接続されたノードのグループおよびそれらのストレージ媒体を含むネットワーク部分の例を概略的に表す図である。
【００５５】
ネットワークのこの部分は、図1の例において、いくつかの計算ノード2、3つの計算ノード21、22、および23、ならびに、図1の例において、いくつかのストレージ媒体3、3つのストレージ媒体31、32、および33を備える。
【００５６】
これらの計算ノード2およびそれらのストレージ媒体3は、PCIe双方向接続7、8、または9を介してこれらの計算ノード2をそれぞれのストレージ媒体3に接続するPCIeスイッチ1によって管理される計算ノードのグループを形成する。これらのPCIe双方向接続7、8、または9は、PCIe多方向接続であり得る。接続7は4方向接続である。接続8は4方向接続である。接続9は、ここではまだ使用されていない2方向接続であり、各接続9は一方の側でポート13、16、または19の一方にアタッチされ、他方の側では解放されているままである。各PCIe接続7は、それぞれ計算ノード21〜23のうちの1つを、スイッチ1の図1においてそれぞれ11、14、または17で参照されるポート0、2、または8のうちの1つ(電子スイッチPLX8733の番号付け、しかし別のPCIeスイッチを使用することができる)にそれぞれ接続する。各PCIe接続8はそれぞれ、ストレージ媒体31〜33のうちの1つを、スイッチ1の図1においてそれぞれ12、15、または18で参照されるポート1、3、または9のうちの1つに接続する。接続7、スイッチ1の図1においてそれぞれ11および12で参照されるポート0および1、ならびに接続8は、ともに計算ノード23をそのストレージ媒体33に接続するリンク4を形成する。接続7、スイッチ1の図1においてそれぞれポート14および15で参照されるポート2および3、ならびに接続8は、ともに計算ノード22をそのストレージ媒体32に接続するリンク5を形成する。接続7、スイッチ1の図1においてそれぞれ17および18で参照されるポート8および9、ならびに接続8は、ともに計算ノード21をそのストレージ媒体31に接続するリンク6を形成する。PCIe7、8、または9接続は、PCIeバス上でグループ化される。
【００５７】
計算ノード23は、管理ポートまたはデフォルト管理にアタッチされており、すなわち、これを通じて、積荷が計算ノード2のグループの外部に向かって移動し、グループ2内の計算ノードの外部から受信する。この計算ノード23に障害が発生した場合、これは、冗長管理ポートまたは管理にアタッチされている計算ノード22によって置き換えられ、次いで、計算ノード22は新しい有効な管理ポートまたは管理にアタッチされるようになる。
【００５８】
計算ノード、たとえば計算ノード21または計算ノード22に物理的に障害が発生した場合、ここでは計算ノード21を考慮し、その計算状態の最新のローカルバックアップがそのストレージ媒体31に記憶される。
【００５９】
以前の方法に基づくシステムにおいて、ストレージ媒体31はその計算ノード21によってのみアクセス可能であり、後者は完全に物理的に故障しているので、この最近のローカルバックアップはアクセス不可能になる。次いで、他のより複雑でより最近のバックアップレベルに頼る必要があり、その結果、コンピュータネットワークの全体的な効率が大幅に失われる。
【００６０】
図1に示される本発明の一バージョンによるシステムでは、ストレージ媒体31のアタッチメントが再構成され、すなわち、ストレージ媒体31は、それがデフォルトでアタッチされているその計算ノード21に接続されるのをやめるが、デフォルト管理ポートにアタッチされる計算ノード23に接続されるようになり、ストレージ媒体31が計算ノード21〜23のグループの外部の別のスペア計算ノードにリンクされているので、障害が発生した計算ノード21の計算のローカルバックアップをトレースできるようになり、次いで、この他の計算ノードは、計算ノード21の計算状態のローカルバックアップから、障害が発生した計算ノード21において中断された計算タスクを引き継ぎ、障害が発生したタスクと同じタスク中にストレージ媒体31から送り返され、少なくとも1つの計算ノードの障害を引き起こす。
【００６１】
スイッチ1において、(電子スイッチPLX8733の番号付け、しかし別のPCIeスイッチを使用することができる)18で参照される(図1において)、計算ノード21の障害の前のように17で参照されるポート8に永続的に接続されたままである代わりに、ポート9は、少なくとも一時的に、11で参照されるポート0に接続され、計算ノード23がその障害の直前またはすぐ前に計算ノード21の計算状態を表す保存されたデータをストレージ媒体31から読み取ることを可能にする。したがって、その障害前のストレージ媒体31内の計算ノード21の計算状態のローカルバックアップは、計算ノード23に戻り、バックアップの単純さと再開の効率の間の非常に良い妥協点とともに計算を再開するために使用することができる。
【００６２】
ノード23に障害が発生し始めた場合、第1に管理ポートにアタッチされている計算ノード22によって置き換えられ、計算ノード22は新しい管理ポートにアタッチされているので、それが不良にならない限り、計算ノード23によって以前に実行された動作を実行する。
【００６３】
スイッチ1の管理は、たとえば、障害が発生している計算ノード21からスペア計算ノード23へのストレージ媒体31の移行、データの転送とアプリケーションの再起動などの実行されるべき様々な動作を明確にし、説明する、手動のシナリオによって説明される。アプリケーション側のデータ管理はFTIライブラリによって実行される。
【００６４】
実行されたアプリケーションはFTIライブラリの例において提供されている:hdf.exe。このアプリケーションは2つの計算ノードで起動される。PCIeスイッチによってこれらの計算ノードにアタッチされたNVMeストレージディスク上で定期的にローカルバックアップを実行し、NFSサーバー(ネットワークファイルシステム)上でグローバルバックアップを実行する頻度は少なくなる。アプリケーションが起動されると、2つの計算ノードのうちの1つで障害が発生する。障害が発生したノードから別のノードへのNVMeストレージディスクの移行により、その障害が発生したノードの最後のローカルバックアップから別のノードへのデータ転送が可能になる。この転送が行われると、アプリケーションを再開して、ネットワーク部分の最後のより古いグローバルバックアップではなく、2つの計算ノードの最後のローカルバックアップを使用して計算を再び始めることができる。
【００６５】
これに関連して、障害検索は、障害が発生した計算ノードのMPI(メッセージパッシングインターフェース)アプリケーションからのローカルバックアップデータを使用して実行される。データは、障害が発生している計算ノードのストレージ媒体を同じ計算ブレードに隣接する計算ノードに移行することによって検索される。次いで、このデータは第2の動作ノードに送信され、第2の動作ノードは計算を再び始める。この障害検索の利点は、すべての計算ノードのローカルバックアップからアプリケーションが再起動することを可能にすることである。これらのより安価なローカルバックアップも、ほとんどの場合最新であり、最悪の場合グローバルバックアップと同じくらい最近のものである。さらに、計算を再開するために転送されるデータ量は、グローバルバックアップからの再起動よりも少なくなる。
【００６６】
次の開発では、ボックス内または括弧内のテキストの部分はコンピュータコードの行に関するものである。
【００６７】
フォールトトレランスインターフェース(FTI)ライブラリは、具体的には、4つの既存の主機能と4つの既存の補完機能を使用する。
【００６８】
4つの主な機能は「FTI_Init」、「FTI_Finalize」、「FTI_Protect」、「FTI-Snapshot」であり、より具体的には、以下のとおりである。
【００６９】
int FTI_Init (char* configFile, MPI_Comm globalComm)
「FTI_Init」は、「configFile」構成ファイルを読み取り、制御点ディレクトリを作成し、システムトポロジを検出し、「globalComm」を使用してFTIコミュニケータを初期化し、取得後にデータを再生成する。この関数は、成功した場合には<<FTI_SCES>>を返し、失敗した場合には<<FTI_NSCS>>を返す。この関数は、MPI(メッセージパッシングインターフェース)の初期化直後に、他のFTI関数の前に呼び出す必要がある。
【００７０】
int FTI_Finalize()
「FTI_Finalize」は、完了時に割り振られたメモリを解放し、専用プロセスに転送してチェックポイントとメタデータを消去する。この関数は、アプリケーションプロセスの場合は「FTI_SCES」を返し、ヘッダプロセスの場合は「exit(0)」を返す。この関数は「MPI_Finalize()」の前に呼び出す必要がある。
【００７１】
int FTI_Protect (int id, void* ptr, long count, FTIT_type type)
「FTI_Protect」は保護されるべき変数に関するメタデータを記憶する。各保護される変数は「id」によって識別される。そのアドレス「ptr」、計算の数、およびこの変数を保護するための要素のタイプは、実行中に変更することができる。
【００７２】
int FTI_Snapshot()
「FTI_Snapshot」は、チェックポイントデータをロードし、検索後にランタイム変数を初期化し、必要な頻度に従ってマルチレベルチェックポイントを書き込む。
【００７３】
4つの追加関数は「FTI_Checkpoint」、「FTI_Recover」、「FTI_InitType」、「FTI_Status」である。
【００７４】
関数「FTI_Snapshot()」は、関数「FTI_Checkpoint」によって、および関数「FTI_Recover」によって置き換えることができる。
【００７５】
より具体的には、以下のとおりである。
【００７６】
int FTI_Checkpoint (int id , int level)
「FTI_Checkpoint」は、保護された実行変数「id」の値を、必要なレベルにおいてチェックポイントファイルに書き込む。
【００７７】
int FTI_Recover()
「FTI_Recover」はチェックポイントファイルからチェックポイントデータをロードし、実行時変数を初期化する。
【００７８】
int FTI_InitType(FTIT_type* type, int size)
「FTI_InitType」は「type」と呼ばれる新しいデータタイプを初期化し、そのサイズはバイト単位である。
【００７９】
int FTI_Status()
「FTI_Status」は検索フラグの現在の状態を返す。この状態は、制御点が正常に完了または回復されなかった場合は「0」であり、少なくとも1つの制御点が完了した場合は「1」であり、L4チェックポイントから実行が再開された場合、および前回の実行中に「keep_last_checkpoint」が有効になっていた場合は「2」であり得る。
【００８０】
本特許出願に記載されているハードウェアおよび耐障害性ソフトウェアを使用して障害回復プロセスを提供するために、「SLURM」(「Simple Linux（登録商標） Utility for Resource Management」)、特に「checkpoint-restart」オプション、ならびに「SLURM_JOB_NODES_DOWN」および「SLURM_RESTART_COUNT」変数におけるいくつかの改良を開発することは興味深い。
【００８１】
「batch」機能に「checkpoint-restart」オプションが追加される。インストールされている場合、「switch.confファイル」において定義されているPCIeスイッチのレイアウトに基づいてノードを割り振るようにSLURMコントローラに通知するために、タスクレコード内のフラグがインストールされる。このファイルは、説明の最後にある付録1に提示されているスクリプトジェネレータのおかげで生成することができる。このファイルのそのような実装形態の例を次に示す。
Priority=10
Root=Cluster
#Root level Layout configuration
Entity=Cluster Type=Center  Enclosed=pci[0-1]
#Switch level Layout configuration
Entity=pci0 Type=Switch NodeList=trek[0-1,4] Enclosed=trek[0-1,4]
Entity=pci1 Type=Switch NodeList=trek[5-7] Enclosed=trek[5-7]
#Node level Layout configuration
Entity=trek0 Type=Node Role=Manager PCISwitch=pci0
Entity=trek1 Type=Node Role=Backup PCISwitch=pci0
Entity=trek4 Type=Node Role=Other PCISwitch=pci0
Entity=trek5 Type=Node Role=Manager PCISwitch=pci1
Entity=trek6 Type=Node Role=Other PCISwitch=pci1
Entity=trek7 Type=Node Role=Backup PCISwitch=pci1
【００８２】
「sbatch」はこの新しいコマンドラインオプションを認識し、「opt.ckpt_restart=1」内部フラグをインストールする。このオプションは、入力環境変数「SBATCH_CHECKPOINT_RESTART」を介して「sbatch」にも提供することができる。このオプションは「job_desc_msg_t」構造体にコピーされ、次いで、コントローラ内の「job_record」構造体にコピーされる。コントローラにおいて、「job_ptr->ckpt_restart」を介して参照することができる。プロローグおよびエピローグ環境に追加された、いくつかの環境変数は、「--checkpoint-restart」コマンドラインフラグがインストールされている場合にのみインストールされる。
【００８３】
新しい変数「SLURM_JOB_NODES_DOWN」が追加される。それにはタスクの実行中に失敗した、割り振られたノードのリストが含まれる。デフォルトでは、失敗し始める第1のノードだけがリストされる。「--no-kill(-k)」オプションが指定されている場合、不良になったすべてのノードがリストされる。これはタスクを削除するプロセスにおいてコントローラによってインストールされる。各ノードはそれにアクセスすることができる。
【００８４】
変数「SLURM_RESTART_COUNT」は、すべてのSLURMエピローグの環境変数として伝搬されるように修正される。構造体「job_ptr->restart_cnt」は「SBATCH」タスクによってのみインクリメントされる。
【００８５】
これら2つの環境変数とそれらの値は、それらを抽出してローカル構造体「job_env」に転送する「Remote Procedure Call」(RPC)メッセージを介してコントローラから計算ノードに渡され、それはプロローグおよびエピローグ環境に環境変数をインストールするために使用される。
【００８６】
次の障害管理プロセスフローは、次の表に対応するソフトウェアおよびハードウェアとして書かれている。
【００８７】
【表１】
2020017268.tif 000003
【００８８】
第1のステップでは、ユーザは少なくとも関数「FTI_Init」、「FTI_Protect」、「FTI_Snapshot」、および「FTI_Finalize」を符号化する。次いで、ユーザは"MPI_COMM_WORLD>>を"FTI_COMM_WORLD>>に置き換えて、FTI設定ファイルにおけるパラメータを適合する。次いで、ユーザは追加のオプション「#SBATCH--checkpoint-restart」とともに従来の「sbatch」スクリプトを使用することができる。
【００８９】
第2のステップでは、SLURMは、可能な限り、ブレードごとに3つのノードをタスク、または少なくともPCIeスイッチの管理および交換マネージャノードに割り振る。
【００９０】
第3のステップでは、SLURMプロローグ中に、スイッチ構成とマウントポイントがチェックされる。「SLURM_RESTART_COUNT」が初期化される。
【００９１】
図2は、本発明の一バージョンによる、障害管理方法中のローカルバックアップステップの進行の例を概略的に表す図である。
【００９２】
第4のステップでは、SLURMはMPIランクを起動する。FTIは、ユーザによって選ばれた頻度でチェックポイントファイルを書き込む。
【００９３】
ノード41〜43は、それぞれストレージ媒体44〜46に関連付けられている。ノード41〜43は、同一の計算ブレードに属している。ノード51〜53は、それぞれストレージ媒体54〜56に関連付けられている。ノード51〜53は同じ計算ブレードに属し、これはノード41〜43の計算ブレードとは異なる。ストレージ媒体44〜46および54〜56はそれぞれの関連付けられるノード41〜43および51〜53の状態のローカルバックアップを提供し、並列ファイルシステム100は、ネットワークノードの状態またはネットワークの少なくとも一部の状態のグローバルバックアップを提供する。並列ファイルシステム100は、ネットワークファイルシステムである。
【００９４】
定期的に、理想的には1〜20分の期間、さらにより好ましくは2〜10分の間、たとえば2分、5分または10分ごとに、ストレージ媒体44〜46および54〜56は、それらのそれぞれの関連付けられるノード41〜43および51〜53の状態のローカルバックアップを確実にする。
【００９５】
図3は、本発明の一バージョンによる障害管理方法中の障害の発生、ノード障害のレンダリングの例を概略的に表す図である。
【００９６】
第5のステップでは、SLURMはノードの障害を検出し、障害が発生したノードのリストを含む「SLURM_JOB_DOWN_NODELIST」の更新、「SLURM_RESTART_COUNT」の更新、および検索システムを含むエピローグを起動する。
【００９７】
ノード、たとえばノード42に障害が発生している(図3において、小さいフラッシュで示されている)。この同じ計算ブレード内の他のノード41および43は障害が発生していない。他の計算ブレードのノード51〜53も不良ではない。
【００９８】
エピローグの間に起動された検索システムは、それぞれ第6のステップの第1および第2の部分の間に、図4および5に記載されている2つの部分に分けられる。
【００９９】
図4は、本発明の一バージョンによる、障害管理方法中の障害が発生しているノードのローカルバックアップを回復するためのステップの進行の例を概略的に表す図である。
【０１００】
検索システムの第6の段階の第1の部分では、PCIeスイッチの構成が変更され、チェックポイントファイルが検索される。
【０１０１】
ストレージ媒体45上で実行された、障害が発生したノード42の状態のローカルバックアップは、計算ブレードのPCIeスイッチを介して、および障害が発生していないノード43を介して、障害が発生していないノード43のストレージ媒体46上に複製される。
【０１０２】
図5は、複製ステップの進行の例、およびノードまたは少なくとも1つのノードに障害が発生した計算ブレードのすべての計算ノードのローカルバックアップを概略的に表しており、本発明の一バージョンによる障害管理方法の間の機会に別の計算ブレードのノードが追加されている。
【０１０３】
検索システムの第6のステップの第2の部分では、障害が発生した場合、障害が発生しているノードのチェックポイントファイルまたは少なくとも1つの障害ノードがある計算ブレードに属するすべてのノードを除いて、すべてのチェックポイントファイルがローカルに保持される。予防策として、第2の障害の管理をより困難なものにする、第1の障害が発生した計算ブレード内で第2の障害が生じることを回避するために、(少なくとも)1つの障害が発生したノードを有していた計算ブレード内のすべてのノードのバックアップは、この機会に追加された別の計算ブレードの計算ノードに関連付けられるストレージ媒体上に複製される。
【０１０４】
ストレージ媒体44は、この機会に追加された別の計算ブレードのノード61のストレージ媒体64に、障害が発生していないノード41のローカルバックアップを送信する。障害が発生していないノード51〜53のローカルバックアップは複製されることなしにローカルに保持され、障害が発生した進行中のタスクと同じタスクの間に現在の計算バックアップ状態から計算を再開するためにそれら自体の障害が発生していないノード51〜53を通じて検索される。ストレージ媒体46は、ノード61をすでに含んでいる同じ追加された計算ブレードのノード62および63に関連付けられるストレージ媒体65および66に、その関連付けられる障害が発生していないノードの状態のローカルバックアップだけでなく、障害が発生したノード42の状態のローカルバックアップの複製も送信する。したがって、媒体65および66のうちの1つは、障害が発生したノード42のバックアップと、障害が発生していないノード43の他のバックアップとの複製を回復する。媒体41〜43、51〜53、61〜63上のすべてのローカルバックアップ、ノード41〜43、51〜53、61〜63の状態は、それぞれ媒体44、46、54〜56、および64〜66に記憶され、互いに一致し、障害が発生している現在のタスクと同じタスクの間に同じ計算を後で再開することができる同じ計算状態に対応する。
【０１０５】
図6は、障害が発生している計算ノードなしですべての計算ブレードの自体のローカルバックアップを使用して計算を再開するステップ、および少なくとも1つの障害が発生しているノードを有する計算ブレードのノードのバックアップの複製から追加された新しい計算ブレードのためのステップの進行の例を概略的に表しており、本発明の一態様による障害管理のプロセス中に、障害が発生した同じタスク中に計算が再開され、少なくとも1つの計算ノードの障害が引き起こされる。
【０１０６】
第7のステップでは、障害が発生した現在のタスクと同じタスクの間に、障害が発生していないノードについては、その最後に保存した状態から、単にそれら自体の非複製ローカルバックアップから、また障害が発生しているノードを有する計算ブレードに属するノードについては、障害が発生しているノードを有するこの計算ブレードのノードのローカルバックアップの複製から開始して、計算を再開することができ、複製は、計算においてまだ使用されていない新しい計算ブレードのノード上で実装され、その機会にこの計算に追加され、すなわち、障害が発生した機会に追加される。
【０１０７】
障害が発生していないノード51〜53は、それら自体のストレージ媒体54〜56に記憶されている自体のバックアップから計算を再開する。ノード41〜43は計算を再開せず、それらは除外される。その機会に追加された新しい計算ブレードのノード61〜63は、障害が発生しているノードを有する計算ブレードのためのノード41〜43のバックアップの複製から計算を再開し、これらの複製はそれら自体のストレージ媒体64〜66に記憶される。
【０１０８】
もちろん、本発明は、説明され表された例および実装形態方法に制限されない。本発明はその分野内に応じて多数のユーザバリエーションの能力を有する。
【０１０９】
付録1:前述の障害管理方法中に使用されるコンピュータリスト。
【０１１０】
「プロビジョン/生成構成スイッチ」(「Layout.d/switch.conf generator」)の部分
linestart="Priority=10\nRoot=Cluster\n\n#Root level Layout configuration\nEntity=Cluster Type=Center Enclosed="
linepci="\n\n#Switch level Layout configuration"
linenode="\n\n#Node level Layout configuration"
while true; do
first=`nodeset -e $nodes | awk '{print $1;}'`
bmc=bmc${first##[a-z]*[a-z]}
radical=`echo $first | sed -e 's/[0-9]*$//'`
unset pci
for line in `$ssh pmsmModel.py display -n $bmc --neighbour --csv --column NAME LOCATION --no-header`; do
if [[ $line = "Error" ]]; then
echo "error: $first and its bmc $bmc not found by pmsmModel.py"
exit 3
fi
location=`echo $line | cut -d "," -f2`
name=`echo $line | cut -d "," -f1`
current=$radical`echo $name | sed -e "s/.*\[bmc//g"| sed -e "s/\]//g"`
end=${location: -2}
begin=${location::-2}
if [ `nodeset -c $nodes -i $current` = 0 ]; then
continue
fi
if [[ ! -v pci ]]; then
pci=$begin
liste=$current
else
if [ "$pci" = "$begin" ]; then
liste="$liste,$current"
else
echo "error: $pci and $begin set in same neighbourhood for $bmc"
exit 3
fi
fi
if [[ $end = "Rp" ]]; then
role="Manager"
elif [[ $end = "Mp" ]]; then
role="Backup"
elif [[ $end = "Lp" ]]; then
role="Other"
else
echo "error: $current has an unknown position on $pci: $end"
exit 3
fi
linenode="$linenode\nEntity=$current Type=Node Role=$role PCISwitch=$pci"
done
if [ `nodeset -c $liste -i $first` = 0 ]; then
echo "error: $first and its bmc $bmc not really found in $pci"
exit 3
fi
if [[ ! -v listepci ]]; then
listepci=$pci
else
listepci="$listepci,$pci"
fi
liste=`nodeset -f $liste`
linepci="$linepci\nEntity=$pci Type=Switch NodeList=$liste Enclosed=$liste"
if [ `nodeset -c $nodes -x $liste` = 0 ]; then
break;
fi
nodes=`nodeset -f $nodes -x $liste`
done
listepci=`nodeset -f $listepci`
total="$linestart$listepci$linepci$linenode"
if [[ -v output ]]; then
echo -e $total > $output
else 
echo -e $total
fi
exit 0
【０１１１】
FTIライブラリを使用するための修正の例
int main(int argc, char *argv[])
{
int rank, nbProcs, nbLines, i, M, arg;
double wtime, *h, *g, memSize, localerror, globalerror = 1;
MPI_Init(&argc, &argv);
FTI_Init(argv[2], MPI_COMM_WORLD);
MPI_Comm_size(FTI_COMM_WORLD, &nbProcs);
MPI_Comm_rank(FTI_COMM_WORLD, &rank);
M = (int)sqrt((double)(arg * 1024.0 * 512.0 * nbProcs)/sizeof(double));
nbLines = (M / nbProcs)+3;
h = (double *) malloc(sizeof(double *) * M * nbLines);
g = (double *) malloc(sizeof(double *) * M * nbLines);
initData(nbLines, M, rank, g);
memSize = M * nbLines * 2 * sizeof(double) / (1024 * 1024);
FTI_Protect(0, &i, 1, FTI_INTG);
FTI_Protect(1, h, M*nbLines, FTI_DBLE);
FTI_Protect(2, g, M*nbLines, FTI_DBLE);
wtime = MPI_Wtime();
for (i = 0; i < ITER_TIMES; i++) {
int checkpointed = FTI_Snapshot();
localerror = doWork(nbProcs, rank, M, nbLines, g, h);
if (((i%ITER_OUT) == 0) && (rank == 0)) {
printf("Step : %d, error = %f\n", i, globalerror);
}
if ((i%REDUCE) == 0) {
MPI_Allreduce(&localerror, &globalerror, 1, MPI_DOUBLE, MPI_MAX,  
FTI_COMM_WORLD);
}
if(globalerror < PRECISION) {
break;
}
}
if (rank == 0) {
printf("Execution finished in %lf seconds.\n", MPI_Wtime() - wtime);
}
free(h);
free(g);
FTI_Finalize();
MPI_Finalize();
return 0;
}
【０１１２】
「NVMeディスク検出制御とマウントポイント」の部分
#!/usr/bin/bash
# Copyright (C) Christophe Laferriere 2017 Bull S. A. S. - All rights reserved
# Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois
# This is not Free or Open Source software. Please contact Bull S. A. S. for
# details about its license.
# This script checks that an NVMe disk is mounted in a given location
# Default hardcoded location for mountpoint
FTI_CKPT_LOCATION="/localckpt"
# Where is mounted the NVMe disk :
NVME_MOUNT_LOCATION=`mount | grep nvme | cut -d ' ' -f 3`
# If no NVMe disk is mounted, exit with error code :
[[ -z $NVME_MOUNT_LOCATION ]] && echo "Error: No NVMe disk mounted" && exit 1
# Finally check if NVMe is mounted in the right place :
if [[ $FTI_CKPT_LOCATION == $NVME_MOUNT_LOCATION* ]] ;
then
exit 0
else
echo "Error: NVMe disk is not mounted where it should be ($FTI_CKPT_LOCATION vs $NVME_MOUNT_LOCATION)"
exit 1
fi
【０１１３】
「バックアップ取得」の部分では、スクリプトはPCIeスイッチマネージャノードのルートで実行している。
#!/bin/bash
EXECID=$1
MANAGER=$2 #10050
CRASHEDNODE=$3 # 2 <=> pluton10049
#PCIe switch reconfiguration
bpsm_grab_port 3
ipmitool -H bmc${MANAGER} raw 0x3a 0xcd ${CRASHEDNODE}  
echo 1 > /sys/bus/pci/devices/0000:00:00.0/rescan
#Checkpoint recovery and flush
mkdir /localrecovery ; mount /dev/nvme1n1 /localrecovery
cp -r /localrecovery/${EXECID} /scratch/globalckpt/
mv /scratch/globalckpt/${EXECID}/l1 /scratch/globalckpt/${EXECID}/l4
cp /localckpt/${EXECID}/l1/* /scratch/globalckpt/${EXECID}/l4/
mv /scratch/meta/${EXECID}/l1 /scratch/meta/${EXECID}/l4
【符号の説明】
【０１１４】
1  PCIeスイッチ
2  計算ノード
3  ストレージ媒体
4  リンク
6  リンク
7  PCIe双方向接続
8  PCIe双方向接続
9  PCIe双方向接続
11  ポート0
12  ポート1
13  ポート
14  ポート2
15  ポート3
16  ポート
17  ポート8
18  ポート9
19  ポート
21  計算ノード
22  計算ノード
23  計算ノード
31  ストレージ媒体
32  ストレージ媒体
33  ストレージ媒体
41〜43  ノード
41  ノード
42  ノード
43  ノード
44〜46  ストレージ媒体
44  ストレージ媒体
45  ストレージ媒体
46  ストレージ媒体
51〜53  ノード
54〜56  ストレージ媒体
61  ノード
61〜63  媒体
61〜63  ノード
62  ノード
63  ノード
64  ストレージ媒体
64〜66  媒体
64〜66  ストレージ媒体
65  ストレージ媒体
66  ストレージ媒体
100  並列ファイルシステム
【図１】
2020017268.tif 000004
【図２】
2020017268.tif 000005
【図３】
2020017268.tif 000006
【図４】
2020017268.tif 000007
【図５】
2020017268.tif 000008
【図６】
2020017268.tif 000009
【外国語明細書】
2020017268000001.pdf