(57)【特許請求の範囲】
【請求項１】
１つ又は複数のプロセッサ、揮発性メモリ、不揮発性メモリ、及びプロセッサキャッシュを有するコンピュータシステムにおいて、前記不揮発性メモリへの更新をミラーリングする方法であって、
前記不揮発性メモリ内に前記プロセッサキャッシュをフラッシュする命令が発行されていると判定するステップと、
前記不揮発性メモリ内に前記プロセッサキャッシュのコンテンツを書き込むステップと、
少なくとも前記不揮発性メモリ内に書き込まれている前記プロセッサキャッシュの前記コンテンツをリモートコンピュータシステムに伝送するステップと
を含み、
前記コンテンツは、前記プロセッサキャッシュのキャッシュラインにキャッシュされたデータであり、書き込みは、フラッシュ命令の発行に応答するものであり、かつ前記キャッシュラインに格納された前記不揮発性メモリの対応するメモリアドレスにおける前記キャッシュラインにキャッシュされたデータを、前記不揮発性メモリに書き込むことを含む、方法。
【請求項２】
前記書き込むステップの完了時に、及び前記書き込むステップの完了に応答して、前記伝送するステップを行う処理スレッドが実行される、請求項１に記載の方法。
【請求項３】
前記書き込むステップ及び前記伝送するステップが独立した処理スレッド内で実行される、請求項１に記載の方法。
【請求項４】
前記命令を発行したアプリケーションを停止するステップと、
前記伝送するステップの後に前記アプリケーションを再開するステップと
を更に含む、請求項３に記載の方法。
【請求項５】
前記伝送するステップを行う前記処理スレッドが周期的に実行される、請求項４に記載の方法。
【請求項６】
前記処理スレッドが実行を完了する度にカウンタ値を変更するステップを更に含み、
前記変更されたカウンタ値に従って前記アプリケーションが再開される、請求項５に記載の方法。
【請求項７】
前記プロセッサキャッシュが、複数のクリーンキャッシュライン又は複数のダーティキャッシュラインを含み、該複数のクリーンキャッシュライン又は該複数のダーティキャッシュラインの各々が、前記キャッシュされたデータ及び前記不揮発性メモリの対応するメモリアドレスを記憶するように構成され、
前記書き込むステップが、前記ダーティキャッシュラインの１つ又は複数にキャッシュされたデータを前記不揮発性メモリの対応するメモリアドレスに書き込むことを含む、請求項１に記載の方法。
【請求項８】
前記揮発性メモリ及び前記不揮発性メモリのメモリ空間が論理的に複数のページへと分けられ、前記伝送するステップが、
修正されていると示される前記不揮発性メモリのページを識別すること、
前記識別したページの少なくとも修正部分を前記リモートコンピュータシステムに伝送することを含む、請求項７に記載の方法。
【請求項９】
前記伝送するステップが、前記識別したページの未修正部分を前記リモートコンピュータシステムに伝送することなしに、前記識別したページの前記修正部分を前記リモートコンピュータシステムに伝送することを含む、請求項８に記載の方法。
【請求項１０】
前記プロセッサキャッシュのクリーンキャッシュラインがキャッシュデータ及びメモリアドレスで更新される度に、前記メモリアドレスをバッファ内に記憶するステップを更に含み、
前記伝送するステップが、前記バッファ内に記憶されたメモリアドレスを読み取ること、前記メモリアドレスにおいて前記不揮発性メモリからデータを読み取ること、前記メモリアドレスにある前記データを前記リモートコンピュータシステムに伝送することを含む、請求項７に記載の方法。
【請求項１１】
前記伝送するステップは、前記バッファが満杯になるとき引き起こされる、請求項１０に記載の方法。
【請求項１２】
前記伝送するステップが周期的に引き起こされる、請求項１０に記載の方法。
【請求項１３】
前記書き込むステップのとき、前記コンテンツが書き込まれる前記不揮発性メモリのメモリアドレスをバッファ内に記憶するステップを更に含み、
前記伝送するステップが、前記バッファ内に記憶されたメモリアドレスを読み取ること、前記メモリアドレスにおいて前記不揮発性メモリからデータを読み取ること、前記メモリアドレスにある前記データを前記リモートコンピュータシステムに伝送することを含む、請求項１に記載の方法。
【請求項１４】
前記伝送するステップは、前記バッファが満杯になるとき引き起こされる、請求項１３に記載の方法。
【請求項１５】
前記伝送するステップが周期的に引き起こされる、請求項１３に記載の方法。
【請求項１６】
１つ又は複数のプロセッサ、揮発性メモリ、不揮発性メモリ、及びプロセッサキャッシュを有するコンピュータシステムにおいて前記不揮発性メモリへの更新をミラーリングする方法を行うために実行される命令を含む非一時的コンピュータ可読媒体であって、前記方法は、
前記不揮発性メモリ内に前記プロセッサキャッシュをフラッシュする命令が発行されていると判定するステップと、
前記不揮発性メモリ内に前記プロセッサキャッシュのコンテンツを書き込むステップと、
少なくとも前記不揮発性メモリ内に書き込まれている前記プロセッサキャッシュの前記コンテンツをリモートコンピュータシステムに伝送するステップと
を含み、
前記コンテンツは、前記プロセッサキャッシュのキャッシュラインにキャッシュされたデータであり、書き込みは、フラッシュ命令の発行に応答するものであり、かつ前記キャッシュラインに格納された前記不揮発性メモリの対応するメモリアドレスにおける前記キャッシュラインにキャッシュされたデータを、前記不揮発性メモリに書き込むことを含む、非一時的コンピュータ可読媒体。
【請求項１７】
前記書き込むステップの完了時に、及び前記書き込むステップの完了に応答して、前記伝送するステップを行う処理スレッドが実行される、請求項１６に記載の非一時的コンピュータ可読媒体。
【請求項１８】
前記書き込むステップ及び前記伝送するステップが独立した処理スレッド内で実行される、請求項１６に記載の非一時的コンピュータ可読媒体。
【請求項１９】
コンピュータシステムであって、
１つ又は複数のプロセッサと、
揮発性メモリと、
不揮発性メモリと、
プロセッサキャッシュと
を備え、
前記プロセッサが、前記不揮発性メモリへの更新をミラーリングする方法を実行するようにプログラムされ、前記方法は、前記不揮発性メモリ内に前記プロセッサキャッシュをフラッシュする命令が発行されていると判定するステップと、前記不揮発性メモリ内に前記プロセッサキャッシュのコンテンツを書き込むステップと、少なくとも前記不揮発性メモリ内に書き込まれている前記プロセッサキャッシュの前記コンテンツをリモートコンピュータシステムに伝送するステップとを含み、前記コンテンツは、前記プロセッサキャッシュのキャッシュラインにキャッシュされたデータであり、書き込みは、フラッシュ命令の発行に応答するものであり、かつ前記キャッシュラインに格納された前記不揮発性メモリの対応するメモリアドレスにおける前記キャッシュラインにキャッシュされたデータを、前記不揮発性メモリに書き込むことを含む、コンピュータシステム。
【請求項２０】
前記揮発性メモリは、前記プロセッサキャッシュのダーティラインが記憶される前記不揮発性メモリのメモリアドレスを記憶するためのバッファを含む、請求項１９に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
コンピュータハードウェアプロバイダは、バイトによってアドレス指定可能な不揮発性メモリを有する試験的なプロトタイプコンピュータシステムを構築している。かかるシステムでは、揮発性メモリと同様の方法で不揮発性メモリをアプリケーションによって直接マップし、不揮発性メモリにアクセスするために処理装置のロード命令及びストア命令を使用することができる。かかるコンピュータシステムでは、揮発性メモリと不揮発性メモリとの唯一の違いは、ストア命令によって不揮発性メモリに加えられる如何なる修正も永続する点である。
【背景技術】
【０００２】
バイトによってアドレス指定可能な不揮発性メモリを有するコンピュータシステムが仮想マシンのホストシステムとして使用され、仮想マシンの実行をサポートするハイパーバイザが仮想化された不揮発性メモリを含む仮想ハードウェアプラットフォームを提供する場合、もはや仮想マシンの全ての永続的状態が記憶システム内にあると仮定することはできない。その結果、共用記憶システムを使用することで可能にされてきた仮想マシンのライブマイグレーション、耐故障性、高可用性等、仮想化コンピュータシステムの機能が不揮発性メモリ内にある仮想マシンの永続的状態が原因で利用できなくなる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
１つ又は複数の実施形態は、不揮発性メモリがコンピュータシステムにとってローカルである場合にも、アプリケーションのライブマイグレーション、耐故障性、高可用性等のコンピュータシステムの特定の機能が利用できるように不揮発性メモリをミラーリングする技法を提供する。一実施形態では、キャッシュのコンテンツを不揮発性メモリ内にフラッシュするためのキャッシュフラッシュ命令（本明細書では「ＮＶＭフラッシュ」命令と呼ぶ）の実行時にミラーリングを行う。更なる実施形態では、ＮＶＭフラッシュ命令の実行に対してミラーリングを非同期的に行い、ミラーリングされるコンテンツが、ＮＶＭフラッシュ命令のターゲットメモリアドレスに対応する不揮発性メモリのメモリアドレスを使用して不揮発性メモリから取得される。
【０００４】
不揮発性メモリへの更新をミラーリングする第１の実施形態による方法は、不揮発性メモリ内にキャッシュをフラッシュする命令が発行されていると判定するステップと、不揮発性メモリ内にキャッシュのコンテンツを書き込むステップと、少なくとも不揮発性メモリ内に書き込まれているキャッシュのコンテンツをリモートコンピュータシステムに伝送するステップとを含む。伝送するステップは、書き込むステップと同期的に又は非同期的に実行することができる。伝送するステップが非同期的に実行される場合、伝送するステップは周期的に実行されるミラーリングスレッドの一部として実行される。
【０００５】
不揮発性メモリへの更新をミラーリングする第２の実施形態による方法は、ダーティキャッシュライン内に記憶されるキャッシュデータ及びメモリアドレスを読み取り、それと同時にメモリアドレスをバッファ内に記憶し、キャッシュデータをメモリアドレスに記憶する第１のステップと、バッファ内に記憶されるメモリアドレスを読み取り、そのメモリアドレスに位置するキャッシュデータを読み取り、そのメモリアドレスに位置するキャッシュデータをリモートコンピュータシステムに伝送することにより、メモリアドレスに記憶されたキャッシュデータをミラーリングする第２のステップとを含む。
【０００６】
不揮発性メモリへの更新をミラーリングする第３の実施形態による方法は、新たなキャッシュデータ及び新たなメモリアドレスを用いてキャッシュラインを更新するステップと、新たなメモリアドレスに新たなキャッシュデータを記憶し、更新されたキャッシュラインの状態が更新の結果クリーンな状態からダーティな状態に遷移したのかどうかに基づき、バッファ内に新たなメモリアドレスを条件付きで記憶するステップと、新たなメモリアドレスに記憶された新たなキャッシュデータをミラーリングするステップとを含む。
【０００７】
不揮発性メモリへの更新をミラーリングする第４の実施形態による方法は、第１のキャッシュ及び第２のキャッシュのキャッシュラインを更新するステップと、更新したキャッシュラインが第１のキャッシュ内にあり、更新の結果ダーティになる場合は更新したキャッシュラインのメモリアドレスを第１のバッファ内に記憶し、更新したキャッシュラインが第２のキャッシュ内にあり、更新の結果ダーティになる場合は第２のバッファ内に記憶するステップと、第１のバッファ及び第２のバッファ内に記憶したメモリアドレスにおいて、更新したキャッシュラインのデータを不揮発性メモリ内に記憶し、第１のバッファ及び第２のバッファ内に記憶したメモリアドレスに記憶されている更新したキャッシュラインのデータをミラーリングするステップとを含む。
【０００８】
更なる実施形態は、コンピュータシステムが上記の方法の１つ又は複数の態様を実施することを可能にする命令を含む非一時的コンピュータ可読記憶媒体、並びに上記の方法の１つ又は複数の態様を実施するように構成されるコンピュータシステムを制限なしに含む。
【図面の簡単な説明】
【０００９】
【図１】１つ又は複数の実施形態を実装することができるコンピュータシステムである。
【図２】Ａ及びＢは、揮発性メモリ及び不揮発性メモリのページのマッピングを示す概念図である。
【図３】ハイパーバイザが実行する方法の流れ図であり、ミラーリングのステップがＮＶＭフラッシュ命令に応答して、及びＮＶＭフラッシュ命令の完了時に実行される。
【図４】一実施形態による、ダーティキャッシュデータをミラーリングする方法を示す流れ図である。
【図５】Ａは、ＮＶＭフラッシュ命令が実行されるとき、第２の実施形態に従って実行される方法を示す流れ図であり、Ｂは、Ａの方法と対になる、周期的に実行されるミラーリングスレッドのステップを示す。
【図６】Ａは、ＮＶＭフラッシュ命令が実行されるとき、第３の実施形態に従って実行される方法を示す流れ図であり、Ｂは、Ａの方法と対になる、周期的に実行されるミラーリングスレッドのステップを示す。
【図７】ダーティキャッシュラインが書き込まれる不揮発性メモリアドレスをバッファ内に記憶するメモリコントローラを示す概念図である。
【図８】ダーティキャッシュラインが書き込まれる不揮発性メモリアドレスをバッファ内に記憶する方法の流れ図である。
【図９】バッファ内に記憶される不揮発性メモリアドレスを使用する、図５Ｂのミラーリング方法の修正形態である。
【図１０】ダーティキャッシュラインが書き込まれる不揮発性メモリアドレスを専用バッファ内で追跡するように構成されるキャッシュをそれぞれ有する複数の処理コアと、専用バッファ内に記憶される不揮発性メモリアドレスを集めるための中央バッファとを示す概念図である。
【図１１】キャッシュの更新に応答し、ダーティキャッシュラインが書き込まれる不揮発性メモリアドレスを追跡する方法の流れ図である。
【図１２】周期的に、又は専用バッファの何れかが満杯になるときに、ダーティキャッシュラインのデータをミラーリングする方法の流れ図である。
【図１３】専用バッファ内に記憶される不揮発性メモリアドレスを用いて中央バッファにデータ投入する方法の流れ図である。
【図１４】中央バッファ内に記憶される不揮発性メモリアドレスを使用する、図５Ｂのミラーリング方法の別の修正形態である。
【発明を実施するための形態】
【００１０】
図１は、１つ又は複数の実施形態を実装することができるコンピュータシステムである。ホストコンピュータシステム１００は、デスクトップ、ラップトップ、又はｘ８６アーキテクチャプラットフォーム等のサーバグレードハードウェアプラットフォーム１０２上に構築することができる。ハードウェアプラットフォーム１０２は、１つ又は複数の処理コアを含む中央処理装置（ＣＰＵ）１０３、１つ又は複数のレベルのＣＰＵキャッシュ１０４及びメモリコントローラ１０５、並びに揮発性メモリ１１１（例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ））及び不揮発性メモリ１１２を含むホスト物理メモリを含む。不揮発性メモリ１１２の例には、相変化メモリ（ＰＣＭ）、磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）、カーボンナノチューブベースの不揮発性メモリ、及びＤＲＡＭに匹敵するリード／ライトアクセスレイテンシを有する他の任意の種類の不揮発性メモリが含まれる。ハードウェアプラットフォーム１０２は、ホストコンピュータシステム１００をミラーリングターゲット１６０（例えばリモートコンピュータシステム）にネットワーク１６１経由で接続するネットワークインタフェースコントローラ（不図示）や、ホストコンピュータシステム１００を本明細書では記憶システム１４５として示す永続記憶装置にネットワーク１４６経由で接続する１つ又は複数のホストバスアダプタ（不図示）等、他の標準ハードウェアコンポーネントを更に含む。
【００１１】
ハイパーバイザ１２５が、ハードウェアプラットフォーム１０２上にインストールされる。ハイパーバイザ１２５は、複数の仮想マシン実行空間１１６１〜１１６Ｎをサポートし、対応するＶＭ１２０１〜１２０Ｎをインスタンス化するために、ＶＭ１２０１〜１２０Ｎのそれぞれの中でＶＭプロセスを実行することができる。ＶＭ１２０１〜１２０Ｎのそれぞれについて、ハイパーバイザ１２５は、１つ又は複数の仮想ＣＰＵ（ｖＣＰＵ）等のエミュレーテッドハードウェア、並びにゲスト揮発性メモリ及びゲスト不揮発性メモリを含むゲスト物理メモリを含む、対応する仮想ハードウェアプラットフォーム（即ち仮想ハードウェアプラットフォーム１２２１〜１２２Ｎ）を管理する。各仮想ハードウェアプラットフォーム１２２は、ゲストオペレーティングシステム（ＯＳ）（例えばゲストＯＳ１３２）のインストールをサポートする。各インスタンス内で、ゲストＯＳは仮想マシン内で実行されるユーザレベルアプリケーション、例えば仮想マシンの仮想ハードウェアプラットフォームへのインタフェースであるＡＰＰＳ１１３を提供する。
【００１２】
図１の仮想化コンポーネントを説明するために使用する様々な用語、レイヤ、及びカテゴリ化は、その機能又は本発明の趣旨若しくは範囲から逸脱することなしに異なるように言及され得ることを理解すべきである。例えば、仮想ハードウェアプラットフォーム１２２１〜１２２Ｎは、ハイパーバイザ１２５とハイパーバイザ１２５のそれぞれのＶＭとの間の操作を調整するのに必要な仮想システムサポートを実装する仮想マシンモニタ（ＶＭＭ）１４０１〜１４０Ｎの一部と見なすことができる。或いは、仮想ハードウェアプラットフォーム１２２１〜１２２Ｎは、ＶＭＭ１４０１〜１４０Ｎから切り離されていると（例えばかかるプラットフォームは仮想マシン用のハードウェアエミュレーションコンポーネントを含むので、仮想ハードウェアプラットフォーム１２２１〜１２２Ｎの対応する仮想マシンのコンポーネントとして）見なすこともでき、ＶＭＭ１４０１〜１４０Ｎはハイパーバイザ１２５から切り離されていると見なすことができる。使用することができるハイパーバイザ１２５の一例は、カルフォルニア州パロアルト（Ｐａｌｏ  Ａｌｔｏ，Ｃａｌｉｆｏｒｎｉａ）のヴイエムウェア  インコーポレイテッド（ＶＭｗａｒｅ，Ｉｎｃ．）から市販されているヴイエムウェア（ＶＭｗａｒｅ）のｖＳｐｈｅｒｅ（登録商標）製品のコンポーネントとして含まれる。ハイパーバイザがホストオペレーティングシステムと共に実装されるホスト型仮想マシンシステム等、他の仮想化コンピュータシステムも考えられることを更に理解すべきである。
【００１３】
ＶＭ１２０のメモリ管理はエミュレーテッドメモリ管理装置（ＭＭＵ）によって実行されても良く、ＭＭＵは「シャドー」ページテーブルとして知られるページテーブルを用いてマシンメモリアドレスとも呼ばれる物理メモリアドレスに対するゲスト仮想アドレスの直接的なマッピングを管理する。ＶＭ１２０のメモリ管理は、ネスト化されたページウォーク（ｎｅｓｔｅｄ  ｐａｇｅ  ｗａｌｋｓ）をサポートするＣＰＵ１０３内で構成される１つ又は複数のＭＭＵによって実行されても良い。かかるシステムでは、ゲストページテーブル（ｇＰＴ）と本明細書で呼ぶ１組の第１のページテーブルが、ゲスト物理アドレス空間と本明細書で呼ぶ仮想マシンについてエミュレートされている物理アドレス空間に対し、ゲスト仮想アドレス空間と本明細書で呼ぶ仮想マシン内で実行される各アプリケーションの仮想アドレス空間をマップする。更に、ネスト化されたページテーブル（ＮＰＴ：ｎｅｓｔｅｄ  ｐａｇｅ  ｔａｂｌｅ）（当技術分野では拡張ページテーブルとしても知られている）と本明細書で呼ぶ１組の第２のページテーブルが、マシンメモリアドレス空間と本明細書で呼ぶマシンメモリのアドレス空間に対し、ゲスト物理アドレス空間をマップする。１組の第１のページテーブル及び１組の第２のページテーブルの両方が階層的に構成され、ページテーブルの各組の最上位のルートテーブルへのポインタが別個のレジスタ内に記憶される。ネスト化されたページウォークをサポートするｘ８６アーキテクチャでは、ｇＰＴのルートテーブルへのポインタを記憶するレジスタがｇＣＲ３レジスタとして知られており、ＮＰＴのルートテーブルへのポインタを記憶するレジスタがｎＣＲ３レジスタとして知られている。ゲストページテーブル及びネスト化されたページテーブル等を使用する非ｘ８６アーキテクチャが異なる構造を有し、異なる方法でアクセスされ得ることを理解すべきである。
【００１４】
以下に示す実施形態の説明では、ＶＭ１２０のメモリ管理が、ネスト化されたページウォークをサポートするＣＰＵ１０３内で構成されるＭＭＵによって実行される。但し、本明細書に記載する実施形態の特徴は、メモリ管理にエミュレーテッドＭＭＵを使用するシステムにも適用され得ることを理解すべきである。
【００１５】
図２Ａ及び図２Ｂは、揮発性メモリ及び不揮発性メモリのページのマッピング、具体的にはネスト化されたページテーブル（ＮＰＴ）２１０及びＮＰＴ２１０のページテーブルエントリ（ＰＴＥ）による、ゲスト物理メモリ空間からマシンメモリ空間へのページのマッピングを示す概念図である。各ＰＴＥは、とりわけ、ダーティビット（Ｄで示す）及び揮発性メモリ１１１内のページ、記憶システム１４５内に設けられる揮発性メモリ１１１用のスワップ空間内のページ、又は不揮発性メモリ１１２内のページへのポインタを含む。ページのＰＴＥは、そのコンテンツが修正される（即ちダーティにされる）場合、ダーティビットが１に設定される（即ちＤ＝１）。揮発性メモリ１１１内のページでは、このダーティビットが従来の方法で、即ち修正が記憶システム１４５内に永続的に記憶されるときにクリアされる（即ちＤが１から０に変更される）。不揮発性メモリ１１２のページでは、以下で更に説明するように修正が不揮発性メモリ１１２内に永続的に記憶され、ミラーリングターゲットに伝送されるときに、このダーティビットがクリアされる。
【００１６】
ページが修正されると、その修正（本明細書では「ダーティコンテンツ」とも呼ぶ）がまずキャッシュ１０４内に、より詳細にはキャッシュ１０４の１つ又は複数のライン内に記憶される。本明細書に示す実施形態では、キャッシュ１０４が６４バイトのラインに分割され、各キャッシュラインは、揮発性メモリ１１１又は不揮発性メモリ１１２内のページの６４バイト部分をアドレスし、６４バイト部分は、はるかに大きいサイズ、例えば４ＫＢを有する。キャッシュ１０４は更に、各キャッシュラインのダーティビットを保持し、ページの修正が記憶される各キャッシュラインのダーティビットが１に設定される。このダーティビットは、ページの修正が揮発性メモリ１１１又は不揮発性メモリ１１２内にフラッシュされるまでクリア（０に設定）されない。
【００１７】
従来のシステムでは、キャッシュが満杯になると、最低使用頻度（ＬＲＵ：ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）技法等の知られている様々な技法に従ってキャッシュの様々なラインが追い出される。加えて、「キャッシュフラッシュ」命令として知られているキャッシュをフラッシュするための命令がアプリケーションによって発行され、その命令によりＣＰＵがキャッシュ１０４の全ダーティコンテンツを揮発性メモリ１１１内にフラッシュする。本明細書に記載の実施形態では、アプリケーションが「ＮＶＭフラッシュ」命令と本明細書で呼ぶ命令とを利用することができる。アプリケーションがＮＶＭフラッシュ命令を発行すると、それに応答してＣＰＵが不揮発性メモリ１１２のページへの修正を含むキャッシュ１０４のダーティコンテンツを対応するページ内にフラッシュし、それによりかかる修正が不揮発性メモリ１１２内に永続的に記憶される。
【００１８】
図２Ａ及び図２Ｂでは、ＰＴＥ２１１及びＰＴＥ２１２に対応するページは、ダーティコンテンツを有さない揮発性メモリページの例である。そのためＰＴＥ２１１及びＰＴＥ２１２のダーティビットは０である。対照的に、ＰＴＥ２１３及びＰＴＥ２１４に対応するページは、ダーティコンテンツを含む揮発性メモリページの例である。そのためＰＴＥ２１３及びＰＴＥ２１４のダーティビットは１である。ＰＴＥ２１３の場合、ダーティコンテンツがキャッシュ１０４内に記憶され、揮発性メモリ１１１内にフラッシュされている。ＰＴＥ２１４の場合、ダーティコンテンツがキャッシュ１０４内に記憶され、揮発性メモリ１１１内にまだフラッシュされていない。
【００１９】
ＰＴＥ２１１〜２１４は、記憶システム１４５又は揮発性メモリ１１１内のページにそれぞれマップされている。対照的に、ＰＴＥ２１５、２１６、２１７は不揮発性メモリ１１２内のページにそれぞれマップされている。ＰＴＥ２１５及びＰＴＥ２１６に対応するページは、ダーティコンテンツを含む不揮発性メモリページの例である。そのためＰＴＥ２１５及びＰＴＥ２１６のダーティビットは１である。ＰＴＥ２１５の場合、ダーティコンテンツがキャッシュ１０４内に記憶され、不揮発性メモリ１１２内にまだフラッシュされていない。ＰＴＥ２１６の場合、ダーティコンテンツがキャッシュ１０４内に記憶され、不揮発性メモリ１１２内にフラッシュされている。ＰＴＥ２１７に対応するページは、ダーティコンテンツを有さない不揮発性メモリページの例であり、従ってＰＴＥ２１７のダーティビットは０である。
【００２０】
実施形態によれば、不揮発性メモリ１１２内のページのコンテンツが修正されてキャッシュ１０４内に記憶され、ダーティコンテンツが不揮発性メモリ１１２内にフラッシュされると、そのページのダーティビットはダーティコンテンツがミラーリングされるまでクリア（即ち、０に設定）されない。図２Ｂは、かかるフラッシング及びミラーリングの結果を示す。ＰＴＥ２１５の場合、キャッシュ１０４内に記憶されるダーティコンテンツがまずページＸ内にフラッシュされ、次いでミラーリングターゲットに伝送される。その結果、図２Ｂに示すようにＰＴＥ２１５のダーティビットが０に変更される。ＰＴＥ２１６の場合、既にページＹ内にフラッシュされているダーティコンテンツがミラーリングターゲットに伝送される。その結果、図２Ｂに示すようにＰＴＥ２１６のダーティビットが０に変更される。
【００２１】
不揮発性メモリページのダーティコンテンツのミラーリングは、ＮＶＭフラッシュ命令の実行によって、又は周期的に引き起こすことができる。図３は、ハイパーバイザが実行する方法の流れ図であり、ミラーリングのステップがＶＭ内で実行されるゲストアプリケーションによって発行されるＮＶＭフラッシュ命令、即ちゲストＮＶＭフラッシュ命令に応答して、及びゲストＮＶＭフラッシュ命令の完了時に実行される。この方法はステップ３０２で始まり、ステップ３０２では、ゲストＮＶＭフラッシュ命令の実行がハイパーバイザにトラップし、アプリケーション（並びに同じｖＣＰＵ上のＶＭ内で実行される他の任意のアプリケーション）を停止させる。ステップ３０４で、ハイパーバイザがホストＮＶＭフラッシュ命令を発行する。ホストＮＶＭフラッシュ命令に応答し、ＣＰＵ１０３が不揮発性メモリ１１２のページへの修正を含むキャッシュ１０４のダーティコンテンツを不揮発性メモリ１１２の対応するページ内にフラッシュし、それによりかかる修正が不揮発性メモリ１１２内に永続的に記憶される。ステップ３１２で、ＣＰＵ１０３によるホストＮＶＭフラッシュ命令の完了時に、ミラーリングを実行する（ステップ３１２）。ミラーリングのステップは図４に記載している。ミラーリングの実行後、ステップ３１４でハイパーバイザがトラップから出て、それによりアプリケーション（及び同じｖＣＰＵ上のＶＭ内で実行される他の任意のアプリケーション）の実行を再開することができる。
【００２２】
図４は、ハイパーバイザが実行するミラーリング方法の流れ図である。ステップ４０２で、ハイパーバイザが「ネスト化されたＰＴＥ」と呼ばれるＮＰＴ２１０のページテーブルエントリを走査し、不揮発性メモリ１１２内の次のページに対応するネスト化されたＰＴＥを調べる。調べたページがダーティである場合（例えばＤ＝１）、ステップ４０６からステップ４１６に従ってページのコンテンツをミラーリングする。調べたページがダーティでない場合（例えばＤ＝０）、フローはステップ４１８に飛び、ステップ４１８では、調べるページが不揮発性メモリ１１２内にそれ以上あるかどうかをハイパーバイザが判定する。調べるページが不揮発性メモリ１１２内にそれ以上ある場合、この方法はステップ４０２に戻る。それ以上ない場合、この方法は終了する。
【００２３】
図４に示す実施形態では、ネットワーク帯域幅を最小限にする方法でハイパーバイザがミラーリングを行う。それを達成するために、「ホット」ページ（例えば頻繁にダーティにされるページ）の複製を保持し、それにより、それらのページがダーティにされる度にそれらのページのダーティにされた部分だけをミラーリングターゲットに伝送する。この実装形態例では、ステップ４０６で、ハイパーバイザがダーティページの過去の複製があるかどうかを確認する。過去の複製がある場合、ハイパーバイザは過去の複製に関し、ダーティにされたページに対するｄｉｆｆ操作を行う（ステップ４０８）。その結果生じるｄｉｆｆファイルのサイズは、ミラーリングターゲットにｄｉｆｆファイルを伝送するのか、ミラーリングターゲットに全ページを伝送するのかを決める。ステップ４１０で判定するように、サイズが閾値のサイズを上回らない（例えばページサイズの５０％以下である）場合、ステップ４１２でミラーリングターゲットにｄｉｆｆファイルを送る。他方で、ステップ４１０で判定するように、サイズが閾値のサイズを上回る（例えばページサイズの５０％を超える）場合、ステップ４１４でミラーリングターゲットに全ページを送る。ステップ４１６は、ステップ４１２及び４１４の後で実行される。ステップ４１６で、ハイパーバイザがダーティページのダーティビットをクリアし、ページがホットだと判定される場合はダーティページの複製を記憶する。ページがホットかどうかの判定は、参照によりその全内容を本明細書に援用する、２０１０年７月１２日に出願され、「活動レベルに基づくメモリページのオンライン分類（Ｏｎｌｉｎｅ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎ  ｏｆ  Ｍｅｍｏｒｙ  Ｐａｇｅｓ  Ｂａｓｅｄ  ｏｎ  Ａｃｔｉｖｉｔｙ  Ｌｅｖｅｌ）」と題された米国特許出願第１２／８３４，６６２号明細書の中で開示されている技法を使用して行うことができる。ステップ４１６の後、上記の方法でステップ４１８を実行する。
【００２４】
代替的実施形態は、前回のミラーリング操作の時からどの程度のページがダーティにされているのかに関係なく常に全ダーティページをミラーリングターゲットに伝送する、ミラーリングのより単純な形を用いることができる。
【００２５】
残りの実施形態では、ミラーリングが周期的に、及びＮＶＭフラッシュ命令の実行に対して非同期的に行われる。更に、ＮＶＭフラッシュ命令の実行がハイパーバイザではなくゲストドライバにトラップする。
【００２６】
図５Ａは、ＶＭ内で実行されるゲストアプリケーションが発行するＮＶＭフラッシュ命令に応答し、ゲストドライバが実行する一実施形態による方法の流れ図である。この方法はステップ５１０で始まり、ステップ５１０では、ＮＶＭフラッシュ命令の実行がゲストドライバにトラップしてアプリケーションを停止させる。次いでステップ５１２で、ゲストドライバがジェネレータカウンタの値（図５Ｂに関して以下で説明する方法に従ってミラーリングスレッドによってインクリメントされる）を読み取り、ステップ５１４でホストＮＶＭフラッシュ命令を発行する。ホストＮＶＭフラッシュ命令に応答し、ＣＰＵ１０３が不揮発性メモリ１１２のページへの修正を含むキャッシュ１０４のダーティコンテンツを不揮発性メモリ１１２の対応するページ内にフラッシュし、それによりかかる修正が不揮発性メモリ１１２内に永続的に記憶される。ステップ５２２で、ＣＰＵ１０３によるホストＮＶＭフラッシュ命令の完了時に、ゲストドライバがジェネレータカウンタの値を読み取り、ステップ５１２で読み取った値とその値とを比較する。値が２増えている場合、ステップ５２４でゲストドライバがトラップから出てアプリケーションの実行が再開される。値が２増えていない場合、ステップ５２４でゲストドライバが所定数のＣＰＵサイクル（ＮのＣＰＵサイクル）にわたって一時停止し、ＮのＣＰＵサイクルの後でステップ５２２を再び実行する。或いは、ＮのＣＰＵサイクルにわたって一時停止するのではなく、ステップ５２４で、生成カウンタがインクリメントされる度に作動するようにプログラムされる割込みをゲストドライバが待っても良い。
【００２７】
図５Ｂは、周期的に、例えば１０ミリ秒ごとに生成されるミラー割込みの発生時にバックグラウンドスレッドによって実行されるミラーリング方法の流れ図である。ステップ５３２で、バックグラウンドスレッドが図４のミラーリング方法を実行する。このミラーリング方法の完了時に、バックグラウンドスレッドがステップ５３４で生成カウンタをインクリメントし、その後終了する。
【００２８】
図６Ａは、ＶＭ内で実行されるゲストアプリケーションが発行するＮＶＭフラッシュ命令に応答し、ゲストドライバが実行する別の実施形態による方法の流れ図である。図６Ａの方法は、図５Ｂの方法の代わりに図６Ｂの方法に従って生成カウンタがミラーリングスレッドによってインクリメントされること、及びステップ５２２の代わりにステップ６２２を実行することを除き図５Ａの方法と同じである。ステップ６２２で、ゲストドライバがジェネレータカウンタの値を読み取り、ステップ５１２で読み取った値とその値とを比較して値が１インクリメントしたかどうかを判定する。値が１インクリメントした場合、ゲストドライバが上記のステップ５２４を実行する。値が１インクリメントしていない場合、ゲストドライバが上記のステップ５２６を実行する。
【００２９】
図６Ｂは、周期的に、例えば１０ミリ秒ごとに生成されるミラー割込みの発生時にバックグラウンドスレッドによって実行されるミラーリング方法の流れ図である。バックグラウンドスレッドは、ステップ６３２で他の全てのプロセスの実行を停止し、それによりメモリのページ、とりわけ不揮発性メモリ１１２のページがバックグラウンドスレッドの実行中にダーティにならない。次いでステップ６３４で、バックグラウンドスレッドが図４のミラーリング方法を実行する。このミラーリング方法の完了時に、バックグラウンドスレッドがステップ６３６で生成カウンタを１インクリメントする。その後、ステップ６３８でバックグラウンドスレッドが停止されていたプロセスの実行を再開し、その後終了する。
【００３０】
図５Ａ及び図５Ｂの実施形態並びに図６Ａ及び図６Ｂの実施形態には、図３の実施形態に勝る２つの利点がある。第１に、これらの実施形態ではハイパーバイザへのトラップを回避して数千のＣＰＵサイクルを節約し、第２に、ＮＶＭフラッシュ命令を発行したアプリケーションがダーティページのミラーリングを待つ間、他のゲストアプリケーションが実行し続けることを可能にする。これらの及び他の利点が、参照によりその全内容を本明細書に援用する、２００９年３月４日に出願され、「仮想化によって生じるレイテンシの管理（Ｍａｎａｇｉｎｇ  Ｌａｔｅｎｃｙ  Ｉｎｔｒｏｄｕｃｅｄ  ｂｙ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）」と題された米国特許出願第１２／３９７，９１４号明細書の中で説明されている。
【００３１】
ミラーリングを更に最適化する方法として、更なる実施形態では、不揮発性メモリ１１２のページへの修正を含むキャッシュ１０４のダーティラインのメモリアドレスを揮発性メモリ１１１内でハイパーバイザによって設定されるバッファ内に記憶するようにメモリコントローラ１０５が構成される。図７は、そのように構成されるメモリコントローラ１０５の概念図である。
【００３２】
図７に示す実施形態では、キャッシュ７４１を有するコア７０１、及びキャッシュ７４２を有するコア７０２の２つの処理コアが示されている。ホストＮＶＭフラッシュ命令に応答し、メモリコントローラ１０５が、不揮発性メモリ１１２のページへの修正を含む対応するキャッシュのダーティラインをメモリコントローラ１０５の書込みバッファ７５０内にまず記憶し、次いで（１）ダーティキャッシュラインのデータを不揮発性メモリ１１２内に、（２）ダーティキャッシュラインのデータが記憶される不揮発性メモリ１１２のメモリアドレスをバッファ７１０内に記憶し、バッファ７１０は一実施形態では循環バッファである。加えて、キャッシュ（キャッシュ７４１又はキャッシュ７４２）が満杯になると、最低使用頻度（ＬＲＵ）技法等の知られている技法に従ってキャッシュの様々なラインがメモリコントローラ１０５によって追い出される。この追出しプロセス中、メモリコントローラ１０５は（１）不揮発性メモリ１１２のページへの修正を含む追い出されたキャッシュラインのデータを不揮発性メモリ１１２内に記憶し、（２）追い出されたキャッシュラインのデータが記憶される不揮発性メモリ１１２のメモリアドレスをバッファ７１０内に記憶する。
【００３３】
図８は、上記の２つの事象、つまりホストＮＶＭフラッシュ命令の実行、及び不揮発性メモリ１１２のページへの修正を含むキャッシュラインの追出しに応じてバッファ７１０にデータ投入するために、メモリコントローラ１０５が実行する方法の流れ図である。この方法はステップ８０２で始まり、ステップ８０２では、メモリコントローラ１０５が揮発性メモリ１１１内のバッファ７１０を探索する。ステップ８０４で、メモリコントローラ１０５が書込みバッファ７５０のコンテンツを揮発性メモリ１１１及び不揮発性メモリ１１２の何れかにフラッシュする。不揮発性メモリ１１２にフラッシュする場合、フラッシュされるコンテンツが記憶される不揮発性メモリ１１２のメモリアドレスをバッファ７１０に追加する（ステップ８０６）。
【００３４】
上記の方法でバッファ７１０が使用されると、図５Ｂのミラーリング方法を図９のミラーリング方法と置換することができ、図９のミラーリング方法は、バッファ７１０が満杯になるときに、又は周期的に、例えば１０ミリ秒ごとに生成されるミラー割込みの発生時に引き起こされるバックグラウンドスレッドによって実行される。概して、このバックグラウンドスレッドは、バッファ７１０内に記憶されるメモリアドレスに位置するデータのミラーリングを行う。各メモリアドレスは１キャッシュラインのデータを参照するので、データのミラーリングは６４バイト単位で、又はキャッシュラインのサイズに等しい他の何らかのサイズで行われる。より詳細には、ステップ９０２で、バックグラウンドスレッドが次のメモリアドレスをバッファ７１０から選択する。次いでステップ９０４で、バックグラウンドスレッドが被選択メモリアドレスからデータを読み取り、被選択メモリアドレスに記憶するためにそのデータを不揮発性メモリ１１２に、更にミラーリングターゲットに送る。ステップ９０６で、バックグラウンドスレッドが被選択メモリアドレスをバッファ７１０から除去する。バックグラウンドスレッドは、ステップ９０８でメモリアドレスがそれ以上バッファ７１０内にあるかどうかを判定する。バッファ７１０内にメモリアドレスが更にある場合、この方法はステップ９０２に戻る。メモリアドレスがない場合、バックグラウンドスレッドがステップ９１０を実行して生成カウンタを１インクリメントする。この方法はステップ９１０の後で終了する。
【００３５】
更なる実施形態では、処理コアキャッシュの各コントローラが、不揮発性メモリ１１２のページへの修正を含む対応するキャッシュのダーティラインのメモリアドレスを揮発性メモリ１１１内でハイパーバイザによって設定される専用バッファ内に記憶するように構成される。図１０に示す例では、キャッシュ７４１用にバッファ１０１１が設定され、キャッシュ７４２用にバッファ１０１２が設定される。本明細書に示す実施形態では、専用バッファ内へのメモリアドレスの記憶が、不揮発性メモリ１１２のページへの修正がキャッシュライン（例えばキャッシュ７４１又はキャッシュ７４２のライン）内に記憶され、キャッシュラインのダーティ状態がクリーンからダーティに遷移するとき引き起こされる。
【００３６】
図１１は、キャッシュラインの更新に応じてキャッシュコントローラが実行する方法の流れ図である。ステップ１１０２で、更新されているキャッシュラインの現在のダーティ状態をキャッシュコントローラが確認する。現在のダーティ状態がクリーンである場合、キャッシュコントローラは、揮発性メモリ１１１内の専用バッファのアドレスを探索し（ステップ１１０４）、更新されたキャッシュラインのコンテンツが記憶される不揮発性メモリ１１２のメモリアドレスを専用バッファ内に記憶する（ステップ１１０６）。この方法はステップ１１０６の後で終了する。現在のダーティ状態がダーティである場合、ステップ１１０４及び１１０６を飛ばしてこの方法を終える。
【００３７】
上記の方法で専用バッファが使用されると、図５Ｂのミラーリング方法を図１２のミラーリング方法と置換することができ、図１２のミラーリング方法は、専用バッファの何れかが満杯になるときに、又は周期的に、例えば１０ミリ秒ごとに生成されるミラー割込みの発生時に引き起こされるバックグラウンドスレッドによって実行される。ステップ１２０２で、バックグラウンドスレッドが次のメモリアドレスを専用バッファから選択する。次いでステップ１２０４で、バックグラウンドスレッドが被選択メモリアドレスからデータを読み取り、被選択メモリアドレスに記憶するためにそのデータを不揮発性メモリ１１２に、更にミラーリングターゲットに送る。ステップ１２０６で、バックグラウンドスレッドが被選択メモリアドレスを専用バッファから除去する。バックグラウンドスレッドは、ステップ１２０８でメモリアドレスがそれ以上専用バッファ内にあるかどうかを判定する。専用バッファ内にメモリアドレスが更にある場合、この方法はステップ１２０２に戻る。メモリアドレスがない場合、バックグラウンドスレッドがステップ１２１０を実行して生成カウンタを１インクリメントする。この方法はステップ１２１０の後で終了する。
【００３８】
従って、バッファ１０１１又はバッファ１０１２が満杯になると、このことが上記の満杯のバッファのためのミラーリング方法を引き起こす。或いは、バッファ１０１１又はバッファ１０１２が満杯になると、その事象は、図１３に関して以下で説明する満杯のバッファのコンテンツが中央バッファ１０２０（図１０に示す）内に複製されることを引き起こすことができ、図１４に関して以下で説明するように、中央バッファ１０２０内に記憶されるメモリアドレスを使用して任意のミラーリングが行われる。
【００３９】
図１３の方法は、専用バッファの何れかが満杯になるとき、更に中央バッファ１０２０が空になるとき引き起こされるバックグラウンドスレッドによって実行される。ステップ１３０２で、バックグラウンドスレッドが、満杯の専用バッファ又は最も満杯の専用バッファから次のメモリアドレスを選択する。次いでステップ１３０４で、バックグラウンドスレッドが被選択メモリアドレスを中央バッファ１０２０に複製し、ステップ１３０６で被選択メモリアドレスを専用バッファから除去する。バックグラウンドスレッドは、ステップ１３０８でメモリアドレスがそれ以上専用バッファ内にあるかどうかを判定する。専用バッファ内にメモリアドレスが更にある場合、この方法はステップ１３０２に戻る。メモリアドレスがない場合、この方法は終了する。
【００４０】
中央バッファ１０２０を使用する場合、図５Ｂのミラーリング方法を図１４のミラーリング方法と置換することができ、図１４のミラーリング方法は、中央バッファ１０２０が満杯になるときに、又は周期的に、例えば１０ミリ秒ごとに生成されるミラー割込みの発生時に引き起こされるバックグラウンドスレッドによって実行される。ステップ１４０２で、バックグラウンドスレッドが次のメモリアドレスを中央バッファ１０２０から選択する。次いでステップ１４０４で、バックグラウンドスレッドが被選択メモリアドレスからデータを読み取り、被選択メモリアドレスに記憶するためにそのデータを不揮発性メモリ１１２に、更にミラーリングターゲットに送る。ステップ１４０６で、バックグラウンドスレッドが被選択メモリアドレスを中央バッファ１０２０から除去する。バックグラウンドスレッドは、ステップ１４０８でメモリアドレスがそれ以上中央バッファ１０２０内にあるかどうかを判定する。中央バッファ１０２０内にメモリアドレスが更にある場合、この方法はステップ１４０２に戻る。メモリアドレスがない場合、バックグラウンドスレッドがステップ１４１０を実行して生成カウンタを１インクリメントする。この方法はステップ１４１０の後で終了する。
【００４１】
本明細書に記載した実施形態は、仮想化コンピュータシステムの不揮発性メモリ１１２内に永続的に記憶されたデータをミラーリングするための技法を提供する。この技法は、オペレーティングシステム及びオペレーティングシステム上で実行されるアプリケーションを有する非仮想化コンピュータシステム内に実装されても良く、個々のアプリケーションは実行中に不揮発性メモリ１１２のページをダーティにし、そのページのダーティにされた部分がミラーリングターゲットに伝送されることを理解すべきである。
【００４２】
更に、ミラーリング中のネットワーク帯域幅を減らすための特定の技法の一部が揮発性メモリ内に記憶されるデータにも適用され得る。例えば、揮発性メモリページのダーティコンテンツがミラーリングターゲットに伝送されるチェックポインティングプロセスでは、図８及び図１１に関して説明した方法を使用し、揮発性メモリページのダーティにされた特定の小領域を追跡し、揮発性メモリページのダーティにされた小領域内のコンテンツだけをミラーリングターゲットに伝送することができる。このようにして、過去のチェックポイントの反復中にミラーリングターゲットに伝送されるページの複製を保存する必要はなく、ダーティにされたページと保存されたページとの差を求める操作を実行する必要がない。その結果、揮発性メモリの空間及びＣＰＵの処理サイクルが節約される。
【００４３】
更なる実施形態は、１つ又は複数のプロセッサと、複数のページへと論理的に分けられたメモリ（一実施形態では不揮発性メモリ）と、キャッシュデータ及びメモリアドレスを記憶するようにそれぞれ構成される複数のクリーンキャッシュライン又はダーティキャッシュラインを含むプロセッサキャッシュとを有するコンピュータシステムにおいてメモリページへの更新をミラーリングする方法を含む。
【００４４】
それらの方法の１つは、（ｉ）ダーティキャッシュライン内に記憶されるキャッシュデータ及びメモリアドレスを読み取り、それと同時にメモリアドレスをバッファ内に記憶し、キャッシュデータをメモリアドレスに記憶するステップと、（ｉｉ）バッファ内に記憶されるメモリアドレスを読み取り、そのメモリアドレスに位置するキャッシュデータを読み取り、そのメモリアドレスに位置するキャッシュデータをリモートコンピュータシステムに伝送することにより、メモリアドレスに記憶されたキャッシュデータをミラーリングするステップとを含む。この方法では、キャッシュラインのそれぞれがメモリページの最小サイズ未満の大きさを有し、ミラーリングするステップがデータ及びメモリアドレスを記憶するステップに対して非同期的である。ミラーリングするステップは周期的に、又はバッファが満杯になるときに引き起こすことができる。加えて、プロセッサキャッシュからダーティキャッシュラインが除去されるとき読み取るステップが引き起こされ、ダーティキャッシュラインは、プロセッサキャッシュをフラッシュする命令に応答して、又はプロセッサキャッシュが満杯になるときプロセッサキャッシュから除去される。
【００４５】
これらの方法の別のものは、（ｉ）新たなキャッシュデータ及び新たなメモリアドレスを用いてプロセッサキャッシュのキャッシュラインを更新するステップと、（ｉｉ）新たなメモリアドレスに新たなキャッシュデータを記憶し、更新されたキャッシュラインの状態が前述の更新の結果クリーンな状態からダーティな状態に遷移したのかどうかに基づき、バッファ内に新たなメモリアドレスを条件付きで記憶するステップと、（ｉｉｉ）新たなメモリアドレスに記憶された新たなキャッシュデータをミラーリングするステップとを含む。この方法では、キャッシュラインのそれぞれがメモリページの最小サイズ未満の大きさを有し、ミラーリングするステップが前述の記憶するステップに対して非同期的である。ミラーリングするステップは周期的に、又はバッファが満杯になるときに引き起こすことができる。別の実施形態によれば、この方法は、キャッシュラインの状態が前述の更新の結果クリーンな状態からダーティな状態に遷移したのかどうかを判定するステップを含み、キャッシュラインの状態が前述の更新の結果クリーンな状態からダーティな状態に遷移した場合は新たなメモリアドレスをバッファ内に記憶し、キャッシュラインの状態が前述の更新の結果クリーンな状態からダーティな状態に遷移しなかった場合は新たなメモリアドレスをバッファ内に記憶しない。
【００４６】
更に別の実施形態は、第１の処理コア及び第１のキャッシュと、第２の処理コア及び第２のキャッシュとを有するコンピュータシステムにおいて不揮発性メモリページへの永続的更新をミラーリングする方法を含む。この方法は、（ｉ）第１のキャッシュ及び第２のキャッシュのキャッシュラインを更新するステップと、（ｉｉ）前述の更新の結果キャッシュラインの状態がクリーンな状態からダーティな状態に遷移する度、更新したキャッシュラインが第１のキャッシュ内にある場合は更新したキャッシュラインのメモリアドレスを第１のバッファ内に記憶し、更新したキャッシュラインが第２のキャッシュ内にある場合は第２のバッファ内に記憶するステップと、（ｉｉｉ）第１のバッファ及び第２のバッファ内に記憶したメモリアドレスにおいて、更新したキャッシュラインのデータを不揮発性メモリ内に記憶し、第１のバッファ及び第２のバッファ内に記憶したメモリアドレスに記憶されている更新したキャッシュラインのデータをミラーリングするステップとを含む。この方法は、（ｉｖ）第１のバッファが満杯になるとき、第１のバッファ内に記憶されたメモリアドレスを中央バッファ内に記憶して第１のバッファをクリアするステップと、（ｖ）第２のバッファが満杯になるとき、第２のバッファ内に記憶されたメモリアドレスを中央バッファ内に記憶して第２のバッファをクリアするステップと、（ｖｉ）中央バッファが空になるとき、第１のバッファ及び第２のバッファ内に記憶されたメモリアドレスを中央バッファ内に記憶し、第１のバッファ及び第２のバッファをクリアするステップとを含み、ミラーリングするステップは、中央バッファ内に記憶されるメモリアドレスを使用して実行される。更に、ミラーリングするステップは、更新したキャッシュラインのデータを記憶するステップに対して非同期的である。
【００４７】
本明細書に記載した様々な実施形態は、コンピュータシステム内に記憶されるデータを用いる様々なコンピュータによって実施される操作を利用することができる。例えばそれらの操作は物理量の物理的操作を必要とする場合があり、必須ではないが通常、それらの量は電気信号又は磁気信号の形を取ることができ、それらの信号又はそれらの信号の表現は記憶し、転送し、結合し、比較し、又は他の方法で操作することができる。更に、かかる操作はしばしば作成、識別、決定、比較等の用語で呼ばれる。本発明の１つ又は複数の実施形態の一部を形成する本明細書に記載した如何なる操作も、有用なマシン操作とすることができる。更に、本発明の１つ又は複数の実施形態は、それらの操作を行うための装置又は機器にも関係する。その機器は、特定の所要の目的のために特別に構築することができ、又はコンピュータ内に記憶されるコンピュータプログラムによって選択的に活性化され若しくは構成される汎用コンピュータでも良い。具体的には、本明細書の教示に従って書かれたコンピュータプログラムと共に様々な汎用マシンを使用することができ、又は所要の操作を行うためにより特化された機器を構築する方が便利な場合もある。
【００４８】
本明細書に記載した様々な実施形態は、携帯端末、マイクロプロセッサシステム、マイクロプロセッサベースの又はプログラム可能な消費者家電、ミニコンピュータ、メインフレームコンピュータ等を含む他のコンピュータシステム構成を使って実施しても良い。
【００４９】
本発明の１つ又は複数の実施形態は、１つ又は複数のコンピュータ可読媒体（例えば有形コンピュータ可読記憶媒体）内に具体化される１つ若しくは複数のコンピュータプログラム又は１つ若しくは複数のコンピュータプログラムモジュールとして実装することができる。コンピュータ可読媒体（例えば有形コンピュータ可読記憶媒体）という用語は、後でコンピュータシステムのコンピュータ可読媒体に入力可能なデータを記憶することができる任意のデータ記憶装置を指し、コンピュータプログラムがコンピュータによって読み取られることを可能にする方法でコンピュータプログラムを具体化する既存の任意の技術、又は後に開発される任意の技術に基づき得る。コンピュータ可読媒体の例には、ハードドライブ、ネットワーク接続ストレージ（ＮＡＳ）、読取専用メモリ、ランダムアクセスメモリ（例えばフラッシュメモリデバイス）、ＣＤ（コンパクトディスク）、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ（デジタル多用途ディスク）、磁気テープ、並びに他の光学的及び非光学的データ記憶装置が含まれる。コンピュータ可読コードが分散された方法で記憶され実行されるように、コンピュータ可読媒体をネットワークに結合されたコンピュータシステムにわたって分散させることもできる。
【００５０】
理解を明確にするために本発明の１つ又は複数の実施形態を幾らか詳しく説明してきたが、特許請求の範囲内で一定の変更及び修正が加えられても良いことが明らかである。従って、説明した実施形態は限定的ではなく例示的と見なすべきであり、特許請求の範囲は本明細書で示す詳細に限定されることはなく、特許請求の範囲及びその等価物の範囲内で修正され得る。特許請求の範囲では、特許請求の範囲内で明示的に定められる場合を除き、要素及び／又はステップが或る特定の操作順序を含意することはない。
【００５１】
単一の例として本明細書に記載したコンポーネント、操作、又は構造について複数の例が提供され得る。最後に、様々なコンポーネント、操作、及びデータストア間の境界は幾らか恣意的であり、特定の操作を特定の例示的構成との関連で解説した。他の機能の割当ても想定しており、本発明の範囲に含まれ得る。慨して、例示的構成の中で別個のコンポーネントとして示した構造及び機能は、複合構造又は複合コンポーネントとして実装することができる。同様に、単一のコンポーネントとして示した構造及び機能を別個のコンポーネントとして実装しても良い。これらの及び他の改変形態、修正形態、追加、及び改善が添付の特許請求の範囲に含まれ得る。
【図１】
0006266767.tif 000002
【図２】
0006266767.tif 000003
【図３】
0006266767.tif 000004
【図４】
0006266767.tif 000005
【図５】
0006266767.tif 000006
【図６】
0006266767.tif 000007
【図７】
0006266767.tif 000008
【図８】
0006266767.tif 000009
【図９】
0006266767.tif 000010
【図１０】
0006266767.tif 000011
【図１１】
0006266767.tif 000012
【図１２】
0006266767.tif 000013
【図１３】
0006266767.tif 000014
【図１４】
0006266767.tif 000015