説明

データストレージデバイスのコマンド及び割り込みのグループ化

データストレージデバイスは、複数のメモリチップと、メモリチップに機能的に結合されるコントローラとを含むことができ、コントローラは、ホストからコマンドのグループを受信することであって、グループ内の各々のコマンドがグループの一部としてコマンドを識別するために同じグループ番号を含むことと、メモリチップを使用してコマンドのグループを処理することと、コマンドのグループが処理を完了すると、単一割り込みを生成してホストに送信することとを行うように配置され構成される。

【発明の詳細な説明】
【技術分野】
【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】
データストレージデバイスでのコマンド実行のスループットは、データストレージデバイスによって処理されうるコマンドの数に関連することもある。データストレージデバイスによって処理されうるコマンドの数を増大させることにより、データストレージデバイスの高いスループットを達成することが望ましいと考えられる。コマンドを迅速に実行することに加えて、データエラーが最小化されるように、及び/又は少なくともデータスループットに及ぼす影響を最小限に抑えてデータが訂正可能であるように、コマンドを正確に実行することが望ましいと考えられる。
【0005】
さらに、ホストへの影響及びオーバーヘッドを最小化しながら、データストレージデバイスでホストから受信されたコマンドを実行することが望ましいと考えられる。
【発明の概要】
【課題を解決するための手段】
【0006】
(要旨)
本文書は、コマンドをデータストレージデバイスにより処理するためのグループの一部として指定するドライバを有するホストを説明する。データストレージデバイスがグループ内のすべてのコマンドの処理を完了すると、データストレージデバイスは、単一割り込みをホストに返信して、コマンドのグループの処理が完了したことを指示する。たとえば、コマンドの1つ以上のスレッドは、ドライバによってグループとして指定されてもよい。データストレージデバイスがコマンドの1つ以上のスレッドを完了すると、データストレージデバイスは、単一割り込みを生成してホストに送信し、それらのグループ化されたコマンドの処理が完了したことを指示する。
【0007】
コマンドをグループの一部として指定し、コマンドの処理が完了したときに、ホストに単一割り込みを送信することにより、ホストへの影響は最小化することができる。このように、ホストは、割り込みの処理に要する時間を短縮することができ、他のタスクを実行することにより多くの時間を振り向けることができる。さらに、場合によっては、ホストは、グループ内のコマンドがすべて処理されるまで、データを使用することができないこともある。そのような場合、グループ内のコマンドがすべて処理されているのでなければ、通知を受けることがホストにとって有益ではないこともある。
【0008】
1つの例示的な実施態様において、ホストにおいてドライバは、コマンドをグループ化する方法を決定することができる。ドライバは、特定の基準に基づいてコマンドをグループ化することができる。たとえば、ドライバは、ドライバとインターフェイスをとるアプリケーションからの望ましいアクションのサイズに基づいて、コマンドをグループ化することができる。このように、ドライバは、インターフェイスをとるアプリケーションからの大容量の入出力要求の一部であるコマンドをグループ化してまとめることができる。したがって、オペレーティングシステムが、要求を実行するために大容量の入出力要求を複数のコマンドに分割する場合であっても、ドライバはコマンドをグループ化する。もう1つの例において、ドライバは、コマンドが同じ1つ以上のスレッドの一部であることに基づいて、コマンドをグループ化することができる。
【0009】
データストレージデバイスは、複数のメモリデバイス及びコントローラを含むことができる。コントローラは、ホストからコマンドを受信し、複数のメモリデバイスを使用してコマンドを処理するように構成されてもよい。コントローラが、グループの一部であると識別されるコマンドをホストから受信すると、コントローラは、メモリデバイスを使用してそれらのコマンドを処理することができ、グループ内のすべてのコマンドが処理された場合に限り、単一割り込みを生成してホストに返信することができる。このように、割り込みは、グループ内のコマンドごと、又はグループ内のコマンドのサブセットごとに生成されることはない。代わりに、単一割り込みが、コマンドのグループ全体に対して生成される。
【0010】
コントローラは、グループ化されたコマンドを追跡するように配置され構成される割り込みプロセッサを含むことができる。複数のグループからのコマンドが、メモリデバイスを使用してコントローラによって処理されているので、割り込みプロセッサは、コマンドの複数のグループを追跡するように構成されてもよい。1つの例示的な実施態様において、コマンドはコマンドヘッダを含み、グループ番号は、コマンドが割り込みプロセッサによって追跡されうるように、ドライバによってコマンドヘッダに挿入される。コマンドヘッダはフラグも含み、フラグは、コマンドがグループ内の最後のコマンドであることを指示するためにドライバによって設定されてもよい。割り込みプロセッサは、最後のコマンドフラグを認識するように構成されてもよく、このフラグは、コマンドが処理を完了したときに単一割り込みを生成するインジケータとしての機能を果たすことができる。
【0011】
1つの例示的な実施態様において、コントローラは、データストレージデバイスで実行できるよう、ホストからのコマンドを追跡、順序付け、キューイング、及び処理するためのコマンドプロセッサを含むことができる。コマンドプロセッサは、グローバルスロット識別子を各々のコマンドに割り当てることによりホストからの着信コマンドを追跡し、コマンドの経過時間に基づく番号付きリストを使用してコマンドをキューに入れて順序付けるように配置され構成されてもよい。コマンドプロセッサは、同じストレージ位置に指定されているコマンドについてホストから受信されたコマンドの順序を保持するように構成されてもよい。コマンドプロセッサはまた、異なるストレージ位置に指定されているコマンドに対して、コマンドを順不同に扱うように構成されてもよい。このように、順序を保持することが重要である場合、コマンドの順序は、ホストから受信されたとおりに保持される。同時に、コマンドプロセッサは、異なるストレージ位置に指定されているコマンドについて順不同に扱うことにより、すべてのストレージ位置を実質的にビジー状態にする。コマンドプロセッサは、実質的にすべてのストレージ位置がコマンドキューに指定されているコマンドを有することにより、コマンドの並列処理を可能にする。
【0012】
コマンドプロセッサが、個々のコマンドのすべてを、処理中に追跡する間、割り込みプロセッサは、コマンドのグループの一部であるコマンドを追跡することができる。このように、コントローラは、コマンドのグループの一部であるコマンドを含むコマンドを不連続の方式で処理することができる。割り込みプロセッサは、グループ内のすべてのコマンドが処理されるまで待機し、その後単一割り込みを生成してホストに送信する。これは、コマンドプロセッサがコマンドの並列処理を続行できるようにし、同時に、データストレージデバイスから送信されていた可能性もある不必要な割り込みの処理にホストが費やすオーバーヘッド及び時間を軽減する。
【0013】
1つの例示的な実施態様において、データストレージデバイスは、1つ以上のメモリチップに関連付けられている操作を制御するように配置され構成される複数のチャネルコントローラを含むことができる。メモリチップは、フラッシュメモリチップを含むことができる。
【0014】
1つの例示的な実施態様において、コマンドプロセッサ、割り込みプロセッサ、及びチャネルコントローラは、フィールドプログラマブルゲートアレイ(field programmable gate array)(FPGA)コントローラの一部として実施されてもよく、FPGAコントローラはデータストレージデバイスの一部であってもよい。
【0015】
データストレージデバイスは、1つ以上のメモリボードを含むことができ、各々のメモリボードは複数のメモリデバイスを含む。1つの例示的な実施態様において、各々のメモリボードは複数のフラッシュメモリチップを含むことができる。メモリボードは、複数のチャネルを含むことができ、1つ以上のフラッシュメモリチップは各々のチャネルに割り当てられてもよい。データストレージデバイスは、メモリボードが機能的に接続するコントローラボードを含むことができる。データストレージデバイスは、インターフェイスを使用してホストと通信し、ホストからコマンドを受信して、それらのコマンドをフラッシュメモリチップを使用して処理するように構成されてもよい。たとえば、フラッシュメモリチップを使用してデータのブロックの読み取り、書き込み、コピー、及び削除を行うコマンドを、ホストは送信することができ、コントローラボードは受信することができる。
【0016】
1つの例示的な実施態様において、コントローラは、フィールドプログラマブルゲートアレイ(field-programmable gate array) (FPGA)コントローラを含み、ホストとコントローラボードとの間のインターフェイスは、たとえばピーシーアイエクスプレス(Peripheral Component Interconnect Express) (PCIe)インターフェイスのような高速インターフェイスであってもよい。このように、データストレージデバイスは、高ストレージボリュームを含むことができ、ホストとフラッシュメモリチップ間の高パフォーマンス及び高速のデータ転送を達成するように構成されてもよい。
【0017】
1つの例示的な実施態様において、データストレージデバイスは、メモリボードが各々複数のフラッシュメモリチップを含む2つのメモリボードで構成されてもよい。コントローラボード及び2つのメモリボードを含むデータストレージデバイスは、データストレージデバイスがコンピューティングデバイスの内蔵ドライブスロットに適合するように、ディスクドライブの形態で構成されてもよい。たとえば、データストレージデバイスは、サーバのデータストレージ容量をもたらすためにサーバの内蔵ドライブスロットに適合するように構成されてもよい。データストレージデバイスは、コンピューティングデバイスから容易に取り外すことができ、別のコンピューティングデバイスの内蔵ドライブスロットに挿入できるように、取り外し可能に構成されてもよい。
【0018】
その他の例示的な実施態様において、各々のメモリボードは、フラッシュメモリチップ以外のメモリデバイスを含むことができる。たとえば、各々のメモリボードは、複数のダイナミックランダムアクセスメモリ(dynamic random access memory)(DRAM)チップを含むことができる。フラッシュメモリチップに関する上記の説明と同様に、コマンドプロセッサ及び割り込みプロセッサは、ホストから受信されたコマンドをグループとして処理し、コマンドがDRAMチップを使用して処理されると、単一割り込みを生成してホストに返信するように構成されてもよい。その他の例示的な実施態様において、メモリボードは、たとえば相変化メモリ(phase change memory)(PCM)チップ及びその他のタイプのメモリデバイスを含む、その他のタイプのメモリデバイスを含むことができる。
【0019】
1つの一般的な態様によれば、データストレージデバイスは、複数のメモリチップと、メモリチップに機能的に結合されるコントローラとを含むことができ、コントローラは、ホストからコマンドのグループを受信することであって、グループ内の各々のコマンドがグループの一部としてコマンドを識別するために同じグループ番号を含むことと、メモリチップを使用してコマンドのグループを処理することと、コマンドのグループが処理を完了すると、単一割り込みを生成してホストに送信することとを行うように配置され構成される。
【0020】
実施態様は、1つ以上の以下の特徴を含むことができる。たとえば、コントローラは、ホストからコマンドの複数のグループを受信することであって、各々のコマンドがグループの1つの一部としてコマンドを識別するためにグループ番号を含むことと、メモリチップを使用してコマンドのグループを処理することと、コマンドの各々のグループが処理を完了すると、単一割り込みを生成して各々のグループのホストに送信することとを行うように構成されてもよい。コントローラは、メモリチップを使用して不連続の順序でコマンドのグループを処理するように構成されてもよい。
【0021】
各々のコマンドはコマンドヘッダを含むことができ、コマンドヘッダはグループ番号を含む。コマンドのグループ内の最後のコマンドは、コントローラに最後のコマンドを指示するためのフラグをコマンドヘッダに含むことができる。グループ番号は、グループ内の次のコマンドを指し示すためにコマンドのポインタを使用することなく、各々のコマンドをグループの一部として識別することができる。
【0022】
コントローラは、コマンドがコントローラによって処理されるときにコマンドのグループを追跡し、コマンドのグループが処理を完了すると、単一割り込みを生成してホストに送信するように配置され構成される割り込みプロセッサを含むことができる。割り込みプロセッサは、複数のカウンタを含むことができ、各々のカウンタはコントローラによって受信されるコマンドの異なるグループに割り当てられる。割り込みプロセッサは、複数の異なる割り込み機構を含むことができる。同時に2つ以上の割り込み機構が有効にされてもよい。割り込み機構は、電子透かし割り込み機構、タイムアウト割り込み機構、及びグループ割り込み機構を含むことができる。
【0023】
1つの例示的な実施態様において、メモリチップはフラッシュメモリチップであってもよく、コントローラはフィールドプログラマブルゲートアレイ(field programmable gate array)(FPGA)コントローラであってもよい。データストレージデバイスは、メモリボードであって、その上でフラッシュメモリチップが複数のチャネルに配置され構成されてもよく、各々のチャネルが1つ以上のフラッシュメモリチップに関連付けられている、メモリボードと、メモリボードに機能的に接続されるコントローラボードとを備える。コントローラボードは、高速インターフェイスと、高速インターフェイスを使用してホストからコマンドを受信するように配置され構成されるコントローラとを含むことができる。
【0024】
もう1つの一般的な態様において、複数のメモリチップを有するデータストレージデバイスでコマンドのグループを処理するための方法は、ホストからコマンドのグループを受信することであって、グループ内の各々のコマンドがグループの一部としてコマンドを識別するために同じグループ番号を含むことと、複数のメモリチップを使用してコマンドのグループを処理することと、コマンドのグループが処理を完了すると、単一割り込みを生成してホストに送信することとを含むことができる。
【0025】
実施態様は、1つ以上の以下の特徴を含むことができる。たとえば、ホストからコマンドのグループを受信することは、ホストからコマンドの複数のグループを受信することを含むことができ、各々のコマンドはグループの1つの一部としてコマンドを識別するためにグループ番号を含み、コマンドのグループを処理することは、メモリチップを使用してコマンドのグループを処理することを含むことができ、単一割り込みを生成して送信することは、各々のグループが処理を完了すると、単一割り込みを生成して各々のグループのホストに送信することを含むことができる。コマンドのグループを処理することは、メモリチップを使用してコマンドのグループを不連続の順序で処理することを含むことができる。
【0026】
もう1つの一般的な態様において、コントローラにおいてコマンドを追跡するための装置は、複数のグループカウンタであって、各々のグループカウンタは、コントローラによりグループ内のコマンドが処理を開始するとインクリメントし、グループ内のコマンドが処理を終了するとデクリメントすることによって、コントローラにより処理されているコマンドのグループを追跡するように構成される、グループカウンタと、グループカウンタに機能的に結合され、グループ内のすべてのコマンドが処理を完了すると、各々のグループカウンタの単一割り込みを生成して送信するように配置され構成される割り込み送信論理とを含むことができる。
【0027】
実施態様は、1つ以上の以下の特徴を含むことができる。たとえば、同じグループ内の各々のコマンドは、同じグループ番号により識別されてもよい。複数のグループカウンタは、グループカウンタによって追跡されているコマンドが処理を開始すると、グループカウンタの1つをインクリメントする信号を受信するように構成されてもよい。複数のグループカウンタは、グループカウンタによって追跡されているコマンドが処理を完了すると、グループカウンタの1つをデクリメントする信号を受信するように構成されてもよい。割り込み送信論理は、グループ内の最後のコマンドが処理を開始して、最終コマンドに関連付けられているグループカウンタがゼロにデクリメントされると、単一割り込みを生成して送信するように構成されてもよい。
【0028】
もう1つの一般的な態様において、コントローラにおいてコマンドを追跡するための方法は、コマンドのグループ内のコマンドが処理を開始すると、グループカウンタをインクリメントすることと、コマンドのグループ内のコマンドが処理を完了すると、グループカウンタをデクリメントすることと、グループ内のすべてのコマンドが処理を完了すると、コマンドのグループの単一割り込みを生成して送信することとを含むことができる。
【0029】
実施態様は、1つ以上の以下の特徴を含むことができる。たとえば、単一割り込みを生成して送信することは、グループ内の最後のコマンドが処理を開始し、グループカウンタがゼロにデクリメントされると、単一割り込みを生成して送信することを含むことができる。
【0030】
もう1つの一般的な態様において、システムは、複数のメモリチップと、ホストと複数のメモリチップ間のデータの通信のための複数の物理チャネルとを含むデータストレージデバイスであって、各チャネルが異なる複数のメモリチップに機能的に接続される、データストレージデバイスと、インターフェイスを使用してデータストレージデバイスに機能的に結合されたホストとを含むことができる。ホストは、複数のメモリチップを使用してデータストレージデバイスにより処理するためにコマンドをデータストレージデバイスに送信し、コマンドを1つ以上の異なるグループにグループ化して、グループ内の各々のコマンドにグループ番号を割り当て、グループ内の最後のコマンドにマークを付けるように構成されるドライバを含むことができる。
【0031】
実施態様は、1つ以上の以下の特徴を含むことができる。たとえば、データストレージデバイスは、グループ内のコマンドを処理した後、単一割り込みを生成してホストに送信するように構成されてもよい。複数のメモリチップは、フラッシュメモリチップを含むことができる。ドライバは、グループ番号の使用を追跡するように構成されてもよい。データストレージデバイスは、複数のメモリチップを使用して不連続の順序でコマンドのグループを処理するように構成されてもよい。
【0032】
ホストは、データストレージデバイスで1つ以上の割り込み機構を有効にするように構成されてもよい。割り込み機構は、電子透かし割り込み機構、タイムアウト割り込み機構、及びグループ割り込み機構を含むことができる。
【0033】
1つ以上の実施態様の詳細は、添付の図面及び以下の説明において示される。その他の特徴は、説明及び図面、並びに特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【0034】
【図1】ホスト及びデータストレージデバイスを示す例示的なブロック図である。
【0035】
【図2】割り込みプロセッサを示す例示的なブロック図である。
【0036】
【図3】データストレージデバイスのコマンドプロセッサを示す例示的なブロック図である。
【0037】
【図4】処理中のコマンドモジュールを示す例示的なブロック図である。
【0038】
【図5】データストレージデバイスのプリント基板を示す例示的な透視ブロック図である。
【0039】
【図6】図1のデータストレージデバイスと共に使用する例示的なコンピューティングデバイスを示す例示的なブロック図である。
【0040】
【図7】データストレージデバイスでコマンドのグループを処理するためのプロセスを示す例示的な流れ図である。
【0041】
【図8】コントローラにおいてコマンドを追跡するためのプロセスを示す例示的な流れ図である。
【発明を実施するための形態】
【0042】
(詳細な説明)
本文書は、ホストにおいてコマンドをグループ化し、データストレージでコマンドを処理するための装置、システム、及び技法を説明する。ホストは、どのコマンドをグループにまとめるかを決定することができ、どのコマンドが同じグループにあるかを指示することができる。たとえば、ホストは、グループの一部である各コマンドのコマンドヘッダに、グループ番号を割り当てて挿入することができる。データストレージデバイスは、ホストによってグループにまとめられているコマンドの処理を追跡するように構成される割り込みプロセッサを有するコントローラを含むことができる。データストレージデバイスがグループ内のすべてのコマンドの処理を完了すると、割り込みプロセッサは、単一割り込みを生成してホストに返信し、コマンドのグループの処理が完了したことを指示する。
【0043】
図1を参照すると、グループ内のコマンドを処理して追跡するためのシステムを示すブロック図が示される。図1は、データストレージデバイス100及びホスト106を示すブロック図である。データストレージデバイス100は、コントローラボード102及び1つ以上のメモリボード104a及び104bを含むことができる。データストレージデバイス100は、インターフェイス108を介してホスト106と通信することができる。インターフェイス108は、ホスト106とコントローラボード102の間にあってもよい。
【0044】
コントローラボード102は、コントローラ110、DRAM111、複数のチャネル112、電源モジュール114、及びメモリモジュール116を含むことができる。コントローラ110は、コマンドプロセッサ122、及び割り込みプロセッサ124、並びに図示されていないその他のコンポーネントを含むことができる。メモリボード104a及び104bは、各メモリボード上に複数のフラッシュメモリチップ118a及び118bを含むことができる。メモリボード104a及び104bはまた、それぞれメモリデバイス120a及び120bを含むことができる。
【0045】
ホスト106は、ドライバ107、オペレーティングシステム109、及び1つ以上のアプリケーション113を含むことができる。一般に、ホスト106は、データストレージデバイス100で実行されるコマンドを生成することができる。たとえば、アプリケーション113は、データストレージデバイス100で実行するためのコマンドを生成するように構成されてもよい。アプリケーション113は、オペレーティングシステム109及び/又はドライバ107に機能的に結合されてもよい。アプリケーション113は、コマンドを生成して、オペレーティングシステム109にコマンドを伝達することができる。オペレーティングシステム109は、ドライバ107に機能的に接続されてもよく、ドライバ107は、ホスト106とデータストレージデバイス100との間のインターフェイスとして機能することができる。
【0046】
一般に、データストレージデバイス100は、フラッシュメモリチップ118a及び118b上にデータを格納するように構成されてもよい。ホスト106は、フラッシュメモリチップ118a及び118bとの間でデータの書き込み及び読み取りを行うことができ、さらにフラッシュメモリチップ118a及び118bに関してその他の操作を実行させるようにすることができる。ホスト106とフラッシュメモリチップ118a及び118bとの間のデータの読み取り及び書き込み、並びにその他の操作は、コントローラボード102上のコントローラ110を通じて処理され、制御されてもよい。コントローラ110は、ホスト106からコマンドを受信して、コマンドプロセッサ122並びにメモリボード104a及び104b上のフラッシュメモリチップ118a及び118bを使用してそれらのコマンドを実行させることができる。ホスト106とコントローラ110との間の通信は、インターフェイス108を通じて行われてもよい。コントローラ110は、チャネル112を使用して、フラッシュメモリチップ118a及び118bと通信することができる。
【0047】
コントローラボード102は、DRAM 111を含むことができる。DRAM 111は、コントローラ110に機能的に結合されてもよく、情報を格納するために使用されてもよい。たとえば、DRAM 111は、論理アドレスから物理アドレスへのマップ及び不良ブロックの情報を格納するために使用されてもよい。DRAM 111はまた、ホスト106とフラッシュメモリチップ118a及び118bとの間のバッファとして機能するように構成されてもよい。
【0048】
1つの例示的な実施態様において、コントローラボード102及び各々のメモリボード104a及び104bは、物理的に別個のプリント基板(PCB)である。メモリボード104aは、コントローラボード102のPCBに機能的に接続されている1つのPCB上にあってもよい。たとえば、メモリボード104aは、コントローラボード102に物理的及び/又は電気的に接続されてもよい。同様に、メモリボード104bは、メモリボード104aから分離されたPCBでもよく、コントローラボード102のPCBに機能的に接続されてもよい。たとえば、メモリボード104bは、コントローラボード102に物理的及び/又は電気的に接続されてもよい。メモリボード104a及び104bは各々、コントローラボード102から別個に切断されて取り外し可能であってもよい。たとえば、メモリボード104aは、コントローラボード102から切断されて、別のメモリボード(図示せず)に置き換えられてもよく、その別のメモリボードはコントローラボード102に機能的に接続される。この例において、メモリボード104a及び104bのいずれか又は両方は、他のメモリボードが同じコントローラボード102及びコントローラ110で動作できるように、他のメモリボードでスワップアウトされてもよい。
【0049】
1つの例示的な実施態様において、コントローラボード102及び各々のメモリボード104a及び104bは、ディスクドライブフォームファクタで物理的に接続されてもよい。ディスクドライブフォームファクタは、たとえば3.5”ディスクドライブフォームファクタ及び2.5”ディスクドライブフォームファクタのような、さまざまなサイズを含むことができる。
【0050】
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コネクタの変種が使用されてもよい。その他のタイプの電気接続手段が使用されてもよい。
【0051】
1つの例示的な実施態様において、メモリチップ118a〜118nは、フラッシュメモリチップを含むことができる。もう1つの例示的な実施態様において、メモリチップ118a〜118nは、DRAMチップ、又はフラッシュメモリチップとDRAMチップの組み合わせを含むことができる。メモリチップ118a〜118nは、その他のタイプのメモリチップを含むこともできる。
【0052】
1つの例示的な実施態様において、ドライバ107及びデータストレージデバイス100を使用するホスト106は、ホストメモリ内のバッファのペアを使用してコマンド及び応答を伝達することができる。「バッファ」及び「キュー」という用語は、本文書全体を通じて同義的に使用される。たとえば、コマンドバッファ119は、コマンドに対して使用されてもよく、応答バッファ123はコマンドの応答又は結果に対して使用されてもよい。1つの例示的な実施態様において、コマンド及び結果は、比較的小さい、固定サイズのブロックであってもよい。たとえば、コマンドは32バイトであってもよく、結果又は応答は8バイトであってもよい。その他の例示的な実施態様において、可変サイズのブロックを含むその他のサイズのブロックが使用されてもよい。タグは、結果をコマンドと適合させるために使用されてもよい。このように、データストレージデバイス100は、順不同でコマンドを完了することができる。
【0053】
図1では1つのコマンドバッファ119及び1つの応答バッファ123を示しているが、複数ペアのバッファが使用されてもよい。たとえば、最大32個までのバッファペアが使用されてもよい。1つの例示的な実施態様において、データストレージデバイス100は、ラウンドロビン形式でコマンドバッファ119にサービスを提供し、データストレージデバイス100は一度に固定数のコマンドをコマンドバッファ119から取り出すことができる。応答バッファ123は、各自の割り込み及び割り込みパラメータを含むことができる。
【0054】
1つの例示的な実施態様において、各コマンドは、コマンドに応じて1つのメモリページ(たとえば、1つのフラッシュページ)、1つの消去ブロック、又は1つのメモリチップを参照することができる。データを転送する各コマンドは、1つの4Kのダイレクトメモリアクセス(direct memory access)(DMA)バッファを含むことができる。さらに大容量の操作は、複数のコマンドを送信することによって実施されてもよい。ドライバ107は、複数のグループ化されたコマンドが処理された場合、データストレージデバイス100がフラッシュメモリチップ118a及び118bを使用してコマンドを処理して単一割り込みを生成してホスト106に返信するように、複数コマンドの単一操作をグループ化するように配置され構成されてもよい。
【0055】
1つの例示的な実施態様において、コマンドバッファ119及び応答バッファ123は各々、ヘッドポインタ及びテールポインタを含む。コマンド及び応答は、テールポインタにおいて挿入され、ヘッドポインタにおいて除去されてもよい。ホスト106は、コマンドバッファ119の製造者であり、応答バッファ123の消費者であってもよい。データストレージデバイス100は、コマンドバッファ119の消費者であり、応答バッファ123の製造者であってもよい。ホスト106は、コマンドテールポインタ及び応答ヘッドポインタを書き込むことができ、コマンドヘッドポインタ及び応答テールポインタを読み取ることができる。データストレージデバイス100は、コマンドヘッドポインタ及び応答テールポインタを書き込むことができ、コマンドテールポインタ及び応答ヘッドポインタを読み取ることができる。データストレージデバイス100において、コントローラ110は読み取り及び書き込みアクションを実行することができる。さらに具体的には、コマンドプロセッサ122は、データストレージデバイス100に対して読み取り及び書き込みアクションを実行するように構成されてもよい。ヘッド及びテールポインタ以外の他の同期化が、ホスト106とデータストレージデバイス100との間で必要になることはない。
【0056】
1つの例示的な実施態様において、パフォーマンス上の理由から、コマンドヘッドポインタ及び応答テールポインタは、ホスト106(たとえば、ホストRAM)に格納されてもよい。コマンドテールポインタ及び応答ヘッドポインタは、コントローラ110内のメモリマップI/Oスペースのデータストレージデバイス100に格納されてもよい。
【0057】
コマンドバッファ119及び応答バッファ123は、コマンド又は応答サイズの任意の倍数であってもよく、ドライバ107及びデータストレージデバイス100は、コマンドバッファ119及び応答バッファ123をオーバーランしないことを前提として、必要に応じてコマンド及び結果を自由に記入して処理することができる。1つの実施態様において、コマンドバッファ119及び応答バッファ123は循環バッファであり、ホスト106とデータストレージデバイス100との間のフロー制御を可能にする。
【0058】
1つの例示的な実施態様において、ホスト106は、コマンドバッファ119及び応答バッファ123のサイズを決定することができる。バッファは、データストレージデバイス100が内部的にキューに入れることのできるコマンドの数よりも大きくてもよい。
【0059】
ホスト106は、コマンドバッファ119にコマンドを書き込み、コマンドテールポインタを更新して、新しいコマンドが存在することをデータストレージデバイス100、及びデータストレージデバイス100内のコマンドプロセッサ122に指示することができる。コマンドテールポインタの書き込みは、新しいコマンドが存在することをコマンドプロセッサ122に信号伝達する。コマンドプロセッサ122は、DMA操作を使用してコマンドバッファ119からコマンドを読み取るように構成され、コマンドプロセッサ122がコマンドを受信したことをホスト106に指示するために別のDMA操作を使用してヘッドポインタを更新するように構成される。
【0060】
コマンドプロセッサ122がコマンドを完了すると、コマンドプロセッサ122は、DMA操作を使用して応答を書き込み、コマンドが終了したことを指示するために別のDMA操作により応答テールポインタを更新する。割り込みプロセッサ124は、新しい応答が応答バッファ123で使用可能になると、割り込みでホスト106に信号伝達するように構成される。ホスト106は、応答バッファ123からの応答を読み取り、応答を受信したことを指示するためにヘッドポインタを更新する。1つの例示的な実施態様において、割り込みプロセッサ124は、以前の割り込みが応答ヘッドポインタに書き込んでいるホスト106によって確認されるまで、別の割り込みをホスト106に送信することはない。
【0061】
1つの例示的な実施態様において、ホスト106は、そのドライバ107を通じて、割り込みプロセッサ124がいつ割り込みを生成すべきかを制御することができる。ホスト106は、さまざまな割り込み機構の組み合わせを含む、1つ以上の異なる割り込み機構を使用して、割り込み処理に関する情報を割り込みプロセッサ124に提供することができる。たとえば、ホスト106は、ドライバ107を通じて、電子透かし割り込み機構、タイムアウト割り込み機構、グループ割り込み機構、又はそれらの割り込み機構の組み合わせを使用するように割り込みプロセッサ124を構成することができる。
【0062】
1つの例示的な実施態様において、ホスト106は、電子透かしを決定するResponseMarkパラメータを設定することができ、タイムアウトを決定するResponseDelayパラメータを設定することができる。ホスト106は、それらのパラメータを割り込みプロセッサ124に伝達することができる。応答バッファ123内の新しい応答のカウントがResponseMarkと等しいか又はそれよりも大きい場合、割り込みプロセッサ124によって割り込みが生成され、カウントがゼロにされる。前回の割り込み以降の時間(たとえば、マイクロ秒単位の時間)がResponseDelayと等しいか又はそれよりも大きく、応答バッファ123に新しい応答がある場合、割り込みプロセッサ124は割り込みを生成し、タイムアウトがゼロにされる。ホスト106が新しい応答を応答バッファ123から除去する場合、新しい応答のカウントが更新され、タイムアウトが再始動される。このように、ホスト106は、あらかじめポーリングを行って、割り込みプロセッサ124からの割り込みを回避することができる。
【0063】
もう1つの例示的な実施態様において、ホスト106は、割り込みプロセッサ124がいつ割り込みを生成してホスト106に送信すべきかを決定するために、グループ割り込み機構を使用することができる。コマンドは、同じグループの一部としてコマンドを識別する共通値を共有することができる。たとえば、ドライバ107は、コマンドをグループ化して、コマンドのグループに同じグループ番号を割り当てることができる。ドライバ107は、コマンドヘッダの割り込みグループフィールドを使用して、コマンドのグループにグループ番号を割り当てることができる。コマンドグループ内のすべてのコマンドが完了し、それらのすべてのコマンドの応答がコマンドプロセッサ122から応答バッファ123に転送され、応答テールが更新されると、割り込みプロセッサ124は割り込みを生成してホスト106に送信することができる。このように、グループ割り込み機構は、ホスト106が割り込みの処理に費やす必要のある時間を短縮するために使用されてもよい。
【0064】
各々の割り込み機構が、別々に有効又は無効にされてもよい。また、割り込み機構の任意の組み合わせが使用されてもよい。たとえば、ドライバ107は、どの割り込み機構が有効であるか、及びどの割り込み機構が無効であるかを決定するために、QueueControlレジスタの割り込み許可フラグ及び割り込み禁止フラグを設定することができる。このように、割り込みの組み合わせは、ホスト106が割り込みの処理に費やす必要がある時間を短縮するために使用されてもよい。ホスト106は、そのリソースを使用して他のタスクを実行することができる。
【0065】
1つの例示的な実施態様において、すべての割り込み機構が無効化されてもよい。この状況において、ドライバ107は、処理する準備の整った応答があるかどうか決定するために、応答バッファ123をポーリングするように構成されてもよい。すべての割り込み機構を無効にすると、その結果、最短の可能待ち時間となる。さらに、ドライバ107の高いオーバーヘッドをもたらすことになる。
【0066】
もう1つの例示的な実施態様において、グループ割り込み機構は、タイムアウト割り込み機構及び/又は電子透かし割り込み機構と共に有効化されてもよい。このように、指定されたグループ内のコマンドの数が応答バッファ123よりも大きい場合、他の有効な割り込み機構のうちの1つは、ドライバ107に割り込みをかけて応答バッファ123からの応答をクリアし、さらに多くの応答を応答バッファ123に追加するためコマンドプロセッサ122にスペースを提供するように機能する。
【0067】
さまざまな割り込み機構の、単独又は組み合わせによる使用は、ドライバ107に関して待ち時間及び/又はオーバーヘッドを調整するために使用されてもよい。たとえば、1つの例示的な実施態様において、タイムアウト割り込み機構のみが有効化されてもよい。この状態において、ドライバ107のオーバーヘッドは低減されてもよい。もう1つの例示的な実施態様において、電子透かし割り込み機構のみが有効化されてもよい。この状況において、待ち時間は、より低いレベルに低減されてもよい。
【0068】
一部の例示的な状況において、使用されている特定のタイプのアプリケーションは、どの割り込み機構が有効化されるかの決定を行う際に考慮に入れてもよい。たとえば、Web検索アプリケーションは、待ち時間に敏感であることもあり、Web検索アプリケーションとって最善の待ち時間感応性をもたらすために特定の組み合わせで割り込み機構が有効化されてもよい。もう1つの例において、Web索引付けアプリケーションは、Web検索アプリケーションほど待ち時間に敏感でなくてもよい。代わりに、プロセッサパフォーマンスが、より重要なパラメータとなることもある。このアプリケーションにおいて、割り込み機構は、たとえ待ち時間の増大を犠牲にしても、低いオーバーヘッドを可能にするために、特定の組み合わせで有効化されてもよい。
【0069】
1つの例示的な実施態様において、ドライバ107は、オペレーティングシステム109を通じてアプリケーション113から受信された入出力(I/O)操作に基づいて、コマンドグループを決定することができる。たとえば、アプリケーション113は、複数メガバイトの読み取り操作を要求することがある。この場合には、アプリケーション113が部分的な応答を使用できないこともあり、アプリケーション113にとって唯一の有用な情報は、操作全体がいつ完了したかということであってもよい。通常、読み取り操作は、多くの複数のコマンドに分割されてもよい。ドライバ107は、読み取り操作をコマンドのグループとして認識し、そのグループ内のコマンドに、各々のコマンドヘッダの同じグループ番号を割り当てるように構成されてもよい。アプリケーション113とドライバ107との間のインターフェイスは、特定の操作がグループとして扱われることをドライバ107に指示するために使用されてもよい。インターフェイスは、コマンドのタイプ、コマンドに関連付けられているデータ要求のサイズ、複数の異なるアプリケーションからの要求を含む要求されるデータのタイプ、要求の優先順位、及びその組み合わせ(ただし、これらに限定されることはない)を含むさまざまな基準に基づいて操作をグループ化するように構成されてもよい。
【0070】
一部の実施態様において、アプリケーション113は、操作に関連する個々のコマンド情報を、オペレーティングシステム109及び最終的にはドライバ107に渡すことができる。その他の例示的な実施態様において、ドライバ107は、コマンドの1つ以上のスレッドがグループとみなされるよう指定することができる。
【0071】
図2を参照すると、例示的な割り込みプロセッサ124を示すブロック図が示される。割り込みプロセッサ124は、ホスト106によって有効化される1つ以上の割り込み機構に基づいて割り込みを生成して送信するように構成されてもよい。割り込みプロセッサ124は、ResponseNewカウンタ280、最終応答タイマー282、グループカウンタ284、及び割り込み送信論理286を含むことができる。
【0072】
ResponseNewカウンタ280は、電子透かし割り込み機構が望ましい場合に、ホスト106によって有効化されてもよい。ホスト106は、ResponseMark 288を設定することができるが、これは上記で説明されるようにResponseNewカウンタ280への入力として提供されるパラメータである。ResponseNewカウンタ280は、いつ応答がホスト106に転送されるか、いつResponseHeadが更新されるか、ホスト応答バッファ123内の未処理の応答の数、及びいつ割り込みが送信されたかを含む情報を入力として受信する。ResponseNewカウンタ280は、ホスト106に転送されてホストがまだ確認してない応答の数を追跡するように構成される。応答が応答バッファ123に転送されるごとに、カウンタがインクリメントされる。カウンタ280が、ホスト106によって設定された電子透かしレベル、すなわちResponseMark 288に到達するか、又はこれを超える場合、電子透かしトリガーが生成され、割り込み送信論理286に送信される。電子透かしレベル、すなわちResponseMark 288は、割り込みを生成する必要のある応答バッファ123内の新しい応答の数である。ホスト106が新しい応答を応答バッファ123から除去する場合、それらは電子透かしレベルに達するようにカウントされることはない。割り込みが生成されると、ResponseMarkへのカウントがリセットされる。
【0073】
電子透かし割り込み機構が有効化されている唯一の割り込みである場合、電子透かしに到達すると、割り込み送信論理286は、割り込みを生成してホスト106に送信する。ホスト106が割り込みを確認してResponseHeadを更新するまで、それ以上の割り込みは送信されない。更新されたResponseHeadは、割り込みクリア信号として、割り込み送信論理286に伝達される。他の割り込み機構も有効化されている場合、割り込み送信論理286は、他の有効化された割り込み機構も考慮に入れて、割り込みを生成してホスト106に送信する。
【0074】
最終応答タイマー282は、タイマー割り込み機構が望ましい場合に有効化されてもよい。最終応答タイマー282は、前回の割り込み以降の追跡を行うように構成されてもよい。たとえば、最終応答タイマー282は、前回の割り込み以降の時間をマイクロ秒単位で追跡することができる。ホスト106は、たとえばResponseDelayパラメータ290のようなパラメータを使用して、時間を設定することができる。1つの例示的な実施態様において、ResponseDelay 290タイムアウトは、前回の割り込み以降、又は割り込みが生成される前にホスト106が前回応答バッファ123から新しい応答を除去してからのマイクロ秒数であってもよい。
【0075】
最終応答タイマー282は、いつ割り込みが送信されるかを指示する信号を入力として受信する。最終応答タイマー282はまた、ResponseHeadが更新されると信号を受信することもできるが、この信号はホスト106が応答バッファ123から応答を除去したことを指示する。割り込みは、応答バッファ123が未処理の応答を含む場合に限り生成されてもよい。
【0076】
最終応答タイマー282は、最終応答タイマー282によって追跡されている時間がResponseDelayパラメータ290よりも大きい場合に、タイムアウトトリガーを生成するように構成される。この状況が発生して、応答バッファ123が新しい応答を含む場合、タイムアウトトリガー信号は割り込み送信論理286に送信される。最終応答タイマー282が有効化されている唯一の割り込み機構である場合、割り込み送信論理286は、割り込みを生成してホストに送信する。他の割り込み機構も有効化されている場合、割り込み送信論理286は、他の割り込み機構も考慮に入ることができる。
【0077】
各割り込み機構は有効ビットを含み、割り込み送信論理286は、有効化された割り込み機構のために割り込みトリガーがアサートされる場合、割り込みを生成するように構成されてもよい。論理は、ホスト106が割り込みを確認してResponseHeadを更新するまで、別の割り込みを生成しないように構成されてもよい。Queue Controlパラメータ292は、どの割り込み機構が有効にされ、どの割り込み機構が無効にされているかのような、割り込み機構の状態を指示するために割り込み送信論理286に入力を行うことができる。
【0078】
グループカウンタ284機構は、ドライバ107によって指定されるグループの一部であるコマンドを追跡するように配置され構成されてもよい。グループカウンタ284は、グループ内のすべてのコマンドが処理される場合に限り、単一割り込みが生成されてホスト106に返信されるように、ホスト106がグループの一部としてコマンドを追跡するよう望むときに、ホスト106によって有効化されてもよい。このように、割り込みは、個々のコマンドごとに生成されることはないが、コマンドのグループに対してのみ生成される。
【0079】
グループカウンタ284は、コマンドの複数の異なるグループの追跡を有効にするように、複数のカウンタで構成されてもよい。1つの例示的な実施態様において、グループカウンタ284は、コマンドの最大128個までの異なるグループを追跡するように構成されてもよい。このように、コマンドの各グループに対してカウンタがある。カウンタの数は、コマンドヘッダの割り込みグループフィールドを使用して指定されうるグルーブ番号の数に関連してもよい。
【0080】
グループカウンタ284は、グループの新しいコマンドがコマンドプロセッサ122に入ったときに、グループのカウンタをインクリメントするように構成されてもよい。グループカウンタ284は、グループ内のコマンドの1つが処理を完了したときに、グループのカウンタをデクリメントすることができる。このように新しいコマンドがグループに入るとインクリメントし、コマンドがグループに対して完了するとデクリメントすることで、各グループのコマンドの数は潜在的に無限である。カウンタは、グループ内の潜在的コマンドの最大数を考慮するようにサイズ調整される必要はない。代わりに、カウンタは、データストレージデバイス100が一度に潜在的に処理することができるコマンドの数に基づいてサイズ調整されてもよく、その数は特定のグループ内のコマンドの無限数に満たなくてもよい。
【0081】
1つの例示的な実施態様において、各々のグループカウンタ284は、ドライバ107によって割り当てられ、各コマンドのコマンドヘッダの割り込みグループフィールドに現れるグループ番号を使用して特定のグループ内のコマンドを追跡することができる。グループカウンタ284は、グループ番号を有するコマンドが処理のためにコマンドプロセッサ122に入るごとに、信号を受信する。この信号に応答して、カウンタはそのグループに対してインクリメントする。グループカウンタ284はまた、グループ番号を有するコマンドが処理を完了するごとに、信号を受信する。この信号に応答して、カウンタはそのグループに対してデクリメントする。
【0082】
コマンドグループ内の最後のコマンドは、コマンドがグループ内の最後のコマンドであることをグループカウンタ284に指示するためのフラグで、ドライバ107によってマークを付けられてもよい。1つの例示的な実施態様において、コマンドヘッダの割り込みグループフィールド内の最終ビットは、フラグとして使用されてもよい。グループカウンタ284は、いつフラグが設定されるかを認識するように構成されてもよい。このように、グループカウンタ284は、データストレージデバイス100で処理中の特定のグループ内のコマンドの数のカウンタを保持する。グループカウンタ284はまた、いつグループの最後が確認されたかを追跡する。
【0083】
コマンドがホスト106からデータストレージデバイス100に送信されると、その割り込みグループのカウンタがインクリメントされる。応答がデータストレージデバイス100からホスト106に送信されると、その割り込みグループのカウンタがデクリメントされる。グループ内の最後のコマンドがグループカウンタ284で受信され、そのグループのカウントがゼロになる場合、グループトリガー信号が生成され、割り込み送信論理286に送信される。グループトリガー信号が割り込み送信論理286において受信されると、割り込みはホスト106に送信される。次いで、グループカウンタ284は、そのグループの最終グループフラグをクリアする。
【0084】
ドライバ107は、使用中のグループを追跡するように構成されてもよい。ドライバ107は、その割り込みグループを使用する以前のコマンドがすべて完了して、割り込みが確認されるまで、割り込みグループ番号を再使用することはない。
【0085】
1つの例示的な実施態様において、ドライバ107は、生成させたい割り込みの数を動的に決定するように構成されてもよい。たとえば、ドライバ107は、たとえば、ボリューム、待ち時間、及びホスト106のその他の因子を含むさまざまな基準に応じて、コマンドグループのサイズを動的に決定することができる。
【0086】
1つの例示的な実施態様において、割り込み送信論理286は、複数の割り込みグループの複数の割り込みを集約して、コマンドの複数のグループの単一割り込みのみを送信するように構成されてもよい。
【0087】
図3は、コマンドプロセッサ122を示すブロック図である。コマンドプロセッサ122は、スロットトラッカモジュール302、コマンド転送モジュール304、処理中コマンドモジュール306、コマンドパケットメモリ308、及びタスクディスパッチモジュール310を含むことができる。コマンドプロセッサ122は、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせで実施されてもよい。1つの例示的な実施態様において、コマンドプロセッサ122は、フィールドプログラマブルゲートアレイ(field programmable gate array)(FPGA)コントローラの一部として実施されてもよい。FPGAコントローラは、本明細書において説明される機能を実行するようにFPGAコントローラをプログラムするファームウェア又はその他の命令を使用して構成されてもよい。
【0088】
コマンドプロセッサ122は、ホストからコマンドを取り出して、さまざまなストレージ位置により処理するためにホストからのコマンドをキューに入れて順序付けるように配置され構成されてもよい。コマンドプロセッサ122は、ストレージ位置のすべて、又は実質的にすべてをビジー状態に保持しようと試みることにより、ストレージ位置の可用性を最大化するように構成されてもよい。コマンドプロセッサ122は、ホストから受信されたコマンドの順序が保持されるように、同じストレージ位置に指定されているコマンドを順序正しくディスパッチするように構成されてもよい。コマンドプロセッサ122はまた、異なるストレージ位置に指定されているコマンドを再配列して順不同にディスパッチするように構成されてもよい。このように、ホストから受信されたコマンドは、異なるストレージ位置に指定されているコマンドを再配列することにより並列に処理されてもよく、同時に、同じストレージ位置に指定されているコマンドの順序が保持される。
【0089】
1つの例示的な実施態様において、コマンドプロセッサ122は、番号付きリストを使用して、ホストからのコマンドをキューに入れて順序付けることができる。1つの例示的な実施態様において、番号付きリストはソートされてもよく、及び/又はそれ以外の場合ホストからのコマンドの経過時間に基づいて順序付けられてもよい。たとえば、ホストから新しいコマンドが受信されると、それらのコマンドは、ホストから受信された順序で番号付きリストの末尾に配置される。このように、順序に依存するコマンド(たとえば、同じストレージ位置に指定されているコマンド)は、正しい順序で保持される。
【0090】
1つの例示的な実施態様において、ストレージ位置は複数のフラッシュメモリチップを含むことができる。フラッシュメモリチップは、複数のチャネルに配置され構成されてもよく、各々のチャネルは1つ以上のフラッシュメモリチップを含む。コマンドプロセッサ122は、同じチャネル及び/又は同じフラッシュメモリチップに指定されているコマンドを、番号付きリストに基づいて順序正しくディスパッチするように配置され構成されてもよい。また、コマンドプロセッサ122は、異なるチャネル及び/又は異なるフラッシュメモリチップに指定されているコマンドを順不同にディスパッチするように配置され構成されてもよい。このように、コマンドプロセッサ122は、チャネル及びフラッシュメモリチップが同時にビジー状態になるように、必要に応じて、番号付きリストからコマンドを再配列することができる。そうすることで、ホストからのコマンドは並列に処理されるようになり、さらに多くのコマンドが、異なるチャネル及び異なるフラッシュメモリチップで同時に処理されるようになる。
【0091】
ホストからのコマンドは、ドライバ(たとえば、図1のドライバ107)の制御の下にディスパッチされて追跡されてもよく、ドライバは、ストレージ媒体において明白に具現され、ホスト(たとえば、図1のホスト106)からコマンドを生成してディスパッチするための命令を含むことができるコンピュータプログラム製品であってもよい。ホストからのコマンドは、たとえば、特定のフラッシュメモリチップ及び/又は特定のチャネルなど、特定のストレージ位置を指定することができる。ホストの観点からは、同じストレージ位置に指定されているコマンドが、ホストによって指定された順序で実行されることが重要であってもよい。たとえば、ホストによって生成される特定の操作が、同じフラッシュメモリチップ上で順序正しく生じることが重要であってもよい。たとえば、ホストは、特定のフラッシュメモリチップに対して消去コマンド及び書き込みコマンドを生成して送信することができ、ホストは消去コマンドが先に生じるよう望むとする。書き込みコマンドに関連付けられているデータが、フラッシュメモリチップに書き込まれた直後に消去されることがないように、消去操作が先に生じることが重要である。
【0092】
もう1つの例として、フラッシュメモリチップの場合、消去ブロックのページに順序正しく書き込むことが重要となることもある。この操作は、同じフラッシュメモリチップ上で操作を実行するための複数のコマンドを含むことができる。この例において、この操作に対するそれらのコマンドを、ホストによって指定された順序で実行することが必要である。たとえば、単一書き込み操作は、60個を超えるコマンドを含むことがある。コマンドプロセッサ122は、同じフラッシュメモリチップへのコマンドが、番号付きリストを使用して順序正しく実行されることを確実にするように構成されてもよい。
【0093】
1つの例示的な実施態様において、コマンドプロセッサ122は、処理中のコマンドの数を追跡するように構成されてもよい。コマンドプロセッサ122は、受信され処理されるコマンドに使用可能なスロットの数を追跡するように構成されてもよい。コマンドプロセッサ122のコンポーネントの1つである、スロットトラッカモジュール302は、ホストからのコマンドに使用可能なスロットを追跡するように構成されてもよい。スロットトラッカモジュール302は、開放スロットを追跡して、ホストから転送された新しいコマンドをスロットに提供し、コマンドの完了時にスロットを開放状態にあると指定することができる。
【0094】
1つの例示的な実施態様において、スロットトラッカモジュール302は、固定数のスロットを含むことができ、各スロットは単一コマンドに指定されてもよい。たとえば、スロットトラッカモジュール302は、128個のスロットを含むことができる。その他の例示的な実施態様において、スロットトラッカモジュール302は、異なる数の固定スロットを含むことができる。さらに、たとえば、スロットの数は可変又は構成可能であってもよい。スロットトラッカモジュール302は、ソフトウェア、ハードウェア、又はハードウェア及びソフトウェアの組み合わせにおけるレジスタ又はメモリモジュールとして実施されてもよい。
【0095】
スロットトラッカモジュール302は、スロットのリストを含むことができ、各々のスロットはグローバルスロット識別子に関連付けられている。コマンドがホストから受信されると、コマンドは、使用可能なホストに割り当てられ、そのスロットのグローバルスロット識別子に関連付けられる。スロットトラッカモジュール302は、各々のコマンドにグローバルスロット識別子を割り当てるように構成されてもよく、グローバルスロット識別子の数は、スロットトラッカモジュール302のスロットの数と一致するように固定される。コマンドが完了してスロットが開放されるまで、コマンドはその処理全体にわたりグローバルスロット識別子に関連付けられている。1つの例示的な実施態様において、グローバルスロット識別子は、特定のスロットを満たすコマンドに割り当てられる特定のスロットに関連付けられているタグである。タグはコマンドに関連付けられており、コマンドの処理が完了して、占有していたスロットが開放され、新しいコマンドの受信に使用できるようにされるまで、コマンドに関連付けられた状態を保つ。コマンドは、スロットの順序で配置されなくてもよいが、その代わり、使用可能なスロットのいずれかに配置されて、そのスロットに関連付けられているグローバルスロット識別子を割り当てられてもよい。
【0096】
1つの例示的な実施態様において、コマンドプロセッサ122のコンポーネントの1つである、コマンド転送モジュール304は、スロットトラッカモジュール302の使用可能なスロットの数及びホストにおける新しいコマンドの可用性に基づいて、ホストから新しいコマンドを取り出すように構成されてもよい。1つの例示的な実施態様において、コマンド転送モジュール304は、状態マシンとして実施されてもよい。
【0097】
スロットトラッカモジュール302は、使用可能なスロットの数に関する情報をコマンド転送モジュール304に提供することができる。また、コマンド転送モジュール304は、使用可能なスロットの数についてスロットトラッカモジュール302にクエリを行うことができる。
【0098】
1つの例示的な実施態様において、コマンド転送モジュール304は、コマンドテールポインタ312及びコマンドヘッドポインタ314を使用して、取り出しのためにホストにおいて新しいコマンドが使用可能になる時及び使用可能なコマンドの数を指示することができる。コマンド転送モジュール304は、コマンドテールポインタ312とコマンドヘッドポインタ314を比較して、ホストから取り出しに使用可能なコマンドがあるかどうかを決定することができる。コマンドテールポインタ312とコマンドヘッドポインタ314が等しい場合、転送に使用可能なコマンドはない。コマンドテールポインタ312がコマンドヘッドポインタ314よりも大きい場合、コマンドは転送に使用可能である。
【0099】
1つの例示的な実施態様において、コマンドテールポインタ312及びコマンドヘッドポインタ314は、ポインタ値を保持するように構成されるレジスタとして実施されてもよく、コマンドプロセッサ122の一部であってもよい。コマンドテールポインタ314は、ホストによって書き込まれてもよい。たとえば、ドライバは、取り出しのためにホストでコマンドが使用可能である場合、メモリマップ入出力(MMIO)書き込みを使用して、コマンドテールポインタ312を更新することができる。コマンドがホストから取り出されると、コマンド転送モジュール304は、コマンドヘッドポインタ314を更新する。
【0100】
ホストにおける使用可能なスロット及び使用可能なコマンドの条件が満たされると、コマンド転送モジュール304は、ホストから使用可能なコマンドの一部又は全部を取り出すことができる。1つの例示的な実施態様において、コマンド転送モジュール304は、単一アクセスでコマンドのグループを取り出すことができる。たとえば、コマンド転送モジュール304は、ホストからダイレクトメモリアクセス(direct memory access)(DMA)操作を使用して一度に8つのコマンドのグループを取り出すように構成されてもよい。コマンドが取り出されると、コマンド転送モジュール304は、コマンドヘッドポインタ314を更新する。コマンドは、バスマスタ316を通じてホストから取り出されてもよい。コマンド転送モジュール304はまた、DMA操作を使用してバスマスタ316を通じてホストコマンドヘッドポインタ(図示せず)を書き込み、ホストのコマンドヘッドポインタを更新することもできる。
【0101】
キューコントロール318は、コマンド転送モジュール304を有効化及び無効化するように構成されてもよい。キューコントロール318は、ドライバを通じてホストから命令を受信するレジスタとして実施されてもよい。キューコントロール318は、コマンドプロセッサ122のコンポーネントであってもよい。キューコントロール318レジスタが有効に設定される場合、コマンド転送モジュール304は、ホストからコマンドを取り出して処理することができる。ドライバは、ホストが準備が整い、準備が整っていることを示す指示を提供した場合に限り、コマンド転送モジュール304がコマンドを取り出すように、キューコントロール318の設定を制御する。キューコントロール318レジスタが無効に設定される場合、コマンド転送モジュール104は、ホストからコマンドを取り出して処理しなくてよい。
【0102】
取り出されたコマンドは各々、スロットトラッカモジュール302によって使用可能なスロットの1つに割り当てられ、その使用可能なスロットのグローバルスロット識別子に関連付けられる。コマンドのデータは、コマンドパケットメモリ308に格納されてもよい。たとえば、コマンドパケットメモリ308は、グローバルスロット識別子によって索引付けされる固定バッファとして実施されてもよい。特定のコマンドのデータは、コマンドパケットメモリ308に格納され、その割り当てられたグローバルスロット識別子によって索引付けされてもよい。特定のコマンドのデータは、コマンドがタスクディスパッチモジュール310によって指定されたストレージ位置にディスパッチされるまで、コマンドパケットメモリ308に引き続き保持されてもよい。
【0103】
コマンド転送モジュール304はまた、スロットによって索引付けされる際にコマンドに関連する情報をコントローラの他のコンポーネントに提供するように構成されてもよい。たとえば、コマンド転送モジュール304は、データをDMAエンジンに提供することができる。コマンド転送モジュール304はまた、状態パケットヘッダデータを状態プロセッサに提供することができる。コマンド転送モジュール304は、割り込みグループデータを割り込みプロセッサに提供することができる。たとえば、コマンド転送モジュール304は、グループ情報319を割り込みプロセッサ(たとえば、図1及び図2の割り込みプロセッサ124)に転送することができる。
【0104】
処理中コマンドモジュール306は、コマンドの経過時間に基づく番号付きリストを使用してコマンドをキューに入れ、順序付けるように構成されてもよい。1つの例示的な実施態様において、処理中コマンドモジュール306は、コマンドをキューに入れて順序付けるために複数のポインタを格納するように構成されるメモリモジュールとして実施されてもよい。処理中コマンドモジュール306は、ストレージ位置識別子と共に処理中のコマンドのグローバルスロット識別子のリストを含むことができる。たとえば、ストレージ位置識別子は、コマンドが処理されるべき指定されたストレージ位置を含むことができる。ストレージ位置識別子は、チャネル識別子及び/又はフラッシュメモリチップ識別子を含むことができる。ストレージ位置識別子は、コマンドの一部であり、そのドライバを通じてホストにより割り当てられる。
【0105】
新しいコマンドが取り出されると、グローバルスロット識別子及びストレージ位置情報は、処理中コマンドモジュール306の番号付きリストの末尾に追加される。上記で説明されるように、コマンドのデータは、コマンドパケットメモリ308に格納され、グローバルスロット識別子によって索引付けされる。コマンドが番号付きリストに追加されると、以前のコマンドを指し示すポインタがコマンドと共に含まれる。さらに、次のコマンドを指し示すポインタも含まれる。このように、番号付きリスト内の各項目は、グローバルタスク識別子、ストレージ位置識別子、以前のコマンドを指し示すポインタ、及び次のコマンドを指し示すポインタを含む。この例示的な実施態様において、番号付きリストは二重連結リストと呼ぶことができる。番号付きリストは、最も古いものから最新のものへと順序付けられたコマンドのリストである。
【0106】
タスクディスパッチモジュール310は、処理中コマンドモジュール306の番号付きリストからコマンドを除去し、それらを処理のために適切なストレージ位置にディスパッチするように構成される。タスクディスパッチモジュール310は、ストレージ位置から、新しいコマンドを受け入れる準備が整っていることを指示する入力を受信することができる。1つの例示的な実施態様において、タスクディスパッチモジュール310は、1つ以上のストレージ位置が新しいコマンドを受け入れる準備が整っていることを指示する信号のような、1つ以上の信号320を受信することができる。処理中コマンドモジュール306は、最も古いコマンドを最初にして番号付きリストの先頭から開始して、そのコマンドをタスクディスパッチモジュール310に使用可能にするように構成されてもよい。処理中コマンドモジュール306は、コマンドがタスクディスパッチモジュール310によってリストから除去されるまで番号付きリストを使用して正しい順序でコマンドをタスクディスパッチモジュール310に引き続き使用可能にすることができる。処理中コマンドモジュール306の番号付きリストからコマンドが除去された後、処理中コマンドモジュール306は、番号付きリストの先頭から再度開始して、リスト内に残るコマンドをタスクディスパッチモジュール310に再生する。
【0107】
タスクディスパッチモジュール310は、最も古いコマンドを最初にして番号付きリストの先頭から開始し、信号320を使用してストレージ位置が新しいコマンドを受信するために使用可能であるかどうか決定するように構成されてもよい。ストレージ位置の準備が整っている場合、タスクディスパッチモジュール310は、コマンドパケットメモリ308からコマンドデータを取り出して、コマンドデータ及びストレージ位置選択信号322をストレージ位置に伝達する。次いで、処理中コマンドモジュール306は、コマンドが処理のためにディスパッチされたことを反映するように、番号付きリスト及びポインタを更新する。コマンドがディスパッチされると、タスクディスパッチモジュール310は再度、番号付きリストの先頭から開始する。
【0108】
ストレージ位置が新しいコマンドを受信する準備が整っていない場合、タスクディスパッチモジュール310は番号付きリストの次のコマンドに移動する。タスクディスパッチモジュール310は、次のコマンドが、スキップされたコマンドと同じストレージ位置又は異なるストレージ位置に対するものかどうかを決定する。次のコマンドが、スキップされたコマンドと同じストレージ位置に対するものである場合、タスクディスパッチモジュール310はまた、このコマンドをスキップする。このように、同じストレージ位置に指定されているコマンドは、ホストから受信された正しい順序で、ディスパッチされて処理される。タスクディスパッチモジュール310は、同じストレージ位置に指定されているコマンドの順序を保持する。コマンドが異なるストレージ位置に指定されている場合、タスクディスパッチモジュール310は再度、リストの次のコマンドのストレージ位置が新しいコマンドを受け入れる準備が整っているかどうかを決定する。ストレージ位置が新しいコマンドを受け入れる準備が整っていることを示す信号をタスクディスパッチモジュール310が受信する場合、コマンドはタスクディスパッチモジュール310により、ストレージ位置選択信号322と共に、コマンドパケットメモリ308からストレージ位置にディスパッチされる。処理中コマンドモジュール306は、ディスパッチされたコマンドを番号付きリストから除去して、コマンドに関連付けられていたポインタを更新することを含めて、番号付きリストを更新する。このように、残りのポインタは、ディスパッチされたコマンドが除去される際に連結される。
【0109】
さらに図4を参照すると、処理中コマンドモジュール306を示すブロック図が示される。処理中コマンドモジュール306は、ポートA及びポートBという複数のポートを有する単一メモリモジュール402を含むことができる。メモリモジュール402は、各コマンドのポインタ情報を含む処理中コマンドに関連する情報を格納することができ、ポインタ情報は次のコマンド及び以前のコマンドを指し示すことができる。
【0110】
操作中、図3のコマンド転送モジュール304は、番号付きリストに追加される新しいコマンドを求める新エントリ要求406を処理中コマンドモジュール306に送信する。新エントリ要求406は、新エントリモジュール408によって受信される。1つの例示的な実施態様において、新エントリモジュール408は、状態マシンとして実施されてもよい。
【0111】
新エントリモジュール408は、新エントリ要求406を受信し、それをメモリモジュール402の最新のコマンドとしてリストの最後で番号付きリストに追加する。また、新エントリモジュール408は、フリーポインタリストモジュール410にポインタを要求する。フリーポインタリストモジュール410は、新しいエントリに使用されうるポインタのリストを保持する先入れ先出し(FIFO)メモリとして実施されてもよい。
【0112】
新エントリモジュール408がフリーポインタリストモジュール410にポインタを要求すると、フリーポインタリストモジュール410は、次エントリポインタ412を新エントリモジュール408に提供する。次エントリポインタ412は、現在の新しいエントリの後に続くエントリが番号付きリストに常駐する位置を指し示すポインタである。リスト内の現在の新しいエントリは、このアドレスをその次のアドレスとして指し示す。新エントリポインタ414は、現在の新しいエントリが番号付きリストに常駐する位置を指し示すポインタであり、このポインタは以前のエントリの次エントリポインタ412であった。リスト内の前回のエントリは、このアドレスをその次のアドレスとして指し示す。メモリモジュール402は、コマンド及びポインタに関連するデータフィールドを格納する。新しいエントリが追加されると、終了ポインタ420もまた更新される。
【0113】
たとえば、エントリ「X」が追加される場合、次エントリポインタ412は次のエントリ「Y」を指し示し、新エントリポインタ414は追加されるべき現在のエントリ「X」を指し示す。「X」が入力されてエントリ「Y」が追加された後、次エントリポインタ412は次のエントリ「Z」を指し示し、新エントリポインタ414は追加されるべき現在のエントリ「Y」を指し示す。
【0114】
図3のタスクディスパッチモジュール310が、メモリモジュール402の番号付きリストからエントリが除去されることを決定すると、タスクディスパッチモジュールは削除要求416を送信する。削除要求は、エントリ再生及び削除モジュール418によって受信される。エントリ再生及び削除モジュール418は、最も古いコマンドを最初にして番号付きリストの先頭から開始して、そのコマンドをタスクディスパッチモジュール310に使用可能にするように構成されてもよい。エントリ再生及び削除モジュール418は、コマンドがタスクディスパッチモジュール310によってリストから除去されるまで番号付きリストを使用して正しい順序でコマンドをタスクディスパッチモジュール310に引き続き使用可能にすることができる。コマンドが番号付きリストから除去された後、エントリ再生及び削除モジュール418は、メモリモジュール402に、コマンドをディスパッチさせ、それを番号付きリストから除去させる。次いで、ポインタは解放され、エントリ再生及び削除モジュール418は、除去されたコマンドのポインタがフリーであることを示す指示をフリーポインタリストモジュール410に提供する。エントリ再生及び削除モジュール418はまた、リストの正しい順序を保持するためにコマンドが除去されるとき、メモリモジュール402内のポインタを更新する。エントリ再生及び削除モジュール418はまた、番号付きリストの先頭から再度開始して、リストに残っているコマンドをタスクディスパッチモジュール310に再生する。
【0115】
1つの例示的な実施態様において、エントリ再生及び削除モジュール418は、状態マシンとして実施されてもよい。エントリ再生及び削除モジュール418はまた、新エントリモジュール408から終了ポインタ420の入力を受信する。終了ポインタ420は、エントリ再生及び削除モジュール418が、コマンドをスクディスパッチモジュール310に使用可能にするとき、及び番号付きリストの最後のエントリがリストから除去されるときに使用されてもよい。このように、終了ポインタ420は、番号付きリストの終わりを指し示すように更新されてもよい。
【0116】
戻って図1を参照すると、1つの例示的な実施態様において、自身のPCBであるコントローラボード102は、自身の別個のPCB上にある各々のメモリボード104a及び104bの間に物理的に配置されてもよい。また図5を参照すると、データストレージデバイス100は、1つのPCB上にメモリボード104a、第2のPCB上にコントローラボード102、及び第3のPCB上にメモリボード104bを含むことができる。メモリボード104aは複数のフラッシュメモリチップ118aを含み、メモリボード104bは複数のフラッシュメモリチップ118bを含む。コントローラボード102は、コントローラ110、及びホスト(図示せず)へのインターフェイス108、並びにその他のコンポーネント(図示せず)を含む。
【0117】
図5に示される例において、メモリボード104aは、コントローラボード102に機能的に接続され、コントローラボード102の片側520aに配置されてもよい。たとえば、メモリボード104aは、コントローラボード102の上側520aに接続されてもよい。メモリボード104bは、コントローラボード102に機能的に接続され、コントローラボード102の第2の側520bに配置されてもよい。たとえば、メモリボード104bは、コントローラボード102の下側520bに接続されてもよい。
【0118】
メモリボード104a及び104bとコントローラボード102との間のその他の物理的及び/又は電気的な接続配列が可能である。図5は、単に1つの例示的な配列を示すにすぎない。たとえば、データストレージデバイス100は、3つのメモリボード、4つのメモリボード、又はそれ以上のメモリボードのような、2つ以上のメモリボードを含むことができ、すべてのメモリボードは単一のコントローラボードに接続される。このように、データストレージデバイスは、ディスクドライブフォームファクタでさらに構成されてもよい。また、メモリボードは、たとえばコントローラボードが上部でメモリカードが下部、又はコントローラボードが下部でメモリカードが上部のように、その他の配列でコントローラボードに接続されてもよい。
【0119】
データストレージデバイス100は、コンピューティングデバイスと協働するように配置され構成されてもよい。1つの例示的な実施態様において、コントローラボード102及びメモリボード104a及び104bは、コンピューティングデバイスのドライブベイ内に適合するように配置され構成されてもよい。図6を参照すると、2つの例示的なコンピューティングデバイス、すなわちサーバ630及びサーバ640が示される。サーバ630及び640は、さまざまな異なるタイプのコンピューティングサービスを提供するように配置され構成されてもよい。サーバ630及び640は、サーバ630及び640の1つ以上のプロセッサにコンピューティングサービスを提供させる命令を有するコンピュータプログラム製品を含むホスト(たとえば、図1のホスト106)を含むことができる。サーバのタイプは、サーバ上で動作している1つ以上のアプリケーションプログラム(たとえば、図1のアプリケーション113)によって異なる。たとえば、サーバ630及び640は、アプリケーションサーバ、Webサーバ、Eメールサーバ、検索サーバ、ストリーミングメディアサーバ、Eコマースサーバ、ファイル転送プロトコル(file transfer protocol)(FTP)サーバ、その他のタイプのサーバ、又はそれらのサーバの組み合わせであってもよい。サーバ630は、サーバラック内で動作するラックマウント型サーバとなるように構成されてもよい。サーバ640は、サーバラックから独立して動作するスタンドアロンのサーバとなるように構成されてもよい。サーバ640がサーバラック内にはない場合であっても、他のサーバと共に動作するように構成されてもよく、他のサーバに機能的に接続されてもよい。サーバ630及び640は、例示のコンピューティングデバイスを示すことが意図されており、その他のタイプのサーバを含む他のコンピューティングデバイスが使用されてもよい。
【0120】
1つの例示的な実施態様において、図1及び図5のデータストレージデバイス100は、サーバ630及び640のデータストレージ機能をもたらすために、サーバ630のドライブベイ635又はサーバ640のドライブベイ645内に適合するようにサイズ調整されてもよい。たとえば、データストレージデバイス100は、ドライブベイ635及び645に適合するように、3.5"ディスクドライブフォームファクタにサイズ調整されてもよい。データストレージデバイス100はまた、その他のサイズに構成されてもよい。データストレージデバイス100は、インターフェイス108を使用してサーバ630及び560に機能的に接続されて通信することができる。このように、ホストは、インターフェイス108を使用してコントローラボード102にコマンドを伝達することができ、コントローラ110は、メモリボード104a及び104b上のフラッシュメモリチップ118a及び118bを使用してコマンドを実行することができる。
【0121】
戻って図1を参照すると、インターフェイス108は、コントローラ110とホスト106との間の高速インターフェイスを含むことができる。高速インターフェイスは、ホスト106とフラッシュメモリチップ118a及び118bとの間のデータの高速転送を可能にすることができる。1つの例示の実施態様において、高速インターフェイスは、PCIeインターフェイスを含むことができる。たとえば、PCIeインターフェイスは、PCIe x4インターフェイス又はPCIe x8インターフェイスであってもよい。PCIeインターフェイス108は、たとえばPCIeコネクタケーブルアセンブリのような、ホスト106へのコネクタを含むことができる。その他の高速インターフェイス、コネクタ、及びコネクタアセンブリが使用されてもよい。
【0122】
1つの例示的な実施態様において、コントローラボード102とメモリボード104a及び104b上のフラッシュメモリチップ118a及び118bとの間の通信は、複数のチャネル112に配置されて構成されてもよい。各チャネル112は、1つ以上のフラッシュメモリチップ118a及び118bと通信することができ、チャネルコントローラ(図示せず)によって制御されてもよい。コントローラ110は、ホスト106から受信されたコマンドが、各々のチャネル112を使用して、同時に、又は少なくとも実質的に同時にコントローラ110によって実行されうるように構成されてもよい。このように、複数のコマンドは、異なるチャネル112で同時に実行することができ、データストレージデバイス100のスループットを向上させることができる。
【0123】
図1の例において、20個のチャネル112が示される。完全な実線は、コントローラ110とメモリボード104a上のフラッシュメモリチップ118aとの間の10個のチャネルを示す。実線及び破線の混合線は、コントローラ110とメモリボード104b上のフラッシュメモリチップ118bとの間の10個のチャネルを示す。図1に示すように、各々のチャネル112は、複数のフラッシュメモリチップをサポートすることができる。たとえば、各々のチャネル112は、最大32個のフラッシュメモリチップをサポートすることができる。1つの例示的な実施態様において、20個のチャネルは各々、6個のフラッシュメモリチップをサポートして通信するように構成されてもよい。この例において、各々のメモリボード104a及び104bは、それぞれ60個のフラッシュメモリチップを含むことができる。フラッシュメモリチップ118a及び118bのタイプ及び数に応じて、データストレージデバイス100は、最大多数テラバイトのデータまで格納するように構成されてもよい。
【0124】
コントローラ110は、マイクロコントローラ、FPGAコントローラ、その他のタイプのコントローラ、又はそれらのコントローラの組み合わせを含むことができる。1つの例示の実施態様において、コントローラ110はマイクロコントローラである。マイクロコントローラは、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせで実施されてもよい。たとえば、マイクロコントローラは、実行されると、特定の方法でマイクロコントローラに実行させることができる命令を含むコンピュータプログラム製品がメモリ(たとえば、メモリモジュール116)からロードされてもよい。マイクロコントローラは、インターフェイス108を使用してホスト106からコマンドを受信し、コマンドを実行するように構成されてもよい。たとえば、コマンドは、フラッシュメモリチップ118a及び118bを使用してデータのブロックの読み取り、書き込み、コピー、及び削除を行うコマンド、並びにその他のコマンドを含むことができる。
【0125】
もう1つの例示的な実施態様において、コントローラ110はFPGAコントローラである。FPGAコントローラは、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせで実施されてもよい。たとえば、FPGAコントローラは、実行されると、特定の方法でFPGAコントローラに実行させることができる命令を含むファームウェアがメモリ(たとえば、メモリモジュール116)からロードされてもよい。FPGAコントローラは、インターフェイス108を使用してホスト106からコマンドを受信し、コマンドを実行するように構成されてもよい。たとえば、コマンドは、フラッシュメモリチップ118a及び118bを使用してデータのブロックの読み取り、書き込み、コピー、及び削除を行うコマンド、並びにその他のコマンドを含むことができる。
【0126】
1つの例示の実施態様において、FPGAコントローラは、ホスト106との複数のインターフェイス108をサポートすることができる。たとえば、FPGAコントローラは、ホスト106との複数のPCIe x4又はPCIe x8インターフェイスをサポートするように構成されてもよい。
【0127】
メモリモジュール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はまた、その他のタイプのメモリモジュールを含むことができる。
【0128】
電源モジュール114は、電力(Vin)を受信し、受信した電力の任意の変換を実行し、出力電力(Vout)を出力するように構成されてもよい。電源モジュール114は、ホスト106から、又は別の電源から、電力(Vin)を受信することができる。電源モジュール114は、コントローラボード102、及びコントローラ110を含むコントローラボード102上のコンポーネントに電力(Vout)を提供することができる。電源モジュール114はまた、メモリボード104a及び104b、並びにフラッシュメモリチップ118a及び118bを含むメモリボード104a及び104b上のコンポーネントに電力(Vout)を提供することができる。
【0129】
1つの例示的な実施態様において、電源モジュール114は、1つ以上のDC(直流)-DC変換器を含むことができる。DC-DC変換器は、入力電力(Vin)を受信して、電力を1つ以上の異なる電力レベル(Vout)に変換するように構成されてもよい。たとえば、電源モジュール114は、+12V(Vin)を受信し、電力を3.3V、1.2V、又は1.8Vに変換して、出力電力(Vout)をコントローラボード102並びにメモリボード104a及び104bに供給するように構成されてもよい。
【0130】
メモリボード104a及び104bは、さまざまなタイプのフラッシュメモリチップ118a及び118bに対処するように構成されてもよい。1つの例示的な実施態様において、フラッシュメモリチップ118a及びフラッシュメモリチップ118bは、電源モジュール114から同じ電圧を必要とすること、及び同じフラッシュメモリチップベンダーのものであることを含む同じタイプのフラッシュメモリチップであってもよい。ベンダー及び製造元という用語は、本文書全体を通じて同義的に使用される。
【0131】
もう1つの例示的な実施態様において、メモリボード104a上のフラッシュメモリチップ118aは、メモリボード104b上のフラッシュメモリチップ118bとは異なるタイプであってもよい。たとえば、メモリボード104aはSLC NANDフラッシュメモリチップを含むことができ、メモリボード104bはMLC NANDフラッシュメモリチップを含むことができる。もう1つの例において、メモリボード104aはあるフラッシュメモリチップ製造元によるフラッシュメモリチップを含むこともあり、メモリボード104bは別のフラッシュメモリチップ製造元によるフラッシュメモリチップを含むこともある。すべて同じタイプのフラッシュメモリチップを備えるか、又は異なるタイプのフラッシュメモリチップを備えるという柔軟性があるため、データストレージデバイス100は、ホスト106に使用されているさまざまなアプリケーション113に合わせて調整することができる。
【0132】
もう1つの例示的な実施態様において、メモリボード104a及び104bは、同じメモリボード上に異なるタイプのフラッシュメモリチップを含むことができる。たとえば、メモリボード104aは、同じPCB上にSLC NANDチップとMLC NANDチップの両方を含むことができる。同様に、メモリボード104bは、SLC NANDチップとMLC NANDチップの両方を含むことができる。このように、データストレージデバイス100は、ホスト106の仕様に適合するように有利に調整されてもよい。
【0133】
もう1つの例示的な実施態様において、メモリボード104a及び104bは、フラッシュメモリ以外のチップを含む、その他のタイプのメモリデバイスを含むことができる。たとえば、メモリボード104a及び104bは、たとえばダイナミックRAM(DRAM)及びスタティックRAM(SRAM)のようなランダムアクセスメモリ(RAM)、並びにその他のタイプのRAM及びその他のタイプのメモリデバイスを含むこともできる。1つの例示的な実施態様において、メモリボード104a及び104bはいずれも、RAMを含むことができる。もう1つの例示的な実施態様において、メモリボードの一方はRAMを含み、もう一方のメモリボードはフラッシュメモリチップを含むことができる。また、メモリボードの一方は、RAM及びフラッシュメモリチップの両方を含むことができる。
【0134】
メモリボード104a及び104b上のメモリモジュール120a及び120bは、それぞれフラッシュメモリチップ118a及び118bに関連する情報を格納するために使用されてもよい。1つの例示的な実施態様において、メモリモジュール120a及び120bは、フラッシュメモリチップのデバイス特性を格納することができる。デバイス特性は、チップがSLCチップ又はMLCのいずれであるか、チップがNAND又はNORチップのいずれであるか、チップセレクトの数、ブロックの数、ブロックあたりのページの数、ページあたりのバイトの数、及びチップの速度を含むことができる。
【0135】
1つの例示的な実施態様において、メモリモジュール120a及び120bは、シリアルEEPROMを含むことができる。EEPROMは、デバイス特性を格納することができる。デバイス特性は、任意の所定のタイプのフラッシュメモリチップに対して1回コンパイルされてもよく、適切なEEPROMイメージがデバイス特性と共に生成されてもよい。メモリボード104a及び104bがコントローラボード102に機能的に接続される場合、デバイス特性は、コントローラ110が制御しているフラッシュメモリチップ118a及び118bのタイプをコントローラ110が自動的に認識できるように、EEPROMから読み取られてもよい。加えて、デバイス特性は、特定の1つ以上のタイプのフラッシュメモリチップ118a及び118bの適切なパラメータにコントローラ110を構成するために使用されてもよい。
【0136】
図7を参照すると、データストレージデバイスでコマンドのグループを処理するためのプロセス700が示される。プロセス700は、ホストからコマンドのグループを受信することであって、グループ内の各々のコマンドがグループの一部としてコマンドを識別するために同じグループ番号を含むこと(710)と、複数のメモリチップを使用してコマンドのグループを処理すること(720)と、コマンドのグループが処理を完了すると、単一割り込みを生成してホストに送信すること(703)とを含むことができる。
【0137】
1つの例示的な実施態様において、コントローラ110は、プロセス700を実行するように構成されてもよい。たとえば、コントローラ110及びそのコンポーネントは、ホスト106からコマンドのグループを受信するように構成されてもよく、ホスト106は、グループの一部としてコマンドを識別するために、グループ内の各々のコマンドのコマンドヘッダの同じグループ番号を割り当てる(710)。コマンドプロセッサ122は、フラッシュメモリチップ118a及び118bを使用してコマンドを処理するように構成されてもよい(720)。コマンドプロセッサ122は、フラッシュメモリチップ118a及び118bを使用して、不連続の順序でコマンドを処理するように構成されてもよい。割り込みプロセッサ124は、コマンドのグループが処理を完了すると、単一割り込みを生成して送信するように構成されてもよい(730)。
【0138】
1つの例示的な実施態様において、コントローラ110は、ホスト106からコマンドの複数のグループを受信するように構成されてもよく、コマンドの各々の異なるグループは、異なるグループ番号を割り当てられる。ドライバ107は、コマンドの異なるグループに割り当てられるグループ番号を追跡するように構成されてもよい。コマンドプロセッサ122は、コマンドの複数のグループを処理するように構成されてもよい。割り込みプロセッサ124は、特定のグループ内のすべてのコマンドが処理を完了すると、コマンドの異なるグループの各々に対して単一割り込みを生成して送信するように構成されてもよい。
【0139】
図8を参照すると、コントローラにおいてコマンドを追跡するためのプロセス800が示される。プロセス800は、コマンドのグループ内のコマンドが処理を開始すると、グループカウンタをインクリメントすること(810)と、コマンドのグループ内のコマンドが処理を完了すると、グループカウンタをデクリメントすること(820)と、グループ内のすべてのコマンドが処理を完了すると、コマンドのグループの単一割り込みを生成して送信すること(830)とを含むことができる。
【0140】
1つの例示的な実施態様において、プロセス800は、コントローラ110及びそのコンポーネントによって実行されてもよい。たとえば、割り込みプロセッサ124は、コマンドのグループ内のコマンドが処理を開始すると、グループカウンタ284をインクリメントするように構成されてもよい(810)。割り込みプロセッサ124は、コマンドのグループ内のコマンドが処理を完了すると、グループカウンタ284をデクリメントするように構成されてもよい(820)。割り込みプロセッサ124は、グループ内のすべてのコマンドが処理を完了すると、コマンドのグループの単一割り込みを生成して送信するように構成されてもよい(830)。1つの例示的な実施態様において、割り込みプロセッサ124は、コマンドのグループ内の最後のコマンドが処理を開始して、グループカウンタがゼロにデクリメントされると、単一割り込みコマンドを生成して送信することができる。
【0141】
本明細書において説明されるさまざまな技法の実施態様は、デジタル電子回路において、又はコンピュータハードウェア、ファームウェア、ソフトウェア、若しくはその組み合わせで実施されてもよい。実施態様は、コンピュータプログラム製品として、すなわち、たとえばプログラム可能プロセッサ、コンピュータ、又は複数のコンピュータなどのデータ処理装置により実行するため、若しくはその動作を制御するための、たとえば機械可読ストレージデバイスなどの情報担体において実体的に具現されるコンピュータプログラムとして、実施されてもよい。上記で説明される(1つ以上の)コンピュータプログラムのような、コンピュータプログラムは、コンパイル済み又は解釈済みの言語を含む任意の形態のプログラミング言語で記述されてもよく、スタンドアロンのプログラムとして、又はモジュール、コンポーネント、サブルーチン、若しくはコンピューティング環境において使用に適した他のユニットとしてなど、任意の形態で配置されてもよい。コンピュータプログラムは、1つのサイトにおける1つのコンピュータ上、又は複数サイトに分散されて通信ネットワークにより相互接続された複数コンピュータ上で実行されるように配置されてもよい。
【0142】
方法ステップは、入力データを操作して出力を生成することにより機能を実行するようにコンピュータプログラムを実行している1つ以上のプログラム可能プロセッサによって実行されてもよい。方法ステップはまた、たとえばフィールドプログラマブルゲートアレイ(field programmable gate array)(FPGA) 又は特殊用途向け集積回路(application-specific integrated circuit)(ASIC)などの特殊用途論理回路によって実行されてもよく、装置は特殊用途論理回路として実施されてもよい。
【0143】
コンピュータプログラムの実行に適したプロセッサは、一例として、汎用及び特殊用途マイクロプロセッサ、及び任意の種類のデジタルコンピュータの1つ以上のプロセッサを含む。一般に、プロセッサは、読み取り専用メモリ又はランダムアクセスメモリ、若しくはその両方から命令及びデータを受信する。コンピュータの要素は、命令を実行するための少なくとも1つのプロセッサと、命令及びデータを格納するための1つ以上のメモリデバイスを含むことができる。一般に、コンピュータはまた、たとえば磁気、光磁気ディスク、又は光ディスクなど、データを格納するための1つ以上の大容量ストレージデバイスを含むことができるか、又は大容量ストレージデバイスとの間でデータを受信又は転送若しくはその両方を行うように機能的に結合されてもよい。コンピュータプログラム命令及びデータを具現するために適した情報担体は、一例として、たとえばEPROM、EEPROM、及びフラッシュメモリデバイスのような半導体メモリデバイス;たとえば内蔵ハードディスク又はリムーバブルディスクのような磁気ディスク;光磁気ディスク;並びにCD-ROM及びDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリを含む。プロセッサ及びメモリは、特殊用途論理回路によって補完されてもよいか、又は特殊用途論理回路に組み込まれてもよい。
【0144】
ユーザとの対話に備えるため、実施態様は、情報をユーザに表示するための、たとえばブラウン管(CRT)又は液晶ディスプレイ(LCD)モニタのような表示デバイス、並びにキーボード及び、たとえばマウス又はトラックボールのような、ユーザがコンピュータに入力を行うことができるポインティングデバイスを有するコンピュータで実施されてもよい。その他の種類のデバイスも、ユーザとの対話を行うために使用されてもよく;たとえば、ユーザに提供されるフィードバックは、たとえば視覚フィードバック、聴覚フィードバック、又は触覚フィードバックのような任意の形態の知覚的フィードバックであってもよく;ユーザからの入力は、音響、発語、又は触覚入力を含む任意の形態で受信されてもよい。
【0145】
実施態様は、たとえばデータサーバのようなバックエンドコンポーネントを含むか、又はたとえばアプリケーションサーバのようなミドルウェアコンポーネントを含むか、又はたとえばユーザが実施態様と対話することができるグラフィカルユーザインターフェイス又はWebブラウザを有するクライアントコンピュータのようなフロントエンドコンポーネントを含むか、若しくはそのようなバックエンド、ミドルウェア、又はフロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムにおいて実施されてもよい。コンポーネントは、たとえば通信ネットワークのようなデジタルデータ通信の任意の形態又は媒体によって相互接続されてもよい。通信ネットワークの例は、ローカルエリアネットワーク(LAN)、及びたとえばインターネットのようなワイドエリアネットワーク(WAN)を含む。
【0146】
説明された実施態様の特定の特徴が本明細書において説明されるように示されたが、当業者には多数の修正、代替、変更、及び等価が考案されよう。したがって、添付の特許請求の範囲は、すべてのそのような修正及び変更を、実施態様の範囲内に含まれるものとして扱うことが意図されていることを理解されたい。

【特許請求の範囲】
【請求項1】
複数のメモリチップ(118a、118b)と、
該メモリチップ(118a、118b)に機能的に結合されるコントローラ(110)とを備え、該コントローラ(110)が、
ホスト(106)からコマンドのグループを受信することであって、該グループ内の各々の該コマンドが該グループの一部として該コマンドを識別するために同じグループ番号を含むことと、
該メモリチップ(118a、118b)を使用して該コマンドの該グループを処理することと、
該コマンドの該グループが処理を完了すると、単一割り込みを生成して該ホスト(106)に送信することと
を行うように配置され構成される、データストレージデバイス(100)。
【請求項2】
前記コントローラ(110)が、
前記ホスト(106)からコマンドの複数のグループを受信することであって、各々の該コマンドが該グループの1つの一部として該コマンドを識別するためにグループ番号を含むことと、
前記メモリチップ(118a、118b)を使用して該コマンドの該グループを処理することと、
該コマンドの各々の該グループが処理を完了すると、単一割り込みを生成して各々の該グループの該ホスト(106)に送信することとを行うように構成される、請求項1記載のデータストレージデバイス(100)。
【請求項3】
前記コントローラ(110)が、前記メモリチップ(118a、118b)を使用して不連続の順序で前記コマンドの前記グループを処理するように構成される、請求項2記載のデータストレージデバイス(100)。
【請求項4】
各々の前記コマンドがコマンドヘッダ(314)を含み、該コマンドヘッダ(314)が前記グループ番号を含む、請求項1から3のいずれか1項記載のデータストレージデバイス(100)。
【請求項5】
前記コマンドの前記グループ内の最後のコマンドが、前記コントローラ(110)に該最後のコマンドを指示するためのフラグをコマンドヘッダ(314)に含む、請求項1から4のいずれか1項記載のデータストレージデバイス(100)。
【請求項6】
前記グループ番号が、前記グループ内の次のコマンドを指し示すために該コマンドのポインタを使用することなく、各々の該コマンドを該グループの一部として識別する、請求項1から5のいずれか1項記載のデータストレージデバイス(100)。
【請求項7】
前記コントローラ(110)が、前記コマンドが該コントローラ(110)によって処理されるときに該コマンドの前記グループを追跡し、該コマンドの該グループが処理を完了すると、前記単一割り込みを生成して前記ホスト(106)に送信するように配置され構成される割り込みプロセッサ(124)を備える、請求項1から6のいずれか1項記載のデータストレージデバイス(100)。
【請求項8】
前記割り込みプロセッサ(124)が、複数のカウンタを備え、各々の該カウンタは前記コントローラ(110)によって受信されるコマンドの異なるグループに割り当てられる、請求項7記載のデータストレージデバイス(100)。
【請求項9】
前記割り込みプロセッサ(124)が複数の異なる割り込み機構を備える、請求項7又は8記載のデータストレージデバイス(100)。
【請求項10】
2つ以上の割り込み機構が同時に有効化される、請求項9記載のデータストレージデバイス(100)。
【請求項11】
前記割り込み機構が、電子透かし割り込み機構、タイムアウト割り込み機構、及びグループ割り込み機構を含む、請求項9又は10記載のデータストレージデバイス(100)。
【請求項12】
前記メモリチップ(118a、118b)がフラッシュメモリチップであり、前記コントローラ(110)がフィールドプログラマブルゲートアレイ(field programmable gate array)(FPGA)コントローラである、請求項1から11のいずれか1項記載のデータストレージデバイス(100)。
【請求項13】
メモリボードであって、その上で前記フラッシュメモリチップが複数のチャネルへと配置され構成され、各々の該チャネルが1つ以上の該フラッシュメモリチップに関連付けられている、前記メモリボードと、
該メモリボードに機能的に接続されるコントローラボード(102)とをさらに備え、該コントローラボード(102)が、
高速インターフェイス(108)と、
該高速インターフェイス(108)を使用して前記ホスト(106)から前記コマンドを受信するように配置され構成されるコントローラ(110)とを備える、請求項12記載のデータストレージデバイス(100)。
【請求項14】
複数のメモリチップ(118a、118b)を有するデータストレージデバイス(100)でコマンドのグループを処理するための方法であって、
ホスト(106)からコマンドのグループを受信すること(710)であって、該グループ内の各々の該コマンドが該グループの一部として該コマンドを識別するために同じグループ番号を含むことと、
複数のメモリチップ(118a、118b)を使用してコマンドの該グループを処理すること(720)と、
該コマンドの該グループが処理を完了すると、単一割り込みを生成して該ホスト(106)に送信すること(730)とを備える、前記方法。
【請求項15】
前記ホスト(106)から前記コマンドの前記グループを受信することが、該ホスト(106)からコマンドの複数のグループを受信することを備え、各々の該コマンドが該グループの1つの一部として該コマンドを識別するためにグループ番号を含み、
該コマンドの該グループを処理することが、前記メモリチップ(118a、118b)を使用して該コマンドの該グループを処理することを備え、
前記単一割り込みを生成して送信することが、各々の該グループが処理を完了すると、該単一割り込みを生成して各々の該グループの前記ホスト(106)に送信することを備える、請求項14記載の方法。
【請求項16】
前記コマンドの前記グループを処理することが、前記メモリチップ(118a、118b)を使用して該コマンドの該グループを不連続の順序で処理することを備える、請求項15記載の方法。
【請求項17】
コントローラ(110)においてコマンドを追跡するための装置であって、
複数のグループカウンタ(284)であって、各々の該グループカウンタが、コントローラ(110)によりグループ内のコマンドが処理を開始するとインクリメントし、該グループ内のコマンドが処理を終了するとデクリメントすることによって、該コントローラ(110)により処理されているコマンドの該グループを追跡するように構成される、前記グループカウンタと、
該グループカウンタ(284)に機能的に結合され、該グループ内のすべての該コマンドが処理を完了すると、各々の該グループカウンタの単一割り込みを生成して送信するように配置され構成される割り込み送信論理(286)とを備える、前記装置。
【請求項18】
同じグループ内の各々の前記コマンドが、同じグループ番号によって識別される、請求項17記載の装置。
【請求項19】
前記複数のグループカウンタ(284)が、該グループカウンタによって追跡されているコマンドが処理を開始すると、該グループカウンタの1つをインクリメントする信号を受信するように構成される、請求項17又は18記載の装置。
【請求項20】
前記複数のグループカウンタ(284)が、該グループカウンタによって追跡されているコマンドが処理を完了すると、該グループカウンタの1つをデクリメントする信号を受信するように構成される、請求項17から19のいずれか1項記載の装置。
【請求項21】
前記割り込み送信論理(286)が、グループ内の最後のコマンドが処理を開始して、最終コマンドに関連付けられている前記グループカウンタがゼロにデクリメントされると、前記単一割り込みを生成して送信するように構成される、請求項17から20のいずれか1項記載の装置。
【請求項22】
コントローラ(110)においてコマンドを追跡するための方法であって、
コマンドのグループ内のコマンドが処理を開始すると、グループカウンタをインクリメントすること(810)と、
コマンドの該グループ内のコマンドが処理を完了すると、該グループカウンタをデクリメントすること(820)と、
該グループ内のすべての該コマンドが処理を完了すると、コマンドの該グループの単一割り込みを生成して送信すること(830)とを備える、前記方法。
【請求項23】
前記単一割り込みを生成して送信することが、前記グループ内の最後のコマンドが処理を開始し、前記グループカウンタがゼロにデクリメントされると、前記単一割り込みを生成して送信することを備える、請求項22記載の方法。
【請求項24】
複数のメモリチップ(118a、118b)と、ホスト(106)と該複数のメモリチップ(118a、118b)間のデータの通信のための複数の物理チャネルとを含むデータストレージデバイス(100)であって、各チャネルが異なる複数の該メモリチップ(118a、118b)に機能的に接続される、前記データストレージデバイス(100)と、
インターフェイス(108)を使用して該データストレージデバイス(100)に機能的に結合されたホスト(106)であって、
複数の該メモリチップ(118a、118b)を使用して該データストレージデバイス(100)により処理するためにコマンドを該データストレージデバイス(100)に送信し、
該コマンドを1つ以上の異なるグループにグループ化して、該グループ内の各々の該コマンドにグループ番号を割り当て、
グループ内の最後のコマンドにマークを付けるように構成されるドライバを備える、前記ホスト(106)とを備える、システム。
【請求項25】
前記データストレージデバイス(100)が、前記グループ内の前記コマンドを処理した後、単一割り込みを生成して前記ホスト(106)に送信するように構成される、請求項24記載のシステム。
【請求項26】
前記複数のメモリチップ(118a、118b)がフラッシュメモリチップを備える、請求項24又は25記載のシステム。
【請求項27】
前記ドライバが、グループ番号の使用を追跡するように構成される、請求項24から26のいずれか1項記載のシステム。
【請求項28】
前記データストレージデバイス(100)が、前記複数のメモリチップ(118a、118b)を使用して不連続の順序で前記コマンドのグループを処理するように構成される、請求項24から27のいずれか1項記載のシステム。
【請求項29】
前記ホスト(106)が、前記データストレージデバイス(100)で1つ以上の割り込み機構を有効化するように構成される、請求項24から28のいずれか1項記載のシステム。
【請求項30】
前記割り込み機構が、電子透かし割り込み機構、タイムアウト割り込み機構、及びグループ割り込み機構を含む、請求項29記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公表番号】特表2012−523619(P2012−523619A)
【公表日】平成24年10月4日(2012.10.4)
【国際特許分類】
【出願番号】特願2012−504717(P2012−504717)
【出願日】平成22年4月1日(2010.4.1)
【国際出願番号】PCT/US2010/029679
【国際公開番号】WO2010/117878
【国際公開日】平成22年10月14日(2010.10.14)
【出願人】(502208397)グーグル インコーポレイテッド (161)
【Fターム(参考)】