(58)【調査した分野】(Int.Cl.,DB名)
第1の非対称メモリデバイスに格納するために第1のデータを受信することであって、読み出し操作の待ち時間が非対称メモリデバイスにおける書き込み操作の待ち時間とは異なる、受信することと;
前記第1の非対称メモリデバイスに含まれる第1のセグメントを、データを書き込むために利用可能な次のセグメントとして特定することであって、前記第1のセグメントは、第1のセグメントグループの一部として書き込まれ、セグメントは、非対称メモリデバイスにおける物理メモリ位置の論理マッピングを含み、単一操作において消去される前記物理メモリ位置の一部に関連付けられる、特定することと;
前記第1のデータを前記第1のセグメントに書き込むことであって、前記第1のデータは、データを書き込むために次に利用可能な前記第1のセグメントに含まれる第1のメモリブロックに書き込まれる、書き込むことと;
前記第1のセグメント内の前記次に利用可能なメモリブロックに前記第1のデータを書き込むことに関連して、前記第1のセグメントおよび前記第1のメモリブロックに関連する情報を格納することと;
前記非対称メモリに格納するために第2のデータを受信することと;
前記第1のセグメントが、前記第1のセグメントに格納されたデータで一杯であることを決定することと;
前記第1のセグメントが一杯であることの決定に基づいて、前記第1の非対称メモリデバイス内の第2のセグメントグループを選択することであって、データは、前記第1のセグメントグループと交互に、前記第2のセグメントグループに書き込まれる、選択することと;
前記第2のセグメントグループに含まれる第2のセグメントを、データを書き込むために利用可能な前記次のセグメントとして特定することと;
前記第2のデータを前記第2のセグメントに書き込むことであって、前記データは、データを書き込むために次に利用可能な前記第2のセグメントに含まれる第2のメモリブロックに書き込まれる、書き込むことと;
前記第2のセグメント内の前記次に利用可能なメモリブロックに前記第2のデータを書き込むことに関連して、前記第2のセグメントおよび前記第2のメモリブロックに関連する情報を格納することと;
を含む、方法。
前記同期ミラーリングモジュールによって、前記第1のデータおよび前記第2のデータを第2の非対称メモリデバイスに送信することであって、前記第2の非対称メモリデバイスは、前記第1の非対称メモリデバイスと類似したデータを格納するために構成され、前記第1の非対称メモリデバイスおよび前記第2の非対称メモリデバイスは、ネットワーク接続によって接続される、送信することと;
前記同期ミラーリングモジュールによって、ごく最近データが充填されたセグメントに関する情報を問い合わせることについての閾値に到達したかどうかを決定することと;
閾値に到達したことの決定に基づいて、ごく最近データが充填されたセグメントに関する情報に対する前記リクエストを送信することと;
前記リクエストに応答して、前記第1のセグメントおよび前記第1のメモリブロックに関連する前記情報を受信することと;
前記第1のセグメントおよび前記第1のメモリブロックに関連する前記情報を前記第2の非対称メモリデバイスに送信することと;
を含む、請求項2に記載の方法。
前記第1のセグメントおよび前記第1のメモリブロックに関する前記情報は、前記第2の非対称メモリデバイス内に、データを格納するために構成されるメモリ位置とは異なる第1のメモリ位置における第1のマーカとして格納される、請求項3に記載の方法。
前記同期ミラーリングモジュールにおいて、および、前記第2の非対称メモリデバイスから、前記第1のマーカのコピーを含むメッセージを受信することであって、前記メッセージは、前記第2の非対称メモリデバイスが停止から回復したことを示す、受信することと;
前記メッセージを受信することに基づいて、ごく最近データが充填されたセグメントに関する情報に対する新規リクエストを送信することと;
前記新規リクエストに応答して新規セグメントおよび新規メモリブロックに関連する情報を受信することであって、前記新規セグメントは前記第1のセグメントグループに含まれる、受信することと;
前記第1のマーカの前記受信したコピーから抽出される前記第1のセグメントおよび前記第1のメモリブロックに関連する前記情報と、前記新規セグメントおよび前記新規メモリブロックに関連する前記情報とを比較することであって、前記比較はデータを前記第2のセグメントグループに含まれるセグメントに書き込む間に実行される、比較することと;
前記比較に基づいて、前記第2の非対称メモリデバイスに格納されていない、前記第1の非対称メモリデバイス内の前記第1のセグメントグループに格納されたデータを特定することと;
前記特定したデータを前記第2の非対称メモリデバイスに送信することと;
を含む、請求項3に記載の方法。
データは、前記第1のセグメントおよび前記第1のメモリブロックに書き込まれるデータと比較して、遅い時間に前記新規セグメントおよび前記新規メモリブロックに書き込まれ、前記第2の非対称メモリデバイスに格納されていない、前記第1の非対称メモリデバイス内の前記第1のセグメントグループに格納されたデータを特定することは:
前記第1のセグメントおよび前記第1のメモリブロックに関連する前記情報と、前記新規セグメントおよび前記新規メモリブロックに関連する前記情報とを比較することに基づいて、前記第1のマーカが前記第2の非対称メモリデバイスに送信された後で、前記第1のマーカの前記コピーが前記第2の非対称メモリデバイスから受信される前に、前記第1の非対称メモリデバイスに書き込まれる前記第1のセグメントグループに含まれるセグメント内のメモリブロックを特定することと;
前記第1の非対称メモリデバイスに関連するトランスレーションテーブルを用いて、前記第1のセグメントグループ内の前記特定された物理メモリブロックに対応する前記第1の非対称メモリデバイス内の物理メモリ位置の検索を実行することと;
前記物理メモリ位置が有効なデータを保持しているかどうかを決定することと;
前記物理メモリ位置から前記有効なデータを取得することと;を含む、
請求項5に記載の方法。
メモリブロックは書き込みページを含み、前記トランスレーションテーブルは、非対称メモリデバイス内の物理メモリ位置に対するセグメントおよび書き込みページのマッピングを提供する、請求項6に記載の方法。
データがごく最近格納された、前記第1のセグメントグループに含まれるセグメントが一杯である場合にのみ、データは前記第2のセグメントグループに含まれるセグメントに格納される、請求項1に記載の方法。
前記第1のセグメントおよび前記第1のメモリブロックに関連する前記情報は、前記第1のセグメントに関連する第1のシーケンス番号と、前記第1のセグメント内の前記第1のブロックに関連する第2のシーケンス番号とを含み、前記第2のシーケンス番号は、前記第1のセグメント内の最初のブロックからのオフセットである、請求項1に記載の方法。
【発明を実施するための形態】
【0040】
種々の図面における同様の符号は同様の構成要素を示す。
【0041】
コンピュータシステムは一般に、データおよび命令の格納に用いられるメモリモジュールを含んでいる。メモリモジュールは、通常、処理中の一時的なデータ記憶のために用いられる揮発性メモリであるダイナミックランダムアクセスメモリ(DRAM)集積回路(IC)と、長期的なデータ格納のための磁気記憶ディスクとを含んでいる。コンピュータシステムによっては、DRAMおよび磁気記憶ディスクに加えて、またはそれらの代替として、不揮発性ランダムアクセスメモリ(NVRAM)システムが、データ記憶のために用いられる。NVRAMは、DRAMに匹敵するアクセスの粒度が細かい高性能な読み取りアクセスを提供するよう構成されてもよい。同時に、NVRAMは、磁気記憶ディスクに匹敵する一方で、磁気記憶ディスクと比較して小さい物理的空間を使用する高密度記憶装置を提供する大きな不揮発性記憶容量を提供できる。加えて、NVRAMは、DRAMおよび磁気記憶ディスクよりも電力消費が小さい。コンピュータシステムにおけるNVRAMの実現は、数ある中でも、NANDフラッシュおよびNORフラッシュメモリ、および相変化メモリ等のフラッシュメモリを含む。
【0042】
実装形態によっては、フラッシュメモリデバイスは、集積回路メモリチップであるフラッシュメモリダイスが取り付けられる1つ以上のメモリカードを含んでいる。この文脈において、メモリダイは、メモリチップとして表されるか、またはメモリチップとして参照されてもよく、2つの用語「ダイ」および「チップ」は区別なく用いられる。フラッシュメモリデバイスは、フラッシュメモリダイスが取り付けられる1つのメモリカードとして表されるか、または1つのメモリカードとして参照されてもよく、用語「フラッシュメモリデバイス」、「フラッシュメモリカード」、「メモリデバイス」、および「メモリカード」は、区別なく用いられる。
【0043】
企業用コンピュータシステムまたはサーバファーム等の大規模にデータを処理するいくつかのコンピュータシステムは、大量のメモリを用いてもよい。かかるシステムは、各カード上に多数のフラッシュメモリダイスまたはチップを有する複数のメモリカードをホストするメモリデバイスを用いてもよい。コンピュータシステムは、性能向上およびデータ信頼性を提供するために、データストライピング、データミラーリング、およびパリティ符号化(独立ディスクの冗長アレイ(RAID)と類似)のような技術を実装してもよい。
【0044】
ある意味では、データストライピングは、順序論理セグメントに対する管理およびアクセスが、メモリカード上に実装される異なるフラッシュメモリダイス等の異なる物理的記憶装置内の場所から格納され、アクセスされるような方法で、ファイル等の順序データを論理的に破壊する技術と呼んでもよい。ストライピングによって生成されたデータの各論理部分は、従って、データストライプと称される。
【0045】
データミラーリングは、連続的な可用性を確実にするようリアルタイムで別々の物理メモリに対する論理メモリボリュームの繰り返しである。ミラーリングされたボリュームは、別々のボリュームコピーの完全な論理表現である。フラッシュメモリデバイスに用いられる1つの種類のデータミラーリングは、一次メモリデバイスに格納されるデータが、1つ以上の二次メモリデバイスにおいてクローン化されるか、複製される同期ミラーリングである。実装形態によっては、同期ミラーリングは2サーバシステムまたはマルチサーバシステムを用いて実装され、ここで、書き込みがサーバのうちの1つに存在するメモリカード内で行われている場合、書き込まれるデータはネットワークリンクによって第2のサーバにも発送され、ここで、同じ動作が第2のサーバ上のメモリカードに対して実行され、その結果、第1のサーバが機能しない場合、第2のサーバが、進行中の書き込みのいずれも失うことなく、動作を引き継ぎ、再び続ける。2つのサーバでの書き込み操作は、同時に起こる。
【0046】
同期ミラーリングシステムにおいて、一次メモリデバイスは、アクティブサーバと呼ばれてもよい一方で、二次メモリデバイスは、パッシブサーバと呼ばれてもよい。アクティブおよびパッシブサーバに関する論理は、アクティブサーバ内のローカル記憶域およびパッシブサーバ内のリモート記憶域の両方に対してアプリケーションデータを格納するための書込み操作を連携させる。システムは、書き込み操作がアクティブサーバ内のローカル記憶域、並びにパッシブサーバ内のリモート記憶域の両方に対して完了するのを待機しなければならない。書き込み操作は、両方の操作が完了した場合に、発行したアプリケーションまたはオペレーティングシステムに通知される。同期ミラーリングにより、書き込み操作がローカル記憶域およびリモート記憶域において実行されるため、メモリ書き込み操作は時間がかかるように見える場合もある。
【0047】
不具合は同期ミラーリングシステムにおいて発生する場合があり、さまざまな形態を取る可能性がある。例えば、アクティブサーバ内のローカル記憶素子はクラッシュする場合があるが、パッシブサーバとのネットワーク接続は、パッシブサーバおよびリモート記憶素子と同様に、動作する。別の例として、ネットワーク接続は、書き込み操作がアクティブサーバ内のローカル記憶域にのみ実行されるが、パッシブサーバ内のリモート記憶域には実行されないというように機能しない場合がある。代替として、書き込み操作がネットワーク上で送信されたが、操作がリモートエンドで受信される前に、パッシブサーバがクラッシュした場合がある。
【0048】
同期ミラーリングシステムは、クラッシュが発生し、故障したメモリデバイスが取り替えられるか、サーバが再起動された後、アクティブおよびパッシブサーバ上の記憶素子が引き続き同期する状態を再現できなければならない。この文脈において、同期するとは、メモリブロックに対応する特定の論理ブロックアドレスがアクティブおよびパッシブサーバに要求される場合、アプリケーションまたはオペレーティングシステムがアクティブおよびパッシブサーバ両方において同じデータ内容を効率的に取得することを、システムによって提供される保証を指す。この特性は、デバイスの故障または他の障害状況とは関係なく、保証されなければならない。
【0049】
いくつかの従来のメモリシステムにおいて、アクティブおよびパッシブサーバ間の同期は、クラッシュからの回復時に完全な同期操作を行うことによって維持される。完全な同期操作において、システムは、アクティブおよびパッシブサーバが、サーバのうちの少なくとも1つが停止後に再起動された場合のそれらの状態に関して完全に分岐したと仮定する。システムは、いくつかの適切な機構を用いて、新しいアクティブサーバに相当するようなサーバのうちの1つを決定し、次いで、メモリの内容のすべてをアクティブサーバからパッシブサーバへコピーする。
【0050】
完全な同期操作は、例えば、クラッシュが起こる前に2つのサーバが長期間同期モードで動作していた場合のシナリオにおいて、非効率的である可能性がある。そのクラッシュからシステムが回復するには数秒かかる場合があり、その間に、システムは、クラッシュ前の時間に生じた、新しく決定されたパッシブサーバ上でのすべての書き込みが失われることを決定する。その結果、多くの情報が新しいアクティブサーバからパッシブサーバに転送されて、2つのエンドの同期を元に戻す必要がある。これにより結果として、多くの状況において容認できない高いダウンタイムを生じる。
【0051】
いくつかのメモリシステムは、部分同期または増分再同期を実行して完全な同期の欠点を回避する。部分同期または増分再同期の目的は、クラッシュまたはいくつか他の機能停止が生じた時間中に危険にさらされているアクティブおよびパッシブサーバに格納されるデータを同期させることにある。例えば、メモリシステムは約1ギガバイト/秒の入出力(I/O)速度を有してもよく、同期が約1秒間切れた場合、一次側に対して、同期ミラーリング対の2つの側は、クラッシュがその1秒間の途中のどこかで発生したため、危険にさらされているであろうデータである略1ギガバイトのデータを送信することによって再同期されなければならない。
【0052】
部分同期において、アクティブおよびパッシブサーバが機能停止後に接続を再構築する場合、2つのエンドは互いに問い合わせて、どのメモリブロックが、接続の他のエンドが認識しなかった接続の1つのエンドにおいて変更されたかを決定する。メモリシステムによっては、部分同期は、障害回復ログ(DRL)を用いることによって達成される。かかるシステムにおいて、メモリブロックへの書き込みデータに加えて、ログベースの構造は、更新される予定のアクティブな記憶場所上のメモリブロックに関する情報を記録し、更新が接続の両端で行われた場合に、それを行った後に別の表記を行うアクティブノード上で保持される。例えば、書き込みI/O操作が、論理ブロックアドレス(LBA)Xに対応するデータを更新してもよい。従って、システムは、ログベースの方法で保持され、LBA Xが更新されているメタデータ構造に入力し、次いで、システムは、LBA Xに対応する物理メモリ位置に関する操作を実行し、LBA Xが更新された接続のアクティブおよびパッシブエンドの両方から確認応答を受信した後、システムは、LBA Xが接続の両エンドで更新されたことを記録する。その結果、更新されているLBAに対応するメタデータ構造内の入力は、両方のコピーが返された場合にのみ削除される。
【0053】
部分同期がDRLを実装するシステムにおいて実行される場合、システムは、DRLを見て、開始された書き込みがあることを示しているが、書き込みが完了したことのログの別の表示が無い入力を調べる。すべてのかかる入力に対して、相当するデータは、場合によっては再同期されなければならない。
【0054】
同期ミラーリングシステムにおいて、パッシブサーバが応答せず、アクティブではないことがわかる状況が生じる場合がある。これは、例えば、アクティブサーバとパッシブサーバとの間の接続が故障した場合、またはパッシブサーバがクラッシュしたための場合である可能性がある。かかる場合において、アクティブサーバは、パッシブサーバがアクティブではないか、もはやオンラインではないことを認識してもよい。システムは、DRLに加えて、非複製書き込みログと称されてもよい第2のデータ構造を用いることによってかかる状況に対処してもよい。
【0055】
非複製書き込みログは、パッシブサーバに認識されていないアクティブサーバにおける格納ブロックに関する情報を保持するが、これはパッシブサーバがダウンしている時にかかるブロックが書き込まれたためである。従って、パッシブサーバが復旧すれば、アクティブエンドは、パッシブエンドに書き込まれるべきブロックを迅速に決定するよう非複製書き込みログを用いてすべての非複製書き込みを再生できる。
【0056】
実装形態によっては、最適化が、非複製書き込みログをDRLと組み合わせることによって実行される。かかるシステムは、非複製書き込みを、第2の表記がパッシブサーバから受信されていないそれらの書き込み操作として認識する。
【0057】
他の実装形態によっては、最適化は、DRLの精度とDRLを効率的に格納する方法との間でトレードオフすることによって実行される。例えば、書き込み操作は、4キロバイト(KB)の粒度で実行されてもよいが、情報は、メガバイトの粒度でDRLに格納されてもよい。従って、4KBの粒度でDRLに情報を記録する実装形態とは対照的に、メガバイト粒度でDRLに対して行われる入力の数は、メモリに対して実行される同じ量の書き込み操作に対して略256倍少なく、DRLに記録される情報のより大きな不正確性を代償とする、DRLへの書き込みにおける相当に少ないオーバーヘッドである。システムがクラッシュから復旧する場合、より粒度の細かい情報がDRLにおいて利用できないため、システムは、2つのエンドの同期を戻すよう少なくともメガバイトのデータを転送しなければならない。
【0058】
障害回復ログおよび/または非複製書き込みログを用いることは、ログ書き込みを実行することに関係する待ち時間のため、同期ミラーリングを実装するメモリシステムにおいて書き込み操作を実行するためのオーバーヘッドに追加されてもよい。それは、障害回復ログおよび/または非複製書き込みログを用いることなく部分同期を提供するメモリシステムを設計することに有用である場合がある。実装形態によっては、かかるメモリシステムは、フラッシュトランスレーションレイヤによって提供されるデータ構造等の、種々の他の使用に対するメモリシステムに存在するデータ構造を用いることによって実装されてもよい。
【0059】
実装形態によっては、データは、ログ方法でフラッシュメモリデバイスに書き込まれ、すなわち、メモリブロックは、メモリブロックに関連するシーケンス番号を読み取ることによって、特定のメモリブロックが別のメモリブロックよりも先に、または後に読み込まれたかどうかを決定できるように、順番に配置されてもよい。順番通りにメモリブロックを書き込んだ結果である論理配置は、データ構造が、DRLおよび非複製書き込みログを用いるメモリデバイス内の障害回復ログおよび非複製書き込みログによって提供される情報と同様の情報を提供するフラッシュ管理レイヤにおいて利用できるように、ログ構造と類似している。フラッシュ管理レイヤは同様の情報を提供するため、実行時に保持される追加の障害回復ログまたは追加の非複製書き込みログを持っている必要は無い。
【0060】
一般に、フラッシュメモリカードは複数のパッケージに編成され、パッケージは複数のフラッシュメモリダイスを含んでいる。フラッシュメモリダイは、複数のダイ平面から成っている。ダイ平面は、フラッシュメーカにとって同一のメモリ領域を複製し、容量を駆動するために同じフラッシュメモリダイ内部で回路機構を並列に制御できる効率的な方法である。
【0061】
ダイ平面は複数の消去ブロックを含んでいる。消去ブロックは1度に消去できるフラッシュの最小物理単位である。各消去ブロックは複数の書き込みページを含んでおり、ここで、書き込みページは、メモリ書き込み操作を実行するために一回にアクセスできるフラッシュメモリダイの最少物理セクションである。メモリデバイスの技術次第で、書き込みページのサイズは、デバイス当たり8、16、または32KBであってもよい。書き込みページは、ひいては、いくつかの読み出しページから成っていてもよい。
【0062】
性能、冗長性、および信頼性を含む種々の考察に対して、フラッシュメモリ管理論理は、フラッシュメモリダイスのグループをRAID構成に統合してもよい。書き込み操作を実行する場合、アプリケーションデータは、フラッシュメモリダイスのグループにわたって分散されているページを書き込むよう、書き込まれるか、「ストライピング」される。例えば、1つのストライピング方式において、アプリケーションデータは、8つのフラッシュメモリダイスのそれぞれにおけるページをRAIDストライプに書き込むよう書き込まれてもよく、ここで、書き込みページのサイズは8KBである。従って、RAIDストライピングされたフラッシュメモリデバイスに書き込むことのできる効率的な最小単位は、8×8KBのオーダー、すなわち、64KB以上であってもよい。
【0063】
実装形態によっては、フラッシュメモリデバイスの物理的領域は、セグメントとも呼ばれるフラッシュセグメントとして論理的に識別されてもよい。フラッシュセグメントは、1つ以上の消去ブロックの集合×RAIDストライプの幅である。例えば、セグメントは、1つのRAIDストライプにおいて各フラッシュメモリダイにおける2つの消去ブロックにまたがっていてもよい。消去ブロックのサイズは約2MBであってもよく、RAIDストライプは8つのフラッシュメモリダイスを含んでもよい。従って、セグメントのサイズは約32MBである。
【0064】
実装形態によっては、フラッシュセグメントは、フラッシュメモリデバイスの領域が消去され、管理される粒度である。新しいアプリケーションデータを受信すると、フラッシュメモリデバイスは、1つの物理ブロックに書き込み、その後、次の物理ブロック、その後、次の物理ブロックと、メモリデバイスのいくつかの部分が一杯になるまで書き込み、その後、メモリ管理は、フラッシュメモリダイスの先に一杯となった部分に関してガベージコレクションを実行する。
【0065】
ガベージコレクションがフラッシュメモリダイスの一部に行われると、システムはその部分から有効データを再配置し、関連するブロックを消去し、新しい書き込みを受信できるようにメモリ部分を利用可能に元に戻す。セグメントは、フラッシュ管理レイヤがフラッシュメモリダイスの一部を消去するレベルの最小単位である。物理的なフラッシュは、消去ブロックのレベルで消去されてもよいが、フラッシュ管理レイヤは、2つ以上の消去ブロックが1度に消去されることを可能にしているため、セグメントを用いている。
【0066】
この文脈において、フラッシュ管理レイヤは、フラッシュメモリダイス等のフラッシュメモリデバイス内の物理的位置を管理するよう構成され、物理メモリを上位アプリケーションおよびオペレーティングシステムと接続して機能させるハードウェアおよびソフトウェア論理のコレクションを含むフラッシュトランスレーションレイヤと同義である。実装形態によっては、フラッシュ管理レイヤは、フラッシュメモリダイスを管理するためのマスタコントローラ、およびいくつかのスレーブコントローラを含んでおり、そのそれぞれは、フラッシュメモリダイスのサブセットと関連する。
【0067】
フラッシュ管理レイヤはまた、フラッシュトランスレーションテーブル等のフラッシュメモリデバイスに埋め込まれるソフトウェア(すなわち、ファームウェア)も含んでいる。DRAMページまたはファイルシステムブロックがフラッシュメモリダイデバイスにおいて管理される粒度は、一般に、フラッシュ記憶装置のためのフラッシュ管理レイヤの実装に特有の論理構造であるトランスレーション単位と称される。トランスレーションテーブルは、論理ブロックアドレス(LBA)を、物理フラッシュ位置を指す物理ブロック番号(PBN)にマッピングする。フラッシュ管理レイヤは、トランスレーションテーブルを内部的に、通常、固定ブロック粒度で保持し、すなわち、固定サイズのLBAが固定サイズのPBNにマッピングされる。このトランスレーションの固定粒度がトランスレーション単位と称される。システム全体は、トランスレーション単位をアプリケーションまたはオペレーティングシステムからの予想されるデータアクセスサイズと同じサイズに選択することによってより効率的に作成されてもよい。フラッシュメモリデバイスにデータを格納するアプリケーションおよびオペレーティングシステムのレベルにおいて、データアクセスの自然なブロックサイズは、いくつかのカテゴリに分類され、1つの一般的なサイズは4KBである。従って、実装形態によっては、トランスレーション単位は4KBのサイズで構成される。
【0068】
実装形態によっては、ヘッダ情報は各セグメントと関連付けてもよい。ヘッダ情報はシーケンス番号であってもよい。例えば、フラッシュメモリダイスは、セグメント番号1、セグメント番号2、セグメント番号3等として管理されてもよい。シーケンス番号を各セグメントと関連付けることによって、フラッシュ管理は、各セグメントと新しい書き込みを受信するために利用可能にされた時間順序で効率的に関連付けることができる。その結果、どのセグメントに書き込みページが属するかによって、フラッシュ管理は、低いシーケンス番号を有するセグメント内の書き込みページが高いシーケンス番号を有するセグメント内の書き込みページの前に書き込まれたことを決定してもよい。これは、フラッシュメモリダイス内の書き込みページのための、それらがいつ書き込まれたかに関する時間順序を生成し、これは、ログが通常、ログの先頭以降、順序通りに書き込まれるため、従来は、ログ方式で書き込まれるフラッシュメモリデバイスと呼ばれている。
【0069】
ある時点で、フラッシュメモリデバイス内のいくつかのセグメントは完全に書き込まれ、アクティブに書き込まれているいくつかのセグメントが存在し、クリーン状態にあるいくつかのセグメントが存在し、それらはまだ全く書き込まれていない。アクティブセグメントは、書き込みページがアクティブに書き込まれているセグメントであるため、シーケンス番号、すなわち、メモリシステムにおけるアクティブセグメントのシーケンス番号のセットは、メモリデバイス内にごく最近格納されたアプリケーションデータに記号を記すよう考慮されてもよい。
【0070】
フラッシュメモリデバイスは、同期ミラーリング操作を管理するために構成される上位論理モジュールを含んでもよい。例えば、アクティブおよびパッシブサーバは、2つのエンド間のデータミラーリングと、サーバのうちの1つが故障モードから復旧する場合のデータの部分同期とを管理する上位ソフトウェアドライバを含んでもよい。上位ソフトウェアドライバは、同期ミラーリング操作を管理するためにフラッシュ管理レイヤと相互作用してもよい。
【0071】
特定の時間において、上位ソフトウェアドライバはアクティブセグメントに関する情報に対してフラッシュ管理モジュールに問い合わせる。クエリ用のトリガは時間ベースであってもよく、例えば、問い合わせは定期的に行われてもよい。代替として、クエリ用のトリガは、書き込まれた物理メモリ量に基づいてもよい。例えば、クエリは最後のクエリ以後書き込まれるセグメントの閾値に基づいてもよい。
【0072】
上位ソフトウェアドライバからのクエリに基づいて、フラッシュ管理レイヤは、ごく最近書き込まれたセグメントのシーケンス番号、および、ある時点、例えば、時間T1におけるセグメント内のメモリブロックを決定する。フラッシュ管理レイヤは情報を上位ソフトウェアドライバに送信する。より多くの時間が経過した後、新しい書き込みがシステムに到来し、フラッシュメモリの領域内に格納される。時間T2において、フラッシュ管理レイヤは、新しいクエリを上位ソフトウェアドライバから取得し、それに従って、ごく最近書き込まれたセグメント/時間T2におけるセグメント内のメモリブロックに関する情報を送信する。
【0073】
2つの異なる時点に対応するシーケンス番号を検査することによって、上位ソフトウェアドライバは、T1において書き込まれなかったが、T2で書き込まれた、特に、書き込みページがT2−T1の時間間隔で実行される書き込み操作を含むセグメントおよびメモリブロックを決定できる。
【0074】
例えば、時間T1において、フラッシュメモリデバイスは、上位ソフトウェアドライバに送信される、シーケンス番号が37であった1つのアクティブセグメントを有していた。時間T2において、アクティブセグメントのシーケンス番号は42である。T2およびT1に対応するシーケンス番号を読み取ることによって、上位ソフトウェアドライバは、セグメント37、38、39、40、および41が時間間隔T2−T1の間に完全に書き込まれ、セグメント42が部分的に書き込まれることを決定できる。セグメント37、38、39、40、および41に含まれるメモリブロックのみが期間T2−T1において変化したため、フラッシュ管理は、セグメント37、38、39、40、および41が存在するフラッシュメモリダイス内の物理的位置を決定できる。
【0075】
従って、シーケンス番号が、所定の時間間隔中に修正されたであろうフラッシュメモリブロックを特定するため、アクティブセグメントと関連付けられたシーケンス番号の跡を追うことによって、フラッシュ管理レイヤおよび上位ソフトウェアドライバは、障害回復ログおよびコミットされていない書き込みログの組み合わせによって提供される情報と同じ情報を取得してもよい。
【0076】
方法、システム、およびデバイスを、フラッシュセグメントと関連付けられるシーケンス番号を用いるフラッシュメモリデバイスにおける同期ミラーリングに対して、以下のセクションで説明する。この検討のため、用語「フラッシュメモリダイ」、「フラッシュメモリチップ」、および「フラッシュメモリ」は、同じ意味で用いられる。用語「アクティブサーバ」、「ローカル記憶素子」、および「ローカルエンド」は、同じ意味で用いられる。同様に、用語「パッシブサーバ」、「リモート記憶素子」、および「リモートエンド」は、同じ意味で用いられる。加えて、残りのセクションはフラッシュメモリデバイスに関して説明するが、ここで説明する技術は、非対称的挙動の態様を有する他の形態のメモリデバイスに等しく適用可能であってもよい。例えば、相変化メモリデバイスは、これらの操作を用いるよう構成されてもよい。
【0077】
図1は、データを記憶するためのフラッシュメモリを用いるシステム100の実施例を示している。システム100は、フラッシュセグメントに関連付けられるシーケンス番号を用いるフラッシュメモリデバイスへのデータの同期ミラーリングのための技術を実装してもよい。
【0078】
システム100は、ネットワーク104によって相互接続される1つ以上のコンピュータサブシステム102を含んでいる。コンピュータサブシステム102は、106A、106B、および106C〜106N等の1つ以上のサーバを含んでいる。
【0079】
各コンピュータサブシステム102は、106A、106B、106C、および106N等のサーバのアレイをホストするサーバラックであってもよい。これは、例えば、システム100が企業用のサーバファームまたはバックエンド処理センタである場合であってもよい。コンピュータサブシステムはデータセンタ内等の1つの物理的位置に共通して位置してもよく、または、それらは地理的に分散されてもよい。
【0080】
コンピュータサブシステム102は、互いに、および、回線交換データネットワーク、パケット交換データネットワーク、または、データを担持することのできる、インターネットプロトコル(IP)ベースまたは非同期転送モード(ATM)ベースのネットワーク等の、有線または無線ネットワークを含む、いずれか他のネットワークを含んでもよいネットワーク104を介してリモートコンピュータと通信する。ネットワーク104はローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)であってもよい。ネットワーク104は、インターネット、アナログまたはデジタル有線および無線ネットワーク(IEEE802.11ネットワーク、公衆交換電話網(PSTN)、サービス総合デジタル網(ISDN)、およびデジタル加入者回線(xDSL)等)、第3世代(3G)または第4世代(4G)移動通信ネットワーク、有線イーサネットネットワーク(イーサネット:登録商標)、イントラネットおよび/またはデータを担持するためのいずれか他の配信またはトンネル式機構等のプライベートネットワーク、またはかかるネットワークのいずれか適切な組み合わせを含んでもよい。加えて、ネットワーク104は、セキュアハイパーテキスト転送プロトコルトラフィック(HTTPS)または仮想プライベートネットワーク(VPN)等のセキュアなトラフィックを処理し、コンピュータサブシステム102間の接続がVPNまたはHTTPSを用いるようなセキュアな接続であってもよいように構成されてもよい。しかし、他の実装形態において、接続はセキュアではない接続であってもよい。
【0081】
各サーバ106A、106B、106C、または106Nは、ハードドライブおよびフラッシュメモリ等の、データを記憶するためのメモリモジュールを含むコンピューティングデバイスである。フラッシュメモリは、複数のフラッシュメモリチップが取り付けられるメモリカードの形態であってもよい。フラッシュメモリカードは、単にパッケージと称されてもよい複数のメモリパッケージまたはダイパッケージに編成されてもよい。パッケージは、フラッシュメモリダイスを含むマルチチップモジュールである。各フラッシュメモリダイは、データが格納されるメモリセルの構成要素ブロックを含むフラッシュ平面から成っていてもよい。実装形態によっては、2つの平面を持つダイは2つの別個の小領域を有し、各小領域はそれ自体のメモリアレイおよびインタフェース回路機構を持っている。ダイは、コマンドを一方の平面または他方に(または、場合によっては、両平面に)送信するデマルチプレクス構造を有している。メモリセルは、特定のメモリセルに格納されるデータの値に対応する2進数(ビット)を格納するシングルレベルセル(SLC)であってもよい。代替として、メモリセルは、特定のメモリセルに関連付けられる論理書き込みページ位置に格納されるデータの値に対応する数ビットを格納するよう構成されるマルチレベルセル(MLC)であってもよい。
【0082】
各サーバは、サーバ内のマザーボードに接続されるかかるフラッシュメモリカードの多重インスタンス(例えば、最大16から24)を含んで、小型のメモリカードに対する0.5テラバイト(TB)から、大型のメモリカードに対する約100TB容量までのシステムの範囲で変化してもよい総フラッシュメモリ容量をもたらしてもよい。フラッシュメモリカードの観点からすると、メモリカードが含まれるサーバは、メモリカードのホストシステムとみなされてもよい。従って、上記の例示的な図に基づいて、ホストシステムの総容量は、システム内のカードの数によって乗算される0.5TBから100TBの範囲であってもよい。
【0083】
実装形態によっては、サーバ106A、106B、106C、または106Nのうちのいくつかは、同期ミラーリング設定に対するアクティブサーバとして、またはパッシブサーバとして構成されてもよい。例えば、サーバ106Aは、ネットワーク104を介して、リモートコンピュータサブシステム102におけるパッシブサーバに、または、1つ以上のリモートコンピュータサブシステム102におけるいくつかのパッシブサーバに接続されるアクティブサーバであってもよい。別の実施例として、サーバ106Aは、同じサブシステム102内のパッシブサーバとしてのサーバ106Cに、または、パッシブサーバとしての、106Bおよび106C等のいくつかのサーバに接続されるアクティブサーバであってもよい。
【0084】
先に言及したように、フラッシュメモリは、電源が切断された場合にその情報を保持する(従って、不揮発性)ランダムアクセスメモリの種類であるNVRAMの形態である。これはDRAMとは対照的で、静的ランダムアクセスメモリ(SRAM)であり、両方とも、電力が印加されている間だけデータを保持する。NVRAMは、メモリ読み込み、書き込み、または消去等の構成要素の操作が、1つ以上のオーダーで互いに異なる非対称的な特性を有する。例えば、メモリ読み取りは、操作がDRAM内で実行されるのと同じオーダー内で実行され、メモリ書き込み操作は相対的により遅く実行され、消去操作はさらに大きな制限を有する。さらに、特定の種類のNVRAMモジュールは、限定された書き込み数を有してもよい。これは、例えば、いくつかの種類のNVRAM情報記憶機構に存在する物理的な特徴のために、各NVRAM物理セルがプログラミングされ、および/または限られた回数で消去されることを可能にする場合であってもよい。異なる種類のNVRAMは、根本的な物理機構およびメモリセルの密度に依存する異なるアナログ特性(根本的な「雑音の多い媒体」特徴)を有してもよい。
【0085】
各サーバは、メモリモジュールに格納されたデータを処理するためのプロセッサも含んでいる。実装形態によっては、プロセッサは、ホストシステムに、例えば、メモリカードが結合されるサーバ内のマザーボードに存在する。かかる実装形態において、フラッシュメモリの管理はホストシステムによって実行されてもよい。他の実装形態によっては、1つ以上のプロセッサがフラッシュメモリカード内に埋め込まれていてもよい。かかる実装形態において、フラッシュメモリの管理は、メモリカード自体に埋め込まれるプロセッサによって、または、メモリカードに埋め込まれるプロセッサとホストシステム内のプロセッサとのいくつか好適な組み合わせによって実行されてもよい。
【0086】
プロセッサは、フラッシュメモリまたは読み出し専用メモリ等のどこか他の場所に格納されている命令を実行するよう構成されてもよい。命令は、データを処理するため、フラッシュメモリチップのサブセクションの粒度でデータストライピングを実行するため、劣化したメモリセクションとのデータストライプを、劣化領域を含むフラッシュメモリチップのセクションを動的に再ストライピングすることによって復旧させるための命令を含んでもよい。
【0087】
各サーバはまた、処理操作中のデータの一時的な記憶のためのDRAMを含んでもよい。加えて、各サーバは、同じコンピュータサブシステム102上または他のコンピュータサブシステムにおける他のサーバまたはリモートコンピュータと通信するためのネットワークインタフェースを含んでいる。
【0088】
図2A〜2Bは、フラッシュメモリダイスを含むメモリデバイス200の実施例を示している。メモリデバイス200は、例えば、サーバ106A、106B、106C、および106Nのうちの1つ等のシステム100におけるサーバ内に含まれてもよい。しかし、メモリデバイス200はまた、他のシステム内に含まれてもよい。
【0089】
図2Aは、一方の側から見たメモリデバイス200の略図を示している。図示のように、メモリカードであるメモリデバイス200は、ホストエッジコネクタ204を有するベースボード202を含んでいる。マスタコントローラ206はベースボード202上に実装されている。ベースボード202上に実装されているものには、パッケージ212〜232等の1つ以上のメモリパッケージもある。
【0090】
ベースボード202は、マスタコントローラ206および様々なパッケージ212〜232を含むメモリカード200の種々の構成要素を相互接続するためのプリント回路基板の配線の1つ以上の層を含むプリント回路基板(PCB)である。ベースボード202は、メモリカード200が106A、106B、106C、または106N等のサーバのシャーシ内部に含まれることを可能にするフォームファクタのものであってもよい。実装形態によっては、ベースボード202は、メモリカード200のメモリ容量を拡張するよう用いられてもよいドーターボードを支持するよう構成されてもよい。例えば、ベースボード202は、ドーターボードが結合されてもよいソケットを含んでもよい。ドーターボードは、パッケージ212〜232に類似したいくつかのメモリパッケージを含み、それによって、メモリカード200の総メモリ容量を増加させてもよい。
【0091】
ホストエッジコネクタ204は、ホストシステムのマザーボードに取り付けられるソケットに結合するよう成されている。例えば、コネクタ204は、メモリカード200をサーバ106A、106B、106C、または106Nのいずれかに含まれるマザーボードに結合してもよい。コネクタ204は、データをメモリカード200とホストシステムとの間で転送するために構成されるコンピュータデータバスコネクタである。例えば、コネクタ204は、周辺構成機器相互接続(PCI)バス、PCI拡張(PCI−X)バス、PCI Express(PCIe)コンピュータ拡張バス、またはいくつか他の適切なコネクタであってもよい。
【0092】
マスタコントローラ206は、メモリカード200内に含まれるフラッシュメモリチップ内のデータの記憶と検索を管理するために構成される処理デバイスである。実装形態によっては、メモリカード200は、複数のマスタコントローラ206を含んでいる。実装形態によっては、マスタコントローラ206は、パッケージ212〜232内に含まれ、複数のマスタスレーブメモリバスチャンネルによってマスタコントローラ206に結合される1つ以上のスレーブコントローラを管理する。他の実装形態によっては、スレーブコントローラは、一方で、マスタおよびスレーブコントローラ間の論理差を保持しながら、マスタコントローラとしての(パッケージ等の)同じ論理ユニット内に含まれる。さらに他の実装形態によっては、マスタコントローラ206は、パッケージ212〜232の外部の1つ以上のスレーブコントローラを管理する。例えば、スレーブコントローラは、マスタコントローラとフラッシュメモリダイスとの間に置かれてもよい。マスタコントローラは、マスタスレーブメモリバスチャンネルを介してスレーブコントローラと通信する。各スレーブコントローラは、次に、例えば、別のチャンネルを用いてフラッシュメモリダイスのサブセットと通信して各ダイを制御する。
【0093】
ベースボード202の配線から形成されるホストバスチャンネルは、ホストシステムと通信するためにマスタコントローラ206をホストエッジコネクタ204に結合する。1つ以上のスレーブコントローラは、透過的アクセスをパッケージ内に含まれるフラッシュメモリに提供するよう成されている。マスタコントローラ206およびスレーブコントローラは、ホストシステム内のプロセッサに対するフラッシュメモリのネイティブアクセスを提供する。
【0094】
パッケージ212〜232のそれぞれは、複数のパッケージ化されたフラッシュメモリチップを実装する矩形のプリント回路基板を含んでいる。フラッシュメモリチップは、NANDフラッシュメモリダイ、NORフラッシュメモリダイ、またはいずれか他の適切な不揮発性メモリを含んでいてもよい。実装形態によっては、パッケージ212〜232のそれぞれは、読み出し操作、書き込み操作、および/または消去またはメンテナンス操作が特定の種類のメモリに特化されるように、メモリカード200に特定される異なる種類のフラッシュメモリを有してもよい。
【0095】
実装形態によっては、各パッケージは、他のパラメータの中でも、電気配線に基づく4つのペアリングおよびパッケージから出るピンアウトに配置される8つのNANDフラッシュメモリダイスを含んでいる。対になった2つのダイスは互いの兄弟と称されてもよい。パッケージは、各対に対して、両方のダイスがフラッシュ操作の観点からアクティブとみなすことができたとしても、ダイスのうちの1つが同時に入出力(I/O)操作を実行するためにアクティブとなることができるように構成される。従って、パッケージにおいて、ダイスのうちの4つが、同時に入出力(I/O)操作を実行してもよいが、8つすべてのダイスは、フラッシュ操作を実行するためにアクティブであってもよい。
【0096】
上記の実装形態において、図示の12のパッケージ212〜232に加えて、メモリカード200は、ベースボード202の裏面に実装されるさらに12のパッケージを含み、ベースボード202に実装される合計24のパッケージをもたらしている。加えて、メモリカード200はドーターボードを含み、24のパッケージがドーターボードに実装されている。従って、かかる実装形態において、メモリカード200内のパッケージの総数は48である。パッケージ当たり8つのダイスに対して、上記の構成はメモリカード200内で合計384のフラッシュメモリダイスをもたらしている。
【0097】
代替の実装形態において、パッケージ212〜232の数は12以外、例えば、数十のパッケージであってもよく、メモリカード200は、ベースボード202の裏面に実装される追加の数十のパッケージを含み、24以外の数のボード当たりのパッケージ総数をもたらしてもよい。1つ以上のドーターボード等のカード当たり複数のボードにより、メモリカード内のパッケージの総数は、数十または数百であってもよく、何百または何千ものダイスに至る。
【0098】
図2Aに示す特徴に加えて、メモリカード200は、ベースボード202に実装される1つ以上の組み込みプロセッサ、ROM、DRAM、および追加のNVRAMを含んでもよい。ROMは、メモリカード200に対するブート命令を格納するよう構成されてもよい。DRAMは、スクラッチパッドメモリを組み込みプロセッサに設け、フラッシュメモリチップ内のデータにアクセスするようトランスレーション構造(例えば、物理アドレスに対するトランスレーションテーブルマッピング論理アドレス)を格納するよう構成されてもよい。NVRAMは、定期的に更新されてもよいメモリカード200に対するファームウェア命令を含んでもよい。ファームウェア命令は、マスタコントローラ206およびスレーブメモリコントローラを駆動し、制御して、パッケージ212〜232のフラッシュメモリチップによりデータにアクセスするよう読み出し、書き込み、消去、またはメンテナンス操作を実行する。組み込みプロセッサは、ファームウェア命令を実行して、データにアクセスし、並びに、DRAM内のトランスレーション構造を読み出し、書き込み、消去、または保持するようマスタおよびスレーブメモリコントローラを駆動し、制御する。
【0099】
組み込みプロセッサは、さらに、マスタメモリコントローラ206およびエッジコネクタ204に結合されて、それぞれと通信してもよい。組み込みプロセッサはまた、エッジコネクタ204によってホストシステム内のホストプロセッサと通信して、メモリカード200におけるフラッシュメモリダイス内のデータにアクセスするよう、ホストアプリケーションまたはホストオペレーティングシステムソフトウェアからの読み出しおよび書き込み操作リクエストを受信してもよい。
【0100】
先に説明したように、各メモリカード200は、2種類の論理コントローラ、すなわち、ホストレベルのインタラクションを処理するマスタコントローラと、フラッシュレベルのインタラクションを処理するスレーブコントローラとを有してもよい。マスタコントローラおよびスレーブコントローラは、標準プロトコル、または専用ハードウェアインタフェース、または両方のいずれか好適な組み合わせを用いて通信してもよい。実装形態によっては、このインタフェースは、物理デバイス上のピンおよびベースボード上の配線を用いて実装される。マスタコントローラおよびスレーブコントローラが同じ物理デバイス内にある他の実装形態において、インタフェースは物理デバイス上の内部デバイス論理を用いて実装されてもよい。
【0101】
実装形態によっては、メモリカード200は2つの物理デバイス利用してもよく−そのそれぞれは、1つのマスタコントローラおよびいくつかのスレーブコントローラを実装している。マスタコントローラのうちの1つはコンピューティングデバイスのマザーボード上のPCI拡張スロット上の「ベースボード」上にあってもよく、他のマスタコントローラはベースボード上の拡張スロット上に位置する「ドーターボード」上にあってもよい。ホストとドーターボードのマスタコントローラとの間の通信は、ベースボードのマスタコントローラを介して経由されてもよい。かかる実装形態において、2つのマスタコントローラ間の通信はPCIeの標準インタフェースを介してであってもよい。また、専用ハードウェアインタフェースは実行可能であってもよい。
【0102】
マスタコントローラおよびスレーブコントローラは、フラッシュメモリシステムのデータパスを実装するよう、それらそれぞれの動作を調整する。この文脈において、データ平面とも称されてもよいデータパスは、マスタおよびスレーブコントローラが、どのフラッシュメモリ位置がメモリ操作に関与しているかをそれら自体では決定しないことを示している。代わりに、決定は、システムの制御パスまたは制御平面によって行われる。マスタおよびスレーブコントローラは、「制御パス」からコマンドを受信して、フラッシュレベルの操作を実行し、かかる操作を特定のホストDRAMリソースに対して行う。
【0103】
システムの制御パスは、ホストプロセッサまたはコントローラに関連する組み込みプロセッサによって実行されるファームウェア命令として実装されてもよいドライバソフトウェアによって実装されてもよい。実装形態によっては、カード当たり単一のドライバがあってもよい一方で、他の実装形態では、メモリカード当たりいくつかのドライバがあってもよい。ドライバソフトウェア命令により、各スレーブコントローラがマスタコントローラと単独に通信することを可能にしてもよい。
【0104】
実装形態によっては、ドライバソフトウェアは、デバイスドライバとしてホストコンピューティングデバイス上で実行される。デバイスドライバは、標準PCIeコマンドを用いてメモリカード上のマスタコントローラと通信し−標準の用語において、後者は「メモリマップドI/O」(MMIO)命令と称されてもよい(それらがDRAMの代わりに適切なデバイスに経路設定されることを除いては、それらはプロセッサレベルでのロード/格納命令である)。ドライバは、次に、標準のホストベースのアプリケーションプログラミングインタフェース(API)および機構(例えば、システムコール)を用いてホスト中央処理装置(CPU)アプリケーションおよびオペレーティングシステム(例えば、ファイルシステムコンポーネント)からのリクエストを受信する。
【0105】
他の実装形態によっては、ドライバソフトウェアは、ベースボードマスタコントローラと結合される組み込みプロセッサ上で実行される。これらの実装形態において、用語「ファームウェア」は、通常、ドライバソフトウェアを指すよう用いられる。さらに他の実装形態において、ドライバ機能は、1つ以上のマスタコントローラに関連する2つ以上の組み込みプロセッサ間で分割/並列方式で実行されてもよい。ファームウェアが1つ以上の組み込みプロセッサ上で実行される場合、アプリケーション/オペレーティングシステムリクエストは、例えば、ホストコンピューティングデバイス上にインストールされる中間の(独立した最小の)ソフトウェアドライバを用いる同じPCIeメモリマップドI/O命令を用いて、ファームウェアに通信される。
【0106】
先に説明したように、マスタコントローラ、スレーブコントローラ、およびドライバソフトウェアの組み合わせは、フラッシュトランスレーションレイヤまたはフラッシュ管理レイヤと呼ばれてもよい。フラッシュ管理レイヤは、例えば、フラッシュトランスレーションテーブルを用いて、論理メモリブロックをフラッシュメモリダイス内の物理的位置にマッピングするフラッシュメモリダイスを管理する。フラッシュ管理レイヤは、フラッシュメモリダイスを、同期ミラーリングモジュール等の上位アプリケーション、およびオペレーティングシステムと接続して機能させる。
【0107】
図2Bは、パッケージ212〜232のサブセットであるパッケージ212、214、および232内に含まれるフラッシュメモリダイスを示すメモリカード200の略図を示している。パッケージ212はフラッシュメモリダイス212A...212Nを含み、パッケージ214はフラッシュメモリダイス214A...214Nを含み、パッケージ232はフラッシュメモリダイス232A...232Nを含んでいる。ダイス212A...212Nのそれぞれは、212A(i)〜212N(i)等のスレーブコントローラおよびメモリブロック212A(ii)〜212N(ii)をそれぞれ含んでいる。ダイス214A...214Nのそれぞれは、214A(i)〜214N(i)等のスレーブコントローラのそれぞれをメモリブロック214A(ii)〜214N(ii)のそれぞれと共に含んでいる。同様に、ダイス232A...232Nのそれぞれは、スレーブコントローラ232A(i)〜232N(i)のそれぞれと、メモリブロック232A(ii)〜232N(ii)のそれぞれを含んでいる。
【0108】
図2Bは、スレーブコントローラ212A(i)〜212N(i)、214A(i)〜214N(i)、および232A(i)〜232N(i)がパッケージ212〜232に実装され、マスタコントローラ206と複数のフラッシュメモリダイスとの間に結合されることを示しているが、他の実装形態によっては、スレーブコントローラ212A(i)〜212N(i)、214A(i)〜214N(i)、および232A(i)〜232N(i)はベースボード202に実装され、マスタコントローラ206とパッケージ212〜232内の各フラッシュメモリダイスとの間に結合される。さらに他の実装形態において、スレーブコントローラ212A(i)〜212N(i)、214A(i)〜214N(i)、および232A(i)〜232N(i)は、マスタコントローラ206と共に集積回路パッケージ内に実装され、マスタコントローラ206とパッケージ212〜232内の各フラッシュメモリダイスとの間に結合される。
【0109】
各スレーブコントローラは、そのそれぞれのダイに透過的アクセスを提供するために構成される。先に説明したように、すべてのスレーブコントローラは、ベースボード202上のPCB配線として実装されてもよい複数のマスタスレーブメモリバスチャンネルによってマスタコントローラ206に接続される。マスタコントローラ206は、フラッシュメモリダイスをネイティブに制御して、パッケージ212〜232内に含まれるフラッシュメモリダイスによる予想可能な帯域幅と待ち時間性能を取得する。フラッシュメモリダイス212A...212N、214A...214N、または232A...232N上で行われるすべての操作(例えば、読み出し、書き込み、消去、リセット等の制御操作)は、マスタコントローラ206に対して(およびその制御の下で)完全に見える。パッケージ内のダイスのアクティブダイスのフラッシュメモリインタフェースは、それぞれのスレーブメモリコントローラを介してマスタコントローラ206に渡される。例えば、ダイ212Aのフラッシュメモリインタフェースは、スレーブコントローラ212A(i)を介してマスタコントローラ206に渡される。
【0110】
マスタコントローラ206は、フラッシュメモリダイス212A...212N、214A...214N、または232A...232Nによって支持される操作のそれぞれを直接実行することができる。スレーブコントローラはプロトコル変換を実行してもよいが、マスタコントローラからのリクエストを(関連するフラッシュメモリダイを伴うことなく)脱落/妨害しない。しかし、スレーブコントローラは、いずれのフラッシュメモリ操作も自主的に開始しない。
【0111】
各スレーブコントローラ212A(i)〜212N(i)、214A(i)〜214N(i)、および232A(i)〜232N(i)は、複数のフラッシュメモリダイス212A...212N、214A...214N、および232A...232Nによってそれぞれ共有されるメモリバスチャンネルを仲裁するよう構成される。各スレーブコントローラは、マスタコントローラ206と複数のフラッシュメモリダイスとの間の信号をバッファに格納し、多重化できる。加えて、各スレーブコントローラは、予想可能な不揮発性メモリ操作のシーケンスを共に複合操作に組み合わせて、フラッシュメモリダイスによる制御帯域幅を向上することができる。
【0112】
フラッシュメモリダイス212A...212N、214A...214N、および232A...232N内のデータがアクセスされる粒度は、メモリブロックまたはメモリページと呼ばれてもよい。例えば、フラッシュメモリダイ212Aは、
図2Bの212A(ii)によって集合的に表される複数のメモリブロックを含んでいる。メモリブロックのサイズは、用いられるフラッシュメモリの種類に基づいて変化してもよい。例えば、メモリブロックのサイズは、NANDフラッシュダイスおよびNORフラッシュダイスに対して異なっていてもよい。NANDフラッシュデバイスの中でも、サイズはNANDフラッシュのSLCおよびMLCタイプ間で異なっていてもよい。異なるプロセス生成からのNANDフラッシュはまた、異なるサイズ(例えば、34nmNANDフラッシュ対25nmNANDフラッシュ)を有してもよい。加えて、メモリブロックのサイズは、フラッシュメモリデバイス上で実行される操作の種類に基づいて変化してもよい。例えば、NANDフラッシュメモリデバイスに対して、データは書き込みページの単位でメモリデバイスに書き込まれてもよい。書き込みページのサイズは、小さい数のキロバイトのオーダーの(例えば、4KB〜16KBの範囲の)小さいものであってもよい。
【0113】
実装形態によっては、データは、通常、書き込みページよりも大きいサイズ(数メガバイトのオーダー)の消去ブロックの単位でNANDフラッシュデバイスから消去されてもよく、1つの消去ブロックは複数の書き込みページを含んでもよい。データが書き込みページに書き込まれると、書き込みページに関連する消去ブロック全体は、新しいデータが書き込みページに書き込まれる前に消去されなければならない。他の実装形態によっては、データは、先に説明したように、フラッシュセグメントの単位で消去されてもよい。フラッシュセグメントは、RAIDストライプにおけるフラッシュメモリダイス全体にわたって分散される複数の消去ブロックから成るフラッシュメモリカード200の物理範囲にマッピングする論理構造である。
【0114】
図3は、フラッシュメモリダイに格納されるメモリページ300の実施例を示している。フラッシュメモリチップは、メモリカード200内でパッケージ化される212A...212N、214A...214N、および232A...232Nのうちの1つであってもよい。しかし、フラッシュメモリチップはまた、他のメモリカードまたはシステム内に実装されてもよい。
【0115】
メモリページ300は、データ部302およびエラー訂正コード(ECC)部304を含んでいる。データ部302は、データが格納されるメモリユニット302a〜302hを含んでいる。メモリページは、306で示されるページ開始アドレスを有している。
【0116】
データ部のサイズは、特定のNVRAM設計および構成によって変化してもよい。図示の実施例において、データ部302は4KBのサイズを有している。データ部に対する他のサイズが用いられてもよい(例えば、8KBまたは16KB)。
【0117】
図3に示すように、メモリページ300は、ページ開始アドレス306から0〜7で示され、メモリユニット302a〜302hのそれぞれが512バイトのサイズであることを可能にするオフセットアドレスを有している。実装形態によっては、メモリユニット302a〜302hのそれぞれは書き込みページに相当してもよい一方で、データ部302は消去ブロックに相当してもよい。従って、かかる実装形態において、消去ブロック302は書き込みページ302a〜302hを含んでいる。
【0118】
ECCのサイズは基礎をなすNVRAM実装により変化する。データ部302が4KBである構成に対して、ECC部304は128バイトである。他の実装形態において、ECC部のサイズは、(例えば、MLCタイプのメモリ等のフラッシュデバイスのより多くの電流発生に対して)大きいサイズのデータ部の高い媒体エラー率に適合するよう(500バイトの範囲等)高くてもよい。
【0119】
ECC部304は、302a〜302hに格納されるデータのエラー訂正のために用いられるECCデータを格納するよう用いられる。エラー訂正コードは、各512バイトユニット302a〜302hに対して生成されてもよい。プログラム書き込みエラーまたはフラッシュ読み出しエラーは、エラー訂正コードを用いて検出されてもよい。ECCはビットエラーの先験的に予想される閾値を訂正することに有用である一方で、冗長データ記憶は、ビットエラーの数が先験的な閾値を超過した場合、または、メモリページ300が含まれるフラッシュメモリダイ等の記憶装置の完全な故障により、データを復旧させるために用いられてもよい。
【0120】
実装形態によっては、データは、それぞれ1つ以上の連続するオフセットアドレスと共にメモリページ全体にわたって1つ以上の512バイト領域に格納されてもよい。データが格納される領域は、メモリのチャンクと呼ばれてもよい。例えば、単一のオフセットアドレスを採用することにより、512バイトのデータチャンクがメモリページ300のユニット302a〜302hのうちの1つにわたって格納されることが可能となる。この場合のRAIDグループは、512バイトのデータチャンクの領域と共に一様に書き込まれてもよい。これは、例えば、7つのデータストライプと1つのパリティストライプが、ページ300等の4KBメモリページを実装する8つのフラッシュメモリダイスにわたって分散される場合であってもよい。この構成において、各ダイは、同じメモリページ内部の各ストライプに対して512バイト領域を認識する。
【0121】
他の実装形態によっては、一対のオフセットアドレス(例えば、オフセットアドレス6および7)は、1KBデータチャンクがメモリページ300の領域に格納されることを可能にするよう用いられてもよい。この場合のRAIDグループは、1KBのデータチャンクの領域と共に一様に書き込まれてもよい。これは、3つのデータストライプと1つのパリティストライプが、メモリページ300等の4KBメモリページを有する4つのフラッシュメモリデバイスにわたって分散される場合であってもよい。この構成において、各ダイは、同じメモリページ内部の各ストライプに対して1KB領域を認識する。
【0122】
実装形態によっては、ホストシステム上で動作するソフトウェアドライバまたは埋め込みファームウェアは、データを蓄積し、パリティを計算し、データおよびパリティ情報をフラッシュメモリダイスにわたるストライプとして格納する。パリティ計算は、例えば、ホストソフトウェアドライバまたは埋め込みファームウェアの命令に基づいて、ホストプロセッサによって実行されてもよい。他の実装形態において、メモリカード200上で動作するソフトウェアドライバは、データを蓄積し、マスタコントローラ206に対するコマンドを開始してもよい。マスタコントローラ206は次いで、パリティ情報を演算し、フラッシュメモリダイスにわたってデータおよびパリティストライプを格納することを担当することができる。
【0123】
メモリカード200はいくつかのかかるRAIDグループを含んでもよい。例えば、パッケージ当たり8つのダイスを有する48のパッケージを有するメモリカード200の実装を参照して、メモリカード200は、各グループに2つのパッケージ内に16のダイスを有する24のRAIDグループを含んでいてもよい。
【0124】
図4は、フラッシュメモリダイスのグループにわたって分散されるデータストライプにデータを冗長的に格納するフラッシュメモリダイスのグループ400の実施例を示している。フラッシュメモリダイスは、メモリカード200上に実装されてもよい。例えば、フラッシュメモリダイスは、メモリカード200内でパッケージ化される212A...212N、214A...214N、および232A...232Nであってもよい。従って、以下のセクションは、フラッシュメモリダイスのグループ400を、システム100内のカード200によって実現されるものとして説明する。しかし、フラッシュメモリダイスのグループ400はまた、他のメモリカードおよびシステムによって実現されてもよい。
【0125】
グループ400は、RAID認識のフラッシュメモリレイアウトの1つの実装形態を示している。グループ400は、N個のフラッシュメモリダイス402A、402B、および402C〜402Nを含み、集合的に402A...402Nと称する。データのページは、集合的に404A...404Mと称するM個のデータストライプ404Aおよび404B〜404Mにおけるフラッシュメモリダイス402A...402Nにわたって格納される。各ストライプは、データストライプ404Aに対してはA0...AN、データストライプ404Bに対してはB0...BN、データストライプ404Mに対してはM0...MN等のN個のデータチャンクを含んでいる。パリティストライプ406もフラッシュメモリダイス402A...402Nにわたって格納される。パリティストライプは、パリティチャンクPA−PMおよび単一のメタデータパリティチャンクPNから形成される。RAIDストライプにおける1つ以上のデータチャンクは、共に集合してセグメント408等のフラッシュセグメントを形成する。
【0126】
種々の構成が図示の構成以外に用いられてもよいことは留意されたい。例えば、パリティストライプの様々な符号化は、複数のデータストライプにわたるパリティ情報をグループ化することに用いられてもよい。同様に、パリティ情報は、別々のパリティのみのストライプに格納される代わりに、個々のデータストライプの一部として格納されてもよい。
【0127】
フラッシュメモリダイス402A...402Nは、フラッシュメモリダイス212A...212N、または214A...214N、または232A...232Nと同じであってもよい。各データチャンクのサイズは、用いられるフラッシュメモリダイスの数、およびデータストライプの数によって決まってもよい。各データチャンクは、書き込みページ、または消去ブロック、またはいくつか他の好適なサイズのメモリユニットと同じサイズを有していてもよい。
【0128】
各データストライプに対して、対応するパリティチャンクは、フラッシュメモリダイスに格納されるデータストライプに含まれるデータチャンクのパリティを演算することによって生成される。例えば、PAはデータストライプ404Aに対するパリティチャンクであり;従って、PAはデータチャンクA0...ANに基づいて算出される。メタデータパリティチャンクPNは、先に生成された複数のパリティチャンクから算出されるパリティである。従って、PNはパリティチャンクPA...PNに基づいて算出される。
【0129】
実装形態によっては、パリティストライプ内のパリティチャンクおよびメタデータパリティチャンクは、データがフラッシュメモリダイの故障、取り外し、交換に応じて復旧できるように、異なるフラッシュメモリダイ上に選択的に格納される。ストライプ内の各データチャンクはまた、データがフラッシュメモリダイの故障、取り外し、交換に応じて復旧できるように、異なるフラッシュメモリダイ上にも格納される。例えば、データストライプAに対して、データチャンクA0はフラッシュメモリダイ402Aに格納され、データチャンクA1はフラッシュメモリダイ40Bに格納され、データチャンクA2はフラッシュメモリダイ402Cに格納され、データチャンクANはフラッシュメモリダイ402Nに格納される。
【0130】
パリティチャンクおよびメタパリティチャンクは、それらの位置が既知であれば、フラッシュメモリダイス402A...402Nにわたって任意に格納できる。例えば、図示のように、パリティストライプ406におけるPAチャンクはフラッシュメモリダイ402Aに格納され、PBパリティチャンクはフラッシュメモリダイ402Bに格納され、PCパリティチャンクはフラッシュメモリダイ402Cに格納され、パリティストライプ406のメタパリティチャンクPNはフラッシュメモリダイ402Nに格納される。別の実装形態において、メタパリティチャンクPNはフラッシュメモリダイ402Aに格納されてもよく、PAパリティチャンクはフラッシュメモリダイ402Bに格納されてもよく、PBパリティチャンクはフラッシュメモリダイ402Cに格納されてもよく、PCパリティチャンクはフラッシュメモリダイ402Nに格納されてもよい。
【0131】
図示のように、M個のデータストライプおよび1つのパリティストライプは、各フラッシュ書き込みページに対してN個のフラッシュメモリダイス402A〜402Nにわたって書き込まれる。データおよびパリティは、様々なフラッシュメモリダイスにおける複数の書き込みページ、消去ブロック、またはいくつか他の好適なメモリユニットにわたってストライピングされる。データストライプおよびパリティストライプは、各構成要素のフラッシュメモリダイに対して1つまたは2つの書き込みページ、消去ブロック、またはいくつか他の好適なメモリユニット内部の異なるオフセットに書き込まれる。パリティチャンクPAは、データストライプ404Aのパリティを決定した結果である。パリティチャンクPBは、データストライプ404Bのパリティを決定した結果である。パリティチャンクPMは、データストライプ404Mのパリティを決定した結果である。PNは、フラッシュメモリダイ402Nに格納されるパリティメタデータチャンクを表しており、その値は、パリティデータチャンクPA〜PMのパリティである。
【0132】
システムは、「データチャンク」サイズの相対的サイズおよびシステムへの影響に関する特定のデータチャンクサイズの使用に対応するよう構成されてもよい。データチャンクは、消去ブロック、またはメモリに関連するサイズのいくつか他の好適なユニットと同等のサイズを有していてもよい。例えば、A0...ANのそれぞれは、それぞれのフラッシュメモリダイ402A...402N内の消去ブロックに対応してもよい。かかる場合において、ストライプ404Aに関連付けられるデータは、それぞれ、フラッシュメモリダイス402A〜402N内の消去ブロックA0〜ANに書き込まれてもよい。
【0133】
上で説明したように、ストライピングにおいて、データは、消去ブロック、またはメモリに関連するサイズのいくつか他の好適なユニットの粒度で、異なるフラッシュメモリダイスに冗長的に格納されてもよい。例えば、消去ブロックと同等のサイズのデータチャンクにおける404Aでストライピングされるデータは、フラッシュメモリダイスの異なるグループにおいて複製されてもよい。実装形態によっては、データは、先に説明したようなXOR符号化等のパリティ符号化を用いて冗長的に格納されてもよい。他の実装形態によっては、データはミラーリングを用いて複製されてもよい一方で、他の実装形態によっては、データは、パリティ符号化およびミラーリング、および/またはいくつか他の適切な機構のいくつか好適な組み合わせを用いて冗長的に格納されてもよい。
【0134】
1つの構成において、データストライプに対するデータチャンクは、8つのフラッシュメモリダイスに書き込まれてもよい。I/O操作に対する所定の時間でアクティブな各対の1つのダイを有する4つのペアリングに配置される8つのダイスを有するフラッシュメモリダイパッケージの実施例を参照して、上記の構成は、212等の1つのパッケージからの4つのアクティブな(I/O操作の見地から考慮される)ダイスと、214等の別のパッケージからの4つのアクティブなダイスとを含んでもよい。パッケージ内の4つのアクティブなダイスに書き込まれるデータチャンクは、各パッケージ内の他の4つの兄弟ダイスに複製されてもよい。このように、データは、RAIDのような信頼性を提供するようストライピングされ、複製されてもよい。実装形態によっては、スレーブコントローラの構成およびメモリダイスの数に対応するチャンネル等の要因によって、他の構成が用いられてもよい。例えば、データチャンクは、パリティ符号化と共に8つの異なるパッケージ内の8つの異なるダイスにわたってストライピングされて、万が一、いずれか単一のダイまたはパッケージの損失が発生した場合に、データチャンクを復元する能力を提供してもよい。
【0135】
上記の方法でデータを格納し、複製することに関わるフラッシュメモリダイスのグループは、RAIDグループを構成している。先に示したように、簡潔にRAIDとも称されるRAIDグループは、フラッシュメモリダイス402A...402Nに格納されるデータに対してデータ信頼性を提供する。この文脈において、RAIDグループは、RAIDグループ内の各フラッシュメモリダイに対してオフセットされる同じメモリアドレスにおいて整合される消去ブロックのコレクションと関連付けられる。上記の実施例において、RAIDグループは、2つのパッケージにわたって16のフラッシュメモリダイスを構成している。RAIDグループは8つの「幅」を有しており、すなわち、データストライプ内のデータチャンクが、8つのフラッシュメモリダイスにわたって格納され、8つの他のフラッシュメモリダイスに複製されている。
【0136】
セグメント408は、RAIDグループの各フラッシュメモリダイ内に1つ以上の消去ブロックを含んでいる。例えば、データチャンクA0...ANのそれぞれは、先に検討したように消去ブロックであってもよい。セグメント408は、図示のように消去ブロックA0...ANから構成されてもよい。代替構成において、セグメント408は、ダイ402A内のA0およびB0、ダイ402B内のA1およびB1等のようなフラッシュメモリダイ当たり2つの消去ブロックから構成されてもよい。データは、セグメント順にフラッシュメモリダイス402A...402Nに順次書き込まれる。データは、セグメント内部の消去ブロックに含まれる書き込みページの粒度でセグメントに書き込まれる。従って、セグメント408内の消去ブロックに対応する書き込みページは、次に上位のセグメント内の消去ブロックに対応する書き込みページに書き込む前に、最初に充填される。
【0137】
データをセグメントに書き込んでいる間、フラッシュ管理レイヤは、アクティブセグメント、すなわち、現在書き込まれているセグメントのトラックを維持する。実装形態によっては、フラッシュ管理レイヤはまた、現在書き込まれているアクティブセグメント内部の書き込みページおよび/または消去ブロックのトラックも維持する。
【0138】
パッシブサーバによる同期ミラーリング操作を管理するために構成される上位ソフトウェアドライバは、フラッシュ管理レイヤに特定の時点でアクティブセグメントに関する情報を問い合わせる。クエリを受信すると、フラッシュ管理レイヤは、ごく最近充填されたセグメントのシーケンス番号と、ごく最近書き込まれたセグメント内部のメモリブロックの番号とを決定する。フラッシュ管理レイヤは情報を上位ソフトウェアドライバに送信する。上位ソフトウェアドライバは順に、セグメントのシーケンス番号およびセグメント内部のメモリブロックを、パッシブサーバにおける上位ソフトウェアドライバによって保持されるデータ構造である「マーカ」内の情報を格納するパッシブサーバに転送する。実装形態によっては、アクティブサーバは、リモートエンドが更新された情報を受信したことをアクティブサーバに示す、パッシブサーバからの確認応答を受信してもよい。
【0139】
図5は、セグメントシーケンス番号を用いて同期ミラーリングを実行するメモリサーバ500の実施例を示している。メモリサーバ500は、同期ミラーリング設定においてアクティブサーバまたはパッシブサーバのいずれかであってもよい。メモリサーバ500は、記憶素子として、システム100内に含まれるメモリカード200と類似であってもよいメモリカード501を含んでいる。メモリカード501は、フラッシュメモリダイス504、506、50J、および50K(「J」および「K」は整数)を、スレーブコントローラ514、516、51J、および51Kを介してそれぞれ管理するマスタコントローラ502を含んでいる。フラッシュメモリダイ504は、504a、504b、504c、504x、504y、および504z等の複数の消去ブロックを含んでいる。同様に、フラッシュメモリダイ506は、506a、506b、506c、506x、506y、および506z等の複数の消去ブロックを含み;フラッシュメモリダイ50Jは、50Ja、50Jb、50Jc、50Jx、50Jy、および50Jz等の複数の消去ブロックを含み;フラッシュメモリダイ50Kは、50Ka、50Kb、50Kc、50Kx、50Ky、および50Kz等の複数の消去ブロックを含んでいる。
【0140】
フラッシュメモリダイス504、506、50J、および50Kは、特に、セグメント522、524、および52Mを含むRAIDストライプの一部である。各フラッシュメモリダイにおける消去ブロックは、様々なセグメントに分割される。例えば、フラッシュメモリダイ504において、消去ブロック504aおよび504xはセグメント522内にあり、消去ブロック504bおよび504yはセグメント524内にあり、消去ブロック504cおよび504zはセグメント52M内にある。各セグメントに対して、メモリカード501は、セグメントのシーケンス番号、および最近書き込まれたセグメント内部の消去ブロックを格納する。実装形態によっては、メモリカード501は、情報をフラッシュメモリダイスに格納してもよい。例えば、セグメント522に対するセグメントシーケンス番号は、フラッシュメモリダイ504において522aとして格納されてもよい一方で、セグメント524に対するセグメントシーケンス番号は、フラッシュメモリダイ506において524aとして格納されてもよい。他の実装形態によっては、メモリカード501は、セグメント情報をフラッシュメモリダイスから切り離して、例えば、オンボードRAM内に格納してもよい。
【0141】
メモリカード501はフラッシュトランスレーションテーブル530を含んでいる。フラッシュトランスレーションテーブル530は、論理ブロックアドレス(LBA)を、データが格納される1つ以上のフラッシュメモリダイス内の物理的位置を指す物理ブロック番号(PBN)にマッピングする。実装形態によっては、トランスレーションテーブルは、フラッシュメモリダイス504...50Kとは異なるダイナミックRAM(DRAM)構造であってもよい。しかし、他の実装形態において、トランスレーションテーブルは、1つ以上のフラッシュメモリダイスの専用部に、またはいくつか他の好適な位置に格納されてもよい。
【0142】
マスタコントローラ502、スレーブコントローラ514、516、51J、および51K、およびフラッシュトランスレーションテーブル530は共に、メモリカード501のためのフラッシュ管理レイヤを構成する。メモリサーバ500が同期ミラーリング設定においてパッシブサーバである場合の実装形態において、メモリカード501は、マーカA542およびマーカB544等のマーカを用いてアクティブサーバから受信されるアクティブセグメントに関する情報を格納する。マーカは別のメモリ構造540、例えば、RAMに格納されてもよい。加えて、または代替として、マーカはフラッシュメモリダイスに格納されてもよい。
【0143】
メモリサーバ500は、メモリサーバ500に関連する記憶素子、例えば、メモリカード501に対するミラーリング操作を管理する上位ソフトウェアドライバである同期ミラーリングモジュール550を含んでいる。同期ミラーリングモジュール550は、メモリカード501の外側で、メモリサーバ500における上位ソフトウェアの一部として実装されてもよい。
【0144】
図5は3つのセグメント522、524、および52Mを示しているが、メモリカード501内のセグメントの総数は、図示の3つよりも多い異なる数であってもよい。さらに、セグメントは、フラッシュメモリダイス504、506、50J、および50Kの一部から成るように示されているが、セグメントは、不図示の他のフラッシュメモリダイスの一部を含んでいてもよい。また、セグメントにおけるフラッシュメモリダイ当たりの消去ブロックの数は、図示の数とは異なっていてもよい。例えば、実装形態によっては、各セグメントは、フラッシュメモリダイ当たり1つのみの消去ブロックを含んでいてもよい。他の実装形態によっては、様々なセグメントは、様々な数の消去ブロックを含んでいてもよい。
【0145】
フラッシュメモリダイス504、506、50J、および50Kは同じパッケージに属していてもよく、または、それらは異なるパッケージに属していてもよい。先に説明したように、実装形態によっては、スレーブコントローラ514、516、51J、および51Kは、それぞれフラッシュメモリダイス504、506、50J、および50Kに関連するパッケージに実装され、マスタコントローラ502と各フラッシュメモリダイスとの間に結合されてもよい。他の実装形態によっては、スレーブコントローラ514、516、51J、および51Kは、ベースボード501に実装され、マスタコントローラ502と関連するパッケージ内のフラッシュメモリダイスとの間に結合される。さらに他の実装形態において、スレーブコントローラ514、516、51J、および51Kは、マスタコントローラ502と共に集積回路パッケージ内に実装され、マスタコントローラ502とフラッシュメモリダイスとの間に結合される。
【0146】
先に説明したように、実装形態によっては、フラッシュ管理レイヤは、ログに書き込むのと同様の方法で、新しいデータ項目をフラッシュ媒体ダイス504、506、50J、および50Kに書き込む。フラッシュ管理レイヤは、メモリカード501上の各フラッシュメモリダイ上のすべての記憶を消去ブロックの粒度で別々のユニットに切り出し、RAIDグループ内の消去ブロックのコレクションを順次セグメントに物理的に編成する。例えば、幅8のRAIDグループ(すなわち、RAIDグループ内に8つのフラッシュメモリダイスが存在する)および2メガバイト(MB)の消去ブロックサイズ(例えば、504aまたは506a)に対して、セグメント(例えば、522または524)のサイズは、2つの消去ブロック×幅8×2MB/消去ブロック、すなわち、32MBであってもよい。従って、テラバイトのオーダーであってもよいメモリカード501内のすべての記憶は、数十メガバイトのオーダーである複数のセグメントに編成されてもよい。
【0147】
フラッシュ管理レイヤが上位アプリケーションまたはオペレーティングシステムから書き込み操作を受信した場合、それは、現在アクティブなセグメントを特定し、書き込み操作に関連するデータをアクティブセグメント内の次に利用可能な位置に書き込み、LBA
X(例えば、消去ブロック504a内の書き込みページに対応する)がここでアクティブセグメントZ(例えば、セグメント522)に対応する物理的位置Y(例えば、フラッシュメモリダイ504内)に書き込まれたことをフラッシュトランスレーションテーブルに入力する。従って、フラッシュ管理レイヤは、アプリケーションデータでログ方式によりセグメントを充填し、ログ方式でフラッシュトランスレーションテーブルにエントリを充填する。書き込み1の後に書き込み2が続き、その後に書き込み3が続くような連続した3つの書き込みを考えると、書き込み1、2、および3に対するデータはログ方式でセグメント内に出現し、書き込み1、2、および3に対するトランスレーションエントリはログ方式でフラッシュトランスレーションテーブル内に出現する。
【0148】
現在のセグメントにマッピングする物理フラッシュメモリダイス内の新規データを書き込むために、スペースがそれ以上利用できない場合、現在のセグメントは、データで満たされていると言われる。フラッシュ管理レイヤは、別のセグメントにアクティブであるとマークを付け、次いで、前のセクションで説明したように同じ操作を効果的に実行する。実装形態によっては、効率的な結果のために2つ以上のアクティブセグメントがあってもよい。フラッシュ管理レイヤは、書き込みリクエストをアクティブセグメントのうちの1つに経路設定する。
【0149】
セグメントがデータを格納するためにアクティブにされると、フラッシュ管理レイヤはシーケンス番号をセグメントに関連付ける。実装形態によっては、シーケンス番号は、現在アクティブとなったセグメントの直前に書き込まれたセグメントの後の次に高いシーケンス番号である。他の実装形態によっては、シーケンス番号は、セグメントに関連付けられたシーケンス番号が、現在アクティブとなったセグメントの直前に書き込まれたセグメントの後の次に低いシーケンス番号であるような降順となっている。
【0150】
実装形態によっては、セグメントのシーケンス番号は、対応するセグメントに関連付けられて、物理フラッシュメモリ内に記録されてもよい。例えば、セグメント522に対するシーケンス番号は、フラッシュメモリダイ504の一部522aに記録されてもよい一方で、セグメント524に対するシーケンス番号は、フラッシュメモリダイ506の一部524aに記録されてもよい。他の実装形態によっては、セグメントのシーケンス番号は、RAM等の、フラッシュメモリダイス以外の別のメモリ内に記録されてもよい。代替として、セグメントのシーケンス番号は、フラッシュメモリダイス(例えば、522aまたは524a)内および別のRAM内の両方に記録されてもよい。
【0151】
実装形態によっては、アクティブセグメントに対して、セグメントのシーケンス番号と共に、フラッシュ管理レイヤは、物理フラッシュメモリダイス(例えば、522aまたは524a)、または別のメモリ(例えば、RAM)、または両方におけるアクティブセグメント内部の次に利用可能なフラッシュメモリブロック(例えば、書き込みページ)のシーケンス番号を記録する。セグメント内部のフラッシュメモリブロックのシーケンス番号は、セグメント内部の第1のメモリブロックからのオフセットとして記録されてもよい。例えば、セグメントに含まれる消去ブロック内部に4096の書き込みページがある場合、書き込みページは、順次、0〜4095にマークを付けられてもよく、0はセグメントにおける最初の書き込みページの番号である。
【0152】
フラッシュ管理レイヤは、アクティブセグメントが非アクティブセグメントは別として追跡されてもよいように、情報をアクティブセグメントに別々に記録する。例えば、フラッシュ管理レイヤは、アクティブセグメントのシーケンス番号を格納するDRAM内に記録を保持してもよい。従って、新しいセグメントがアクティブになった場合、アクティブセグメントに対するDRAMレコードに格納されるシーケンス番号は更新される。
【0153】
同期ミラーリングモジュール550は、フラッシュ管理レイヤにその時点でのアクティブセグメントに関する情報を問い合わせる。クエリに応じて、フラッシュ管理レイヤは、アクティブセグメントのシーケンス番号、およびアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号を指すアクティブセグメント内部のオフセットを送信してもよい。
【0154】
同期ミラーリングモジュール550は、アクティブセグメントのシーケンス番号をアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号と共に同期ミラーリング設定におけるパッシブサーバに転送する。パッシブサーバは、マーカと呼ばれる、データ構造内のアクティブエンドから受信される情報を格納する。例えば、メモリサーバ500がパッシブサーバであれば、メモリサーバ500は、アクティブセグメントのシーケンス番号およびアクティブエンドにおけるアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号に関する情報を提供するマーカ542を格納する。図示のように、マーカ542は、アクティブサーバ上のアクティブセグメントのシーケンス番号およびブロック番号を含んでいる。アクティブサーバ上に2つのアクティブセグメントが同時にあってもよく;従って、マーカ542は、両方のアクティブセグメントのシーケンス番号と、各アクティブセグメントのための、セグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号とに関する情報を格納してもよい。
【0155】
実装形態によっては、パッシブサーバは2つ以上のマーカを格納してもよい。例えば、メモリサーバ500がパッシブサーバであれば、メモリサーバ500は、図示のような2つのマーカ542および544を格納してもよい。これは、以下のセクションで説明する2レベルのマーカスキームにおいて有用である場合がある。かかる実装形態において、2つのマーカ542および544のそれぞれは、アクティブセグメントすべてのシーケンス番号と、各アクティブセグメントのための、各マーカに関連付けられる書き込みフェーズに対応するアクティブサーバにおけるアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号とに関する情報を提供する。
【0156】
マーカは、フラッシュ管理レイヤにおいて関連するメタデータと見なされてもよい。実装形態によっては、マーカは、RAM540内等の、物理フラッシュメモリとは別のメモリ内に格納されてもよい。他の実装形態によっては、マーカは、例えば、フラッシュメモリダイス504、506、50J、または50Kの既知の部分におけるデータ構造として、物理フラッシュメモリ内に格納されてもよい。他の実装形態において、マーカは、物理フラッシュメモリ内およびRAM等の別のメモリ内の両方に格納されてもよい。
【0157】
マーカ542および/または544は、アクティブサーバ上の同期ミラーリングモジュールがアクティブサーバ上のアクティブセグメントに関する更新情報を送信する場合、パッシブサーバ上で定期的に更新される。実装形態によっては、マーカはパッシブサーバ上の同期ミラーリングモジュールによって管理される一方で、他の実装形態によっては、マーカはパッシブサーバ上のフラッシュ管理レイヤによって管理される。他の実装形態において、マーカはパッシブサーバ上の同期ミラーリングモジュールおよびフラッシュ管理レイヤの好適な組み合わせによって管理される。
【0158】
マーカは、位置を論理ログに記録することに相当する。論理ログ内の2つの位置を考えると、それら2つの位置の間でログに書き込まれたエントリは決定できる。従って、2つのマーカを考えると、同期ミラーリングモジュールは、どちらが、2つのマーカの間に生じた期間内で書き込まれたフラッシュメモリブロック(例えば、書き込みページ)なのかを特定できる。書き込まれた物理フラッシュメモリブロックを認識しながら、同期ミラーリングモジュールは、フラッシュ管理レイヤに決定された物理ブロックに対応する論理メモリブロックに関する情報を問い合わせることができる。
【0159】
フラッシュ管理レイヤは、フラッシュトランスレーションテーブル530を用いて書き込まれた論理メモリブロックと物理メモリブロックとの間のマッピングを維持する。マーカからの情報に基づいて、同期ミラーリングモジュールは、反対の質問、すなわち、書き込まれた物理フラッシュブロックを考えて、物理フラッシュブロックが対応する論理メモリブロックは何か、を尋ねる。
【0160】
実装形態によっては、アクティブサーバにおけるアクティブセグメントに関する情報およびパッシブサーバに格納されたマーカを用いて、障害回復ログおよび非複製書き込みログの機能が再現されてもよい。アクティブサーバ上の同期ミラーリングモジュール550は、アクティブサーバ上のフラッシュ管理レイヤに、現在アクティブなセグメントのシーケンス番号およびアクティブセグメント内部で次に利用可能なメモリブロックに対するオフセットに関して定期的に問い合わせる(例えば、数秒ごとに)。同期ミラーリングモジュール550は、同期ミラーリング設定における接続の他端にあるパッシブサーバに情報を送信する。パッシブサーバは、受信した情報をアクティブサーバから受信した最新のマーカ値として記録する。
【0161】
同期ミラーリングシステムがクラッシュから復旧した場合、アクティブおよびパッシブサーバは、互いから認識された最新のマーカに関して合意に達する。実装形態によっては、パッシブサーバ上の同期ミラーリングモジュールは、アクティブサーバに、パッシブサーバがクラッシュ前に受信した最新のマーカを送信する。アクティブサーバ上の同期ミラーリングモジュールは、アクティブサーバ上のフラッシュ管理レイヤにアクティブセグメントのシーケンス番号を問い合わせる。
【0162】
同期ミラーリングモジュールは、フラッシュ管理レイヤから取得したアクティブセグメントのシーケンス番号とパッシブサーバから受信したマーカに示されるセグメントのシーケンス番号とを比較する。シーケンス番号の間の相違は、パッシブサーバにおいて複製されていない、アクティブサーバにおいて行われたであろうすべての書き込みに対応する。従って、アクティブサーバは、障害回復ログ情報を効果的に有している。
【0163】
アクティブサーバ上の同期ミラーリングモジュールは、上で特定した書き込みに対応する物理フラッシュブロックが引き続き有効な論理ブロックを表すかを確認するよう、フラッシュ管理レイヤに問い合わせる。すなわち、物理フラッシュブロックは、対応する論理ブロックによって正確にマッピングされたデータを含んでいる。このチェックは、例えば、物理フラッシュブロックが消去され、および/または、新しいデータがそれに書き込まれたが、以前に物理ブロックにマッピングされた論理ブロックが更新されなかった状況が生じてから、実行される。
【0164】
同期ミラーリングモジュールが、特定した書き込みに対応する物理フラッシュブロックが引き続き有効な論理ブロックを表すかを確認する場合は、同期ミラーリングモジュールは、書き込みと、特定した書き込みに対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。その一方で、同期ミラーリングモジュールが、特定した書き込みに対応する1つ以上の物理フラッシュブロックがもはや有効な論理ブロックを表していないと判断すれば、同期ミラーリングモジュールは、関連する書き込み、または不正確な論理メモリブロックを送信しない。かかる場合において、同期ミラーリングモジュールは、残りの書き込みと、(引き続き有効な)対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。
【0165】
アクティブサーバ上の同期ミラーリングモジュールがアクティブセグメントのシーケンス番号情報をパッシブサーバに送信する場合、システムは、情報が送信される前に開始されたが、情報が送信された後に完了した書き込み操作が無いことを保証しなければならない。これは、マーカが同期デバイスとして用いられるため、マーカの両側に出現する操作ではあり得ないという点で、正確さが必要とされる「書き込みバリア」と見なされてもよい。
【0166】
アクティブサーバ上の同期ミラーリングモジュールがフラッシュ管理レイヤにアクティブセグメントに関する情報を問い合わせる前に発せられたが、2つのユーザ書き込みは、情報がフラッシュ管理レイヤから送信される時間までに完了しなかった2つのユーザ書き込みを考察する。2つのユーザ書き込みおよびアクティブセグメント情報がパッシブサーバに通信される順序に関して、順序はアクティブサーバ上の順序と異なることは、可能であってもよい。書き込みのうちの1つは、アクティブセグメント情報がパッシブノード上で受信される前に実際に生じる一方で、他の書き込みはその後に生じてもよい。アクティブサーバおよびパッシブサーバ上の順序において混乱が生じる可能性があるため、同期ミラーリング設定は正しくない場合があるが、その理由は、アクティブサーバ上の同期ミラーリングモジュールが、実際には、書き込みのうちの1つのみが記録されたのだが、両方の書き込みをパッシブサーバ上に記録されたものとして、誤って解釈する可能性があるためである。パッシブサーバによって格納されたマーカを用いて復旧を行っている間、アクティブサーバ上の第2の書き込みは、アクティブセグメント情報が取得される前に実行されたため、復旧プロセスの一部として、第2の書き込みはパッシブサーバに発送されない。同期ミラーリングシステムは、書き込み操作が失敗したことを認識しない。従って、正しくなるようマーカベースのスキームを用いる同期ミラーリングに対して、書き込み操作は、マーカ情報を取得すると同時に生じた書き込みにより何が起きたかの混乱を取り除くために、アクティブセグメントに関する取得されたマーカ情報の前後で厳密に命令されるべきである。
【0167】
前のセクションで説明した実装形態において、書き込みバリアは、シーケンス番号情報が制御され、送信されている場合に、I/O操作を停止することによって達成されてもよい。同期ミラーリングシステムは、システムにおけるすべての書き込み操作が、アクティブセグメントに関する情報がフラッシュ管理レイヤから取得される前に完了したことを保証する。新しい書き込みは、マーカ情報が取得され、次いで、書き込み操作が再開されるまで、システムにおいて許可されない。しかし、これは、I/O操作を実行する文脈において、システム内に「一時的障害」を生じる場合がある。情報がフラッシュ管理レイヤによって帰ってくるまで、両方を停止し、書き込みが完了するまで待機し、新しい書き込みが進行しないよう防ぐことは、応答時間を増加する場合がある。例えば、アクティブセグメントに対応する情報が2秒ごとに収集されると、I/O操作が実行されない場合に数ミリ秒の時間の価値が存在する。
【0168】
実装形態によっては、書き込みバリアは、一時的障害を招くことなく、赤黒マーカスキームとして知られてもよい2レベルマーカスキームを用いて達成されてもよい。かかる実装形態において、アクティブサーバ上の書き込み操作は段階的に実行され、アクティブサーバ上の書き込みトランザクションは、例示を目的として、赤フェーズ(または赤書き込みフェーズ)および黒フェーズ(または黒書き込みフェーズ)と呼ばれてもよい2種類のうちの1つに分類される。
【0169】
書き込み操作は、アクティブサーバ上で、赤フェーズの後に黒フェーズが続き、その後に赤フェーズが続く等の順番で実行されてもよい。赤フェーズにおいて書き込み操作を実行している間、フラッシュ管理レイヤは、最後の黒フェーズにおいてアクティブであったセグメントに対する情報を取得する。黒フェーズの間に書き込み操作を実行している間、フラッシュ管理レイヤは、最後の赤フェーズに対応するアクティブグメントに関する情報を取得する。従って、同期ミラーリングシステムは、セグメント情報検索およびシステムに入ってくる新規書き込み操作をオーバーラップさせる。
【0170】
実装形態によっては、書き込み操作が黒フェーズにおいて実行される場合、フラッシュ管理レイヤは、黒フェーズにおいてアクティブなセグメントのシーケンス番号(および、書き込まれるアクティブセグメント内部のメモリブロックのシーケンス番号)を取得し、格納されているシーケンス番号が黒フェーズにおけるアクティブセグメントに対応していることの表示と共に、アクティブセグメントに対するDRAMレコードにそれらを格納する。同様に、赤フェーズにおける書き込み操作中に、フラッシュ管理レイヤは、格納されているシーケンス番号が赤フェーズにおけるアクティブセグメントに対応していることの表示と共に、DRAMレコードにアクティブセグメントのシーケンス番号を格納してもよい。例えば、メモリサーバ500がアクティブサーバを表していれば、セグメント522は、黒フェーズにおけるアクティブセグメントであってもよい。従って、フラッシュ管理レイヤは、セグメント522と、今しがた書き込まれたセグメント522内部のメモリブロックとのシーケンス番号をDRAMレコードに格納し、シーケンス番号が黒フェーズに関連付けられていることを示す。次の赤フェーズにおいて、両方のセグメント522および524が書き込まれてもよい。フラッシュ管理レイヤは、セグメント522および524のシーケンス番号を(各セグメント内部のメモリブロックのシーケンス番号と共に)DRAMレコードに格納し、シーケンス番号が赤フェーズに関連付けられていることを示す。
【0171】
実装形態によっては、フラッシュ管理レイヤは、異なるフェーズに対応する別々のDRAMレコードを保持してもよい。かかる実装形態において、第1のDRAMレコードは、黒フェーズにおけるアクティブセグメントに対応するシーケンス番号を格納するよう用いられてもよい一方で、第2のDRAMレコードは、赤フェーズにおけるアクティブセグメントに対応するシーケンス番号を格納するよう用いられてもよい等である。
【0172】
フラッシュ管理レイヤによって取得されるアクティブセグメントに関する情報によって提供される特性は、情報が示す最後のフェーズまで正確であるという点である。情報は、情報が取得されている間に実行される現在の書き込み操作に対して正確ではない場合がある。
【0173】
黒フェーズに対応するアクティブセグメントに関する情報が取得されている間に、赤フェーズに対応する書き込み操作が実行されている場合、赤フェーズ書き込み操作は、取得されるべき黒フェーズアクティブセグメント情報に対して停止する必要はない。赤フェーズに対応する書き込み操作は継続されてもよい。しかし、黒フェーズに対応する先の書き込み操作のすべては、黒フェーズアクティブセグメント情報が取得される前に完了していなければならず、黒フェーズにおける新規書き込み操作は、黒フェーズアクティブセグメント情報の検索が完了するまで開始できない。
【0174】
同期ミラーリング操作のパイプライン化は、書き込み操作を分類し、異なる時間に異なるフェーズでアクティブセグメントに書き込むことによって達成される。書き込みバリアは、2つのマーカを処理し、書き込みをフェーズに分割し、最後に完了したフェーズに対応するセグメントおよびブロックシーケンス番号を取得することによって対処される。
【0175】
2レベルマーカスキームでパッシブサーバに送信される情報は、最後の書き込みフェーズにおいて書き込まれたアクティブセグメントのすべてに対応するシーケンス番号を含んでいることに留意されたい。セグメントは、現在の書き込みフェーズにおいてもアクティブであるいくつかのセグメントを含んでもよい。
【0176】
パッシブサーバにおいて、アクティブサーバから取得されたシーケンス番号情報は、マーカとして格納される。2レベルマーカスキームを利用する実装形態において、パッシブサーバは複数のマーカを格納してもよい。例えば、サーバ500は、パッシブサーバを表すよう取得される場合、マーカ542および544を格納してもよい。マーカ542は、黒フェーズにおけるアクティブセグメントに対応するシーケンス番号を含んでもよい一方で、マーカ544は、赤フェーズにおけるアクティブセグメントに対応するシーケンス番号を含んでもよい。
【0177】
実装形態によっては、パッシブサーバは、マーカに関連する書き込みフェーズを特定する情報を格納してもよい。上で説明した実施例において、パッシブサーバは、マーカ542を黒フェーズに関連するものとして、および、マーカ544を赤フェーズに関連するものとして特定する情報を格納してもよい。
【0178】
2レベルマーカスキームの実装形態によっては、パッシブサーバがクラッシュ復旧中にマーカをアクティブサーバに送信すると、パッシブサーバは、アクティブサーバから受信した情報に対応する最後から2番目のマーカを送信する。これは、パッシブサーバにおける最後から2番目のマーカがアクティブサーバにおける以前の書き込みフェーズに対応するため、先に説明した書き込みバリア問題により何のデータも部分的な再同期中に失われていないことを保証するよう行われる。
【0179】
例えば、アクティブサーバは、赤書き込みフェーズがアクティブである時に、黒書き込みフェーズにおいてアクティブセグメントに関連付けられたシーケンス番号を送信する。シーケンス番号は、パッシブサーバにおいてマーカ542に格納される。その後の時間において、アクティブサーバは、パッシブサーバにおいてマーカ544に格納される、赤書き込みフェーズにおいてアクティブセグメントに関連付けられたシーケンス番号を送信する。パッシブサーバは、マーカ544を格納した後、不具合を被る。従って、パッシブサーバが再度稼働状態になった場合、パッシブサーバにおいて格納された最後のマーカは544である一方で、最後から2番目のマーカは542である。復旧操作中に、パッシブサーバは、マーカ542に格納されたシーケンス番号をアクティブサーバに送信する。
【0180】
2レベルマーカの実装形態において、クラッシュ復旧後の部分的な再同期の間にシーケンス番号をアクティブサーバに送信する場合、パッシブサーバはまた、関連する書き込みフェーズを指定してもよい。かかる実装形態において、アクティブサーバ内の同期ミラーリングモジュール550は、パッシブサーバから受信されるマーカ情報に基づくアクティブセグメントに対して、フラッシュ管理レイヤにクエリを送信する場合、アクティブセグメント情報がシークされることに対応する書き込みフェーズを指定してもよい。フラッシュ管理レイヤは、従って、問い合わせられた書き込みフェーズに対応するごく最近のアクティブセグメントのシーケンス番号と共に応答する。
【0181】
アクティブサーバ内の同期ミラーリングモジュール550は、フラッシュ管理レイヤから取得したごく最近のアクティブセグメントのシーケンス番号を、パッシブサーバから受信したマーカに含まれるシーケンス番号と比較する。フラッシュ管理レイヤから戻ってきたシーケンス番号と、パッシブサーバからのマーカ内で言及されたシーケンス番号との間の相違は、パッシブサーバからのマーカ内で言及されたシーケンス番号に対応するセグメントがパッシブサーバに送信されたために、アクティブサーバで実行された書き込み操作を示している。決定された書き込み操作は、クラッシュによりパッシブサーバで実行されなくてもよい。上記は、時間的に遅く書き込まれたセグメントに対するシーケンス番号と比較して、シーケンス番号が時間的に遅く書き込まれたセグメントに対して高いことを想定している。
【0182】
クラッシュによりパッシブサーバに書き込まれていない場合もある書き込み操作が決定されると、同期ミラーリングモジュール550は、上記で特定された書き込み操作に対応する物理フラッシュブロックが、先で説明したように、引き続き有効な論理ブロックを表すのかを確認するよう、フラッシュ管理レイヤに問い合わせる。
【0183】
同期ミラーリングモジュール550が、特定した書き込みに対応する物理フラッシュブロックが引き続き有効な論理ブロックを表すかを確認する場合は、同期ミラーリングモジュールは、書き込みと、特定した書き込みに対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。その一方で、同期ミラーリングモジュール550が、特定した書き込みに対応する1つ以上の物理フラッシュブロックがもはや有効な論理ブロックを表していないと判断すれば、同期ミラーリングモジュールは、関連する書き込み、または不正確な論理メモリブロックを送信しない。かかる場合において、同期ミラーリングモジュールは、残りの書き込みと、(引き続き有効な)対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。
【0184】
実装形態によっては、アクティブサーバが、マーカに関連する書き込みフェーズを示すマーカをパッシブサーバから受信する場合に、アクティブサーバは、指示された書き込みフェーズに対応する新規の書き込み操作を実行していてもよいことは、留意すべきである。例えば、アクティブサーバは、パッシブサーバマーカ542から、マーカ542に含まれるシーケンス番号が黒書き込みフェーズ中に書き込まれたことを示す情報を受信する。アクティブサーバがマーカ542を受信した時点で、アクティブサーバは、黒書き込みフェーズの新しいサイクルで新規書き込み操作を実行していてもよい。
【0185】
他の実装形態によっては、アクティブサーバが、マーカに関連する書き込みフェーズを示すマーカをパッシブサーバから受信する場合に、アクティブサーバは、異なる書き込みフェーズに対応する新規の書き込み操作を実行していてもよい。例えば、アクティブサーバは、パッシブサーバマーカ542から、マーカ542に含まれるシーケンス番号が黒書き込みフェーズ中に書き込まれたことを示す情報を受信する。アクティブサーバがマーカ542を受信した時点で、アクティブサーバは、赤書き込みフェーズのサイクルで新規書き込み操作を実行していてもよい。
【0186】
2レベルマーカスキームは、赤および黒フェーズを参照して前のセクションで説明されているが、書き込みフェーズによる色は単に例示のためであり、実装形態の機能性とは何の関係も無いことは言うまでもない。他の色、または色とは異なるいくつか他の好適な特定情報は、説明した実装形態を変更することなく、異なるカテゴリおよびフェーズに割り当てられてもよい。
【0187】
さらに、前のセクションは2レベルマーカスキームの概念を説明しているが、実装形態は、上記で示した2レベルとは異なるマルチレベルマーカスキームを採用するシステムに対して等しく適用可能であってもよい。かかる場合において、各書き込みフェーズに関連する異なるマーカを有する複数の書き込みフェーズがあってもよい。
【0188】
実装形態によっては、同期ミラーリングシステムは、セグメントが、青フェーズおよび緑フェーズ等の2つのフェーズのうちの1つに分類される2レベルマーカスキームを用いてもよく、書き込み操作は、異なるフェーズにおいて異なるアクティブセグメントに書き込まれる。青フェーズがアクティブな場合に、対称が書き込み操作を受信すると、同期ミラーリングモジュールは、青フェーズに関連するアクティブセグメント上で書き込み操作を実行する。書き込み操作が緑フェーズにおいて受信されると、同期ミラーリングモジュールは、青フェーズに関連するアクティブセグメントとは異なってもよい緑フェーズに関連するアクティブセグメント上で書き込み操作を実行する。
【0189】
異なるマーカは異なるフェーズに関連してもよく、マーカは、それらの対応するフェーズがアクティブな場合に別々に更新されてもよい。例えば、上で説明した、青フェーズのためのマーカと、緑フェーズのための異なるマーカとがあってもよい。
【0190】
上記の実装形態は、青および緑フェーズを参照して上で説明したのと同様の方法で、セグメントがいくつかのカテゴリのうちの1つに分類されるマルチレベルマーカスキームまで拡張されてもよい。かかる場合において、異なるマーカは異なるフェーズのそれぞれと関連してもよく、マーカはそれらそれぞれのフェーズにおけるアクティブセグメントに対応する情報を格納してもよい。しかし、場合によっては、マーカは、異なるフェーズに関して非依存型であってもよい。かかる実装形態において、各マーカは、すべてのフェーズにおけるアクティブセグメントに対応する情報を格納してもよい。
【0191】
前のセクションで説明した、マーカの概念を用いる同期ミラーリングを提供する実装形態は、より効果的にメモリ書き込み操作を行う。例えば、障害回復ログおよび/または非複製書き込みログへの書き込みに関連する待ち時間は解消される。性能の均一性は、書き込み操作が本質的に逐次的か、ランダムかに関わりなく達成される。追加の障害回復ログまたは非複製書き込みログに依存する代わりに、フラッシュ管理レイヤの本質に依存することによって、作業負荷の間の僅かな変化のために、よりロバストな性能が得られる。
【0192】
障害回復ログを採用する実装形態において、ある一定の僅かなデータ量を書き込むよう処理される追加メモリを指す、追加の書き込み増幅コンポーネントが加えられる。従って、フラッシュメモリの形状寸法がフラッシュ記憶媒体に対する有界書き込み数を可能にする場合、障害回復ログは、データ書き込みに対するフラッシュメモリ媒体の寿命を低減する場合がある。例えば、4KBの書き込みを行っていた作業負荷を想定すると、4KBの書き込み毎に、1回の障害回復ログ書き込みが実行されて書き込みを開放し、4KBの書き込み、次いで、別の障害回復ログ書き込みを実行して書き込みを閉じるとすると、システムは3倍の書き込み増幅を効果的に導入した。従って、フラッシュメモリデバイスは、全体的に、非同期ミラーリング方式で用いられる場合と比較して、その寿命にわたり3分の1のデータ書き込み数をサポートしてもよい。
【0193】
従って、障害回復ログによる追加の書き込みが回避できれば、代替の状況と比較して、長い寿命がその記憶素子から達成できる(例えば、上記の実施例において3倍超)。これは、同期ミラーリングに対するマーカの概念を用いて可能であってもよい。従って、マーカを用いる同期ミラーリングは、より高い性能、より高い耐久性、および、様々な作業負荷にわたって、より予想可能な性能を提供する。
【0194】
図6は、データをメモリサーバ内のメモリブロックに書き込むために用いられてもよいプロセス例600を示している。プロセス600は、同期ミラーリング実装形態におけるアクティブサーバによって、例えば、メモリサーバ500によって実行されてもよい。従って、以下のセクションは、マスタコントローラ502、スレーブコントローラ514、516、51J、51K、およびフラッシュトランスレーションテーブル530を含むメモリカード501内のフラッシュ管理レイヤによって実行されるものとして、プロセス600を説明する。しかし、プロセス600はまた、他のシステムおよびシステム構成によって実行されてもよい。
【0195】
プロセス600は、メモリに書き込むためのアプリケーションデータを受信する(602)。例えば、メモリサーバ500は、上位アプリケーションまたはオペレーティングシステムから書き込み操作を受信してもよい。書き込み操作は、メモリカード501内のフラッシュメモリダイス504、506、51J、または51K等の、メモリサーバ500に関連する永続的記憶装置に格納するためのデータを含んでもよい。
【0196】
現在のフェーズおよびアクティブセグメントは特定される(604)。例えば、メモリサーバ500は、データをメモリカード501に格納するための2レベルマーカスキームを実装してもよい。従って、書き込み操作を受信すると、メモリカード501内のフラッシュ管理レイヤは、赤フェーズまたは黒フェーズの2つのフェーズのうちのどちらかが、データを書き込むために現在アクティブなのか判断する。フラッシュ管理レイヤはまた、例えば、アクティブセグメントのシーケンス番号をDRAM内で保持されている記録から検索することによって、データが現在の書き込みフェーズにおいて書き込まれるアクティブセグメントも決定する。
【0197】
フラッシュ管理レイヤは、アクティブセグメントが一杯かどうかを判断する(606)。例えば、フラッシュ管理レイヤは、現在のフェーズに対するアクティブセグメント内のすべての書き込みページがデータで一杯になっているかをチェックする。
【0198】
アクティブセグメントが一杯ではないと判断された場合、フラッシュ管理レイヤは、アプリケーションデータをアクティブセグメント内で次に利用可能なブロックに書き込む(608)。例えば、アクティブセグメントは524であってもよい。フラッシュ管理レイヤは、セグメント524内部で次に利用可能な書き込みページを決定し、次に利用可能な書き込みページにアプリケーションデータを格納してもよい。この文脈において、セグメントは、RAIDストライプ内のフラッシュメモリダイスにわたって分散される消去ブロックのコレクションとして説明されるが、セグメントに書き込む場合、データはセグメント内部の書き込みページの粒度で書き込まれる。先に説明したように、各消去ブロックは複数の書き込みページを含んでいる。
【0199】
アクティブセグメント内で次に利用可能なブロックに書き込んだ後、フラッシュ管理レイヤは、アクティブセグメントに対応する情報を、次のブロックのシーケンス番号で更新する(610)。例えば、フラッシュ管理レイヤは、今しがた書き込まれた書き込みページに続くアクティブセグメント内で利用可能な次の書き込みページのシーケンス番号を格納してもよい。情報は、アクティブセグメントのシーケンス番号が保持されるDRAMレコードの一部として格納されてもよい。フラッシュ管理レイヤは、次いで、上位から次のアプリケーションデータを受信し、データを物理メモリに格納するよう進む。
【0200】
その一方で、アクティブセグメントが一杯であると判断された場合、フラッシュ管理レイヤは、新規セグメントを特定し、アプリケーションデータを新規セグメント内で最初に利用可能なブロックに書き込む(612)。例えば、フラッシュ管理レイヤは、アクティブセグメント内で利用可能なスペースが無いことを判断してもよい。その結果、フラッシュ管理レイヤは、データを格納するための新規セグメントとして書き込みに利用可能な次のセグメントを特定し、シーケンス番号を新しく特定されたセグメントに関連付ける。セグメントは逐次的に用いられるため、新規セグメントに関連付けられるシーケンス番号は、今しがた充填されたセグメントのシーケンス番号と比較して、次に高い番号である。新規セグメントを特定すると、フラッシュ管理レイヤは、アプリケーションデータを新規セグメント内の最初の書き込みページに書き込む。
【0201】
フラッシュ管理レイヤは、アクティブセグメントおよび次のブロックのシーケンス番号を格納する(614)。例えば、次に利用可能なセグメントが書き込みのために選択される場合、フラッシュ管理レイヤは、新しく選択されたセグメントを新規アクティブセグメントとして特定し、アクティブセグメントのシーケンス番号が保持されるDRAMレコード等の、アクティブセグメントを追跡する内部データ構造における新規アクティブセグメントのシーケンス番号を格納する。
【0202】
実装形態によっては、フラッシュ管理レイヤはまた、今しがた書き込まれた書き込みページに続くアクティブセグメント内で利用可能な次の書き込みページのシーケンス番号も格納している。フラッシュ管理レイヤは、次いで、上位から次のアプリケーションデータを受信し、データを物理メモリに格納するよう進む。
【0203】
図7は、同期ミラーリングを実装するメモリサーバ内のアクティブフラッシュセグメントを特定するために用いられてもよいプロセス例700を示している。プロセス700は、同期ミラーリング実装形態におけるアクティブサーバによって、例えば、メモリサーバ500によって実行されてもよい。従って、以下のセクションは、マスタコントローラ502、スレーブコントローラ514、516、51J、51K、およびフラッシュトランスレーションテーブル530を含むメモリカード501内のフラッシュ管理レイヤによって実行されるものとして、プロセス700を説明する。しかし、プロセス700はまた、他のシステムおよびシステム構成によって実行されてもよい。
【0204】
アクティブサーバは、プロセス600と並行してプロセス700を実行してもよい。例えば、プロセス700は、2レベルマーカスキームにおいて、前回のフェーズ(黒フェーズ等)に対応するアクティブセグメントに関する情報を取得するよう用いられてもよい一方で、プロセス600は、現在のフェーズ(赤フェーズ等)におけるアクティブセグメント内のデータを格納するよう同時に実行される。
【0205】
プロセス700は、クエリを同期ミラーリングモジュールから受信する場合に実行される(702)。例えば、メモリサーバ500は、同期ミラーリング実装形態におけるアクティブサーバであってもよい。メモリカード501内のフラッシュ管理レイヤ等のアクティブサーバ内のフラッシュ管理レイヤは、アクティブセグメントに関する情報に対して同期ミラーリングモジュール550からクエリを受信してもよい。
【0206】
フラッシュ管理レイヤは、現在のフェーズおよび前回のフェーズを特定する(704)。例えば、同期ミラーリングモジュール550からクエリを受信すると、メモリカード501内のフラッシュ管理レイヤは、2レベルマーカスキームにおける2つのフェーズのうちのいずれかが現在の書き込みフェーズなのか、および、それに応じて、どちらのフェーズが前回のサイクルで書き込まれたのかを判断する。フラッシュ管理レイヤは、赤フェーズが現在アクティブであり、従って、黒フェーズが前回に書き込まれたことを判断してもよい。
【0207】
フラッシュ管理レイヤは、前回のフェーズに対応するアクティブセグメントのシーケンス番号を取得する(706)。先に説明したように、2レベルマーカスキームにおいて、同期ミラーリングモジュールに送信されるアクティブセグメントに関する情報は、前回の書き込みフェーズにおいて更新された情報に対応している。例えば、赤フェーズが現在アクティブである場合、フラッシュ管理レイヤは、例えば、アクティブセグメントに関する情報を格納しているDRAMレコードから、黒フェーズがアクティブであった場合の前回のサイクルにおいて書き込まれたアクティブセグメントのシーケンス番号を取得する。前回のフェーズに対応するアクティブセグメントのシーケンス番号と共に、フラッシュ管理レイヤは、アクティブセグメント内部で次に利用可能なメモリブロックを指すアクティブセグメント内部のオフセットを取得する。
【0208】
実装形態によっては、シーケンス番号は、フラッシュメモリダイスにおけるそれらの格納位置から取得されてもよい。例えば、522が前回のフェーズで書き込まれたアクティブセグメントに対応している場合、フラッシュ管理レイヤは、522に関する情報をフラッシュメモリ504内の位置522aから取得する。
【0209】
フラッシュ管理レイヤは、取得したシーケンス番号を同期ミラーリングモジュールに送信する(710)。例えば、フラッシュ管理レイヤは、前回のフェーズに対応するアクティブセグメントの取得したシーケンス番号を同期ミラーリングモジュール550に送信する。実装形態によっては、フラッシュ管理レイヤはまた、それぞれのセグメント内部で次に利用可能なメモリブロックを指す前回のフェーズに対応するアクティブセグメント内部のオフセットも送信する。しかし、他の実装形態において、フラッシュ管理レイヤは、アクティブセグメントのシーケンス番号のみを送信する。その結果、同期ミラーリングモジュール550は、アクティブサーバ内の記憶素子の一部がごく最近に書き込まれたことに関する情報を有している。
【0210】
図8は、フラッシュベースの記憶装置を用いるアクティブおよびパッシブメモリサーバ間の同期ミラーリングを実行するために用いられてもよいプロセス例800を示している。プロセス800は、同期ミラーリング実装形態におけるアクティブサーバによって、例えば、同期ミラーリング設定においてアクティブサーバを表すメモリサーバ500によって実行されてもよい。従って、以下のセクションは、マスタコントローラ502、スレーブコントローラ514、516、51J、51K、およびフラッシュトランスレーションテーブル530を含むメモリカード501内のフラッシュ管理レイヤと相互に作用することによって、メモリサーバ500内の同期ミラーリングモジュール550によって実行されるものとして、プロセス800を説明する。しかし、プロセス800はまた、他のシステムおよびシステム構成によって実行されてもよい。
【0211】
プロセス800の一部として、同期ミラーリングモジュールはアプリケーションデータをパッシブサーバに送信する(802)。例えば、メモリサーバ500は、ユーザアプリケーション等の上位アプリケーション、および/またはオペレーティングシステムから書き込み操作を受信してもよい。メモリサーバ500は、書き込み操作と共に受信したデータをローカル記憶素子に、例えば、メモリカード501上のフラッシュ管理レイヤを用いるメモリカード501に書き込む。同時に、メモリサーバ500内の同期ミラーリングモジュール550は、データを含む書き込み操作を、メモリカード501に書き込まれるデータをミラーリングするパッシブサーバに送信する。
【0212】
実装形態によっては、同期ミラーリングモジュール550は、メモリサーバ500が同期ミラーリング構成におけるアクティブサーバである場合にのみ、書き込み操作をパッシブサーバに送信する。実装形態によっては、同期ミラーリング構成は、アクティブサーバとして構成されるメモリサーバ500とは別に、複数のパッシブサーバを含んでもよい。かかる実装形態において、同期ミラーリングモジュール550は、書き込み操作をパッシブサーバのうちの1つ以上に送信してもよい。
【0213】
同期ミラーリングモジュールは、アクティブセグメントに関する情報をパッシブサーバに定期的に送信する(804)。例えば、同期ミラーリングモジュール550は、ローカル記憶素子(すなわち、メモリカード501)上のフラッシュ管理レイヤに、最近書き込まれたフラッシュセグメントに関する情報を問い合わせる。問い合わせは、一定の時間間隔で定期的に行われてもよい。代替として、問い合わせは、特定の閾数の書き込み操作がパッシブサーバに送信される場合に行われてもよい。代替として、問い合わせは、ローカル記憶素子上の特定の閾容量の物理メモリが書き込まれた場合に行われてもよい。例えば、問い合わせは、メモリカード501上のフラッシュメモリダイスの利用可能な容量の特定のパーセンテージ(5%等)が充填された場合に行われてもよい。同期ミラーリングモジュール550は、問い合わせを行うようメモリカード501の利用可能な容量を追跡してもよい。
【0214】
問い合わせに基づいて、同期ミラーリングモジュール550は、先に説明したように、フラッシュ管理レイヤからアクティブセグメントに関する情報を受信する。情報は、アクティブセグメントのシーケンス番号と、アクティブセグメント内の次に利用可能なメモリブロックに対応するセグメント内部のオフセットとを含んでもよい。実装形態によっては、複数のアクティブセグメントがあってもよく、フラッシュ管理レイヤから受信する情報は、すべてのアクティブセグメントに対応するシーケンス番号およびオフセットを含んでもよい。同期ミラーリングモジュール550は、アクティブセグメントに関する情報を、アクティブサーバ500に格納されるデータをミラーリングするパッシブサーバに送信する。
【0215】
先に説明した2レベル赤黒マーカスキーム等のマルチレベルマーカスキームを用いる実装形態において、同期ミラーリングモジュール550はまた、先に説明したように、パッシブサーバに、アクティブセグメントに対応する書き込みフェーズに関する情報を送信してもよい。例えば、黒フェーズにおいて書き込まれるアクティブセグメントのシーケンス番号を送信する場合、同期ミラーリングモジュール550はまた、書き込みフェーズが黒フェーズであることを示す情報も送信する。
【0216】
同期ミラーリングモジュールは、パッシブサーバから回復メッセージを受信する(806)。例えば、アクティブサーバ500に格納されるデータをミラーリングしたパッシブサーバは、何らかの理由で故障する場合がある。パッシブサーバが故障から回復する場合、パッシブサーバは、パッシブサーバが停止していた期間中にアクティブエンドにおいて書き込まれたであろうデータの部分的な再同期を実行するよう、回復メッセージをアクティブサーバ500に送信してもよい。回復メッセージは、アクティブサーバ500内の同期ミラーリングモジュール550によって処理される。
【0217】
同期ミラーリングモジュールは、回復メッセージからマーカ情報を抽出する(808)。例えば、故障状態から回復すると、パッシブサーバは、アクティブエンドから受信した最後のマーカを取得し、最後のマーカを回復メッセージの一部としてアクティブサーバ500に送信する。アクティブサーバ500内の同期ミラーリングモジュール550は、回復メッセージを処理することによってマーカ情報を読み取る。
【0218】
同期ミラーリングモジュールは、フラッシュ管理レイヤから現在のアクティブセグメントに関する情報を取得する(810)。例えば、パッシブサーバが故障してから更新されている場合もあるフラッシュメモリブロックを決定するため、同期ミラーリングモジュール550は、クエリをローカル記憶素子、すなわち、メモリカード501内のフラッシュ管理レイヤに送信する。フラッシュ管理レイヤは、クエリがフラッシュ管理レイヤによって受信された時間にアクティブな1つ以上のセグメントに関する情報で応答する。同期ミラーリングモジュールは、フラッシュ管理レイヤから、ごく最近に更新されたセグメント内部のメモリブロックと共に、1つ以上のセグメントを決定できる。
【0219】
2レベルマーカスキームを採用する実装形態において、パッシブサーバから受信したマーカは、マーカが関連する(例えば、マーカが赤フェーズまたは黒フェーズに関連するかどうかの)書き込みフェーズに関する情報を含んでいる。かかる場合において、パッシブサーバは、2つの書き込みフェーズに対応する2つのマーカを格納する。データ回復のためにマーカをアクティブサーバに送信する場合、パッシブサーバは、それが受信した最後から2番目のマーカを送信する。先に説明したように、パッシブサーバによって受信された最後から2番目のマーカが、アクティブサーバにおける前の書き込みフェーズに対応するため、最後から2番目のマーカは、部分的な再同期中に書き込みバリアにより何のデータも失われていないことを保証するよう送信される。
【0220】
同期ミラーリングモジュールは、取得した情報を抽出したマーカ情報と比較することによって、パッシブサーバにミラーリングされていない格納メモリブロックを決定する(812)。例えば、同期ミラーリングモジュール550は、パッシブサーバから受信したマーカから抽出される情報に基づいて、パッシブサーバによって格納された最後のセグメントのシーケンス番号を決定してもよい。同期ミラーリングモジュール550はまた、ローカル記憶素子のフラッシュ管理レイヤによって送信された情報から、ローカル記憶域に書き込まれた最新のセグメントのシーケンス番号を決定してもよい。2つのシーケンス番号の相違は、ローカル記憶域に書き込まれたが、パッシブサーバに格納されなかったセグメントを与える。従って、これらのセグメントに格納されたデータは、例えば、対応する書き込み操作がアクティブサーバ上の同期ミラーリングモジュール550によってパッシブサーバに送信された時間に、パッシブサーバが故障していたため、パッシブサーバにミラーリングされていない。
【0221】
同期ミラーリングモジュールは、トランスレーションテーブルから、決定された物理ブロックに対応する論理メモリブロックを検索する(814)。例えば、ローカル記憶域に書き込まれたが、パッシブサーバに格納されなかったと判断されたセグメントは、メモリカード501内の物理メモリに関する情報を提供する。同期ミラーリングモジュール550は、メモリカード501上のフラッシュ管理レイヤに、物理メモリブロックを、故障時にパッシブサーバによって失敗した書き込み操作に関連する論理メモリブロックであってもよい論理メモリブロックにマッピングするよう問い合わせてもよい。フラッシュ管理レイヤは、フラッシュトランスレーションテーブル530を用いて物理メモリブロックに対応する論理メモリブロックを検索し、論理メモリブロックに関する情報を同期ミラーリングモジュール550に送信してもよい。
【0222】
同期ミラーリングモジュールは、論理メモリブロックに対応するアプリケーションデータをパッシブサーバに送信する(818)。例えば、同期ミラーリングモジュール550は、物理メモリブロックから、メモリカード501には格納されているが、パッシブサーバには格納されていない生のアプリケーションデータを決定してもよい。フラッシュ管理レイヤから論理メモリブロックに関する情報を取得すると、同期ミラーリングモジュール550はまた、論理メモリブロックに対する物理メモリブロックのマッピングも得る。その結果、同期ミラーリングモジュール550は、論理メモリブロックおよびアプリケーションデータをパッシブサーバに送信してもよい。
【0223】
パッシブサーバは、アプリケーションデータをその論理メモリブロックに格納し、論理メモリブロックに関する受信した情報を用いて、アプリケーションデータが格納されている物理メモリブロックの、論理ブロックに対する同一のマッピングを決定する。この方法において、故障していた時にパッシブサーバによって失われたデータは、回復フェーズ中にミラーリングされてもよい。従って、部分的な再同期は、障害回復ログおよび非複製書き込みログを用いることなく達成されてもよい。
【0224】
本明細書中に説明したシステムおよび技術の種々の実装形態は、デジタル電子回路、集積回路、特別設計のASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組み合わせにおいて実現できる。これらの種々の実装形態は、記憶システム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信し、それらへデータおよび命令を送信するよう結合される、特殊用途または汎用であってもよい、少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムにおける実装を含むことができる。
【0225】
これらのコンピュータプログラム(また、プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても公知である)は、プログラマブルプロセッサに対する機械語命令を含み、高級手続き言語および/またはオブジェクト指向プログラミング言語において、および/または、アセンブリ言語/機械語において実装できる。本明細書中で用いたように、用語「機械読取可能な媒体」「コンピュータ読み取り可能な媒体」とは、機械読取可能な信号として機械語命令を受信する機械読取可能な媒体を含む、プログラマブルプロセッサに機械語命令および/またはデータを提供するよう用いられる、いずれかのコンピュータプログラム製品、装置、および/またはデバイス(例えば、磁気ディスク、光学ディスク、メモリ、プログラマブル論理デバイス(PLD))を指す。用語「機械読取可能な信号」とは、プログラマブルプロセッサに機械語命令および/またはデータを提供するよう用いられるいずれかの信号を指す。
【0226】
プログラムの命令の実行に対する好適なプロセッサは、例として、汎用および特殊用途両方のマイクロプロセッサ、いずれかの種類のコンピュータの単独プロセッサまたは複数のプロセッサのうちの1つを含む。一般に、プロセッサは、読み出し専用メモリまたはランダムアクセスメモリまたは両方から命令およびデータを受信する。コンピュータの構成要素は、命令を実行するためのプロセッサと、命令およびデータを格納するための1つ以上のメモリとを含んでもよい。一般に、コンピュータは、データファイルを格納するための1つ以上の大容量記憶装置も含むか、または、それと通信するよう動作可能に結合され、かかる装置は、内蔵ハードディスクおよびリムーバブルディスク等の磁気ディスク;光磁気ディスク;および光学ディスクを含む。コンピュータプログラム命令およびデータを明白に具現化するために好適な記憶装置は、例として、EPROM、EEPROM、およびフラッシュメモリデバイス等の半導体メモリデバイス;内蔵ハードディスクおよびリムーバブルディスク等の磁気ディスク;光磁気ディスク;およびCD−ROMおよびDVD−ROMディスクを含む、あらゆる形態の不揮発性メモリを含む。プロセッサおよびメモリは、ASIC(特定用途向け集積回路)によって補うか、またはそれらに組み込むことができる。
【0227】
ユーザとのインタラクションを提供するため、本明細書中で説明するシステムおよび技術は、情報をユーザに表示するためのディスプレイ装置(例えば、CRT(陰極線管)またはLCD(液晶表示器)モニタ)と、ユーザがコンピュータに入力できるキーボードおよびポインティングデバイス(例えば、マウスまたはトラックボール)とを有するコンピュータ上で実施できる。他の種類の装置は、同様にユーザとのインタラクションを提供するよう用いることができ;例えば、ユーザに提供されるフィードバックは、いずれかの形態の感覚フィードバック(例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)であってもよく;ユーザからの入力は、音響、音声、または触覚入力を含むいずれかの形態で受信されてもよい。
【0228】
本明細書中で説明するシステムおよび技術は、バックエンドコンポーネント(例えば、データサーバのような)を含むか、ミドルウェアコンポーネント(例えば、アプリケーションサーバ)を含むか、フロントエンドコンポーネント(例えば、ユーザが本明細書中で説明するシステムおよび技術の実施と相互作用できるグラフィカルユーザインタフェースまたはWebブラウザを有するクライアントコンピュータ)を含むか、または、かかるバックエンド、ミドルウェア、またはフロントエンドコンポーネントのいずれかの組み合わせを含むコンピューティングシステムにおいて実施できる。システムのコンポーネントは、デジタルデータ通信のいかなる形態または媒体(例えば、通信ネットワーク)によって相互接続できる。通信ネットワークの実施例は、ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)、およびインターネットを含む。
【0229】
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、概して互いから遠隔にあり、通常、通信ネットワーク介して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で動作し、互いに対してクライアント−サーバ関係を有するコンピュータプログラムに基づいて生じる。
【0230】
いくつかの実装形態を説明してきた。しかしながら、種々の変更が、本発明の精神と適用範囲を逸脱することなく、行われてもよいことは言うまでもない。例えば、本文書の大半は、メッセージングおよびマッピングアプリケーションに関して説明してきたが、対話型番組ガイド、webページナビゲーションおよびズーミング、および他のかかるアプリケーション等、他の形態のグラフィカルアプリケーションも扱われてもよい。
【0231】
加えて、図に示した論理フローは、所望の結果を達成するために、図示した特定の順序、または順番を必要としない。加えて、他のステップが提供されてもよいか、ステップは説明したフローから削除されてもよく、また、他のコンポーネントが説明したシステムに追加され、それらから除去されてもよい。従って、他の実施形態も、以下の特許請求の範囲内にある。