(57)【特許請求の範囲】
【請求項１】
ブロックベースのストレージサービスを共に実装する複数のストレージノードにおけるストレージノードを実装するシステムであって、
前記ストレージノードは、ページキャッシュ書き込みロギングを実施する、前記ブロックベースのストレージサービスにおける一つ以上のストレージノードのうちのストレージノードであり、前記複数のストレージノードのうちの他のストレージノードは、ページキャッシュ書き込みロギングを実施しないストレージノードであり、
前記システムは、
一つ以上のデータボリュームを保持する一つ以上のブロックベースのストレージデバイスと、
ページキャッシュを備えるシステムメモリであって、前記ページキャッシュが、前記一つ以上のデータボリュームを永続的に更新するために、前記一つ以上のブロックベースのストレージデバイスを周期的にまたは非周期的にフラッシュする、前記システムメモリと、
ページキャッシュ書き込みログを保持する永続ストレージデバイスであって、前記ページキャッシュ書き込みログが、前記ページキャッシュについての更新を記述する複数個のログレコードを保持し、前記複数個のログレコードが、前記ページキャッシュ内のデータの喪失を招くシステム故障の発生時の前記ページキャッシュについての以前の状態を復元するように利用可能である、前記永続ストレージデバイスと、を備えており、
前記ストレージノードは、
前記一つ以上のデータボリュームのうちの特定のデータボリュームについての書き込みリクエストを受信し、
前記書き込みリクエストに関する、前記ページキャッシュ内の複数個のエントリのうちの少なくとも一つの対応するエントリを更新し、
前記ページキャッシュ書き込みログ内の前記少なくとも一つの対応するページキャッシュエントリについての前記更新を記述するログレコードを保存し、かつ
前記ページキャッシュエントリの更新及び前記ログレコードの前記ページキャッシュ書き込みログ内への保存に応答して、前記書き込みリクエストを完了したとして承認する
ように構成されたシステム。
【請求項２】
前記ストレージノードが、さらに、システム故障からのリカバリ時に、
前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスから、前記ログレコード及び前記複数個のログレコードを取得し、かつ
前記ページキャッシュ書き込みログ内に保持された前記ログレコード及び前記複数個のログレコードを利用して、前記システム故障の前の前記ページキャッシュの状態を前記ページキャッシュに書き込むように構成された、請求項１に記載のシステム。
【請求項３】
ストレージノードが、さらに、
前記ページキャッシュ書き込みログについてのトリムイベントを検出し、
前記トリムイベントの検出に応答して、
前記ページキャッシュ書き込みログにおけるトリム位置を特定し、
前記システムメモリからの前記複数個のページキャッシュエントリの少なくともいくつかを前記複数個のブロックベースのストレージデバイスに書き込む一つ以上のフラッシュ動作を実行し、かつ
前記一つ以上のフラッシュ動作の完了時に、前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスの一つ以上の部分を再利用して、前記ページキャッシュについての更新を記述する追加のログレコードを保存するように構成された、請求項１に記載のシステム。
【請求項４】
前記ストレージノードが、ネットワークベースかつブロックベースのストレージサービスの一部として実装され、前記ブロックベースのストレージサービスの一部として実装された少なくとも一つの他のストレージノードが、前記特定のデータボリュームのレプリカを保持し、前記少なくとも一つの他のストレージノードが、前記受信、前記保存、前記更新及び前記承認を実行するように構成された、請求項１に記載のシステム。
【請求項５】
一つ以上のコンピューティングデバイスによって実行することを含む方法であって、
前記一つ以上のコンピューティングデバイスは、ブロックベースのストレージサービスを共に実装する複数のストレージノードにおけるストレージノードを実装し、
前記ストレージノードは、ページキャッシュ書き込みロギングを実施する、前記ブロックベースのストレージサービスにおける一つ以上のストレージノードのうちのストレージノードであり、前記複数のストレージノードのうちの他のストレージノードは、ページキャッシュ書き込みロギングを実施しないストレージノードであり、
前記ストレージノードにおいて、前記ストレージノードに保持された少なくとも一つのブロックベースのストレージデバイスに存続するデータボリュームについての書き込みリクエストを受信することと、
前記書き込みリクエストに関する、前記ストレージノードにおけるシステムメモリに保持されたページキャッシュ内の複数個のエントリのうちの少なくとも一つの対応するエントリを更新することであって、前記ページキャッシュ内の前記複数個のエントリが、前記データボリュームを永続的に更新するために、前記少なくとも一つのブロックベースのストレージデバイスを周期的にまたは非周期的にフラッシュする、前記更新することと、
永続ストレージデバイスに保持された複数個の他のログレコードと共に、前記永続ストレージデバイスに保持されたページキャッシュ書き込みログ内の前記少なくとも一つの対応するページキャッシュエントリについての前記更新を記述するログレコードを保存することとであって、前記ログレコード及び前記複数個の他のログレコードが、前記ページキャッシュ内のデータの喪失を招くシステム故障の発生時の前記ページキャッシュを復元するための、前記更新したページキャッシュエントリを含む前記ページキャッシュの状態を記述する、前記保存することと、
前記ページキャッシュエントリの更新及び前記ログレコードの前記ページキャッシュ書き込みログ内への保存に応答して、前記書き込みリクエストを完了したとして承認することと、
を含む、方法。
【請求項６】
システム故障からのリカバリ時に、
前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスから、前記ログレコード及び前記複数個の他のログレコードを取得することと、
前記ページキャッシュ書き込みログ内に保持された前記ログレコード及び前記複数個の他のログレコードを利用して、前記システム故障の前の前記ページキャッシュの状態を前記ページキャッシュに書き込むことと、をさらに含む、請求項５に記載の方法。
【請求項７】
前記ストレージノードが、前記データボリュームのレプリカを保持する、二つ以上のストレージノードのうちの一つであり、前記二つ以上のストレージノードのうちの、前記ストレージノードと異なる少なくとも一つが、前記データボリュームに関する、書き込みリクエストについてのそれぞれのページキャッシュ書き込みログを保持しない、請求項５に記載の方法。
【請求項８】
前記二つ以上のストレージノードのシステム故障からのリカバリ時に、前記データボリュームについての入出力リクエスト後の処理に使用可能な前記データボリュームの進行中のレプリカを作製するために、前記システム故障の前の前記データボリュームの前記進行中のレプリカを保持するものとして前記それぞれのページキャッシュ書き込みログを保持する、前記二つ以上のストレージノードのうちの一つを特定することをさらに含む、請求項７に記載の方法。
【請求項９】
前記ページキャッシュ書き込みログについてのトリムイベントを検出することと、
前記トリムイベントの検出に応答して、
前記ページキャッシュ書き込みログにおけるトリム位置を特定することと、
前記システムメモリからの前記複数個のページキャッシュエントリの少なくともいくつかを前記少なくとも一つのブロックベースのストレージデバイスに書き込む一つ以上のフラッシュ動作を実行することと、
前記一つ以上のフラッシュ動作の完了時に、前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスの一つ以上の部分を再利用して、前記ページキャッシュについての更新を記述する追加のログレコードを保存することと、をさらに含む、請求項５に記載の方法。
【請求項１０】
前記トリムイベントの検出に応答して、前記一つ以上のフラッシュ動作についてのフラッシュ動作サイズを決定することをさらに含む、請求項９に記載の方法。
【請求項１１】
前記少なくとも一つのブロックベースのストレージデバイスが、前記ストレージノードに保持された複数個のブロックベースのストレージデバイスのうちの少なくとも一つであり、前記方法が、さらに、
前記ストレージノードに保持された前記複数個のブロックベースのストレージデバイスのうちの少なくとも一つの他のブロックベースのストレージデバイスに存続する別のデータボリュームについての別の書き込みリクエストを受信することと、
前記他の書き込みリクエストについての前記更新、前記保存及び前記承認を実行することと、を含む、請求項５に記載の方法。
【請求項１２】
前記方法が、さらに、
前記複数個のストレージノードのうちの前記他のストレージノードを評価して、ページキャッシュ書き込みロギングを実施しない各々の他のストレージノードについての永続性スコアを決定することと、
前記永続性スコアに少なくともある程度基づいて、ページキャッシュ書き込みロギングを実施するための、前記他のストレージノードのうちの一つ以上のストレージノードを選択することと、をブロックベースのストレージサービスコントロールプレーンを実装する一つ以上のコンピューティングデバイスによって実行すること含む、請求項５に記載の方法。
【請求項１３】
前記ストレージノードが、ネットワークベースかつブロックベースのストレージサービスを実装する複数個のストレージノードのうちの一つであり、前記書き込みリクエストが、ネットワークベースの仮想コンピュートサービスによって実装される仮想コンピュートインスタンスから受信され、前記ネットワークベースかつブロックベースのストレージサービス及び前記ネットワークベースの仮想コンピュートサービスが、同じネットワークベースのサービスプロバイダネットワークの一部として共に実装される、請求項５に記載の方法。
【請求項１４】
マスタストレージノードを実装するシステムであって、
前記マスタストレージノードに保持された少なくとも一つのブロックベースのストレージデバイスに存続するデータボリュームについての書き込みリクエストを受信し、
前記書き込みリクエストに関する、前記マスタストレージノードにおけるシステムメモリに保持されたページキャッシュ内の複数個のエントリのうちの少なくとも一つの対応するエントリを更新し、前記ページキャッシュ内の前記複数個のエントリが、前記データボリュームを永続的に更新するために、前記少なくとも一つのブロックベースのストレージデバイスを周期的にまたは非周期的にフラッシュし、
前記少なくとも一つのブロックベースのストレージデバイスとは異なる永続ストレージデバイスに保持された複数個の他のログレコードと共に、前記永続ストレージデバイスに保持されたページキャッシュ書き込みログ内の前記少なくとも一つの対応するページキャッシュエントリについての前記更新を記述するログレコードを保存し、前記ログレコード及び前記複数個の他のログレコードが、前記ページキャッシュ内のデータの喪失を招くシステム故障の発生時の前記ページキャッシュを復元するための、前記更新したページキャッシュエントリを含む前記ページキャッシュの状態を記述し、
前記ページキャッシュエントリの更新及び前記ログレコードの前記ページキャッシュ書き込みログ内への保存に応答して、前記書き込みリクエストを完了したとして承認する
ように構成された前記マスタストレージノードを備え、
前記マスタストレージノードは、前記データボリュームのレプリカを維持する、複数のストレージノードのうちのストレージノードであり、前記複数のストレージノードのうちの他のストレージノードは、前記データボリュームについての書き込みリクエストのための対応するページキャッシュ書き込みログを維持しない
システム。
【請求項１５】
一つ以上のスレーブストレージノードをさらに備えており、前記マスタストレージノード及び前記一つ以上のスレーブストレージノードの各々が、前記データボリュームのそれぞれのレプリカを保持し、前記マスタストレージノード及び前記一つ以上のスレーブストレージノードの各々が、前記受信、前記保存、前記更新及び前記承認を実行する、請求項１４に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
ネットワークにわたるハードウェア資源、ソフトウェア及び情報ストレージの仮想化を動的に共有するための技術に関する近年の大変革は、コンピューティングの信頼性、拡張性及び費用効果を増大した。より具体的には、仮想化の出現を通じた仮想コンピューティング資源及びストレージを要求に応じて提供する能力によって、資源及びストレージを処理する消費者は、知覚したコンピューティング及びストレージニーズに即座に応答してコンピューティング及びストレージ費用を柔軟に構築できるようになった。仮想化によって、顧客は、ハードウェアの製造及び配備の遅延時間及び費用によって必然的に決められるサイクルのプロビジョニングにおいて、固定されたハードウェアを購買またはリースするのではなく、必要な時にプロセッササイクル及びストレージを購入することができる。コンピューティング及びストレージの使用可能性を決定する将来の要求の予測の精度に応じるよりも、ユーザは、必要に応じて比較的瞬時にコンピューティング及びストレージ資源の使用権を購入することができる。
【０００２】
仮想化されたコンピューティング環境は、頻繁に、ブロックベースのストレージによってサポートされる。そのようなブロックベースのストレージは、一連の標準化されたストレージの呼び出しを通じて、ブロックベースのストレージの機能的な曖昧さを、それ自体がサポートするボリュームの構造的及び機能的な細部に与えるさまざまなコンピューティング仮想化と相互作用することができるストレージシステム、及びそれ自体がストレージアベイラビリティを提供する、仮想化において実行するオペレーティングシステムを提供する。しかしながら、仮想化された資源におけるより大きな処理能力と共に、ネットワーク伝播性の増大に伴い、ブロックベースのストレージにおけるＩ／Ｏ要求が増大され得る。Ｉ／Ｏ要求が、サービスリクエストに対してブロックベースのストレージの容量を超える場合には、仮想化されたコンピューティング資源のためのブロックベースのストレージ性能の待ち時間及び／または永続性は、損害を受ける。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態に従う、ブロックベースのストレージにおけるページキャッシュ書き込みロギングを図示する一連のブロック図である。
【図２】いくつかの実施形態に従う、ストレージノードにおいてページキャッシュ書き込みロギングを実施するブロックベースのストレージサービスを含む複数のネットワークベースのサービスを実装するプロバイダネットワークを図示するブロック図である。
【図３】いくつかの実施形態に従う、ストレージノードに実装されるページキャッシュについての更新のためのページキャッシュ書き込みログを実装するストレージノードを図示するブロック図である。
【図４】いくつかの実施形態に従う、ストレージノードにおけるページキャッシュのためのページキャッシュ書き込みログ内のログエントリをトリムするように構成されたストレージノードを図示するブロック図である。
【図５】いくつかの実施形態に従う、ブロックベースのストレージに保持されたデータボリュームについての動的に選択できるページキャッシュ書き込みロギングを図示するブロック図である。
【図６】いくつかの実施形態に従う、ブロックベースのストレージにおけるページキャッシュ書き込みロギングのためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【図７】いくつかの実施形態に従う、ページキャッシュ書き込みログからのページキャッシュリカバリのためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【図８】いくつかの実施形態に従う、ページキャッシュ書き込みログをトリミングするためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【図９】いくつかの実施形態に従う、ページキャッシュ書き込みロギング技術を配備するためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【図１０】いくつかの実施形態に従う、ストレージノードに保持されたデータボリュームにおける永続性特性を動的に変更するためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【図１１】いくつかの実施形態に従う、データボリュームについてのページキャッシュ書き込みロギングを有効にするか無効にするかを決定するためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【図１２】いくつかの実施形態に従う、特定のデータボリュームの永続性特性に従う、特定のデータボリュームにおいて、ストレージノードにおける書き込みリクエストを処理するさまざまな方法及び技術を図示する高レベルフローチャートである。
【図１３】いくつかの実施形態に従う、書き込みロギングが有効化及び無効化されたデータボリュームリカバリのためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【図１４】いくつかの実施形態に従う、例示的なコンピューティングシステムを図示するブロック図である。
【発明を実施するための形態】
【０００４】
いくつかの実施形態及び実例となる図面に関する実施例として実施形態を本明細書に記述するが、当業者は、記述した実施形態または図面に実施形態が限定されないことを認識する。図面及びそれに関する詳細な説明が、開示した特定の形態に実施形態を限定することは意図せず、それどころか、その意図が、添付の特許請求の範囲によって定義される趣旨及び範囲内に収まるすべての変更物、均等物及び代替物を包含できることを理解すべきである。本明細書に使用される見出しは、組織的な目的のみのために使用され、記述または特許請求の範囲を限定するのに使用されることは意味しない。本出願全体を通して使用されるとき、「ｍａｙ」という語は、許容的な意味（すなわち、可能性を有する意味）において使用され、義務的な意味（すなわち、必須の意味）ではない。同様に、「ｉｎｃｌｕｄｅ」、「ｉｎｃｌｕｄｉｎｇ」及び「ｉｎｃｌｕｄｅｓ」という語は、含むが、それに限定されないことを意味する。
【０００５】
本明細書に記述するシステム及び方法は、ブロックベースのストレージにおいてページキャッシュ書き込みロギングを実施することができる。ブロックベースのストレージシステムは、通常、ページキャッシュ内に保持されたデータボリュームについての更新を（システムメモリにおいて）迅速に保存するページキャッシュを実装する。最終的に、ページキャッシュは、永続ストレージを更新するために、ブロックベースのストレージデバイスをフラッシュすることができる。しかしながら、システムメモリはシステム故障の発生時には永続しないので、ページキャッシュ内のみに保存された書き込みは、永続的ではなく、喪失することがある。ページキャッシュ内のデータの喪失を招く故障の発生時のページキャッシュの状態を保存するために、ストレージノードにおいてページキャッシュ書き込みロギングを実施することができる。いくつかの実施形態では、ページキャッシュ書き込みロギングは、同一のストレージシステムに保持された種々のデータボリュームにおいて選択的に実施することができる。対応するデータボリュームにおけるページキャッシュ書き込みロギングが有効であるか無効であるかを表現する、それぞれのデータボリュームについての永続性特性は、ページキャッシュ書き込みログにおいてログすべき入ってくる書き込みリクエストの速度などの、ストレージシステムにおけるさまざまな状況に従い動的に変更することができる。
【０００６】
図１は、いくつかの実施形態に従う、ブロックベースのストレージにおけるページキャッシュ書き込みロギングを図示する一連のブロック図である。１０２に示すように、（図１４に関して後述するシステム２０００などの、汎用コンピューティングシステムであっても良い）ブロックストレージサーバ１００が、ブロックストレージサーバに付随する一つ以上のブロックベースのストレージデバイスにデータボリューム１２０を保存することができる。データボリューム１２０に関する書き込みリクエスト１４２が受信されると、Ｉ／Ｏマネージャ１０２は、それぞれのページまたはエントリ１４６についての更新をページキャッシュ１４０に送信し、それと並行またはほぼ並行して、書き込まれたログレコード１４４を、（ブロックベースのストレージデバイスの保存するボリューム１２０と分離しても良い）永続ストレージデバイスに実装できるページキャッシュ書き込みログ１３０に送信することができる。さまざまな実施形態において、ログレコードは、ページキャッシュ１４０の特定のページまたはエントリについての更新を記述することができる。いくつかの実施形態では、ログレコードは、ページキャッシュ書き込みログ１３０に連続的に保存することができる。ログレコード１４４の保存及びページキャッシュ１４６の更新に応答して、書き込みリクエストを承認することができる。その後、ページキャッシュ内のページをフラッシュして１４８、ブロックベースのストレージデバイス内のボリューム１２０を更新することができる。いくつかの実施形態では、ボリューム（複数可）１２０内に存在し続けるページについての更新を記述するログレコードを再利用かつ使用可能にして、追加のログレコードを保存するように、ページキャッシュ書き込みログ１３０に保存されたログレコードを、ページキャッシュからのフラッシュ動作１４８に基づいて除去またはトリムすることができる。
【０００７】
シーン１０４に図示するように、システム故障１５２は、ページキャッシュデータの喪失を招く。したがって、ページキャッシュデータ内の書き込みリクエストは、永続ストレージ内のボリューム（複数可）１２０にフラッシュできないので、喪失される。いくつかの実施形態では、Ｉ／Ｏマネージャ１３２は、ページキャッシュ書き込みログ１３０からログレコード１３２を取得し、ページキャッシュについての更新１３４を再生してシステム故障の前のページキャッシュの状態を復元することによって、ページキャッシュデータをリカバリすることができる。
【０００８】
いくつかの実施形態では、ページキャッシュ書き込みロギングは、ボリューム基準において実施することができる。例えば、いくつかの実施形態では、ページキャッシュ書き込みロギングが有効であるかどうかを示す、データボリュームについての永続性特性を、ストレージノードにおける変化する状況に順応するように動的に変更することができる。例えば、いくつかの実施形態では、Ｉ／Ｏマネージャ１０２は、ページキャッシュ書き込みログ１３０にログすべき入ってくる書き込みリクエストの速度を観測し、そしてそれぞれの一つ以上のデータボリューム１２０についての一つ以上の永続性特性を動的に変更することができる。例として、特定のデータボリューム１２０についてのページキャッシュ書き込みロギングが無効である場合には、更新を記述するログレコードをページキャッシュ書き込みログ内に保存せずに、データボリュームに向けられた書き込みリクエスト１４２を完了する（例えば、ページキャッシュ１４０を更新する）ことができる。同様に、ページキャッシュ書き込みロギングが有効である場合には、ページキャッシュ書き込みロギングの有効化の後で受信された書き込みリクエストは、シーン１０２に図示するように、書き込みを完了したとして承認する前に、実行されるページキャッシュ１４０についての更新と、ページキャッシュ書き込みログ１３０内に保存されたログレコードとの両方を有することができる。いくつかの実施形態では、種々の永続性特性を有するデータボリュームについてのリカバリ動作は、新規の書き込みリクエストをより迅速に受信するのに使用可能なようにページキャッシュ書き込みロギングが有効にされたそれらのデータボリューム、またはページキャッシュ書き込みロギングが無効にされたそれらのデータボリュームよりも少なく後に続くリカバリ動作に応じて変化し得る。
【０００９】
前の記述が限定することを意図せず、単にブロックベースのストレージにおけるページキャッシュ書き込みロギングの実施例として提供されることに留意されたい。さまざまな他のコンポーネントが、ロギング、リカバリまたは書き込みリクエストの処理を推進し、またはそれに関与することができる。他の異なる、例えば、ストレージノードの数、データボリュームまたは永続性スキーム（例えば、複数のノードへのデータボリュームの複製）などは、図１に図示するものと異なっても良い。
【００１０】
本明細書は、ページキャッシュ書き込みロギングを実施し、データボリュームについての永続性特性を動的に変更できる、ブロックベースのストレージサービスプロバイダの概要から始まる。次に、種々のコンポーネント／モジュール、またはブロックベースのストレージプロバイダの一部として用いることができるコンポーネント／モジュールの配置を含む、ブロックベースのストレージサービスプロバイダのさまざまな実施例が論じられる。次いでページキャッシュ書き込みロギングを実施し、データボリュームについての永続性特性を動的に変更するための多くの異なる方法及び技術が論じられ、そのいくつかが添付のフローチャートに図示される。最後に、さまざまなコンポーネント、モジュール、システム、デバイス及び／またはノードを実装できる例示的なコンピューティングシステムの記述が提供される。本明細書全体を通してさまざまな実施例が提供される。
【００１１】
図２は、いくつかの実施形態に従う、スナップショット動作中に最適化された書き込み動作を実施するブロックベースのストレージサービスを含む複数のネットワークベースのサービスを実装するプロバイダネットワークを図示するブロック図である。プロバイダネットワーク２００は、インターネット及び／または他のネットワークを介してクライアント２１０にアクセス可能な一つ以上のサービス（例えば、さまざまなタイプのクラウドベースのコンピューティングまたはストレージ）を提供するために、会社または公共部門組織などの事業体によって設定することができる。プロバイダネットワーク２００は、プロバイダネットワーク２００によって提供されるインフラストラクチャならびにサービスを実装及び分配するのに必要な、物理的な及び／または仮想化されたコンピュータサーバ、ストレージデバイス、ネットワーキング機器などの集合（例えば、図１４に関して後述するコンピューティングシステム２０００）などのさまざまな資源プールをホストする多数のデータセンタを含むことができる。いくつかの実施形態では、プロバイダネットワーク２００は、仮想コンピュートサービス２３０などのコンピューティング資源、ブロックベースのストレージサービス２２０及び（オブジェクト／キー値ベースのデータストアなどのさまざまなストレージタイプ、またはさまざまなタイプのデータベースシステムを含み得る）他のストレージサービス２４０などのストレージサービス、ならびに／または任意の他のタイプのネットワークベースのサービス２５０を提供することができる。クライアント２１０は、プロバイダネットワーク２００によって提供されたこれらのさまざまなサービスに、ネットワーク２６０を介してアクセスすることができる。同じ様に、ネットワークベースのサービスは、それ自体が互いと通信しかつ／または互いを使用することによって、種々のサービスを提供することができる。例えば、仮想または物理的なコンピュートインスタンスまたはストレージインスタンスなどの「インスタンス」と呼ばれるユニットにおいてクライアント２１０に提供されるコンピューティング資源は、特定のデータボリューム２２６を使用して、仮想ブロックストレージをコンピュートインスタンスに提供することができる。
【００１２】
上で述べたように、仮想コンピュートサービス２３０は、さまざまなコンピュートインスタンスをクライアント２１０に提供することができる。仮想コンピュートインスタンスは、例えば、（ＣＰＵのタイプ及び数、メインメモリサイズなどを示すことによって規定され得る）規定の計算能力、及び規定のソフトウェアスタック（例えば、順にハイパーバイザのトップで動作できる、オペレーティングシステムの特定のバージョン）を有する一つ以上のサーバを備えることができる。種々の実施形態において、多くの異なるタイプのコンピューティングデバイスを、仮想コンピュートサービス２３０のコンピュートインスタンスを実装するために、個々にまたは組み合わせて使用することができ、これは汎用または専用コンピュータサーバ、ストレージデバイス、ネットワークデバイスなどを含む。いくつかの実施形態では、インスタンスクライアント２１０または他の任意の他のユーザは、ネットワークトラフィックをコンピュートインスタンスに導くように設定する（かつ／または権限を付与する）ことができる。さまざまな実施形態において、コンピュートインスタンスは、さまざまな動作を実行するための永続性のブロックベースのストレージを取得するために、ブロックベースのストレージサービス２２０によって提供された一つ以上のデータボリューム２２６に付随またはマッピングすることができる。
【００１３】
コンピュートインスタンスは、例えば、クライアント２１０がインスタンスにアクセスする必要がない、クライアントアプリケーションの実行に適した、アプリケーションサーバインスタンス、Ｊａｖａ（商標）仮想マシン（ＪＶＭｓ）、汎用または専用オペレーティングシステム、例えば、Ｒｕｂｙ、Ｐｅｒｌ、Ｐｙｔｈｏｎ、Ｃ、Ｃ＋＋などの、さまざまな解釈またはコンパイルされたプログラミング言語をサポートするプラットフォーム、または高性能コンピューティングプラットフォーム）などの様々な異なるプラットフォームを動作または実装することができる。いくつかの実施形態では、コンピュートインスタンスは、予期される稼働時間の比率に基づいた種々のタイプまたは構成を有する。特定のコンピュートインスタンスの稼働時間の比率は、インスタンスがリザーブされている全時間に対する、インスタンスが作動する時間の比として定義することができる。いくつかの実施態様において、稼働時間の比率は、ユーティライゼーションとも称され得る。クライアントが、インスタンスがリザーブされている時間のうちの比較的小さい割合（例えば、年間のリザーベーションの３０％〜３５％）コンピュートインスタンスを使用することを予期する場合には、クライアントは、Ｌｏｗ  Ｕｐｔｉｍｅ  Ｒａｔｉｏインスタンスとしてインスタンスをリザーブし、関連する価格ポリシに従う割引された１時間当たりの使用料金を支払うことを決定できる。クライアントが、時間の大半においてインスタンスを必要とする定常状態負荷を有することを予期する場合には、クライアントは、Ｈｉｇｈ  Ｕｐｔｉｍｅ  Ｒａｔｉｏインスタンスをリザーブし、均一なより低い１時間当たりの使用料金を支払う可能性があり得る。ただし、いくつかの実施形態では、価格ポリシに従い、１時間当たりの料金は、実際の使用時間にかかわらず、リザーベーションの全期間に対して請求され得る。同様に、いくつかの実施形態では、前金で払う費用及び時間当たりの費用が、対応する価格ポリシに従う、対応するＨｉｇｈ  Ｕｐｔｉｍｅ  Ｒａｔｉｏの費用とＬｏｗ  Ｕｐｔｉｍｅ  Ｒａｔｉｏの費用との間に収まるところのＭｅｄｉｕｍ  Ｕｐｔｉｍｅ  Ｒａｔｉｏインスタンスについてのオプションをサポートすることができる。
【００１４】
コンピュートインスタンス構成は、コンピュートインテンシブアプリケーション（例えば、高トラフィックウェブアプリケーション、広告サービング、バッチ処理、ビデオのコード化、分散分析論、高エネルギー物理学、ゲノム分析及び計算流体力学）のための計算作業負荷、グラフィックインテンシブの作業負荷（例えば、ゲームストリーミング、３Ｄアプリケーションストリーミング、サーバーサイドのグラフィックス作業負荷、レンダリング、財務モデリング及び工学的設計）、メモリインテンシブの作業負荷（例えば、高性能データベース、分散メモリキャッシュ、メモリ内分析、ゲノムアセンブリ及び分析）、及びストレージを最適化した作業負荷（例えば、データウェアハウジング及びクラスタファイルシステム）などの汎用または特定の目的のコンピュートインスタンスも含むことができる。コンピュートインスタンスのサイズ、例えば、特定の数の仮想ＣＰＵコア、メモリ、キャッシュ、ストレージ、ならびに任意の他の性能特性。コンピュートインスタンスの配置は、特定のデータセンタ内でのそれらの位置、使用可能ゾーン、ジオグラフィック、位置など、及び（リザーブされたコンピュートインスタンスの場合には）リザーベーション期間の長さも含むことができる。
【００１５】
さまざまな実施形態において、プロバイダネットワーク２００は、ストレージ動作を実行するためのブロックベースのストレージサービス２２０も実装することができる。ブロックベースのストレージサービス２２０は、複数の独立したストレージノード２２４ａ、２２４ｂ、２２４ｃ〜２２４ｎのプールから構成するストレージシステム（例えば、サーバブロックデータストレージシステム）であり、データボリュームの一つ以上のセットまたはデータボリューム（複数可）２２６ａ、２２６ｂ、２２６ｃ〜２２６ｎに保存するためのブロックレベルストレージを提供する。データボリューム２２６は、特定のクライアントにマッピングし、論理ブロックの隣接するセットとして仮想ブロックベースのストレージ（例えば、ハードディスクストレージまたは他の永続ストレージ）を提供することができる。いくつかの実施形態では、データボリューム２２６は、スナップショット動作または複製動作などの他のブロックストレージの動作を実行するための（一つ以上のデータブロックを含む）複数のデータチャンクに分割することができる。
【００１６】
データボリューム２２６のボリュームスナップショットは、データボリューム２２６の状態についての固定されたポイントインタイム表示であっても良い。いくつかの実施形態では、ボリュームスナップショット２４２を、別のストレージサービス２４０などの、データボリュームを保持するストレージノード２２４から遠隔に保存することができる。スナップショット動作は、所与のデータボリュームのスナップショットを、他のストレージサービス２４０内のリモートスナップショットデータストアなどの別のストレージ位置に送信、複写及び／または別の方法で保存するように実行できる。
【００１７】
ブロックベースのストレージサービス２２０は、ブロックベースのストレージサービス２２０の動作を援助するためのブロックベースのストレージサービスコントロールプレーン２２２を実装することができる。さまざまな実施形態において、ブロックベースのストレージサービスコントロールプレーン２２２は、仮想コンピュートサービス２３０及び／若しくはプロバイダネットワーク２００内部に位置付けられた他のネットワークベースのサービス、及び／若しくは一つ以上の他のデータセンタ内部に位置付けられた任意選択のコンピューティングシステム（図示せず）、またはネットワーク２６０を通じて使用可能なプロバイダネットワーク２００外部の他のコンピューティングシステムによって提供されたコンピュートインスタンスを実行するプログラムなどのブロックデータストレージの利用の管理においてクライアントを援助する。データボリューム２２６へのアクセスは、ブロックデータトランザクション命令に応答して、プロバイダネットワーク２００内部の内部ネットワークを介して、またはネットワーク２６０を介して外部からもたらすことができる。
【００１８】
ブロックベースのストレージサービスコントロールプレーン２２２は、ユーザアカウントの管理（例えば、作製、削除、請求書作成、支払いの収集など）を含む、ブロックレベルストレージ機能性の提供に関連する様々なサービスを提供することができる。ブロックベースのストレージサービスコントロールプレーン２２２は、さらに、構成リクエストに応答して、データボリューム２２６の作製、使用及び削除に関連するサービスを提供することができる。ブロックベースのストレージサービスコントロールプレーン２２２は、他のストレージサービス２４０におけるボリュームスナップショット２４２の作製、使用及び削除に関連するサービスも提供することができる。ブロックベースのストレージサービスコントロールプレーン２２２は、性能の収集及び処理、ならびにデータボリューム２２６及びそれらのボリュームのスナップショット２４２の使用に関連するデータの検査に関連するサービスも提供することができる。
【００１９】
上で述べたように、プロバイダネットワーク２００は、別のストレージサービス２４０も実装することができる。他のストレージサービス２４０は、ブロックベースのストレージサービス２２０によって提供されるものとして、同じまたは異なるタイプのストレージとして提供することができる。例えば、いくつかの実施形態では、他のストレージサービス２４０は、データをデータオブジェクトとして保存及び管理することができるオブジェクトベースのストレージサービスを提供できる。例えば、さまざまなデータボリューム２２６のボリュームスナップショット２４２を、特定のデータボリューム２２６についてのスナップショットオブジェクトとして保存することができる。プロバイダネットワーク２００は、他のストレージサービス２４０に加えて、さまざまな異なるタイプの分析に関するもの、計算に関するもの、ストレージ、またはクライアント２１０に割り当てられる他のネットワークベースのシステムを含むことができる他のネットワークベースのサービス２５０、ならびにさまざまなタスクを実行またはリクエストするためのプロバイダネットワーク２００の他のサービス（例えば、ブロックベースのストレージサービス２２０、仮想コンピュートサービス２３０及び／または他のストレージサービス２４０）も実装することができる。
【００２０】
クライアント２１０は、ネットワークプロバイダ２００にリクエストを提示するように構成可能な任意のタイプのクライアントを包含し得る。例えば、所与のクライアント２１０は、適切なバージョンのウェブブラウザを含むことができ、またはウェブブラウザによって提供された実行環境の拡張部としてまたはその内部において実行するように構成された、プラグインモジュール若しくは他のタイプのコードモジュールを含むことができる。代替的に、クライアント２１０は、データベースアプリケーション（または、そのユーザインターフェース）、メディアアプリケーション、オフィスアプリケーション、またはコンピュートインスタンス、データボリューム２２６若しくはさまざまな動作を実行するために、プロバイダネットワーク２００内の他のネットワークベースのサービスを使用できる任意の他のアプリケーションなどのアプリケーションを包含することができる。いくつかの実施形態では、そのようなアプリケーションは、すべてのタイプのネットワークベースのデータに対するフルブラウザサポートを必ずしも実施しなくても、ネットワークベースのサービスリクエストを生成及び処理するための（例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）の適切なバージョンのための）十分なプロトコルサポートを含むことができる。いくつかの実施形態では、クライアント２１０は、Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（ＲＥＳＴ）スタイルのネットワークベースのサービスアーキテクチャ、ドキュメント若しくはメッセージベースかつネットワークベースのサービスアーキテクチャ、または別の適切なネットワークベースのサービスアーキテクチャに従い、ネットワークベースのサービスリクエストを生成するように構成できる。いくつかの実施形態では、クライアント２１０（例えば、計算クライアント）は、コンピュートインスタンスによって提供された計算資源、またはデータボリューム２２６によって提供されたブロックストレージを利用してクライアント２１０において実装されるアプリケーションに明白なように、コンピュートインスタンスまたはデータボリューム２２６へのアクセスを提供するように構成できる。
【００２１】
クライアント２１０は、外部ネットワーク２６０を通じて、ネットワークベースのサービスリクエストをプロバイダネットワーク２００に伝達することができる。さまざまな実施形態において、外部ネットワーク２６０は、クライアント２１０とプロバイダネットワーク２００との間のネットワークベースの通信を確立するのに必須の、ネットワーキングハードウェアとプロトコルとの任意の適切な組み合わせを包含することができる。例えば、ネットワーク２６０は、通常、インターネットを共同で実施するさまざまな電気通信ネットワーク及びサービスプロバイダを包含することができる。ネットワーク２６０は、ローカルエリアネットワーク（ＬＡＮ）などのプライベートネットワークまたは広域ネットワーク（ＷＡＮ）、ならびにパブリックまたはプライベート無線ネットワークも含むことができる。例えば、所与のクライアント２１０及びプロバイダネットワーク２００の両方は、それぞれ、独自の内部ネットワークを有する企業内部にプロビジョンすることができる。そのような実施形態では、ネットワーク２６０は、所与のクライアント２１０とインターネットとの間、ならびにインターネットとプロバイダネットワーク２００との間のネットワークリングの確立に必須のハードウェア（例えば、モデム、ルータ、スイッチ、負荷分散装置、プロキシサーバなど）、及びソフトウェア（例えば、プロトコルスタック、財務会計ソフトウェア、ファイアウォール／セキュリティソフトウェアなど）を含むことができる。いくつかの実施形態では、クライアント２１０が、公衆インターネットではなく、プライベートネットワークを使用してプロバイダネットワーク２００と通信できることに留意されたい。
【００２２】
図３は、いくつかの実施形態に従う、ストレージノードに実装されるページキャッシュについての更新のためのページキャッシュ書き込みログを実装し、データボリュームについての永続性特性を動的に変更するストレージノードを図示するブロック図である。ストレージノード３１０ａ、３１０ｂ、３１０ｃ〜３１０ｎなどの複数のストレージノードを、ブロックベースのストレージサービスを提供するために実装できる。ストレージノード３１０は、ストレージサーバまたは他のコンピューティングシステム（例えば、図１４に関して後述するコンピューティングシステム２０００）などの一つ以上のコンピューティングシステムまたはデバイスであっても良い。各ストレージノード３１０は、データボリュームのそれぞれのレプリカを保持することができる。例として、ストレージノード３１０ａは、データボリューム３１２ａ、３１２ｂ、３１２ｃ、３１２ｄ〜３１２ｎを保持し、ストレージノード３１０ｂは、データボリューム３１４ａ、３１４ｂ、３１４ｃ、３１４ｄ〜３１４ｎを保持し、ストレージノード３１０ｃは、データボリューム３１６ａ、３１６ｂ、３１６ｃ、３１６ｄ〜３１６ｎを保持し、そしてデータボリューム３１８ａ、３１８ｂ、３１８ｃ、３１８ｄ〜３１８ｎを保持するストレージノード３１０ｎまで存在する。ストレージノード３１０は、等しい数のデータボリュームを有するものとして描写したが、ストレージノードに保持されるデータボリュームの数は、あるストレージノード３１０と他のストレージノード３１０とで異なっても良い。いくつかの実施形態では、いくつかのデータボリュームは、他のデータボリュームとサイズが異なっても良い。ストレージノード３１０は、マルチテナントストレージも提供することができる。例えば、いくつかの実施形態では、ストレージノード３１０ｃに保持されたデータボリューム３１６ａを、ブロックベースのストレージサービス２２０のあるアカウントにおいて保持し、その一方で、これもストレージノード３１０ｃに保持されたデータボリューム３１６ｂを、異なるアカウントにおいて保持することができる。ストレージノード３１０は、それぞれのストレージノードを実装するコンピューティングシステムまたはデバイスに直接に付随できる一つ以上のブロックベースのストレージデバイス（例えば、ハードディスクドライブ、ソリッドステートドライブなど）内に、それぞれのデータボリュームを存続させることができる。
【００２３】
ブロックベースのストレージサービス２２０は、様々な異なる様式においてデータボリュームを管理及び保持することができる。データボリュームの同じレプリカを保持する二つ以上のストレージノードの間で、いくつかのデータボリュームについて異なる永続性スキームを実装することができる。例えば、データボリュームについての単一障害点を除去することによってデータボリュームの永続性を増大させるために、例えば、異なるタイプのミラーリング及び／または複製技術（例えば、ＲＡＩＤ  １）を実施することができる。データボリュームへのアクセスを提供するために、ストレージノードは、データボリュームのレプリカを保持する二つ以上のストレージノードの間で、書き込みリクエストなどのＩ／Ｏリクエストを調整することができる。例えば、所与のデータボリューム３１２ａに関して、ストレージノード３１０ａは、マスタストレージノードとしての機能を果たすことができる。さまざまな実施形態において、マスタストレージノードは、データボリュームのクライアントからのリクエスト（例えば、Ｉ／Ｏリクエスト）を受信及び処理することができる。したがって、ストレージノード３１０ａは、書き込みリクエストなどのＩ／Ｏリクエストの複製、またはスレーブストレージノードとしての機能を果たす一つ以上の他のストレージノードにおけるデータボリューム３１２ａについての任意の他の変化または変更を調整することができる。例として、ストレージノード３１０ｃは、データボリューム３１２ａのレプリカであるデータボリューム３１６ｄを保持することができる。したがって、ストレージノード３１０ａにおいてデータボリューム３１２ａについての書き込みリクエストが受信されたときに、ストレージノード３１０ａは、書き込みリクエストをストレージノード３１０ｃに転送し、ストレージノード３１０において書き込みリクエストを完了する前に、ストレージノード３１０ｃが書き込みリクエストを完了したとして承認するまで待機することができる。マスタストレージノードは、スナップショット動作または他のＩ／Ｏ動作（例えば、読み出しリクエストの供給）のようなデータボリュームについての他の動作を指図することができる。
【００２４】
いくつかの実施形態では、マスタ及びスレーブストレージノードの役割を、データボリュームごとに割り当てることができることに留意されたい。例えば、ストレージノード３１０ａに保持されたデータボリューム３１２ａに関して、ストレージノード３１０ａは、マスタストレージノードとしての機能を果たすことができる。一方で、ストレージノード３１０ａに保持された、データボリューム３１２ｂなどの別のデータボリュームに関して、ストレージノード３１０ａは、スレーブストレージノードとしての機能を果たすことができる。
【００２５】
さまざまな実施形態において、ストレージノード３１０は、各々が、それぞれのページキャッシュを実装することができる。ページキャッシュは、それぞれのストレージノードに保持されたデータボリューム３１２のうちの一つからのページまたはデータの他のグループ化を保存するシステムメモリまたは他のメモリデバイスの一部であっても良い。データボリュームのリクエストされたデータの一部を保持するブロックベースのストレージデバイスに直接に書き込むまたはそれから読み出す代わりに、ページキャッシュを更新しても良い。例えば、データボリュームの一部についての読み出しリクエストが受信された場合に、まず、データがページキャッシュ内に存在しているか否かを決定することができる。データが存在する場合には、ページキャッシュからデータを読み出すことができる。データが存在しない場合には、データボリュームのリクエストされたデータの一部を保持するそれぞれのブロックベースのストレージデバイスからデータを検索し、将来の使用のためにページキャッシュに書き込むことができる。同様に、永続ブロックストレージに保持されたデータボリュームの方に導かれた書き込みリクエストを、ページキャッシュにおいて最初に完了することができる。受信された書き込みリクエストに関する、書き込むべきデータに対応するページキャッシュエントリ（例えば、ページキャッシュ内に既に保持されているデータボリュームの一部）を、書き込みリクエストに従い更新することができる。同様に、書き込みリクエストによって変更すべきデータがページキャッシュ内に存在しない場合には、最初に、データが存続しているブロックベースのストレージデバイスからデータを取得し、ページキャッシュ内の新規のページキャッシュエントリに書き込み、次に、書き込みリクエストに従い更新することができる。ページキャッシュ技術は、当業者に周知であり、したがって、前述の実施例は、他のページキャッシュ技術に関して限定することは意図しない。
【００２６】
さまざまな実施形態において、ストレージノード３１０は、ページキャッシュ書き込みログ３２０ａ、３２０ｂ、３２０ｃ〜３２０ｎなどのそれぞれのページキャッシュ書き込みログを実装することができる。ページキャッシュ書き込みログは、ページキャッシュ３３０内に保持されたデータを変更する書き込みリクエストなどの、それぞれのページキャッシュについての更新を記述するログレコードを保存することができる。したがって、ページキャッシュ３３０内のデータの喪失を招くシステムまたは他の故障の発生時に、ページキャッシュ書き込みログ３２０内のログレコードを使用して、ページキャッシュを故障前の状態に復元することができる。いくつかの実施形態では、ログレコードは、ページキャッシュ３３０において更新を行う順序、例えば、書き込みリクエスト１Ａを受信した順序、実行した順序、及び対応するログレコード１Ａを保存した順序に従い、連続的に保存することができる。次に、書き込みリクエスト１Ｂを受信して実行し、対応するログレコード１Ｂを保存することなどを行う。ログレコードを連続的に保存することによって、ログレコードを、特定の時点におけるページキャッシュの状態を生成するために保存した順序で、再生または再利用することができる。
【００２７】
さらに、ログレコードのシーケンシャル保存によって、ログレコードを保存するための書き込み待ち時間を短縮することができる。ページキャッシュ書き込みログ３２０は、永続ストレージデバイス（例えば、ハードディスクドライブ、ソリッドステートドライブ（ＳＳＤ）または他のブロックベースのストレージデバイス）として実装することができる。いくつかの実施形態では、ページキャッシュ書き込みログ３２０は、不揮発性ランダムアクセスメモリ（ＮＶ  ＲＡＭ）、バッテリまたは容量バックのメモリまたは他のタイプのメモリスタベースの抵抗性ランダムアクセスメモリ（ＲｅＲＡＭ）、三次元ＮＡＮＤ技術、強誘電体ＲＡＭ、磁気抵抗ＲＡＭ（ＭＲＡＭ）、または任意のさまざまなタイプの相変化メモリ（ＰＣＭ）などの永続メモリデバイスにおいて実施することができる。そのようなタイプの永続ストレージデバイスへのシーケンシャル書き込みは、多くの場合、ランダムアクセスの書き込みよりも速い。さまざまな実施形態において、ページキャッシュ書き込みログ３２０は、ストレージノードのための専用ブロックストレージデバイスに実装することができる。いくつかの実施形態では、ページキャッシュ書き込みログが存続する永続ストレージデバイスを、ストレージノードにおけるデータボリュームが存続するブロックベースのストレージデバイスから分離することができる。
【００２８】
ストレージノード３１０は、Ｉ／Ｏマネージャ３４０ａ、３４０ｂ、３４０ｃ〜３４０ｎなどのそれぞれのＩ／Ｏマネージャを実装することができる。Ｉ／Ｏマネージャ３４０は、特定のストレージノードに保持されたデータボリュームの方に導かれたＩ／Ｏリクエストに対処することができる。したがって、例えば、Ｉ／Ｏマネージャ３４０ｂは、ストレージノード３１０ｂにおいてボリューム３１４ｂについての書き込みリクエストを処理及びそれに対処することができる。Ｉ／Ｏマネージャ３４０は、ブロックベースのストレージサービスアプリケーションプログラミングインターフェース（ＡＰＩ）及び／またはインターネットスモールコンピュータシステムインタフェース（ｉＳＣＳＩ）などの他の通信プロトコルに従いＩ／Ｏリクエストを処理するように構成できる。いくつかの実施形態では、Ｉ／Ｏマネージャ３４０は、ログ管理３４２ａ、３４２ｂ、３４２ｃ〜３４２ｎなどのそれぞれのログ管理コンポーネントを実装することができる。ログ管理コンポーネントは、図４、図７及び図８に関してさらなる詳細を後述するような、ログレコードに少なくともある程度基づいたログレコードのトリミング及び／またはページキャッシュリカバリの実行などのさまざまなログ管理機能を実行することができる。
【００２９】
図４は、いくつかの実施形態に従う、ストレージノードにおけるページキャッシュのためのページキャッシュ書き込みログ内のログエントリをトリムするように構成されたストレージノードを図示するブロック図である。Ｉ／Ｏマネージャ４２０に実装されるログ管理モジュール４２２が、ストレージノード４０２におけるページキャッシュ書き込みログ４００についてのログ動作を制御することができる。ログ管理モジュール４２２は、（例えば、図８に関して後述するなどのトリムイベントを検出して）トリミング動作を実行する時を決定することができる。ログ管理モジュールは、最初に、トリミング動作を開始したときのログ４００における点などの、ログにおけるトリム点をマーク４１２することができる。隠れているログレコード４１０は、トリム点の前に保存されたそれらのログレコードであり、したがって、（ページキャッシュが完全にフラッシュされた場合には、維持する必要がないので）トリムするのに適格である。ログ管理モジュール４１４は、キャッシュフラッシュ４１４を開始するようにページキャッシュ４３０に命令することができる。一つ以上のフラッシュ動作は、ボリューム４４０ａ、４４０ｂ〜４４０ｎを保持するそれぞれのブロックベースのストレージデバイスへ、４３２に示すようなページキャッシュエントリのフラッシュを実行できる。ページキャッシュエントリがフラッシュされた時点で、データボリューム４４０を保持するブロックベースのストレージデバイスは、ページキャッシュ４３０に以前に保存した完了した書き込み動作を永続的に保存することができる。いくつかの実施形態では、ログ管理モジュール４２２は、一度にフラッシュされるページキャッシュの一部を増大または減少するようにフラッシュ動作のサイズを決定することができる。ログ管理モジュールは、キャッシュフラッシュが完了したことの表示４１６を受信した時点で、追加のログレコードのためのスペースを使用可能にして、ログトリム点４１８の前のログレコードを再利用する（例えば、削除及び使用可能なものとしてマークする）ことができる。
【００３０】
図５は、いくつかの実施形態に従う、ブロックベースのストレージに保持されたデータボリュームについての選択できるページキャッシュ書き込みロギングを図示するブロック図である。上で述べたように、いくつかの実施形態では、ページキャッシュ書き込みロギングは、データボリューム基準において有効または無効にすることができる。Ｉ／Ｏマネージャ４２０において受信された書き込み（複数可）５０２は、ログ管理モジュール４２２を通って導くことができる。ログ管理モジュール４２２は、（ページキャッシュ書き込みロギングが有効であるか無効であるかを示す、）特定のデータボリュームについての永続性特性を決定するように構成できる。図示するように、実施例では、ボリュームコントロール５２０ｂ及び５２０ｃは、書き込みリクエスト５０４についてのページキャッシュロギングがページキャッシュ書き込みログ４００に進むことを阻止する。一方で、ページキャッシュ書き込みロギングを可能にする有効な永続性特性をもつデータボリュームの方に導かれた他の書き込み５０４は、５０６を通過して、ログレコード５０８としてページキャッシュ書き込みログ４００に書き込まれる。
【００３１】
いくつかの実施形態では、図１０及び図１１に関して後述するように、ボリュームログ管理４２２は、データボリュームについての永続性特性の動的変更を実行することができる。例えば、Ｉ／Ｏマネージャ４２０及び／またはログ管理モジュール４２２は、ログすべき入ってくる書き込みリクエストの速度を観測し、入ってくる速度に基づいて一つ以上のデータボリュームの永続性特性を動的に変更することができる。ログ管理４２２において受信されたコントロールプレーンデータ５１０などの他のデータ、例えば、ストレージノードに保持されたデータボリュームの同じレプリカの一つ以上を保持する他のストレージノードについての永続性特性を示すデータも、データボリュームについての永続性特性の動的変更を行うために使用できる。
【００３２】
図２〜図５に関して前述したデータボリュームを保持するブロックベースのストレージについてのページキャッシュ書き込みロギングの実施例は、ブロックベースのストレージサービスに関して与えられた。さまざまな他のタイプまたは構成のブロックベースのストレージも、これらの技術を実施することができる。例えば、ブロックベースのストレージのクライアント（アプリケーション、オペレーティングシステム、またはデータボリュームについての書き込みリクエストを送信する他のコンポーネント）を、スナップショット動作を実行するストレージノードとして同じコンピューティングシステムに実装することができる。種々の構成のストレージノードも、さまざまな数のレプリカ、ミラーリングまたはデータボリュームについてのさまざまに構成されたストレージノードによって実行されるページキャッシュ書き込みロギングを実施できる他の永続性技術を実施できる。図６は、いくつかの実施形態に従う、ブロックベースのストレージにおけるページキャッシュ書き込みロギングのためのさまざまな方法及び技術を図示する高レベルフローチャートである。これらの技術は、図２〜図５に関して前述したような一つ以上のストレージノード（または、データボリュームをブロックベースのストレージに保持する他のシステムコンポーネント）を使用して実施することができる。
【００３３】
６１０に示すように、さまざまな実施形態において、ストレージノードに保持されたブロックベースのストレージデバイス内のデータボリュームについての書き込みリクエストを受信することができる。書き込みリクエストは、データボリュームを書き込む、削除する、変化させる、または別の方法で変更することができる。６２０に示すように、変更データについての対応するエントリを、書き込みリクエストに関する、ストレージノードにおけるシステムメモリ内のページキャッシュにおいて更新することができる。同じ様に、並行またはほぼ並行して、ページキャッシュ書き込みログ内の対応するエントリについての更新を記述するログレコードを保存することができる。例えば、ログレコードは、変更の厳密値若しくは新規のデータ、または更新を導き出すことができる値（例えば、以前の値＋１）を含むことができる。６４０に示すように、ページキャッシュ内の対応するエントリの更新、及びページキャッシュ書き込みログ内への対応するエントリについての更新を記述するログレコードの保存に応答して、書き込みリクエストを完了したとして承認することができる。いくつかの実施形態では、ページキャッシュは、フラッシュ動作の一部としてデータボリュームの更新した部分を保持する永続ストレージデバイスにエントリが書き込まれる時まで、更新したエントリを保持することができる。
【００３４】
上で述べたように、ページキャッシュ書き込みログ内へのログレコードの保存によって、ページキャッシュに復元すべきページキャッシュ内のデータ喪失を招くシステム故障の前のページキャッシュの状態を得ることができる。図７は、いくつかの実施形態に従う、ページキャッシュ書き込みログからのページキャッシュリカバリのためのさまざまな方法及び技術を図示する高レベルフローチャートである。７１０に示すように、システム故障からのリカバリは、ストレージノードにおいて起こすことができる。システム故障は、一般に、システムメモリにおけるページキャッシュ内のデータの喪失を招く任意の故障、例えば、電力またはソフトウェア故障であり得る。７２０に示すように、リカバリ時、ページキャッシュの状態を記述する、ページキャッシュ書き込みログを保存する永続ストレージデバイスに保存されたログレコードを取得することができる。例えば、ログレコードは、データボリュームを保持するストレージノードについての一つ以上の種々のリカバリ動作、ルーチンまたはプロセスの一部として、ページキャッシュログから連続的に読み出すことができる。
【００３５】
７３０に示すように、ページキャッシュ書き込みログから取得したログレコードを利用して、システム故障の前のページキャッシュの状態をページキャッシュに書き込むことができる。例えば、いくつかの実施形態では、ログレコードがページキャッシュログについての更新を記述するときに、ログレコードを順々に再生してページキャッシュの状態を復元するために、ページキャッシュについての更新を再生成することができる。いくつかの実施形態では、ログレコードは、ページキャッシュ書き込みログにおける以前のログレコードに依存しても良く、また独立しても良い。いくつかの実施形態では、復元した時点で、Ｉ／Ｏリクエストの処理のためにストレージノードを使用可能にすることができる。
【００３６】
さまざまな実施形態において、時間が経過すれば、書き込みリクエストが非常に頻繁に起こり得るので、大きなページキャッシュ書き込みログでさえもフルになることがある。図８は、いくつかの実施形態に従う、ページキャッシュ書き込みログをトリミングするためのさまざまな方法及び技術を図示する高レベルフローチャートである。８１０に示すように、ストレージノードにおいて、ページキャッシュについての更新を記述するログレコードを保持するページキャッシュログについてのトリムイベントを検出することができる。トリムイベントは、ページキャッシュ書き込みログ内の使用可能なストレージスペースがいくつかの閾値を超えたことの表示または決定であっても良い。追加的にまたは代替的に、他の表示または決定を使用することができる。例えば、前のトリムイベントから経過した時間を示すタイマまたは他の表示が、トリムイベントをトリガすることができる。いくつかの実施形態では、ページキャッシュ書き込みログ内のログレコードの隣接部分がもはや存続する必要がないように、ダーティページのページキャッシュフラッシュが起こったときにトリムイベントが検出されても良い。
【００３７】
ページキャッシュログについてのトリムイベントの検出に応答して、ページキャッシュログにおけるトリム位置を特定することができる。トリム位置は、トリムイベント時のログにおける現在位置であっても良い。トリムイベント位置は、トリミングを実行している間、他の場所に保存または記録することができる。８３０に示すように、さまざまな実施形態において、フラッシュ動作は、システムメモリからのページキャッシュエントリを、データボリュームを保存するブロックベースのストレージデバイスに書き込むように実行できる。フラッシュ動作は、ページキャッシュの一部のコンテンツを、ブロックベースのストレージデバイスにおける対応する位置に書き込むことができる。いくつかの実施形態では、変更されたページキャッシュの部分（すなわち、ダーティ）のみをフラッシュすることができる。
【００３８】
少なくともいくつかの実施形態では、ページキャッシュフラッシュ動作のサイズ決定を行うことができる。例えば、フラッシュ動作の実行中、ページキャッシュのフラッシュした部分についての書き込みリクエストは、ブロックされる。フラッシュされる領域の部分のサイズは、ブロックされる特定の書き込みリクエストに追加される待ち時間と対比した、ログをトリミングすべき速さに応じて調節できる。例として、書き込みリクエストが、フラッシュ動作のフラッシュされた領域内にあるページキャッシュの部分に書き込むものである場合には、フラッシュされる領域の部分のサイズは、特定の書き込みリクエストをブロックできる可能性を増大または減少することにより書き込みリクエストをペンディングするための待ち時間を増大または減少することができる。８４０に示すように、フラッシュ動作の完了時、ページキャッシュログを保持する永続ストレージデバイスの部分を再利用して、ページキャッシュについての更新を記述する追加のログレコードを刺激することができる。
【００３９】
いくつかの実施形態では、コントロールプレーンまたは他のシステムコンポーネントは、ブロックベースのストレージにデータボリュームを保持するストレージノードについてのページキャッシュ書き込みロギングの配備、実施及び／または有効化を指図することができる。図９は、いくつかの実施形態に従う、ページキャッシュ書き込みロギング技術を配備するためのさまざまな方法及び技術を図示する高レベルフローチャートである。９１０に示すように、ページキャッシュ書き込みログを保持しない、ブロックベースのストレージシステム内のストレージノードを特定することができる。例えば、ページキャッシュ書き込みロギングを実施するかにかかわらず、ストレージノードのバージョン、構成またはステータスを示すシステムレベルメタデータを保持することができる。９２０に示すように、特定されたストレージノードを評価して、各ストレージノードについての永続性スコアを決定することができる。例えば、特定のストレージノードを、電力故障を起こし易いデータセンタまたは他の物理的な若しくは地理的な位置に実装する場合には、そのような情報によって、ストレージノードについての永続性スコアを低くすることができる。同様に、同じデータセンタまたは地理的な位置におけるピアの大多数がページキャッシュ書き込みロギングを実施した場合には、永続性スコアを上げることができる。例えば、ストレージノードに保持されたデータボリュームの大多数が、ページキャッシュ書き込みロギングが有効である他のストレージノードにおけるレプリカを有するか否かなどの多くの他のファクタが、ストレージノードについての永続性スコアに影響を及ぼし得る。これらのさまざまなファクタによって決まる種々の重み付け、組み合わせまたは他の演算を使用して、特定のストレージノードについての永続性スコアを決定することができる。したがって、前述の実施例は、永続性スコアに影響を及ぼし得るさまざまな他のファクタに関して限定することは意図しない。
【００４０】
９３０に示すように、さまざまな実施形態において、ストレージノードについての永続性スコアに基づいて、ページキャッシュ書き込みロギングを実施するための一つ以上のストレージノードを選択することができる。そのような選択は、種々の通信機構に従い、さまざまな異なるブロックベースのストレージサービス監督または管理インターフェースに提供することができる。いくつかの実施形態では、図９に図示する技術は、ブロックベースのストレージサービスを実装するストレージノードの所与のサブセット（例えば、特定の部屋、データセンタ若しくは他の地理的な位置またはグループ化されたもの）、またはブロックベースのストレージサービスを実装するストレージノードの全体集団において周期的に実行しても良く、それにおいて周期的なものでも良い。いくつかの実施形態では、図９の方法の各々の繰り返しに所定の数の配備が割り当てられ得、したがって、使用可能な数の配備が割り当てられるまで、ストレージノードを永続性スコアに基づいて選択することができる。
【００４１】
さまざまな実施形態において、ページキャッシュ書き込みロギングによって、ストレージノードに保持されたデータボリュームの永続性を増大することができる。ログレコードをページキャッシュ書き込みログに保存することによって、システム故障の発生時のページキャッシュの状態を復元することができる。しかしながら、いくつかの実施形態では、ページキャッシュ書き込みロギングの実行による負担の増加が、ページキャッシュ書き込みログを保持する永続ストレージデバイスの能力を超え、書き込みリクエストの動作を妨げることがある。よりきめの細かいページキャッシュ書き込みロギングを可能にすることによって、ストレージノードは、永続性を最大化し、待ち時間を最小化するように、その動作を効果的に調整することができる。図１０は、いくつかの実施形態に従う、ストレージノードに保持されたデータボリュームにおける永続性特性を動的に変更するためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【００４２】
１０１０に示すように、さまざまな実施形態において、複数のデータボリュームを保持するストレージノードに受信された書き込みリクエストに関する、ページキャッシュについての更新を記述するログレコードを保存するページキャッシュ書き込みログを保持することができる。前述したように、ページキャッシュ書き込みログは、永続ストレージデバイスに保持することができる。永続ストレージデバイスは、ハードディスクドライブまたはソリッドステートドライブなどのブロックベースのストレージデバイスであっても良い。いくつかの実施形態では、永続ストレージデバイスは、不揮発性ランダムアクセスメモリデバイス（ＮＶ−ＲＡＭ）であっても良い。ログレコードは、書き込み待ち時間を短縮するために、永続ストレージデバイスに連続的に書き込む及び／または保存することができる。種々のデータボリュームにおけるログレコードは、ページキャッシュを更新するための書き込みリクエストが実行されたときに基づいて保存することができ、いくつかの実施形態では、同じデータボリュームにおけるログレコードは、グループ化または保存しなくても良い。
【００４３】
１０２０に示すように、さまざまな実施形態において、ページキャッシュ書き込みログにログすべき、ストレージノードにおいて入ってくる書き込みリクエストの速度を観測することができる。図１１に関して後述するように、いくつかの実施形態では、この速度は、ログすべき一定の期間内に受信された書き込みリクエストの数の単純な測定値であっても良い。速度は、書き込みリクエストを実行するために実行すべき仕事量を示す測定単位（例えば、１秒あたりの入出力回数（ＩＯＰＳ））に変換することもできる。さまざまな実施形態において、書き込みリクエストの観測は、継続的に、周期的にまたは非周期的に実行することができる。
【００４４】
１０３０に示すように、ログすべき、ストレージノードにおいて入ってくる書き込みリクエストの速度に少なくともある程度基づいて、データボリュームの一つ（または、二つ以上）についての永続性特性を動的に変更することができる。さまざまな実施形態において、永続性特性は、データボリュームについてのページキャッシュ書き込みロギングが有効であるか無効であるかを示すことができる。したがって、永続性特性を変更することによって、特定のデータボリュームの方に導かれた書き込みリクエストは、書き込みリクエストが受信された時の、データボリュームについての現在の永続性特性の状態に応じて、ログしても良いく、またはしなくても良い。いくつかの実施形態では、動的変更は、ストレージノードに保持されたデータボリュームのすべてを含むことができる。いくつかの実施形態では、例えば、ページキャッシュ書き込みロギングは、すべてのデータボリュームについて無効（または、有効）にすることができる。
【００４５】
ストレージノードにおいて入ってくる書き込みリクエストの速度の観測によって、ストレージノードは、受信された書き込みリクエストの数の劇的な増大または減少などの変化する状況に適応することができる。図１１は、いくつかの実施形態に従う、データボリュームについてのページキャッシュ書き込みロギングを有効にするか無効にするかを決定するためのさまざまな方法及び技術を図示する高レベルフローチャートである。入ってくる書き込みリクエストの速度を使用して、改良されたアクションをとる、またはストレージノードに保持されたデータボリュームについての性能及び／若しくは永続性を最大化することができる。
【００４６】
１１１０に示すように、ページキャッシュ書き込みログにログすべき、ストレージノード１１０に入ってくる書き込みリクエストの速度を決定することができる。いくつかの実施形態では、この速度は、一定の期間内に受信された書き込みリクエストの数の単純な測定値であっても良い。速度は、書き込みリクエストを実行するために実行すべき仕事量を示す測定単位（例えば、１秒あたりの入出力回数（ＩＯＰＳ））に変換することもできる。速度を決定すれば、１１２０に示すように、入ってくる書き込みリクエストの速度を、ロギング速度許容限度と比較することができる。いくつかの実施形態では、ロギング速度許容限度は、ページキャッシュ書き込みログを実装する永続ストレージデバイスのスループット能力にある程度対応して決定または構成することができる。例えば、ハードディスクドライブが最大８０００ＩＯＰＳで実行できる場合には、ロギング速度許容限度は、ハードディスクドライブの最大スループット以下のいくらかの数（例えば、７０００ＩＯＰＳ）に決定することができる。いくつかの実施形態では、ロギング速度許容限度は、（ページキャッシュ書き込みログが追い付くことができるまで書き込みリクエストがブロックされ得るので、ログレコード喪失または書き込みリクエストのブロックを招き得る）デバイスのスループット容量の超過を生じずに現在の速度を遅くするような永続性特性の時間の動的変更を可能にするように、永続ストレージデバイスの最大スループット未満に設定しても良い。
【００４７】
入ってくる書き込みリクエストの決定された速度がロギング速度許容限度を超える場合には、１１２０からの肯定的な出口に示すように、一つ以上のデータボリュームを選択して、選択されたデータボリュームについてのページキャッシュ書き込みロギングを無効にすることによって、ログすべき入ってくる書き込みリクエストの速度を、ロギング速度許容限度未満に遅くすることができる。データボリュームの選択は、有効なページキャッシュ書き込みロギングを現在有する、ストレージノードにおけるデータボリュームから行うことができる。例として、１０個の中の８個のデータボリュームが有効なページキャッシュ書き込みロギングを有する場合には、選択は、１０個の中の８個のデータボリュームから行うことができる。
【００４８】
選択は、いくつかの異なるファクタに基づいて行うことができる。例えば、選択は、各データボリュームのサイズに基づいて行うことができる。例えば、最も大きいデータボリュームは、不相応に大きな量の書き込みリクエストを受信することがある。選択は、特定のデータボリュームの方に導かれた書き込みリクエストの数に基づいても行うことができる。例として、データボリュームが、小さいにもかかわらず、しばしば書き込みリクエストを受信する場合には、その小さなデータボリュームは、速度許容限度を超えて入ってくるログすべき書き込みリクエストの速度を速めることができる。これらの及びさまざまな他のファクタに基づいて、一つ以上のデータボリュームを選択することができる。例えば、データボリュームは、各データボリュームに関連する見積もられた速度の書き込みリクエストを有することができる。選択されたデータボリュームについての書き込みリクエストの見積もられた速度が、入ってくる書き込みリクエストの速度を許容量に遅くするまで、データボリュームの選択を継続することができる。いくつかの実施形態では、他のものに優先していくつかのデータボリュームを選択するために、データボリュームの順序付けまたは優先度スキームを施行することができる。例えば、いくつかの実施形態では、他のストレージノードに保持されたデータボリュームのレプリカについての永続性特性を知ることができる。したがって、特定のデータボリュームが、別のデータボリュームよりも大きい数の書き込みリクエストを有するが、それがまた、（レプリカが保持された他のストレージノードではなく）このストレージノードにのみページキャッシュ書き込みロギングを有する場合には、その特定のデータボリュームを、選択のための順序付けまたは優先度スキームにおいて除外または低減することができる。１１４０に示すように、選択すれば、選択されたデータボリュームについてのページキャッシュ書き込みロギングを無効にすることができる。
【００４９】
１１５０に示すように、いくつかの実施形態では、ページキャッシュ書き込みログにおいてログすべき入ってくる書き込みリクエストの速度は、ロギング速度下限と比較することもできる。追加的に、ロギング速度許容限度に関する前述の分析と同じ様に、ロギング速度下限は、ストレージノードがページキャッシュ書き込みロギングを有効にできる、入ってくる書き込みリクエストの速度を示すことができる。例えば、可能性が高くまたは履歴的に平均なデータボリュームが、１１２０においてロギング速度許容限度を超えることなく、有効な書き込みロギングを有することができることを、ロギング速度下限未満の速度が示すように、ボリュームごとの書き込みリクエストの平均数に基づいてロギング速度下限を決定または設定することができる。
【００５０】
データボリューム（または、複数のデータボリューム）の選択は、無効なページキャッシュ書き込みロギングを有するそれらのデータボリュームから行うことができる。前述したように、選択は、各データボリュームのサイズに基づいて行うことができる。例えば、最も小さいデータボリュームは、不相応に少ない量の書き込みリクエストしか受信しないことがある。選択は、特定のデータボリュームの方に導かれた書き込みリクエストの数に基づいても行うことができる。例として、データボリュームが、大きいにもかかわらず、低頻度の数の書き込みリクエストしか履歴的に受信しない場合には、その大きなデータボリュームは、ロギング速度許容限度を超えて入ってくるログすべき書き込みリクエストの速度を速めない。１１６０に示すように、これらの及びさまざまな他のファクタに基づいて、一つ以上のデータボリュームを選択することができる。例えば、データボリュームは、各データボリュームに関連する見積もられた速度の書き込みリクエストを有することができる。選択されたデータボリュームについての書き込みリクエストの見積もられた速度が、入ってくる書き込みリクエストの速度をロギング速度下限超に上げるまで、データボリュームの選択を継続することができる。いくつかの実施形態では、他のものに優先していくつかのデータボリュームを選択するために、データボリュームの順序付けまたは優先度スキームを施行することができる。例えば、いくつかの実施形態では、他のストレージノードに保持されたデータボリュームのレプリカについての永続性特性を知ることができる。したがって、特定のデータボリュームが、別のデータボリュームよりも大きい数の書き込みリクエストを有するが、それがまた、（データボリュームのレプリカが保持された）任意のストレージノードに有効なページキャッシュ書き込みロギングを有しない場合には、その特定のデータボリュームを、選択のための順序付けまたは優先度スキームにおいて有利に計らうことができる。１１７０に示すように、選択すれば、選択されたデータボリュームについてのページキャッシュ書き込みロギングを有効にすることができる。
【００５１】
さまざまな実施形態において、１１５０から１１１０に戻る否定的な出口は、入ってくる書き込みリクエストの速度を観測する間に、この評価を繰り返し実行できることを示す。このように、データボリュームの永続性特性の調節は、長期にわたり行うことができる。
【００５２】
ストレージノードに保持されたデータボリュームについての永続性特性を、長期にわたり動的に変化させることができるので、同じデータボリュームについての書き込みリクエストは、ある時にはページキャッシュ書き込みロギングを用いて、別の時にはページキャッシュ書き込みロギングがなくても処理することができる。図１２は、いくつかの実施形態に従う、特定のデータボリュームの永続性特性に従う、特定のデータボリュームにおいて、ストレージノードにおける書き込みリクエストを処理するさまざまな方法及び技術を図示する高レベルフローチャートである。
【００５３】
１２１０に示すように、データボリュームについての書き込みリクエストを受信することができる。データボリュームの永続性特性を示すメタデータまたは他の情報を、ストレージノードに保持することができる。１２２０に示すように、データボリュームについてのページキャッシュ書き込みロギングが有効であるか否かを決定するために、メタデータを評価することができる。有効である場合には、１２５０に示すように、書き込みについてのページキャッシュを更新し、１２６０に示すように、ページキャッシュについての更新を記述するログレコードを、ストレージノードにおけるページキャッシュ書き込みログに保存することができる。図６に関して上で述べたように、いくつかの実施形態では、書き込みのためのページキャッシュについての更新１２５０と、ログレコードのページキャッシュ書き込みログ内への保存１２６０とを、並行またはほぼ並行（例えば、同時に開始するが、一つの動作が他の動作よりも先に終了する）して実行することができる。ページキャッシュを更新し、ログレコードを保存した時点で、１２７０に示すように、書き込みリクエストを完了したとして承認することができる。データボリュームについてのページキャッシュ書き込みロギングが有効でない場合には、１２２０からの否定的な出口に示すように、１２３０に示すように、書き込みリクエストに関するページキャッシュを更新し、１２４０に示すように、ページキャッシュ書き込みログ内のログレコードを保存せずに、書き込みリクエストを完了したとして承認することができる。
【００５４】
図７に関して前述したように、ページキャッシュ書き込みログ内のログレコードを再生して、システム故障前のページキャッシュの状態をページキャッシュに復元することができる。このように、データボリュームを保持するブロックベースのストレージデバイスにページキャッシュがページキャッシュエントリを未だフラッシュしていないとしても、完了したとして承認された書き込みリクエストを喪失することがない。故に、ブロックベースのストレージデバイスに保存され、ページキャッシュ書き込みログに記述されたものとして、データボリュームの現在のバージョンを、データボリュームに基づいて維持することができる。ストレージノードにおける特定のデータボリュームについてのページキャッシュ書き込みロギングを有効及び無効にできるので、ストレージノードにおけるいくつかのデータボリュームが進行中であり、他のものはそうさせないことができる。図１３は、いくつかの実施形態に従う、書き込みロギングが有効化及び無効化されたデータボリュームリカバリのためのさまざまな方法及び技術を図示する高レベルフローチャートである。
【００５５】
１３１０に示すように、ストレージノードは、システム故障からリカバリすることができる。ストレージノードは、複数のデータボリュームを保持することができる。追加のリカバリ動作を実行するために、データボリュームを評価して、ページキャッシュ書き込みロギングが有効であるそれらのデータボリュームを特定することができる。１３２０に示すように、特定のデータボリュームを選択することができる。１３３０に示すように、データボリュームについての永続性特性を使用して、データボリュームについてのページキャッシュ書き込みロギングが有効であったか否かを決定することができる。有効であった場合には、肯定的な出口に示すように、１３５０に示すように、データボリュームを進行中であるとして特定し、１３６０に示すように、Ｉ／Ｏリクエストのために使用可能にできる。例えば、特定のデータボリュームが進行中であると特定された場合には、ブロックストレージサービスコントロールプレーン、またはストレージノードそれ自体が、例えば、データボリュームについてのマスタストレージノードとしてストレージノードを特定することによって、永続性スキームにおけるデータボリュームについての新規の役割を特定することができる。特定されたマスタストレージノードは、データボリュームの新規のレプリカを保持するための一つ以上のスレーブストレージノードを確保し、データボリュームをスレーブストレージノードに複製することができる。代替的に、いくつかの実施形態では、ストレージノードは、任意のピアまたはスレーブストレージノードを取得することなく、進行中のデータボリュームについてのＩ／Ｏリクエストの処理を開始することができる。Ｉ／Ｏリクエストのためのデータボリュームを用意するために、進行中のデータボリュームについての任意の他のリカバリ動作も実行することができる。しかしながら、データボリュームについてのページキャッシュ書き込みロギングが有効でない場合には、１３３０からの否定的な出口に示すように、１３４０に示すように、進行中でないとしてデータボリュームを特定することができる。進行中でないデータボリュームは、データボリュームの現在のバージョンを保持するか否かを特定するために、データボリュームのレプリカを保持する別のストレージノードを待機するなどの、必要以上のリカバリ動作を受けることがある。いくつかの実施形態では、進行中であるとして特定されないデータボリュームは、ストレージノードにおけるブロックベースのストレージデバイスから削除または除去することができる。
【００５６】
本明細書に記述する方法は、さまざまな実施形態において、ハードウェアとソフトウェアとの任意の組み合わせによって実施することができる。例えば、一実施形態において、方法は、プロセッサに連結されたコンピュータ可読記憶媒体に保存されたプログラム命令を実行する一つ以上のプロセッサを含むコンピュータシステム（例えば、図１４のコンピュータシステムなど）によって実施することができる。プログラム命令は、本明細書に記述する機能性（例えば、本明細書に記述するブロックベースのストレージサービスを実装するなどの、さまざまなサーバ、ストレージノード、コントロールプレーン、マネージャ及び／または他のコンポーネントの機能性）を実装するように構成できる。図面に図示する及び本明細書に記述するさまざまな方法は、方法の例示的な実施形態を示す。任意の方法の順序は、変更することができ、さまざまな要素を追加、並べ替え、結合、省略、変更等することができる。
【００５７】
本明細書に記述するような、ブロックベースのストレージについてのページキャッシュ書き込みロギングの実施形態は、さまざまな他のデバイスと相互作用できる一つ以上のコンピュータシステムにおいて実行することができる。図１４は、さまざまな実施形態に従う、例示的なコンピュータシステムを図示するブロック図である。例えば、種々の実施形態において、コンピュータシステム２０００は、コンピュートクラスタのストレージ及び／若しくはコンピュートノード、データストアならびに／またはクライアントを実装するように構成できる。コンピュータシステム２０００は、これらに限定されないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、消費者デバイス、アプリケーションサーバ、ストレージデバイス、電話、携帯電話、または一般的な任意のタイプのコンピューティングデバイスを含む任意のさまざまなタイプのデバイスであっても良い。
【００５８】
コンピュータシステム２０００は、入出力（Ｉ／Ｏ）インターフェース２０３０を通じてシステムメモリ２０２０に連結された（そのいずれかが、シングルスレッドでもマルチスレッドでも良い複数のコアを含み得る）一つ以上のプロセッサ２０１０を含む。コンピュータシステム２０００は、さらに、Ｉ／Ｏインターフェース２０３０に連結されたネットワークインターフェース２０４０を含む。さまざまな実施形態において、コンピュータシステム２０００は、一つのプロセッサ２０１０を含むユニプロセッサシステムであっても良いし、いくつか（例えば、二つ、四つ、八つまたは別の適切な数）のプロセッサ２０１０を含むマルチプロセッサシステムであっても良い。プロセッサ２０１０は、命令を実行する能力がある任意の適切なプロセッサであっても良い。例えば、さまざまな実施形態において、プロセッサ２０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ若しくはＭＩＰＳ  ＩＳＡまたは任意の他の適切なＩＳＡなどの様々なインストラクションセットアーキテクチャ（ＩＳＡ）のいずれかを実装する汎用または組み込みプロセッサであっても良い。マルチプロセッサシステムにおいて、プロセッサ２０１０の各々は、必須ではないが、通常、同じＩＳＡを実装することができる。コンピュータシステム２０００は、通信ネットワーク（例えば、インターネット、ＬＡＮなど）を通じて、他のシステム及び／またはコンポーネントと通信するための一つ以上のネットワーク通信デバイス（例えば、ネットワークインターフェース２０４０）も含む。
【００５９】
図示する実施形態では、コンピュータシステム２０００は、一つ以上の永続ストレージデバイス２０６０及び／または一つ以上のＩ／Ｏデバイス２０８０も含む。さまざまな実施形態において、永続ストレージデバイス２０６０は、ディスクドライブ、テープドライブ、ソリッドステートメモリ、他のマスストレージデバイス、ブロックベースのストレージデバイス、または任意の他の永続ストレージデバイスに対応することができる。コンピュータシステム２０００（または、そこで動作する分散アプリケーション若しくはオペレーティングシステム）は、所望に応じて、命令及び／またはデータを永続ストレージデバイス２０６０に保存し、必要に応じて、保存した命令及び／またはデータを検索することができる。例えば、いくつかの実施形態では、コンピュータシステム２０００は、ストレージシステムサーバノードをホストし、永続ストレージ２０６０は、サーバノードに付随するＳＳＤを含むことができる。
【００６０】
コンピュータシステム２０００は、プロセッサ（複数可）２０１０によってアクセス可能な命令及びデータを保存するように構成された一つ以上のシステムメモリ２０２０を含む。さまざまな実施形態において、システムメモリ２０２０は、任意の適切なメモリ技術（例えば、キャッシュメモリ、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＤＲＡＭ、ＲＤＲＡＭ、ＥＤＯ  ＲＡＭ、ＤＤＲ  １０  ＲＡＭ、同期ダイナミックＲＡＭ（ＳＤＲＡＭ）、Ｒａｍｂｕｓ  ＲＡＭ、ＥＥＰＲＯＭ、不揮発性／フラッシュタイプのメモリ、または任意の他のタイプのメモリの一つ以上）を使用して実施できる。システムメモリ２０２０は、本明細書に記述する方法及び技術を実施するための、プロセッサ（複数可）２０１０によって実行可能なプログラム命令２０２５を含有することができる。さまざまな実施形態において、プログラム命令２０２５は、プラットフォームネイティブバイナリ、Ｊａｖａ（商標）バイトコードなどの任意のインタープリタ型言語、若しくは、例えば、Ｃ／Ｃ＋＋、Ｊａｖａ（商標）などの任意の他の言語、またはその任意の組み合わせにおいてエンコードすることができる。種々の実施形態において、例えば、図示する実施形態では、プログラム命令２０２５は、ストレージノードの機能性を実施するための実行可能なプログラム命令を含む。いくつかの実施形態では、プログラム命令２０２５は、複数の個々のクライアント、ノード及び／または他のコンポーネントを実装することができる。
【００６１】
いくつかの実施形態では、プログラム命令２０２５は、例えば、ＵＮＩＸ（登録商標）、ＬＩＮＵＸ、Ｓｏｌａｒｉｓ（商標）、ＭａｃＯＳ（商標）、Ｗｉｎｄｏｗｓ（商標）などのさまざまなオペレーティングシステムのいずれかであっても良いオペレーティングシステム（図示せず）を実施するのに実行可能な命令を含むことができる。プログラム命令２０２５のいずれかまたはすべては、コンピュータプログラム製品またはソフトウェアとして提供されることができ、そこに命令を保存する非一時的コンピュータ可読記憶媒体を含むことができ、そしてさまざまな実施形態に従うプロセスを実行するためのコンピュータシステム（または、他の電子デバイス）をプログラムするために使用できる。非一時的コンピュータ可読記憶媒体は、マシン（例えば、コンピュータ）に可読な形態（例えば、ソフトウェア、処理アプリケーション）の情報を保存するための任意の機構を含むことができる。一般的に言えば、非一時的コンピュータアクセス可能媒体は、磁気または光媒体などのコンピュータ可読記憶媒体またはメモリ媒体、例えば、Ｉ／Ｏインターフェース２０３０を介してコンピュータシステム２０００に連結されたディスクまたはＤＶＤ／ＣＤ−ＲＯＭを含むことができる。非一時的コンピュータ可読記憶媒体は、システムメモリ２０２０または別のタイプのメモリとしてコンピュータシステム２０００のいくつかの実施形態に含まれることができる、例えば、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどの任意の揮発性または不揮発性媒体も含むことができる。他の実施形態では、プログラム命令は、例えば、ネットワークインターフェース２０４０を介して実装できる、ネットワーク及び／または無線リンクなどの通信媒体を介して伝達される光、音響または他の形態の伝播する信号（例えば、搬送波、赤外線信号、デジタル信号など）を使用して通信できる。
【００６２】
いくつかの実施形態では、システムメモリ２０２０は、本明細書に記述するように構成できるデータストア２０４５を含むことができる。一般に、システムメモリ２０２０（例えば、システムメモリ２０２０内部のデータストア２０４５）、永続ストレージ２０６０及び／またはリモートストレージ２０７０は、データブロック、データブロックのレプリカ、データブロック及び／若しくはそれらの状態に関連するメタデータ、構成情報、ならびに／または本明細書に記述する方法及び技術を実施するのに使用できる任意の他の情報を保存することができる。
【００６３】
一実施形態において、Ｉ／Ｏインターフェース２０３０は、プロセッサ２０１０と、システムメモリ２０２０と、ネットワークインターフェース２０４０または他の周辺インターフェースを通じたものを含む、システムにおける任意の周辺デバイスとの間のＩ／Ｏトラフィックを調整するように構成できる。いくつかの実施形態では、Ｉ／Ｏインターフェース２０３０は、任意の必須のプロトコル、タイミングまたはあるコンポーネント（例えば、システムメモリ２０２０）からのデータ信号を別のコンポーネント（例えば、プロセッサ２０１０）で使用するのに適切なフォーマットに変換する他のデータ変換を実行することができる。いくつかの実施形態では、例えば、Ｉ／Ｏインターフェース２０３０は、周辺コンポーネント相互接続（ＰＣＩ）バス標準またはユニバーサルシリアルバス（ＵＳＢ）標準の変形などのさまざまなタイプの周辺バスを通じて取り付けられたデバイスのためのサポートを含むことができる。いくつかの実施形態では、例えば、Ｉ／Ｏインターフェース２０３０の機能は、ノースブリッジ及びサウスブリッジなどの二つ以上の別個のコンポーネントに分けることができる。また、いくつかの実施形態では、システムメモリ２０２０に対するインターフェースなどのＩ／Ｏインターフェース２０３０の機能性のいくつかまたはすべては、プロセッサ２０１０に直接組み込んでも良い。
【００６４】
例えば、ネットワークインターフェース２０４０は、コンピュータシステム２０００と、他のコンピュータシステム２０９０などの、ネットワークに取り付けられた他のデバイスとの間でデータを交換できるように構成できる。さらに、ネットワークインターフェース２０４０は、コンピュータシステム２０００と、さまざまなＩ／Ｏデバイス２０５０及び／またはリモートストレージ２０７０との間の通信を可能にするように構成できる。いくつかの実施形態では、入出力デバイス２０５０は、一つ以上の表示端末、キーボード、キーパッド、タッチパッド、スキャニングデバイス、音声若しくは光学的認識デバイス、または一つ以上のコンピュータシステム２０００によってデータを入力若しくは検索するのに適切な任意の他のデバイスを含むことができる。複数の入出力デバイス２０５０は、コンピュータシステム２０００内に存在しても良く、コンピュータシステム２０００を含む分散システムのさまざまなノードに分配されても良い。いくつかの実施形態では、同様の入出力デバイスは、コンピュータシステム２０００から分離しても良く、有線または無線接続を通じて、例えば、ネットワークインターフェース２０４０を介して、コンピュータシステム２０００を含む分散システムの一つ以上のノードと相互作用しても良い。ネットワークインターフェース２０４０は、通常、一つ以上の無線ネットワーキングプロトコル（例えば、Ｗｉ−Ｆｉ／ＩＥＥＥ８０２．１１または別の無線ネットワーク標準）をサポートすることができる。しかしながら、さまざまな実施形態において、例えば、ネットワークインターフェース２０４０は、任意の適切な有線または無線一般データネットワーク、例えば、他のタイプのイーサネット（登録商標）ネットワークを介して通信をサポートすることができる。さらに、ネットワークインターフェース２０４０は、アナログ音声ネットワーク若しくはデジタルファイバ通信ネットワークなどの電気通信／テレフォニーネットワーク、ファイバーチャネルＳＡＮなどのストレージエリアネットワーク、または任意の他の適切なタイプのネットワーク及び／若しくはプロトコルを介して、通信をサポートすることができる。さまざまな実施形態において、コンピュータシステム２０００は、より多くの、より少ない、または図１４の２０００に図示するような種々のコンポーネント（例えば、ディスプレイ、ビデオカード、オーディオカード、周辺デバイス、例えば、ＡＴＭインターフェース、イーサネットインターフェース、フレームリレーインターフェースなどの他のネットワークインターフェース）を含むことができる。
【００６５】
本明細書に記述する実施形態の分散システムのいずれか、またはそれらのコンポーネントのいずれかを、一つ以上のネットワークベースのサービスとして実装できることに留意されたい。例えば、コンピューティングサービス内のコンピュートクラスタは、コンピューティング及び／若しくはストレージサービス、ならびに／または本明細書に記述する分散コンピューティングシステムを用いる他のタイプのサービスを、ネットワークベースのサービスとしてクライアントに存在させることができる。いくつかの実施形態では、ネットワークベースのサービスは、ネットワークを介して相互運用可能なマシン間相互作用をサポートするように設計されたソフトウェア及び／またはハードウェアシステムによって実施することができる。ネットワークベースのサービスは、ウェブサービス記述言語（ＷＳＤＬ）などのマシン処理可能なフォーマットにおいて記述されたインターフェースを有することができる。他のシステムは、ネットワークベースのサービスのインターフェースの記述によって規定された様式でネットワークベースのサービスと相互作用できる。例えば、ネットワークベースのサービスは、他のシステムが呼び出すことができるさまざまな動作を定義することができるが、他のシステムはさまざまな動作をリクエストするときに適合すると予期され得る特定のアプリケーションプログラミングインターフェース（ＡＰＩ）を定義することができる。
【００６６】
さまざまな実施形態において、ネットワークベースのサービスは、ネットワークベースのサービスリクエストに関連するパラメータ及び／またはデータを含むメッセージの使用を通じてリクエストするまたは呼び出すことができる。そのようなメッセージは、拡張マークアップ言語（ＸＭＬ）などの特定のマークアップ言語に従いフォーマットする、及び／またはシンプル・オブジェクト・アクセス・プロトコル（ＳＯＡＰ）などのプロトコルを使用してカプセル化することができる。ネットワークベースのサービスリクエストを実行するために、ネットワークベースのサービスクライアントは、リクエストを含むメッセージをアセンブルし、ハイパーテキスト転送プロトコル（ＨＴＴＰ）などのインターネットベースのアプリケーション層転送プロトコルを使用して、メッセージをアドレス可能エンドポイント（例えば、ネットワークベースのサービスに対応するユニフォームリソースロケータ（ＵＲＬ））に伝達することができる。
【００６７】
いくつかの実施形態では、ネットワークベースのサービスは、メッセージベースの技術ではなくＲｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（「ＲＥＳＴｆｕｌ」）技術を使用して実施しても良い。例えば、ＲＥＳＴｆｕｌ技術に従い実施されるネットワークベースのサービスは、ＳＯＡＰメッセージ内のカプセル化ではなく、ＰＵＴ、ＧＥＴまたはＤＥＬＥＴＥなどのＨＴＴＰ方法内に含まれるパラメータを通じて呼び出すことができる。
【００６８】
前述の実施形態はかなり詳細に記述したが、上記の開示を完全に認識した当業者に明らかとなるように多数の変形及び変更を為すことができる。以下の特許請求の範囲が、すべてのそのような変更及び変化を包含するように解釈され、したがって上の記述が、限定的意味ではなく実例とみなされることが意図される。
【００６９】
本開示の実施形態は、以下の条項を考慮して記述することができる。
【００７０】
条項
１．一つ以上のデータボリュームを保持する一つ以上のブロックベースのストレージデバイスと、
ページキャッシュを備えるシステムメモリであって、前記ページキャッシュが、前記一つ以上のデータボリュームを永続的に更新するために、前記一つ以上のブロックベースのストレージデバイスを周期的にまたは非周期的にフラッシュする、前記システムメモリと、
ページキャッシュ書き込みログを保持する永続ストレージデバイスであって、前記ページキャッシュ書き込みログが、前記ページキャッシュについての更新を記述する複数個のログレコードを保持し、前記複数個のログレコードが、前記ページキャッシュ内のデータの喪失を招くシステム故障の発生時の前記ページキャッシュについての以前の状態を復元するように利用可能である、前記永続ストレージデバイスと、を備えており、
前記一つ以上のデータボリュームのうちの特定のデータボリュームについての書き込みリクエストを受信し、
前記書き込みリクエストに関する、前記ページキャッシュ内の複数個のエントリのうちの少なくとも一つの対応するエントリを更新し、
前記ページキャッシュ書き込みログ内の前記少なくとも一つの対応するページキャッシュエントリについての前記更新を記述するログレコードを保存し、かつ
前記ページキャッシュエントリの更新及び前記ログレコードの前記ページキャッシュ書き込みログ内への保存に応答して、前記書き込みリクエストを完了したとして承認するように構成されたストレージノードを実装するシステム。
【００７１】
２．前記ストレージノードが、さらに、システム故障からのリカバリ時に、
前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスから、前記ログレコード及び前記複数個のログレコードを取得し、かつ
前記ページキャッシュ書き込みログ内に保持された前記ログレコード及び前記複数個のログレコードを利用して、前記システム故障の前の前記ページキャッシュの状態を前記ページキャッシュに書き込むように構成された、条項１に記載のシステム。
【００７２】
３．ストレージノードが、さらに、
前記ページキャッシュ書き込みログについてのトリムイベントを検出し、
前記トリムイベントの検出に応答して、
前記ページキャッシュ書き込みログにおけるトリム位置を特定し、
前記システムメモリからの前記複数個のページキャッシュエントリの少なくともいくつかを前記複数個のブロックベースのストレージデバイスに書き込む一つ以上のフラッシュ動作を実行し、かつ
前記一つ以上のフラッシュ動作の完了時に、前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスの一つ以上の部分を再利用して、前記ページキャッシュについての更新を記述する追加のログレコードを保存するように構成された、条項１に記載のシステム。
【００７３】
４．前記ストレージノードが、ネットワークベースかつブロックベースのストレージサービスの一部として実装され、前記ブロックベースのストレージサービスの一部として実装された少なくとも一つの他のストレージノードが、前記特定のデータボリュームのレプリカを保持し、前記少なくとも一つの他のストレージノードが、前記受信、前記保存、前記更新及び前記承認を実行するように構成された、条項１に記載のシステム。
【００７４】
５．ストレージノードにおいて、前記ストレージノードに保持された少なくとも一つのブロックベースのストレージデバイスに存続するデータボリュームについての書き込みリクエストを受信することと、
前記書き込みリクエストに関する、前記ストレージノードにおけるシステムメモリに保持されたページキャッシュ内の複数個のエントリのうちの少なくとも一つの対応するエントリを更新することであって、前記ページキャッシュ内の前記複数個のエントリが、前記データボリュームを永続的に更新するために、前記少なくとも一つのブロックベースのストレージデバイスを周期的にまたは非周期的にフラッシュする、前記更新することと、
永続ストレージデバイスに保持された複数個の他のログレコードと共に、前記永続ストレージデバイスに保持されたページキャッシュ書き込みログ内の前記少なくとも一つの対応するページキャッシュエントリについての前記更新を記述するログレコードを保存することであって、前記ログレコード及び前記複数個の他のログレコードが、前記ページキャッシュ内のデータの喪失を招くシステム故障の発生時の前記ページキャッシュを復元するための、前記更新したページキャッシュエントリを含む前記ページキャッシュの状態を記述する、前記保存することと、
前記ページキャッシュエントリの更新及び前記ログレコードの前記ページキャッシュ書き込みログ内への保存に応答して、前記書き込みリクエストを完了したとして承認することと、を一つ以上のコンピューティングデバイスによって実行することを含む、方法。
【００７５】
６．システム故障からのリカバリ時に、
前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスから、前記ログレコード及び前記複数個の他のログレコードを取得することと、
前記ページキャッシュ書き込みログ内に保持された前記ログレコード及び前記複数個の他のログレコードを利用して、前記システム故障の前の前記ページキャッシュの状態を前記ページキャッシュに書き込むことと、をさらに含む、条項５に記載の方法。
【００７６】
７．前記ストレージノードが、前記データボリュームのレプリカを保持する、二つ以上のストレージノードのうちの一つであり、前記二つ以上のストレージノードのうちの、前記ストレージノードと異なる少なくとも一つが、前記データボリュームに関する、書き込みリクエストについてのそれぞれのページキャッシュ書き込みログを保持しない、条項５に記載の方法。
【００７７】
８．前記二つ以上のストレージノードのシステム故障からのリカバリ時に、前記データボリュームについての入出力リクエスト後の処理に使用可能な前記データボリュームの進行中のレプリカを作製するために、前記システム故障の前の前記データボリュームの前記進行中のレプリカを保持するものとして前記それぞれのページキャッシュ書き込みログを保持する、前記二つ以上のストレージノードのうちの一つを特定することをさらに含む、条項７に記載の方法。
【００７８】
９．前記ページキャッシュ書き込みログについてのトリムイベントを検出することと、
前記トリムイベントの検出に応答して、
前記ページキャッシュ書き込みログにおけるトリム位置を特定することと、
前記システムメモリからの前記複数個のページキャッシュエントリの少なくともいくつかを前記少なくとも一つのブロックベースのストレージデバイスに書き込む一つ以上のフラッシュ動作を実行することと、
前記一つ以上のフラッシュ動作の完了時に、前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスの一つ以上の部分を再利用して、前記ページキャッシュについての更新を記述する追加のログレコードを保存することと、をさらに含む、条項５に記載の方法。
【００７９】
１０．前記トリムイベントの検出に応答して、前記一つ以上のフラッシュ動作についてのフラッシュ動作サイズを決定することをさらに含む、条項９に記載の方法。
【００８０】
１１．前記少なくとも一つのブロックベースのストレージデバイスが、前記ストレージノードに保持された複数個のブロックベースのストレージデバイスのうちの少なくとも一つであり、前記方法が、さらに、
前記ストレージノードに保持された前記複数個のブロックベースのストレージデバイスのうちの少なくとも一つの他のブロックベースのストレージデバイスに存続する別のデータボリュームについての別の書き込みリクエストを受信することと、
前記他の書き込みリクエストについての前記更新、前記保存及び前記承認を実行することと、を含む、条項５に記載の方法。
【００８１】
１２．前記一つ以上のコンピューティングデバイスが、ブロックベースのストレージサービスを共に実装する、複数個のストレージノードのうちのストレージノードを実装し、前記ストレージノードが、ページキャッシュ書き込みロギングを実施する、前記ブロックベースのストレージサービスにおける一つ以上のストレージノードのうちの一つであり、前記複数のストレージノードのうちの他の一つが、ページキャッシュ書き込みロギングを実施せず、当該方法が、さらに、
前記複数個のストレージノードのうちの前記他の一つを評価して、ページキャッシュ書き込みロギングを実施しない各々の他のストレージノードについての永続性スコアを決定することと、
前記永続性スコアに少なくともある程度基づいて、ページキャッシュ書き込みロギングを実施するための、前記他のストレージノードのうちの一つ以上のストレージノードを選択することと、をブロックベースのストレージサービスコントロールプレーンを実装する一つ以上のコンピューティングデバイスによって実行することを含む、条項５に記載の方法。
【００８２】
１３．前記ストレージノードが、ネットワークベースかつブロックベースのストレージサービスを実装する複数個のストレージノードのうちの一つであり、前記書き込みリクエストが、ネットワークベースの仮想コンピュートサービスによって実装される仮想コンピュートインスタンスから受信され、前記ネットワークベースかつブロックベースのストレージサービス及び前記ネットワークベースの仮想コンピュートサービスが、同じネットワークベースのサービスプロバイダネットワークの一部として共に実装される、条項５に記載の方法。
【００８３】
１４．ストレージノードにおいて、前記ストレージノードに保持された少なくとも一つのブロックベースのストレージデバイスに存続するデータボリュームについての書き込みリクエストを受信することと、
前記書き込みリクエストに関する、前記ストレージノードにおけるシステムメモリに保持されたページキャッシュ内の複数個のエントリのうちの少なくとも一つの対応するエントリを更新することであって、前記ページキャッシュ内の前記複数個のエントリが、前記データボリュームを永続的に更新するために、前記少なくとも一つのブロックベースのストレージデバイスを周期的にまたは非周期的にフラッシュする、前記更新することと、
前記少なくとも一つのブロックベースのストレージデバイスとは異なる永続ストレージデバイスに保持された複数個の他のログレコードと共に、前記少なくとも一つの対応するページキャッシュエントリについての前記更新を記述するログレコードを、前記永続ストレージデバイスに保持されたページキャッシュ書き込みログに保存することであって、前記ログレコード及び前記複数個の他のログレコードが、前記ページキャッシュ内のデータの喪失を招くシステム故障の発生時の前記ページキャッシュを復元するための、前記更新したページキャッシュエントリを含む前記ページキャッシュの状態を記述する、前記保存することと、
前記ページキャッシュエントリの更新及び前記ログレコードの前記ページキャッシュ書き込みログ内への保存に応答して、前記書き込みリクエストを完了したとして承認することと、を、一つ以上のコンピューティングデバイスによって実行されるときに、前記一つ以上のコンピューティングデバイスに実施させるプログラム命令を保存する、非一時的コンピュータ可読記憶媒体。
【００８４】
１５．前記プログラム命令が、さらに、
システム故障からのリカバリ時に、
前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスから、前記ログレコード及び前記複数個の他のログレコードを取得することと、
前記ページキャッシュ書き込みログ内に保持された前記ログレコード及び前記複数個の他のログレコードを利用して、前記システム故障の前の前記ページキャッシュの状態を前記ページキャッシュに書き込むことと、を前記一つ以上のコンピューティングデバイスに実施させる、条項１４に記載の非一時的コンピュータ可読記憶媒体。
【００８５】
１６．前記一つ以上のコンピューティングデバイスが、マスタストレージノード及び一つ以上のスレーブストレージノードを実装し、前記マスタストレージノード及び前記一つ以上のスレーブストレージノードの各々が、前記データボリュームのそれぞれのレプリカを保持し、前記マスタストレージノード及び前記一つ以上のスレーブストレージノードの各々が、前記受信、前記保存、前記更新及び前記承認を実行する、条項１５に記載の非一時的コンピュータ可読記憶媒体。
【００８６】
１７．前記プログラム命令が、さらに、
前記ページキャッシュ書き込みログについてのトリムイベントを検出することと、
前記トリムイベントの検出に応答して、
前記ページキャッシュ書き込みログにおけるトリム位置を特定することと、
前記システムメモリからの前記複数個のページキャッシュエントリの少なくともいくつかを前記少なくとも一つのブロックベースのストレージデバイスに書き込む一つ以上のフラッシュ動作を実行することと、
前記一つ以上のフラッシュ動作の完了時に、前記ページキャッシュ書き込みログを保持する前記永続ストレージデバイスの一つ以上の部分を再利用して、前記ページキャッシュについての更新を記述する追加のログレコードを保存することと、を前記一つ以上のコンピューティングデバイスに実施させる、条項１４に記載の非一時的コンピュータ可読記憶媒体。
【００８７】
１８．前記プログラム命令が、さらに、
前記トリムイベントの検出に応答して、前記一つ以上のフラッシュ動作についてのフラッシュ動作サイズを決定することを前記一つ以上のコンピューティングデバイスに実施させる、条項１７に記載の非一時的コンピュータ可読記憶媒体。
【００８８】
１９．前記少なくとも一つのブロックベースのストレージデバイスが、前記ストレージノードに保持された複数個のブロックベースのストレージデバイスのうちの少なくとも一つであり、前記プログラム命令が、さらに、
前記ストレージノードに保持された前記複数個のブロックベースのストレージデバイスのうちの少なくとも一つの他のブロックベースのストレージデバイスに存続する別のデータボリュームについての別の書き込みリクエストを受信することと、
前記他の書き込みリクエストについての前記更新、前記保存及び前記承認を実行することと、を前記一つ以上のコンピューティングデバイスに実施させる、条項１４に記載の非一時的コンピュータ可読記憶媒体。
【００８９】
２０．前記ストレージノードが、ネットワークベースかつブロックベースのストレージサービスを実装する複数個のストレージノードのうちの一つであり、前記複数個のストレージノードの各々が、複数個の異なるクライアントについての複数個の異なるデータボリュームを保持する、条項１４の非一時的コンピュータ可読記憶媒体。
【図１】
0006437007.tif 000002
【図２】
0006437007.tif 000003
【図３】
0006437007.tif 000004
【図４】
0006437007.tif 000005
【図５】
0006437007.tif 000006
【図６】
0006437007.tif 000007
【図７】
0006437007.tif 000008
【図８】
0006437007.tif 000009
【図９】
0006437007.tif 000010
【図１０】
0006437007.tif 000011
【図１１】
0006437007.tif 000012
【図１２】
0006437007.tif 000013
【図１３】
0006437007.tif 000014
【図１４】
0006437007.tif 000015