(57)【要約】フォールトトレラントコンピュータシステムおよび方法が、開示される。本システムは、それぞれ、プロセッサと、メモリとを含む、複数のＣＰＵノードと、少なくとも２つのＩＯドメインであって、ＩＯドメインのうちの少なくとも１つは、アクティブＣＰＵノードのための通信機能を実施するアクティブＩＯドメインと指定される、少なくとも２つのＩＯドメインと、各ＣＰＵノードを各ＩＯドメインに接続する、切替ファブリックとを含み得る。１つのＣＰＵノードは、スタンバイＣＰＵノードと指定され、残りは、アクティブＣＰＵノードとして指定される。故障、故障の開始、または予測される故障が、アクティブノード内で起こる場合、アクティブＣＰＵノードの状態およびメモリが、新しいアクティブＣＰＵノードになるスタンバイＣＰＵノードに転送される。
2021534524.tif 000002
【特許請求の範囲】
【請求項１】
フォールトトレラントコンピュータシステムであって、
複数のＣＰＵノードであって、各ＣＰＵノードは、プロセッサと、メモリとを備え、前記ＣＰＵノードのうちの１つは、スタンバイＣＰＵノードと指定され、残りは、アクティブＣＰＵノードとして指定される、複数のＣＰＵノードと、
少なくとも２つのＩＯドメインであって、前記ＩＯドメインのうちの少なくとも１つは、前記アクティブＣＰＵノードのための通信機能を実施するアクティブＩＯドメインと指定される、少なくとも２つのＩＯドメインと、
各ＣＰＵノードを各ＩＯドメインに接続する切替ファブリックと
を備え、
故障、故障の開始、および予測される故障のうちの１つが、アクティブノード内で起こる場合、前記アクティブＣＰＵノードの状態およびメモリが、ＤＭＡデータパスを通して前記スタンバイＣＰＵノードに転送され、前記スタンバイＣＰＵノードは、新しいアクティブＣＰＵノードになる、フォールトトレラントコンピュータシステム。
【請求項２】
各ＣＰＵノードはさらに、前記切替ファブリックと通信する通信インターフェースを備える、請求項１に記載のフォールトトレラントコンピュータシステム。
【請求項３】
各ＩＯドメインは、少なくとも２つの切替ファブリック制御コンポーネントを備え、各切替ファブリック制御コンポーネントは、前記切替ファブリックと通信する、請求項１に記載のフォールトトレラントコンピュータシステム。
【請求項４】
各ＩＯドメインはさらに、ＩＯデバイスのセットを備え、各ＩＯデバイスは、１つ以上の物理関数および／または仮想関数を備え、１つのＩＯドメイン内の１つ以上の物理関数および／または仮想関数は、共有可能である、請求項１に記載のフォールトトレラントコンピュータシステム。
【請求項５】
１つ以上の物理関数は、１つ以上の仮想関数を備える、請求項４に記載のフォールトトレラントコンピュータシステム。
【請求項６】
前記ＩＯデバイスのセットおよび前記１つ以上の物理関数および／または仮想関数は、前記１つ以上のＣＰＵノードのポートに割当可能な１つ以上のサブ階層を定義するように、１つ以上のＣＰＵノードおよび２つの切替ファブリック制御コンポーネントのうちの１つ以上のものに配分される、請求項４に記載のフォールトトレラントコンピュータシステム。
【請求項７】
前記ＩＯデバイスのセットのうちの１つ以上のものおよび前記仮想関数は、物理ＣＰＵノードのセットの間で区分化され、前記物理ＣＰＵノードのセットは、前記アクティブＣＰＵノードと、前記スタンバイＣＰＵノードとを備える、請求項４に記載のフォールトトレラントコンピュータシステム。
【請求項８】
各ＩＯドメイン内の管理プロセッサ上で起動する１つ以上の管理エンジンインスタンスをさらに備え、各管理エンジンは、個別の管理エンジンに接続される前記切替ファブリック制御コンポーネントにクエリを行い、制御コンポーネント毎の基準で、物理関数および／または仮想関数の列挙された階層を取得し、各管理エンジンは、列挙されたコンポーネント毎の階層を、各管理エンジンと関連付けられる前記ＩＯドメイン内の物理関数および／または仮想関数のドメイン毎の階層にマージする、請求項６に記載のフォールトトレラントコンピュータシステム。
【請求項９】
１つ以上のプロビジョニングサービスインスタンスをさらに備え、各プロビジョニングサービスは、各ＩＯドメイン内の前記管理プロセッサ上で起動し、各プロビジョニングサービスは、ドメイン毎の階層毎に、ドメイン毎の管理エンジンインスタンスにクエリを行い、各プロビジョニングサービスのドメイン毎のインスタンスは、他のＩ／Ｏドメイン内の前記プロビジョニングサービスと通信し、前記システム内に物理関数および／または仮想関数の統一階層を形成する、請求項７に記載のフォールトトレラントコンピュータシステム。
【請求項１０】
前記プロビジョニングサービスのドメイン毎のインスタンスのいずれかは、組成インターフェースから要求をサービス提供することが可能であり、前記プロビジョニングサービスのいずれかはまた、ＩＯドメインを横断して冗長性を保証する観点から、１つ以上のシステム組成要求の変動性を検証することも可能である、請求項９に記載のフォールトトレラントコンピュータシステム。
【請求項１１】
各ＩＯドメインはさらに、管理プロセッサを備える、請求項１に記載のフォールトトレラントコンピュータシステム。
【請求項１２】
アクティブＩＯドメインの管理プロセッサは、前記切替ファブリックを通して通信を制御する、請求項１１に記載のフォールトトレラントコンピュータシステム。
【請求項１３】
各ＩＯドメインは、シリアルリンクを通して他のＩＯドメインと通信する、請求項１に記載のフォールトトレラントコンピュータシステム。
【請求項１４】
前記切替ファブリックは、Ｎｏｎ−Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ  （ＮＴＢ）  ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）切替ファブリックである、請求項１に記載のフォールトトレラントコンピュータシステム。
【請求項１５】
フォールトトレラントコンピュータシステム内でＣＰＵノードフェイルオーバを実施する方法であって、前記フォールトトレラントコンピュータシステムは、複数のＣＰＵノードであって、各ＣＰＵノードは、プロセッサと、メモリとを備え、前記ＣＰＵノードのうちの１つは、スタンバイＣＰＵノードと指定され、残りは、アクティブＣＰＵノードとして指定される、複数のＣＰＵノードと、少なくとも２つのＩＯドメインであって、前記ＩＯドメインのうちの少なくとも１つは、前記アクティブＣＰＵノードのための通信機能を実施するアクティブＩＯドメインと指定される、少なくとも２つのＩＯドメインと、各ＣＰＵノードを各ＩＯドメインに接続する切替ファブリックとを有し、前記方法は、
アクティブであるが故障しているＣＰＵノードのメモリと前記スタンバイＣＰＵノードのメモリとの間にＤＭＡデータパスを確立するステップと、
アクティブであるが故障しているＣＰＵノードのメモリおよび前記スタンバイＣＰＵノードのメモリから、前記ＤＭＡデータパスを通してメモリコンテンツを転送するステップと、
前記アクティブであるが故障しているＣＰＵノードによって、ＤＭＡアクセスが起こる前記アクティブであるが故障しているＣＰＵノード内のメモリアドレスを追跡するステップと、
前記アクティブであるが故障しているＣＰＵノード上のメモリへのアクセスを停止し、ＤＭＡが開始された以降にアクセスされている任意のメモリデータをコピーするステップと、
前記アクティブであるが故障しているＣＰＵノード内の前記プロセッサの状態を前記スタンバイＣＰＵノードにコピーするステップと、
前記アクティブであるが故障しているＣＰＵノードから前記スタンバイＣＰＵノードへの全てのリソースマッピングを交換するステップと、
前もって指定されたスタンバイＣＰＵノードが前記新しいアクティブＣＰＵノードであることを可能にするステップと
を含む、方法。
【請求項１６】
両方のＣＰＵノードが、フェイルオーバ動作後にその独自の意図された新しい状態を有するように、前記アクティブであるが故障しているＣＰＵノードが、その独自のＮＴＢウィンドウ内のフラグをＰＣＩ−メモリのマップされたＩＯ空間および前記スタンバイＣＰＵノードのＮＴＢウィンドウの中に設定するステップをさらに含む、請求項１５に記載の方法。
【請求項１７】
前記アクティブであるが故障しているＣＰＵノードが、開始ルーチンのステータスに関して前記スタンバイＣＰＵノードにポーリングするステップをさらに含む、請求項１５に記載の方法。
【請求項１８】
フォールトトレラントコンピュータシステム内でＩＯドメインフェイルオーバを実施する方法であって、前記フォールトトレラントコンピュータシステムは、複数のＣＰＵノードであって、各ＣＰＵノードは、プロセッサと、メモリとを備え、前記ＣＰＵノードのうちの１つは、スタンバイＣＰＵノードと指定され、残りは、アクティブＣＰＵノードとして指定される、複数のＣＰＵノードと、少なくとも２つのＩＯドメインであって、前記ＩＯドメインのうちの少なくとも１つは、前記アクティブＣＰＵノードのための通信機能を実施するアクティブＩＯドメインと指定される、少なくとも２つのＩＯドメインと、各ＣＰＵノードを各ＩＯドメインに接続する切替ファブリックとを有し、前記方法は、
各ＩＯドメイン内で切替ファブリック制御コンポーネント毎に故障トリガを有効化するステップであって、前記故障トリガは、リンクダウンエラーと、訂正不可能かつ致命的なエラーと、ソフトウェアトリガとを備える、ステップと、
故障トリガが起こることに応じて、故障しているＩＯドメインを使用するドライバを停止するステップと
を含む、方法。
【請求項１９】
フォールトトレラントコンピュータシステムであって、
複数のＣＰＵノードであって、各ＣＰＵノードは、プロセッサと、メモリとを備え、前記ＣＰＵノードのうちの１つは、スタンバイＣＰＵノードと指定され、残りは、アクティブＣＰＵノードとして指定される、複数のＣＰＵノードと、
少なくとも２つのＩＯドメインであって、前記ＩＯドメインのうちの少なくとも１つは、前記アクティブＣＰＵノードのための通信機能を実施するアクティブＩＯドメインと指定される、少なくとも２つのＩＯドメインと、
各ＣＰＵノードを各ＩＯドメインに接続する切替ファブリックと
を備え、
故障、故障の開始、および予測される故障のうちの１つが、故障しているアクティブＩＯドメインと称されるアクティブＩＯドメイン内で起こる場合、前記故障しているアクティブＩＯドメインによって実施される前記通信機能は、他のＩＯドメインに転送される、フォールトトレラントコンピュータシステム。
【請求項２０】
各ＣＰＵノードはさらに、前記切替ファブリックと通信する通信インターフェースを備える、請求項１９に記載のフォールトトレラントコンピュータシステム。
【請求項２１】
各ＩＯドメインは、少なくとも２つの切替ファブリック制御コンポーネントを備え、各切替ファブリック制御コンポーネントは、前記切替ファブリックと通信する、請求項１９に記載のフォールトトレラントコンピュータシステム。
【請求項２２】
各ＩＯドメインはさらに、管理プロセッサを備える、請求項１９に記載のフォールトトレラントコンピュータシステム。
【請求項２３】
アクティブＩＯドメインの管理プロセッサは、前記切替ファブリックを通して通信を制御する、請求項２２に記載のフォールトトレラントコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（優先権の主張）
本願は、その内容全体が参照することによって本明細書に組み込まれる、２０１８年８月１３日に出願された、米国仮出願第６２／７１７，９３９号の優先権を主張する。
【０００２】
本開示は、概して、高信頼性フォールトトレラントコンピュータシステムのためのアーキテクチャに関し、より具体的には、切替ファブリックによって相互接続されるモジュール式冗長コンポーネントを伴うフォールトトレラントコンピュータシステムに関する。
【背景技術】
【０００３】
高信頼性フォールトトレラントコンピュータシステムは、少なくとも「９９．９９９％」の信頼性を有するコンピュータシステムである。これは、コンピュータが時間の少なくとも９９．９９９％に機能しており、連続動作の１年あたり最大で約５分だけの計画外のダウンタイムを有することを意味する。
【０００４】
本高信頼性を遂行するために、そのようなフォールトトレラントコンピュータシステムは、１つのコンポーネントが、故障する、故障し始める、または故障することが予測されるときに、故障しているコンピュータコンポーネントを使用するプログラムが、システムの類似するが冗長なコンポーネントを代わりに使用するように、冗長コンポーネントを頻繁に有する。概して、本フェイルオーバが実施される、２つの方法が存在する。
【０００５】
１つの方法は、それぞれ、同時に同一のアプリケーションを実行し、それらの結果を周期的に比較し、それらが同一の結果に到達することを確実にする、２つ以上のプロセッサシステムを有することである。そのようなシステムでは、１つのシステムが、故障するとき、他方は、故障しているシステムが交換されるまで、シンプレックスまたは単一プロセッサシステムとして動作し続けることができる。故障しているシステムが、交換されるとき、故障していないシステムの状態が、交換用プロセッサシステムにコピーされ、両方のシステムが、次いで、二重システムと同一のアプリケーションを実行し続ける。
【０００６】
第２の方法は、２つのプロセッサシステム、すなわち、アプリケーションを実行しているアクティブプロセッサシステムであるもの、およびスタンバイプロセッサシステムである別のものを有することである。本構成では、スタンバイプロセッサシステムは、アクティブプロセッサシステムの状態およびメモリコンテンツとともに、アクティブプロセッサシステムから更新を周期的に受信する。これらの時点は、チェックポイントと呼ばれ、転送されたデータは、チェックポイントデータと称される。アクティブプロセッサが、故障する、故障し始める、または故障することが予測されるとき、アクティブプロセッサは、その最終状態およびメモリコンテンツをスタンバイプロセッサシステムに転送し、スタンバイプロセッサシステムは、新しいアクティブプロセッサシステムになり、前もってアクティブプロセッサシステムがその最終状態を転送した点から計算を継続する。
【０００７】
これらの方法の両方は、欠点を有する。第１の方法では、２つの重複コンピュータシステムを連続的に維持および起動するコストは、わずかではない。第２の方法では、スタンバイシステムにチェックポイント状態およびメモリデータを周期的に供給するために要求される時間は、アクティブコンピュータシステムによるアプリケーションの処理を減速する。
【０００８】
本開示は、これらの欠点およびその他に対処する。
【発明の概要】
【課題を解決するための手段】
【０００９】
一側面では、本開示は、フォールトトレラントコンピュータシステムに関する。一実施形態では、本システムは、複数のＣＰＵノードであって、各ＣＰＵノードは、プロセッサと、メモリとを含み、ＣＰＵノードのうちの１つは、スタンバイＣＰＵノードと指定され、残りは、アクティブＣＰＵノードとして指定される、複数のＣＰＵノードと、少なくとも２つのＩＯドメインであって、ＩＯドメインのうちの少なくとも１つは、アクティブＣＰＵノードのための通信機能を実施するアクティブＩＯドメインと指定される、少なくとも２つのＩＯドメインと、各ＣＰＵノードを各ＩＯドメインに接続する、切替ファブリックとを含む。別の実施形態では、故障、故障の開始、または予測される故障のうちの１つが、アクティブノード内で起こる場合、アクティブＣＰＵノードの状態およびメモリが、切替ファブリックを通してスタンバイＣＰＵノードに転送され、スタンバイＣＰＵノードは、新しいアクティブＣＰＵノードになり、以前から故障しているノードを引き継ぐ。さらに別の実施形態では、故障、故障の開始、または予測される故障のうちの１つが、故障しているアクティブＩＯドメインと称されるアクティブＩＯドメイン内で起こる場合、故障しているアクティブＩＯドメインによって実施される通信機能は、他のＩＯドメインに転送される。
【００１０】
さらに別の実施形態では、各ＣＰＵノードはさらに、切替ファブリックと通信する通信インターフェースを含む。なおもさらに別の実施形態では、各ＩＯドメインは、少なくとも２つの切替ファブリック制御コンポーネントを含み、各切替ファブリック制御コンポーネントは、切替ファブリックと通信する。一実施形態では、各ＩＯドメインはさらに、管理プロセッサを備える。さらに別の実施形態では、アクティブＩＯドメインの管理プロセッサは、切替ファブリックを通して通信を制御する。さらに別の実施形態では、各ＩＯドメインは、シリアルリンクを通して他のＩＯドメインと通信する。一実施形態では、切替ファブリックは、Ｎｏｎ−Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ  （ＮＴＢ）  ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）切替ファブリックである。
【００１１】
一実施形態では、各ＩＯドメインはさらに、ＩＯデバイスのセットを含み、各ＩＯデバイスは、１つ以上の物理関数および／または仮想関数を含み、１つのＩＯドメイン内の１つ以上の物理関数および／または仮想関数は、共有可能である。一実施形態では、１つ以上の物理関数は、１つ以上の仮想関数を含む。一実施形態では、ＩＯデバイスのセットおよび１つ以上の物理関数および／または仮想関数は、１つ以上のＣＰＵノードのポートに割当可能な１つ以上のサブ階層を定義するように、１つ以上のＣＰＵノードおよび２つの切替ファブリック制御コンポーネントのうちの１つ以上のものに配分される。一実施形態では、ＩＯデバイスのセットのうちの１つ以上のものおよび仮想関数は、物理ＣＰＵノードのセットの間で区分化され、物理ＣＰＵノードのセットは、アクティブＣＰＵノードと、スタンバイＣＰＵノードとを備える。一実施形態では、本システムはさらに、各ＩＯドメイン内の管理プロセッサ上で起動する、１つ以上の管理エンジンインスタンスを含み、各管理エンジンは、個別の管理エンジンに接続される切替ファブリック制御コンポーネントにクエリを行い、制御コンポーネント毎の基準で、物理関数および／または仮想関数の列挙された階層を取得し、各管理エンジンは、列挙されたコンポーネント毎の階層を、各管理エンジンと関連付けられるＩＯドメイン内の物理関数および／または仮想関数のドメイン毎の階層にマージする。
【００１２】
一実施形態では、本システムはさらに、１つ以上のプロビジョニングサービスインスタンスを含み、各プロビジョニングサービスは、各ＩＯドメイン内の管理プロセッサ上で起動し、各プロビジョニングサービスは、ドメイン毎の階層に関してドメイン毎の管理エンジンインスタンスにクエリを行い、各プロビジョニングサービスのドメイン毎のインスタンスは、他のＩ／Ｏドメイン内のプロビジョニングサービスと通信し、システム内に物理関数および／または仮想関数の統一階層を形成する。一実施形態では、プロビジョニングサービスのドメイン毎のインスタンスのいずれかは、組成インターフェースから要求をサービス提供することが可能であり、プロビジョニングサービスのいずれかはまた、ＩＯドメインを横断して冗長性を保証する観点から、１つ以上のシステム組成要求の変動性を検証することも可能である。一実施形態では、プロビジョニングサービスのドメイン毎のインスタンスのいずれかは、業界標準システム組成インターフェースから要求をサービス提供することが可能であり、プロビジョニングサービスのドメイン毎のインスタンスのいずれかはまた、ＩＯドメインを横断して冗長性を保証する観点から、システム組成要求の変動性を検証することも可能である。
【００１３】
別の側面では、本開示は、フォールトトレラントコンピュータシステム内でＣＰＵノードフェイルオーバを実施する方法に関する。一実施形態では、フォールトトレラントコンピュータシステムは、複数のＣＰＵノードであって、各ＣＰＵノードは、プロセッサと、メモリとを含み、ＣＰＵノードのうちの１つは、スタンバイＣＰＵノードと指定され、残りは、アクティブＣＰＵノードとして指定される、複数のＣＰＵノードと、少なくとも２つのＩＯドメインであって、ＩＯドメインのうちの少なくとも１つは、アクティブＣＰＵノードのための通信機能を実施するアクティブＩＯドメインと指定される、少なくとも２つのＩＯドメインと、各ＣＰＵノードを各ＩＯドメインに接続する、切替ファブリックとを含む。別の実施形態では、本方法は、アクティブであるが故障しているＣＰＵノードのメモリとスタンバイＣＰＵノードのメモリとの間にＤＭＡデータパスを確立するステップを含む。さらに別の実施形態では、本方法は、アクティブであるが故障しているＣＰＵノードのメモリおよびスタンバイＣＰＵノードのメモリからメモリコンテンツを転送するステップを含む。なおもさらに別の実施形態では、本方法は、アクティブであるが故障しているＣＰＵノードによって、ＤＭＡアクセスが起こる、アクティブであるが故障しているＣＰＵノード内のアドレスを追跡するステップを含む。別の実施形態では、本方法は、アクティブであるが故障しているＣＰＵノード上のメモリへのアクセスを停止し、ＤＭＡが開始された以降にアクセスされている任意のメモリデータをコピーするステップを含む。さらに別の実施形態では、本方法は、アクティブであるが故障しているＣＰＵノード内のプロセッサの状態をスタンバイＣＰＵノードにコピーするステップを含む。さらになおも別の実施形態では、本方法は、アクティブであるが故障しているＣＰＵノードからスタンバイＣＰＵノードへの全てのリソースマッピングを交換するステップと、前もって指定されたスタンバイＣＰＵノードが新しいアクティブＣＰＵノードであることを可能にするステップとを含む。
【００１４】
別の実施形態では、本方法は、各ＣＰＵノードが、フェイルオーバ動作後にその独自の意図された新しい状態を有するように、アクティブであるが故障しているＣＰＵノードによって、その独自のＮＴＢウィンドウ内のフラグをＰＣＩ−メモリのマップされたＩＯ空間およびスタンバイＣＰＵノードのＮＴＢウィンドウの中に設定するステップを含む。さらに別の実施形態では、本方法は、アクティブであるが故障しているＣＰＵノードが、開始ルーチンのステータスに関してスタンバイＣＰＵノードにポーリングするステップを含む。
【００１５】
別の側面では、本開示は、ＩＯドメインフェイルオーバを実施する方法を含む。一実施形態では、本方法は、各ＩＯドメイン内で切替ファブリック制御コンポーネント毎に故障トリガを有効化するステップであって、故障トリガは、限定ではないが、リンクダウンエラーと、訂正不可能かつ致命的なエラーと、ソフトウェアトリガとを含む、ステップと、故障トリガが起こることに応じて、ドライバが故障しているＩＯドメインを使用しないように阻止するステップとを含む。
【００１６】
本開示は、異なる側面および実施形態に関するが、本明細書に開示される異なる側面および実施形態は、適宜、組み合わせシステムとして、または部分的に、別個のコンポーネント、デバイス、およびシステムとして、ともに統合される、組み合わせられる、または使用され得ることを理解されたい。したがって、本明細書に開示される各実施形態は、所与の実装のために適宜、種々の程度に側面のそれぞれに組み込まれることができる。
【図面の簡単な説明】
【００１７】
本開示の構造および機能は、付随する図面と併せて本明細書の説明から最良に理解されることができる。図は、必ずしも一定の縮尺ではなく、代わりに、概して、例証的原理を強調している。図は、全ての側面で例証的と見なされるものであり、その範囲が請求項のみによって定義される、本発明を限定することを意図していない。
【００１８】
【図１】図１は、本開示に従って構築される高信頼性フォールトトレラントコンピュータシステムのブロック図である。
【００１９】
【図２】図２は、より詳細な図１のシステムの実施形態のブロック図である。
【００２０】
【図３】図３は、本開示による、ＣＰＵのフェイルオーバのステップの実施形態のフロー図である。
【００２１】
【図４】図４は、図１のアクティブおよびスタンバイコンピュータを伴うフォールトトレラントシステムの実施形態の略図である。
【００２２】
【図５Ａ】図５Ａ−５Ｃは、メモリ重複またはミラーリングの種々の段階の間のＯＳ、ハイパーバイザ、ゲストＶＭ、ＦＴ仮想マシンマネージャ（ＦＴＶＭＭ）、およびフォールトトレラントコンピュータシステム内の他の層のオペレーティングソフトウェアおよび実行状態の実施形態の略図である。
【図５Ｂ】図５Ａ−５Ｃは、メモリ重複またはミラーリングの種々の段階の間のＯＳ、ハイパーバイザ、ゲストＶＭ、ＦＴ仮想マシンマネージャ（ＦＴＶＭＭ）、およびフォールトトレラントコンピュータシステム内の他の層のオペレーティングソフトウェアおよび実行状態の実施形態の略図である。
【図５Ｃ】図５Ａ−５Ｃは、メモリ重複またはミラーリングの種々の段階の間のＯＳ、ハイパーバイザ、ゲストＶＭ、ＦＴ仮想マシンマネージャ（ＦＴＶＭＭ）、およびフォールトトレラントコンピュータシステム内の他の層のオペレーティングソフトウェアおよび実行状態の実施形態の略図である。
【発明を実施するための形態】
【００２３】
要するに、本開示に従って構築される高信頼性フォールトトレラントコンピュータシステム１０は、一実施形態では、図１に示されるようなメッシュファブリックネットワーク３０を通して少なくとも２つのＩＯドメイン（概して、２６）に相互接続される、複数のＣＰＵノード（概して、１４）を含む。複数のノード１４のうちのノードのうちの少なくとも１つ１４Ｃは、スタンバイノードであり、他のＣＰＵノード１４、１４Ａ、１４Ｂのうちの１つが故障し始めるか、または実際に故障するかのいずれかになるまで、アプリケーションを実行しない。故障が、起こるとき、スタンバイＣＰＵノード１４Ｃは、故障しているＣＰＵノード（例えば、ＣＰＵノード１４）の状態を入手し、故障しているＣＰＣノード１４上で実行されていたアプリケーションを実行し続ける。
【００２４】
図２も参照すると、正常な動作では、ＣＰＵノード１４は、一実施形態では、２つのＩＯドメイン２６、２６Ａのうちの１つを通して、外界と通信する。ＩＯドメイン２６は、各ＣＰＵノード１４が、種々のバス、通信チャネル、相互結線、またはリンク３１によって、各ＩＯドメイン２６に接続される、切替ファブリック３０によって、ＣＰＵノード１４に接続される。種々の実施形態では、バス、通信チャネル、相互結線、またはリンク３１は、複数のＰＣＩ  Ｅｘｐｒｅｓｓ  ｘＮインターフェースを含むことができ、Ｎは、１、２、４、８、または１６である。ＩＯドメイン２６はまた、冗長である。一実施形態では、ＩＯドメイン２６は、ＣＰＵノード１４からの通信を制御する一次ドメイン、およびＩＯドメイン２６が故障する場合にスタンバイドメインとして作用する第２のＩＯドメイン２６Ａである。各ＩＯドメイン２６、２６Ａはまた、ネットワークインターフェース、概して、４４、記憶コントローラおよびディスク、概して、４６、および付加的ＩＯデバイスを通して、外界に接続される。
【００２５】
各ＩＯドメイン２６、２６Ａは、１つ以上の記憶ディスク４６に接続されてもよい。これらの記憶ディスクは、冗長であり、点線によって示されるような同一のデータの重複またはミラーリングされたコピーを有する。ＩＯドメインへの書込は、両方のＩＯドメイン２６内の各内部ディスクに送信され、ミラーリングされた一対のディスクＤ１およびＤ１Ａに書き込まれる。データに関する読取要求は、適切に機能している限り、一次ドメイン２６からサービス提供される。一次ドメイン２６の故障の場合、読取要求は、二次またはスタンバイＩＯドメイン２６Ａのディスクからサービス提供される。
【００２６】
本システムは、ここで、概して、そのハードウェアアーキテクチャおよびハードウェア故障が起こるときのその動作の観点から、議論される。
【００２７】
ハードウェア実装
より詳細には、図２を再び参照すると、本開示の一実施形態に従って構築されるシステム１０は、それぞれ、ハードウェアＣＰＵユニット１８、１８Ａ、１８Ｂ、１８Ｃ（概して、１８）を含む、いくつかのＣＰＵノード１４、１４Ａ、１４Ｂ、１４Ｃ（概して、１４）と、通信インターフェース２２、２２Ａ、２２Ｂ、２２Ｃ（概して、２２）とを含む。システム１０はまた、それぞれ、Ｎｏｎ−Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ  （ＮＴＢ）  ＰＣＩ  Ｅｘｐｒｅｓｓ  （ＰＣＩｅ）切替ファブリック３０を通して、通信インターフェース２２のそれぞれに接続される、少なくとも２つのＩＯドメイン２６、２６Ａも含む。種々の実施形態では、切替ファブリックは、可変数のチャネルを伴って実装される。これらの実施形態では、種々のハードウェア構成が、システムの具体的実装または要件に応じて、それらのチャネルの帯域幅を修正するために使用されることができる。
【００２８】
例えば、一実施形態では、ＣＰＵユニットが、Ｇｅｎ  ３  ＰＣＩ  Ｅｘｐｒｅｓｓプロトコルをサポートするスイッチ（３４、３４Ａ、３４Ｂ、３４Ｃ）を使用して、ＩＯドメインに接続することができる。他の実施形態では、スイッチ（３４、３４Ａ、３４Ｂ、３４Ｃ）は、Ｇｅｎ  ４またはＧｅｎ  ５等のＰＣＩ  Ｅｘｐｒｅｓｓプロトコルのより新しいバージョンをサポートしてもよい。各ＣＰＵハードウェアノード１８は、オペレーティングシステム（ＯＳ）、すなわち、単一のシステムコンテキストＯＳ、またはハイパーバイザと、複数の仮想マシンとを含む、仮想ＯＳのいずれかを含む。一般に、本明細書に開示される種々のシステムおよび方法は、データセンタ、クラウドコンピューティング、および他のアプリケーションのためのファブリックとしてのＰＣＩｅ（および他の類似アーキテクチャ）の使用を促進する、種々の特定用途向け集積回路、通信チャネル、バス等と併用されることができる。
【００２９】
使用時に、描写されるＮ個のＣＰＵノード１４のシステム１０の実施形態では、Ｎ−１個のＣＰＵノード１４は、起動しているオペレーティングシステムおよびアプリケーションプログラムを伴うアクティブノードであり、第ＮのＣＰＵノード１４は、スタンバイモードで保持され、典型的には、最小限のユニファイドエクステンシブルファームウェアインターフェース（ＵＥＦＩ）ファームウェアプログラムを実行する。再び、冗長システムが機能するために、少なくとも１つのノードが、アクティブノードが故障する場合の予備に保持されなければならないが、本システムは、複数のスタンバイノードを含んでもよい。一実施形態では、最小限のＵＥＦＩは、第ＮまたはスタンバイＣＰＵノード１４Ｎ内のハードウェアのステータスについての情報を提供する、診断プログラムを含む。スタンバイＣＰＵノード１４のステータスは、アクティブＣＰＵノード１４の全てに利用可能である。アクティブＣＰＵノードが、故障し始め、その算出を故障していないＣＰＵノード１４に転送させるためにフェイルオーバする必要があるとき、故障しているＣＰＵノード１４は、スタンバイＣＰＵノード１４を留保し、下記に議論されるように、管理プロセッサ（ＭＰ）３８および３８Ａと協力してフェイルオーバプロセスを開始するであろう。
【００３０】
一実施形態（システム動作の例示としてここで使用されるもの）では、Ｎ個のＣＰＵノード１４が、少なくとも２つのＩＯドメイン２６に接続されるが、ＩＯドメインのうちの１つのみ（ＩＯ０）が、Ｎ個のＣＰＵノード１４と機能的に通信し、外部または非システムネットワークとの通信リンクを提供する。各ＩＯボードは、いくつかの組み込みデバイス（例えば、ネットワークおよび記憶コントローラ）と、ユーザが選定するコントローラを用いてデータ投入され得る、ＰＣＩ  Ｅｘｐｒｅｓｓスロットを含む。各ＩＯドメイン２６は、２つの切替ファブリック制御コンポーネント３４、３４Ａ、３４Ｂ、３４Ｃ（概して、３４）を含む。各切替ファブリックコンポーネント３４は、内部スイッチ管理のためのＡＰＩ機能のセットを通して、ファームウェアによって、またはソフトウェアによって構成可能である。一実施形態では、本切替ファブリック制御コンポーネント３４は、内蔵管理プロセッサ（ＭＰ）３８、３８Ａ（概して、３８）と併せて、管理エンジン（ＭＥ）と称されるソフトウェアのインスタンス化を通した切替ファブリック３０内のＩＯドメイン２６内のＣＰＵノード１４への接続を制御する、切替集積回路を伴うファブリックモードＰＣＩ  Ｅｘｐｒｅｓｓスイッチである。
【００３１】
各ＭＥは、ＭＥの個別のＭＰ３８のボード上のファブリック制御コンポーネント３４と直接通信する。ドメイン２６のＭＰ３８は、知的プラットフォーム管理インターフェース（ＩＰＭＩ）シリアル通信リンク４２を通して、他のＩＯドメイン２６ＡのＭＰ３８Ａと通信する。各ＭＥインスタンスは、切替コンポーネントの階層内の物理関数および仮想関数のリストに関して、それが切替コンポーネントのファームウェアＡＰＩによって接続される、ファブリック制御切替コンポーネント３４にクエリを行う。「仮想関数」は、１つの物理デバイスが、個々のゲスト仮想マシン（ＶＭ）の機能および外界とのそれらの通信を制御する、ハイパーバイザまたはホストオペレーティングシステムに追加要求を行うオーバーヘッドを伴わずに、複数のＶＭの間で共有され得るように、ＰＣＩ  Ｅｘｐｒｅｓｓ仕様の下で定義される関数である。加えて、ＭＥはまた、ＩＯデバイス４４、４６を視認、構成、および配分するためのＡＰＩ（ＭＥ−ＡＰＩ）も提供し、そのＩＯドメイン２６、２６Ａ内で機能する。これらのＩ／Ｏデバイスおよび関数は、次いで、切替コンポーネント３４、３４Ａ、および再びファームウェアＡＰＩによって各切替コンポーネントに割り当てられるＣＰＵ１８群に配分される。これは、ひいては、それぞれ、ホストポートに割り当てられ得る、Ｎ個の合成サブ階層を作成する。すなわち、Ｉ／Ｏデバイス４４、４６は、切替ファブリックコンポーネント３４、３４に割り当てられ、コンポーネント３４、３４Ａは、次いで、ＣＰＵノード１４、１４Ａ等の具体的ポートに割り当てられる。
【００３２】
ノードおよびデバイスの配分は、随意に、ホストコンピュータ５０上で実行され、ネットワーク５２によって各ＭＥと通信するユーザＧＵＩを含む、管理サービス（ＭＳ）アプリケーションによって、ユーザによってＭＥに提供される。ＭＳは、関数呼び出しのセットをＭＥカーネルドライバに提供する。各ＭＥ上で実行されるプロビジョニングサービス（ＰＳ）は、ホストコンピュータ５０からのＭＥ−ＡＰＩ呼び出しを通して、ユーザによって確立されるＣＰＵノード毎に、ＣＰＵ、メモリ、ＶＭ、およびＩＯリソース要件のリストを受信する。
【００３３】
ＩＯドメイン２６および２６Ａは、それによって、各ＣＰＵノード１４が、ディスク４６等のＩＯエンドポイントデバイスのサブセットへの排他的アクセスをＩＯドメイン２６および２６Ａ内で有するように構成される。エンドポイントデバイスは、ＩＯドメイン２６内で物理または仮想関数を提供してもよい。他の実施形態では、第２のＩＯドメイン２６Ａもまた、アクティブであり、ある数のアクティブおよび／またはスタンバイＣＰＵノードが、それに接続され、それを通して通信する。
【００３４】
動作時に、１つを除く各ＣＰＵノード１４は、アクティブであり、そのオペレーティングシステムおよび関連付けられるアプリケーションプログラムのコードを実行する。各アクティブＣＰＵノード１４のオペレーティングシステム（Ｗｉｎｄｏｗｓ（登録商標）（Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ，  Ｒｅｄｍｏｎｄ，  ＷＡ）、ＥＳＸｉＴＭ（ＶＭＷａｒｅ  Ｉｎｃ．，  Ｐａｌｏ  Ａｌｔｏ，  ＣＡ）、Ｌｉｎｕｘ（登録商標）（Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓ，  Ｄｕｎｔｈｏｒｐｅ，  ＯＲ）等）は、他のアクティブＣＰＵノードと同一である、または異なり得る。各アクティブＣＰＵノード１４が、１つのアクティブＩＯドメイン（ＩＯ０）２６を通して通信する一方で、他のＩＯドメイン（ＩＯ１）２６Ａは、二次ＩＯドメインとして利用可能である。ある場合には、二次ＩＯドメインは、ディスクに関するＲＡＩＤ１構成で行われるように、データのミラーリングされたコピーを維持する。他の場合では、二次ドメインは、単一のネットワークポート（Ｌｉｎｕｘ（登録商標）では「ネットワークボンド」またはＷｉｎｄｏｗｓ（登録商標）では「チーム」と称される）として扱われている複数のネットワークポートのための負荷分散またはホットスタンバイサービスを提供してもよい。
【００３５】
いったんＩ／ＯドメインおよびＣＰＵノードの構成が確立され、ＣＰＵノード２６、例えば、ＣＰＵノード１４２が故障し始める場合に、１つ以上のアクティブＣＰＵノードがオペレーティングシステムのインスタンスを起動していると、そのノードのオペレーティングシステムおよびアプリケーションプログラムが、スタンバイＣＰＵノード１４Ｎに転送され、アクティブＩＯドメイン（ＩＯ０）は、切替ファブリック３０を設定し、以前はスタンバイノードであったが、今はアクティブＣＰＵノード１４ＮであるＣＰＵノード１４Ｎからデータを受信する。故障していると診断された、以前はアクティブであったＣＰＵノード１４２は、さらなる診断を受け、それが交換される必要があるかどうかを決定する。ＣＰＵノード１４２が、ここで、診断に合格する場合、エラーは、ソフトウェアによって引き起こされるか、または一過性であるかのいずれかと仮定され、ＣＰＵノード１４２は、新しいスタンバイノードになる。
【００３６】
結果は、ＣＰＵノード１４のうちのいずれも故障していないが、アクティブＩＯドメイン（例えば、２６）が、故障している、または故障しようとしていると決定される場合に類似する。この場合、切替ファブリック３０を通したアクティブＣＰＵノード１４についての接続情報は、ＩＯドメイン（例えば、２６）のＭＰ３８によってＩＯドメイン２６ＡのＭＰ３８Ａにパスされ、ＩＯドメイン２６Ａは、新しいアクティブＩＯドメインになる。以前はアクティブであったＩＯドメイン２６は、次いで、さらなる診断を受ける、または除去および交換されてもよい。ＩＯドメイン２６は、次いで、新しいスタンバイＩＯドメインになる。命令および他のデータは、知的プラットフォーム管理インターフェースシリアル通信リンク４２を通して、ＭＰ３８とＭＰ３８Ａとの間でパスされる。両方のＩＯドメイン２６、２６Ａが、アクティブである場合、ＩＯドメインのうちの１つ（例えば、２６）が故障していれば、他のＩＯドメイン２６Ａが、故障していないＩＯドメイン２６Ａを通して全ての通信を受容するように、ファブリックスイッチ３０を再構成することに留意されたい。
【００３７】
Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムおよびゼロコピーダイレクトメモリアクセス（ＤＭＡ）を使用する、一実施形態では、切替ファブリック３０は、約５６ＧＢ／秒において１つのＣＰＵノード１４から別のものにプロセッサ状態およびメモリコンテンツを転送することができる。ＣＰＵノード１４およびＩＯドメイン２６が別個のコンポーネントであるという事実は、単一障害点の数を削減し、対応する故障していないコンポーネント、例えば、ＣＰＵノード１４ではなくてＩＯドメイン２６に影響を及ぼすことなく、故障しているコンポーネントを交換する能力を追加するという追加利点を有する。冗長ＩＯドメイン２６およびＣＰＵノード１４は、ＣＰＵノード１４および／またはＩＯドメイン２６上で実行されるアプリケーションに深刻な影響を及ぼすことなく、故障しているコンポーネントが動的に交換されること、または追加されることさえ可能にする。
【００３８】
図３も参照すると、本システムの動作が、ここでより詳細に考慮されるであろう。
【００３９】
システム初期化
マルチノードプラットフォームの電源をオンにし、ＩＯリソースをプロビジョニングするプロセスが、物理ＩＯデバイスおよびそれらのＰＣＩｅ機能の両方のために、およびＰＣＩ  Ｅｘｐｒｅｓｓ仕様の単一ルートＩ／Ｏ仮想化および共有（ＳＲ−ＩＯＶ）部分の機能をサポートするデバイスのための仮想関数のために、実施されることができる。初期化プロセスは、各ＩＯドメイン内のハードウェアおよびソフトウェアによって編成される。初期化プロセスの間に、ＩＯドメインのみが、リセットから解放される一方で、全てのＣＰＵノードは、リセット状態に留まる。
【００４０】
各切替コンポーネント３４は、そのリセットおよび初期化処理を完了し、そのデバイス階層を列挙する、その内部スイッチ管理ファームウェアを実行する。階層は、概して、全ての切替コンポーネントの一次バス参照番号（切替コンポーネントがアクセスされる方法）、二次バス（ブリッジの反対側に関するバス参照番号）、および従属バス番号（スイッチおよびブリッジの下方の全てのＰＣＩｅデバイスおよび機能とともに、ブリッジの下方のいずれかの場所に存在する、最大バス番号）の完全セットによって定義される。一実施形態では、ブリッジは、ファブリックコントローラに関するバスアドレスまたはバス番号を指す。本システムおよび方法は、他のブリッジ／スイッチの下方のブリッジ／スイッチを含み得る、種々の階層を伴って実装されることができる。同時に、各管理プロセッサ３８は、そのリセットおよび初期化を完了し、続いて、ＭＥインスタンスをロードおよび実行する。各ＭＥインスタンスは、完全に列挙された階層に関して、それが切替コンポーネントファームウェアＡＰＩによって接続される、切替コンポーネント３４、３４Ａにクエリを行う。各ＭＥインスタンスは、次いで、その接続された切替コンポーネント３４、３４Ａからの階層を、そのＩＯドメイン内の物理関数および仮想関数の単一のリストにマージする。
【００４１】
いったんＩＯドメイン関数リストが確立されると、ＭＥインスタンスは、相互と通信し、ドメイン特有の階層リストをシステム全体に関する統一リストにマージし、本システムのための「一次ＩＯ」として１つのＩＯドメインおよび関連付けられるＭＥを確立する。
【００４２】
前のステップは、ユーザが、その必要性に応じて本システムを構成することを可能にする。しかしながら、本能力を利用することを所望しないユーザに関して、複製リソースのデフォルト構成が、各アクティブ演算ノード１４（アクティブＣＰＵ）に配分されるが、ユーザは、所望される場合、プロビジョニングサービスを介して配分を修正することができる。スタンバイＣＰＵノード１４Ｃ（スタンバイホスト）は、診断を起動し、そのステータスを他のノードに報告するように、ＩＯデバイスの最小限のセットのみを与えられる。加えて、所望される場合、ユーザはまた、種々の演算ノードへのＩＯリソースの配分をオーバーライドすることもできる。新しい配分データが、次いで、次のコールドブートのために記憶される。
【００４３】
いったんリソースのプロビジョニングがＣＰＵノード１４毎に確立されると、各ＭＥインスタンスは、所望のリソースを関連付けられるＣＰＵノードポート毎に各切替コンポーネント３４に展開する。プロビジョニングデータは、プラットフォーム全体またはＩＯドメイン２６、２６Ａがリセットされる、または電源をオフにされ、次いで、オンにされる次の時間に使用するために、ＭＥ３８、３８Ａにアクセス可能なフラッシュまたは他の不揮発性リポジトリ内に記憶される。加えて、各ＭＥインスタンスは、限定ではないが、「リンクダウン」エラー、訂正不可能かつ致命的なエラー、および他のソフトウェアトリガを含む、イベントを検出し、それに対処するように、下流ポート毎に、それが切替コンポーネントファームウェアＡＰＩを介して接続される、切替コンポーネント３４内の下流ポート格納（ＤＰＣ）トリガを有効にする。いずれか１つのＩＯデバイスが、エラーに遭遇するとき、切替コンポーネントハードウェア３４は、その下流リンクを隔離し、ファームウェアは、そのリンクの下のデバイスへの任意の保留トランザクションに関して応答／完了を合成する。ファームウェアはまた、イベントをＭＥにシグナリングし、これは、ひいては、影響を受けたホストにプラットフォームインタラプトを発生させ、それらにＩＯデバイスがアクセス不可能になったことを知らせる。
【００４４】
いったんホスト特有のデバイス階層が確立されると、各演算ノード１４は、リセットから解放されてもよい。マルチノードプラットフォーム内の所与のＣＰＵ１８に関するブートプロセスは、標準ＢＩＯＳおよび標準ＯＳを伴う任意の標準サーバに関するであろうものと同一である。具体的には、各ＣＰＵノード上のＢＩＯＳは、パワーオンセルフテスト（ＰＯＳＴプロセス）を使用して、システム健全性を決定し、ＭＥファームウェアによってそのＣＰＵノードに暴露されたＩＯ階層を列挙する。一実施形態では、ＭＥファームウェアが、最初に起動し、アクティブホストであろうＣＰＵノードの間で利用可能なＩＯリソースを配分する。いったん各ホストがその独自のＢＩＯＳを起動し始めると、各そのようなホストは、ＭＥの存在を意識していない。故に、各ノードは、通常の方法でブートする。いったんＯＳがブートし、適用可能なソフトウェアコンポーネントがロードされると、そのようなソフトウェアは、再びＭＥファームウェアと相互作用することができる。この点にもかかわらず、ＢＩＯＳおよびベースＯＳの基準系から、いずれもＭＥを意識することも、それと相互作用することもない。ＯＳブートローダは、ＯＳ画像をメモリの中にロードし、ＯＳ実行を開始する。本システムは、次いで、通常、全てのＩＯドメイン２６が存在し、ＯＳに可視である状態でブートする。ＯＳは、次いで、各ＩＯデバイスのインスタンス毎に堅牢化ドライバをロードする。
【００４５】
ネットワークコントローラ機能は、標準ＯＳ特徴を使用して、結束／チーム化される。同様に、外部記憶コントローラは、コントローラの両方のインスタンスが健全であり、外部記憶アレイへのコネクティビティを有するときに、二重である。内部記憶コントローラは、さらなる考慮を必要とする。旧来のＩＯ以外の全てのＩＯドメインデバイスが、二重であるとき、次いで、ＩＯドメイン全体が、二重である／プルすることが安全である。
【００４６】
本システムが完全に動作していると、故障下のその動作が、次に考慮される。
【００４７】
ＣＰＵ／メモリフェイルオーバ
以下のステップが、ＣＰＵノード（ＣＰＵプロセッサ１８および／またはメモリ）故障が起こっている、または予測されるときに、システム故障を回避するように、本開示の一実施形態によって実施される。その故障しているＣＰＵノード上で実行されるアプリケーションは、次いで、スタンバイＣＰＵノード１４Ｃに転送されるであろう。
【００４８】
概観では、事前決定された閾値を上回る多数の訂正可能なエラーまたは他の劣化した能力のいずれかを被っている、アクティブＣＰＵノード１４は、ノード１４が本劣化状態に到達し、故障していないスタンバイＣＰＵノード１４Ｃへのフェイルオーバが開始するべきであることを、ノードのＩＯドメイン２６と関連付けられるＭＰ３８に示す。アクティブＣＰＵノード１４、ＭＰ３８、およびスタンバイＣＰＵノード１４Ｃは、次いで、通信プロトコルに従事し、フェイルオーバプロセスおよびアクティブＣＰＵノード１４からスタンバイＣＰＵノード１４Ｃへの状態の転送を管理する。フェイルオーバ動作のための標的場所である、スタンバイＣＰＵノード１４Ｃは、その診断ＵＥＦＩループから除去され、故障しているアクティブＣＰＵノード１４からメモリコンテンツおよび状態情報を受信するプロセスを開始する準備ができていることをシグナリングする。アクティブであるが故障しているＣＰＵノード１４は、スタンバイＣＰＵノードの始動ルーチンのステータスに関してスタンバイＣＰＵノード１４Ｃにポーリングする。スタンバイＣＰＵノード１４Ｃは、そのＰＣＩ−メモリのマップされたＩＯ空間の中へのＮＴＢウィンドウを有効にし、アクティブであるが故障しているＣＰＵノード１４からのコマンドに関してポーリングを開始する。
【００４９】
図３を参照すると、高レベルにおいて、いったんスタンバイＣＰＵノード１４Ｃからのステータスが、アクティブであるが故障しているＣＰＵノード１４Ａに報告されると、アクティブであるが故障しているＣＰＵノード１４は、データパス（ステップ３００）が、アクティブであるが故障しているＣＰＵノード１４のメモリからスタンバイノード１４ＣのメモリへのＤＭＡメモリコピーを許可することを可能にする。本時点におけるスタンバイＣＰＵノード１４Ｃは、いずれのＩＯドメイン２６にもアクセスすることもできず、アクティブであるが故障しているＣＰＵノード１４のメモリへの読取または書込アクセスを開始することもできない。
【００５０】
アクティブであるが故障しているＣＰＵノード１４は、メモリへの変更を追跡することが可能である、全てのそのドライバにシグナリングし、ＤＭＡトラフィックがアクティブであるアドレス（ＤＭＡ書込バッファおよびＤＭＡ制御構造の両方）を追跡し始める。
【００５１】
全てのメモリは、ＤＭＡトラフィックが継続している間に、かつプロセッサが命令を実行し続けている間に、アクティブであるが故障しているＣＰＵノード１４からスタンバイＣＰＵノード１４Ｃのメモリにコピーされる（ステップ３１０）。故障しているＣＰＵノード１４内に物理に位置する各デバイスのレジスタ状態は、スタンバイノード１４Ｃにコピーされる。ＤＭＡトラフィックが依然として起こっている間にメモリがコピーされる、本時間周期は、節電時間を構成する。
【００５２】
アクティブであるが故障しているＣＰＵノードは、ＤＭＡトラフィックによって潜在的に修正されるページを追跡するドライバに加えて、ＣＰＵアクセスによって修正されるページを追跡する（ステップ３２０）。節約時間の間に、修正されたページは、ドライバおよびホストソフトウェアが新たに修正されたページを追跡し続けている間に、再コピーされることができる。本プロセスは、２０１７年７月１１日に出願された、米国特許出願第１５／６４６，７６９号（その内容は、参照することによってそれらの全体として本明細書に組み込まれる）に完全に説明される。
【００５３】
本プロセスの停電段階が動作する方法を理解するために、より詳細にフォールトトレラントシステムの動作を考慮することが必要である。ここで図４を参照すると、フォールトトレラントコンピュータシステムは、少なくとも２つの同じコンピュータまたはノード４１４および４１４Ａを含む。１つのコンピュータまたはノード４１４は、現在アクティブであり、または一次プロセッサであり、クライアントまたはユーザから要求を受信し、そこに出力データを提供する。他のコンピュータまたはノード４１４Ａは、スタンバイまたは二次コンピュータまたはノードと称される。
【００５４】
各コンピュータまたはノード（概して、４１４）は、ＣＰＵ４２２、４２２−１、４２２Ａ、４２２Ａ−１と、メモリ４２６、４２６Ａと、スイッチ４３０、４３０Ａと、入力／出力（Ｉ／Ｏ）モジュール４３４、４３４Ａとを含む。一実施形態では、２つの物理プロセッササブシステム４１４および４１４Ａが、同一の切替ファブリック４３８上に常駐し、切替ファブリック４３８を通して相互と通信する。切替ファブリックコントローラ４３０、４３０Ａは、フォールトトレラントシステムが両方の（現在アクティブおよびスタンバイである）サブシステム４１４、４１４Ａ内で同じメモリコンテンツを作成し得るように、現在アクティブなメモリ４２６からスタンバイまたはミラーメモリ４２６Ａへのデータの転送（矢印４４０、４４５、および４５０）を協調させる。Ｉ／Ｏモジュール４３４、４３４Ａは、２つのサブシステム４１４および４１４Ａが、ネットワークインターフェース（ＮＩ）４４（図２）を通してディスク記憶装置４６（図２）およびネットワーク等の外界と通信することを可能にする。
【００５５】
本議論は、２つのプロセッササブシステムを伴う実施形態の観点からであるが、２つを上回るプロセッササブシステムが、フォールトトレラントコンピュータシステムで使用されることができる。複数のプロセッササブシステム、例えば、３プロセッサ（例えば、Ａ、Ｂ、Ｃ）フォールトトレラントコンピュータシステムの場合、３つのプロセッササブシステムのミラーリングは、２つのステップで実施される。最初に、プロセッササブシステムＡおよびＢが、ミラーリングされ、次いで、結果として生じるミラーリングされたＡ、Ｂプロセッササブシステムが、Ｃプロセッササブシステムにミラーリングされる等である。
【００５６】
節電および後続の停電段階の間に、修正されたメモリは、追跡され、続いて、ＤＭＡトラフィックが停止されるときにコピーされなければならない。問題は、サーバのネイティブオペレーティングシステムが、特に仮想マシン（ＶＭ）システムが使用されるときに、アクティブメモリ４２６からミラーメモリ４２６Ａにダーティページをコピーするための好適なインターフェースを提供しない場合があることである。例えば、Ｉｎｔｅｌ  ＨａｓｗｅｌｌおよびＢｒｏａｄｗｅｌｌプロセッサ（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（ＳａｎｔａＣｌａｒａ，  ＣＡ  ＵＳＡ））等のいくつかの物理プロセッサは、複数の仮想オペレーティングシステムがシステム実行の多くの側面の完全制御と同時に同一の物理プロセッサを共有することを可能にする、ＶＭＸルート動作を含む、ハードウェア仮想化能力のセットを提供する。仮想マシンはそれぞれ、ホストハイパーバイザの制御下で、それらの独自のオペレーティングシステムを有する。そのようなシステムは、それらの仮想マシンによって使用されるメモリのためにダーティページを検出およびコピーするためのインターフェースを提供しない場合がある。本開示が本限界に対処する方法を理解するために、図５（Ａ）−５（Ｃ）は、層状ソフトウェア図として、種々の動作を受けるときのフォールトトレラントコンピュータシステムの状態を描写する。
【００５７】
図５Ａを参照すると、通常のミラーリングされていない動作では、フォールトトレラントコンピュータシステム内の層は、ＤＭＡ対応スイッチ４３０を含む、ハードウェア層５００と、システムユニバーサルエクステンシブルファームウェアインターフェース（ＵＥＦＩ）ＢＩＯＳ５０８を含む、サーバファームウェア層５０４と、ゼロに初期化されるゼロ層の留保されたメモリ領域５１２とを含む。ゼロ層の留保されたメモリ５１２は、ブート時にＢＩＯＳ５０８によって留保される。フォールトトレラントコンピュータシステムのメモリの殆どは、オペレーティングシステムおよびソフトウェアによる使用のために利用可能であるが、留保されたメモリ５１２は、そうではない。留保されたメモリ領域５１２のサイズは、ＦＴＶＭＭと、４ＫＢ（４キロバイト）ページ粒度を伴って、かつ全てのシステムメモリの１対１のマッピングを伴って構成されるＳＬＡＴテーブルとのための十分な空間を提供する。ＦＴＶＭＭモジュールは、全てのプロセッサに、ＦＴＶＭＭモジュールのゲストとして、それらのプログラムを実行させる。メモリを変換するために使用される、メモリの留保された部分内の第２レベルアドレス変換テーブル（ＳＬＡＴ）（または種々の製造業者によって、すなわち、Ｉｎｔｅｌによって拡張ページテーブル［ＥＰＴ］と、ＡＭＤによって高速仮想化インデキシング［ＲＶＩ］とも称される）は、物理メモリを参照する。一実施形態では、４レベルＳＬＡＴテーブルが、オペレーティングシステムカーネルおよび他のソフトウェアによって修正される全てのメモリページを識別するであろう、ダーティビットおよびアクセスされたビット設定を伴うメモリマップを提供する。４レベルＳＬＡＴは、４キロバイト粒度を伴うメモリの各ワードをアドレス指定するために十分な粒度を提供するために十分であるが、他のページサイズおよびマッピングも可能である。
【００５８】
次の層（Ｌ１）５２０は、ＦＴカーネルモードドライバ５２２を含む、フォールトトレラントコンピュータシステムのためのオペレーティングシステムおよびドライバと、一般的に使用されているハイパーバイザホスト５２４とを含む。
【００５９】
最後の層（Ｌ２）５３０は、プロセス、アプリケーション、およびその他５３４等の通常動作時に仮想マシン制御構造（ＶＭＣＳ）５５０によって制御されない、仮想化されていないサーバソフトウェアコンポーネントを含み、これは、任意の仮想マシンゲスト（ＶＭ）５３８、５３８Ａを含む。仮想化されていないソフトウェアコンポーネント５３４は、ＦＴ管理層５３６を含む。各仮想マシンゲスト（ＶＭ）は、ＶＭゲストオペレーティングシステム（ＶＭ  ＯＳ）５４２、５４２Ａと、ＶＭ（ＳＬＡＴ  Ｌ２）５４６、５４６Ａと関連付けられるＳＬＡＴテーブルとを含む。また、各ＶＭ５３８、５３８Ａの中には、そのＶＭに配分される仮想プロセッサ０−Ｎ毎に１つずつ、ＶＭと関連付けられる１つ以上の仮想マシン制御構造（ＶＭＣＳ−Ｎ）、概して、５５０、５５０Ａも含まれる。示される略図では、仮想プロセッサＶＭＣＳは、ＶＭＣＳ０〜ＶＭＣＳ−Ｎと標識される。各ＶＭＣＳは、ゲスト物理アドレスをシステム物理アドレスに変換するマッピングを提供し得る、ＳＬＡＴテーブルポインタ（Ｉｎｔｅｌ拡張ページテーブルポインタＥＰＴＰ等）を有効にするための制御フィールドを含有する。
【００６０】
ここで図５Ｂを参照すると、ミラーリングの開始時に、フォールトトレラントコンピュータシステムは、ミラーリングされていないモードで動作している。ＦＴ管理層５３６は、ＦＴカーネルモードドライバ（ＦＴドライバ）５２２に、ミラーリングされた実行を入力するコマンドを処理し始めさせる。ＦＴカーネルモードドライバ５２２は、ＦＴ仮想マシンモニタ（ＦＴＶＭＭ）コード５８０、ＦＴＶＭＭデータ５８４、ＳＬＡＴ  Ｌ０  ５８８、およびＶＭＣＳ−Ｌ０アレイ５９２のプログラムおよびデータコードを留保されたメモリ領域にロードする、または書き込む。
【００６１】
ＦＴドライバは、プロセッサ毎にＶＭＣＳ  Ｌ０を初期化し、ＦＴＶＭＭをインストールさせ、そのプログラムコードがフォールトトレラントコンピュータシステム内で起こる全ＶＭＥＸＩＴイベント（すなわち、ゲストＬ２からゲストを制御するハイパーバイザの中へ実行を転送するプロセッサ機構）によって直接実行される、ハイパーバイザとして実行させる。ＦＴＶＭＭは、全ＶＭＥＸＩＴを処理し、ＯＳ１、ＯＳ２、ＯＳの一般的に使用されているハイパーバイザＬ１、およびゲストＬ２が、ＦＴＶＭＭがインストールされずアクティブではない場合のように機能的に正常な様式でそれらの処理を継続するであろうように、ＶＭＥＸＩＴを引き起こしたイベントの通常の取扱を模倣する。
【００６２】
本時点で、メモリコンテンツの転送は、前述で議論された２つの条件、すなわち、「節電」および「停電」下で行われる。節電および停電におけるミラーリングは、初期フォールトトレラントコンピュータシステムブート後の数分以内に、いったん定常状態動作に到達すると、またはプロセッササブシステムが起動しているフォールトトレラントコンピュータシステム上のハードウェアエラー後に稼働するように戻される度に、行われてもよい。上記に議論されるように、節電段階の間に、通常システム作業負荷が、処理され、プロセッサが、算出を行い、アクティブメモリにアクセスしてそれを修正し続ける。節電の間に（メモリを第２のサブシステムにコピーしている間に）メモリ書込によって引き起こされるダーティページが、追跡され、次の節電または停電段階でコピーされる。ＦＴＶＭＭは、ダーティページビットマップを提供し、各段階で修正されたメモリページを識別する。節電段階０では、新たにダーティにされたページを追跡しながら、全てのメモリが、コピーされる。節電段階１および以降では、前の段階の間のダーティにされたページのみが、コピーされる。停電では、１つを除く全てのプロセッサが、一時停止され、インタラプトが、無効にされる。いかなるシステム作業負荷も、停電の間に処理されない。前の（節電）段階からのダーティにされたページは、コピーされ、最終的な修正されたページ範囲リストが、作成される。残りのダーティページおよびアクティブプロセッサ状態は、次いで、スタンバイコンピュータメモリにコピーされる。いったんこれが完了すると、ＦＴドライバが、システム管理インタラプトを発生させ、全てのプロセッサが、ファームウェアＵＥＦＩ  ＢＩＯＳおよびファームウェアＳＭＭモジュール内で実行され、これらは、ＳＭＩを発生させ、スタンバイＣＰＵ１４Ｃへのスイッチ３４、３４Ａ、３４Ｂ、および３４Ｃ上のホストポートを変更するようにＭＰ３８および３８Ａに要求し、その後、動作が、現在は新しいオンラインＣＰＵであり、もはやスタンバイＣＰＵではなくなる、ＣＰＵ１４Ｃ上で開始する。ファームウェアＳＭＭは、ＦＴドライバに対して再開を実施し、ＦＴドライバは、停電段階を完了し、ＦＴＶＭＭをアンロードし、一時停止されたプロセッサを解放し、インタラプトを有効にし、ＣＰＵフェイルオーバに関する要求のその取扱を完了する。
【００６３】
ここで図５Ｃを参照すると、ミラーリングプロセスが完了すると、留保されたメモリ５１２内のＦＴＶＭＭコード５８０は、アンロードされ、もはや実行されなくなる。ＦＴＶＭＭデータ５８４、ＳＬＡＴ５８８、およびＶＭＣＳ１９２は、使用されず、留保されたメモリは、アイドルであり、次のエラー条件を待機している。
【００６４】
より詳細には、節電の第１の段階の間に、ＦＴカーネルモードドライバは、ＦＴＶＭＭとのＶＭＣＡＬＬ機能インターフェースを使用し、メモリページ追跡有効化というコマンドを発行して、システム内の修正されたメモリの全てのページを追跡し始めるようにＦＴＶＭＭに要求する。ＦＴＶＭＭへのＦＴドライバの機能インターフェース内のＶＭＣＡＬＬプロセッサ命令は、各論理プロセッサをＦＴＶＭＭに参入させ、ＦＴドライバによって発行される要求を処理させる。ＦＴＶＭＭは、新たに修正された全てのシステムメモリページ（ダーティページ）の記録を取得する様式で、ＦＴＶＭＭハイパーバイザコンテキストにおいてそのプログラムコードを使用し始めるための関数を全てのプロセッサ上で実施する。ＦＴＶＭＭは、ＳＬＡＴ  Ｌ０および全てのＳＬＡＴ  Ｌ２テーブルを検索し、これらのテーブル内のダーティビットをゼロに設定し、次いで、各プロセッサ上のキャッシュされたＳＬＡＴテーブルマッピングを無効にする。全てのプロセッサが、ＦＴＶＭＭにおいて本関数を完了したとき、ＦＴＶＭＭは、ＶＭＲＥＳＵＭＥ命令を実施することによって、制御をＦＴドライバに返す。ＦＴドライバは、次いで、システムメモリの全てを第２のサブシステムにコピーする。ＦＴドライバは、ＤＭＡコントローラまたはスイッチ４３０を使用し、全てのシステムメモリを二次またはスタンバイコンピュータにコピーする高速メモリ転送動作を実施してもよい。フォールトトレラントコンピュータシステムは、本処理の間にその構成された作業負荷を実施し続ける。
【００６５】
節電メモリコピー段階１
節電メモリコピー段階１の一部として、ＦＴドライバは、ダーティページビットマップを取得し、メモリの新たにダーティにされたページを第２のサブシステムにコピーする。ＦＴカーネルモードドライバは、機能インターフェースを使用し、各プロセッサ上でメモリページ追跡有効化と称されるコマンドを発行する。ＦＴＶＭＭへのＦＴドライバの機能インターフェース内のＶＭＣＡＬＬプロセッサ命令は、各論理プロセッサをＦＴＶＭＭに参入させ、ＦＴドライバによって発行される要求を処理させる。ＦＴＶＭＭは、新たに修正された全てのシステムメモリページ（ダーティページ）の記録を取得する様式で、ＦＴＶＭＭハイパーバイザコンテキストにおいてそのプログラムコードを使用し始めるための関数を全てのプロセッサ上で実施する。次いで、各プロセッサ上のＦＴＶＭＭコードは、ＳＬＡＴ  Ｌ０テーブル内および各ゲストのＳＬＡＴ  Ｌ２テーブル内の８バイト毎のページテーブルエントリを検索し、各エントリ内のダーティビットをそのビットのＴＲＵＥ値と比較する。比較結果がＴＲＵＥであるとき、ＦＴＶＭＭは、物理メモリの中のダーティまたは修正されたページのアドレスを表すビットフィールドアドレスにおいて、ダーティページビットマップ内のビットフィールドを設定し、次いで、ページテーブルエントリ内のダーティビットを消去する。ＳＬＡＴ  Ｌ０内で構成されるメモリマッピングは、４キロバイトのページサイズを有するため、ダーティページビットマップ内の１ビットが、見出されるダーティにされたページ毎に設定される。
【００６６】
ハイパーバイザＬ１がＳＬＡＴ  Ｌ２テーブル内に構成したメモリマッピングは、４キロバイトより大きくあり得、ＦＴＶＭＭは、これが起こるときに、２メガバイトページサイズの場合に関して５１２の連続ビットフィールドエントリ等のダーティページビットマップ内の連続的な一連のビットフィールドを設定する。本プロセスが、ＳＬＡＴ  Ｌ０およびＳＬＡＴ  Ｌ２テーブルに関して完了したとき、各プロセッサは、プロセッサ命令を実施し、ＳＬＡＴ  Ｌ０およびＳＬＡＴ  Ｌ２テーブルに関してプロセッサのキャッシュされた変換を無効にして（Ｉｎｔｅｌプロセッサ命令ＩＮＶＥＰＴ等）、ＦＴＶＭＭが、システム作業負荷によって引き起こされ得る、ダーティにされたページの新しいインスタンスを検出し続けることを可能にする。
【００６７】
全てのプロセッサが、ＦＴＶＭＭにおいて本動作を完了したとき、ＦＴＶＭＭは、ＶＭＲＥＳＵＭＥ命令を実施することによって、制御をＦＴドライバに返す。ＦＴドライバは、次いで、ダーティページビットマップ要求と称される、別のＭＣＡＬＬ機能インターフェースコマンドを発行する。ＦＴＶＭＭは、次いで、最近修正されたページの記録を含有するダーティページビットマップを提供し、ＦＴドライバのデータエリア内に位置するメモリバッファ内に本データを記憶する。ＦＴドライバは、次いで、ダーティページビットマップ内で識別される物理メモリページのセットを、二次またはスタンバイコンピュータ内の対応する物理メモリアドレスにコピーする。ＦＴドライバは、ＤＭＡコントローラまたはスイッチ４３０を使用し、ダーティにされたページのセットを第２のサブシステムにコピーする高速メモリ転送動作を実施してもよい。
【００６８】
節電メモリコピー段階２−Ｎ／反復
メモリコピー段階１というプロシージャは、最終節電メモリコピー段階Ｎの間にシステム作業負荷によって発生され得る、ダーティにされたページのより小さい結果として生じるセットを取得するために、１以上の回数で繰り返されてもよい。例えば、一実施形態では、ＦＴドライバは、同一のシーケンスを繰り返し、別のダーティページビットマップを取得し、新たにダーティにされたページを第２のサブシステムに１回またはそれを上回ってコピーしてもよい。
【００６９】
節電コピー段階が完了した後、アクティブであるが故障しているＣＰＵ１４は、全てのＤＭＡトラフィックを一時停止するように、ＤＭＡメモリアクセスを追跡しているそのドライバにシグナリングする（ステップ３３０）。これは、停電段階の開始である。ＣＰＵスレッドは、次いで、メモリページのさらなる修正を防止するように、全て一時停止される。本時点で、ＣＰＵアクセスまたはＤＭＡアクセスのいずれかによって修正されるページの最終リストは、スタンバイＣＰＵ１４Ｃにコピーされる。
【００７０】
より詳細には、停電の間に、ＦＴドライバは、並行して、アクティブであるが故障しているＣＰＵ１４上の全てのプロセッサ上でドライバコードを実行し、ダーティにされたページの最終セットをスタンバイＣＰＵ１４Ｃにコピーする。ＦＴドライバは、フォールトトレラントコンピュータシステム内の他のプログラムがより多くのダーティページビットを発生させることを防止するように、ＣＰＵ１４上の全てのプロセッサに、各プロセッサ上のシステムインタラプト処理を無効にさせる。ＦＴドライバは、ＶＭＣＡＬＬ機能インターフェースを使用し、ＦＴＶＭＭに、最近ダーティにされたメモリページのセットを識別させ、また、ＦＴＶＭＭに、ＶＭＣＳ−ＮおよびＳＬＡＴＬ２等のある揮発性または頻繁に修正されるメモリページを識別させ、ダーティにされたページのセット内にそれらのページを含ませる、停電ページ追跡有効化というコマンドを発行する。ＦＴＶＭＭは、ＦＴＶＭＭ内のプロセッサ＃０を除く、全てのプロセッサを一時的に一時停止してもよい。ＦＴドライバは、次いで、別のＶＭＣＡＬＬ機能インターフェースコマンド、すなわち、ダーティページビットマップ要求を発行し、ダーティページのビットマップを取得する。ＦＴＶＭＭは、次いで、最近修正されたページの記録を含有するダーティページビットマップを提供し、ＦＴドライバのデータエリア内に位置するメモリバッファ内に本データを記憶する。
【００７１】
一実施形態では、ＦＴドライバは、次いで、ダーティページビットマップ内で識別される物理メモリページのセットを、第２のサブシステム内の対応する物理メモリアドレスにコピーする。ＦＴドライバは、次いで、留保されたメモリ領域のためのメモリ範囲を含む、ダーティである、または修正されると仮定されるメモリ範囲のリストを作成し、最終停電メモリ範囲リストと称される、データ構造内に本情報を記憶する。本プロシージャは、システム作業負荷が実行されず、作業負荷が、ダーティにされたページの最終セットがスタンバイＣＰＵ１４Ｃにコピーされている間に短いサーバ処理停止を受けるため、停電メモリコピーと称される。
【００７２】
いったんアクティブであるが故障しているＣＰＵノード１４の全てのメモリがコピーされると、アクティブであるが故障しているＣＰＵノード１４は、そのプロセッサの内部状態を（そのレジスタ、ローカル先進プログラマブルインタラプトコントローラ、高精度イベントタイマ等を含む）メモリ場所に保存し（ステップ３４０）、そのデータをスタンバイＣＰＵノードにコピーし、それは、続いて、スタンバイＣＰＵノード１４Ｃの対応するレジスタの中に復元される。サーバ管理インタラプト（ＳＭＩ）帰還スタックが、アクティブであるが故障しているＣＰＵノードがオフにされた正確な点から処理を回避するために、スタンバイＣＰＵノード１４Ｃ上に復元される必要がある、レジスタの最終セット（プログラムカウンタ等）に関してスタンバイＣＰＵノード１４上に作成される。
【００７３】
アクティブであるが故障しているＣＰＵノード１４は、各ＣＰＵノード１４、１４Ｃが、フェイルオーバ動作後にその独自の意図された新しい状態を有するように、その独自のＮＴＢウィンドウ内のフラグを、ＰＣＩ−メモリのマップされたＩＯ（ＰＣＩ−ＭＭＩＯ）空間の中に、かつスタンバイＣＰＵノード１４ＣのＮＴＢウィンドウ内に設定する。本ステップの完了に先立った任意の時間に、フェイルオーバは、中止されることができ、動作は、単に、最初のアクティブであるが依然として故障しているＣＰＵノード上で継続する。
【００７４】
フェイルオーバを完了するために、いったん本時点までの全てのステップが正常に完了すると、アクティブであるが故障しているＣＰＵは、コマンドを一次管理プロセッサ（二次管理プロセッサと協調し、本ステップにおける任意のエラー事例に対処するであろう）に送信し、フェイルオーバ動作に関与している２つのＣＰＵノード１４、１４Ａに関するホストポートの間でリソースマッピングの全てを交換する（ステップ３５０）。各管理プロセッサは、次いで、そのローカルスイッチへの一連のファームウェアＡＰＩ呼び出しを行い、リソースマッピング変更を遂行するであろう。一次管理プロセッサは、次いで、スイッチ再構成が完了するときに、２つのＣＰＵノードにシグナリングする。
【００７５】
両方のＣＰＵノード１４、１４Ｃは、それらのメールボックス機構から、（最初のアクティブおよびスタンバイ指定から交換される）それらの新しい個別の状態を示すトークンを読み出す。新しいアクティブＣＰＵノード上のソフトウェアが、次いで、要求に応じて、任意の最終クリーンアップを実施する。例えば、切替ファブリックを訓練して、新しいアクティブＣＰＵノードからトランザクションをマップし（ステップ３６０）、システム管理からの再開（ＲＳＭ）命令を実施し、制御をオペレーティングシステムに返し、インタラプトされた命令を再開するために、ＰＣＩ列挙再開を再生する必要があり得る。スタンバイＣＰＵノードは、以前に休止されたデバイスを再アクティブ化し、トランザクションが、ファブリックを通して、スタンバイＣＰＵノードへおよびそれから流動することを可能にすることができる。
【００７６】
上記で記載されるＣＰＵ／メモリフェイルオーバ能力に加えて、本開示はまた、アクティブＩＯドメイン、例えば、ＩＯ１を、他方またはスタンバイＩＯドメイン、例えば、ＩＯ２に転送することも可能である。
【００７７】
ＩＯドメインフェイルオーバ
一実施形態では、以下のステップが、ＩＯドメインフェイルオーバを提供するように実施される。正常な動作では、システム１０が、ブートするとき、全てのＩＯドメイン２６が、存在し、オペレーティングシステムに可視である。ドライバが、次いで、各ＩＯドメインのインスタンス毎にロードされる。ネットワークコントローラ機能が、標準オペレーティングシステムコマンドを使用して、２つのアクティブＩＯドメイン、すなわち、一次２６と二次２６Ａとの間で結束またはチーム化される。任意の外部記憶コントローラは、両方のインスタンスが外部記憶アレイへのコネクティビティを有するときに、二重状態である。旧来のＩＯ以外の全てのＰＣＩドメインデバイスが、二重であるとき、次いで、ＩＯベイ全体が、二重である／プルすることが安全であり、プラットフォームが、システムの正常な動作、したがって、その可用性に影響を及ぼすことなく、障害またはサービスアクションのいずれかに起因するＩＯベイの損失に耐え得ることを意味する。
【００７８】
簡潔には、概観では、ディスクコントローラ４６等のデバイスの故障は、影響を受けた切替コンポーネント３４内で下流ポート格納（ＤＰＣ）イベントをトリガするであろう。切替コンポーネントハードウェア３４は、切替コンポーネント３４とデバイスとの間のリンクを隔離し、切替コンポーネントファームウェア３４は、デバイスへの任意の保留トランザクションを完了する。ファームウェアはまた、ひいては、影響を受けたＣＰＵノード１４にインタラプトを発生させ、それらにＩＯデバイスが故障したことを知らせる、ＭＥ３８にイベントをシグナリングする。故障は、影響を受けたデバイスの直上の切替コンポーネントによって検出された場合に、単一のエンドポイントデバイスをＤＰＣ論理によって隔離させ得る、または故障は、デバイス階層内のより高位のスイッチによって検出された場合に、ＩＯドメイン内のデバイスのより大きいセットの隔離をもたらし得る。
【００７９】
より詳細には、ＭＰ３８、３８Ａは、ＣＰＵノードをデバイスに接続する下流ポート毎に、ファブリックモード切替コンポーネント（概して、３４）内でＤＰＣ（下流ポート格納）フェイルオーバトリガを有効にする。潜在的フェイルオーバトリガは、例えば、シャットダウンし、ＩＯドメイン２６を除去するための意図的なソフトウェアトリガに加えて、リンクダウンエラーと、訂正不可能かつ致命的なエラーとを含む。フェイルオーバトリガが、有効にされるとき、任意のＩＯドメイン２６がエラーに遭遇する場合、そのＩＯドメイン２６のためのファブリック切替コンポーネント３４は、デバイスとのその通信リンクを隔離し、そのリンクを利用するデバイスへの任意の保留トランザクションを完了する。ＭＰ３８、３８Ａは、次いで、デバイスを利用するＣＰＵノード１４にインタラプトを発生させ、それらにデバイスまたはＩＯドメイン２６が故障したことを知らせる。
【００８０】
ＣＰＵノードＯＳは、プラットフォームインタラプトを受信し、故障したＩＯデバイス、またはＩＯドメインボード２６全体が故障したかどうかに関して、ＭＰ３８、３８Ａを調査する。ＣＰＵノードのＯＳは、次いで、影響を受けたデバイスのためのドライバの除去を開始するであろう。各影響を受けたＩＯデバイスに対する残存する二重パートナは、「シンプレックス／一次」としてマークされるであろう。影響を受けていないボード上のＭＰ３８、３８Ａ（図２）は、一次としてマークされるであろう。
【００８１】
ＭＰ３８、３８Ａは、次いで、故障しているＩＯドメイン２６から、および切替コンポーネント３４から、エラーレジスタを読み取る。ＭＰ３８、３８Ａは、次に、そのドメインへの独立リセットをアサートすることによって、デバイスを稼働するように戻そうとし、その後に、ある診断法が続く。診断法が成功した場合、ＭＰ３８、３８Ａは、作成され、ＩＯドメイン２６、２６Ａ内のフラッシュメモリ内に保存された任意の仮想関数を含む、関数をデバイス内で再始動するであろう。
【００８２】
ＭＰ３８、３８Ａは、新しいホットプラグ可能なＩＯドメインが各ＣＰＵノードに利用可能であることを告知する、メッセージを送信する。各ＣＰＵノードは、次いで、デバイスのＰＣＩｅ階層をスキャンし、新たに到着したデバイス／機能を発見し、適切なドライバをロードする。
【００８３】
全てのＩＯデバイスが、もう一度、二重状態でアクティブであるとき、次いで、ＩＯドメイン全体は、再び、二重である／プルすることが安全である。
【００８４】
以下の議論から明白であるように別様に具体的に記述されない限り、説明の全体を通して、「処理する」、または「算出する」、または「計算する」、または「遅延させる」、または「比較する」、「発生させる」、または「決定する」、または「転送する」、または「延期する」、「完遂する」、または「中断する」、または「取り扱う」、または「受信する」、または「バッファする」、または「配分する」、または「表示する」、または「フラグを付ける」、またはブール論理または他の設定された関連動作または同等物等の用語を利用する議論は、コンピュータシステムまたは電子デバイスのレジスタおよびメモリ内の物理的（電子）数量として表されるデータを操作し、電子メモリまたはレジスタ、または他のそのような情報記憶、伝送、または表示デバイス内の物理的数量として同様に表される、他のデータに変換する、コンピュータシステムまたは電子デバイスのアクションおよびプロセスを指すことを理解されたい。
【００８５】
本明細書に提示されるアルゴリズムは、本質的には、いかなる特定のコンピュータまたは他の装置にも関連しない。種々の汎用システムが、本明細書の教示によるプログラムと併用されてもよい、または要求される方法ステップを実施するためにより特殊な装置を構築することが便宜的であることが証明され得る。種々のこれらのシステムのための要求される構造が、上記の説明から明白である。加えて、本開示は、任意の特定のプログラミング言語を参照して説明されず、種々の実施形態は、したがって、種々のプログラミング言語を使用して実装されてもよい。
【００８６】
いくつかの実装が説明されている。それでもなお、本開示の精神および範囲から逸脱することなく、種々の修正が行われ得ることを理解されたい。例えば、ステップが並べ替えられる、追加される、または除去される、上記に示されるフローの種々の形態が、使用されてもよい。故に、他の実装も、以下の請求項の範囲内である。
【００８７】
本明細書に提示される実施例は、本開示の潜在的かつ具体的実装を図示することを意図している。実施例は、主に、当業者のための本開示の例証の目的のために意図されている。実施例のいかなる１つまたは複数の特定の側面も、必ずしも本発明の範囲を限定することを意図しているわけではない。
【００８８】
本開示の図および説明は、明確にする目的のために、他の要素を排除する一方で、本開示の明確な理解のために関連性がある要素を図示するように、単純化されている。しかしながら、当業者は、これらの種類の集中的な議論が、本開示のさらなる理解を促進せず、したがって、そのような要素のより詳細な説明が、本明細書で提供されないことを認識し得る。
【００８９】
本実施形態と関連付けられるプロセスは、コンピュータ等のプログラマブル機器によって実行されてもよい。プログラマブル機器にプロセスを実行させるために採用され得る、ソフトウェアまたは命令の他のセットは、例えば、コンピュータシステム（不揮発性）メモリ、光ディスク、磁気テープ、または磁気ディスク等の任意の記憶デバイス内に記憶されてもよい。さらに、プロセスのうちのいくつかは、コンピュータシステムが製造されるときに、またはコンピュータ可読メモリ媒体を介して、プログラムされてもよい。
【００９０】
また、本明細書に説明される、あるプロセス側面は、プロセスステップを実施するようにコンピュータまたはコンピュータシステムに指示する、１つまたは複数のコンピュータ可読メモリ媒体上に記憶された命令を使用して、実施され得ることも理解されたい。コンピュータ可読媒体は、例えば、ディスケット、読取専用および読取／書込種類の両方のコンパクトディスク、光ディスクドライブ、およびハードディスクドライブ等のメモリデバイスを含んでもよい。コンピュータ可読媒体はまた、物理的、仮想、恒久的、一時的、半恒久的、および／または半一時的であり得る、メモリ記憶装置を含んでもよい。
【００９１】
本明細書に開示されるコンピュータシステムおよびコンピュータベースのデバイスは、情報を取得、処理、および通信する際に使用される、あるソフトウェアアプリケーションを記憶するためのメモリを含んでもよい。そのようなメモリは、開示される実施形態の動作に関して内部または外部にあり得ることを理解されたい。メモリはまた、ハードディスク、光ディスク、フロッピー（登録商標）ディスク、ＲＯＭ（読取専用メモリ）、ＲＡＭ（ランダムアクセスメモリ）、ＰＲＯＭ（プログラマブルＲＯＭ）、ＥＥＰＲＯＭ（電気的消去可能ＰＲＯＭ）、および／または他のコンピュータ可読メモリ媒体を含む、ソフトウェアを記憶するための任意の手段を含んでもよい。種々の実施形態では、「ホスト」、「エンジン」、「ローダ」、「フィルタ」、「プラットフォーム」、または「コンポーネント」は、種々のコンピュータまたはコンピュータシステムを含んでもよい、またはソフトウェア、ファームウェア、および／またはハードウェアの合理的な組み合わせを含んでもよい。
【００９２】
本開示の種々の実施形態では、１つまたは複数の所与の機能を実施するように、単一のコンポーネントが、複数のコンポーネントによって置換されてもよく、複数のコンポーネントが、単一のコンポーネントによって置換されてもよい。そのような代用が本開示の実施形態を実践するように機能しないであろう場合を除いて、そのような代用は、本開示の範囲内である。サーバのうちのいずれかは、例えば、協調的機能のために位置し、構成される、「サーバファーム」またはネットワーク化されたサーバの他のグループ（例えば、サーバブレードのグループ）によって置換されてもよい。サーバファームは、ファームの個々のコンポーネントの間で作業負荷を分散させる役割を果たし得、複数のサーバの集合的かつ協調的能力を利用することによって、算出プロセスを促進させ得ることを理解されたい。そのようなサーバファームは、例えば、異なるマシンからの処理能力の需要を追跡すること、ネットワーク需要に基づいてタスクを優先し、スケジュールすること、および／またはコンポーネント故障または動作可能性の低減の場合にバックアップ随伴性を提供すること等のタスクを遂行する、負荷分散ソフトウェアを採用してもよい。
【００９３】
一般に、本明細書に説明される種々の実施形態、またはそれらのコンポーネントまたは部品は、ソフトウェア、ファームウェア、および／またはハードウェア、またはそれらのモジュールの多くの異なる実施形態で実装され得ることが、当業者に明白であり得る。本実施形態のうちのいくつかを実装するために使用される、ソフトウェアコードまたは特殊制御ハードウェアは、本開示の限定ではない。コンピュータソフトウェアおよび他のコンピュータ実装命令のためのプログラミング言語は、実行前にコンパイラまたはアセンブラによって機械言語に変換されてもよい、および／またはインタープリタによって実行時に直接変換されてもよい。
【００９４】
アセンブリ言語の実施例は、ＡＲＭ、ＭＩＰＳ、およびｘ８６を含み、高レベル言語の実施例は、Ａｄａ、ＢＡＳＩＣ、Ｃ、Ｃ＋＋、Ｃ＃、ＣＯＢＯＬ、Ｆｏｒｔｒａｎ、Ｊａｖａ（登録商標）、Ｌｉｓｐ、Ｐａｓｃａｌ、Ｏｂｊｅｃｔ  Ｐａｓｃａｌを含み、スクリプト言語の実施例は、Ｂｏｕｒｎｅスクリプト、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｐｙｔｈｏｎ、Ｒｕｂｙ、ＰＨＰ、およびＰｅｒｌを含む。種々の実施形態は、例えば、Ｌｏｔｕｓ  Ｎｏｔｅｓ環境で採用されてもよい。そのようなソフトウェアは、例えば、磁気または光学記憶媒体等の任意のタイプの１つまたは複数の好適なコンピュータ可読媒体上に記憶されてもよい。したがって、実施形態の動作および挙動は、実際のソフトウェアコードまたは特殊ハードウェアコンポーネントを具体的に参照することなく説明される。当業者は、合理的な努力のみを用いて、必要以上の実験を伴わずに、本明細書の説明に基づいて本開示の実施形態を実装するように、ソフトウェアおよび制御ハードウェアを設計することが可能であろうことが、明確に理解されるため、そのような具体的参照の欠如は、実現可能である。
【００９５】
本明細書に説明されるシステムおよび方法の種々の実施形態は、１つ以上の電子コンピュータネットワークを採用し、異なるコンポーネントの間の通信を助長する、データを転送する、またはリソースおよび情報を共有してもよい。そのようなコンピュータネットワークは、ネットワーク内のデバイスを相互接続するために使用される、ハードウェアおよびソフトウェア技術に従って、分類されることができる。
【００９６】
コンピュータネットワークは、アクティブネットワーキング、クライアント・サーバ、またはピアツーピア機能アーキテクチャ等のネットワークの要素またはコンポーネントの間の機能的関係に基づいて、特徴付けられてもよい。コンピュータネットワークは、例えば、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スターバスネットワーク、または階層トポロジネットワーク等のネットワークトポロジに従って、分類されてもよい。コンピュータネットワークはまた、デジタルおよびアナログネットワーク等のデータ通信に採用される方法に基づいて、分類されてもよい。
【００９７】
本明細書に説明される方法、システム、およびツールの実施形態は、共通ルーティング技術を通して、２つ以上の明確に異なる電子コンピュータネットワークまたはネットワークセグメントを接続するためのインターネットワーキングを採用してもよい。採用されるインターネットワークのタイプは、インターネットワーク内の管理および／または関与に依存し得る。インターネットワークの非限定的実施例は、イントラネット、エクストラネット、およびインターネットを含む。イントラネットおよびエクストラネットは、インターネットへの接続を有する場合とそうではない場合がある。インターネットに接続された場合、イントラネットまたはエクストラネットは、適切な認証技術または他のセキュリティ対策を用いて保護されてもよい。本明細書で適用されるように、イントラネットは、管理エンティティによる共通制御下で、インターネットプロトコル、ウェブブラウザ、および／またはファイル転送アプリケーションを採用する、ネットワークのグループであり得る。そのような管理エンティティは、イントラネットへのアクセスを、例えば、認可ユーザのみ、または団体または商業エンティティの別の内部ネットワークに制限し得る。
【００９８】
別様に示されない限り、本明細書および請求項で使用される、長さ、幅、深度、または他の寸法等を表す全ての数字は、示されるような正確な値および用語「約」によって修飾されるものの両方を示すものとして、全ての事例で理解されるものである。本明細書で使用されるように、用語「約」は、公称値からの±１０％変動を指す。故に、そうではないと示されない限り、本明細書および添付の請求項に記載される数値パラメータは、取得されることが求められる所望の性質に応じて変動し得る、近似値である。少なくとも、原則の適用を請求項の範囲の均等物に限定するための試行ではないが、各数値パラメータは、少なくとも、報告される有効桁数を踏まえて、通常の丸め技法を適用することによって、解釈されるべきである。任意の具体的値は、２０％変動し得る。
【００９９】
本発明は、その精神または本質的特性から逸脱することなく、他の具体的形態で具現化されてもよい。前述の実施形態は、したがって、あらゆる点に関して本明細書に説明される開示では限定的ではなく例証的と見なされるものである。本発明の範囲は、したがって、前述の説明によってではなく添付の請求項によって示され、請求項の均等性の意味および範囲に入る全ての変更は、その中に包含されることを意図している。
【０１００】
種々の修正および変更が、説明される技術の範囲から逸脱することなく行われ得ることが、当業者によって理解されるであろう。そのような修正および変更は、説明される実施形態の範囲内に該当することを意図している。また、一実施形態に含まれる特徴は、他の実施形態と交換可能であり、描写される実施形態からの１つ以上の特徴は、任意の組み合わせで他の描写される実施形態とともに含まれ得ることが、当業者によって理解されるであろう。例えば、本明細書に説明される、および／または図に描写される種々のコンポーネントのうちのいずれかが、組み合わせられる、交換される、または他の実施形態から除外されてもよい。
【図１】
2021534524.tif 000003
【図２】
2021534524.tif 000004
【図３】
2021534524.tif 000005
【図４】
2021534524.tif 000006
【図５Ａ】
2021534524.tif 000007
【図５Ｂ】
2021534524.tif 000008
【図５Ｃ】
2021534524.tif 000009
【国際調査報告】
2021534524.tif 000010
2021534524.tif 000011
2021534524.tif 000012
2021534524.tif 000013
2021534524.tif 000014