(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-17
(45)【発行日】2024-04-25
(54)【発明の名称】高信頼性フォールトトレラントコンピュータアーキテクチャ
(51)【国際特許分類】
G06F 11/20 20060101AFI20240418BHJP
【FI】
G06F11/20 633
(21)【出願番号】P 2021532264
(86)(22)【出願日】2019-08-09
(86)【国際出願番号】 US2019045907
(87)【国際公開番号】W WO2020036824
(87)【国際公開日】2020-02-20
【審査請求日】2022-07-13
(32)【優先日】2018-08-13
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】521065528
【氏名又は名称】ストラタス テクノロジーズ アイルランド リミテッド
(74)【代理人】
【識別番号】100078282
【氏名又は名称】山本 秀策
(74)【代理人】
【識別番号】100113413
【氏名又は名称】森下 夏樹
(74)【代理人】
【識別番号】100181674
【氏名又は名称】飯田 貴敏
(74)【代理人】
【識別番号】100181641
【氏名又は名称】石川 大輔
(74)【代理人】
【識別番号】230113332
【氏名又は名称】山本 健策
(72)【発明者】
【氏名】ポロウスキ, チェスター ダブリュー.
(72)【発明者】
【氏名】チャベス, ジョン エム.
(72)【発明者】
【氏名】オールデン, アンドリュー
(72)【発明者】
【氏名】キーファー, クレッグ ディー.
(72)【発明者】
【氏名】コットン, クリストファー ディー.
(72)【発明者】
【氏名】イーガン, マイケル
【審査官】坂東 博司
(56)【参考文献】
【文献】特表2015-528962(JP,A)
【文献】米国特許出願公開第2006/0117300(US,A1)
【文献】米国特許出願公開第2015/0200818(US,A1)
【文献】米国特許出願公開第2016/0098372(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/20
(57)【特許請求の範囲】
【請求項1】
フォールトトレラントコンピュータシステム内でCPUノードフェイルオーバを実施する方法であって、前記フォールトトレラントコンピュータシステムは、複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを備え、前記CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、少なくとも2つのIOドメインであって、前記IOドメインのうちの少なくとも1つは、前記アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、各CPUノードを各IOドメインに接続する切替ファブリックとを有し、前記方法は、
アクティブであるが故障しているCPUノードのメモリと前記スタンバイCPUノードのメモリとの間にDMAデータパスを確立するステップと、
アクティブであるが故障しているCPUノードのメモリおよび前記スタンバイCPUノードのメモリから、前記DMAデータパスを通してメモリコンテンツを転送するステップと、
前記アクティブであるが故障しているCPUノードによって、DMAアクセスが起こる前記アクティブであるが故障しているCPUノード内のメモリアドレスを追跡するステップと、
前記アクティブであるが故障しているCPUノード上のメモリへのアクセスを停止し、DMAが開始された以降にアクセスされている任意のメモリデータをコピーするステップと、
前記アクティブであるが故障しているCPUノード内の前記プロセッサの状態を前記スタンバイCPUノードにコピーするステップと、
前記アクティブであるが故障しているCPUノードから前記スタンバイCPUノードへの全てのリソースマッピングを交換するステップと、
前もって指定されたスタンバイCPUノードが前記新しいアクティブCPUノードであることを可能にするステップと
を含む、方法。
【請求項2】
両方のCPUノードが、フェイルオーバ動作後にその独自の意図された新しい状態を有するように、前記アクティブであるが故障しているCPUノードが、その独自のNTBウィンドウ内のフラグをPCI-メモリのマップされたIO空間および前記スタンバイCPUノードのNTBウィンドウの中に設定するステップをさらに含む、請求項
1に記載の方法。
【請求項3】
前記アクティブであるが故障しているCPUノードが、開始ルーチンのステータスに関して前記スタンバイCPUノードにポーリングするステップをさらに含む、請求項
1に記載の方法。
【請求項4】
フォールトトレラントコンピュータシステム内でIOドメインフェイルオーバを実施する方法であって、前記フォールトトレラントコンピュータシステムは、複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを備え、前記CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、少なくとも2つのIOドメインであって、前記IOドメインのうちの少なくとも1つは、前記アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、各CPUノードを各IOドメインに接続する切替ファブリックとを有し、前記方法は、
各IOドメイン内で切替ファブリック制御コンポーネント毎に故障トリガを有効化するステップであって、前記故障トリガは、リンクダウンエラーと、訂正不可能かつ致命的なエラーと、ソフトウェアトリガとを備える、ステップと、
故障トリガが起こることに応じて、故障しているIOドメインを使用するドライバを停止するステップと
を含む、方法。
【請求項5】
前記アクティブCPUノードのメモリと前記スタンバイCPUノードのメモリとの間にDMAデータパスを確立することをさらに含む、請求項4に記載の方法。
【請求項6】
前記アクティブCPUノードのメモリおよび前記スタンバイCPUノードのメモリから、前記DMAデータパスを通してメモリコンテンツを転送することと、
前記アクティブCPUノードによって、DMAアクセスが起こる前記アクティブCPUノード内のメモリアドレスを追跡することと
をさらに含む、請求項5に記載の方法。
【請求項7】
前記アクティブCPUノード上のメモリへのアクセスを停止し、DMAが開始された以降にアクセスされている任意のメモリデータをコピーすることをさらに含む、請求項6に記載の方法。
【請求項8】
前記アクティブCPUノード内の前記プロセッサの状態を前記スタンバイCPUノードにコピーすることをさらに含む、請求項7に記載の方法。
【請求項9】
前記アクティブCPUノードから前記スタンバイCPUノードへの全てのリソースマッピングを交換することをさらに含む、請求項8に記載の方法。
【請求項10】
前もって指定されたスタンバイCPUノードが前記新しいアクティブCPUノードであることを可能にすることをさらに含む、請求項9に記載の方法。
【請求項11】
アクティブIOドメイン毎にプロビジョニングサービスを起動することをさらに含み、各プロビジョニングサービスは、他のアクティブIOドメインの前記プロビジョニングサービスと通信し、物理関数および/または仮想関数の統一階層を形成する、請求項4に記載の方法。
【請求項12】
CPUノード毎にインタラプトを発生させることをさらに含み、前記インタラプトは、前記IOドメインまたはコンポーネントが故障したことを各CPUノードに通信する、請求項4に記載の方法。
【請求項13】
各IOドメインはさらに、IOデバイスのセットを備え、前記IOデバイスのセットは、一次IOドメインのコンポーネントを備え、各IOデバイスは、1つ以上の物理関数および/または仮想関数を備え、1つのIOドメイン内の1つ以上の物理関数および/または仮想関数は、共有可能である、請求項4に記載の方法。
【請求項14】
各CPUノードおよびIOドメインは、他のCPUノードおよびIOドメインのうちの1つ以上で実行されるアプリケーションに影響を及ぼすことなく交換されるように構成される、請求項4に記載の方法。
【請求項15】
前記IOデバイスのセットおよび前記1つ以上の物理関数および/または仮想関数を2つの切替ファブリック制御コンポーネントのうちの1つ以上および1つ以上のCPUノードに配分することをさらに含む、請求項13に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
(優先権の主張)
本願は、その内容全体が参照することによって本明細書に組み込まれる、2018年8月13日に出願された、米国仮出願第62/717,939号の優先権を主張する。
【0002】
本開示は、概して、高信頼性フォールトトレラントコンピュータシステムのためのアーキテクチャに関し、より具体的には、切替ファブリックによって相互接続されるモジュール式冗長コンポーネントを伴うフォールトトレラントコンピュータシステムに関する。
【背景技術】
【0003】
高信頼性フォールトトレラントコンピュータシステムは、少なくとも「99.999%」の信頼性を有するコンピュータシステムである。これは、コンピュータが時間の少なくとも99.999%に機能しており、連続動作の1年あたり最大で約5分だけの計画外のダウンタイムを有することを意味する。
【0004】
本高信頼性を遂行するために、そのようなフォールトトレラントコンピュータシステムは、1つのコンポーネントが、故障する、故障し始める、または故障することが予測されるときに、故障しているコンピュータコンポーネントを使用するプログラムが、システムの類似するが冗長なコンポーネントを代わりに使用するように、冗長コンポーネントを頻繁に有する。概して、本フェイルオーバが実施される、2つの方法が存在する。
【0005】
1つの方法は、それぞれ、同時に同一のアプリケーションを実行し、それらの結果を周期的に比較し、それらが同一の結果に到達することを確実にする、2つ以上のプロセッサシステムを有することである。そのようなシステムでは、1つのシステムが、故障するとき、他方は、故障しているシステムが交換されるまで、シンプレックスまたは単一プロセッサシステムとして動作し続けることができる。故障しているシステムが、交換されるとき、故障していないシステムの状態が、交換用プロセッサシステムにコピーされ、両方のシステムが、次いで、二重システムと同一のアプリケーションを実行し続ける。
【0006】
第2の方法は、2つのプロセッサシステム、すなわち、アプリケーションを実行しているアクティブプロセッサシステムであるもの、およびスタンバイプロセッサシステムである別のものを有することである。本構成では、スタンバイプロセッサシステムは、アクティブプロセッサシステムの状態およびメモリコンテンツとともに、アクティブプロセッサシステムから更新を周期的に受信する。これらの時点は、チェックポイントと呼ばれ、転送されたデータは、チェックポイントデータと称される。アクティブプロセッサが、故障する、故障し始める、または故障することが予測されるとき、アクティブプロセッサは、その最終状態およびメモリコンテンツをスタンバイプロセッサシステムに転送し、スタンバイプロセッサシステムは、新しいアクティブプロセッサシステムになり、前もってアクティブプロセッサシステムがその最終状態を転送した点から計算を継続する。
【0007】
これらの方法の両方は、欠点を有する。第1の方法では、2つの重複コンピュータシステムを連続的に維持および起動するコストは、わずかではない。第2の方法では、スタンバイシステムにチェックポイント状態およびメモリデータを周期的に供給するために要求される時間は、アクティブコンピュータシステムによるアプリケーションの処理を減速する。
【0008】
本開示は、これらの欠点およびその他に対処する。
【発明の概要】
【課題を解決するための手段】
【0009】
一側面では、本開示は、フォールトトレラントコンピュータシステムに関する。一実施形態では、本システムは、複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを含み、CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、少なくとも2つのIOドメインであって、IOドメインのうちの少なくとも1つは、アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、各CPUノードを各IOドメインに接続する、切替ファブリックとを含む。別の実施形態では、故障、故障の開始、または予測される故障のうちの1つが、アクティブノード内で起こる場合、アクティブCPUノードの状態およびメモリが、切替ファブリックを通してスタンバイCPUノードに転送され、スタンバイCPUノードは、新しいアクティブCPUノードになり、以前から故障しているノードを引き継ぐ。さらに別の実施形態では、故障、故障の開始、または予測される故障のうちの1つが、故障しているアクティブIOドメインと称されるアクティブIOドメイン内で起こる場合、故障しているアクティブIOドメインによって実施される通信機能は、他のIOドメインに転送される。
【0010】
さらに別の実施形態では、各CPUノードはさらに、切替ファブリックと通信する通信インターフェースを含む。なおもさらに別の実施形態では、各IOドメインは、少なくとも2つの切替ファブリック制御コンポーネントを含み、各切替ファブリック制御コンポーネントは、切替ファブリックと通信する。一実施形態では、各IOドメインはさらに、管理プロセッサを備える。さらに別の実施形態では、アクティブIOドメインの管理プロセッサは、切替ファブリックを通して通信を制御する。さらに別の実施形態では、各IOドメインは、シリアルリンクを通して他のIOドメインと通信する。一実施形態では、切替ファブリックは、Non-Transparent Bridge (NTB) PCI Express(PCIe)切替ファブリックである。
【0011】
一実施形態では、各IOドメインはさらに、IOデバイスのセットを含み、各IOデバイスは、1つ以上の物理関数および/または仮想関数を含み、1つのIOドメイン内の1つ以上の物理関数および/または仮想関数は、共有可能である。一実施形態では、1つ以上の物理関数は、1つ以上の仮想関数を含む。一実施形態では、IOデバイスのセットおよび1つ以上の物理関数および/または仮想関数は、1つ以上のCPUノードのポートに割当可能な1つ以上のサブ階層を定義するように、1つ以上のCPUノードおよび2つの切替ファブリック制御コンポーネントのうちの1つ以上のものに配分される。一実施形態では、IOデバイスのセットのうちの1つ以上のものおよび仮想関数は、物理CPUノードのセットの間で区分化され、物理CPUノードのセットは、アクティブCPUノードと、スタンバイCPUノードとを備える。一実施形態では、本システムはさらに、各IOドメイン内の管理プロセッサ上で起動する、1つ以上の管理エンジンインスタンスを含み、各管理エンジンは、個別の管理エンジンに接続される切替ファブリック制御コンポーネントにクエリを行い、制御コンポーネント毎の基準で、物理関数および/または仮想関数の列挙された階層を取得し、各管理エンジンは、列挙されたコンポーネント毎の階層を、各管理エンジンと関連付けられるIOドメイン内の物理関数および/または仮想関数のドメイン毎の階層にマージする。
【0012】
一実施形態では、本システムはさらに、1つ以上のプロビジョニングサービスインスタンスを含み、各プロビジョニングサービスは、各IOドメイン内の管理プロセッサ上で起動し、各プロビジョニングサービスは、ドメイン毎の階層に関してドメイン毎の管理エンジンインスタンスにクエリを行い、各プロビジョニングサービスのドメイン毎のインスタンスは、他のI/Oドメイン内のプロビジョニングサービスと通信し、システム内に物理関数および/または仮想関数の統一階層を形成する。一実施形態では、プロビジョニングサービスのドメイン毎のインスタンスのいずれかは、組成インターフェースから要求をサービス提供することが可能であり、プロビジョニングサービスのいずれかはまた、IOドメインを横断して冗長性を保証する観点から、1つ以上のシステム組成要求の変動性を検証することも可能である。一実施形態では、プロビジョニングサービスのドメイン毎のインスタンスのいずれかは、業界標準システム組成インターフェースから要求をサービス提供することが可能であり、プロビジョニングサービスのドメイン毎のインスタンスのいずれかはまた、IOドメインを横断して冗長性を保証する観点から、システム組成要求の変動性を検証することも可能である。
【0013】
別の側面では、本開示は、フォールトトレラントコンピュータシステム内でCPUノードフェイルオーバを実施する方法に関する。一実施形態では、フォールトトレラントコンピュータシステムは、複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを含み、CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、少なくとも2つのIOドメインであって、IOドメインのうちの少なくとも1つは、アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、各CPUノードを各IOドメインに接続する、切替ファブリックとを含む。別の実施形態では、本方法は、アクティブであるが故障しているCPUノードのメモリとスタンバイCPUノードのメモリとの間にDMAデータパスを確立するステップを含む。さらに別の実施形態では、本方法は、アクティブであるが故障しているCPUノードのメモリおよびスタンバイCPUノードのメモリからメモリコンテンツを転送するステップを含む。なおもさらに別の実施形態では、本方法は、アクティブであるが故障しているCPUノードによって、DMAアクセスが起こる、アクティブであるが故障しているCPUノード内のアドレスを追跡するステップを含む。別の実施形態では、本方法は、アクティブであるが故障しているCPUノード上のメモリへのアクセスを停止し、DMAが開始された以降にアクセスされている任意のメモリデータをコピーするステップを含む。さらに別の実施形態では、本方法は、アクティブであるが故障しているCPUノード内のプロセッサの状態をスタンバイCPUノードにコピーするステップを含む。さらになおも別の実施形態では、本方法は、アクティブであるが故障しているCPUノードからスタンバイCPUノードへの全てのリソースマッピングを交換するステップと、前もって指定されたスタンバイCPUノードが新しいアクティブCPUノードであることを可能にするステップとを含む。
【0014】
別の実施形態では、本方法は、各CPUノードが、フェイルオーバ動作後にその独自の意図された新しい状態を有するように、アクティブであるが故障しているCPUノードによって、その独自のNTBウィンドウ内のフラグをPCI-メモリのマップされたIO空間およびスタンバイCPUノードのNTBウィンドウの中に設定するステップを含む。さらに別の実施形態では、本方法は、アクティブであるが故障しているCPUノードが、開始ルーチンのステータスに関してスタンバイCPUノードにポーリングするステップを含む。
【0015】
別の側面では、本開示は、IOドメインフェイルオーバを実施する方法を含む。一実施形態では、本方法は、各IOドメイン内で切替ファブリック制御コンポーネント毎に故障トリガを有効化するステップであって、故障トリガは、限定ではないが、リンクダウンエラーと、訂正不可能かつ致命的なエラーと、ソフトウェアトリガとを含む、ステップと、故障トリガが起こることに応じて、ドライバが故障しているIOドメインを使用しないように阻止するステップとを含む。
【0016】
本開示は、異なる側面および実施形態に関するが、本明細書に開示される異なる側面および実施形態は、適宜、組み合わせシステムとして、または部分的に、別個のコンポーネント、デバイス、およびシステムとして、ともに統合される、組み合わせられる、または使用され得ることを理解されたい。したがって、本明細書に開示される各実施形態は、所与の実装のために適宜、種々の程度に側面のそれぞれに組み込まれることができる。
本明細書は、例えば、以下の項目も提供する。
(項目1)
フォールトトレラントコンピュータシステムであって、
複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを備え、前記CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、
少なくとも2つのIOドメインであって、前記IOドメインのうちの少なくとも1つは、前記アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、
各CPUノードを各IOドメインに接続する切替ファブリックと
を備え、
故障、故障の開始、および予測される故障のうちの1つが、アクティブノード内で起こる場合、前記アクティブCPUノードの状態およびメモリが、DMAデータパスを通して前記スタンバイCPUノードに転送され、前記スタンバイCPUノードは、新しいアクティブCPUノードになる、フォールトトレラントコンピュータシステム。
(項目2)
各CPUノードはさらに、前記切替ファブリックと通信する通信インターフェースを備える、項目1に記載のフォールトトレラントコンピュータシステム。
(項目3)
各IOドメインは、少なくとも2つの切替ファブリック制御コンポーネントを備え、各切替ファブリック制御コンポーネントは、前記切替ファブリックと通信する、項目1に記載のフォールトトレラントコンピュータシステム。
(項目4)
各IOドメインはさらに、IOデバイスのセットを備え、各IOデバイスは、1つ以上の物理関数および/または仮想関数を備え、1つのIOドメイン内の1つ以上の物理関数および/または仮想関数は、共有可能である、項目1に記載のフォールトトレラントコンピュータシステム。
(項目5)
1つ以上の物理関数は、1つ以上の仮想関数を備える、項目4に記載のフォールトトレラントコンピュータシステム。
(項目6)
前記IOデバイスのセットおよび前記1つ以上の物理関数および/または仮想関数は、前記1つ以上のCPUノードのポートに割当可能な1つ以上のサブ階層を定義するように、1つ以上のCPUノードおよび2つの切替ファブリック制御コンポーネントのうちの1つ以上のものに配分される、項目4に記載のフォールトトレラントコンピュータシステム。
(項目7)
前記IOデバイスのセットのうちの1つ以上のものおよび前記仮想関数は、物理CPUノードのセットの間で区分化され、前記物理CPUノードのセットは、前記アクティブCPUノードと、前記スタンバイCPUノードとを備える、項目4に記載のフォールトトレラントコンピュータシステム。
(項目8)
各IOドメイン内の管理プロセッサ上で起動する1つ以上の管理エンジンインスタンスをさらに備え、各管理エンジンは、個別の管理エンジンに接続される前記切替ファブリック制御コンポーネントにクエリを行い、制御コンポーネント毎の基準で、物理関数および/または仮想関数の列挙された階層を取得し、各管理エンジンは、列挙されたコンポーネント毎の階層を、各管理エンジンと関連付けられる前記IOドメイン内の物理関数および/または仮想関数のドメイン毎の階層にマージする、項目6に記載のフォールトトレラントコンピュータシステム。
(項目9)
1つ以上のプロビジョニングサービスインスタンスをさらに備え、各プロビジョニングサービスは、各IOドメイン内の前記管理プロセッサ上で起動し、各プロビジョニングサービスは、ドメイン毎の階層毎に、ドメイン毎の管理エンジンインスタンスにクエリを行い、各プロビジョニングサービスのドメイン毎のインスタンスは、他のI/Oドメイン内の前記プロビジョニングサービスと通信し、前記システム内に物理関数および/または仮想関数の統一階層を形成する、項目7に記載のフォールトトレラントコンピュータシステム。
(項目10)
前記プロビジョニングサービスのドメイン毎のインスタンスのいずれかは、組成インターフェースから要求をサービス提供することが可能であり、前記プロビジョニングサービスのいずれかはまた、IOドメインを横断して冗長性を保証する観点から、1つ以上のシステム組成要求の変動性を検証することも可能である、項目9に記載のフォールトトレラントコンピュータシステム。
(項目11)
各IOドメインはさらに、管理プロセッサを備える、項目1に記載のフォールトトレラントコンピュータシステム。
(項目12)
アクティブIOドメインの管理プロセッサは、前記切替ファブリックを通して通信を制御する、項目11に記載のフォールトトレラントコンピュータシステム。
(項目13)
各IOドメインは、シリアルリンクを通して他のIOドメインと通信する、項目1に記載のフォールトトレラントコンピュータシステム。
(項目14)
前記切替ファブリックは、Non-Transparent Bridge (NTB) PCI Express(PCIe)切替ファブリックである、項目1に記載のフォールトトレラントコンピュータシステム。
(項目15)
フォールトトレラントコンピュータシステム内でCPUノードフェイルオーバを実施する方法であって、前記フォールトトレラントコンピュータシステムは、複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを備え、前記CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、少なくとも2つのIOドメインであって、前記IOドメインのうちの少なくとも1つは、前記アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、各CPUノードを各IOドメインに接続する切替ファブリックとを有し、前記方法は、
アクティブであるが故障しているCPUノードのメモリと前記スタンバイCPUノードのメモリとの間にDMAデータパスを確立するステップと、
アクティブであるが故障しているCPUノードのメモリおよび前記スタンバイCPUノードのメモリから、前記DMAデータパスを通してメモリコンテンツを転送するステップと、
前記アクティブであるが故障しているCPUノードによって、DMAアクセスが起こる前記アクティブであるが故障しているCPUノード内のメモリアドレスを追跡するステップと、
前記アクティブであるが故障しているCPUノード上のメモリへのアクセスを停止し、DMAが開始された以降にアクセスされている任意のメモリデータをコピーするステップと、
前記アクティブであるが故障しているCPUノード内の前記プロセッサの状態を前記スタンバイCPUノードにコピーするステップと、
前記アクティブであるが故障しているCPUノードから前記スタンバイCPUノードへの全てのリソースマッピングを交換するステップと、
前もって指定されたスタンバイCPUノードが前記新しいアクティブCPUノードであることを可能にするステップと
を含む、方法。
(項目16)
両方のCPUノードが、フェイルオーバ動作後にその独自の意図された新しい状態を有するように、前記アクティブであるが故障しているCPUノードが、その独自のNTBウィンドウ内のフラグをPCI-メモリのマップされたIO空間および前記スタンバイCPUノードのNTBウィンドウの中に設定するステップをさらに含む、項目15に記載の方法。
(項目17)
前記アクティブであるが故障しているCPUノードが、開始ルーチンのステータスに関して前記スタンバイCPUノードにポーリングするステップをさらに含む、項目15に記載の方法。
(項目18)
フォールトトレラントコンピュータシステム内でIOドメインフェイルオーバを実施する方法であって、前記フォールトトレラントコンピュータシステムは、複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを備え、前記CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、少なくとも2つのIOドメインであって、前記IOドメインのうちの少なくとも1つは、前記アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、各CPUノードを各IOドメインに接続する切替ファブリックとを有し、前記方法は、
各IOドメイン内で切替ファブリック制御コンポーネント毎に故障トリガを有効化するステップであって、前記故障トリガは、リンクダウンエラーと、訂正不可能かつ致命的なエラーと、ソフトウェアトリガとを備える、ステップと、
故障トリガが起こることに応じて、故障しているIOドメインを使用するドライバを停止するステップと
を含む、方法。
(項目19)
フォールトトレラントコンピュータシステムであって、
複数のCPUノードであって、各CPUノードは、プロセッサと、メモリとを備え、前記CPUノードのうちの1つは、スタンバイCPUノードと指定され、残りは、アクティブCPUノードとして指定される、複数のCPUノードと、
少なくとも2つのIOドメインであって、前記IOドメインのうちの少なくとも1つは、前記アクティブCPUノードのための通信機能を実施するアクティブIOドメインと指定される、少なくとも2つのIOドメインと、
各CPUノードを各IOドメインに接続する切替ファブリックと
を備え、
故障、故障の開始、および予測される故障のうちの1つが、故障しているアクティブIOドメインと称されるアクティブIOドメイン内で起こる場合、前記故障しているアクティブIOドメインによって実施される前記通信機能は、他のIOドメインに転送される、フォールトトレラントコンピュータシステム。
(項目20)
各CPUノードはさらに、前記切替ファブリックと通信する通信インターフェースを備える、項目19に記載のフォールトトレラントコンピュータシステム。
(項目21)
各IOドメインは、少なくとも2つの切替ファブリック制御コンポーネントを備え、各切替ファブリック制御コンポーネントは、前記切替ファブリックと通信する、項目19に記載のフォールトトレラントコンピュータシステム。
(項目22)
各IOドメインはさらに、管理プロセッサを備える、項目19に記載のフォールトトレラントコンピュータシステム。
(項目23)
アクティブIOドメインの管理プロセッサは、前記切替ファブリックを通して通信を制御する、項目22に記載のフォールトトレラントコンピュータシステム。
【図面の簡単な説明】
【0017】
本開示の構造および機能は、付随する図面と併せて本明細書の説明から最良に理解されることができる。図は、必ずしも一定の縮尺ではなく、代わりに、概して、例証的原理を強調している。図は、全ての側面で例証的と見なされるものであり、その範囲が請求項のみによって定義される、本発明を限定することを意図していない。
【0018】
【
図1】
図1は、本開示に従って構築される高信頼性フォールトトレラントコンピュータシステムのブロック図である。
【0019】
【
図2】
図2は、より詳細な
図1のシステムの実施形態のブロック図である。
【0020】
【
図3】
図3は、本開示による、CPUのフェイルオーバのステップの実施形態のフロー図である。
【0021】
【
図4】
図4は、
図1のアクティブおよびスタンバイコンピュータを伴うフォールトトレラントシステムの実施形態の略図である。
【0022】
【
図5A】
図5A-5Cは、メモリ重複またはミラーリングの種々の段階の間のOS、ハイパーバイザ、ゲストVM、FT仮想マシンマネージャ(FTVMM)、およびフォールトトレラントコンピュータシステム内の他の層のオペレーティングソフトウェアおよび実行状態の実施形態の略図である。
【
図5B】
図5A-5Cは、メモリ重複またはミラーリングの種々の段階の間のOS、ハイパーバイザ、ゲストVM、FT仮想マシンマネージャ(FTVMM)、およびフォールトトレラントコンピュータシステム内の他の層のオペレーティングソフトウェアおよび実行状態の実施形態の略図である。
【
図5C】
図5A-5Cは、メモリ重複またはミラーリングの種々の段階の間のOS、ハイパーバイザ、ゲストVM、FT仮想マシンマネージャ(FTVMM)、およびフォールトトレラントコンピュータシステム内の他の層のオペレーティングソフトウェアおよび実行状態の実施形態の略図である。
【発明を実施するための形態】
【0023】
要するに、本開示に従って構築される高信頼性フォールトトレラントコンピュータシステム10は、一実施形態では、
図1に示されるようなメッシュファブリックネットワーク30を通して少なくとも2つのIOドメイン(概して、26)に相互接続される、複数のCPUノード(概して、14)を含む。複数のノード14のうちのノードのうちの少なくとも1つ14Cは、スタンバイノードであり、他のCPUノード14、14A、14Bのうちの1つが故障し始めるか、または実際に故障するかのいずれかになるまで、アプリケーションを実行しない。故障が、起こるとき、スタンバイCPUノード14Cは、故障しているCPUノード(例えば、CPUノード14)の状態を入手し、故障しているCPCノード14上で実行されていたアプリケーションを実行し続ける。
【0024】
図2も参照すると、正常な動作では、CPUノード14は、一実施形態では、2つのIOドメイン26、26Aのうちの1つを通して、外界と通信する。IOドメイン26は、各CPUノード14が、種々のバス、通信チャネル、相互結線、またはリンク31によって、各IOドメイン26に接続される、切替ファブリック30によって、CPUノード14に接続される。種々の実施形態では、バス、通信チャネル、相互結線、またはリンク31は、複数のPCI Express xNインターフェースを含むことができ、Nは、1、2、4、8、または16である。IOドメイン26はまた、冗長である。一実施形態では、IOドメイン26は、CPUノード14からの通信を制御する一次ドメイン、およびIOドメイン26が故障する場合にスタンバイドメインとして作用する第2のIOドメイン26Aである。各IOドメイン26、26Aはまた、ネットワークインターフェース、概して、44、記憶コントローラおよびディスク、概して、46、および付加的IOデバイスを通して、外界に接続される。
【0025】
各IOドメイン26、26Aは、1つ以上の記憶ディスク46に接続されてもよい。これらの記憶ディスクは、冗長であり、点線によって示されるような同一のデータの重複またはミラーリングされたコピーを有する。IOドメインへの書込は、両方のIOドメイン26内の各内部ディスクに送信され、ミラーリングされた一対のディスクD1およびD1Aに書き込まれる。データに関する読取要求は、適切に機能している限り、一次ドメイン26からサービス提供される。一次ドメイン26の故障の場合、読取要求は、二次またはスタンバイIOドメイン26Aのディスクからサービス提供される。
【0026】
本システムは、ここで、概して、そのハードウェアアーキテクチャおよびハードウェア故障が起こるときのその動作の観点から、議論される。
【0027】
ハードウェア実装
より詳細には、
図2を再び参照すると、本開示の一実施形態に従って構築されるシステム10は、それぞれ、ハードウェアCPUユニット18、18A、18B、18C(概して、18)を含む、いくつかのCPUノード14、14A、14B、14C(概して、14)と、通信インターフェース22、22A、22B、22C(概して、22)とを含む。システム10はまた、それぞれ、Non-Transparent Bridge (NTB) PCI Express (PCIe)切替ファブリック30を通して、通信インターフェース22のそれぞれに接続される、少なくとも2つのIOドメイン26、26Aも含む。種々の実施形態では、切替ファブリックは、可変数のチャネルを伴って実装される。これらの実施形態では、種々のハードウェア構成が、システムの具体的実装または要件に応じて、それらのチャネルの帯域幅を修正するために使用されることができる。
【0028】
例えば、一実施形態では、CPUユニットが、Gen 3 PCI Expressプロトコルをサポートするスイッチ(34、34A、34B、34C)を使用して、IOドメインに接続することができる。他の実施形態では、スイッチ(34、34A、34B、34C)は、Gen 4またはGen 5等のPCI Expressプロトコルのより新しいバージョンをサポートしてもよい。各CPUハードウェアノード18は、オペレーティングシステム(OS)、すなわち、単一のシステムコンテキストOS、またはハイパーバイザと、複数の仮想マシンとを含む、仮想OSのいずれかを含む。一般に、本明細書に開示される種々のシステムおよび方法は、データセンタ、クラウドコンピューティング、および他のアプリケーションのためのファブリックとしてのPCIe(および他の類似アーキテクチャ)の使用を促進する、種々の特定用途向け集積回路、通信チャネル、バス等と併用されることができる。
【0029】
使用時に、描写されるN個のCPUノード14のシステム10の実施形態では、N-1個のCPUノード14は、起動しているオペレーティングシステムおよびアプリケーションプログラムを伴うアクティブノードであり、第NのCPUノード14は、スタンバイモードで保持され、典型的には、最小限のユニファイドエクステンシブルファームウェアインターフェース(UEFI)ファームウェアプログラムを実行する。再び、冗長システムが機能するために、少なくとも1つのノードが、アクティブノードが故障する場合の予備に保持されなければならないが、本システムは、複数のスタンバイノードを含んでもよい。一実施形態では、最小限のUEFIは、第NまたはスタンバイCPUノード14N内のハードウェアのステータスについての情報を提供する、診断プログラムを含む。スタンバイCPUノード14のステータスは、アクティブCPUノード14の全てに利用可能である。アクティブCPUノードが、故障し始め、その算出を故障していないCPUノード14に転送させるためにフェイルオーバする必要があるとき、故障しているCPUノード14は、スタンバイCPUノード14を留保し、下記に議論されるように、管理プロセッサ(MP)38および38Aと協力してフェイルオーバプロセスを開始するであろう。
【0030】
一実施形態(システム動作の例示としてここで使用されるもの)では、N個のCPUノード14が、少なくとも2つのIOドメイン26に接続されるが、IOドメインのうちの1つのみ(IO0)が、N個のCPUノード14と機能的に通信し、外部または非システムネットワークとの通信リンクを提供する。各IOボードは、いくつかの組み込みデバイス(例えば、ネットワークおよび記憶コントローラ)と、ユーザが選定するコントローラを用いてデータ投入され得る、PCI Expressスロットを含む。各IOドメイン26は、2つの切替ファブリック制御コンポーネント34、34A、34B、34C(概して、34)を含む。各切替ファブリックコンポーネント34は、内部スイッチ管理のためのAPI機能のセットを通して、ファームウェアによって、またはソフトウェアによって構成可能である。一実施形態では、本切替ファブリック制御コンポーネント34は、内蔵管理プロセッサ(MP)38、38A(概して、38)と併せて、管理エンジン(ME)と称されるソフトウェアのインスタンス化を通した切替ファブリック30内のIOドメイン26内のCPUノード14への接続を制御する、切替集積回路を伴うファブリックモードPCI Expressスイッチである。
【0031】
各MEは、MEの個別のMP38のボード上のファブリック制御コンポーネント34と直接通信する。ドメイン26のMP38は、知的プラットフォーム管理インターフェース(IPMI)シリアル通信リンク42を通して、他のIOドメイン26AのMP38Aと通信する。各MEインスタンスは、切替コンポーネントの階層内の物理関数および仮想関数のリストに関して、それが切替コンポーネントのファームウェアAPIによって接続される、ファブリック制御切替コンポーネント34にクエリを行う。「仮想関数」は、1つの物理デバイスが、個々のゲスト仮想マシン(VM)の機能および外界とのそれらの通信を制御する、ハイパーバイザまたはホストオペレーティングシステムに追加要求を行うオーバーヘッドを伴わずに、複数のVMの間で共有され得るように、PCI Express仕様の下で定義される関数である。加えて、MEはまた、IOデバイス44、46を視認、構成、および配分するためのAPI(ME-API)も提供し、そのIOドメイン26、26A内で機能する。これらのI/Oデバイスおよび関数は、次いで、切替コンポーネント34、34A、および再びファームウェアAPIによって各切替コンポーネントに割り当てられるCPU18群に配分される。これは、ひいては、それぞれ、ホストポートに割り当てられ得る、N個の合成サブ階層を作成する。すなわち、I/Oデバイス44、46は、切替ファブリックコンポーネント34、34に割り当てられ、コンポーネント34、34Aは、次いで、CPUノード14、14A等の具体的ポートに割り当てられる。
【0032】
ノードおよびデバイスの配分は、随意に、ホストコンピュータ50上で実行され、ネットワーク52によって各MEと通信するユーザGUIを含む、管理サービス(MS)アプリケーションによって、ユーザによってMEに提供される。MSは、関数呼び出しのセットをMEカーネルドライバに提供する。各ME上で実行されるプロビジョニングサービス(PS)は、ホストコンピュータ50からのME-API呼び出しを通して、ユーザによって確立されるCPUノード毎に、CPU、メモリ、VM、およびIOリソース要件のリストを受信する。
【0033】
IOドメイン26および26Aは、それによって、各CPUノード14が、ディスク46等のIOエンドポイントデバイスのサブセットへの排他的アクセスをIOドメイン26および26A内で有するように構成される。エンドポイントデバイスは、IOドメイン26内で物理または仮想関数を提供してもよい。他の実施形態では、第2のIOドメイン26Aもまた、アクティブであり、ある数のアクティブおよび/またはスタンバイCPUノードが、それに接続され、それを通して通信する。
【0034】
動作時に、1つを除く各CPUノード14は、アクティブであり、そのオペレーティングシステムおよび関連付けられるアプリケーションプログラムのコードを実行する。各アクティブCPUノード14のオペレーティングシステム(Windows(登録商標)(Microsoft Corporation, Redmond, WA)、ESXiTM(VMWare Inc., Palo Alto, CA)、Linux(登録商標)(Linus Torvalds, Dunthorpe, OR)等)は、他のアクティブCPUノードと同一である、または異なり得る。各アクティブCPUノード14が、1つのアクティブIOドメイン(IO0)26を通して通信する一方で、他のIOドメイン(IO1)26Aは、二次IOドメインとして利用可能である。ある場合には、二次IOドメインは、ディスクに関するRAID1構成で行われるように、データのミラーリングされたコピーを維持する。他の場合では、二次ドメインは、単一のネットワークポート(Linux(登録商標)では「ネットワークボンド」またはWindows(登録商標)では「チーム」と称される)として扱われている複数のネットワークポートのための負荷分散またはホットスタンバイサービスを提供してもよい。
【0035】
いったんI/OドメインおよびCPUノードの構成が確立され、CPUノード26、例えば、CPUノード142が故障し始める場合に、1つ以上のアクティブCPUノードがオペレーティングシステムのインスタンスを起動していると、そのノードのオペレーティングシステムおよびアプリケーションプログラムが、スタンバイCPUノード14Nに転送され、アクティブIOドメイン(IO0)は、切替ファブリック30を設定し、以前はスタンバイノードであったが、今はアクティブCPUノード14NであるCPUノード14Nからデータを受信する。故障していると診断された、以前はアクティブであったCPUノード142は、さらなる診断を受け、それが交換される必要があるかどうかを決定する。CPUノード142が、ここで、診断に合格する場合、エラーは、ソフトウェアによって引き起こされるか、または一過性であるかのいずれかと仮定され、CPUノード142は、新しいスタンバイノードになる。
【0036】
結果は、CPUノード14のうちのいずれも故障していないが、アクティブIOドメイン(例えば、26)が、故障している、または故障しようとしていると決定される場合に類似する。この場合、切替ファブリック30を通したアクティブCPUノード14についての接続情報は、IOドメイン(例えば、26)のMP38によってIOドメイン26AのMP38Aにパスされ、IOドメイン26Aは、新しいアクティブIOドメインになる。以前はアクティブであったIOドメイン26は、次いで、さらなる診断を受ける、または除去および交換されてもよい。IOドメイン26は、次いで、新しいスタンバイIOドメインになる。命令および他のデータは、知的プラットフォーム管理インターフェースシリアル通信リンク42を通して、MP38とMP38Aとの間でパスされる。両方のIOドメイン26、26Aが、アクティブである場合、IOドメインのうちの1つ(例えば、26)が故障していれば、他のIOドメイン26Aが、故障していないIOドメイン26Aを通して全ての通信を受容するように、ファブリックスイッチ30を再構成することに留意されたい。
【0037】
Windows(登録商標)オペレーティングシステムおよびゼロコピーダイレクトメモリアクセス(DMA)を使用する、一実施形態では、切替ファブリック30は、約56GB/秒において1つのCPUノード14から別のものにプロセッサ状態およびメモリコンテンツを転送することができる。CPUノード14およびIOドメイン26が別個のコンポーネントであるという事実は、単一障害点の数を削減し、対応する故障していないコンポーネント、例えば、CPUノード14ではなくてIOドメイン26に影響を及ぼすことなく、故障しているコンポーネントを交換する能力を追加するという追加利点を有する。冗長IOドメイン26およびCPUノード14は、CPUノード14および/またはIOドメイン26上で実行されるアプリケーションに深刻な影響を及ぼすことなく、故障しているコンポーネントが動的に交換されること、または追加されることさえ可能にする。
【0038】
図3も参照すると、本システムの動作が、ここでより詳細に考慮されるであろう。
【0039】
システム初期化
マルチノードプラットフォームの電源をオンにし、IOリソースをプロビジョニングするプロセスが、物理IOデバイスおよびそれらのPCIe機能の両方のために、およびPCI Express仕様の単一ルートI/O仮想化および共有(SR-IOV)部分の機能をサポートするデバイスのための仮想関数のために、実施されることができる。初期化プロセスは、各IOドメイン内のハードウェアおよびソフトウェアによって編成される。初期化プロセスの間に、IOドメインのみが、リセットから解放される一方で、全てのCPUノードは、リセット状態に留まる。
【0040】
各切替コンポーネント34は、そのリセットおよび初期化処理を完了し、そのデバイス階層を列挙する、その内部スイッチ管理ファームウェアを実行する。階層は、概して、全ての切替コンポーネントの一次バス参照番号(切替コンポーネントがアクセスされる方法)、二次バス(ブリッジの反対側に関するバス参照番号)、および従属バス番号(スイッチおよびブリッジの下方の全てのPCIeデバイスおよび機能とともに、ブリッジの下方のいずれかの場所に存在する、最大バス番号)の完全セットによって定義される。一実施形態では、ブリッジは、ファブリックコントローラに関するバスアドレスまたはバス番号を指す。本システムおよび方法は、他のブリッジ/スイッチの下方のブリッジ/スイッチを含み得る、種々の階層を伴って実装されることができる。同時に、各管理プロセッサ38は、そのリセットおよび初期化を完了し、続いて、MEインスタンスをロードおよび実行する。各MEインスタンスは、完全に列挙された階層に関して、それが切替コンポーネントファームウェアAPIによって接続される、切替コンポーネント34、34Aにクエリを行う。各MEインスタンスは、次いで、その接続された切替コンポーネント34、34Aからの階層を、そのIOドメイン内の物理関数および仮想関数の単一のリストにマージする。
【0041】
いったんIOドメイン関数リストが確立されると、MEインスタンスは、相互と通信し、ドメイン特有の階層リストをシステム全体に関する統一リストにマージし、本システムのための「一次IO」として1つのIOドメインおよび関連付けられるMEを確立する。
【0042】
前のステップは、ユーザが、その必要性に応じて本システムを構成することを可能にする。しかしながら、本能力を利用することを所望しないユーザに関して、複製リソースのデフォルト構成が、各アクティブ演算ノード14(アクティブCPU)に配分されるが、ユーザは、所望される場合、プロビジョニングサービスを介して配分を修正することができる。スタンバイCPUノード14C(スタンバイホスト)は、診断を起動し、そのステータスを他のノードに報告するように、IOデバイスの最小限のセットのみを与えられる。加えて、所望される場合、ユーザはまた、種々の演算ノードへのIOリソースの配分をオーバーライドすることもできる。新しい配分データが、次いで、次のコールドブートのために記憶される。
【0043】
いったんリソースのプロビジョニングがCPUノード14毎に確立されると、各MEインスタンスは、所望のリソースを関連付けられるCPUノードポート毎に各切替コンポーネント34に展開する。プロビジョニングデータは、プラットフォーム全体またはIOドメイン26、26Aがリセットされる、または電源をオフにされ、次いで、オンにされる次の時間に使用するために、ME38、38Aにアクセス可能なフラッシュまたは他の不揮発性リポジトリ内に記憶される。加えて、各MEインスタンスは、限定ではないが、「リンクダウン」エラー、訂正不可能かつ致命的なエラー、および他のソフトウェアトリガを含む、イベントを検出し、それに対処するように、下流ポート毎に、それが切替コンポーネントファームウェアAPIを介して接続される、切替コンポーネント34内の下流ポート格納(DPC)トリガを有効にする。いずれか1つのIOデバイスが、エラーに遭遇するとき、切替コンポーネントハードウェア34は、その下流リンクを隔離し、ファームウェアは、そのリンクの下のデバイスへの任意の保留トランザクションに関して応答/完了を合成する。ファームウェアはまた、イベントをMEにシグナリングし、これは、ひいては、影響を受けたホストにプラットフォームインタラプトを発生させ、それらにIOデバイスがアクセス不可能になったことを知らせる。
【0044】
いったんホスト特有のデバイス階層が確立されると、各演算ノード14は、リセットから解放されてもよい。マルチノードプラットフォーム内の所与のCPU18に関するブートプロセスは、標準BIOSおよび標準OSを伴う任意の標準サーバに関するであろうものと同一である。具体的には、各CPUノード上のBIOSは、パワーオンセルフテスト(POSTプロセス)を使用して、システム健全性を決定し、MEファームウェアによってそのCPUノードに暴露されたIO階層を列挙する。一実施形態では、MEファームウェアが、最初に起動し、アクティブホストであろうCPUノードの間で利用可能なIOリソースを配分する。いったん各ホストがその独自のBIOSを起動し始めると、各そのようなホストは、MEの存在を意識していない。故に、各ノードは、通常の方法でブートする。いったんOSがブートし、適用可能なソフトウェアコンポーネントがロードされると、そのようなソフトウェアは、再びMEファームウェアと相互作用することができる。この点にもかかわらず、BIOSおよびベースOSの基準系から、いずれもMEを意識することも、それと相互作用することもない。OSブートローダは、OS画像をメモリの中にロードし、OS実行を開始する。本システムは、次いで、通常、全てのIOドメイン26が存在し、OSに可視である状態でブートする。OSは、次いで、各IOデバイスのインスタンス毎に堅牢化ドライバをロードする。
【0045】
ネットワークコントローラ機能は、標準OS特徴を使用して、結束/チーム化される。同様に、外部記憶コントローラは、コントローラの両方のインスタンスが健全であり、外部記憶アレイへのコネクティビティを有するときに、二重である。内部記憶コントローラは、さらなる考慮を必要とする。旧来のIO以外の全てのIOドメインデバイスが、二重であるとき、次いで、IOドメイン全体が、二重である/プルすることが安全である。
【0046】
本システムが完全に動作していると、故障下のその動作が、次に考慮される。
【0047】
CPU/メモリフェイルオーバ
以下のステップが、CPUノード(CPUプロセッサ18および/またはメモリ)故障が起こっている、または予測されるときに、システム故障を回避するように、本開示の一実施形態によって実施される。その故障しているCPUノード上で実行されるアプリケーションは、次いで、スタンバイCPUノード14Cに転送されるであろう。
【0048】
概観では、事前決定された閾値を上回る多数の訂正可能なエラーまたは他の劣化した能力のいずれかを被っている、アクティブCPUノード14は、ノード14が本劣化状態に到達し、故障していないスタンバイCPUノード14Cへのフェイルオーバが開始するべきであることを、ノードのIOドメイン26と関連付けられるMP38に示す。アクティブCPUノード14、MP38、およびスタンバイCPUノード14Cは、次いで、通信プロトコルに従事し、フェイルオーバプロセスおよびアクティブCPUノード14からスタンバイCPUノード14Cへの状態の転送を管理する。フェイルオーバ動作のための標的場所である、スタンバイCPUノード14Cは、その診断UEFIループから除去され、故障しているアクティブCPUノード14からメモリコンテンツおよび状態情報を受信するプロセスを開始する準備ができていることをシグナリングする。アクティブであるが故障しているCPUノード14は、スタンバイCPUノードの始動ルーチンのステータスに関してスタンバイCPUノード14Cにポーリングする。スタンバイCPUノード14Cは、そのPCI-メモリのマップされたIO空間の中へのNTBウィンドウを有効にし、アクティブであるが故障しているCPUノード14からのコマンドに関してポーリングを開始する。
【0049】
図3を参照すると、高レベルにおいて、いったんスタンバイCPUノード14Cからのステータスが、アクティブであるが故障しているCPUノード14Aに報告されると、アクティブであるが故障しているCPUノード14は、データパス(ステップ300)が、アクティブであるが故障しているCPUノード14のメモリからスタンバイノード14CのメモリへのDMAメモリコピーを許可することを可能にする。本時点におけるスタンバイCPUノード14Cは、いずれのIOドメイン26にもアクセスすることもできず、アクティブであるが故障しているCPUノード14のメモリへの読取または書込アクセスを開始することもできない。
【0050】
アクティブであるが故障しているCPUノード14は、メモリへの変更を追跡することが可能である、全てのそのドライバにシグナリングし、DMAトラフィックがアクティブであるアドレス(DMA書込バッファおよびDMA制御構造の両方)を追跡し始める。
【0051】
全てのメモリは、DMAトラフィックが継続している間に、かつプロセッサが命令を実行し続けている間に、アクティブであるが故障しているCPUノード14からスタンバイCPUノード14Cのメモリにコピーされる(ステップ310)。故障しているCPUノード14内に物理に位置する各デバイスのレジスタ状態は、スタンバイノード14Cにコピーされる。DMAトラフィックが依然として起こっている間にメモリがコピーされる、本時間周期は、節電時間を構成する。
【0052】
アクティブであるが故障しているCPUノードは、DMAトラフィックによって潜在的に修正されるページを追跡するドライバに加えて、CPUアクセスによって修正されるページを追跡する(ステップ320)。節約時間の間に、修正されたページは、ドライバおよびホストソフトウェアが新たに修正されたページを追跡し続けている間に、再コピーされることができる。本プロセスは、2017年7月11日に出願された、米国特許出願第15/646,769号(その内容は、参照することによってそれらの全体として本明細書に組み込まれる)に完全に説明される。
【0053】
本プロセスの停電段階が動作する方法を理解するために、より詳細にフォールトトレラントシステムの動作を考慮することが必要である。ここで
図4を参照すると、フォールトトレラントコンピュータシステムは、少なくとも2つの同じコンピュータまたはノード414および414Aを含む。1つのコンピュータまたはノード414は、現在アクティブであり、または一次プロセッサであり、クライアントまたはユーザから要求を受信し、そこに出力データを提供する。他のコンピュータまたはノード414Aは、スタンバイまたは二次コンピュータまたはノードと称される。
【0054】
各コンピュータまたはノード(概して、414)は、CPU422、422-1、422A、422A-1と、メモリ426、426Aと、スイッチ430、430Aと、入力/出力(I/O)モジュール434、434Aとを含む。一実施形態では、2つの物理プロセッササブシステム414および414Aが、同一の切替ファブリック438上に常駐し、切替ファブリック438を通して相互と通信する。切替ファブリックコントローラ430、430Aは、フォールトトレラントシステムが両方の(現在アクティブおよびスタンバイである)サブシステム414、414A内で同じメモリコンテンツを作成し得るように、現在アクティブなメモリ426からスタンバイまたはミラーメモリ426Aへのデータの転送(矢印440、445、および450)を協調させる。I/Oモジュール434、434Aは、2つのサブシステム414および414Aが、ネットワークインターフェース(NI)44(
図2)を通してディスク記憶装置46(
図2)およびネットワーク等の外界と通信することを可能にする。
【0055】
本議論は、2つのプロセッササブシステムを伴う実施形態の観点からであるが、2つを上回るプロセッササブシステムが、フォールトトレラントコンピュータシステムで使用されることができる。複数のプロセッササブシステム、例えば、3プロセッサ(例えば、A、B、C)フォールトトレラントコンピュータシステムの場合、3つのプロセッササブシステムのミラーリングは、2つのステップで実施される。最初に、プロセッササブシステムAおよびBが、ミラーリングされ、次いで、結果として生じるミラーリングされたA、Bプロセッササブシステムが、Cプロセッササブシステムにミラーリングされる等である。
【0056】
節電および後続の停電段階の間に、修正されたメモリは、追跡され、続いて、DMAトラフィックが停止されるときにコピーされなければならない。問題は、サーバのネイティブオペレーティングシステムが、特に仮想マシン(VM)システムが使用されるときに、アクティブメモリ426からミラーメモリ426Aにダーティページをコピーするための好適なインターフェースを提供しない場合があることである。例えば、Intel HaswellおよびBroadwellプロセッサ(Intel Corporation(SantaClara, CA USA))等のいくつかの物理プロセッサは、複数の仮想オペレーティングシステムがシステム実行の多くの側面の完全制御と同時に同一の物理プロセッサを共有することを可能にする、VMXルート動作を含む、ハードウェア仮想化能力のセットを提供する。仮想マシンはそれぞれ、ホストハイパーバイザの制御下で、それらの独自のオペレーティングシステムを有する。そのようなシステムは、それらの仮想マシンによって使用されるメモリのためにダーティページを検出およびコピーするためのインターフェースを提供しない場合がある。本開示が本限界に対処する方法を理解するために、
図5(A)-5(C)は、層状ソフトウェア図として、種々の動作を受けるときのフォールトトレラントコンピュータシステムの状態を描写する。
【0057】
図5Aを参照すると、通常のミラーリングされていない動作では、フォールトトレラントコンピュータシステム内の層は、DMA対応スイッチ430を含む、ハードウェア層500と、システムユニバーサルエクステンシブルファームウェアインターフェース(UEFI)BIOS508を含む、サーバファームウェア層504と、ゼロに初期化されるゼロ層の留保されたメモリ領域512とを含む。ゼロ層の留保されたメモリ512は、ブート時にBIOS508によって留保される。フォールトトレラントコンピュータシステムのメモリの殆どは、オペレーティングシステムおよびソフトウェアによる使用のために利用可能であるが、留保されたメモリ512は、そうではない。留保されたメモリ領域512のサイズは、FTVMMと、4KB(4キロバイト)ページ粒度を伴って、かつ全てのシステムメモリの1対1のマッピングを伴って構成されるSLATテーブルとのための十分な空間を提供する。FTVMMモジュールは、全てのプロセッサに、FTVMMモジュールのゲストとして、それらのプログラムを実行させる。メモリを変換するために使用される、メモリの留保された部分内の第2レベルアドレス変換テーブル(SLAT)(または種々の製造業者によって、すなわち、Intelによって拡張ページテーブル[EPT]と、AMDによって高速仮想化インデキシング[RVI]とも称される)は、物理メモリを参照する。一実施形態では、4レベルSLATテーブルが、オペレーティングシステムカーネルおよび他のソフトウェアによって修正される全てのメモリページを識別するであろう、ダーティビットおよびアクセスされたビット設定を伴うメモリマップを提供する。4レベルSLATは、4キロバイト粒度を伴うメモリの各ワードをアドレス指定するために十分な粒度を提供するために十分であるが、他のページサイズおよびマッピングも可能である。
【0058】
次の層(L1)520は、FTカーネルモードドライバ522を含む、フォールトトレラントコンピュータシステムのためのオペレーティングシステムおよびドライバと、一般的に使用されているハイパーバイザホスト524とを含む。
【0059】
最後の層(L2)530は、プロセス、アプリケーション、およびその他534等の通常動作時に仮想マシン制御構造(VMCS)550によって制御されない、仮想化されていないサーバソフトウェアコンポーネントを含み、これは、任意の仮想マシンゲスト(VM)538、538Aを含む。仮想化されていないソフトウェアコンポーネント534は、FT管理層536を含む。各仮想マシンゲスト(VM)は、VMゲストオペレーティングシステム(VM OS)542、542Aと、VM(SLAT L2)546、546Aと関連付けられるSLATテーブルとを含む。また、各VM538、538Aの中には、そのVMに配分される仮想プロセッサ0-N毎に1つずつ、VMと関連付けられる1つ以上の仮想マシン制御構造(VMCS-N)、概して、550、550Aも含まれる。示される略図では、仮想プロセッサVMCSは、VMCS0~VMCS-Nと標識される。各VMCSは、ゲスト物理アドレスをシステム物理アドレスに変換するマッピングを提供し得る、SLATテーブルポインタ(Intel拡張ページテーブルポインタEPTP等)を有効にするための制御フィールドを含有する。
【0060】
ここで
図5Bを参照すると、ミラーリングの開始時に、フォールトトレラントコンピュータシステムは、ミラーリングされていないモードで動作している。FT管理層536は、FTカーネルモードドライバ(FTドライバ)522に、ミラーリングされた実行を入力するコマンドを処理し始めさせる。FTカーネルモードドライバ522は、FT仮想マシンモニタ(FTVMM)コード580、FTVMMデータ584、SLAT L0 588、およびVMCS-L0アレイ592のプログラムおよびデータコードを留保されたメモリ領域にロードする、または書き込む。
【0061】
FTドライバは、プロセッサ毎にVMCS L0を初期化し、FTVMMをインストールさせ、そのプログラムコードがフォールトトレラントコンピュータシステム内で起こる全VMEXITイベント(すなわち、ゲストL2からゲストを制御するハイパーバイザの中へ実行を転送するプロセッサ機構)によって直接実行される、ハイパーバイザとして実行させる。FTVMMは、全VMEXITを処理し、OS1、OS2、OSの一般的に使用されているハイパーバイザL1、およびゲストL2が、FTVMMがインストールされずアクティブではない場合のように機能的に正常な様式でそれらの処理を継続するであろうように、VMEXITを引き起こしたイベントの通常の取扱を模倣する。
【0062】
本時点で、メモリコンテンツの転送は、前述で議論された2つの条件、すなわち、「節電」および「停電」下で行われる。節電および停電におけるミラーリングは、初期フォールトトレラントコンピュータシステムブート後の数分以内に、いったん定常状態動作に到達すると、またはプロセッササブシステムが起動しているフォールトトレラントコンピュータシステム上のハードウェアエラー後に稼働するように戻される度に、行われてもよい。上記に議論されるように、節電段階の間に、通常システム作業負荷が、処理され、プロセッサが、算出を行い、アクティブメモリにアクセスしてそれを修正し続ける。節電の間に(メモリを第2のサブシステムにコピーしている間に)メモリ書込によって引き起こされるダーティページが、追跡され、次の節電または停電段階でコピーされる。FTVMMは、ダーティページビットマップを提供し、各段階で修正されたメモリページを識別する。節電段階0では、新たにダーティにされたページを追跡しながら、全てのメモリが、コピーされる。節電段階1および以降では、前の段階の間のダーティにされたページのみが、コピーされる。停電では、1つを除く全てのプロセッサが、一時停止され、インタラプトが、無効にされる。いかなるシステム作業負荷も、停電の間に処理されない。前の(節電)段階からのダーティにされたページは、コピーされ、最終的な修正されたページ範囲リストが、作成される。残りのダーティページおよびアクティブプロセッサ状態は、次いで、スタンバイコンピュータメモリにコピーされる。いったんこれが完了すると、FTドライバが、システム管理インタラプトを発生させ、全てのプロセッサが、ファームウェアUEFI BIOSおよびファームウェアSMMモジュール内で実行され、これらは、SMIを発生させ、スタンバイCPU14Cへのスイッチ34、34A、34B、および34C上のホストポートを変更するようにMP38および38Aに要求し、その後、動作が、現在は新しいオンラインCPUであり、もはやスタンバイCPUではなくなる、CPU14C上で開始する。ファームウェアSMMは、FTドライバに対して再開を実施し、FTドライバは、停電段階を完了し、FTVMMをアンロードし、一時停止されたプロセッサを解放し、インタラプトを有効にし、CPUフェイルオーバに関する要求のその取扱を完了する。
【0063】
ここで
図5Cを参照すると、ミラーリングプロセスが完了すると、留保されたメモリ512内のFTVMMコード580は、アンロードされ、もはや実行されなくなる。FTVMMデータ584、SLAT588、およびVMCS192は、使用されず、留保されたメモリは、アイドルであり、次のエラー条件を待機している。
【0064】
より詳細には、節電の第1の段階の間に、FTカーネルモードドライバは、FTVMMとのVMCALL機能インターフェースを使用し、メモリページ追跡有効化というコマンドを発行して、システム内の修正されたメモリの全てのページを追跡し始めるようにFTVMMに要求する。FTVMMへのFTドライバの機能インターフェース内のVMCALLプロセッサ命令は、各論理プロセッサをFTVMMに参入させ、FTドライバによって発行される要求を処理させる。FTVMMは、新たに修正された全てのシステムメモリページ(ダーティページ)の記録を取得する様式で、FTVMMハイパーバイザコンテキストにおいてそのプログラムコードを使用し始めるための関数を全てのプロセッサ上で実施する。FTVMMは、SLAT L0および全てのSLAT L2テーブルを検索し、これらのテーブル内のダーティビットをゼロに設定し、次いで、各プロセッサ上のキャッシュされたSLATテーブルマッピングを無効にする。全てのプロセッサが、FTVMMにおいて本関数を完了したとき、FTVMMは、VMRESUME命令を実施することによって、制御をFTドライバに返す。FTドライバは、次いで、システムメモリの全てを第2のサブシステムにコピーする。FTドライバは、DMAコントローラまたはスイッチ430を使用し、全てのシステムメモリを二次またはスタンバイコンピュータにコピーする高速メモリ転送動作を実施してもよい。フォールトトレラントコンピュータシステムは、本処理の間にその構成された作業負荷を実施し続ける。
【0065】
節電メモリコピー段階1
節電メモリコピー段階1の一部として、FTドライバは、ダーティページビットマップを取得し、メモリの新たにダーティにされたページを第2のサブシステムにコピーする。FTカーネルモードドライバは、機能インターフェースを使用し、各プロセッサ上でメモリページ追跡有効化と称されるコマンドを発行する。FTVMMへのFTドライバの機能インターフェース内のVMCALLプロセッサ命令は、各論理プロセッサをFTVMMに参入させ、FTドライバによって発行される要求を処理させる。FTVMMは、新たに修正された全てのシステムメモリページ(ダーティページ)の記録を取得する様式で、FTVMMハイパーバイザコンテキストにおいてそのプログラムコードを使用し始めるための関数を全てのプロセッサ上で実施する。次いで、各プロセッサ上のFTVMMコードは、SLAT L0テーブル内および各ゲストのSLAT L2テーブル内の8バイト毎のページテーブルエントリを検索し、各エントリ内のダーティビットをそのビットのTRUE値と比較する。比較結果がTRUEであるとき、FTVMMは、物理メモリの中のダーティまたは修正されたページのアドレスを表すビットフィールドアドレスにおいて、ダーティページビットマップ内のビットフィールドを設定し、次いで、ページテーブルエントリ内のダーティビットを消去する。SLAT L0内で構成されるメモリマッピングは、4キロバイトのページサイズを有するため、ダーティページビットマップ内の1ビットが、見出されるダーティにされたページ毎に設定される。
【0066】
ハイパーバイザL1がSLAT L2テーブル内に構成したメモリマッピングは、4キロバイトより大きくあり得、FTVMMは、これが起こるときに、2メガバイトページサイズの場合に関して512の連続ビットフィールドエントリ等のダーティページビットマップ内の連続的な一連のビットフィールドを設定する。本プロセスが、SLAT L0およびSLAT L2テーブルに関して完了したとき、各プロセッサは、プロセッサ命令を実施し、SLAT L0およびSLAT L2テーブルに関してプロセッサのキャッシュされた変換を無効にして(Intelプロセッサ命令INVEPT等)、FTVMMが、システム作業負荷によって引き起こされ得る、ダーティにされたページの新しいインスタンスを検出し続けることを可能にする。
【0067】
全てのプロセッサが、FTVMMにおいて本動作を完了したとき、FTVMMは、VMRESUME命令を実施することによって、制御をFTドライバに返す。FTドライバは、次いで、ダーティページビットマップ要求と称される、別のMCALL機能インターフェースコマンドを発行する。FTVMMは、次いで、最近修正されたページの記録を含有するダーティページビットマップを提供し、FTドライバのデータエリア内に位置するメモリバッファ内に本データを記憶する。FTドライバは、次いで、ダーティページビットマップ内で識別される物理メモリページのセットを、二次またはスタンバイコンピュータ内の対応する物理メモリアドレスにコピーする。FTドライバは、DMAコントローラまたはスイッチ430を使用し、ダーティにされたページのセットを第2のサブシステムにコピーする高速メモリ転送動作を実施してもよい。
【0068】
節電メモリコピー段階2-N/反復
メモリコピー段階1というプロシージャは、最終節電メモリコピー段階Nの間にシステム作業負荷によって発生され得る、ダーティにされたページのより小さい結果として生じるセットを取得するために、1以上の回数で繰り返されてもよい。例えば、一実施形態では、FTドライバは、同一のシーケンスを繰り返し、別のダーティページビットマップを取得し、新たにダーティにされたページを第2のサブシステムに1回またはそれを上回ってコピーしてもよい。
【0069】
節電コピー段階が完了した後、アクティブであるが故障しているCPU14は、全てのDMAトラフィックを一時停止するように、DMAメモリアクセスを追跡しているそのドライバにシグナリングする(ステップ330)。これは、停電段階の開始である。CPUスレッドは、次いで、メモリページのさらなる修正を防止するように、全て一時停止される。本時点で、CPUアクセスまたはDMAアクセスのいずれかによって修正されるページの最終リストは、スタンバイCPU14Cにコピーされる。
【0070】
より詳細には、停電の間に、FTドライバは、並行して、アクティブであるが故障しているCPU14上の全てのプロセッサ上でドライバコードを実行し、ダーティにされたページの最終セットをスタンバイCPU14Cにコピーする。FTドライバは、フォールトトレラントコンピュータシステム内の他のプログラムがより多くのダーティページビットを発生させることを防止するように、CPU14上の全てのプロセッサに、各プロセッサ上のシステムインタラプト処理を無効にさせる。FTドライバは、VMCALL機能インターフェースを使用し、FTVMMに、最近ダーティにされたメモリページのセットを識別させ、また、FTVMMに、VMCS-NおよびSLATL2等のある揮発性または頻繁に修正されるメモリページを識別させ、ダーティにされたページのセット内にそれらのページを含ませる、停電ページ追跡有効化というコマンドを発行する。FTVMMは、FTVMM内のプロセッサ#0を除く、全てのプロセッサを一時的に一時停止してもよい。FTドライバは、次いで、別のVMCALL機能インターフェースコマンド、すなわち、ダーティページビットマップ要求を発行し、ダーティページのビットマップを取得する。FTVMMは、次いで、最近修正されたページの記録を含有するダーティページビットマップを提供し、FTドライバのデータエリア内に位置するメモリバッファ内に本データを記憶する。
【0071】
一実施形態では、FTドライバは、次いで、ダーティページビットマップ内で識別される物理メモリページのセットを、第2のサブシステム内の対応する物理メモリアドレスにコピーする。FTドライバは、次いで、留保されたメモリ領域のためのメモリ範囲を含む、ダーティである、または修正されると仮定されるメモリ範囲のリストを作成し、最終停電メモリ範囲リストと称される、データ構造内に本情報を記憶する。本プロシージャは、システム作業負荷が実行されず、作業負荷が、ダーティにされたページの最終セットがスタンバイCPU14Cにコピーされている間に短いサーバ処理停止を受けるため、停電メモリコピーと称される。
【0072】
いったんアクティブであるが故障しているCPUノード14の全てのメモリがコピーされると、アクティブであるが故障しているCPUノード14は、そのプロセッサの内部状態を(そのレジスタ、ローカル先進プログラマブルインタラプトコントローラ、高精度イベントタイマ等を含む)メモリ場所に保存し(ステップ340)、そのデータをスタンバイCPUノードにコピーし、それは、続いて、スタンバイCPUノード14Cの対応するレジスタの中に復元される。サーバ管理インタラプト(SMI)帰還スタックが、アクティブであるが故障しているCPUノードがオフにされた正確な点から処理を回避するために、スタンバイCPUノード14C上に復元される必要がある、レジスタの最終セット(プログラムカウンタ等)に関してスタンバイCPUノード14上に作成される。
【0073】
アクティブであるが故障しているCPUノード14は、各CPUノード14、14Cが、フェイルオーバ動作後にその独自の意図された新しい状態を有するように、その独自のNTBウィンドウ内のフラグを、PCI-メモリのマップされたIO(PCI-MMIO)空間の中に、かつスタンバイCPUノード14CのNTBウィンドウ内に設定する。本ステップの完了に先立った任意の時間に、フェイルオーバは、中止されることができ、動作は、単に、最初のアクティブであるが依然として故障しているCPUノード上で継続する。
【0074】
フェイルオーバを完了するために、いったん本時点までの全てのステップが正常に完了すると、アクティブであるが故障しているCPUは、コマンドを一次管理プロセッサ(二次管理プロセッサと協調し、本ステップにおける任意のエラー事例に対処するであろう)に送信し、フェイルオーバ動作に関与している2つのCPUノード14、14Aに関するホストポートの間でリソースマッピングの全てを交換する(ステップ350)。各管理プロセッサは、次いで、そのローカルスイッチへの一連のファームウェアAPI呼び出しを行い、リソースマッピング変更を遂行するであろう。一次管理プロセッサは、次いで、スイッチ再構成が完了するときに、2つのCPUノードにシグナリングする。
【0075】
両方のCPUノード14、14Cは、それらのメールボックス機構から、(最初のアクティブおよびスタンバイ指定から交換される)それらの新しい個別の状態を示すトークンを読み出す。新しいアクティブCPUノード上のソフトウェアが、次いで、要求に応じて、任意の最終クリーンアップを実施する。例えば、切替ファブリックを訓練して、新しいアクティブCPUノードからトランザクションをマップし(ステップ360)、システム管理からの再開(RSM)命令を実施し、制御をオペレーティングシステムに返し、インタラプトされた命令を再開するために、PCI列挙再開を再生する必要があり得る。スタンバイCPUノードは、以前に休止されたデバイスを再アクティブ化し、トランザクションが、ファブリックを通して、スタンバイCPUノードへおよびそれから流動することを可能にすることができる。
【0076】
上記で記載されるCPU/メモリフェイルオーバ能力に加えて、本開示はまた、アクティブIOドメイン、例えば、IO1を、他方またはスタンバイIOドメイン、例えば、IO2に転送することも可能である。
【0077】
IOドメインフェイルオーバ
一実施形態では、以下のステップが、IOドメインフェイルオーバを提供するように実施される。正常な動作では、システム10が、ブートするとき、全てのIOドメイン26が、存在し、オペレーティングシステムに可視である。ドライバが、次いで、各IOドメインのインスタンス毎にロードされる。ネットワークコントローラ機能が、標準オペレーティングシステムコマンドを使用して、2つのアクティブIOドメイン、すなわち、一次26と二次26Aとの間で結束またはチーム化される。任意の外部記憶コントローラは、両方のインスタンスが外部記憶アレイへのコネクティビティを有するときに、二重状態である。旧来のIO以外の全てのPCIドメインデバイスが、二重であるとき、次いで、IOベイ全体が、二重である/プルすることが安全であり、プラットフォームが、システムの正常な動作、したがって、その可用性に影響を及ぼすことなく、障害またはサービスアクションのいずれかに起因するIOベイの損失に耐え得ることを意味する。
【0078】
簡潔には、概観では、ディスクコントローラ46等のデバイスの故障は、影響を受けた切替コンポーネント34内で下流ポート格納(DPC)イベントをトリガするであろう。切替コンポーネントハードウェア34は、切替コンポーネント34とデバイスとの間のリンクを隔離し、切替コンポーネントファームウェア34は、デバイスへの任意の保留トランザクションを完了する。ファームウェアはまた、ひいては、影響を受けたCPUノード14にインタラプトを発生させ、それらにIOデバイスが故障したことを知らせる、ME38にイベントをシグナリングする。故障は、影響を受けたデバイスの直上の切替コンポーネントによって検出された場合に、単一のエンドポイントデバイスをDPC論理によって隔離させ得る、または故障は、デバイス階層内のより高位のスイッチによって検出された場合に、IOドメイン内のデバイスのより大きいセットの隔離をもたらし得る。
【0079】
より詳細には、MP38、38Aは、CPUノードをデバイスに接続する下流ポート毎に、ファブリックモード切替コンポーネント(概して、34)内でDPC(下流ポート格納)フェイルオーバトリガを有効にする。潜在的フェイルオーバトリガは、例えば、シャットダウンし、IOドメイン26を除去するための意図的なソフトウェアトリガに加えて、リンクダウンエラーと、訂正不可能かつ致命的なエラーとを含む。フェイルオーバトリガが、有効にされるとき、任意のIOドメイン26がエラーに遭遇する場合、そのIOドメイン26のためのファブリック切替コンポーネント34は、デバイスとのその通信リンクを隔離し、そのリンクを利用するデバイスへの任意の保留トランザクションを完了する。MP38、38Aは、次いで、デバイスを利用するCPUノード14にインタラプトを発生させ、それらにデバイスまたはIOドメイン26が故障したことを知らせる。
【0080】
CPUノードOSは、プラットフォームインタラプトを受信し、故障したIOデバイス、またはIOドメインボード26全体が故障したかどうかに関して、MP38、38Aを調査する。CPUノードのOSは、次いで、影響を受けたデバイスのためのドライバの除去を開始するであろう。各影響を受けたIOデバイスに対する残存する二重パートナは、「シンプレックス/一次」としてマークされるであろう。影響を受けていないボード上のMP38、38A(
図2)は、一次としてマークされるであろう。
【0081】
MP38、38Aは、次いで、故障しているIOドメイン26から、および切替コンポーネント34から、エラーレジスタを読み取る。MP38、38Aは、次に、そのドメインへの独立リセットをアサートすることによって、デバイスを稼働するように戻そうとし、その後に、ある診断法が続く。診断法が成功した場合、MP38、38Aは、作成され、IOドメイン26、26A内のフラッシュメモリ内に保存された任意の仮想関数を含む、関数をデバイス内で再始動するであろう。
【0082】
MP38、38Aは、新しいホットプラグ可能なIOドメインが各CPUノードに利用可能であることを告知する、メッセージを送信する。各CPUノードは、次いで、デバイスのPCIe階層をスキャンし、新たに到着したデバイス/機能を発見し、適切なドライバをロードする。
【0083】
全てのIOデバイスが、もう一度、二重状態でアクティブであるとき、次いで、IOドメイン全体は、再び、二重である/プルすることが安全である。
【0084】
以下の議論から明白であるように別様に具体的に記述されない限り、説明の全体を通して、「処理する」、または「算出する」、または「計算する」、または「遅延させる」、または「比較する」、「発生させる」、または「決定する」、または「転送する」、または「延期する」、「完遂する」、または「中断する」、または「取り扱う」、または「受信する」、または「バッファする」、または「配分する」、または「表示する」、または「フラグを付ける」、またはブール論理または他の設定された関連動作または同等物等の用語を利用する議論は、コンピュータシステムまたは電子デバイスのレジスタおよびメモリ内の物理的(電子)数量として表されるデータを操作し、電子メモリまたはレジスタ、または他のそのような情報記憶、伝送、または表示デバイス内の物理的数量として同様に表される、他のデータに変換する、コンピュータシステムまたは電子デバイスのアクションおよびプロセスを指すことを理解されたい。
【0085】
本明細書に提示されるアルゴリズムは、本質的には、いかなる特定のコンピュータまたは他の装置にも関連しない。種々の汎用システムが、本明細書の教示によるプログラムと併用されてもよい、または要求される方法ステップを実施するためにより特殊な装置を構築することが便宜的であることが証明され得る。種々のこれらのシステムのための要求される構造が、上記の説明から明白である。加えて、本開示は、任意の特定のプログラミング言語を参照して説明されず、種々の実施形態は、したがって、種々のプログラミング言語を使用して実装されてもよい。
【0086】
いくつかの実装が説明されている。それでもなお、本開示の精神および範囲から逸脱することなく、種々の修正が行われ得ることを理解されたい。例えば、ステップが並べ替えられる、追加される、または除去される、上記に示されるフローの種々の形態が、使用されてもよい。故に、他の実装も、以下の請求項の範囲内である。
【0087】
本明細書に提示される実施例は、本開示の潜在的かつ具体的実装を図示することを意図している。実施例は、主に、当業者のための本開示の例証の目的のために意図されている。実施例のいかなる1つまたは複数の特定の側面も、必ずしも本発明の範囲を限定することを意図しているわけではない。
【0088】
本開示の図および説明は、明確にする目的のために、他の要素を排除する一方で、本開示の明確な理解のために関連性がある要素を図示するように、単純化されている。しかしながら、当業者は、これらの種類の集中的な議論が、本開示のさらなる理解を促進せず、したがって、そのような要素のより詳細な説明が、本明細書で提供されないことを認識し得る。
【0089】
本実施形態と関連付けられるプロセスは、コンピュータ等のプログラマブル機器によって実行されてもよい。プログラマブル機器にプロセスを実行させるために採用され得る、ソフトウェアまたは命令の他のセットは、例えば、コンピュータシステム(不揮発性)メモリ、光ディスク、磁気テープ、または磁気ディスク等の任意の記憶デバイス内に記憶されてもよい。さらに、プロセスのうちのいくつかは、コンピュータシステムが製造されるときに、またはコンピュータ可読メモリ媒体を介して、プログラムされてもよい。
【0090】
また、本明細書に説明される、あるプロセス側面は、プロセスステップを実施するようにコンピュータまたはコンピュータシステムに指示する、1つまたは複数のコンピュータ可読メモリ媒体上に記憶された命令を使用して、実施され得ることも理解されたい。コンピュータ可読媒体は、例えば、ディスケット、読取専用および読取/書込種類の両方のコンパクトディスク、光ディスクドライブ、およびハードディスクドライブ等のメモリデバイスを含んでもよい。コンピュータ可読媒体はまた、物理的、仮想、恒久的、一時的、半恒久的、および/または半一時的であり得る、メモリ記憶装置を含んでもよい。
【0091】
本明細書に開示されるコンピュータシステムおよびコンピュータベースのデバイスは、情報を取得、処理、および通信する際に使用される、あるソフトウェアアプリケーションを記憶するためのメモリを含んでもよい。そのようなメモリは、開示される実施形態の動作に関して内部または外部にあり得ることを理解されたい。メモリはまた、ハードディスク、光ディスク、フロッピー(登録商標)ディスク、ROM(読取専用メモリ)、RAM(ランダムアクセスメモリ)、PROM(プログラマブルROM)、EEPROM(電気的消去可能PROM)、および/または他のコンピュータ可読メモリ媒体を含む、ソフトウェアを記憶するための任意の手段を含んでもよい。種々の実施形態では、「ホスト」、「エンジン」、「ローダ」、「フィルタ」、「プラットフォーム」、または「コンポーネント」は、種々のコンピュータまたはコンピュータシステムを含んでもよい、またはソフトウェア、ファームウェア、および/またはハードウェアの合理的な組み合わせを含んでもよい。
【0092】
本開示の種々の実施形態では、1つまたは複数の所与の機能を実施するように、単一のコンポーネントが、複数のコンポーネントによって置換されてもよく、複数のコンポーネントが、単一のコンポーネントによって置換されてもよい。そのような代用が本開示の実施形態を実践するように機能しないであろう場合を除いて、そのような代用は、本開示の範囲内である。サーバのうちのいずれかは、例えば、協調的機能のために位置し、構成される、「サーバファーム」またはネットワーク化されたサーバの他のグループ(例えば、サーバブレードのグループ)によって置換されてもよい。サーバファームは、ファームの個々のコンポーネントの間で作業負荷を分散させる役割を果たし得、複数のサーバの集合的かつ協調的能力を利用することによって、算出プロセスを促進させ得ることを理解されたい。そのようなサーバファームは、例えば、異なるマシンからの処理能力の需要を追跡すること、ネットワーク需要に基づいてタスクを優先し、スケジュールすること、および/またはコンポーネント故障または動作可能性の低減の場合にバックアップ随伴性を提供すること等のタスクを遂行する、負荷分散ソフトウェアを採用してもよい。
【0093】
一般に、本明細書に説明される種々の実施形態、またはそれらのコンポーネントまたは部品は、ソフトウェア、ファームウェア、および/またはハードウェア、またはそれらのモジュールの多くの異なる実施形態で実装され得ることが、当業者に明白であり得る。本実施形態のうちのいくつかを実装するために使用される、ソフトウェアコードまたは特殊制御ハードウェアは、本開示の限定ではない。コンピュータソフトウェアおよび他のコンピュータ実装命令のためのプログラミング言語は、実行前にコンパイラまたはアセンブラによって機械言語に変換されてもよい、および/またはインタープリタによって実行時に直接変換されてもよい。
【0094】
アセンブリ言語の実施例は、ARM、MIPS、およびx86を含み、高レベル言語の実施例は、Ada、BASIC、C、C++、C#、COBOL、Fortran、Java(登録商標)、Lisp、Pascal、Object Pascalを含み、スクリプト言語の実施例は、Bourneスクリプト、JavaScript(登録商標)、Python、Ruby、PHP、およびPerlを含む。種々の実施形態は、例えば、Lotus Notes環境で採用されてもよい。そのようなソフトウェアは、例えば、磁気または光学記憶媒体等の任意のタイプの1つまたは複数の好適なコンピュータ可読媒体上に記憶されてもよい。したがって、実施形態の動作および挙動は、実際のソフトウェアコードまたは特殊ハードウェアコンポーネントを具体的に参照することなく説明される。当業者は、合理的な努力のみを用いて、必要以上の実験を伴わずに、本明細書の説明に基づいて本開示の実施形態を実装するように、ソフトウェアおよび制御ハードウェアを設計することが可能であろうことが、明確に理解されるため、そのような具体的参照の欠如は、実現可能である。
【0095】
本明細書に説明されるシステムおよび方法の種々の実施形態は、1つ以上の電子コンピュータネットワークを採用し、異なるコンポーネントの間の通信を助長する、データを転送する、またはリソースおよび情報を共有してもよい。そのようなコンピュータネットワークは、ネットワーク内のデバイスを相互接続するために使用される、ハードウェアおよびソフトウェア技術に従って、分類されることができる。
【0096】
コンピュータネットワークは、アクティブネットワーキング、クライアント・サーバ、またはピアツーピア機能アーキテクチャ等のネットワークの要素またはコンポーネントの間の機能的関係に基づいて、特徴付けられてもよい。コンピュータネットワークは、例えば、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スターバスネットワーク、または階層トポロジネットワーク等のネットワークトポロジに従って、分類されてもよい。コンピュータネットワークはまた、デジタルおよびアナログネットワーク等のデータ通信に採用される方法に基づいて、分類されてもよい。
【0097】
本明細書に説明される方法、システム、およびツールの実施形態は、共通ルーティング技術を通して、2つ以上の明確に異なる電子コンピュータネットワークまたはネットワークセグメントを接続するためのインターネットワーキングを採用してもよい。採用されるインターネットワークのタイプは、インターネットワーク内の管理および/または関与に依存し得る。インターネットワークの非限定的実施例は、イントラネット、エクストラネット、およびインターネットを含む。イントラネットおよびエクストラネットは、インターネットへの接続を有する場合とそうではない場合がある。インターネットに接続された場合、イントラネットまたはエクストラネットは、適切な認証技術または他のセキュリティ対策を用いて保護されてもよい。本明細書で適用されるように、イントラネットは、管理エンティティによる共通制御下で、インターネットプロトコル、ウェブブラウザ、および/またはファイル転送アプリケーションを採用する、ネットワークのグループであり得る。そのような管理エンティティは、イントラネットへのアクセスを、例えば、認可ユーザのみ、または団体または商業エンティティの別の内部ネットワークに制限し得る。
【0098】
別様に示されない限り、本明細書および請求項で使用される、長さ、幅、深度、または他の寸法等を表す全ての数字は、示されるような正確な値および用語「約」によって修飾されるものの両方を示すものとして、全ての事例で理解されるものである。本明細書で使用されるように、用語「約」は、公称値からの±10%変動を指す。故に、そうではないと示されない限り、本明細書および添付の請求項に記載される数値パラメータは、取得されることが求められる所望の性質に応じて変動し得る、近似値である。少なくとも、原則の適用を請求項の範囲の均等物に限定するための試行ではないが、各数値パラメータは、少なくとも、報告される有効桁数を踏まえて、通常の丸め技法を適用することによって、解釈されるべきである。任意の具体的値は、20%変動し得る。
【0099】
本発明は、その精神または本質的特性から逸脱することなく、他の具体的形態で具現化されてもよい。前述の実施形態は、したがって、あらゆる点に関して本明細書に説明される開示では限定的ではなく例証的と見なされるものである。本発明の範囲は、したがって、前述の説明によってではなく添付の請求項によって示され、請求項の均等性の意味および範囲に入る全ての変更は、その中に包含されることを意図している。
【0100】
種々の修正および変更が、説明される技術の範囲から逸脱することなく行われ得ることが、当業者によって理解されるであろう。そのような修正および変更は、説明される実施形態の範囲内に該当することを意図している。また、一実施形態に含まれる特徴は、他の実施形態と交換可能であり、描写される実施形態からの1つ以上の特徴は、任意の組み合わせで他の描写される実施形態とともに含まれ得ることが、当業者によって理解されるであろう。例えば、本明細書に説明される、および/または図に描写される種々のコンポーネントのうちのいずれかが、組み合わせられる、交換される、または他の実施形態から除外されてもよい。