(57)【要約】      （修正有）【課題】ノードネットワーク内の障害管理手段の提供。【解決手段】ストレージ媒体４４及び５４〜５６は、グローバルネットワークバックアップを実行するために、又は少なくともネットワークのその部分に対して、障害のないノード４１及び５１〜５３へのローカルバックアップを並列ファイルシステム１００に送信する。このグローバルバックアップを実行することの一部として、ストレージ媒体４６は、その障害の発生していない関連ノード４３の状態のローカルバックアップだけでなく、障害が発生したノード４２の状態のローカルバックアップの複製も並列ファイルシステム１００に送信する。したがって、並列ファイルシステム１００は、ノード４１〜４３及び５１〜５３の状態についてのグローバルバックアップを、互いにコヒーレントに、及び同じ計算の状態に対応して記憶することができ、そこから、この同じ計算を使用して新しいタスクを後で再開する。【選択図】図５
2020017269.tif 000002
【特許請求の範囲】
【請求項１】
ノードネットワーク(21〜73)における障害管理方法であって、同じ計算を実行する前記ネットワークの前記ノード(21〜73)の全部または一部のうちの考慮中のノード(21〜53)ごとに、
●第1に、この考慮中のノード(21〜53)の状態をこの考慮中のノード(21〜53)のストレージ媒体(31〜56)にローカルにバックアップするためのステップであって、このストレージ媒体(31〜56)とこの考慮中のノード(21〜53)との間のリンクが、このストレージ媒体(31〜56)から別のノード(21〜73)へリダイレクトされ得る、ステップと、
●次いで、前記考慮中のノードに障害が発生した場合(21、42)、このストレージ媒体(22、45)を、前記考慮中のノード(21、42)とは異なる動作ノード(23、43)に接続するために、前記考慮中のノード(21、42)とそのストレージ媒体(22、45)との間の前記リンクをリダイレクトすることによって、この考慮中のノード(21、42)の前記状態の前記ローカルバックアップを検索するためのステップと
を備え、
●前記検索ステップに使用されるこれらの考慮中のノード(21〜53)の前記ローカルバックアップが、この計算の同じ状態に対応するように互いにコヒーレントである、方法。
【請求項２】
同じ計算を実行するネットワークのノード(21〜73)の全部(21〜53)または部分的において考慮中のノードごとに、
●第1に、この考慮中のノード(21〜53)の状態を、この考慮中のノード(21〜53)のストレージ媒体(31〜56)にローカルにバックアップするステップであって、次いで、このストレージ媒体(31〜56)とこの考慮中のノード(21〜53)との間のリンクが、このストレージ媒体から別のノード(21〜73)にリダイレクトされ得る、ステップと、
●次いで、前記考慮中のノードに障害が発生した場合(21、42)、前記考慮されているノード(21、42)について前記ストレージ媒体(31、45)を異なる動作ノード(23、43)に接続するために、前記考慮中のノード(21、42)とそのストレージ媒体(31、45)との間の前記リンクをリダイレクトすることによって、この考慮中のノード(21、42)の前記状態の前記ローカルバックアップを検索するステップであって、この動作ノード(23、43)がすでにこの計算を実行している、ステップと、
●前記検索ステップに使用されるこれらの考慮中のノード(21〜53)の前記ローカルバックアップが、この計算の同じ状態に対応するように互いにコヒーレントであり、
●次いで、少なくとも1つの考慮中のノードに障害が発生した場合(21、42)、前記ローカルバックアップをネットワークファイルシステム内のグローバルバックアップに返すステップと、
を含む、ノードネットワーク(21〜73)における障害管理方法。
【請求項３】
●返却ステップの後、すでに前記計算に参加している前記ノード(21〜53)および/または前記計算にまだ参加していないノード(61〜73)の全部または一部を使用してネットワークリソースマネージャによって新しいタスクをスケジューリングする間に、前記ローカルバックアップを統合する前記グローバルバックアップから前記計算を再開するステップ
を備えることを特徴とする、請求項2に記載の障害管理方法。
【請求項４】
前記ネットワークリソースマネージャによる前記新しいタスクの前記スケジューリング中に、前記新しいタスクが、これがより長くより複雑なタスクであるので、障害に対してさらに堅牢なノード(61〜73)に割り当てられることを特徴とする、請求項3に記載の障害管理方法。
【請求項５】
前記ネットワークリソースマネージャによる前記新しいタスクの前記スケジューリング中に、少なくとも1つのノード(42)に障害が発生し始めた前記タスクの前記障害が発生していないノード(51〜53)のうちの少なくとも一部が、それらが置き換えるものとは異なる特性を有する前記新しいノード(71〜73)によって置き換えられることを特徴とする、請求項3または4に記載の障害管理方法。
【請求項６】
それらが置き換えるものとは異なる特性を有する前記新しいノード(71〜73)が、個々にまたはノードのグループ内で集合的に、それらが置き換えるものよりも性能が高いノード(71〜73)であることを特徴とする、請求項5に記載の障害管理方法。
【請求項７】
高性能なノード(714〜73)がコンピューティングアクセラレータにアタッチされているが、前記置き換えられたノード(51〜53)はアタッチされていないことを特徴とする、請求項6に記載の障害管理方法。
【請求項８】
前記新しいノード(71〜73)が、少なくとも1つのノード(42)が障害を発生し始めた前記タスクの開始後に利用可能になったことを特徴とする、請求項3から7のいずれか一項に記載の障害管理方法。
【請求項９】
前記ネットワークリソースマネージャが、このノード(42)と前記ネットワークリソースマネージャとの間の通信の喪失によって、考慮中のノード(42)の前記障害を検出することを特徴とする、請求項3から8のいずれか一項に記載の障害管理方法。
【請求項１０】
ノード(21〜73)の前記ネットワークにおいて、前記計算と並行して1つまたは複数の他の計算が実行されることを特徴とする、請求項1から9のいずれか一項に記載の障害管理方法。
【請求項１１】
同じ計算状態でこれらのすべてのノード(61〜73)を再開するように、ノードを再開するためのすべての前記ステップが互いに同期されることを特徴とする、請求項3から10のいずれか一項に記載の障害管理方法。
【請求項１２】
同じ計算を実行する前記ネットワークの前記ノード(21〜53)の全部または一部について、前記動作ノード(62)と、それが置き換える前記障害が発生しているノード(42)とが異なる計算ブレードに属することを特徴とする、請求項1から11のいずれか一項に記載のノードのネットワークにおける障害管理方法。
【請求項１３】
これらすべてのステップが、同じ計算を実行する前記ネットワーク内のすべての前記ノード(21〜53)に対して実行されることを特徴とする、請求項1から12のいずれか一項に記載の障害管理方法。
【請求項１４】
前記ストレージ媒体(31〜56)を前記動作ノード(21〜53)に接続するための、前記考慮中のノード(21〜53)とそのストレージ媒体(31〜56)との間の前記リンクの前記リダイレクションが、いくつかのノード(21〜23)をそれらのストレージ媒体(31〜33)に接続するスイッチ(1)におけるスイッチング変更によって実行されることを特徴とする、請求項1から13のいずれか一項に記載の障害管理方法。
【請求項１５】
前記検索ステップが、前記障害が発生しているノード(21、42)の前記状態の前記ローカルバックアップの前記ストレージ媒体(31、45)のアタッチメントを、前記障害が発生しているノード(21、42)自体を通過することなしに、前記障害が発生しているノード(21、42)と、前記障害が発生しているノード(21、42)の前記ローカルバックアップのそのストレージ媒体(31、45)とがアタッチされていたスイッチ(1)を介して変更することを特徴とする、請求項1から14のいずれか一項に記載の障害管理方法。
【請求項１６】
アタッチメントの前記変更が、前記スイッチ(1)にコマンドを送信することによって達成され、このコマンドが、管理ポート(11、14)によって前記スイッチ(1)にアタッチされた前記ノード(22、23)のうちの1つを通過することを特徴とする、請求項15に記載の障害管理方法。
【請求項１７】
スイッチ(1)がPCIeスイッチであることを特徴とする、請求項14から16のいずれか一項に記載の障害管理方法。
【請求項１８】
3〜10個のノード(21〜53)が同一のスイッチ(1)にアタッチされていることを特徴とする、請求項14から17のいずれか一項に記載の障害管理方法。
【請求項１９】
同じ計算を実行する前記ネットワークの前記ノード(21〜53)の全部または一部について、考慮中のノードに障害が発生しない場合でも、これらすべてのノード(21〜53)のグローバルバックアップステップを、これらのノード(21〜53)のすべての前記ローカルバックアップステップよりも少ない頻度で実行することも備えることを特徴とする、請求項1から18のいずれか一項に記載の障害管理方法。
【請求項２０】
同じ計算を実行する前記ネットワーク内の前記ノード(21〜53)の全部または一部について、前記ネットワークが、前記同じ計算を実行するノード(21〜53)を置き換えるためのノードを含まないことを特徴とする、請求項1から19のいずれか一項に記載の障害管理方法。
【請求項２１】
同じ計算を実行する前記ネットワークの前記ノード(21〜53)の全部または一部について、前記ストレージ媒体(31〜56)がフラッシュメモリであることを特徴とする、請求項1から20のいずれか一項に記載の障害管理方法。
【請求項２２】
これらのフラッシュメモリがNVMeメモリであることを特徴とする、請求項21に記載の障害管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノードネットワークにおける障害を管理するための方法、およびこの障害管理に関連付けられるノードネットワークセクションに関する。
【背景技術】
【０００２】
同じ計算を実行するノードのネットワークにおいては、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つまたは複数の従来の中間バックアップの両方の置換えを可能にする。本発明によって提案されたローカル-中間バックアップによってほとんどの障害を管理することができ、後者は中間バックアップと同じくらい効果的であるが、実際にはローカルバックアップを犠牲にしている。
【００１６】
本発明によって提供されるこのバックアップは、効率と複雑さとの間の最適な妥協点であり、グローバル戦略に従って使用される。このグローバル戦略では、障害が発生したノードのバックアップを取得し、それをグローバルバックアップに統合して、リソースマネージャが新しいタスクを開始できるようにするために、計算ノードとそれらの関連付けられるメモリとの間のリンクリダイレクションメカニズムが使用される。
【００１７】
このようにして、特にこれらが多数ある場合、ノード間の同期は、同期され、保証されるべきノードの地理的な近接性のおかげで、具体的には、計算を再開するための新しいタスクの優先的なスケジューリングを通じて、よりローカルな戦略よりも管理しやすくなる。
【００１８】
したがって、同期されるべきこれらの選択されたノードは物理的にあまり遠くない(障害が発生しているノードが遠く離れたノードに置き換えられた場合、そのノードは不良なノードに隣接するノードと大幅に通信する必要があった)ため、同期されるべきノード間の遅延のいかなる危険性も回避され得、同時に、実行されるべき計算全体についての関連付けられる遅延の危険性を回避する。
【００１９】
よりローカルな戦略は、障害が発生しているノードのバックアップを検索し、それを同じタスク中にイベントに追加された新しいノードにアタッチするために、計算ノードと関連付けられるメモリとの間のリンクリダイレクションメカニズムを使用し、障害が発生していないノード、および好ましくは障害が発生したノードを含む計算ブレードと統合されていないノードが保持され、それら自身のローカルバックアップから再開される。
【００２０】
この目的のために、本発明は、同じ計算を実行するネットワークのノードの全部または一部の考慮中のノード(considered node)ごとに、第1に、このノードのためのストレージ媒体に関して考慮中のノードのためのローカルバックアップステップであって、このストレージ媒体とこのノードとの間のリンクは、ストレージ媒体から別のノードにリダイレクトされ得る、ローカルバックアップステップを備え、次いで、考慮中のノードに障害が発生した場合、考慮中のノードとは異なる動作ノードにストレージ媒体を接続するために、考慮中のノードとそのストレージ媒体との間のリンクをリダイレクトすることによって、考慮中のノードに対するローカルバックアップ検索ステップがあり得る、ノードネットワークにおける障害管理方法を提案する。この動作ノードはすでに前記計算を実行しているので、検索ステップに使用されるこれらの考慮中のノードのローカルバックアップは、この計算の同じ状態に対応するように互いにコヒーレントであり、次いで、少なくとも1つの考慮中のノードに障害が発生した場合、ネットワーク内のファイルシステムレベルにおいてローカルバックアップからグローバルバックアップへの返却ステップを実行することができる。
【００２１】
好ましくは、障害管理方法は、返却ステップの後、ネットワークリソースマネージャがすでに計算に参加しているノードおよび/またはこれにまだ参加していないノードの全部または一部を使用して新しいタスクをスケジューリングすることによって、ローカルバックアップを統合するグローバルバックアップから計算を再開するステップを備える。
【００２２】
より一般的には、本発明は、ストレージ媒体とそのリダイレクションノードとの間のリンクを別のノードに作成するので、ノードの障害にもかかわらず、使用するグローバル戦略およびローカル戦略の両方を考慮しながらノードに障害が発生したときにストレージ媒体上でバックアップが実行され、このバックアップは引き続き利用可能である。
【００２３】
このより一般的な方法では、本発明はまた、同じ計算を実行するネットワークのノードの全部または一部の考慮中のノードごとに、第1に、考慮中のノードに関するストレージ媒体上のこの考慮中のノードに関するローカルバックアップステップを備える、ノードのネットワークにおける障害管理方法にも関することができ、このストレージ媒体とこのノードとの間のリンクをこのストレージ媒体から別のノードにリダイレクトすることができる。次いで、考慮中のノードに障害が発生している場合、ストレージ媒体を考慮中のノードとは異なる動作ノードに接続するために、考慮中のノードとそのストレージ媒体との間のリンクをリダイレクトすることによって、この考慮中のノードのローカルバックアップ検索ステップを実行することができ、検索ステップに使用されるこれらの考慮中のノードのローカルバックアップは、計算の同じ状態に対応するように互いにコヒーレントである。
【００２４】
好ましいバージョンによれば、本発明は、上述の本発明の目的のうちの1つまたは別のものに適用される、互いに部分的に組み合わせて、または互いに全体的に組み合わせて、別々に使用され得る以下の特徴のうちの1つまたは複数を備える。
【００２５】
ネットワークリソースマネージャによる新しいタスクのスケジューリング中に、新しいタスクは、これがより長くより複雑なタスクであるので、障害に対して全部がさらに堅牢なノードに割り当てられることが好ましい。
【００２６】
したがって、ノードの再割り当て戦略は、タスクの長さと複雑さに応じて適合されるため、改善される。新しいタスクのスケジューリングは、考慮中のタスクのタイプにより良く適合することによってこの改善を可能にする。
【００２７】
ネットワークリソースマネージャによる新しいタスクのスケジューリング中に、少なくとも1つのノードが不良になったタスク内の障害が発生していないノードの少なくとも一部が、それらが置き換えるものとは異なる特性を有する新しいノードによって置き換えられることが好ましい。
【００２８】
このように、ノードの再割り当ての戦略は、より良く適合され、より良く適合されたがタスクが最初に起動された時点では利用可能ではなかった計算ノードを使用できるようになるため、改善される。新しいタスクのスケジューリングは、考慮されるタスクのタイプにより良く適合することによってこの改善を可能にする。
【００２９】
新しいノードが、それらが置き換えるものとは異なる特性を有し、個々にまたはノードのグループとしてまとめて、より効率的であることが好ましい。
【００３０】
したがって、ノードの再割り当ての方がより効率的であり、タスクの最初の起動時には利用可能ではなかったより効率的な計算ノードを使用できるようになるため、ノードの再割り当ての戦略が改善される。新しいタスクをスケジューリングすると、パフォーマンスが向上することによってこの改善が可能になる。
【００３１】
好ましくは、より高性能なノードはコンピューティングアクセラレータにアタッチされているが、それらが置き換えたノードはアタッチされていなかった。
【００３２】
したがって、新しいタスクに割り当てられた新しいノードは、以前のノードよりもはるかに効率的である。これにより、それらを必要とするすべてのタスクがすでに実行されているため、そのような強力なノードを未使用のままにしないことが可能になる。ここでは、元のノードをより効率的なノードに置き換えるための障害を利用し、「一石二鳥」である。
【００３３】
新しいノードは、少なくとも1つのノードが不良になったタスクの開始後に利用可能になることが好ましい。
【００３４】
したがって、タスクの起動時に利用可能ではなかったノードを使用することができる。したがって、たとえこれらがタスクの実行中にのみ利用可能になるとしても、強力なノードを「回復」できるため、最適化はここで重要である。
【００３５】
ネットワークリソースマネージャは、このノードとネットワークリソースマネージャとの間の通信の喪失によって、考慮中のノードの障害を検出することが好ましい。
【００３６】
したがって、追加の障害検出システムを設置する必要はなく、障害が発生しているノードとネットワークリソースマネージャとの間の通信の喪失は、現在のタスクの実行中に自動的に検出される。
【００３７】
ノードのこのネットワークにおいては、計算と並行して1つまたは複数の追加の計算が実行されることが好ましい。
【００３８】
したがって、最適化は、終了する並列計算が、利用可能になり、最終的により効率的になるノードを解放する限り、さらに改善することができる。これらは、実行中にこの障害の正確な検索の時点で障害が発生した計算によって、即座にそして直接、実際には「オンザフライ」で検索することができ、やはり「一石二鳥」である。
【００３９】
同じ計算の状態ですべてのノードを再開するように、すべてのノード再開ステップは互いに同期されることが好ましい。
【００４０】
したがって、これにより、再開後に実行される残りの計算に対して完全な一貫性が保証される。
【００４１】
同じ計算を実行するネットワークのノードの全部または一部について、それが置き換える動作ノードおよび障害が発生したノードは異なる計算ブレードに属することが好ましい。
【００４２】
したがって、支持部とノードとの間のリンクのリダイレクトは、たとえ大きな障害が発生した場合でも、また、計算ブレード全体に関して比較的一般化された方法でも実行することができる。
【００４３】
これらすべてのステップは、同じ計算を実行するすべてのネットワークノードに対して実行されることが好ましい。
【００４４】
したがって、本発明によって提案される障害管理方法の利点は、同じ計算を実行するネットワーク内のすべてのノードに拡張することによって一般化される。
【００４５】
ストレージ媒体を動作ノードに接続するための当該ノードとそのストレージ媒体との間のリンクのリダイレクトは、いくつかのノードをそれらのストレージ媒体に接続するスイッチを通るルーティングの変更によって達成されることが好ましい。
【００４６】
したがって、このリダイレクトは、信頼性があり制御されているネットワーク要素によって実行される単純な動作によって実行される。
【００４７】
検索ステップは、障害が発生したノード自体を経由せずに、障害が発生したノードおよびそのローカルバックアップストレージ媒体にアタッチされたスイッチを通じて障害が発生したノードからローカルバックアップストレージ媒体のアタッチメントを変更することが好ましい。
【００４８】
そのため、たとえ障害が発生しているノードの完全な物理的障害が発生した場合でも、リダイレクトを実行することができる。
【００４９】
アタッチメントの変更は、スイッチにコマンドを送信することによって達成されることが好ましく、このコマンドは管理ポートによってスイッチにアタッチされたノードのうちの1つを通過する。
【００５０】
したがって、管理ポートまたは管理は、同じスイッチにアタッチされた障害が発生したノードのストレージ媒体を検索するために割り当てられる。
【００５１】
このスイッチはPCIeスイッチ(周辺機器相互接続エクスプレス)であることが好ましい。
【００５２】
したがって、このスイッチは、マイクロプロセッサを介さずにデバイスが互いに通信できるようにするために特に適しているため、特に有利である。これは、たとえば、障害が発生している計算ノードをバイパスできることを意味する。
【００５３】
このPCIeスイッチを使用することにより、ストレージ媒体、たとえば障害が発生した計算ノードのローカルバックアップを含むストレージディスクを別の計算ノードに再アタッチすることが可能になる。この動作は高速で、ローカルバックアップデータの体系的なコピーを必要とせず、具体的には、障害が発生していない計算ノードには必要ない。
【００５４】
同じスイッチに3〜10個のノードがアタッチされていることが好ましい。
【００５５】
したがって、スイッチは、このノードの小グループ内のノードに障害が発生した場合、このノードの小グループを容易に管理することができる。
【００５６】
障害管理方法はまた、同じ計算を実行するネットワークのノードの全部または一部について、たとえ考慮中のノードに障害が発生しなくても、これらすべてのノードについてのグローバルバックアップステップを、これらのノードのすべてのローカルバックアップステップよりも少ない頻度で実行することを含むことが好ましい。
【００５７】
したがって、一方では、大多数の障害を単純かつ効率的な方法で管理するために本発明によって提供されるローカル-中間バックアップ、そして他方では、より複雑でより高価であるが少数の重大な障害のために確保されるグローバルバックアップは、本発明によって提案された障害管理方法の全体的な複雑さと全体的な効率との間の優れた妥協点である。
【００５８】
このように複数のバックアップレベルを使用し、高速ローカルバックアップおよびより複雑で高価なリモートグローバルバックアップを使用した、耐障害性アプリケーションの文脈では、本発明によって提案された障害管理方法は、たとえこれが完全な障害であっても、ノード上の物理的障害に続いてアプリケーションが再起動することを可能にし、ほとんどの場合、しばしばはるかに古いリモートバックアップから再起動する必要はなく、より最近で、より安価な、すべてのローカルバックアップから開始する。しかしながら、よりまれな障害のケースでは、リモートグローバルバックアップの使用が必要になる場合がある。障害が発生した計算ノードからローカルデータを検索する機能により、ほとんどの場合、最新のローカルバックアップからアプリケーションを再起動することが可能になる。
【００５９】
同じ計算を実行するネットワークのノードの全部または一部について、ネットワークは同じ計算を実行するノードに対するいかなるスペアノードも含まないことが好ましい。
【００６０】
したがって、進行中のこの計算において障害が発生している場合に単にスペアノードとして機能するためにこの計算において使用されることなしに、進行中の計算に関連したままで、計算ノードが有意な指定期間中にブロックされない限り、ネットワークノードの利用率は最大化するのがより容易である。実際、ブロックされる可能性があるスペアノードの数は限られたままであり、いくつかの連続した障害の不幸な発生は計算の損失、おそらくかなりの損失を引き起こすか、連続した障害の最悪の場合でも、このようにブロックされる可能性があるスペアノードの数は対処するために重要になる。これは、計算ノードのネットワークの全体的な収益性に有害となる、ブロックされた未使用のスペアノードの割合が存在する場所である。
【００６１】
好ましくは、同じ計算を実行するネットワークのノードの全部または一部について、ストレージ媒体はフラッシュメモリである。
【００６２】
したがって、使用されるメモリは単純、高速、かつ永続的である。
【００６３】
これらのフラッシュメモリは、NVMeメモリ(不揮発性メモリエクスプレス)であることが好ましい。
【００６４】
したがって、使用されるメモリは、PCIeスイッチ(周辺機器相互接続エクスプレス)と通信するために特によく適している。
【００６５】
計算ノードのネットワークは、少なくとも1000個の計算ノード、理想的には少なくとも5000個の計算ノード、さらに好ましくは少なくとも10000個の計算ノードを備えることが好ましく、大規模なネットワークのために、現在の計算を完全に失うことがさらに危機的になるため、本発明による障害管理方法がさらに重要になる。
【００６６】
アプリケーションがより多数の計算ノードで構成されるクラスタ上で実行されている場合は、耐障害性の原則がより重要になる。プロセッサ、メモリ、および他のデバイスの数が多いほど、実行プロセスの終了前に障害が発生する可能性が高くなる。このタイプのプラットフォーム上での実行を目的とするアプリケーションは、障害の直前に存在した状態にできるだけ近い状態で再起動に必要なデータを保護すること(チェックポイント)を可能にする耐障害性ライブラリを使用する。したがって、これらのアプリケーションは最初から計算をやり直す必要はない。
【００６７】
本発明の他の特徴および利点は、例および添付の図面を参照しながら与えられる本発明の好ましいバージョンの以下の説明を読めば明らかになるであろう。
【図面の簡単な説明】
【００６８】
【図１】本発明による障害管理方法の例が取り得るネットワークの一部に関する本発明の一バージョンによる、PCIeスイッチによって互いに接続されたノードのグループおよびそれらのストレージ媒体を含むネットワーク部分の例を概略的に表す図である。
【図２】本発明の一バージョンによる、障害管理方法中のローカルバックアップステップの進行の例を概略的に表す図である。
【図３】本発明の一バージョンによる、障害管理方法中に障害が発生しているノードを引き起こす障害の発生の例を概略的に表す図である。
【図４】本発明の一バージョンによる、障害管理方法中に障害が発生しているノードのローカルバックアップを回復するためのステップの進行の例を概略的に表す図である。
【図５】本発明の一バージョンによる、障害管理方法中にグローバルバックアップのためにローカルバックアップを返すステップの進行の例を概略的に表す図である。
【図６】本発明の一バージョンによる、障害管理方法中にグローバルバックアップが新しい計算タスクを再開するための動作ステップの進行の例を概略的に表す図である。
【発明を実施するための形態】
【００６９】
図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への接続を中止するが、デフォルト管理ポートにアタッチされて、障害が発生した計算ノード21の計算のためのローカルバックアップをトレースすることができるようになる計算ノード23に接続され、ストレージ媒体31は計算ノード21から23のグループの外側の別のスペア計算ノードにリンクされているので、この他の計算ノードは、次いで、リソースマネージャによってスケジューリングされた新しいタスクの間にストレージ媒体31から送信された、計算ノード21の計算状態のローカルバックアップから、障害が発生した計算ノード21で中断された計算タスクを引き継ぐ。
【００７６】
スイッチ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」であり得る。
【００９５】
本特許出願に記載されているハードウェアおよび耐障害性ソフトウェアを使用して障害回復プロセスを提供するために、「Simple Linux（登録商標） Utility for Resource Management」(SLURM)、特に「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)メッセージを介してコントローラから計算ノードに渡され、それはプロローグおよびエピローグ環境に環境変数をインストールするために使用される。
【０１０１】
第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は、本発明の一バージョンによる、障害管理方法中にグローバルバックアップにローカルバックアップを返すためのステップの進行の例を概略的に表す図である。
【０１１６】
検索システムの第6のステップの第2の部分では、すべてのチェックポイントファイルが並列ファイルシステム(「Parallel File System」)に送信される。
【０１１７】
ストレージ媒体44および54〜56は、グローバルネットワークバックアップを実行するために、または少なくともネットワークのその部分に対して、障害のないノード41および51〜53へのローカルバックアップを並列ファイルシステム100に送信する。このグローバルバックアップを実行することの一部として、ストレージ媒体46は、その障害の発生していない関連ノード43の状態のローカルバックアップだけでなく、障害が発生したノード42の状態のローカルバックアップの複製も並列ファイルシステム100に送信する。したがって、並列ファイルシステム100は、ノード41〜43および51〜53の状態についてのグローバルバックアップを、互いにコヒーレントに、および同じ計算の状態に対応して記憶することができ、そこから、この同じ計算を使用して新しいタスクを後で再開することができる。
【０１１８】
図6は、本発明の一実施形態による、障害管理方法中にグローバルバックアップが新しい計算タスクを再開するための動作ステップの進行の例を概略的に表す図である。
【０１１９】
第7のステップでは、所望の計算を実行するために新しいタスクが新しいノード割り振りに対して再提出される。アプリケーションが再起動される。FTIはチェックポイントファイルからデータをロードする。計算を再び始めて、異なるノード間でコヒーレントに保存された最後の状態から継続することができる。障害回復プロセスは、新しい障害が発生するまで、または実行中の計算が完了するまで、図2に示される第4のステップにおいて再び始められる。
【０１２０】
並列ファイルシステム100は、ストレージ媒体64〜66にそれぞれ関連付けられる計算ノード61〜63を備える新しい計算ブレードと、ストレージ媒体74〜76にそれぞれ関連付けられる計算ノード71〜73、ノード41〜43および71〜73の状態のローカルバックアップを備える別の計算ブレードとに計算ブレードを送信し、これらのノード61〜63および71〜73が、互いに整合し、並列ファイルシステム100内のグローバルバックアップに記憶されている最近のローカルバックアップに対応する状態から現在の計算を再び始めることを可能にする。
【０１２１】
次に実験の過程を説明する。
【０１２２】
タスクは、オプション「#SBATCH --checkpoint-restart」とともにスクリプト「sbatch」で提出される。
【０１２３】
付録1に従って修正されたアプリケーションはノード[10049-10050]で起動される。
#!/bin/bash
#SBATCH --job-name test-FT
#SBATCH --time 60:00
#SBATCH --nodes 2  
#SBATCH --output test-FT_%j.out
#SBATCH --ntasks 40
#SBATCH --nodelist pluton[10049,10050]
#SBATCH --ntasks-per-node=20
#SBATCH --checkpoint-restart
srun -n 40 $HOME/POC_pluton/hd.exe 40 config.fti
【０１２４】
以下の出力に示されるように、FTIは初期化された新しい「ID」実行を作成する。3つの変数が保護されている(ID0、1、および2)。各チェックポイントファイルのサイズは40MBである。疑似障害が発生する前に、1500回を超える反復が実行され、5つの制御点が作成される。
[FTI Information]: Reading FTI configurations file (config.fti)...
[FTI Information]: The execution ID is: 2017-09-05_16-23-20
[FTI Information]: FTI has been initialized.
Local data size is 10240 x 259 = 40.000000 MB (40).
Target precision: 0.005000
Maximum number of iterations: 5000
[FTI Information]: Variable ID 0 to protect. size per rank is 0.00MB.
[FTI Information]: Variable ID 1 to protect. size per rank is 20.23MB.
[FTI Information]: Variable ID 2 to protect. size per rank is 40.47MB.
Step: 0, error = 1.000000
[FTI Information]: Post-checkpoint took 1.01 sec. (Ag:1.01s, Pt:0.00s, Cl:0.00s)
[FTI Information]: Ckpt. ID 1 (L1) (40.47 MB/proc) taken in 1.98 sec.
Step: 500, error = 0.048781
[FTI Information]: Post-checkpoint took 1.76 sec. (Ag:0.26s, Pt:0.00s, Cl:1.50s)
[FTI Information]: Ckpt. ID 2 (L1) (40.47 MB/proc) taken in 3.13 sec.
[FTI Information]: Post-checkpoint took 2.43 sec. (Ag:0.95s, Pt:0.00s, Cl:1.48s)
[FTI Information]: Ckpt. ID 3 (L1) (40.47 MB/proc) taken in 3.46 sec.
Step: 1000, error = 0.024291
[FTI Information]: Post-checkpoint took 1.48 sec. (Ag:0.00s, Pt:0.00s, Cl:1.48s)
[FTI Information]: Ckpt. ID 4 (L1) (40.47 MB/proc) taken in 3.14 sec.
Step: 1500, error = 0.016173
[FTI Information]: Post-checkpoint took 1.86 sec. (Ag:0.15s, Pt:0.00s, Cl:1.71s)
[FTI Information]: Ckpt. ID 5 (L1) (40.47 MB/proc) taken in 3.69 sec.
srun: Job step aborted.
【０１２５】
SLURMはプルトンノード障害10049を検出した。プルトンノード10050はPCIeスイッチマネージャノードである。それは、PCIeスイッチの構成を変更し、プルトンノード10049のNVMeディスクに記憶されたチェックポイントファイルを複製し、そしてプルトンノード制御点ファイル[10049-10050]を並列ファイルシステムに転送する。このプロセスは、付録1に提示されているスクリプトを使用する。
【０１２６】
タスクは再度スケジューリングされるが、新しい割り振りプルト[10048,10050]にある。
【０１２７】
以下に示されるように、FTIはアプリケーションが正常に再開されたことを検出し、並列ファイルシステムに記憶されているチェックポイントデータを取得する。最後に保存された計算状態から計算が再開され、計算が完了するまで(エラー<0.005)反復が実行され、チェックが実行される。
[FTI Information]: Reading FTI configurations file (config.fti)...
[FTI Information]: This is a restart. The execution ID is: 2017-09-05_16-23-20
[FTI Information]: No possible to restart from level 1.
[FTI Information]: No possible to restart from level 2.
[FTI Information]: No possible to restart from level 3.
[FTI Information]: Recovering successfully from level 4.
[FTI Information]: FTI has been initialized.
Target precision: 0.005000
Maximum number of iterations: 5000
[FTI Information]: Post-checkpoint took 1.49 sec. (Ag:0.00s, Pt:0.00s, Cl:1.49s)
[FTI Information]: Ckpt. ID 6 (L1) (40.47 MB/proc) taken in 3.14 sec.  
Step: 2000, error = 0.012121
[…lot of iterations and some checkpoints…]
Step: 4500, error = 0.005382
[FTI Information]: Post-checkpoint took 1.61 sec. (Ag:0.12s, Pt:0.00s, Cl:1.48s)
[FTI Information]: Ckpt. ID 15 (L1) (40.47 MB/proc) taken in 3.47 sec.
Execution finished in 1980.580462 seconds.
[FTI Information]: FTI has been finalized.
【０１２８】
もちろん、本発明は、説明され示された例およびバージョンに限定されず、当業者に利用可能な多数の変形が可能である。
【０１２９】
付録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 retrieving and flush
mkdir /localretrieving ; mount /dev/nvme1n1 /localretrieving
cp -r /localretrieving/${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  ストレージ支持部
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  ストレージ媒体
31  支持部
32  ストレージ媒体
32  支持部
33  ストレージ媒体
33  支持部
41〜43  ノード
41  ノード
42  ノード
43  ノード
44〜46  ストレージ媒体
44〜46  ストレージ支持部
44  ストレージ媒体
45  ストレージ媒体
46  ストレージ媒体
51〜53  ノード
54〜56  ストレージ媒体
54〜56  ストレージ支持部
100  並列ファイルシステム
【図１】
2020017269.tif 000003
【図２】
2020017269.tif 000004
【図３】
2020017269.tif 000005
【図４】
2020017269.tif 000006
【図５】
2020017269.tif 000007
【図６】
2020017269.tif 000008
【外国語明細書】
2020017269000001.pdf