(57)【要約】  本開示は、ＮＣＱ（ネイティブ・コマンド・キューイング）コマンドのキューイングデプス（キューデプス）を増やすことによるなど、ストレージへのアクセスにおけるコマンドキュー長を効果的に増やすことに関するシステムおよび手法を含む。一部の実装において、方法は、記憶装置の第１のメモリロケーションへのアクセスを指示する第１のコマンドを受信する工程と、記憶装置の第２のメモリロケーションへのアクセスを指示する第２のコマンドを受信する工程と、第１のコマンドと第２のコマンドのそれぞれに関連するデータ転送カウントおよびメモリアドレスを含む集約型コマンドを構築する工程と、集約型コマンドに関する集約情報を有する情報コマンドを構築する工程と、記憶装置が処理するために情報コマンドと集約型コマンドとを記憶装置に伝達する工程と、を含むことができる。【選択図】図６
2014532237.tif 000002
【特許請求の範囲】
【請求項１】
未処理コマンドに対する最大キュー長を有するプロトコルを用いてインタフェースハードウェアを介してホストと通信するコントローラを備え、
前記コントローラはさらに、ストレージにアクセスするためのコマンドを受信および処理し、
前記受信および処理は、
第１のコマンドを受信する工程と、
前記第１のコマンドを、集約情報を有する情報コマンドであると識別する工程と、
前記集約情報を記憶する工程と、
第２のコマンドを受信する工程と、
前記第２のコマンドを、前記集約情報に関連する集約型コマンドであると識別する工程と、
前記集約型コマンドから前記集約情報を用いて複数のコマンドを生成する工程と、
前記ストレージに関して前記複数のコマンドを処理する工程であって、前記複数のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む工程と、
を含む動作の実行工程を含む、機器。
【請求項２】
前記動作は、
追加コマンドを受信する工程と、
前記追加コマンドのそれぞれを、前記集約情報に関連する集約型コマンドであると識別する工程と、
前記追加コマンドのそれぞれの集約型コマンドから前記集約情報を用いて追加のコマンドを生成する工程と、
前記ストレージに関して前記追加のコマンドを処理する工程であって、前記追加のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む工程と、
をさらに含む、請求項１に記載の機器。
【請求項３】
前記第１のコマンドを、集約情報を有する情報コマンドであると識別する工程は、前記第１のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定する工程を含む、請求項１または２に記載の機器。
【請求項４】
前記第２のコマンドを、前記集約情報に関連する集約型コマンドであると識別する工程は、前記第２のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定する工程を含む、請求項１から３のいずれか一項に記載の機器。
【請求項５】
前記コントローラは、最大キューデプスを有するＮＣＱを使用するＳＡＴＡコントローラである、請求項１から４のいずれか一項に記載の機器。
【請求項６】
前記最大キューデプスは３２個のＮＣＱコマンドであり、前記３２個のコマンドのそれぞれはＴＡＧ０からＴＡＧ３１までのＴＡＧ値によって参照される、請求項５に記載の機器。
【請求項７】
前記３２個のＮＣＱコマンドのある真部分集合は情報コマンドに対応し、前記３２個のＮＣＱコマンドのある真部分集合は集約型コマンドに対応する、請求項６に記載の機器。
【請求項８】
ＴＡＧ０によって参照されるコマンドは、ＴＡＧ１からＴＡＧ７によって参照される集約型コマンドに関する集約データを指定する情報コマンドであり、ＴＡＧ８によって参照されるコマンドは、ＴＡＧ９からＴＡＧ１５までによって参照される集約型コマンドに関する集約データを指定する情報コマンドであり、ＴＡＧ１６によって参照されるコマンドは、ＴＡＧ１７からＴＡＧ２３までによって参照される集約型コマンドに関する集約データを指定する情報コマンドであり、ＴＡＧ２４によって参照されるコマンドは、ＴＡＧ２５からＴＡＧ３１までによって参照される集約型コマンドに関する集約データを指定する情報コマンドである、請求項７に記載の機器。
【請求項９】
前記コントローラと、
前記インタフェースハードウェアの少なくとも一部と、
データを持続的に記憶するメモリを形成し、前記コントローラと通信可能に結合されている、集積回路アセンブリと、
を収容するハウジング、
をさらに備える、請求項１に記載の機器。
【請求項１０】
記憶装置の第１のメモリロケーションへのアクセスを指示する第１のコマンドを受信する工程と、
記憶装置の第２のメモリロケーションへのアクセスを指示する第２のコマンドを受信する工程と、
前記第１のコマンドおよび前記第２のコマンドのそれぞれに関連するデータ転送カウントおよびメモリアドレスを含む集約型コマンドを構築する工程と、
前記集約型コマンドに関する集約情報を有する情報コマンドを構築する工程と、
前記情報コマンドと前記集約型コマンドとを前記記憶装置に伝達する工程と、
を含む方法。
【請求項１１】
前記集約型コマンドを構築する工程は、前記集約型コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含む、請求項１０に記載の方法。
【請求項１２】
前記情報コマンドを構築する工程は、前記情報コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含む、請求項１０または１１に記載の方法。
【請求項１３】
前記記憶装置は、最大キューデプスを有するＮＣＱを使用するＳＡＴＡ機器である、請求項１０から１２のいずれか一項に記載の方法。
【請求項１４】
前記最大キューデプスは３２個のＮＣＱコマンドであり、前記３２個のコマンドのそれぞれはＴＡＧ０からＴＡＧ３１までのＴＡＧ値によって参照される、請求項１３に記載の方法。
【請求項１５】
前記３２個のＮＣＱコマンドのある真部分集合は情報コマンドに対応し、前記３２個のＮＣＱコマンドのある真部分集合は集約型コマンドに対応する、請求項１４に記載の方法。
【請求項１６】
ホストコンピュータと、
記憶装置と、
前記ホストコンピュータと通信可能に結合されたホスト・バス・アダプタと、
を備え、
前記記憶装置は、
前記ホストコンピュータと通信するインタフェースハードウェアと、
未処理コマンドに対する最大キュー長を有するプロトコルを用いて前記インタフェースハードウェアを介して前記ホストコンピュータと通信するコントローラと、
データを持続的に記憶するメモリと、
を有し、
前記ホスト・バス・アダプタは、ドライバを有し、
前記ドライバは、
前記記憶装置の前記メモリへのアクセスを指示するコマンドを受信し、
メモリアドレスおよびデータ転送カウントを含む集約型コマンドを、受信した前記コマンドのそれぞれから構築し、
前記集約型コマンドに関する集約情報を有する情報コマンドを構築し、
前記情報コマンドおよび前記集約型コマンドを前記記憶装置に伝達し、
前記記憶装置に備わる前記コントローラは、前記ドライバによって伝達される前記情報コマンドおよび前記集約型コマンドを受信および処理し、
前記受信および処理は、
前記集約型コマンドから前記集約情報を用いて前記コマンドを取り出す工程と、
前記コマンドに含められた前記データ転送カウントおよび前記メモリアドレスに基づいて前記コマンドを処理する工程と、
を含む動作の実行工程を含む、システム。
【請求項１７】
前記情報コマンドを構築する工程は、前記記憶装置に備わる前記コントローラが前記情報コマンドを受信および処理するときに、前記コントローラが前記コマンドを情報コマンドであることを識別可能になるように、前記情報コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含む、請求項１６に記載のシステム。
【請求項１８】
前記集約型コマンドを構築する工程は、前記記憶装置に備わる前記コントローラが前記集約型コマンドを受信および処理するときに、前記コントローラが前記コマンドを集約型コマンドであることを識別可能になるように、前記集約型コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含む、請求項１６または１７に記載のシステム。
【請求項１９】
前記記憶装置は、最大キューデプスを有するＮＣＱを使用するＳＡＴＡ機器である、請求項１６から１８のいずれか一項に記載のシステム。
【請求項２０】
前記最大キューデプスは３２個のＮＣＱコマンドであり、前記３２個のコマンドのそれぞれはＴＡＧ０からＴＡＧ３１までのＴＡＧ値によって参照される、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照  本開示は、米国仮出願第６１／５４３，９２９号（出願日２０１１年１０月６日、名称「ＵＳＥ  ＩＮＦＯＲＭＡＴＩＯＮ  ＣＯＭＭＡＮＤ  ＴＯ  ＩＮＣＲＥＡＳＥ  ＴＨＥ  Ｑ−ＤＥＰＴＨ  ＯＦ  ＳＡＴＡ  ＮＣＱ  ＣＯＭＭＡＮＤ  ＵＮＬＩＭＩＴＥＤＬＹ」）、および米国仮出願第６１／６１８，２３８号（出願日２０１２年３月３０日、名称「Ｉ／Ｏ  ＡＧＧＲＥＧＡＴＩＯＮ  ＦＯＲ  ＴＨＥ  ＳＣＳＩ  ＯＦ  ＡＮ  ＳＳＤ  ＤＥＶＩＣＥ」）の優先権を主張し、その全内容を参照によってここに援用する。
【０００２】
本開示は、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）のＮＣＱ（ネイティブ・コマンド・キューイング）コマンドのキューイングデプス（キューデプス）を増やすことによるなど、ストレージへのアクセスにおけるコマンドキュー長を効果的に増やすことに関するシステムおよび手法について記載する。
【背景技術】
【０００３】
多くの電子機器は、下位機器の動作を制御するために、また機能や動作において高い柔軟性を実現するために、組み込みシステムを備えている。その組み込みシステムを動作させるオペレーティングシステムのプログラムコード、発行されるコマンド、および重要データを記憶するため、一般的に、組み込みシステムの一部として不揮発性メモリが備わっている。一部の組み込みシステムは、不揮発性メモリとしてソリッド・ステート・メモリ（例えば、ＥＥＰＲＯＭ（電気的に消去可能な読み出し専用メモリ））を使用する。ソリッド・ステート・メモリは、アプリケーションを高速化してデータアクセス時間を増やすために使用され得る。またソリッド・ステート・メモリは、情報を不揮発的に記憶するために都合よく書き込みもしくは再書き込みされ得る。
【０００４】
コンピュータシステムでは、ホスト・バス・アダプタが、ホストシステム（例えばコンピュータ）と他のネットワーク機器および記憶装置（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスクドライブなど）とを接続することができる。ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）は、ホストから記憶装置へのデータや情報の転送の制御に用いられるインタフェースプロトコルである。ネイティブ・コマンド・キューイングはＳＡＴＡプロトコルの拡張機能であり、受信する読み書きコマンドの実行順序を記憶装置がその内部で最適化することを可能にする。ネイティブ・コマンド・キューイング・プロトコルには一般に最大キュー長がある。論理ブロックアドレス（ＬＢＡ）の値が隣り合うシーケンシャルコマンドに対してはコマンド集約が可能である。すなわち、ＬＢＡが隣り合うシーケンシャルコマンドは、最初のコマンドのＬＢＡ値を用い、かつデータ転送カウントをそれらのシーケンシャルコマンドに対する転送カウントの合計値に設定することによって、１つのコマンドに統合できる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本開示は、ＮＣＱ（ネイティブ・コマンド・キューイング）コマンドのキューイングデプス（キューデプス）を増やすことによるなど、ストレージへのアクセスにおけるコマンドキュー長を効果的に増やすことに関するシステムおよび手法を含む。
【課題を解決するための手段】
【０００６】
ある実装において、コントローラは、未処理コマンドに対する最大キュー長を有するプロトコルを用いてインタフェースハードウェアを介してホストと通信するように構成されている。前記コントローラは、ストレージにアクセスするためのコマンドを受信および処理するように構成され、前記受信および処理は、第１のコマンドを受信する工程と、前記第１のコマンドを、集約情報を有する情報コマンドであると識別する工程と、前記集約情報を記憶する工程と、第２のコマンドを受信する工程と、前記第２のコマンドを、前記集約情報に関連する集約型コマンドであると識別する工程と、前記集約型コマンドから前記集約情報を用いて複数のコマンドを生成する工程と、前記ストレージに関して前記複数のコマンドを処理する工程であって、前記複数のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む工程と、を含む。
【０００７】
これらおよび他の実装は、下記の特徴の１つ以上を含んでいてもよい。前記コントローラは、追加コマンドを受信し、前記追加コマンドのそれぞれを、前記集約情報に関連する集約型コマンドであると識別し、前記追加コマンドのそれぞれの集約型コマンドから前記集約情報を用いて追加のコマンドを生成し、前記ストレージに関して前記追加のコマンドを処理することができ、前記追加のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む。前記コントローラは、前記第１のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定することにより、前記第１のコマンドを、集約情報を有する情報コマンドであると識別することができる。前記コントローラは、前記第２のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定することにより、前記第２のコマンドを、前記集約情報に関連する集約型コマンドであると識別することができる。前記コントローラは、最大キューデプスを有するＮＣＱを使用するＳＡＴＡコントローラでありうる。前記最大キューデプスは３２個のＮＣＱコマンドとすることができ、前記３２個のコマンドのそれぞれはＴＡＧ０からＴＡＧ３１までのＴＡＧ値によって参照することができる。前記３２個のＮＣＱコマンドのある真部分集合は情報コマンドに対応することができ、前記３２個のＮＣＱコマンドのある真部分集合は集約型コマンドに対応することができる。ＴＡＧ０によって参照されるコマンドは、ＴＡＧ１からＴＡＧ７によって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。ＴＡＧ８によって参照されるコマンドは、ＴＡＧ９からＴＡＧ１５までによって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。ＴＡＧ１６によって参照されるコマンドは、ＴＡＧ１７からＴＡＧ２３までによって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。ＴＡＧ２４によって参照されるコマンドは、ＴＡＧ２５からＴＡＧ３１までによって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。前記コントローラはさらに、前記インタフェースハードウェアの少なくとも一部と、データを持続的に記憶するメモリを形成する集積回路アセンブリとともに、ハウジング内に収容することができる。ここに、前記集積回路アセンブリは前記コントローラと通信可能に結合されている。
【０００８】
ある実装において、方法は、記憶装置の第１のメモリロケーションへのアクセスを指示する第１のコマンドを受信する工程と、記憶装置の第２のメモリロケーションへのアクセスを指示する第２のコマンドを受信する工程と、前記第１のコマンドと前記第２のコマンドのそれぞれに関連するデータ転送カウントおよびメモリアドレスを含む集約型コマンドを構築する工程と、前記集約型コマンドに関する集約情報を有する情報コマンドを構築する工程と、前記情報コマンドと前記集約型コマンドとを前記記憶装置に伝達する工程と、を含む。
【０００９】
これらおよび他の実装は、下記の特徴の１つ以上を含んでいてもよい。前記集約型コマンドを構築する工程は、前記集約型コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含み得る。前記情報コマンドを構築する工程は、前記情報コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含み得る。前記記憶装置は、最大キューデプスを有するＮＣＱを使用するＳＡＴＡ機器でありうる。前記最大キューデプスは３２個のＮＣＱコマンドとすることができ、前記３２個のコマンドのそれぞれはＴＡＧ０からＴＡＧ３１までのＴＡＧ値によって参照される。前記３２個のＮＣＱコマンドのある真部分集合は情報コマンドに対応することができ、前記３２個のＮＣＱコマンドのある真部分集合は集約型コマンドに対応することができる。
【００１０】
ある実装において、システムは、ホストコンピュータと、記憶装置であって、前記ホストと通信するように構成されたインタフェースハードウェアと、未処理コマンドに対する最大キュー長を有するプロトコルを用いて前記インタフェースハードウェアを介して前記ホストと通信するように構成されたコントローラと、データを持続的に記憶するメモリと、を備えた記憶装置と、前記ホストと通信可能に結合されたホスト・バス・アダプタであって、前記記憶装置の前記メモリへのアクセスを指示するコマンドを受信し、メモリアドレスおよびデータ転送カウントを含む集約型コマンドを、受信した前記コマンドのそれぞれから構築し、前記集約型コマンドに関する集約情報を有する情報コマンドを構築し、前記情報コマンドと前記集約型コマンドとを記憶装置に伝達するように構成されたドライバを備えたホスト・バス・アダプタとを含む。前記記憶装置に備わる前記コントローラは、前記記憶装置ドライバによって伝達される前記集約型コマンドおよび前記情報コマンドを受信および処理するように構成され、前記受信および処理は、前記集約型コマンドから前記集約情報を用いて前記コマンドを取り出す工程と、前記コマンドに含められた前記データ転送カウントおよび前記メモリアドレスに基づいて前記コマンドを処理する工程と、を含む動作の実行工程を含む。
【００１１】
これらおよび他の実装は、下記の特徴の１つ以上を含んでいてもよい。前記情報コマンドを構築する工程は、前記情報コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含むことができ、前記設定する工程は、前記記憶装置に備わる前記コントローラが前記情報コマンドを受信および処理するときに、前記コントローラが前記コマンドを情報コマンドであることを識別可能にする。前記集約型コマンドを構築する工程は、前記集約型コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含むことができ、前記記憶装置に備わる前記コントローラが前記集約型コマンドを受信および処理するときに、前記コントローラが前記コマンドを集約型コマンドであることを識別可能にする。前記記憶装置は、最大キューデプスを有するＮＣＱを使用するＳＡＴＡ機器でありうる。前記最大キューデプスは３２個のＮＣＱコマンドとすることができ、前記３２個のコマンドのそれぞれはＴＡＧ０からＴＡＧ３１までのＴＡＧ値によって参照することができる。
【００１２】
記載のシステムおよび手法は、本明細書に開示される構造的手段およびその構造的等価物などの、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせにおいて実現することができる。これには、１つ以上のデータ処理装置（例えば、プログラマブルプロセッサを備えた信号処理機器）に方法動作を実行させることが可能なプログラムを組み入れた少なくとも１つのコンピュータ可読媒体が含まれ得る。したがって、開示される方法、システム、または装置からプログラム実装が実現可能であり、また開示されるシステム、コンピュータ可読媒体、または方法から装置実装が実現可能である。同様に、開示されるシステム、コンピュータ可読媒体、または装置から方法実装が実現可能であり、また開示される方法、コンピュータ可読媒体、または装置からシステム実装が実現可能である。
【００１３】
記載のシステムおよび手法は、ＮＣＱ（ネイティブ・コマンド・キューイング）コマンドに対するコマンドキューイングデプス（キューデプス）がＮＣＱプロトコルによって規定される最大コマンド数を超えて増大する結果をもたらし得る。例えば、ＳＡＴＡ機器に対するＮＣＱプロトコルは現在、３２コマンドの最大キューデプスを規定している。以下に詳しく述べるように、ＮＣＱコマンドを集約型コマンドに集約し、かつ集約型コマンドに対する集約を情報コマンドにおいて提供することにより、ＳＡＴＡ機器に対するＮＣＱは３２コマンドのプロトコル上限を超えるキューデプスで動作し得る。情報コマンドおよび集約型コマンドが標準的なＳＡＴＡ仕様に基づく場合、下記のシステムおよび手法は、専用のホスト・バス・アダプタ（ＨＢＡ）ハードウェアを用いなくとも何らかの適切なＳＡＴＡ  ＨＢＡを用いて実現され得る。さらに、ランダムな論理ブロックアドレス（例えばシーケンシャルでないＬＢＡ）を有する小サイズのデータ転送コマンド（例えば５ｋｂｓ以下）を処理するのに必要となるオーバーヘッドは、通常のＮＣＱを集約型コマンドに集約して、ＳＡＴＡ  ＮＣＱプロトコルに規定されるキューデプスを増大させることによって低減し得る。
【００１４】
１つ以上の実装の詳細を添付の図面および以下の説明において記載する。
【００１５】
他の特徴および効果は説明と図面、および特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【００１６】
【図１】ソリッドステートドライブのブロック図である。
【００１７】
【図２】ストレージシステムの例を示す図である。
【００１８】
【図３】ＮＣＱコマンドの構造の例を示す図である。
【００１９】
【図４Ａ】情報コマンドの構造の例を示す図である。
【００２０】
【図４Ｂ】集約型コマンドの構造の例を示す図である。
【００２１】
【図５】ＮＣＱコマンドの集約処理の例を示す図である。
【００２２】
【図６】集約型ＮＱＣコマンドおよび情報ＮＣＱコマンドの処理の例を示す図である。
【発明を実施するための形態】
【００２３】
各種の図面において同じ参照符号は同じ要素を示す。
【００２４】
フラッシュメモリの概要  図１は、ソリッドステートドライブ（ＳＳＤ）１０２のブロック図である。ＳＳＤ１０２は、データを持続的に記憶するメモリを形成する集積回路アセンブリ１０８を備える。一部の実装において、集積回路アセンブリ１０８は「ＮＡＮＤ」型のフラッシュメモリでありうる。ＮＡＮＤフラッシュメモリは、例えばＮＯＲ型のフラッシュメモリよりも一般に消去および書き込み時間が短く、密度が高く、ビット単価が低く、かつ耐久性に優れている。ＮＡＮＤフラッシュメモリは、１つ以上の選択トランジスタとともに個々のビット線と基準電位との間に接続される、１６または３２など、２つより多いメモリセルの直列ストリングを用いてセルの列を形成し得る。かかる列の間のセルにわたってワード線が延伸し得る。ある列内のある１つのセルは、ストリング中の残りのセルをオンにすることによって、書き込み中に読み出しおよび検証を実施し得る。その際、ストリングを流れる電流が、アドレシングされたセルに蓄積される電荷量に依存するようにする。
【００２５】
ＳＳＤ１０２は、集積回路アセンブリ１０８と通信するために制御回路１０６を備える。一部の実装において、制御回路１０６はファームウェアレベルのコードを実行する組み込みプロセッサを備え、それによって集積回路アセンブリ１０８とホストシステム（図示せず）とを橋渡しする。例えば、制御回路１０６は、ＮＡＮＤメモリと通信するためにＮＡＮＤフラッシュＩ／Ｏ（入力／出力）コントローラを備えてもよく、またＮＡＮＤフラッシュメモリに記憶されるデータへのシーケンシャルアクセスのみを許容してもよい。
【００２６】
ＳＳＤ１０２は、ＳＳＤ１０２をホスト（図示せず）のホスト・バス・アダプタに接続するためにインタフェースハードウェア１０４を備える。一部の実装において、インタフェースハードウェア１０４は１つ以上の標準コネクタを備える。標準コネクタには、例えば、ＳＡＴＡ、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＰＣＭＣＩＡ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ  Ｍｅｍｏｒｙ  Ｃａｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ａｓｓｏｃｉａｔｉｏｎ）、およびＩＥＥＥ−１３９４（Ｆｉｒｅｗｉｒｅ）などがあるが、これには限定されない。一部の実装において、インタフェースハードウェア１０４は、それぞれ特定の機能に対応する複数のピンを備えていてもよい。例えば、電源用、接地用、送信用、受信用、転送完了用、通信用などのピンである。
【００２７】
なお、ソリッドステートドライブ１０２の例ではＮＡＮＤフラッシュメモリについて記載したが、これに限定されず、一例として、ＮＯＲ型フラッシュＥＥＰＲＯＭ、ＡＮＤ型フラッシュＥＥＰＲＯＭ、ＤｉＮＯＲ型フラッシュＥＥＰＲＯＭ、シリアルフラッシュＥＥＰＲＯＭ、ＤＲＡＭ、ＳＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＦＲＡＭ（登録商標）、ＭＲＡＭ、およびＰＣＲＡＭなど、他のメモリタイプも用いられ得る。
【００２８】
ストレージシステム  図２は、ストレージシステム２００の例を示す。図２に示すように、システム２００は、ホスト・バス・アダプタ２０４を用いて記憶装置２０８と通信するホスト２０２を備える。ホスト・バス・アダプタ２０４のさまざまな例として、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＰＣＭＣＩＡ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ  Ｍｅｍｏｒｙ  Ｃａｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ａｓｓｏｃｉａｔｉｏｎ）、ＩＥＥＥ−１３９４（Ｆｉｒｅｗｉｒｅ）、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、ＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）などの物理インタフェース、およびＭＭＣ（ＭｕｌｔｉＭｅｄｉａ  Ｃａｒｄ）などのメモリカード用インタフェースがある。
【００２９】
記憶装置２０８のさまざまな例として、ソリッドステートドライブ（例えば図１のソリッドステートドライブ１０２）、ハードディスクドライブ（ＨＤＤ）、光ディスクドライブなどがある。一部の実装において、記憶装置２０８はファームウェア２１０を含む。ファームウェア２１０は、記憶装置２０８に含まれるコントローラ上で実行され、記憶装置２０８のメモリ要素とホスト・バス・アダプタ２０４のインタフェースとを橋渡しするように動作可能なコードでありうる。
【００３０】
一部の実装において、ホスト・バス・アダプタ２０４は、記憶装置２０８に向けられた１つ以上のサービス要求またはコマンド（例えば読み出し要求及び書き込み要求）を受信および処理するために記憶装置ドライバ２０６を備える。例えば、記憶装置ドライバ２０６は、記憶装置２０８のメモリに記憶されるデータの記憶および取り出しをホスト２０２からのコマンドに応答して管理および制御するように構成され得る。すなわち、記憶装置ドライバ２０６は、ホスト２０２と記憶装置２０８との間のコマンドおよびデータのフローを制御し得る。
【００３１】
一部の実装において、記憶装置ドライバ２０６はマイクロプロセッサ（図示せず）の制御下にあるマイクロコンピュータシステムの一部である。例えば、記憶装置ドライバ２０６は、ＲＯＭ（ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、ＲＡＭ（ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、およびその他の内部回路を備えることができる。
【００３２】
ＮＣＱ（ネイティブ・コマンド・キューイング）は、記憶装置に対応する複数のコマンドを同時に処理待ち状態にできるコマンドプロトコルである。ＮＣＱ準拠の記憶装置は、受信する読み書きコマンドの実行順序をその内部で最適化することができる。例えば、ＮＣＱをサポートする記憶装置ドライバと記憶装置は、キューを保持するにあたり、未処理および完了コマンドに関する必要なトラッキングメカニズムとともに、未処理コマンドの再スケジューリングまたは順序の入れ替えを動的に行うことができる。一部の実装において、ＮＣＱはまた、記憶装置が別のコマンドに対するデータを探している間に、ホストが記憶装置に追加コマンドを発行できるメカニズムを備える。一部の実装において、記憶装置のコマンドキュー内でのコマンド順序のインテリジェントな入れ替えは、キューイングされる作業負荷のパフォーマンス向上に役立ち得る。例えば、ハードディスクドライブ（ＨＤＤ）の場合、順序のインテリジェントな入れ替えによってドライブヘッドの不要な動き量を削減できるため、複数の同時読み書き要求が処理待ち状態にあるときの作業負荷に対して、パフォーマンスが向上するとともに、ドライブの摩耗が低減される。
【００３３】
一部の実装では、小サイズのデータ転送（例えば、１コマンド当たり４ＫＢ以下）に対してＮＣＱを使用する場合、コマンド処理の総時間の大部分はコマンド処理のオーバーヘッドに費やされるため、ＮＣＱの全体的なパフォーマンスが低下する。論理ブロックアドレス（ＬＢＡ）の値が隣り合うシーケンシャルな読み出しまたは書き込みコマンドについては、最初のコマンドのＬＢＡ値を使用し、かつデータ転送カウントをそれら複数のコマンドの合計値に設定することにより、複数の読み出しまたは書き込みコマンドを１つの読み出しまたは書き込みコマンドに統合することができ得る。この手法は一種のコマンド集約である。しかし、ＬＢＡ値が隣り合わないランダムなコマンドの場合、そのようなコマンド統合はそれほど効果的でない場合がある。例えば、ランダムなコマンドは通常、ランダムなＬＢＡ値を有する。そのため、シーケンシャルコマンドの統合で行ったように、単純に、最初のコマンドのＬＢＡ値を使用し、かつデータ転送カウントをそれら複数のコマンドの合計値に設定することによって、複数のランダムな読み出しまたは書き込みコマンドを１つの読み出しまたは書き込みコマンドに統合することは、不可能ではないにせよ、より困難でありうる。
【００３４】
ランダムなＬＢＡを有する小サイズのデータ転送のパフォーマンスを改善するには、コマンド集約ならびにＮＣＱのコマンドキューイングデプスの増大をより汎用的かつインテリジェントなやり方で実施すればいい。例えば、ＮＣＱプロトコルに対して規定される最大数を超えるコマンドを送信するには、複数のＮＣＱコマンドを１つのＮＣＱコマンドに集約すればいい。
【００３５】
ＳＡＴＡプロトコルでは、ＮＣＱのコマンドキューイングデプス（キューデプス）は３２コマンドである。すなわち、ある任意の時刻において、合計３２個のＮＣＱコマンドが記憶装置に接続されるＳＡＴＡによる実行を待つことができる。一部の実装において、各ＮＣＱコマンドはＴＡＧに関連づけられている。ここに、ＴＡＧの値は０から３１までの整数である。ＴＡＧは、ある特定の未処理のＮＣＱコマンドを識別するための簡単な仕組みである。未処理の各ＮＣＱコマンドは一意のＴＡＧ値を有する。３２個を超えるＳＡＴＡ  ＮＣＱコマンドを送信するには、複数のＮＣＱコマンドを１つのＮＣＱコマンドに内包し、それを１つのＴＡＧで参照するようにすればいい。
【００３６】
一部の実装において、ＮＣＱコマンドはコマンドの中身を指定するフレーム情報構造（ＦＩＳ）を含む。例えば、ＳＡＴＡ  ＮＣＱ読み出しまたは書き込みコマンドは、２０バイトから成るＦＩＳを含み得る。一部の実装において、ＳＡＴＡ  ＮＣＱコマンドの最重要部分は、メモリロケーションに対応する論理ブロックアドレス（ＬＢＡ）番号およびデータ転送カウントを含む。一部の実装において、ＳＡＴＡ  ＮＣＱコマンドのＦＩＳに含まれるＬＢＡ番号およびデータ転送カウントは、コマンド内の８バイトのデータに対応する。例えば、６バイトがＬＢＡデータ用で、２バイトが転送カウントデータ用である。
【００３７】
一部の実装において、ドライバ（例えば、記憶装置ドライバ２０６）がＮＣＱコマンドを集約し、その情報を記憶装置（例えば、記憶装置２０８）に伝達する。例えば、記憶装置ドライバは、複数のＮＣＱコマンドを１つのＴＡＧによって参照される１つの集約型ＮＣＱコマンドに集約することができる。一部の実装において、記憶装置ドライバは、その集約型コマンドが集約型コマンドであることを識別可能にするために、集約型コマンドのＦＩＳ内のあるビットを設定する。例えば、あるコマンドが集約型コマンドであることを識別可能にするため、記憶装置ドライバは集約型コマンドのＦＩＳの制御レジスタ内のあるビットを設定することができる。
【００３８】
さらに、記憶装置ドライバは、１つのＴＡＧによって参照され、かつ複数の集約型コマンドに関する集約データを含む情報コマンドを構築することができる。一部の実装において、記憶装置ドライバは、その情報コマンドが情報コマンドであることを識別可能にするために、情報コマンドのＦＩＳ内のあるビットを設定する。例えば、記憶装置ドライバは、そのコマンドが情報コマンドであることを識別可能にするために、情報コマンドのＦＩＳの制御レジスタ内のあるビットを設定することができる。一部の実装では、コマンドが情報コマンドまたは集約型コマンドであることを識別するために他の基準が必要になり得る。例えば、情報コマンドは、情報コマンドのＦＩＳ内のすべてのＬＢＡレジスタがゼロの値に設定されているものであると規定することもできる。
【００３９】
以下は、通常コマンド、情報コマンド、および集約型コマンドの種別を指定する例を示すコマンドテーブルである。
【表１】
2014532237.tif 000003
【００４０】
図３は、ＳＡＴＡ  ＮＣＱコマンドの構造３００の例を示す。図３において、ＳＡＴＡ  ＮＣＱコマンドの構造３００に対する最大キューデプスは３２コマンドと示されている。一部の実装において、記憶装置ドライバ（例えば、記憶装置ドライバ２０６）は、ＴＡＧ０（３０２で特定されるもの）ならびにＴＡＧ８、１６、および２４を用いて情報コマンドを参照し、ＴＡＧ１（３０４で特定されるもの）ならびにＴＡＧ２〜７、９〜１５、１７〜２３、および２５〜３１を用いて集約型コマンドを送信する。情報コマンドおよび集約型コマンドは図３に示すＴＡＧに限定される必要はない。むしろ、コマンドの構造３００におけるあらゆるＴＡＧが情報コマンドまたは集約型コマンドのいずれかに対応し得ると理解するべきである。
【００４１】
一部の実装において、ＴＡＧ０の情報コマンドは、ＴＡＧ１からＴＡＧ７に対応する集約型コマンドの集約データを指定する。同様のスキームはＴＡＧ８、１６、および２４に対応する情報コマンドにも適用される。例えば、ＴＡＧ８の情報コマンドは、ＴＡＧ９からＴＡＧ１５に対応する集約型コマンドの集約データを指定できる。ＴＡＧ１６の情報コマンドは、ＴＡＧ１７からＴＡＧ２３に対応する集約型コマンドの集約データを指定できる。さらに、ＴＡＧ２４の情報コマンドは、ＴＡＧ２５からＴＡＧ３１に対応する集約型コマンドの集約データを指定できる。
【００４２】
図４Ａは情報コマンドに対する構造４０２の例を示す。一部の実装において、構造４０２はＴＡＧ０（例えば図３に示す３０２）によって指定される情報コマンドに対応することができ、５１２バイトのデータを有し得る。情報コマンドは５１２バイトのデータに限定されず、ＮＣＱのキューデプスをある所与のシステムにおいて所望のコマンド数に増大させるために必要なあらゆる適切な大きさでありうる。
【００４３】
図４Ｂは集約型コマンドに対する情報構造４５２の例を示す。一部の実装において、構造４５２はＴＡＧ１（例えば図３に示す３０４）によって指定される集約型コマンドに対応し、６４バイトのデータを有する。集約型コマンドは６４バイトのデータに限定されず、キューデプスをある所与のシステムにおいて所望のコマンド数に増大させるために必要なあらゆる適切な大きさでありうる。一部の実装において、ＮＣＱコマンドに対するＬＢＡおよび転送カウントは合計８バイトであり、ＮＣＱコマンドに対するデータとして使用される。このように、情報構造４５２は１つのＮＣＱ  ＴＡＧに対応する８つのＮＣＱコマンドを識別することができる。すなわち、１つのＮＣＱコマンドは１つのＮＣＱ  ＴＡＧの名の下に８つのＮＣＱコマンドを含むことができる。
【００４４】
一部の実装では、図４Ａおよび図４Ｂに示す構造の例、および３２のＮＣＱキューデプスを用い、３２個のＮＣＱコマンドのある真部分集合は情報コマンドに対応することができ、３２個のＮＣＱコマンドのある真部分集合は集約型コマンドに対応することができる。例えば、３２個のコマンドのうちの４つがＴＡＧ（例えば、ＴＡＧ０、ＴＡＧ８，ＴＡＧ１６、およびＴＡＧ２４）によって識別でき、かつ情報コマンドに対応することができる。また、残りの２８個のコマンドは残りの２８個のＴＡＧによって識別でき、かつ集約型コマンドに対応することができる。一部の実装において、集約型コマンドのそれぞれは８つの通常のＮＣＱコマンドを表す。３２個のＮＣＱコマンドのうちの４つの真部分集合が情報コマンドに対応し、かつ３２個のＮＣＱコマンドのうちの２８の真部分集合が集約型コマンドに対応し、集約型コマンドのそれぞれが８つの通常のＮＣＱコマンドを表す例では、得られるＮＣＱのキューデプスは合計２２４のＮＣＱコマンドとすることができる。
【００４５】
一部の実装において、１つのＮＣＱ  ＴＡＧのもとでさらに多いＮＣＱコマンドを集約する必要がある場合、集約型コマンドに関する集約データの増加とともに、情報コマンドのデータ長を増やすことができる。一般に、情報コマンドには任意の適切な数の集約型コマンドを指定でき、任意の適切な数のＮＣＱコマンドを１つの集約型コマンドに集約することができる。
【００４６】
図５は、ＮＣＱコマンドを集約する処理５００の例を示す。一部の実装において、記憶装置ドライバ（例えば、記憶装置ドライバ２０６）は、図５に記載するＮＣＱコマンドの集約のために処理５００を実行する。５０２において、プロセスは、記憶装置の第１のメモリロケーションへのアクセスを指示する第１のコマンドを受信する。一部の実装において、第１のコマンドは、記憶装置（例えば、記憶装置２０８）のメモリにアクセスするためにホストシステム（例えば、ホスト２０２）から発せられる読み出しまたは書き込み要求でありうる。５０４において、プロセスは、記憶装置の第２のメモリロケーションへのアクセスを指示する第２のコマンドを受信する。一部の実装において、第２のコマンドは、記憶装置（例えば、記憶装置２０８）のメモリにアクセスするためにホストシステム（例えば、ホスト２０２）から発せられる読み出しまたは書き込み要求でありうる。一部の実装において、第１のコマンドと第２のコマンドは、記憶装置の非シーケンシャルまたはランダムな論理ブロックアドレスへのアクセスを要求する。例えば、第１のコマンドと第２のコマンドは、連続するコマンドである必要も、また（例えば、ホスト２０２から）連続して受信される必要もない。
【００４７】
５０６において、プロセスは、メモリアドレスおよびデータ転送カウントを含む集約型コマンドを、第１のコマンドと第２のコマンドのそれぞれから構築する。一部の実装において、その集約型コマンドはＳＡＴＡの通常の読み出しまたは書き込みＮＣＱコマンドであって、かつそのコマンドが集約型コマンドであることを識別可能にするある特定のビットが、そのコマンドに対するフレーム情報構造において設定されているコマンドでありうる。例えば、記憶装置ドライバ２０６は、あるＳＡＴＡ  ＮＣＱ  ＴＡＧに対応する集約型コマンドであって、５０２において受信される第１のコマンドに関連する論理ブロックアドレスおよびデータ転送カウント、並びに５０４において受信される第２のコマンドに関連する論理ブロックアドレスおよびデータ転送カウントを含むコマンドを構築することができる。
【００４８】
５０８において、プロセスは、集約型コマンドに関する情報を有する情報コマンドを構築する。一部の実装において、その情報コマンドはＳＡＴＡの通常の読み出しまたは書き込みＮＣＱコマンドであって、かつそのコマンドが情報コマンドであることを識別可能にするある特定のビットが、そのコマンドに対するフレーム情報構造において設定されているコマンドでありうる。例えば、記憶装置ドライバ２０６は、あるＳＡＴＡ  ＮＣＱ  ＴＡＧに対応する情報コマンドであって、集約型コマンド（例えば、ある異なるＴＡＧに対応する集約型ＮＣＱコマンド）に関する集約データを含むコマンドを構築することができる。
【００４９】
５１０において、プロセスは、情報コマンドと集約型コマンドとを記憶装置に伝達する。一部の実装において、記憶装置ドライバ２０６は、記憶装置２０８の制御回路で実行されるファームウェアに対して情報コマンドと集約型コマンドとを伝達する。一部の実装において、情報コマンドと集約型コマンドとが記憶装置に伝達される順序は何でもよい。
【００５０】
図６は、集約型ＮＣＱコマンドおよび情報ＮＣＱコマンドを処理する処理６００の例を示す。一部の実装において、記憶装置に実装されるファームウェア（例えば、ソリッドステートドライブ１０２の制御回路１０６によって実行されるファームウェア）は、図６に記載される、集約型ＮＣＱコマンドおよび情報ＮＣＱコマンドを処理する処理を実行するように構成され得る。６０２において、プロセスは第１のコマンドを受信する。一部の実装において、第１のコマンドはＳＡＴＡ  ＮＣＱコマンドであり、記憶装置のファームウェア（例えば、ソリッドステートドライブ１０２の制御回路１０６において実行されるファームウェア）によって受信される。
【００５１】
６０４において、プロセスは、第１のコマンドを、集約情報を有する情報コマンドであると識別する。一部の実装において、第１のコマンドはＳＡＴＡ  ＮＣＱ情報コマンドであり、プロセスは、そのコマンドに対するフレーム情報構造においてある特定ビットが設定されているかどうか判定することによって、第１のコマンドを情報コマンドであると識別する。
【００５２】
６０６において、プロセスは集約情報を記憶する。例えば、集約情報は、制御回路１０６が後続処理に利用できるように制御回路１０６のメモリに記憶することができる。
【００５３】
６０８において、プロセスは第２のコマンドを受信する。一部の実装において、第２のコマンドはＳＡＴＡ  ＮＣＱコマンドであり、記憶装置のファームウェア（例えば、ソリッドステートドライブ１０２の制御回路１０６において実行されるファームウェア）によって受信される。
【００５４】
６１０において、プロセスは、第２のコマンドを集約情報に関連する集約型コマンドであると識別する。一部の実装において、第２のコマンドはＳＡＴＡ  ＮＣＱ集約型コマンドであり、プロセスは、そのコマンドに対するフレーム情報構造においてある特定ビットが設定されているかどうか判定することによって、第２のコマンドを集約型コマンドであると識別する。
【００５５】
６１２において、プロセスは、集約型コマンドから集約情報を用いて複数のコマンドを生成する。例えば、機器が集約型コマンドを受信および処理するときに、機器はその集約型コマンドに関連する複数のコマンドを集約情報を用いて識別することができる。機器はさらに、その複数のコマンドに対応する、いくつかの異なるＬＢＡセグメントおよび関連する転送カウントを識別することができる。
【００５６】
６１４において、プロセスは、ストレージに関してその複数のコマンドを処理する。複数のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む。一部の実装において、アドレスは集積回路アセンブリ１０８のメモリロケーションに対応し、コマンドは指定されるメモリロケーションにアクセスするように制御回路１０６によって処理される。
【００５７】
いくつかの実施形態についてこれまで詳しく説明してきた。これに対して多くの改変が可能である。開示される主題は、本明細書に記載する機能的動作を含め、本明細書に開示される構造的手段およびその構造的等価物などの、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせにおいて実現することができる。これには、１つ以上のデータ処理装置に記載の動作を実行させることが可能なプログラム（コンピュータ可読媒体内にエンコードされたプログラムなどであり、コンピュータ可読媒体はメモリデバイス、記憶装置、機械可読記憶基板、もしくはその他の物理的な機械可読媒体、またはそれらの１つ以上の組み合わせでありうる）が潜在的に含まれる。
【００５８】
「データ処理装置」という用語はデータを処理するあらゆる装置、機器、および機械を包含し、一例として、１つのプログラマブルプロセッサ、１台のコンピュータ、または複数のプロセッサもしくはコンピュータを含む。装置は、ハードウェアのほか、当該コンピュータプログラムに対して実行環境を生成するコード（例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの１つ以上の組み合わせを構成するコード）を含み得る。
【００５９】
本明細書は多くの具体的内容を含むが、それらを特許請求の範囲に規定され得る範囲を限定するものと解釈するべきではなく、特定の実施形態に特有でありうる特徴の説明であると解釈するべきである。複数の個別の実施形態の状況において本明細書に記載する一部の特徴は、ある１つの実施形態において併用して実装することもできる。逆に、ある１つの実施形態の状況において記載するさまざまな特徴を、複数の実施形態において別々に、あるいは適切に部分的に組み合わせて実装することもできる。さらに、特徴はある組み合わせで作用するものとして記載される、あるいは場合によっては特許請求の範囲において最初にそのように規定されることがあるが、ある場合において、特許請求の範囲に規定される組み合わせにおける１つ以上の特徴をその組み合わせから除外することができ、また特許請求の範囲に規定される組み合わせがある部分的な組み合わせ、もしくは部分的な組み合わせの変形を対象とすることがありうる。
【００６０】
同様に、図面においては動作をある特定の順序で描いているが、それは、所望の結果を得るためにかかる動作を図示どおりの順序または逐次的に実行する必要がある、あるいは図示するすべての動作を実行する必要があると理解するべきではない。ある状況では、マルチタスク処理および並列処理が効果的でありうる。さらに、上記の実施形態における、さまざまなシステム構成要素に対する区分は、かかる区分がすべての実施形態において必要であると理解するべきではない。他の実施形態も、以下に示す特許請求の範囲の範疇に含まれる。
【図１】
2014532237.tif 000004
【図２】
2014532237.tif 000005
【図３】
2014532237.tif 000006
【図４Ａ】
2014532237.tif 000007
【図４Ｂ】
2014532237.tif 000008
【図５】
2014532237.tif 000009
【図６】
2014532237.tif 000010
【国際調査報告】
2014532237.tif 000011
2014532237.tif 000012