説明

フラッシュメモリデータストレージデバイスのパーティション化

複数のメモリチップ(118a、118b、218、318)を有するデータストレージデバイス(100、302)をパーティション化する方法が、データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数を決定することと、データストレージデバイス(100、302)に結合されたホスト(106、350)を介して、データストレージデバイス(100、302)の第1のパーティション(321、331)を定義することであって、第1のパーティション(321、331)が複数のメモリチップ(118a、118b、218、318)の第1のサブセットを含むことと、ホスト(106、350)を介して、データストレージデバイス(100、302)の第2のパーティション(322、332)を定義することであって、第1のサブセットは第2のサブセットのメモリチップ(118a、118b、218、318)を含むことはなく、第2のサブセットは第1のサブセットのメモリチップ(118a、118b、218、318)を含むことはないように、第2のパーティション(322、332)が、複数のメモリチップ(118a、118b、218、318)の第2のサブセットを含むこととを含む。

【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本出願は、引用により全体として本明細書中に組み込まれている、2009年4月8日に出願された「データストレージデバイス(DATA STORAGE DEVICE)」と題する米国仮出願第61/167,709号、及び2009年6月17日に出願された「フラッシュメモリデータストレージデバイスにおけるパーティショニング及びストライピング(PARTITIONING AND STRIPING IN A FLASH MEMORY DATA STORAGE DEVICE)」と題する米国仮出願第61/187,835号の利益を主張するものである。
【0002】
(技術分野)
この説明は、データストレージデバイスに関する。
【背景技術】
【0003】
(背景)
データストレージデバイスは、データを格納するために使用することができる。データストレージデバイスは、コンピューティングデバイスのデータストレージの必要性に備えるためにコンピューティングデバイスと共に使用することができる。場合によっては、膨大量のデータをデータストレージデバイスに格納することが望ましいこともある。また、データストレージデバイスとの間でデータの迅速な読み取り及び書き込みを行うためのコマンドを実行することが望ましい場合もある。
【発明の概要】
【課題を解決するための手段】
【0004】
(要旨)
第1の一般的な態様によれば、複数のメモリチップを含むデータストレージデバイスをパーティション化する方法が開示される。方法は、データストレージデバイス内のメモリチップの数を決定することを含む。データストレージデバイスに結合されたホストは、データストレージデバイスの第1のパーティション及び第2を定義し、第1のパーティションは複数のメモリチップの第1のサブセットを含み、第2のパーティションは複数のメモリチップの第2のサブセットを含む。第1のサブセットは、第2のサブセットのメモリチップを含むことはなく、第2のサブセットは、第1のサブセットのメモリチップを含むことはない。
【0005】
もう1つの一般的な態様において、複数のメモリチップを含むデータストレージデバイスをパーティション化する方法が開示され、そこでデータストレージデバイス内のメモリチップの数を含むデータストレージデバイスの物理構成、及びデータストレージデバイスのパーティション化方式が読み取られる。データストレージデバイスに結合されたホストは、データストレージデバイスの第1のパーティション及び第2のパーティションを定義し、第1のパーティションは複数のメモリチップの第1のサブセットを含み、第2のパーティションは複数のメモリチップの第2のサブセットを含み、第1のサブセットは、第2のサブセットのメモリチップを含むことはなく、第2のサブセットは、第1のサブセットのメモリチップを含むことはない。論理メモリから物理メモリへのマップは第1のパーティションに割り振られ、論理メモリから物理メモリへのマップは第1のパーティションに割り振られる。
【0006】
実施態様は、1つ以上の以下の特徴を含むことができる。データは、第2のパーティションからのデータの読み取り中に、第1のパーティションに書き込むことができる。データストレージデバイス内のメモリチップの数を決定することは、データストレージデバイス内のメモリチップの数を指示する情報をデータストレージデバイスからホストに送信することを含むことができる。ホストは、ホストからデータを書き込むデータストレージデバイス内のアドレス位置を定義することができ、アドレス位置は、データが複数のメモリチップのうちの特定の1つに書き込まれることを指定する。
【0007】
データストレージデバイスは、ホストと複数のメモリチップ間のデータの通信のための複数の物理チャネルを含むことができ、各チャネルは異なる複数のメモリチップに機能的に接続され、次いで、物理チャネルの数が決定されてもよい。チャネルの第1のサブセット及び第2のサブセットが定義されてもよく、チャネルの第1のサブセットのチャネルは、メモリチップの第1のサブセットのメモリチップのみに機能的に接続され、チャネルの第2のサブセットのチャネルは、メモリチップの第2のサブセットのメモリチップのみに機能的に接続される。ホストは、ホストからデータを書き込むデータストレージデバイス内のアドレス位置を定義することができ、アドレス位置は、特定のチャネルを通じてデータが複数のメモリチップのうちの特定の1つに書き込まれることを指定する。第1のパーティションは、単一のチャネルに機能的に接続されるメモリチップを含むことができる。
【0008】
ホストは、複数のメモリチップの第3のサブセットを含むようにデータストレージデバイスの第1のパーティションを再定義することができ、第3のサブセットは第1のサブセットとは異なり、第3のサブセットは第2のサブセットのメモリチップを含むことはなく、第2のサブセットは第3のサブセットのメモリチップを含むことはない。第1のサブセットのメモリチップの1つに障害が生じたか又は障害発生に近づきつつあることを示す指示が受信されてもよく、次いで、第1のパーティションを再定義することは、障害が生じたか又は障害発生に近づきつつあるメモリチップを除いた第3のサブセットをメモリチップの第1のサブセットとして定義することを含むことができる。
【0009】
もう1つの一般的な態様において、装置は、複数のメモリチップを含むデータストレージデバイスと、インターフェイスを介してデータストレージデバイスに機能的に結合されたホストとを含む。ホストは、データストレージデバイス内のメモリチップの数を検出するように構成された構成検出エンジン、及びパーティションエンジンを含む。パーティションエンジンは、データストレージデバイスの第1のパーティション及びデータストレージデバイスの第2のパーティションを定義するように構成され、第1のパーティションは複数のメモリチップの第1のサブセットを含み、第2のパーティションは複数のメモリチップの第2のサブセットを含み、第1のサブセットは、第2のサブセットのメモリチップを含むことはなく、第2のサブセットは、第1のサブセットのメモリチップを含むことはない。
【0010】
もう1つの一般的な態様において、装置は、複数のメモリチップを含むデータストレージデバイスと、インターフェイスを介してデータストレージデバイスに機能的に結合されたホストとを含む。ホストは、データストレージデバイス内のメモリチップの数を含むデータストレージデバイスの物理構成を読み取るように構成され、データストレージデバイスのパーティション化方式を読み取るように構成された構成検出エンジンを含む。ホストはまた、データストレージデバイスの第1のパーティションを定義するように、及びデータストレージデバイスの第2のパーティションを定義するように構成されたパーティションエンジンを含み、第1のパーティションは複数のメモリチップの第1のサブセットを含み、第2のパーティションは複数のメモリチップの第2のサブセットを含み、パーティションエンジンは、論理メモリから物理メモリへのマップを第1のパーティションに割り振り、論理メモリから物理メモリへのマップを第2のパーティションに割り振るように構成される。第1のサブセットは、第2のサブセットのメモリチップを含むことはなく、第2のサブセットは、第1のサブセットのメモリチップを含むことはない。
【0011】
実施態様は、1つ以上の以下の特徴を含むことができる。たとえば、データストレージデバイスは、ホストからコマンドを受信すると、データストレージデバイス内のメモリチップの数を指示する情報をデータストレージデバイスからホストに送信するように構成されてもよい。ホストはまた、データストレージデバイスに書き込まれるデータにメモリアドレスを割り当てるように構成されたアドレス割り当てエンジンを含むことができ、割り当てられるメモリアドレスは、データが複数のメモリチップのうちの特定の1つに書き込まれることを指定する。
【0012】
データストレージデバイスは、ホストと複数のメモリチップ間のデータの通信のための複数の物理チャネルを含むことができ、各チャネルは異なる複数のメモリチップに機能的に接続される。次いで、構成検出エンジンは、データストレージデバイス内のチャネルの数を検出するようにさらに構成されてもよく、パーティションエンジンはさらに、チャネルの第1のサブセットを定義するように構成されてもよく、チャネルの第1のサブセットのチャネルは、メモリチップの第1のサブセットのメモリチップのみに機能的に接続され、パーティションエンジンはさらに、チャネルの第2のサブセットを定義するように構成されてもよく、チャネルの第2のサブセットのチャネルは、メモリチップの第2のサブセットのメモリチップのみに機能的に接続される。
【0013】
ホストはさらに、データストレージデバイスに書き込まれるデータにメモリアドレスを割り当てるように構成されたアドレス割り当てエンジンを含むことができ、割り当てられるメモリアドレスは、データが特定のチャネルを通じて複数のメモリチップのうちの特定の1つに書き込まれることを指定する。第1のパーティションは、単一のチャネルに機能的に接続されるメモリチップを含むことができる。パーティションエンジンはさらに、複数のメモリチップの第3のサブセットを含むようデータストレージデバイスの第1のパーティションを再定義するように構成されてもよく、第3のサブセットは第1のサブセットとは異なり、第3のサブセットは第2のサブセットのメモリチップを含むことはなく、第2のサブセットは第3のサブセットのメモリチップを含むことはない。パーティションエンジンはさらに、第1のサブセットのメモリチップの1つに障害が生じたか又は障害発生に近づきつつあることを示す指示を受信するように構成されてもよく、複数のメモリチップの第3のサブセットを含むように第1のパーティションを再定義することは、障害が生じたか又は障害発生に近づきつつあるメモリチップを除いた第3のサブセットをメモリチップの第1のサブセットとして定義することを含むことができる。
【図面の簡単な説明】
【0014】
【図1】データストレージデバイスを示す例示的なブロック図である。
【0015】
【図2】図1のデータストレージデバイスにおいて使用されうるFPGAコントローラを示す例示的なブロック図である。
【0016】
【図3A】図1のデータストレージデバイスと共に使用する例示的なコンピューティングデバイスを示す例示的なブロック図である。
【0017】
【図3B】図1のデータストレージデバイスと共に使用する例示的なコンピューティングデバイスを示す例示的なブロック図である。
【0018】
【図4】図1のデータストレージデバイスをパーティション化する例示のプロセスを示す例示的な流れ図である。
【0019】
【図5】図1のデータストレージデバイスをパーティション化する例示のプロセスを示すもう1つの例示的な流れ図である。
【発明を実施するための形態】
【0020】
(詳細な説明)
本文書は、データストレージのための装置、(1つ以上の)システム、及び技法を説明する。そのようなデータストレージ装置は、1つ以上の異なるメモリボードと共に使用されうるコントローラを有するコントローラボードを含むことができ、メモリボードは各々複数のフラッシュメモリチップを有する。データストレージ装置は、コントローラボード上のインターフェイスを使用してホストと通信することができる。このように、コントローラボード上のコントローラは、インターフェイスを使用してホストからコマンドを受信し、メモリボード上のフラッシュメモリチップを使用してそれらのコマンドを実行するように構成されてもよい。
【0021】
図1は、データストレージデバイス100を示すブロック図である。データストレージデバイス100は、コントローラボード102及び1つ以上のメモリボード104a及び104bを含むことができる。データストレージデバイス100は、インターフェイス108を介してホスト106と通信することができる。インターフェイス108は、ホスト106とコントローラボード102の間にあってもよい。コントローラボード102は、コントローラ110、DRAM 111、複数のチャネル112、電源モジュール114、及びメモリモジュール116を含むことができる。メモリボード104a及び104bは、各メモリボード上に複数のフラッシュメモリチップ118a及び118bを含むことができる。メモリボード104a及び104bはまた、メモリデバイス120a及び120bを含むことができる。
【0022】
一般に、データストレージデバイス100は、フラッシュメモリチップ118a及び118b上にデータを格納するように構成されてもよい。ホスト106は、フラッシュメモリチップ118a及び118bとの間でデータの書き込み及び読み取りを行うことができ、さらにフラッシュメモリチップ118a及び118bに関してその他の操作を実行させるようにすることができる。ホスト106とフラッシュメモリチップ118a及び118bとの間のデータの読み取り及び書き込み、並びにその他の操作は、コントローラボード102上のコントローラ110を通じて処理され、制御されてもよい。コントローラ110は、ホスト106からコマンドを受信して、メモリボード104a及び104b上のフラッシュメモリチップ118a及び118bを使用してそれらのコマンドを実行させてもよい。ホスト106とコントローラ110との間の通信は、インターフェイス108を通じて行われてもよい。コントローラ110は、チャネル112を使用して、フラッシュメモリチップ118a及び118bと通信することができる。
【0023】
コントローラボード102は、DRAM 111を含むことができる。DRAM 111は、コントローラ110に機能的に結合されてもよく、情報を格納するために使用されてもよい。たとえば、DRAM 111は、論理アドレスから物理アドレスへのマップ及び不良ブロックの情報を格納するために使用されてもよい。DRAM 111はまた、ホスト106とフラッシュメモリチップ118a及び118bとの間のバッファとして機能するように構成されてもよい。
【0024】
1つの例示的な実施態様において、コントローラボード102及び各々のメモリボード104a及び104bは、物理的に別個のプリント基板(PCB)である。メモリボード104aは、コントローラボード102のPCBに機能的に接続されている1つのPCB上にあってもよい。たとえば、メモリボード104aは、コントローラボード102に物理的及び/又は電気的に接続されてもよい。同様に、メモリボード104bは、メモリボード104aから分離されたPCBでもよく、コントローラボード102のPCBに機能的に接続されてもよい。たとえば、メモリボード104bは、コントローラボード102に物理的及び/又は電気的に接続されてもよい。
【0025】
メモリボード104a及び104bは各々、コントローラボード102から別個に切断されて取り外し可能であってもよい。たとえば、メモリボード104aは、コントローラボード102から切断されて、別のメモリボード(図示せず)に置き換えられてもよく、その別のメモリボードはコントローラボード102に機能的に接続される。この例において、メモリボード104a及び104bのいずれか又は両方は、他のメモリボードが同じコントローラボード102及びコントローラ110で動作できるように、他のメモリボードでスワップアウトされてもよい。
【0026】
1つの例示的な実施態様において、コントローラボード102及び各々のメモリボード104a及び104bは、ディスクドライブフォームファクタで物理的に接続されてもよい。ディスクドライブフォームファクタは、たとえば3.5”ディスクドライブフォームファクタ及び2.5”ディスクドライブフォームファクタのような、さまざまなサイズを含むことができる。
【0027】
1つの例示的な実施態様において、コントローラボード102及び各々のメモリボード104a及び104bは、高密度ボールグリッドアレイ(ball grid array)(BGA)コネクタを使用して電気的に接続されてもよい。たとえば、ファインボールグリッドアレイ(fine ball grid array)(FBGA)コネクタ、ウルトラファインボールグリッドアレイ(ultra fine ball grid array)(UBGA)コネクタ、及びマイクロボールグリッドアレイ(micro ball grid array)(MBGA) コネクタを含むその他のBGAコネクタの変種が使用されてもよい。その他のタイプの電気接続手段が使用されてもよい。
【0028】
インターフェイス108は、コントローラ110とホスト106との間の高速インターフェイスを含むことができる。高速インターフェイスは、ホスト106とフラッシュメモリチップ118a及び118bとの間のデータの高速転送を可能にすることができる。1つの例示的な実施態様において、高速インターフェイスは、Peripheral Component Interconnect Express(PCIe)インターフェイスを含むことができる。たとえば、PCIeインターフェイスは、PCIe x4インターフェイス又はPCIe x8インターフェイスであってもよい。PCIeインターフェイス108は、ホスト106へのPCIeコネクタケーブルアセンブリを含むことができる。この例において、110は、ホスト106とインターフェイス108との間のインターフェイスをとるように構成されたインターフェイスコントローラを含むことができる。インターフェイスコントローラは、PCIeエンドポイントコントローラを含むことができる。その他の高速インターフェイス、コネクタ及びコネクタアセンブリが使用されてもよい。
【0029】
1つの例示的な実施態様において、コントローラボード102とメモリボード104a及び104b上のフラッシュメモリチップ118a及び118bとの間の通信は、複数のチャネル112に配置されて構成されてもよい。各々のチャネル112は、1つ以上のフラッシュメモリチップ118a及び118bと通信することができる。コントローラ110は、ホスト106から受信されたコマンドが、各々のチャネル112を使用して、同時に、又は少なくとも実質的に同時にコントローラ110によって実行されうるように構成されてもよい。このように、複数のコマンドは、異なるチャネル112で同時に実行することができ、データストレージデバイス100のスループットを向上させることができる。
【0030】
図1の例において、20個のチャネル112が示される。完全な実線は、コントローラ110とメモリボード104a上のフラッシュメモリチップ118aとの間の10個のチャネルを示す。実線及び破線の混合線は、コントローラ110とメモリボード104b上のフラッシュメモリチップ118bとの間の10個のチャネルを示す。図1に示すように、各々のチャネル112は、複数のフラッシュメモリチップをサポートすることができる。たとえば、各々のチャネル112は、最大32個のフラッシュメモリチップをサポートすることができる。1つの例示的な実施態様において、20個のチャネルは各々、6個のフラッシュメモリチップをサポートして通信するように構成されてもよい。この例において、各々のメモリボード104a及び104bは、それぞれ60個のフラッシュメモリチップを含むことができる。フラッシュメモリチップ118a及び118bのタイプ及び数に応じて、データストレージ100デバイスは、最大多数テラバイトのデータまで格納するように構成されてもよい。
【0031】
コントローラ110は、マイクロコントローラ、FPGAコントローラ、その他のタイプのコントローラ、又はそれらのコントローラの組み合わせを含むことができる。1つの例示的な実施態様において、コントローラ110はマイクロコントローラである。マイクロコントローラは、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせで実施されてもよい。たとえば、マイクロコントローラは、実行されると、特定の方法でマイクロコントローラに実行させることができる命令を含むコンピュータプログラム製品がメモリ(たとえば、メモリモジュール116)からロードされてもよい。マイクロコントローラは、インターフェイス108を使用してホスト106からコマンドを受信し、コマンドを実行するように構成されてもよい。たとえば、コマンドは、フラッシュメモリチップ118a及び118bを使用してデータのブロックの読み取り、書き込み、コピー、及び削除を行うコマンド、並びにその他のコマンドを含むことができる。
【0032】
もう1つの例示的な実施態様において、コントローラ110はFPGAコントローラである。FPGAコントローラは、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせで実施されてもよい。たとえば、FPGAコントローラは、実行されると、特定の方法でFPGAコントローラに実行させることができる命令を含むファームウェアがメモリ(たとえば、メモリモジュール116)からロードされてもよい。FPGAコントローラは、インターフェイス108を使用してホスト106からコマンドを受信し、コマンドを実行するように構成されてもよい。たとえば、コマンドは、フラッシュメモリチップ118a及び118bを使用してデータのブロックの読み取り、書き込み、コピー、及び削除を行うコマンド、並びにその他のコマンドを含むことができる。
【0033】
メモリモジュール116は、コントローラ110にロードされうるデータを格納するように構成されてもよい。たとえば、メモリモジュール116は、FPGAコントローラの1つ以上のイメージを格納するように構成されてもよく、イメージはFPGAコントローラによって使用されるファームウェアを含む。メモリモジュール116は、ホスト106と通信するために、ホスト106とのインターフェイスをとることができる。メモリモジュール116は、ホスト106と直接インターフェイスをとることができる、及び/又はコントローラ110を通じてホスト106と間接的にインターフェイスをとることができる。たとえば、ホスト106は、ファームウェアの1つ以上のイメージを、格納のためにメモリモジュール116に伝達することができる。1つの例示的な実施態様において、メモリモジュール116は、電気的消去可能プログラマブルROM(electrically erasable programmable read-only memory)(EEPROM)を含む。メモリモジュール116はまた、その他のタイプのメモリモジュールを含むことができる。
【0034】
メモリボード104a及び104bは、さまざまなタイプのフラッシュメモリチップ118a及び118bで動作するように構成されてもよい。1つの例示的な実施態様において、フラッシュメモリチップ118a及びフラッシュメモリチップ118bは、電源モジュール114から同じ電圧を必要とすること、及び同じフラッシュメモリチップベンダーのものであることを含む同じタイプのフラッシュメモリチップであってもよい。ベンダー及び製造元という用語は、本文書全体を通じて同義的に使用される。
【0035】
1つの例示的な実施態様において、メモリボード104a上のフラッシュメモリチップ118aは、メモリボード104b上のフラッシュメモリチップ118bとは異なるタイプであってもよい。たとえば、メモリボード104aはSLC NANDフラッシュメモリチップを含むことができ、メモリボード104bはMLC NANDフラッシュメモリチップを含むことができる。もう1つの例において、メモリボード104aはあるフラッシュメモリチップ製造元によるラッシュメモリチップを含むこともあり、メモリボード104bは別のフラッシュメモリチップ製造元によるフラッシュメモリチップを含むこともある。すべて同じタイプのフラッシュメモリチップを備えるか、又は異なるタイプのフラッシュメモリチップを備えるという柔軟性があるため、データストレージデバイス100は、ホスト106に使用されているさまざまなアプリケーションに合わせて調整することができる。
【0036】
もう1つの例示的な実施態様において、メモリボード104a及び104bは、同じメモリボード上に異なるタイプのフラッシュメモリチップを含むことができる。たとえば、メモリボード104aは、同じPCB上にSLC NANDチップとMLC NANDチップの両方を含むことができる。同様に、メモリボード104bは、SLC NANDチップとMLC NANDチップの両方を含むことができる。このように、データストレージデバイス100は、ホスト106の仕様に適合するように有利に調整されてもよい。
【0037】
もう1つの例示的な実施態様において、メモリボード104a及び104bは、フラッシュメモリ以外のチップを含む、その他のタイプのメモリデバイスを含むことができる。たとえば、メモリボード104a及び104bは、たとえばダイナミックRAM(DRAM)及びスタティックRAM(SRAM)のようなランダムアクセスメモリ(RAM)、並びにその他のタイプのRAM及びその他のタイプのメモリデバイスを含むこともできる。1つの例示的な実施態様において、メモリボード104a及び104はいずれも、RAMを含むことができる。もう1つの例示的な実施態様において、メモリボードの一方はRAMを含み、もう一方のメモリボードはフラッシュメモリチップを含むことができる。また、メモリボードの一方は、RAM及びフラッシュメモリチップの両方を含むことができる。
【0038】
メモリボード104a及び104b上のメモリモジュール120a及び120bは、それぞれフラッシュメモリチップ118a及び118bに関連する情報を格納するために使用されてもよい。1つの例示的な実施態様において、メモリモジュール120a及び120bは、フラッシュメモリチップのデバイス特性を格納することができる。デバイス特性は、チップがSLCチップ又はMLCのいずれであるか、チップがNAND又はNORチップのいずれであるか、チップセレクトの数、ブロックの数、ブロックあたりのページの数、ページあたりのバイトの数、及びチップの速度を含むことができる。
【0039】
1つの例示的な実施態様において、メモリモジュール120a及び120bは、シリアルEEPROMを含むことができる。EEPROMは、デバイス特性を格納することができる。デバイス特性は、任意の所定のタイプのフラッシュメモリチップに対して1回コンパイルされてもよく、適切なEEPROMイメージがデバイス特性と共に生成されてもよい。メモリボード104a及び104bがコントローラボード102に機能的に接続される場合、デバイス特性は、コントローラ110が制御しているフラッシュメモリチップ118a及び118bのタイプをコントローラ110が自動的に認識できるように、EEPROMから読み取られてもよい。加えて、デバイス特性は、特定の1つ以上のタイプのフラッシュメモリチップ118a及び118bの適切なパラメータにコントローラ110を構成するために使用されてもよい。
【0040】
上記で説明されるように、コントローラ110は、FPGAコントローラを含むことができる。図2を参照すると、FPGAコントローラ210を示す例示的なブロック図が示される。FPGAコントローラは、図1のコントローラ110に関して上記で説明されたように動作するよう構成されてもよい。FPGAコントローラ210は、複数のチャネル112をフラッシュメモリチップ218に接続するために複数のチャネルコントローラ250を含むことができる。フラッシュメモリチップ218は、各々のチャネルコントローラ250に接続する複数のフラッシュメモリチップとして示される。フラッシュメモリチップ218は、図1の別個のメモリボード104a及び104b上にある、図1のフラッシュメモリチップ118a及び118bの代表である。別個のメモリボードは、図2の例には示されていない。FPGAコントローラ210は、PCIeインターフェイスモジュール208、双方向ダイレクトメモリアクセス(DMA)コントローラ252、ダイナミックランダムアクセスメモリ(DRAM)コントローラ254、コマンドプロセッサ/キュー256、及び情報及び構成インターフェイスモジュール258を含むことができる。
【0041】
情報は、インターフェイスを使用してホスト(たとえば、図1のホスト106)との間で伝達されてもよい。図2のこの例において、FPGAコントローラ210は、ホスト及びPCIeインターフェイスモジュール208と通信するためにPCIeインターフェイスを含む。PCIeインターフェイスモジュール208は、ホストからコマンドを受信して、ホストにコマンドを送信するように、配置され構成されてもよい。PCIeインターフェイスモジュール208は、ホストとデータストレージデバイスとの間のデータフロー制御をもたらすことができる。PCIeインターフェイスモジュール208は、ホストとコントローラ210、及び最終的にはフラッシュメモリチップ218との間のデータの高速転送を可能にすることができる。1つの例示的な実施態様において、PCIeインターフェイス及びPCIeインターフェイスモジュール208は、64ビットバスを含むことができる。双方向ダイレクトメモリアクセスDMAコントローラ252は、PCIeインターフェイスモジュール208とコマンドプロセッサ/キュー256間のバスの動作を制御するように配置され構成されてもよい。
【0042】
双方向DMAコントローラ252は、PCIeインターフェイス208、及び各々のチャネルコントローラ250とのインターフェイスをとるように構成されてもよい。双方向DMAコントローラ252は、ホスト106とフラッシュメモリチップ218との間の双方向ダイレクトメモリアクセスを可能にする。
【0043】
DRAMコントローラ254は、論理アドレスから物理アドレスへの変換を制御するように配置され構成されてもよい。たとえば、ホストが論理アドレスを使用してメモリスペースをアドレス指定する実施態様において、DRAMコントローラ254は、コマンドプロセッサ/キュー256が、ホストに使用されている論理アドレスを、フラッシュメモリチップ218との間で書き込み中又は読み取り中のデータに関連するフラッシュメモリチップ218内の実際の物理アドレスに変換する操作を補助することができる。ホストから受信された論理アドレスは、フラッシュメモリチップ218の1つの位置の物理アドレスに変換されてもよい。同様に、フラッシュメモリチップ218の1つの位置の物理アドレスは、論理アドレスに変換されて、ホストに伝達されてもよい。
【0044】
コマンドプロセッサ/キュー256は、PCIeインターフェイスモジュール208を通じてホストからコマンドを受信し、チャネルコントローラ250を通じてコマンドの実行を制御するように、配置され構成されてもよい。コマンドプロセッサ/キュー256は、実行されるべき複数のコマンドのキューを保持し、最も古いコマンドが確実に最初に処理されるように番号付きリストを使用してコマンドを順序付けることができる。コマンドプロセッサ100は、同じフラッシュメモリチップに指定されているコマンドの順序を保持することができ、異なるフラッシュメモリチップに指定されているコマンドを再配列することができる。このように、複数のコマンドは同時に実行されてもよく、各々のチャネル112は、同時に、又は少なくとも実質的に同時に使用されてもよい。
【0045】
コマンドプロセッサ/キュー256は、異なるチャネル112のコマンドを順不同に処理して、チャネルごとのコマンド順序付けを保持するように構成されてもよい。たとえば、ホストから受信されて、異なるチャネルに指定されているコマンドは、コマンドプロセッサ/キュー256によって順不同に処理されてもよい。このように、チャネルはビジー状態の場合もある。同じチャネルで処理されるようにホストから受信されるコマンドは、コマンドがホストからコマンドプロセッサ/キュー256によって受信された順序で処理されてもよい。1つの例示的な実施態様において、コマンドプロセッサ/キュー256は、コマンドが確実に適時に実行されるようにするため、古いもの順でホストから受信されたコマンドのリストを保持するように構成されてもよい。
【0046】
チャネルコントローラ250は、コマンドプロセッサ/キュー256からのコマンドを処理するように配置されて構成されてもよい。各々のチャネルコントローラ250は、複数のフラッシュメモリチップ218のコマンドを処理するように構成されてもよい。1つの例示的な実施態様において、各々のチャネルコントローラ250は、最大32個のフラッシュメモリチップ218のコマンドを処理するように構成されてもよい。
【0047】
チャネルコントローラ250は、コマンドプロセッサ/キュー256によって指定された順序で、コマンドプロセッサ/キュー256からのコマンドを処理するように構成されてもよい。処理されうるコマンドの例は、フラッシュページの読み取り、フラッシュページのプログラミング、フラッシュページのコピー、フラッシュブロックの消去、フラッシュブロックのメタデータの読み取り、フラッシュメモリチップの不良ブロックのマッピング、及びフラッシュメモリチップのリセットを含むが、これらに限定されることはない。
【0048】
情報及び構成インターフェイスモジュール258は、FPGAコントローラ210の構成情報を受信するために、メモリモジュール(たとえば、図1のメモリモジュール116)とのインターフェイスをとるように配置され構成されてもよい。たとえば、情報及び構成インターフェイスモジュール258は、ファームウェアをFPGAコントローラ210に提供するために、メモリモジュールから1つ以上のイメージを受信することができる。イメージ及びファームウェアへの変更は、ホストにより情報及び構成インターフェイスモジュール258を通じてコントローラ210に提供されてもよい。情報及び構成インターフェイスモジュール258を通じて受信された変更は、たとえば、PCIeインターフェイスモジュール208、双方向ダイレクトメモリアクセス(DMA)コントローラ252、DRAMコントローラ254、コマンドプロセッサ/キュー256、チャネルコントローラ250を含むコントローラ210のコンポーネントのいずれかに適用されてもよい。情報及び構成インターフェイスモジュール258は、1つ以上のレジスタを含むことができ、レジスタはホストからの命令により必要に応じて変更されてもよい。
【0049】
FPGAコントローラ210は、ホストと共に協働してコマンドを処理するように配置されて構成されてもよい。FPGAコントローラ210は、エラー訂正、不良ブロック管理、論理から物理へのマッピング、ガーベッジコレクション、消耗平準化、パーティショニング、及びフラッシュメモリチップ218に関連する低レベルフォーマッティングを実行することができるか、又は少なくともその操作を補助することができる。
【0050】
図3Aは、第1のパーティション321及び第2のパーティション322に編成される複数のフラッシュメモリチップ318a、318b、318c、318d、318e、318f、318g、318h、318i、318j、318k、318lを有するデータストレージデバイス302を含む装置300を示す概略ブロック図である。第1及び第2のパーティション321及び322は、異なるカテゴリのディレクトリ及びファイルが異なるパーティションに格納されうるように、又は1つのパーティションが他のパーティションとは異なる目的で使用されうるように、データストレージデバイス302内のストレージスペースの異なる物理領域を定義する。第1のパーティションは、フラッシュメモリチップ318a〜fの第1のサブセットを含むことができ、第2のパーティションは、フラッシュメモリチップ318g〜lの第2のサブセットを含むことができるが、ここで両方のパーティションに属するフラッシュメモリチップはない。すなわち、パーティション321と322の境界は、個々のフラッシュメモリチップが2つ以上のパーティションに属することがないように、個々のフラッシュメモリチップの間に引かれる。
【0051】
データストレージデバイスを2つ以上のパーティションに編成することで、いくつかの目的にかなうことができる。たとえば、1つのパーティションに格納されたオペレーティングシステムファイルは、もう1つのパーティションに格納されたユーザファイルとは別個に保持することができる。動的かつ急速にサイズが変化することもあり、ファイルシステムを満杯にしてしまう可能性のあるキャッシュ及びログファイルは、1つのパーティションに格納して、異なるパーティションに格納されたその他のファイルとは別個に保持することもできる。パーティションは、マルチブートセットアップに使用されてもよく、それによりユーザは単一のコンピュータに複数のオペレーティングシステムを有することができる。たとえば、ユーザはLinux、Mac OS X、及びMicrosoft Windows、又はオペレーティングシステムを、同じデータストレージデバイスの異なるパーティションにインストールして、電源投入時に(ハードウェアによってサポートされる)任意のオペレーティングシステムへのブートを選択することができる。パーティションは、ファイルを保護又は隔離して、破損したファイルシステム又はオペレーティングシステムのインストールをより回復しやすくするために使用されてもよい。たとえば、1つのパーティションが破損しても、その他のファイルシステムは全く影響を受けていない場合、ストレージデバイス上のデータは引き続き救出可能である。読み取り専用データに別個のパーティションを使用することもまた、そのパーティション上のファイルシステムが破損してしまう可能性を低減する。パーティションはまた、より小さいファイルシステムがより効率的であるようなシステムにおいて全体的なコンピュータパフォーマンスを高めることができる。たとえば、1つのNTFSファイルシステムしか備えていない大規模なハードドライブは通常、非常に大型の順次アクセスのマスターファイルテーブル(MFT)を有し、このMFTを読み取るために要する時間は、より小さいパーティションの小さいMFTの場合よりも概して長くなる。
【0052】
もう1つの例示的な実施態様において、データストレージデバイス302は、データストレージデバイスから迅速に読み取られて、ホストに供給される必要のある膨大量のデータ(たとえば、多数ギガバイト又はテラバイトのデータ)を格納するために使用されてもよい。たとえば、データストレージデバイスは、クエリに応答してホストが取り出すことのできる大量の公的にアクセス可能な情報(たとえば、ワールドワイドウェブからの大量のウェブページのコーパス、電子版書籍の大規模なライブラリ、又は大量の通信を表すデジタル情報など)をキャッシュに入れるために使用されてもよい。つまり、関連データは、ホストによって発行される読み取りコマンドに応答して極めて迅速にアクセスされ、返されることが重要となりうる。しかし、データストレージデバイスに格納されている情報はまた、関連情報の変化に応じて情報を最新の状態に維持するために、常時更新される必要もある。たとえば、ストレージデバイス上の情報がウェブページのコーパスに関連する場合、ストレージデバイス上に格納されている情報は、ウェブページが変更されるごと、及び新しいウェブページが作成されるごとに更新される必要もある。
【0053】
そのようなシステムにおいて、パーティション化されたフラッシュメモリデータストレージデバイス302は、並外れたパフォーマンスを提供することができる。フラッシュメモリストレージデバイスにおいて、フラッシュメモリチップへの書き込み操作は、フラッシュメモリチップからの読み取り操作よりも、はるかに長い時間を要する(たとえば、10倍〜100倍長い)。したがって、データストレージデバイスのチップ318a〜lを2つ以上のパーティションに編成し、パーティションは異なるチップ間の境界で定義されるようにすることで、迅速な読み取り操作を確保し、しかもデータストレージデバイスに格納されている情報はリアルタイムで更新される方法をもたらす。たとえば、両パーティション321及び322は、クエリに応答して供給されるべきデータのコーパス(たとえば、ウェブページのコーパス)を格納するために使用されてもよく、個々のパーティションは、要求への対応と新しい情報による更新とを繰り返すことができる。たとえば、第1の時限において、第1のパーティション321は、ホストに情報(たとえば、ユーザクエリに応答して要求されうる情報)を提供するために使用されてもよく、その間、第2のパーティション322上のデータは(たとえば、ウェブページのコーパスへの変更又は追加に応答して)更新される。次いで、第2の時限において、最近更新された第2のパーティション322は、ホストに情報を提供するために使用されてもよく、その間、第1のパーティション321上のデータは更新される。データを常に読み取り専用デバイスとして機能するパーティションから供給することができるように、このプロセスを繰り返すことができる。したがって書き込みコマンドによって速度が低下することなくホストからの読み取りコマンドに極めて迅速に応答することができ、しかもその間に他のパーティションは新しい情報で更新される。個々のフラッシュメモリチップが1つのパーティションのみに含まれるようにパーティションを定義することで、データの書き込みと読み取りが実質的に同時に行われるフラッシュチップ(ホスト350からの読み取り要求への応答に遅延を生じる原因となる)がないようにする。
【0054】
上記で説明されるように、メモリチップ318a〜lは、FPGAコントローラ310を含むことができるコントローラに接続されてもよい。FPGAコントローラは、図1のコントローラ110、又は図2のFPGA 210に関して上記で説明されているように動作するよう構成されてもよい。FPGAコントローラ310は、複数のチャネル112をフラッシュメモリチップ318a〜lに接続するために複数のチャネルコントローラ312a、312b、312c、312d、312e、312fを含むことができる。言うまでもなく、上記で説明されているように、ストレージデバイスは、12個よりも多いフラッシュメモリチップ、6個よりも多いチャネルコントローラを含むことができ、2個よりもはるかに多くのフラッシュメモリチップは、物理チャネルにわたりチャネルコントローラに機能的に接続されてもよい。したがって、図3A及び図3Bに示される実施態様は、説明を明確にするため単に概略を示したものにすぎない。
【0055】
1つの実施態様において、チャネルコントローラ312a、312b、312c、312d、312e、312fは、各パーティション321及び322の一部であるフラッシュメモリチップに機能的に接続されるチャネルを制御することができる。たとえば、チャネルコントローラ312aは、第1のパーティション321の一部であるメモリチップ318a、及びまた第2のパーティション322の一部であるメモリチップ318gに、機能的に接続されてもよい。そのような構成において、第1のパーティション321の少なくとも1つのメモリチップは、データストレージデバイス302とホストとの間の各通信チャネルに接続され、第2のパーティション322の少なくとも1つのメモリチップは、データストレージデバイス302とホスト350との間の各通信チャネルに接続される。そのような構成は、パーティション321又は322とホストとの間の通信の最大並列処理につながり、その結果データストレージデバイス302との間の高速読み取りアクセス及び高速書き込み時間をもたらすことができる。
【0056】
もう1つの実施態様において、ほぼ半数のチャネルコントローラが第1のパーティションのフラッシュメモリチップに機能的に接続されてもよく、ほぼ半数のチャネルコントローラが第2のパーティションのフラッシュメモリチップに機能的に接続されてもよい。
【0057】
図3Bに示されるもう1つの実施態様において、フラッシュメモリチップ318a、318b、318c、318d、318e、318f、318g、318h、318i、318j、318k、318lは、第1のパーティション331、第2のパーティション322、第3のパーティション333、第4のパーティション334に編成されてもよく、ここで異なるカテゴリのディレクトリ及びファイルが異なるパーティションに格納されうるように、又は1つのパーティションが他のパーティションとは異なる目的で使用されうるように、異なるパーティションはデータストレージデバイス302内のストレージスペースの異なる物理領域を定義する。第1のパーティション331は、フラッシュメモリチップ318a〜cの第1のサブセットを含むことができる。第2のパーティション332は、フラッシュメモリチップ318d〜fの第2のサブセットを含むことができる。第3のパーティション333は、フラッシュメモリチップ318g〜iの第3のサブセットを含むことができる。第4のパーティション334は、フラッシュメモリチップ318j〜lの第4のサブセットを含むことができる。さまざまなパーティション331、332、333、及び334の中で、物理メモリアドレススペースが2つ以上のパーティションの一部である個々のフラッシュメモリチップはない。すなわち、パーティション331、332、333、及び334の間の境界は、個々のフラッシュメモリチップが2つ以上のパーティションに属することがないように、個々のフラッシュメモリチップの間に引かれる。
【0058】
図3Bのシステムにおいて、パーティション化されたフラッシュメモリデータストレージデバイス302は、たとえば、クエリに応答して供給されるべきデータのコーパス(たとえば、ウェブページのコーパス)を格納するために使用される場合、及び個々のパーティションが要求への対応と新しい情報による更新とを繰り返すことができる場合に、並外れたパフォーマンスを提供することができる。たとえば、第1の時限において、第1、第2、及び第3のパーティション331、332、及び333は、ホストに情報(たとえば、ユーザクエリに応答して要求されうる情報)を提供するために使用されてもよく、その間、第4のパーティション334上のデータは(たとえば、ウェブページのコーパスへの変更又は追加に応答して)更新される。次いで、第2の時限において、最近更新された第4のパーティション334は、第2及び第3のパーティション332及び332と共にホストに情報を提供するために使用されてもよく、その間、第1のパーティション331上のデータは更新される。したがって、各パーティション上のデータは、ラウンドロビンの方式で更新されてもよく、その間、クエリ要求は他のパーティションによって対応される。このプロセスは、データが常に、読み取り専用デバイスとして機能するパーティションから供給されるように繰り返されてもよく、したがって書き込みコマンドによって速度が低下することなくホストからの読み取りコマンドに極めて迅速に応答することができ、しかもその間他のパーティションは新しい情報で更新される。4つのパーティションを定義することで、1つのパーティションがもはや使用可能ではなくなるような、パーティション、チャネル、又は個々のメモリチップの障害が生じる場合、残りの3つのパーティションが引き続き使用されて、各々の残りのパーティションが交代で更新され、その間他の残りのパーティションがデータ要求に対応するデータストレージデバイスを提供することができるように、データストレージデバイス上に格納されている情報の冗長性がもたらされる。
【0059】
上記で説明されるように、データストレージデバイス302は、たとえばPCIeインターフェイスのような高速インターフェイスであってもよい、インターフェイス308を通じてホスト350に接続されてもよい。ホストは、たとえば、プロセッサ352、第1のメモリ354、第2のメモリ356、及びパーティションエンジン360を含むことができる。第1のメモリ354は、たとえば、プロセッサ352によって実行されうる機械可読の実行可能コード命令を格納するように適合される不揮発性メモリデバイス(たとえば、ハードディスク)を含むことができる。第1のメモリ354に格納されるコード命令は、第2のメモリ(たとえば、ランダムアクセスメモリのような揮発性メモリ)356にロードすることができ、ここでコード命令はプロセッサ352によって実行されて、メモリデバイス検出エンジン358及びパーティションエンジン360を作成することができる。第2のメモリは、ユーザモードアプリケーションに専用の「ユーザスペース」の論理ブロック、及びユーザレベルアプリケーションがそれらの機能を実行するために制御する必要のある低レベルリソースの実行に専用の「カーネルスペース」364の論理ブロックを含むことができる。メモリデバイス検出エンジン358及びパーティションエンジン360は、第2のメモリ356のカーネルスペース364に常駐することができる。
【0060】
構成検出エンジン358は、データストレージデバイス302上のフラッシュメモリチップ318の数を検出するように構成されてもよく、パーティションエンジン360は、データストレージデバイスの第1のパーティション321及び第2のパーティション322を定義するように構成されてもよい。したがって、ホスト350で稼働する構成検出エンジン358及びパーティションエンジン360は、ホストが、データストレージデバイス302のハードウェアデバイスプロパティを発見し、次いでパーティション321及び322をホストを介して定義するために使用することができる。1つの実施態様において、構成検出エンジン358は、データストレージデバイスにクエリコマンドを発行することができ、データストレージデバイスは、クエリコマンドに応答して、たとえばフラッシュメモリチップ318の数、各チップの(たとえば、バイトで測定された)サイズ、データストレージデバイスのチャネルの数、各チャネルコントローラ312a〜eが機能的に接続されているフラッシュメモリチップに関する情報をホストに返すことができる。そのような情報は、FPGA 310上のEEPROM 116及び/又はデータストレージデバイス302のフラッシュボードのEEPROM 120aに格納されてもよい。構成検出エンジンは、EEPROM 116又はEEPROM 120aをポーリングして(たとえば、ホスト350のブートアップ作業の間)、データストレージデバイスにそのような情報をホスト350に返させるようにすることができる。もう1つの実施態様において、ホストは、フラッシュメモリチップ318をポーリングして、たとえばフラッシュメモリチップ318の数、各チップの(たとえば、バイトで測定された)サイズ、データストレージデバイスのチャネルの数、各チャネルコントローラ312a〜eが機能的に接続されているフラッシュメモリチップに関する情報を提供することができる。
【0061】
パーティションエンジン360は、フラッシュメモリチップ318の数、各フラッシュチップのサイズ、チャネルの数、及び各チャネルが機能的に接続されているメモリチップに関する情報を、メモリデバイス検出エンジン358から受信することができ、この情報に基づいて、パーティションエンジンは、データストレージデバイス302の第1のパーティション321及び第2のパーティション322を定義することができる。ホスト350で稼働しているパーティションエンジンは、メモリチップ318の第1のサブセットから取り出されたメモリブロックを含むように第1のパーティションを定義し、メモリチップ318の第2のサブセットから取り出されたメモリブロックを含むように第2のパーティションを定義することができ、第1のサブセットは第2のサブセットの個々のフラッシュチップを含むことはなく、第2のサブセットは第1のサブセットの個々のフラッシュチップを含むことはない。次いで、パーティションエンジン360は、物理メモリブロックアドレス(たとえば、一意のチャネル番号、一意のフラッシュメモリチップ番号、及びフラッシュメモリチップ内のブロックアドレスを含むこともある)を、ホスト350で稼働しているユーザスペースアプリケーションが、論理スペースアドレスを参照して、データストレージデバイス302からデータを読み取り、データストレージデバイス302にデータを書き込むことができるように、ユーザスペースで稼働しているアプリケーションプログラムによって使用されうる論理アドレスにマップすることができる。
【0062】
複数のパーティションのパーティション方式が定義されて、データがデータストレージデバイス100のフラッシュメモリチップに格納された後、デバイスは、デバイスが後にブートされるときに、ホストが使用するようパーティション方式をホスト106に伝達することができるように、たとえばメモリ116に、パーティション方式に関する情報を格納することができる。たとえば、デバイスは、デバイスのフラッシュメモリチップの数を含むデータストレージデバイスの物理構成に関する情報、及びどのフラッシュメモリチップ及びチャネルがメモリ116のどのパーティションに関連付けられているかを含むパーティション方式に関する情報を保持することができる。次いで、ホスト106及びデータストレージデバイス100を含むシステムがブートされるとき、ストレージデバイス100は、たとえばホスト106の構成検出エンジン358によって実行された読み取り操作に応答して、この情報をホスト106に伝達することができる。次いで、ホスト106のパーティションエンジン360は、ホストで稼働しているオペレーティングシステム及びアプリケーションのパーティションを定義することができる。たとえば、パーティションエンジン360は、ストレージデバイス100から読み取られた情報に基づいて第1及び第2のパーティションを定義することができ、ここで第1及び第2のパーティションは同じメモリチップを含むことはない。パーティションエンジン360はまた、ユーザレベルアプリケーションプログラムが次いでストレージデバイス100のフラッシュメモリチップの物理メモリアドレスにマップされる論理アドレスを使用することができるように、第1及び第2のパーティションの論理メモリから物理メモリへのマップを割り振ることもできる。
【0063】
パーティションエンジン360はまた、複数のフラッシュメモリチップの第3のサブセットを含むようにデータストレージデバイスの第1のパーティションを再定義するために使用されてもよく、第3のサブセットは第1のサブセットとは異なり、第3のサブセットは第2のサブセットのフラッシュメモリチップを含むことはなく、第2のサブセットは第3のサブセットのフラッシュメモリチップを含むことはない。たとえば、図3A及び図3Bを参照すると、ユーザは、図3Aに示される元のパーティション方式が自身の必要性を満たしてはいないと判断することができ、したがって、パーティション321及び322を再定義するため(たとえば、特定のパーティションにより多く又は少ないフラッシュメモリチップを含むように)、又は追加のパーティションを方式に追加するためにホストを使用することができる。1つの実施態様において、第1のパーティション321は、パーティション331及び333として再定義されてもよい。コントローラ310によって事前定義されるか、又はプリロード済みのパーティション方式をユーザに強制的に受け入れさせるのではなく、ユーザがホストを通じてパーティションを定義できるようにすることで、ユーザには所望のとおりパーティションを定義して、必要なときにパーティション方式を変更する柔軟性がもたらされる。もう1つの実施態様において、フラッシュメモリチップの1つ、たとえば318aの差し迫った障害が、ホストによって検出されることもあり、この情報に応答して、パーティションエンジンは、パーティションからフラッシュメモリチップ318aを除外するように、すなわちメモリチップ318aを除く当初定義された第1のパーティションのように、第1のパーティション321を再定義することができる。したがって、任意のパーティションの数が(ストレージデバイス100のフラッシュメモリチップ118a及び118bの数まで)定義されてもよく、パーティション方式内の異なるパーティションは、異なる数のフラッシュメモリチップを含むことができ、異なる量のメモリスペースを含むことができる。
【0064】
ホストはまた、カーネル364に存在し、データストレージデバイス302に書き込まれるべきデータに物理メモリアドレスを割り当てることができるアドレス割り当てエンジン366を含むこともできる。たとえば、ユーザスペース363で稼働しているアプリケーションは、データがホスト350からデータストレージデバイス302に書き込まれるよう要求することができ、ユーザスペースアプリケーションは、データが特定の論理メモリアドレスに書き込まれるよう指定することができる。アドレス割り当てエンジン366は、論理アドレスを、たとえばデータが書き込まれるべき特定のチャネル、データが書き込まれるべき指定されたチャネルに機能的に接続された特定のフラッシュメモリチップ、及びデータが書き込まれるべき指定されたメモリチップの特定の物理ブロックアドレスを含むことができる物理アドレスに変換することができる。そのような実施態様において、論理アドレスの物理メモリスペースアドレスへの変換は、FPGA 210のDRAMコントローラ254の役割が軽減されるか又は重要ではないように、アドレス割り当てエンジン366によって実行されてもよい。
【0065】
図4は、図1のデータストレージデバイスのパーティション化の例示のプロセス400を示す例示的な流れ図であり、ここでデバイスは複数のフラッシュメモリチップを含む。プロセス400は、データストレージデバイス内のフラッシュメモリチップの数を決定することを含むことができる(402)。たとえば、構成検出エンジンは、データストレージデバイス内のフラッシュメモリチップの数に関する情報を収集するために、データストレージデバイスにクエリを行うことができる。データストレージデバイスの第1のパーティションは、データストレージデバイスに結合されたホストを介して、定義されてもよく、第1のパーティションは複数のフラッシュメモリチップの第1のサブセットを含む(404)。データストレージデバイスの第2のパーティションは、ホストを介して定義されてもよく、第2のパーティションは複数のフラッシュメモリチップの第2のサブセットを含む(406)。このプロセスの結果として、第1のサブセットが第2のサブセットのフラッシュメモリチップを含むことはなく、第2のサブセットが第1のサブセットのフラッシュメモリチップを含まないことが保証される。
【0066】
オプションで、プロセス400は、第2のパーティションからのデータの読み取り中に、データを第1のパーティションに書き込むこと(408)を含むことができる。データストレージデバイス内のフラッシュメモリチップの数を決定することは、データストレージデバイス内のフラッシュメモリチップの数を指示する情報をデータストレージデバイスからホストに送信すること(410)を含むことができる。ホストからデータを書き込むデータストレージデバイス内のアドレス位置は、ホストにおいて定義されてもよく、アドレス位置は、データが複数のメモリチップのうちの特定の1つに書き込まれることを指定する(412)。
【0067】
データストレージデバイスが、ホストと複数のフラッシュメモリチップ間のデータの通信のための複数の物理チャネルを含み、各チャネルは異なる複数のメモリチップに機能的に接続される場合、プロセス400はさらに、物理チャネルの数を決定すること(414)と、チャネルの第1のサブセットを決定することであって、チャネルの第1のサブセットのチャネルは、メモリチップの第1のサブセットのメモリチップにのみ機能的に接続されること(416)と、チャネルの第2のサブセットを決定することであって、チャネルの第2のサブセットのチャネルは、メモリチップの第2のサブセットのメモリチップにのみ機能的に接続されること(418)と、ホストにおいて、ホストからデータを書き込むデータストレージデバイス内のアドレス位置を定義することであって、アドレス位置は、特定のチャネルを通じてデータが複数のメモリチップのうちの特定の1つに書き込まれることを指定すること(420)とを含むことができる。加えて、プロセス400は、データストレージデバイスに結合されたホストを介して、データストレージデバイスの第1のパーティションが複数のフラッシュメモリチップの第3のサブセットを含むように再定義すること(422)を含むことができる。
【0068】
図5は、複数のフラッシュメモリチップを含むデータストレージデバイスをパーティション化する例示的なプロセス500を示すもう1つの例示的な流れ図である。プロセス500は、データストレージデバイス内のフラッシュメモリチップの数を含む、データストレージデバイスの物理構成を読み取ること(502)を含むことができる。プロセスはまた、データストレージデバイスのパーティション化方式を読み取ること(504)を含むことができる。たとえば、構成検出エンジンは、データストレージデバイスのメモリ116から物理構成及びパーティション化方式を読み取ることができる。データストレージデバイスに結合されたホストは、データストレージデバイスの第1のパーティションを定義することができ、第1のパーティションは複数のフラッシュメモリチップの第1のサブセットを含み(506)、第1のパーティションの論理メモリから物理メモリへのマップが割り振られてもよい(508)。ホストは、データストレージデバイスの第2のパーティションを定義することができ、第2のパーティションは複数のフラッシュメモリチップの第2のサブセットを含み(510)、第1のサブセットは第2のサブセットのフラッシュメモリを含むことはなく、第2のサブセットは第1のサブセットのフラッシュメモリチップを含むことはなく、第2のパーティションの論理メモリから物理メモリへのマップが割り振られてもよい(512)。
【0069】
本明細書において説明されるさまざまな技法の実施態様は、デジタル電子回路において、又はコンピュータハードウェア、ファームウェア、ソフトウェア、若しくはその組み合わせで実施されてもよい。実施態様は、コンピュータプログラム製品として、すなわち、たとえばプログラム可能プロセッサ、コンピュータ、又は複数のコンピュータなどのデータ処理装置により実行するため、若しくはその動作を制御するための、たとえば機械可読ストレージデバイスなどの情報担体において実体的に具現されるコンピュータプログラムとして、実施されてもよい。上記で説明される(1つ以上の)コンピュータプログラムのような、コンピュータプログラムは、コンパイル済み又は解釈済みの言語を含む任意の形態のプログラミング言語で記述されてもよく、スタンドアロンのプログラムとして、又はモジュール、コンポーネント、サブルーチン、若しくはコンピューティング環境において使用に適した他のユニットとしてなど、任意の形態で配置されてもよい。コンピュータプログラムは、1つのサイトにおける1つのコンピュータ上、又は複数サイトに分散されて通信ネットワークにより相互接続された複数コンピュータ上で実行されるように配置されてもよい。
【0070】
方法ステップは、入力データを操作して出力を生成することにより機能を実行するようにコンピュータプログラムを実行している1つ以上のプログラム可能プロセッサによって実行されてもよい。たとえばFPGA又はASIC(特殊用途向け集積回路)などの特殊用途論理回路によって、方法ステップはまた実行されてもよく、装置は特殊用途論理回路として実施されてもよい。
【0071】
コンピュータプログラムの実行に適したプロセッサは、一例として、汎用及び特殊用途マイクロプロセッサ、及び任意の種類のデジタルコンピュータの1つ以上のプロセッサを含む。一般に、プロセッサは、読み取り専用メモリ又はランダムアクセスメモリ、若しくはその両方から命令及びデータを受信する。コンピュータの要素は、命令を実行するための少なくとも1つのプロセッサと、命令及びデータを格納するための1つ以上のメモリデバイスを含むことができる。一般に、コンピュータはまた、たとえば磁気、光磁気ディスク、又は光ディスクなど、データを格納するための1つ以上の大容量ストレージデバイスを含むことができるか、又は大容量ストレージデバイスとの間でデータを受信又は転送若しくはその両方を行うように機能的に結合されてもよい。コンピュータプログラム命令及びデータを具現するために適した情報担体は、一例として、たとえばEPROM、EEPROM、及びフラッシュメモリデバイスのような半導体メモリデバイス;たとえば内蔵ハードディスク又はリムーバブルディスクのような磁気ディスク;光磁気ディスク;並びにCD-ROM及びDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリを含む。プロセッサ及びメモリは、特殊用途論理回路によって補完されてもよいか、又は特殊用途論理回路に組み込まれてもよい。
【0072】
ユーザとの対話に備えるため、実施態様は、情報をユーザに表示するための、たとえばブラウン管(CRT)又は液晶ディスプレイ(LCD)モニタのような表示デバイス、並びにキーボード及び、たとえばマウス又はトラックボールのような、ユーザがコンピュータに入力を行うことができるポインティングデバイスを有するコンピュータで実施されてもよい。その他の種類のデバイスも、ユーザとの対話を行うために使用されてもよく;たとえば、ユーザに提供されるフィードバックは、たとえば視覚フィードバック、聴覚フィードバック、又は触覚フィードバックのような任意の形態の知覚的フィードバックであってもよく;ユーザからの入力は、音響、発語、又は触覚入力を含む任意の形態で受信されてもよい。
【0073】
実施態様は、たとえばデータサーバのようなバックエンドコンポーネントを含むか、又はたとえばアプリケーションサーバのようなミドルウェアコンポーネントを含むか、又はたとえばユーザが実施態様と対話することができるグラフィカルユーザインターフェイス又はWebブラウザを有するクライアントコンピュータのようなフロントエンドコンポーネントを含むか、若しくはそのようなバックエンド、ミドルウェア、又はフロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムにおいて実施されてもよい。コンポーネントは、たとえば通信ネットワークのようなデジタルデータ通信の任意の形態又は媒体によって相互接続されてもよい。通信ネットワークの例は、ローカルエリアネットワーク(LAN)、及びたとえばインターネットのようなワイドエリアネットワーク(WAN)を含む。
【0074】
説明された実施態様の特定の特徴が本明細書において説明されるように示されたが、当業者には多数の修正、代替、変更、及び等価が考案されよう。したがって、添付の特許請求の範囲は、すべてのそのような修正及び変更を、実施態様の範囲内に含まれるものとして扱うことが意図されていることを理解されたい。

【特許請求の範囲】
【請求項1】
複数のメモリチップ(118a、118b、218、318)を含むデータストレージデバイス(100、302)をパーティション化する方法であって、
該データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数を決定すること(402)と、
該データストレージデバイス(100、302)に結合されたホスト(106、350)を介して、該データストレージデバイス(100、302)の第1のパーティション(321、331)を定義すること(404)であって、該第1のパーティション(321、331)が複数のメモリチップ(118a、118b、218、318)の第1のサブセットを含むことと、
該データストレージデバイス(100、302)に結合されたホスト(106、350)を介して、該データストレージデバイス(100、302)の第2のパーティション(322、332)を定義すること(406)であって、該第2のパーティション(322、332)が該複数のメモリチップ(118a、118b、218、318)の第2のサブセットを含むこととを備え、
該第1のサブセットは、該第2のサブセットのメモリチップ(118a、118b、218、318)を含むことはなく、該第2のサブセットは、該第1のサブセットのメモリチップ(118a、118b、218、318)を含むことはない、前記方法。
【請求項2】
前記第2のパーティション(322、332)からのデータの読み取り中に、データを前記第1のパーティション(321、331)に書き込むこと
をさらに備える、請求項1記載の方法。
【請求項3】
前記データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数を決定することが、該データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の該数を指示する情報を該データストレージデバイス(100、302)から前記ホスト(106、350)に送信することを含む、請求項1又は2記載の方法。
【請求項4】
前記ホスト(106、350)において、該ホスト(106、350)からデータを書き込む前記データストレージデバイス(100、302)内のアドレス位置を定義すること(412)をさらに備え、該アドレス位置は、該データが前記複数のメモリチップ(118a、118b、218、318)のうちの特定の1つに書き込まれることを指定する、請求項1から3のいずれか記載の方法。
【請求項5】
前記データストレージデバイス(100、302)が、前記ホスト(106、350)と前記複数のメモリチップ(118a、118b、218、318)との間のデータの通信のための複数の物理チャネル(112)を含み、各チャネルが異なる複数のメモリチップ(118a、118b、218、318)に機能的に接続される、請求項1から4のいずれか記載の方法であって、
物理チャネル(112)の数を決定すること(414)と、
該チャネル(112)の第1のサブセットを決定すること(416)であって、該チャネル(112)の前記第1のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第1のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続されることと、
該チャネル(112)の第2のサブセットを決定すること(418)であって、該チャネル(112)の該第2のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第2のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続されることと、
該ホスト(106、350)において、該ホスト(106、350)からデータを書き込む該データストレージデバイス(100、302)内のアドレス位置を定義すること(420)とをさらに備え、該アドレス位置は、該データが特定のチャネルを通じて該複数のメモリチップ(118a、118b、218、318)のうちの特定の1つに書き込まれることを指定する、前記方法。
【請求項6】
前記第1のパーティション(321、331)が、単一のチャネルに機能的に接続されるメモリチップ(118a、118b、218、318)を含む、請求項1から5のいずれか記載の方法。
【請求項7】
前記データストレージデバイス(100、302)に結合された前記ホスト(106、350)を介して、前記複数のメモリチップ(118a、118b、218、318)の第3のサブセットを含むように該データストレージデバイス(100、302)の該第1のパーティション(321、331)を再定義すること(422)をさらに備え、
該第3のサブセットが前記第1のサブセットとは異なり、
該第3のサブセットは、前記第2のサブセットのメモリチップ(118a、118b、218、318)を含むことはなく、該第2のサブセットは、該第3のサブセットのメモリチップ(118a、118b、218、318)を含むことはない、請求項1から6のいずれか記載の方法。
【請求項8】
前記第1のサブセットの前記メモリチップ(118a、118b、218、318)の1つに障害が生じたか又は障害発生に近づきつつあることを示す指示を受信することをさらに備え、
前記第1のパーティション(321、331)を再定義すること(422)が、障害が生じたか又は障害発生に近づきつつある該メモリチップを除いた前記第3のサブセットをメモリチップ(118a、118b、218、318)の該第1のサブセットとして定義することを含む、請求項1から7のいずれか記載の方法。
【請求項9】
複数のメモリチップ(118a、118b、218、318)を含むデータストレージデバイス(100、302)と、
インターフェイスを介して該データストレージデバイス(100、302)に機能的に結合されたホスト(106、350)であって、
該データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数を検出するように構成された構成検出エンジン(358)と、
該データストレージデバイス(100、302)の第1のパーティション(321、331)を定義するように、及び該データストレージデバイス(100、302)の第2のパーティション(322、332)を定義するように構成され、該第1のパーティション(321、331)が該複数のメモリチップ(118a、118b、218、318)の第1のサブセットを含み、該第2のパーティション(322、332)が該複数のメモリチップ(118a、118b、218、318)の第2のサブセットを含む、パーティションエンジン(360)とを備え、
該第1のサブセットは、該第2のサブセットのメモリチップ(118a、118b、218、318)を含むことはなく、該第2のサブセットは、該第1のサブセットのメモリチップ(118a、118b、218、318)を含むことはない、前記ホスト(106、350)と
を備える装置。
【請求項10】
前記データストレージデバイス(100、302)が、前記ホスト(106、350)からコマンドを受信すると、該データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数を指示する情報を該データストレージデバイス(100、302)から該ホスト(106、350)に送信するように構成される、請求項9記載の装置。
【請求項11】
前記ホスト(106、350)が、前記データストレージデバイス(100、302)に書き込まれるデータにメモリアドレスを割り当てるように構成されたアドレス割り当てエンジン(366)をさらに備え、該割り当てられるメモリアドレスは、該データが前記複数のメモリチップ(118a、118b、218、318)のうちの特定の1つに書き込まれることを指定する、請求項9又は10のいずれか記載の装置。
【請求項12】
前記データストレージデバイス(100、302)が、前記ホスト(106、350)と前記複数のメモリチップ(118a、118b、218、318)との間のデータの通信のための複数の物理チャネル(112)を含み、各チャネルが異なる複数のメモリチップ(118a、118b、218、318)に機能的に接続され、
前記構成検出エンジン(358)が、該データストレージデバイス(100、302)内のチャネル(112)の数を検出するようにさらに構成され、
前記パーティションエンジン(360)が、該チャネル(112)の第1のサブセットを定義するようにさらに構成され、該チャネル(112)の該第1のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第1のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続され、
該パーティションエンジン(360)が、該チャネル(112)の第2のサブセットを定義するようにさらに構成され、該チャネル(112)の該第2のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第2のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続される、請求項9から11のいずれか記載の装置。
【請求項13】
前記ホスト(106、350)が、前記データストレージデバイス(100、302)に書き込まれるデータにメモリアドレスを割り当てるように構成されたアドレス割り当てエンジン(366)をさらに備え、該割り当てられるメモリアドレスは、該データが特定のチャネルを通じて前記複数のメモリチップ(118a、118b、218、318)の特定の1つに書き込まれることを指定する、請求項9から12のいずれか記載の装置。
【請求項14】
前記第1のパーティション(321、331)が、単一のチャネルに機能的に接続されるメモリチップ(118a、118b、218、318)を含む、請求項9から13のいずれか記載の装置。
【請求項15】
前記パーティションエンジン(360)が、前記複数のメモリチップ(118a、118b、218、318)の第3のサブセットを含むように前記データストレージデバイス(100、302)の該第1のパーティション(321、331)を再定義するようにさらに構成され、
該第3のサブセットが前記第1のサブセットとは異なり、
該第3のサブセットが、前記第2のサブセットのメモリチップ(118a、118b、218、318)を含むことはなく、該第2のサブセットは、該第3のサブセットのメモリチップ(118a、118b、218、318)を含むことはない、請求項9から14のいずれか記載の装置。
【請求項16】
前記パーティションエンジン(360)が、前記第1のサブセットの前記メモリチップ(118a、118b、218、318)の1つに障害が生じたか又は障害発生に近づきつつあることを示す指示を受信するようにさらに構成され、
該複数のメモリチップ(118a、118b、218、318)の前記第3のサブセットを含むように前記第1のパーティション(321、331)を再定義することが、障害が生じたか又は障害発生に近づきつつある該メモリチップを除いた前記第3のサブセットをメモリチップ(118a、118b、218、318)の該第1のサブセットとして定義することを含む、請求項15記載の装置。
【請求項17】
複数のメモリチップ(118a、118b、218、318)を含むデータストレージデバイス(100、302)をパーティション化する方法であって、
該データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数を含む、該データストレージデバイス(100、302)内の物理構成を読み込むこと(502)と、
該データストレージデバイス(100、302)のパーティション化方式を読み取ること(504)と、
該データストレージデバイス(100、302)に結合されたホスト(106、350)を介して、該データストレージデバイス(100、302)の第1のパーティション(321、331)を定義すること(506)であって、該第1のパーティション(321、331)が該複数のメモリチップ(118a、118b、218、318)の第1のサブセットを含むことと、
該第1のパーティション(321、331)に論理メモリから物理メモリへのマップを割り振ること(508)と、
該データストレージデバイス(100、302)に結合された該ホスト(106、350)を介して、該データストレージデバイス(100、302)の第2のパーティション(322、332)を定義すること(510)であって、該第2のパーティション(322、332)が該複数のメモリチップ(118a、118b、218、322)の第2のサブセットを含むことと、
該第1のパーティション(321、331)に論理メモリから物理メモリへのマップを割り振ること(512)とを備え、
該第1のサブセットは、該第2のサブセットのメモリチップ(118a、118b、218、318)を含むことはなく、該第2のサブセットは、該第1のサブセットのメモリチップ(118a、118b、218、318)を含むことはない、前記方法。
【請求項18】
前記第2のパーティション(322、332)からのデータの読み取り中に、データを前記第1のパーティション(321、331)に書き込むことをさらに備える、請求項17記載の方法。
【請求項19】
前記データストレージデバイス(100、302)が、前記ホスト(106、350)と前記複数のメモリチップ(118a、118b、218、318)との間のデータの通信のための複数の物理チャネル(112)を含み、各チャネルが異なる該複数のメモリチップ(118a、118b、218、318)に機能的に接続され、該データストレージデバイス(100、302)の前記物理構成が、該データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数をさらに含む、請求項17又は18記載の方法であって、
該チャネル(112)の第1のサブセットを決定することであって、該チャネル(112)の前記第1のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第1のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続されることと、
該チャネル(112)の第2のサブセットを決定することであって、該チャネル(112)の前記第2のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第2のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続されることと、
該ホスト(106、350)において、該ホスト(106、350)からデータを書き込む該データストレージデバイス(100、302)内のアドレス位置を定義することであって、該アドレス位置が、該データが特定のチャネルを通じて該複数のメモリチップ(118a、118b、218、318)のうちの特定の1つに書き込まれることを指定することとをさらに備える、前記方法。
【請求項20】
複数のメモリチップ(118a、118b、218、318)を含むデータストレージデバイス(100、302)と、
インターフェイスを介して該データストレージデバイス(100、302)に機能的に結合されたホスト(106、350)であって、
該データストレージデバイス(100、302)内のメモリチップ(118a、118b、218、318)の数を含む該データストレージデバイス(100、302)の物理構成を読み取るように構成され、かつ該データストレージデバイス(100、302)のパーティション化方式を読み取るように構成された構成検出エンジン(358)と、
該データストレージデバイス(100、302)の第1のパーティション(321、331)を定義するように、及び該データストレージデバイス(100、302)の第2のパーティション(322、332)を定義するように構成され、該第1のパーティション(321、331)が該複数のメモリチップ(118a、118b、218、318)の第1のサブセットを含み、該第2のパーティション(322、332)が該複数のメモリチップ(118a、118b、218、318)の第2のサブセットを含む、パーティションエンジン(360)であって、該第1のパーティション(321、331)に論理メモリから物理メモリへのマップを割り振り、かつ該第2のパーティション(322、332)に論理メモリから物理メモリへのマップを割り振るように構成された、前記パーティションエンジン(360)とを備え、
該第1のサブセットは、該第2のサブセットのメモリチップ(118a、118b、218、318)を含むことはなく、該第2のサブセットは、該第1のサブセットのメモリチップ(118a、118b、218、318)を含むことはない、前記ホスト(106、350)と
を備える、装置。
【請求項21】
前記データストレージデバイス(100、302)が、前記ホスト(106、350)からコマンドを受信すると、該データストレージデバイス(100、302)の前記物理構成を指示する情報を該データストレージデバイス(100、302)から該ホスト(106、350)に送信するように構成される、請求項20記載の装置。
【請求項22】
前記データストレージデバイス(100、302)が、前記ホスト(106、350)と前記複数のメモリチップ(118a、118b、218、318)との間のデータの通信のための複数の物理チャネル(112)を含み、各チャネルが異なる複数の該メモリチップ(118a、118b、218、318)に機能的に接続され、
該データストレージデバイス(100、302)の前記物理構成が、該データストレージデバイス(100、302)内のチャネル(112)の数をさらに含み、
前記パーティションエンジン(360)が、該チャネル(112)の第1のサブセットを定義するようにさらに構成され、該チャネル(112)の該第1のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第1のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続され、
該パーティションエンジン(360)が、該チャネル(112)の第2のサブセットを定義するようにさらに構成され、該チャネル(112)の該第2のサブセットのチャネル(112)が、メモリチップ(118a、118b、218、318)の該第2のサブセットのメモリチップ(118a、118b、218、318)のみに機能的に接続される、請求項20又は21記載の装置。
【請求項23】
前記第1のパーティション(321、331)が、単一のチャネルに機能的に接続されるメモリチップ(118a、118b、218、318)を含む、請求項21又は22記載の装置。

【図1】
image rotate

【図2】
image rotate

【図3A】
image rotate

【図3B】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2012−523623(P2012−523623A)
【公表日】平成24年10月4日(2012.10.4)
【国際特許分類】
【出願番号】特願2012−504741(P2012−504741)
【出願日】平成22年4月5日(2010.4.5)
【国際出願番号】PCT/US2010/029917
【国際公開番号】WO2010/117929
【国際公開日】平成22年10月14日(2010.10.14)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
2.WINDOWS
【出願人】(502208397)グーグル インコーポレイテッド (161)
【Fターム(参考)】