発明の分野
[0001]本実施形態は、メモリに関するものであり、より具体的には、有限の寿命を有するメモリに関するものである。
背景
[0002]メモリは、現代のエンタープライズコンピューティングシステムの性能に関する最も制限的な特徴の一つである。メモリの一つの制限的特徴は、多くのタイプのメモリが限られた寿命を示すという事実である。例えば、フラッシュなどの不揮発性メモリの寿命は、そのメモリが消去され、再書込みされるたびに、少量ではあるが減少する。時が経つにつれて、数千回の消去及び再書込みを経て、そのようなフラッシュメモリは、ますます信頼できないものになることがある。
[0003]したがって、使用のタイプ(例えば、軽い対激しい)に応じて、フラッシュメモリの寿命が、大幅に変化する場合がある。これは、さまざまな点で問題になる可能性がある。例えば、フラッシュメモリ製造業者は、特定の長さの時間にわたる制限付き保証を提供することを期待されることが多い。そのような保証は、フラッシュメモリの軽い使用から通常の使用には十分であるかもしれないが、激しい使用(例えば、エンタープライズ応用など)の場合にフラッシュメモリの返品及び交換を必要とし得る。
[0004]そのような状況は、フラッシュメモリ製造業者の利益に大きく影響する場合がある。具体的に言うと、激しく使用する顧客について絶え間なく保証付きフラッシュメモリを交換する必要性によって、軽い使用から通常の使用の顧客へのフラッシュメモリの販売から得られる利益が相当に減少する可能性がある。したがって、従来技術に関連する上記及び/又は他の問題に対処する必要がある。
概要
[0005]メモリの寿命を縮める動作を遅延させるシステム、方法、及びコンピュータプログラム製品を提供する。使用時に、メモリの寿命に関連する少なくとも一つの特徴が、特定される。このために、メモリの寿命を縮める少なくとも一つの動作が、この特徴に基づいて遅延される。
一実施形態によるメモリの寿命を縮める動作を遅延させる方法を示す図である。
別の実施形態によるメモリの寿命を縮める動作を遅延させる技法を示す図である。
別の実施形態による、メモリの寿命を縮める動作を遅延させるタイムインターバルに基づく技法を示す図である。
別の実施形態による、メモリの寿命を縮める動作を遅延させる積分に基づく技法を示す図である。
別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させるシステムを示す図である。
別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させる方法を示す図である。
別の実施形態による、メモリの寿命を測定するグラフィカルユーザインターフェースを示す図である。
別の実施形態による、差情報を利用してメモリ内の書込み動作を減らす方法を示す図である。
別の実施形態による、メモリ内の書込み動作を減らすシステムを示す図である。
一実施形態による、差情報を使用してメモリを読み取る方法を示す図である。
一実施形態による、差情報を使用してメモリに書き込む方法を示す図である。
プロセッサに基づくシステムを使用する実施形態を示す図である。
詳細な説明
[0018]説明する種々の実施形態に従って、メモリの寿命を縮める様々な動作を、かかる寿命を延ばすために制御することができる。この説明では、そのような動作は、書込み動作、消去動作、プログラム動作、及び/又は前述の寿命を縮め得る全ての他の動作を指し得るものである。
[0019]図1に、一実施形態によるメモリの寿命を縮める動作を遅延させる方法100を示す。図示するように、メモリの寿命に関連する少なくとも一つの特徴が特定される。動作102を参照されたい。
[0020]この説明では、メモリの寿命とは、その間にメモリが任意の所望の度合の使用適正を呈する全ての持続時間を含み得るものである。例えば、様々な実施形態では、そのような寿命は、所望の寿命、実際の寿命、推定された寿命などを含み得るが、間違いなくこれらに限定はされない。さらに、使用適正の度合は、まだ動作しているコンポーネント(例えば、ブロック、セルなど)のパーセンテージ、メモリ又はそのコンポーネントの信頼性、及び/又は、更に言えば任意の他のパラメータなど、全ての使用適正関連パラメータを指し得る。
[0021]また、この説明では、動作102で特定される寿命に関連する特徴は、様々な実施形態で、期間、メモリの寿命を縮める動作のレート、メモリの寿命を縮める動作の許容総回数、寿命の持続時間などを含むことができる。さらに、前述の動作の許容総回数及び選択された又は所望の寿命を考慮すれば、一つの例示的実施形態では、期間あたりの動作の回数の単位で動作の最大平均レートを直接に計算することができる。もちろん、絶対に寿命の任意の他の特徴を特定できるので、そのような例示的特徴は、例示のみのために示したものである。このことは、直ぐに明らかとなろう。
[0022]このために、メモリの寿命を縮める少なくとも一つの動作が、特徴に基づいて遅延される。動作104を参照されたい。したがって、そのような遅延を、動作102で特徴されるメモリ寿命の特徴の少なくとも部分的関数である任意の形で実行することができる。この説明では、動作の前述の遅延は、動作の一部だけが遅延される状況を含むものと考えられる。例えば、動作が複数のコンポーネントを含む状況では、そのような遅延を、そのような動作の一以上(又は全て)の部分に適用してもよい。
[0023]一実施形態では、動作は、その動作を開始するコマンドを遅延させることによって、遅延され得る。例えば、書込みコマンド又は消去コマンドの特定に応答して、そのようなコマンドの実行を遅延させることができる。もちろん、他の実施形態では、動作自体を単純に遅延することができる。この設計によって、そうでなければメモリの寿命を縮めるであろう一以上の動作のそのような遅延が、少なくとも部分的に寿命の減少を少なくする。
[0024]以下、より例示的な情報を、様々なオプションのアーキテクチャ及び特徴に関して示す。これらアーキテクチャ及び特徴は、前述のフレームワークをユーザの希望に応じて実施してもしなくてもよい。例えば、遅延は、多数の異なる技法を使用して様々な異なる方法で管理することができる。これら技法についての例については、以下に説明する。なお、以下の情報が、例示のために示すものであり、いかなる形でも限定的に解釈されてはならないことに強く留意されたい。次の特徴のいずれをも、説明する他の特徴を伴わずに又は伴って任意に組み込むことができる。
[0025]図2は、別の実施形態によるメモリの寿命を縮める動作を遅延させる技法200を示している。オプションとして、本技法200を、図1の方法100を実行するために実施することができる。しかし、もちろん、技法200を、任意の所望の環境で実施してもよい。前述の定義が、この説明中にあてはまり得ることにも留意されたい。
[0026]図示するように、技法200は、メモリが最小限の使用適正を示すことをもたらす動作の総回数202並びにメモリの最小の所望の寿命204を考慮に入れている。そのようなデータ点から、最小の所望の寿命204を達成する最大平均動作レート206を計算することができる。
[0027]使用中に、寿命を縮める動作の回数を、時間の進行につれて監視することができる。如何なる時でも、時間の経過に伴い動作の回数が、図示の形で最大平均動作レート206を超える場合には、全ての余分な動作(レートを超えることに寄与する)を、計算された量だけ、所定の時間だけ、又は寿命を縮める動作の以前のレート若しくは予測されたレートに基づいて適応的に、遅延することができる。この所定の時間は、一実施形態では、最大平均動作レート206を超えないことをもたらす時間とすることができる。
[0028]様々な実施形態では、どの動作が遅延の対象になるか(並びに遅延自体の長さ)を、様々な要因に基づくものとすることができる。例えば、一実施形態では、遅延を、動作を開始するアプリケーションに基づくものとしてもよい。そのような実施形態では、より低い優先順位を有するアプリケーションによって開始される動作を、遅延の対象とすることができ、より高い優先順位を有するアプリケーションによって開始される動作を、必ずしも遅延の対象ではない(可能な時に)ものとすることができる。
[0029]もちろん、遅延がアプリケーション独立の形で動作にまたがって管理される他の実施形態も考えられる。例えば、遅延を、発生元のアプリケーションに拠らず、あるタイプの動作(例えば、消去動作など)の全てに適用してもよい。さらに、ハイブリッド手法を用いる実施形態も、考えられる。
[0030]さらに、遅延される動作に、寿命の異常な短縮を引き起こす動作又は動作のパターンを含む実施形態も考えられる。一実施形態で、これらのパターンだけを遅延させることができる。例えば、ウィルス又は手荒いアプリケーション動作パターンを検出することができ、そのようなパターンからの動作だけを遅延させることができる。
[0031]図3は、別の実施形態による、メモリの寿命を縮める動作を遅延させるタイムインターバルに基づく技法300を示している。オプションとして、この技法300を、図1の方法100を実行するために及び/又は更に図2の技法200で実施することができる。しかし、もちろん、技法300を、任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
[0032]図2の技法に類似して、技法300は、メモリが最小限の使用適正を示すことをもたらす動作の総数302並びにメモリの最小の所望の寿命304を考慮に入れる。そのようなデータ点から、最小の所望の寿命304を達成する最大平均動作レート306を計算することができる。使用中に、寿命を縮める動作の回数を、時間の進行につれて監視することができる。
[0033]如何なる時でも、時間の経過に伴い複数のそのような動作が、最大平均動作レート206を超える場合には、図示する方法で、全ての過剰な動作が、必ずしも、無条件に遅延(図2の技法200のように)されない。そうではなく、そのような過剰な動作を、当該動作が開始されるタイムインターバルに基づいて条件付きで遅延することができる。そのようなタイムインターバルは、例えば、時刻、日、月などを含むことができるが、これらに限定はされない。追加の実施形態では、タイムインターバルを、適応的及び動的に最適な期間へと調整することができる。例えば、そのような適応動的調整を、あるインターバルのサブインターバルにおいて寿命を縮める動作の頻度のヒストグラムなどに基づくものとしてもよい。
[0034]例えば、過剰な回数の動作が、上に示した態様で月曜、火曜、水曜、木曜などに特定される場合には、後続の金曜、土曜、及び日曜中に特定される可能性のある動作の回数がより少ないことを認識する(例えば、予想する)ことができる。したがって、そのような過剰な回数の動作を無条件に遅延するのではなく、これらを、平均動作レート(1週間にわたって行われる時の)が最大平均動作レート206を超えない尤度に応じて、即座に実行することができる。もちろん、これがそうではないとわかる場合には、ある遅延を、後続の週の間に行うことなどができる。前述の例は、週の間の日状況で示したが、週、月などにまたがるメモリ使用の変動を考慮に入れた、他のより「マクロ」な実施形態が考えられる。
[0035]更なる追加の実施形態では、動作の条件付き遅延を、必ずしもインターバルに基づくのではなく、その代わりに、メモリの使用履歴及び/又はメモリの予想される使用にさえ基づくように生成することができる。そのような実施形態では、将来の使用を予測するために履歴データを使用して、任意の所望の統計分析を実行し、過度な動作を遅延させることが必ずしも発生しない状況をより正確に特定すること等を行うことができる。
[0036]図4は、別の実施形態による、メモリの寿命を縮める動作を遅延させる積分に基づく技法400を示している。オプションとして、この技法400を、図1の方法100を実行するために、及び/又は、更に図2〜3の技法200及び300において実施することができる。しかし、もちろん、技法400を、任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
[0037]以前の技法に類似して、技法400は、メモリが最小限の使用適正を示すことをもたらす動作の総回数402、及びメモリの最小の所望の寿命404を考慮に入れる。そのようなデータ点から、最小の所望の寿命404を達成する最大平均動作レート406を計算することができる。使用中に、寿命を縮める動作の回数を、時間の進行につれて監視することができる。
[0038]如何なる時でも、時間の経過に伴い複数のそのような動作が、最大平均動作レート406を超える場合に、図示された方法で(408を参照されたい)、全ての過剰な動作が、必ずしも、無条件の形で遅延(図2の技法200のように)されない。そうではなく、そのような過剰な動作を、メモリの使用を反映する積分関数に基づいて条件的に遅延することができる。具体的には、時間の経過に伴い寿命を縮める動作の総合レートと最大平均動作レート406との間の差の積分を、進行につれて計算することができる。このために、そのような積分が、そのような動作が最大平均動作レート406を超える可能性があることを示す場合に、前述の遅延を、必ずしも行う必要がない。
[0039]図5は、別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させるシステム500を示している。オプションとして、このシステム500を、図1の方法100を実行し、及び/又は、更にオプションとして図2〜4の技法のいずれかを組み込むように実施することができる。しかし、もちろん、システム500を任意の所望の形で使用してもよい。
[0040]図示するように、複数のストレージデバイス530、540を含むストレージシステム503が含まれている。少なくとも一つのストレージバス502が、少なくとも一つのコントローラ511を少なくとも一つのコンピュータ501に結合している。様々な実施形態では、ストレージバス502は、serial advanced technology attachment(SATA)バス、serial attached SCSI(SAS)バス、ファイバチャネルバス、メモリバスインターフェース、フラッシュメモリバス、NANDフラッシュバス、integrated drive electronics(IDE)バス、advanced technology attachment(ATA)バス、consumer electronics(CE)バス、universal serial bus(USB)バス、スマートカードバス、マルチメディアカード(MMC)バスなどを含むことができるが、これらに限定はされない。したがって、コントローラ511を、システム(例えば、コンピュータ501)と二次ストレージ(ストレージデバイス530、540のうちの少なくとも一つなど)との間に結合することができる。さらに、ストレージデバイス530、540に関連するメモリの寿命を延ばす少なくとも一つの装置510が含まれている。
[0041]図示するように、装置510は、それぞれ複数の対応するバス521、522を介してストレージデバイス530、540に結合されたコントローラ511を含んでいる。コントローラ511は、ストレージバス502を介してコンピュータ501から受け取ったコマンドを実行するために、複数のバス521、522を使用して、複数のストレージデバイス530、540を制御し、これらストレージデバイスとデータを交換する。ストレージデバイス530、540の各々は、データを格納する少なくとも一つのモジュール又はブロック531、532、533、541、542、543を含んでいる。さらに、前述のコマンドの少なくとも一部は、寿命を縮めるコマンドであり、少なくとも一つのモジュール又はブロック531、532、533、541、542、543への悪影響を有する。使用中に、装置510は、そのような寿命を縮めるコマンドに拠らず、ストレージデバイス530、540の寿命を延ばすように働く。
[0042]これを達成するために、コントローラ511は、対応するバス512を介して寿命評価モジュール514に結合されている。装置510は、現在時刻を供給するためにバス518を介して寿命評価モジュール514に結合された時刻モジュール517を更に含んでいる。使用中に、寿命評価モジュール514は、ストレージバス502を介してコンピュータ501からコントローラ511に通信されるコマンドを受け取るように働く。さらに、寿命評価モジュール514は、バス512を介して受け取った(一つ又は複数の)コマンドが実行されたと仮定して推定寿命を計算する。
[0043]図5の参照を続ける。寿命推定モジュール514は、バス515を介してスロットリングモジュール516に結合されている。寿命推定モジュール514は、バス515を使用して、コントローラ511によって現在実行されているコマンドに関する推定寿命をスロットリングモジュール516に渡す。現在実行されているコマンドは、一実施形態では、バス512を介して寿命推定モジュール514によって受け取れたコマンドと同一とすることができ、また、ストレージバス502を介してコンピュータ501からコントローラ511によって受け取られたコマンドと同一とすることができる。
[0044]現在時刻モジュール517は、バス518を介してスロットリングモジュール516にも結合されている。したがって、現在時刻モジュール517からの現在時刻を、スロットリングモジュール516にも渡すことができる。一実施形態で、現在時刻モジュール517は、例えば、一定のタイムインターバルで増分される単純なカウンタなどとして実施することができる。
[0045]スロットリングモジュール516は、バス519を介して必要寿命モジュール520に更に結合されており、バス513を介してコントローラ511に結合されている。使用中に、必要寿命モジュール520は、所望の寿命を格納するようになっている。この設計によって、スロットリングモジュール516は、バス513を介してコントローラ511に情報を渡して、現在のコマンドの実行を遅延させるようコントローラ511に指示するように、構成することができる。
[0046]一実施形態で、装置510のスロットリングモジュール516は、寿命に対する現在のコマンドの実行の影響が、推定される寿命が必要寿命モジュール520に格納された必要寿命以上になるものとなるまで、現在のコマンドの実行が遅延されるように動作することができる。スロットリングモジュール516の機能は、一実施形態で、バス515を介して受け取った推定寿命がバス519を介して受け取った必要寿命より短い場合に、コントローラ511に遅延信号を供給すること程度に単純にすることができる。
[0047]別の実施形態では、コントローラ511、寿命評価モジュール514、及びスロットリングモジュール516の上で説明した機能を、所定のタイムインターバルにおいて受け取られるコマンドのグループに適用してもよい。そのような構成によって、システム500は、寿命を縮めるであろうコマンドの短いバーストを不必要に抑制せずに、必要寿命を満足することを可能とし得る。例えば1日としてタイムインターバルを選択することによって、そのような技法は、システム500が、寿命を縮めるコマンドのより高い瞬間的性能を提供することを可能にする。というのは、1日のある期間(例えば、夜間)においては、寿命を縮めるコマンドの平均頻度と比較して少ない頻度の寿命を減らすコマンドが存在する時間のインターバルがあり得るからである。
[0048]一つのオプションの実施形態では、コヒーレンシ(一貫性)を時間とともに維持することができる。コヒーレンシ法の一例として、寿命を減らすコマンドAが遅延される場合には、Aのデータ又はコマンドAの実行から生じる値に依存する全てのコマンド(寿命を減らすものであってもなくても)も、遅延される。
[0049]別の実施形態では、時刻を、ディスクがパワーアップされている時刻といったように、時刻の様々な近似に置換することができる。別の実施形態では、コンピュータ501、RAIDコントローラ、及び/又は他のデバイスが、追跡される時刻の精度を高めるために追加情報を提供することができる。したがって、ストレージデバイス530、540のうちの一以上の電源が入れられる時に、時間カウンタはカウントしていない。実時間は進みつつあるので、これは、性能を不必要に下げる可能性がある。そのようなシナリオでは、コンピュータ501、ソフトウェア、及び/又はコントローラが、そのような問題に対処するために、システム500の電源が切られる時に関する情報を提供することができる。
[0050]別の実施形態では、システム500は、コストを下げ性能を改善するためにストレージデバイス内冗長性機能を備えていてもよい。そのような実施形態では、データを、個々のストレージデバイス530、540の間で、その寿命に関連する任意の特徴に基づいて移動することができる(例えば、図1の動作102などを参照されたい)。例えば、ストレージデバイスの第1の部分530が、ストレージデバイスの第2の部分540のデータに対してより頻繁に上書きされるデータのセットを含むという状況があり得る。その場合に、所定の時間の後に、そのようなデータを、第1ストレージデバイス530から第2ストレージデバイス540に移動することができ、今後、第1ストレージデバイス530又は一以上のブロック/モジュール531、532、533を、より低い頻度で書き込まれるデータを格納するために使用するか、更なる使用から退かせることができる。
[0051]このために、ストレージデバイスウェアを適当に分散させて、あるストレージデバイスが、グループの他のストレージデバイスに対してあまりにも早すぎる時点で障害を発生することを防ぐことができる。もちろん、本技法は、異なるストレージデバイスの間だけではなく、その一部にも適用することができる。このために、任意のメモリコンポーネントの寿命を、そのような形で管理することができる。
[0052]何れの場合であっても、コントローラ511は、書込みを減らし、及び/又は書込みを分散するために構成され得る。この特徴によって、適当なストレージデバイス530、540の寿命を延ばすことができる。そのような技法を実行する一つの例示的方法を、図6の説明中に示す。
[0053]図6は、別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させる方法600を示している。オプションとして、本方法600を、図5のシステム500を使用して実行することができ、及び/又は、更なるオプションでは図1〜4の技法のいずれかを組み込むことができる。しかし、もちろん、方法600を任意の所望の形で実行することができる。それでも、前述の定義が、この説明中にあてはまり得る。
[0054]動作601を開始すると、方法600は、コントローラ(例えば、図5のコントローラ511など)によって継続され、コンピュータ(例えば、コンピュータ501など)によって少なくとも一つのストレージデバイス(例えば、ストレージデバイス530、540など)へ発行されるコマンドを待つ602。コマンドがコントローラによって受け取られると、この方法は、判断603に進み、この時に、コントローラは、動作602で受け入れられたコマンドが寿命を縮めるコマンド(例えば、消去動作、書込み動作など)であるか否かを判定する。判断603で、現在受け取られているコマンドが寿命を縮めるものではないと判定される場合には、そのようなコマンドは、動作607によって単純に処理することができる。
[0055]一方、判断603で、現在受け取られているコマンドが実際に寿命を縮めるものであると判定される場合には、推定寿命を、動作602で受け取られたコマンド、以前の寿命、及び現在時刻(例えば、時刻モジュール517を介してなど)に基づいて、寿命評価モジュール(例えば、寿命エスティメータモジュール514など)によって計算する。動作604を参照されたい。一実施形態では、以前の寿命は、寿命推定モジュールの以前の状態を表すことができる。別の実施形態では、以前の寿命は、少なくとも一つのストレージデバイスの一以上の特性を測定することによって得ることができる。
[0056]如何なる場合でも、そのような寿命評価モジュールによって推定される寿命は、その後、スロットリングモジュール(例えば、スロットリングモジュール516など)に供給される。判断605では、スロットリングモジュールが、寿命評価モジュールから受け取られた推定寿命がスロットリングモジュールに送られた必要寿命より短い場合に、スロットリングが必要であると判定する。スロットリングが必要な場合には、方法600は、動作606において、寿命を縮めるコマンドを遅延させる(例えば、抑制などによって)ことによって進行する。しかし、推定寿命が必要寿命より短くはない場合には、方法600は、上で示した動作607に進む。
[0057]具体的には、動作606で、スロットリングモジュールが、コントローラを使用して、寿命を縮めるコマンドの実行を抑制することができる。一実施形態で、そのような抑制は、寿命評価モジュールによって推定される寿命が必要寿命以上になるまで、コントローラを使用して寿命を縮めるコマンドの実行を遅延させることによって実施することができる。
[0058]別の実施形態では、抑制を、所定の時間期間内に判定し、後続の所定の時間期間にコマンドに適用することができる。そのような実施形態では、所定のタイムインターバル内で寿命をどれほど縮めることができるかに関して限度を設けることができる。更に別の実施形態では、あるタイムインターバル内にどれほど寿命を縮めることができるかに関する限度を、一以上の以前のタイムインターバルにおいて判定することができる。更に別の実施形態では、抑制を、複数の保留中の動作の分析に基づいて決定し、寿命を縮めない動作を、寿命を縮める動作又はそのような寿命を縮める動作に依存する動作の前に実行することを可能とし得る。
[0059]この設計によって、必要最小寿命を保証するために寿命を縮める動作を制御するデータストレージシステムを提供することができる。したがって、そのような最小必要寿命に対して寿命を縮める動作の影響を推定することができ、寿命を縮める動作の頻度を、適応的に制約することができる。
[0060]図7は、別の実施形態による、メモリの寿命を測定するグラフィカルユーザインターフェース700を示している。オプションとして、このグラフィカルユーザインターフェース700を、図1〜6の機能及びアーキテクチャの下で実施することができる。しかし、もちろん、グラフィカルユーザインターフェース700を任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
[0061]図示するように、様々な表示を、メモリの寿命に関連する少なくとも一つの特徴を反映して提示することができる。一実施形態で、そのような特徴は、図1の動作102で特定されるものであってもよい。しかし、もちろん、この寿命関連の特徴は、メモリの寿命に少なくとも部分的に関連する任意の所望の特徴であってもよい。例えば、図5のシステム500では、この特徴を、処理され及び/又はコンピュータ501に単純に渡されるために図示のモジュールのいずれかからコントローラ511によって取り出されるものとすることができ、そしてこのコンピュータ501は、ソフトウェアアプリケーションプログラム(例えば、プラグインなど)の制御の下で関連する表示を提示することができる。
[0062]例えば、前述の表示は、一実施形態では、一以上のメモリについて残っている寿命の量を示すゲージ702を含むことができる。そのような実施形態では、ゲージ702は、時間の経過に伴い実行された寿命を縮める動作の回数の関数として残っている総メモリ寿命の長さを示すことができる。別の実施形態では、前述の表示は、以前の使用の外挿に基づき、抑制動作の一時停止を仮定した寿命を示す推定値705を示すことができる。
[0063]別の実施形態では、前述の表示は、一以上のメモリについて最小限の量の寿命が残っていることを示す警告704を含むことができる。そのような寿命は、例えば、メモリ使用量履歴データに基づいて推定することができる。この設計によって、ユーザは、所定の時間の間にメモリを交換しなければならない状況などについて警告を受けることができる。もちろん、任意の所望の表示を使用して、メモリの寿命に関連する様々な情報を報告する他の実施形態が考えられる。
[0064]図8は、別の実施形態による、差情報を利用してメモリ内の書込み動作を減らす方法800を示している。オプションとして、この方法800を、図1〜7の機能及びアーキテクチャに関連して実行してもしなくてもよい。しかし、もちろん、方法800を、任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
[0065]図示するように、まず、メモリに格納されたデータに対して実行される書込み動作が特定される。動作802を参照されたい。この説明では、そのような書込み動作は、メモリに格納されたデータの変更をもたらす全ての動作を含み得る。さらに、そのような書込み動作を、そのような動作に関連する書込みコマンド、書込み動作自体などを傍受することによって任意の所望の方法で特定することができる。
[0066]動作804に示すように、次に、書込み動作の結果とメモリに格納されたデータとの間の差を求める。この説明では、前述の差は、少なくとも部分的に、メモリに格納されたデータの第1状態と、前述の書込み動作から生じる第2状態との間の全ての差を反映することができる。
[0067]別の実施形態では、メモリに格納された任意のデータの間の差を、求めることができる。例えば、メモリの異なる位置からのデータの差を求めるように、ファイルの新しい変更された版が、作成され、メモリの新しい位置に書き込まれてもよい。オプションとして、データの位置を、ハッシュ、ブルームフィルタなどに基づいて特定することができる。このために、同一データの異なるインスタンスがメモリ内の異なる位置に書き込まれる一つの例示的実施形態では、求められた差が、データの位置を含んでいてもよく、必ずしもデータ自体を含まなくてもよい。
[0068]一実施形態では、差に関連する差情報を、メモリ(例えば、データが格納されるのと同一のメモリなど)に格納することができる。別の実施形態では、差情報を、後に異なる実施形態の説明中に詳しく述べる態様で、別々のバッファに格納することもできる。差情報が、少なくとも部分的に動作804で求められる差を記述する全ての情報を含むことができることに留意されたい。後に説明する実施形態の議論においてやがて明白になるように、差情報は、一実施形態では、命令セットを利用して格納することができる。やはり以下に説明するように、そのような命令セットは、様々な実施形態では、適応的に変更し、及び/又は動的に拡張することができる。
[0069]このために、書込み動作を、差情報を利用して減らすことができる。動作806を参照されたい。この設計によって、書込み動作のそのような減少が、オプションで、メモリの寿命をのばすことができる。
[0070]以下、より例示的な情報を、様々なオプションのアーキテクチャ及び特徴に関して示す。なお、前述のフレームワークを、ユーザの希望に従って、これらのアーキテクチャ及び特徴を用いて、実施してもしなくてもよい。例えば、一つの例示的システムを、差情報に基づいて書込み情報を減らす一つの例示的な方法の実施について示す。以下の情報が、例示のために示され、いかなる形でも限定的と解釈されてはならないことに強く留意されたい。次の特徴のいずれをも、説明される他の特徴を除外して又は除外せずにオプションで組み込むことができる。
[0071]図9は、別の実施形態による、メモリ内の書込み動作を減らすシステム900を示している。オプションとして、このシステム900を、図8の方法800を実行し、及び/又は、更なるオプションで図1〜7の方法又は技法のいずれかを組み込むために実施することができる。しかし、もちろん、システム900を、任意の所望の態様で使用してもよい。やはり、前述の定義が、この説明中にあてはまり得る。
[0072]図示するように、システム900は、下に説明する態様で入出力(I/O)バス902を介してストレージデバイス930に結合されたコンピュータ901を含んでいる。I/Oバス902は、読取り経路903及び書込み経路904を含んでいる。ストレージデバイス930は、複数のストレージブロック931、932、933を含んでいる。ストレージブロック931、932、933は、コンピュータ901によって書き込まれ、読み取られる。
[0073]やがて明白になるように、ストレージブロック931、932、933の各々の所定の部分934を、差情報を格納するために割り振ることができる。当該差情報は、対応するストレージブロック931、932、933の残りの部分935に格納されたデータに対して行われる、コンピュータ901による全ての変更を反映するものである。様々な実施形態では、所定の部分934のサイズは、ユーザが設定することができる。さらに、そこに格納される差情報は、任意の形態をとることができる。
[0074]表1は、差情報の例を表す一つの候補フォーマットを示している(複数の差情報を、ストレージブロック931、932、933の各所定の部分934に格納することができる)。
[0075]この実施形態では、オペレーションコードは、対応するストレージブロック931、932、933の残りの部分935に格納されたデータに対して実行される動作を表すことができる。そのような動作の例は、end(終了)、replace(置換)、move up(上に移動)、move down(下に移動)、delete(削除)、insert(挿入)、及び/又はさらに言えば任意の他の動作を含むことができるが、これらに限定はされない。オプションとして、そのような動作のそれぞれが、コンパクト表現用の関連するコード(例えば、replace=’001’、move up=’010’など)を有し得る。
[0076]さらに、ソース開始アドレス及びサイズが、動作の対象になるべき、対応するストレージブロック931、932、933の残りの部分935内に格納されたデータを指し、そのサイズを示す(それぞれ)ことができる。さらに、動作が、データの置換/変更などを要求する状況では、データ自体を、差情報の構成要素として格納することができる。更に別のオプションとして、圧縮アルゴリズムを、より効率的なストレージのために差情報に適用することができる。別のオプションとして、動作がデータの移動を要求する状況では、データが元のストレージブロックに含まれているので、必ずしもデータ自体ではなく、データのソース位置を指定することができる。
[0077]別の実施形態では、新しい動作を、適応的に作成することができる。例えば、第1動作の繰り返しシーケンスを、新しい第2動作によって置換することができる。そのような新しい第2動作は、第1動作のシーケンスを記述するものであってもよい。このように、新しい動作を適応的に作成することができ、システム900が、新しい応用例にそれ自体を最適に適応させることができる。
[0078]もちろん、表1のデータ構造は、例示のみのために示したものであって、いかなる形であれ限定的と解釈されてはならない。例えば、差情報のインスタンスを、単純に、置換されるデータに含める(複雑なコマンドなどを伴わずに)ことができる。
[0079]さらに、メモリ内の書込み動作を減らすために、装置910が設けられている。かかる装置910は、複数の一体化バッファ921、922、923を含む一体化メモリ920を含んでいる。一実施形態では、一体化バッファ921、922、923のそれぞれのサイズを、所定のサイズ(例えば、4Kbなど)を有するものとすることができる。当該所定のサイズは、単一の動作でストレージブロック931、932、933のそれぞれに書き込み得る最小ブロック部分に相関するサイズであってもよい。さらに、様々な実施形態では、一体化バッファ921は、オンチップストレージ、外部メモリ、DRAM、SRAMなどであってもよい。
[0080]すぐに明白になるように、一体化メモリバッファ921、922、923は、それぞれ、対応するストレージブロック931、932、933の差情報(例えば、表1を参照されたい)のインスタンスを保持する。即ち、複数の一体化メモリバッファうちの第1のバッファ921は、複数のストレージブロックのうちの第1のブロック931の差情報のインスタンスを保持し、複数の一体化メモリバッファのうちの第2のバッファ922は、複数のストレージブロックのうちの第2のブロック932の差情報のインスタンスを保持し、複数の一体化メモリバッファのうちの第3のバッファ923は、複数のストレージブロックのうちの第3のブロック933の差情報のインスタンスを保持し、以下同様である。
[0081]装置910は、バス914を介して一体化メモリ920に結合された更新モジュール912を更に含んでいる。更新モジュール912は、一体化メモリバッファ921、922、923に格納された差情報を対応するストレージブロック931、932、及び933に書き込むためのものである。一実施形態では、そのような書込みは、一体化メモリバッファ921、922、923のうちの一つに差情報の少なくとも一つのインスタンスが書き込まれる(したがって、ストレージブロック931、932、及び933のうち適当な一つへの最小書込みサイズを構成する)時に開始し得る。この書込みを達成するために、更新モジュール912は、バス915を介してストレージデバイス930に結合されている。更に図示するように、更新モジュール912の出力は、読取り経路903を介してI/Oバス902に結合されている。
[0082]さらに、差計算モジュール911が、読取り経路バス903を介して更新モジュール912に結合され、書込み経路バス904を介してI/Oバス902に結合され、さらに、バス913を介して一体化メモリ920に結合されている。使用中に、差計算モジュール911は、ストレージデバイス930からデータを読み取ることができ、さらに、関連するストレージブロック931、932、及び933及び/又は一体化メモリバッファ921、922、923からの差情報を使用して、そのようなデータの現在の状態を再構成することができる。
[0083]差計算モジュール911は、必要に応じて、まずデータの現在の状態を再構成し(上の読取り動作に類似する)、そのような現在の状態と書込み動作(コンピュータ901によって開始される)の後に生じる状態との間の差を特定し、関連するストレージブロック931、932、及び933を更新するのに使用される差情報の一以上のインスタンスを一体化メモリバッファ921、922、923に移植することによって、そのようなデータをストレージデバイス930に書きこむことが更に可能である。そのような読取り動作及び書込み動作に関するさらなる情報を、以下、図10及び11の説明中に示す。
[0084]様々な実施形態では、差計算モジュール911は、前述の差を特定するために任意の所望の技法を使用することができる。例えば、様々なストリング照合アルゴリズム、データ移動推定技法などを、例えば利用することができる。さらなる追加の実施形態では、差を、バイト単位で求めることができる。
[0085]さらに、差の計算は、どのバイトストリングが挿入されるかを検出すること、どのバイトストリングが削除されるかを検出すること、どのバイトストリングが置換されるかを検出すること、どのバイトストリングがコピーされるかを検出すること、バイトストリングが値の追加によって更新されるか否かを判定すること、ストレージブロックのコピーを検出しそれらへの参照を作成すること、ブロック分割を検出すること、ブロック結合を検出することなどのうちの任意の一以上のステップを用いてもよい。
[0086]図10は、一実施形態による、差情報を使用してメモリを読み取る方法1000を示している。オプションとして、この方法1000を、図9のシステム900を使用して実行し、及び/又は更なるオプションでは、必要に応じて図1〜8の技法のいずれかを組み込むことができる。しかし、もちろん、方法1000を、任意の所望の態様で使用してもよい。ここでも、前述の定義が、この説明中にあてはまり得る。
[0087]図示するように、方法1000は、コンピュータ(例えば、コンピュータ901など)による要求に従ってストレージ(例えば、ストレージデバイス930など)からブロック(例えば、図9のブロック931、932、933など)を読み取ることによって動作1001で開始し得る。読み取られたストレージブロックデータは、次に、更新モジュール(例えば、更新モジュール912など)に送られる。次に、読取り動作に応答して、差情報が、ストレージブロック(コンピュータ要求に関連する)に対応する一体化バッファ(例えば、合体するバッファ921、922、923など)から及び/又はストレージブロック自体から読み取られる。動作1002を参照されたい。差情報の適当なソースは、要求された情報が一体化バッファから対応するストレージブロックに読取り要求時に書き込まれたか否かに依存し得る。オプションとして、差情報を、フラッシュ内のデータの間に散在させることができる。さらに、特定のデータに関する差を、一以上のグループにグループ化してもよい。
[0088]次に、動作1003で、更新モジュールは、動作1001で読み取られた対応のブロックに対して、動作1002からの差情報に反映された差を適用する。このために、動作1003で再構成されたデータを、読取り経路(例えば、読取り経路903など)を介してコンピュータに送ることができる。動作1004を参照されたい。
[0089]様々な実施形態では、前述のデータ読取り動作は、論理ストレージブロック番号から物理ストレージブロック番号へのマッピングを含み得る。さらに、方法1000は、読取りに関連する誤り検出及び誤り訂正を提供することができる。そのような読取りデータの誤り検出及び誤り訂正は、さらに、データを回復し、回復されたデータを別のストレージ位置に再配置することを試みる再読取り動作を含むことができる。例えば、回復されたデータのそのような再配置は、論理ストレージブロック変換を用いることができ、及び/又は候補ストレージブロックの誤り率情報に基づくものとすることができる。
[0090]図11は、一実施形態による、差情報を使用してメモリに書き込む方法1100を示している。オプションとして、この方法1100を、図9のシステム900を使用して実行し、及び/又は、更なるオプションでは、必要に応じて図1〜8、10の技法のいずれかを組み込むことができる。しかし、もちろん、方法1100を、任意の所望の態様で使用してもよい。さらに、前述の定義が、この説明中にあてはまり得る。
[0091]図10の読取り方法1000に類似して、方法1100は、コンピュータ(例えば、コンピュータ901など)による書込み要求の対象であるストレージ(例えば、ストレージデバイス930など)からブロック(例えば、図9のブロック931、932、933など)を読み取ることによって、動作1101で開始し得る。読み取られたストレージブロックデータは、その後、更新モジュール(例えば、更新モジュール912など)に送られる。次に、動作1102で、差情報を、ストレージブロック(コンピュータ要求に関連する)に対応する一体化バッファ(例えば、合体するバッファ921、922、923など)から及び/又はストレージブロック自体から読み取る。次に、動作1103で、更新モジュールが、動作1101で読み取られた対応のブロックに動作1102からの差情報に反映された差を適用して、読み取られ又は書き込まれるデータを再構成する。
[0092]このために、動作1103で再構成されるデータを、差計算モジュール(例えば、差計算モジュール911など)に送り、コンピュータによって要求された書込み動作の実行から生じるはずのデータの状態と比較することができる。動作1104を参照されたい。このために、再構成されたデータと書込み動作の実行から生じるはずのデータの状態との間の差が、特定される。一実施形態では、そのような差は、データを更新するためのアプリケーション(コンピュータ上で動作する)によって引き起こされる可能性がある。そのような更新は、バイトのストリングの置換、バイトのストリングの挿入、バイトのストリングの削除、バイトのストリングのコピーなどを含むことができるが、これらに限定はされない。
[0093]動作1105では、動作1104で計算された差に関連する差情報を、動作1104で計算された少なくとも一つの差が存在するブロックに対応する適切な一体化バッファに付加することができる。そのような付加は、一体化メモリ内の一体化バッファの末尾に書き込むことによって達成することができる。一実施形態では、そのような付加は、さらに、一体化バッファの圧縮解除、データの付加、及び適当な一体化バッファの再圧縮を含むことができる。オプションとして、一体化バッファメモリを、オンデマンドで一体化バッファに再割振りすることができる。
[0094]オプションの実施形態では、差情報を、データに対して実行される機能(例えば、書込みなど)を記述する動作として格納することができる。例えば、差情報は、Bツリー内で実行される動作から生じる変化を反映することができ、したがって、そのような動作に関する差を表すことができる。そのようなBツリーは、オプションで、データベース、メールサーバ、ファイルシステムなどによって利用することができる。
[0095]次に、判断1106で、一体化バッファをテストして、それらが満杯であるかどうかを判定する。どの一体化バッファも満杯ではない場合に、方法1100は、動作1110に進む。一方で、少なくとも一つの一体化バッファが満杯である場合には、方法1100は、動作1107に進む。動作1107では、全ての満杯の一体化バッファを、差情報に付加する。さらに、そのような満杯の一体化バッファは、動作1112に示すように空にされる(再利用などのために)。
[0096]さらに、差情報が満杯であるか否かを判定する(動作1114)。方法1100は、差情報が満杯ではないと判定される場合には動作1110に進む。しかし、差情報が満杯であるとの判定に応答して、差情報からの変化をデータに適用する。動作1116に留意されたい。さらに、動作1118に示すように、適用された変更を有するデータのブロックを書き込み、古いデータを破棄する。さらに、動作1120に示すように、差情報を空にする。このために、書き込みを減らし、ブロックに基づくストレージの信頼性を改善するためにメモリブロックにまたがって書き込みを分散させるために、書き込まれるデータと既存データとの間の差を使用するデータストレージシステムを、提供することができる。
[0097]様々な実施形態では、前述の実施形態で述べたメモリは、機械的ストレージデバイス(例えば、SATAディスクドライブ、SASディスクドライブ、ファイバチャネルディスクドライブ、IDEディスクドライブ、ATAディスクドライブ、CEディスクドライブ、USBディスクドライブ、スマートカードディスクドライブ、MMCディスクドライブなど)及び/又は非機械的ストレージデバイス(例えば、半導体に基づくものなど)を含むことができる。そのような非機械的メモリは、例えば、揮発性メモリ又は不揮発性メモリを含むことができる。様々な実施形態では、不揮発性メモリデバイスは、フラッシュメモリを含むことができる(例えば、セルあたり単一ビットのNORフラッシュメモリ、セルあたり複数ビットのNORフラッシュメモリ、セルあたり単一ビットのNANDフラッシュメモリ、セルあたり複数ビットのNANDフラッシュメモリ、セルあたり複数レベル複数ビットのNANDフラッシュ、大ブロックフラッシュメモリなど)。メモリの様々な例を本明細書で示すが、様々な原理を、その寿命がそれに対して実行される様々な動作に起因して減らされ得る任意のタイプのメモリに適用できることに留意されたい。
[0098]図12は、様々なアーキテクチャ及び/又は様々な前の実施形態の機能を実施できる例示的システム1200を示している。例えば、例示的システム1200は、前の実施形態のいくつかで示したコンピュータであってもよい。また、上に示した様々な装置を、システム1200のコンポーネントとしてもよい。
[0099]図示するように、システム1200は、通信バス1202に接続された少なくとも一つのホストプロセッサ1201を含んで提供される。また、システム1200は、メインメモリ1204を含む。制御論理(ソフトウェア)及びデータが、メインメモリ1204に格納され、メインメモリ1204は、ランダムアクセスメモリ(RAM)の形をとることができる。
[00100]システム1200は、また、グラフィックスプロセッサ1206及びディスプレイ1208すなわちコンピュータモニタを含む。システム1200は、二次ストレージ1210を含むこともできる。二次ストレージ1210は、例えば、ハードディスクドライブ及び/又は、フロッピディスクドライブ、磁気テープドライブ、コンパクトディスクドライブなどを表すリムーバブルストレージドライブを含む。リムーバブルストレージドライブは、周知の方法でリムーバブルストレージモジュールから読み取り、及び/又はこれに書き込む。
[00101]コンピュータプログラム、又はコンピュータ制御論理アルゴリズムを、メインメモリ1204及び/又は二次ストレージ1210に格納することができる。そのようなコンピュータプログラムは、実行時に、システム1200が様々な機能を実行することを可能にする。メモリ1204、ストレージ1210、及び/又は任意の他のストレージは、コンピュータ可読媒体の可能な例である。
[00102]一実施形態で、様々な前の図面のアーキテクチャ及び/又は機能を、ホストプロセッサ1201、グラフィックスプロセッサ1206、二次ストレージ1210、ホストプロセッサ1201とグラフィックスプロセッサ1206の双方の能力の少なくとも一部が可能な集積回路(図示せず)、チップセット(すなわち、関連する機能を実行するモジュールとして働くように設計され、そのようなモジュールとして販売される集積回路のグループなど)、並びに/或いは、さらに言えば任意の他の集積回路で実施することができる。
[00103]さらに、様々な先述の図面のアーキテクチャ及び/又は機能を、汎用コンピュータシステム、回路基板システム、エンターテイメント目的の専用ゲーム機システム、特定用途向けシステム、及び/又は任意の他の所望のシステムで実施することができる。例えば、システム1200は、デスクトップコンピュータ、ラップトップコンピュータ、及び/又は任意の他のタイプの論理の形態をとることができる。さらに、システム1200は、携帯情報端末(PDA)デバイス、携帯電話機デバイス、テレビジョンなどを含むがこれらに限定はされない様々な他のデバイスの形態をとることができる。
[00104]さらに、図示しないが、システム1200を、通信のためにネットワーク[例えば、遠隔通信ネットワーク、ローカルエリアネットワーク(LAN)、無線ネットワーク、インターネットなどの広域ネットワーク(WAN)、ピアツーピアネットワーク、ケーブルネットワークなど]に結合することができる。
[00105]様々な実施形態を上に説明したが、これらが、限定ではなく例としてのみ提供されたことを理解されたい。したがって、好ましい実施形態の広さ及び範囲は、上に説明した例示的実施形態によって限定されるのではなく、添付の特許請求の範囲及びその均等物に従ってのみ定義されなければならない。