(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6102032
(24)【登録日】2017年3月10日
(45)【発行日】2017年3月29日
(54)【発明の名称】ストレージにアクセスするためのコマンドキュー長を効率的に増やす方法及び装置
(51)【国際特許分類】
G06F 3/06 20060101AFI20170316BHJP
G06F 13/10 20060101ALI20170316BHJP
【FI】
G06F3/06 301F
G06F13/10 340A
【請求項の数】21
【全頁数】17
(21)【出願番号】特願2014-534036(P2014-534036)
(86)(22)【出願日】2012年10月5日
(65)【公表番号】特表2014-532237(P2014-532237A)
(43)【公表日】2014年12月4日
(86)【国際出願番号】IB2012055386
(87)【国際公開番号】WO2013050979
(87)【国際公開日】20130411
【審査請求日】2015年9月2日
(31)【優先権主張番号】61/543,929
(32)【優先日】2011年10月6日
(33)【優先権主張国】US
(31)【優先権主張番号】61/618,238
(32)【優先日】2012年3月30日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502188642
【氏名又は名称】マーベル ワールド トレード リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ライ、ディシ
(72)【発明者】
【氏名】カン、シンハイ
(72)【発明者】
【氏名】ツァイ、カンティン
(72)【発明者】
【氏名】ザオ、クン
【審査官】
桜井 茂行
(56)【参考文献】
【文献】
米国特許出願公開第2010/0161936(US,A1)
【文献】
特表2012−508428(JP,A)
【文献】
特開2010−282422(JP,A)
【文献】
米国特許出願公開第2008/0270678(US,A1)
【文献】
米国特許出願公開第2009/0172264(US,A1)
【文献】
米国特許出願公開第2006/0106980(US,A1)
【文献】
特開2006−139548(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06− 3/08
G06F 13/10−13/14
G06F 13/20−13/378
G06F 13/38−13/42
(57)【特許請求の範囲】
【請求項1】
未処理コマンドに対する最大キュー長を有するプロトコルを用いてインタフェースハードウェアを介してホストと通信するコントローラを備え、
前記コントローラはさらに、ストレージにアクセスするためのコマンドを受信および処理し、
前記受信および処理は、
第1のコマンドを受信する工程と、
前記第1のコマンドを、集約情報を有する情報コマンドであると識別する工程と、
前記集約情報を記憶する工程と、
第2のコマンドを受信する工程と、
前記第2のコマンドを、前記集約情報に関連する集約型コマンドであると識別する工程と、
前記集約型コマンドから前記集約情報を用いて複数のコマンドを生成する工程と、
前記ストレージに関して前記複数のコマンドを処理する工程であって、前記複数のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む工程と、
を含む動作の実行工程を含む、機器。
【請求項2】
前記集約型コマンドは、前記複数のコマンドのそれぞれに対する前記アドレスおよび前記データ転送カウントを含む、請求項1に記載の機器。
【請求項3】
前記動作は、
複数の追加コマンドを受信する工程と、
前記複数の追加コマンドのそれぞれを、前記集約情報に関連する集約型コマンドであると識別する工程と、
前記複数の追加コマンドのそれぞれの集約型コマンドから前記集約情報を用いて複数の追加のコマンドを生成する工程と、
前記ストレージに関して前記複数の追加のコマンドを処理する工程であって、前記複数の追加のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む工程と、
をさらに含む、請求項1又は2に記載の機器。
【請求項4】
前記第1のコマンドを、集約情報を有する情報コマンドであると識別する工程は、前記第1のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定する工程を含む、請求項1から3のいずれか一項に記載の機器。
【請求項5】
前記第2のコマンドを、前記集約情報に関連する集約型コマンドであると識別する工程は、前記第2のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定する工程を含む、請求項1から4のいずれか一項に記載の機器。
【請求項6】
前記コントローラは、最大キューデプスを有するネイティブ・コマンド・キューイング(NCQ)を使用するSATAコントローラである、請求項1から5のいずれか一項に記載の機器。
【請求項7】
前記最大キューデプスは32個のNCQコマンドであり、前記32個のコマンドのそれぞれはTAG0からTAG31までのTAG値によって参照される、請求項6に記載の機器。
【請求項8】
前記32個のNCQコマンドのある真部分集合は情報コマンドに対応し、前記32個のNCQコマンドのある真部分集合は集約型コマンドに対応する、請求項7に記載の機器。
【請求項9】
TAG0によって参照されるコマンドは、TAG1からTAG7によって参照される集約型コマンドに関する集約データを指定する情報コマンドであり、TAG8によって参照されるコマンドは、TAG9からTAG15までによって参照される集約型コマンドに関する集約データを指定する情報コマンドであり、TAG16によって参照されるコマンドは、TAG17からTAG23までによって参照される集約型コマンドに関する集約データを指定する情報コマンドであり、TAG24によって参照されるコマンドは、TAG25からTAG31までによって参照される集約型コマンドに関する集約データを指定する情報コマンドである、請求項8に記載の機器。
【請求項10】
前記コントローラと、
前記インタフェースハードウェアの少なくとも一部と、
データを持続的に記憶するメモリを形成し、前記コントローラと通信可能に結合されている、集積回路アセンブリと、
を収容するハウジング、
をさらに備える、請求項1から9のいずれか一項に記載の機器。
【請求項11】
記憶装置の第1のメモリロケーションへのアクセスを指示する第1のコマンドを受信する工程と、
記憶装置の第2のメモリロケーションへのアクセスを指示する第2のコマンドを受信する工程と、
前記第1のコマンドおよび前記第2のコマンドのそれぞれに関連するデータ転送カウントおよびメモリアドレスを含む集約型コマンドを構築する工程と、
前記集約型コマンドに関する集約情報を有する情報コマンドを構築する工程と、
前記情報コマンドと前記集約型コマンドとを前記記憶装置に伝達する工程と、
を含む方法。
【請求項12】
前記集約型コマンドを構築する工程は、前記集約型コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含む、請求項11に記載の方法。
【請求項13】
前記情報コマンドを構築する工程は、前記情報コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含む、請求項11または12に記載の方法。
【請求項14】
前記記憶装置は、最大キューデプスを有するネイティブ・コマンド・キューイング(NCQ)を使用するSATA機器である、請求項11から13のいずれか一項に記載の方法。
【請求項15】
前記最大キューデプスは32個のNCQコマンドであり、前記32個のコマンドのそれぞれはTAG0からTAG31までのTAG値によって参照される、請求項14に記載の方法。
【請求項16】
前記32個のNCQコマンドのある真部分集合は情報コマンドに対応し、前記32個のNCQコマンドのある真部分集合は集約型コマンドに対応する、請求項15に記載の方法。
【請求項17】
ホストコンピュータと、
記憶装置と、
前記ホストコンピュータと通信可能に結合されたホスト・バス・アダプタと、
を備え、
前記記憶装置は、
前記ホストコンピュータと通信するインタフェースハードウェアと、
未処理コマンドに対する最大キュー長を有するプロトコルを用いて前記インタフェースハードウェアを介して前記ホストコンピュータと通信するコントローラと、
データを持続的に記憶するメモリと、
を有し、
前記ホスト・バス・アダプタは、ドライバを有し、
前記ドライバは、
前記記憶装置の前記メモリへのアクセスを指示する複数のコマンドを受信し、
メモリアドレスおよびデータ転送カウントを含む集約型コマンドを、受信した前記複数のコマンドのそれぞれから構築し、
前記集約型コマンドに関する集約情報を有する情報コマンドを構築し、
前記情報コマンドおよび前記集約型コマンドを前記記憶装置に伝達し、
前記記憶装置に備わる前記コントローラは、前記ドライバによって伝達される前記情報コマンドおよび前記集約型コマンドを受信および処理し、
前記受信および処理は、
前記集約型コマンドから前記集約情報を用いて前記複数のコマンドを取り出す工程と、
前記複数のコマンドに含められた前記データ転送カウントおよび前記メモリアドレスに基づいて前記コマンドを処理する工程と、
を含む動作の実行工程を含む、システム。
【請求項18】
前記情報コマンドを構築する工程は、前記記憶装置に備わる前記コントローラが前記情報コマンドを受信および処理するときに、前記コントローラがコマンドを情報コマンドであることを識別可能になるように、前記情報コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含む、請求項17に記載のシステム。
【請求項19】
前記集約型コマンドを構築する工程は、前記記憶装置に備わる前記コントローラが前記集約型コマンドを受信および処理するときに、前記コントローラがコマンドを集約型コマンドであることを識別可能になるように、前記集約型コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含む、請求項17または18に記載のシステム。
【請求項20】
前記記憶装置は、最大キューデプスを有するネイティブ・コマンド・キューイング(NCQ)を使用するSATA機器である、請求項17から19のいずれか一項に記載のシステム。
【請求項21】
前記最大キューデプスは32個のNCQコマンドであり、前記32個のコマンドのそれぞれはTAG0からTAG31までのTAG値によって参照される、請求項20に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照 本開示は、米国仮出願第61/543,929号(出願日2011年10月6日、名称「USE INFORMATION COMMAND TO INCREASE THE Q−DEPTH OF SATA NCQ COMMAND UNLIMITEDLY」)、および米国仮出願第61/618,238号(出願日2012年3月30日、名称「I/O AGGREGATION FOR THE SCSI OF AN SSD DEVICE」)の優先権を主張し、その全内容を参照によってここに援用する。
【0002】
本開示は、SATA(Serial Advanced Technology Attachment)のNCQ(ネイティブ・コマンド・キューイング)コマンドのキューイングデプス(キューデプス)を増やすことによるなど、ストレージへのアクセスにおけるコマンドキュー長を効果的に増やすことに関するシステムおよび手法について記載する。
【背景技術】
【0003】
多くの電子機器は、下位機器の動作を制御するために、また機能や動作において高い柔軟性を実現するために、組み込みシステムを備えている。その組み込みシステムを動作させるオペレーティングシステムのプログラムコード、発行されるコマンド、および重要データを記憶するため、一般的に、組み込みシステムの一部として不揮発性メモリが備わっている。一部の組み込みシステムは、不揮発性メモリとしてソリッド・ステート・メモリ(例えば、EEPROM(電気的に消去可能な読み出し専用メモリ))を使用する。ソリッド・ステート・メモリは、アプリケーションを高速化してデータアクセス時間を増やすために使用され得る。またソリッド・ステート・メモリは、情報を不揮発的に記憶するために都合よく書き込みもしくは再書き込みされ得る。
【0004】
コンピュータシステムでは、ホスト・バス・アダプタが、ホストシステム(例えばコンピュータ)と他のネットワーク機器および記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスクドライブなど)とを接続することができる。SATA(Serial Advanced Technology Attachment)は、ホストから記憶装置へのデータや情報の転送の制御に用いられるインタフェースプロトコルである。ネイティブ・コマンド・キューイングはSATAプロトコルの拡張機能であり、受信する読み書きコマンドの実行順序を記憶装置がその内部で最適化することを可能にする。ネイティブ・コマンド・キューイング・プロトコルには一般に最大キュー長がある。論理ブロックアドレス(LBA)の値が隣り合うシーケンシャルコマンドに対してはコマンド集約が可能である。すなわち、LBAが隣り合うシーケンシャルコマンドは、最初のコマンドのLBA値を用い、かつデータ転送カウントをそれらのシーケンシャルコマンドに対する転送カウントの合計値に設定することによって、1つのコマンドに統合できる。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本開示は、NCQ(ネイティブ・コマンド・キューイング)コマンドのキューイングデプス(キューデプス)を増やすことによるなど、ストレージへのアクセスにおけるコマンドキュー長を効果的に増やすことに関するシステムおよび手法を含む。
【課題を解決するための手段】
【0006】
ある実装において、コントローラは、未処理コマンドに対する最大キュー長を有するプロトコルを用いてインタフェースハードウェアを介してホストと通信するように構成されている。前記コントローラは、ストレージにアクセスするためのコマンドを受信および処理するように構成され、前記受信および処理は、第1のコマンドを受信する工程と、前記第1のコマンドを、集約情報を有する情報コマンドであると識別する工程と、前記集約情報を記憶する工程と、第2のコマンドを受信する工程と、前記第2のコマンドを、前記集約情報に関連する集約型コマンドであると識別する工程と、前記集約型コマンドから前記集約情報を用いて複数のコマンドを生成する工程と、前記ストレージに関して前記複数のコマンドを処理する工程であって、前記複数のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む工程と、を含む。
【0007】
これらおよび他の実装は、下記の特徴の1つ以上を含んでいてもよい。前記コントローラは、追加コマンドを受信し、前記追加コマンドのそれぞれを、前記集約情報に関連する集約型コマンドであると識別し、前記追加コマンドのそれぞれの集約型コマンドから前記集約情報を用いて追加のコマンドを生成し、前記ストレージに関して前記追加のコマンドを処理することができ、前記追加のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む。前記コントローラは、前記第1のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定することにより、前記第1のコマンドを、集約情報を有する情報コマンドであると識別することができる。前記コントローラは、前記第2のコマンドに対応するフレーム情報構造においてある特定のビットが設定されていると判定することにより、前記第2のコマンドを、前記集約情報に関連する集約型コマンドであると識別することができる。前記コントローラは、最大キューデプスを有するNCQを使用するSATAコントローラでありうる。前記最大キューデプスは32個のNCQコマンドとすることができ、前記32個のコマンドのそれぞれはTAG0からTAG31までのTAG値によって参照することができる。前記32個のNCQコマンドのある真部分集合は情報コマンドに対応することができ、前記32個のNCQコマンドのある真部分集合は集約型コマンドに対応することができる。TAG0によって参照されるコマンドは、TAG1からTAG7によって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。TAG8によって参照されるコマンドは、TAG9からTAG15までによって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。TAG16によって参照されるコマンドは、TAG17からTAG23までによって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。TAG24によって参照されるコマンドは、TAG25からTAG31までによって参照される集約型コマンドに関する集約データを指定する情報コマンドとすることができる。前記コントローラはさらに、前記インタフェースハードウェアの少なくとも一部と、データを持続的に記憶するメモリを形成する集積回路アセンブリとともに、ハウジング内に収容することができる。ここに、前記集積回路アセンブリは前記コントローラと通信可能に結合されている。
【0008】
ある実装において、方法は、記憶装置の第1のメモリロケーションへのアクセスを指示する第1のコマンドを受信する工程と、記憶装置の第2のメモリロケーションへのアクセスを指示する第2のコマンドを受信する工程と、前記第1のコマンドと前記第2のコマンドのそれぞれに関連するデータ転送カウントおよびメモリアドレスを含む集約型コマンドを構築する工程と、前記集約型コマンドに関する集約情報を有する情報コマンドを構築する工程と、前記情報コマンドと前記集約型コマンドとを前記記憶装置に伝達する工程と、を含む。
【0009】
これらおよび他の実装は、下記の特徴の1つ以上を含んでいてもよい。前記集約型コマンドを構築する工程は、前記集約型コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含み得る。前記情報コマンドを構築する工程は、前記情報コマンドに関連するフレーム情報構造において対応ビットを設定する工程を含み得る。前記記憶装置は、最大キューデプスを有するNCQを使用するSATA機器でありうる。前記最大キューデプスは32個のNCQコマンドとすることができ、前記32個のコマンドのそれぞれはTAG0からTAG31までのTAG値によって参照される。前記32個のNCQコマンドのある真部分集合は情報コマンドに対応することができ、前記32個のNCQコマンドのある真部分集合は集約型コマンドに対応することができる。
【0010】
ある実装において、システムは、ホストコンピュータと、記憶装置であって、前記ホストと通信するように構成されたインタフェースハードウェアと、未処理コマンドに対する最大キュー長を有するプロトコルを用いて前記インタフェースハードウェアを介して前記ホストと通信するように構成されたコントローラと、データを持続的に記憶するメモリと、を備えた記憶装置と、前記ホストと通信可能に結合されたホスト・バス・アダプタであって、前記記憶装置の前記メモリへのアクセスを指示するコマンドを受信し、メモリアドレスおよびデータ転送カウントを含む集約型コマンドを、受信した前記コマンドのそれぞれから構築し、前記集約型コマンドに関する集約情報を有する情報コマンドを構築し、前記情報コマンドと前記集約型コマンドとを記憶装置に伝達するように構成されたドライバを備えたホスト・バス・アダプタとを含む。前記記憶装置に備わる前記コントローラは、前記記憶装置ドライバによって伝達される前記集約型コマンドおよび前記情報コマンドを受信および処理するように構成され、前記受信および処理は、前記集約型コマンドから前記集約情報を用いて前記コマンドを取り出す工程と、前記コマンドに含められた前記データ転送カウントおよび前記メモリアドレスに基づいて前記コマンドを処理する工程と、を含む動作の実行工程を含む。
【0011】
これらおよび他の実装は、下記の特徴の1つ以上を含んでいてもよい。前記情報コマンドを構築する工程は、前記情報コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含むことができ、前記設定する工程は、前記記憶装置に備わる前記コントローラが前記情報コマンドを受信および処理するときに、前記コントローラが前記コマンドを情報コマンドであることを識別可能にする。前記集約型コマンドを構築する工程は、前記集約型コマンドに関連するフレーム情報構造においてあるビットを設定する工程を含むことができ、前記記憶装置に備わる前記コントローラが前記集約型コマンドを受信および処理するときに、前記コントローラが前記コマンドを集約型コマンドであることを識別可能にする。前記記憶装置は、最大キューデプスを有するNCQを使用するSATA機器でありうる。前記最大キューデプスは32個のNCQコマンドとすることができ、前記32個のコマンドのそれぞれはTAG0からTAG31までのTAG値によって参照することができる。
【0012】
記載のシステムおよび手法は、本明細書に開示される構造的手段およびその構造的等価物などの、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせにおいて実現することができる。これには、1つ以上のデータ処理装置(例えば、プログラマブルプロセッサを備えた信号処理機器)に方法動作を実行させることが可能なプログラムを組み入れた少なくとも1つのコンピュータ可読媒体が含まれ得る。したがって、開示される方法、システム、または装置からプログラム実装が実現可能であり、また開示されるシステム、コンピュータ可読媒体、または方法から装置実装が実現可能である。同様に、開示されるシステム、コンピュータ可読媒体、または装置から方法実装が実現可能であり、また開示される方法、コンピュータ可読媒体、または装置からシステム実装が実現可能である。
【0013】
記載のシステムおよび手法は、NCQ(ネイティブ・コマンド・キューイング)コマンドに対するコマンドキューイングデプス(キューデプス)がNCQプロトコルによって規定される最大コマンド数を超えて増大する結果をもたらし得る。例えば、SATA機器に対するNCQプロトコルは現在、32コマンドの最大キューデプスを規定している。以下に詳しく述べるように、NCQコマンドを集約型コマンドに集約し、かつ集約型コマンドに対する集約を情報コマンドにおいて提供することにより、SATA機器に対するNCQは32コマンドのプロトコル上限を超えるキューデプスで動作し得る。情報コマンドおよび集約型コマンドが標準的なSATA仕様に基づく場合、下記のシステムおよび手法は、専用のホスト・バス・アダプタ(HBA)ハードウェアを用いなくとも何らかの適切なSATA HBAを用いて実現され得る。さらに、ランダムな論理ブロックアドレス(例えばシーケンシャルでないLBA)を有する小サイズのデータ転送コマンド(例えば5kbs以下)を処理するのに必要となるオーバーヘッドは、通常のNCQを集約型コマンドに集約して、SATA NCQプロトコルに規定されるキューデプスを増大させることによって低減し得る。
【0014】
1つ以上の実装の詳細を添付の図面および以下の説明において記載する。
【0015】
他の特徴および効果は説明と図面、および特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【0016】
【
図1】ソリッドステートドライブのブロック図である。
【0017】
【0018】
【0019】
【0020】
【
図4B】集約型コマンドの構造の例を示す図である。
【0021】
【
図5】NCQコマンドの集約処理の例を示す図である。
【0022】
【
図6】集約型NQCコマンドおよび情報NCQコマンドの処理の例を示す図である。
【発明を実施するための形態】
【0023】
各種の図面において同じ参照符号は同じ要素を示す。
【0024】
フラッシュメモリの概要
図1は、ソリッドステートドライブ(SSD)102のブロック図である。SSD102は、データを持続的に記憶するメモリを形成する集積回路アセンブリ108を備える。一部の実装において、集積回路アセンブリ108は「NAND」型のフラッシュメモリでありうる。NANDフラッシュメモリは、例えばNOR型のフラッシュメモリよりも一般に消去および書き込み時間が短く、密度が高く、ビット単価が低く、かつ耐久性に優れている。NANDフラッシュメモリは、1つ以上の選択トランジスタとともに個々のビット線と基準電位との間に接続される、16または32など、2つより多いメモリセルの直列ストリングを用いてセルの列を形成し得る。かかる列の間のセルにわたってワード線が延伸し得る。ある列内のある1つのセルは、ストリング中の残りのセルをオンにすることによって、書き込み中に読み出しおよび検証を実施し得る。その際、ストリングを流れる電流が、アドレシングされたセルに蓄積される電荷量に依存するようにする。
【0025】
SSD102は、集積回路アセンブリ108と通信するために制御回路106を備える。一部の実装において、制御回路106はファームウェアレベルのコードを実行する組み込みプロセッサを備え、それによって集積回路アセンブリ108とホストシステム(図示せず)とを橋渡しする。例えば、制御回路106は、NANDメモリと通信するためにNANDフラッシュI/O(入力/出力)コントローラを備えてもよく、またNANDフラッシュメモリに記憶されるデータへのシーケンシャルアクセスのみを許容してもよい。
【0026】
SSD102は、SSD102をホスト(図示せず)のホスト・バス・アダプタに接続するためにインタフェースハードウェア104を備える。一部の実装において、インタフェースハードウェア104は1つ以上の標準コネクタを備える。標準コネクタには、例えば、SATA、SCSI(Small Computer System Interface)、USB(Universal Serial Bus)、PCMCIA(Personal Computer Memory Card International Association)、およびIEEE−1394(Firewire)などがあるが、これには限定されない。一部の実装において、インタフェースハードウェア104は、それぞれ特定の機能に対応する複数のピンを備えていてもよい。例えば、電源用、接地用、送信用、受信用、転送完了用、通信用などのピンである。
【0027】
なお、ソリッドステートドライブ102の例ではNANDフラッシュメモリについて記載したが、これに限定されず、一例として、NOR型フラッシュEEPROM、AND型フラッシュEEPROM、DiNOR型フラッシュEEPROM、シリアルフラッシュEEPROM、DRAM、SRAM、ROM、EPROM、FRAM(登録商標)、MRAM、およびPCRAMなど、他のメモリタイプも用いられ得る。
【0028】
ストレージシステム
図2は、ストレージシステム200の例を示す。
図2に示すように、システム200は、ホスト・バス・アダプタ204を用いて記憶装置208と通信するホスト202を備える。ホスト・バス・アダプタ204のさまざまな例として、SATA(Serial Advanced Technology Attachment)、SCSI(Small Computer System Interface)、USB(Universal Serial Bus)、PCMCIA(Personal Computer Memory Card International Association)、IEEE−1394(Firewire)、PCI(Peripheral Component Interconnect)、PCIe(PCI Express)、SAS(Serial Attached SCSI)などの物理インタフェース、およびMMC(MultiMedia Card)などのメモリカード用インタフェースがある。
【0029】
記憶装置208のさまざまな例として、ソリッドステートドライブ(例えば
図1のソリッドステートドライブ102)、ハードディスクドライブ(HDD)、光ディスクドライブなどがある。一部の実装において、記憶装置208はファームウェア210を含む。ファームウェア210は、記憶装置208に含まれるコントローラ上で実行され、記憶装置208のメモリ要素とホスト・バス・アダプタ204のインタフェースとを橋渡しするように動作可能なコードでありうる。
【0030】
一部の実装において、ホスト・バス・アダプタ204は、記憶装置208に向けられた1つ以上のサービス要求またはコマンド(例えば読み出し要求及び書き込み要求)を受信および処理するために記憶装置ドライバ206を備える。例えば、記憶装置ドライバ206は、記憶装置208のメモリに記憶されるデータの記憶および取り出しをホスト202からのコマンドに応答して管理および制御するように構成され得る。すなわち、記憶装置ドライバ206は、ホスト202と記憶装置208との間のコマンドおよびデータのフローを制御し得る。
【0031】
一部の実装において、記憶装置ドライバ206はマイクロプロセッサ(図示せず)の制御下にあるマイクロコンピュータシステムの一部である。例えば、記憶装置ドライバ206は、ROM(read−only memory)、RAM(random−access memory)、およびその他の内部回路を備えることができる。
【0032】
NCQ(ネイティブ・コマンド・キューイング)は、記憶装置に対応する複数のコマンドを同時に処理待ち状態にできるコマンドプロトコルである。NCQ準拠の記憶装置は、受信する読み書きコマンドの実行順序をその内部で最適化することができる。例えば、NCQをサポートする記憶装置ドライバと記憶装置は、キューを保持するにあたり、未処理および完了コマンドに関する必要なトラッキングメカニズムとともに、未処理コマンドの再スケジューリングまたは順序の入れ替えを動的に行うことができる。一部の実装において、NCQはまた、記憶装置が別のコマンドに対するデータを探している間に、ホストが記憶装置に追加コマンドを発行できるメカニズムを備える。一部の実装において、記憶装置のコマンドキュー内でのコマンド順序のインテリジェントな入れ替えは、キューイングされる作業負荷のパフォーマンス向上に役立ち得る。例えば、ハードディスクドライブ(HDD)の場合、順序のインテリジェントな入れ替えによってドライブヘッドの不要な動き量を削減できるため、複数の同時読み書き要求が処理待ち状態にあるときの作業負荷に対して、パフォーマンスが向上するとともに、ドライブの摩耗が低減される。
【0033】
一部の実装では、小サイズのデータ転送(例えば、1コマンド当たり4KB以下)に対してNCQを使用する場合、コマンド処理の総時間の大部分はコマンド処理のオーバーヘッドに費やされるため、NCQの全体的なパフォーマンスが低下する。論理ブロックアドレス(LBA)の値が隣り合うシーケンシャルな読み出しまたは書き込みコマンドについては、最初のコマンドのLBA値を使用し、かつデータ転送カウントをそれら複数のコマンドの合計値に設定することにより、複数の読み出しまたは書き込みコマンドを1つの読み出しまたは書き込みコマンドに統合することができ得る。この手法は一種のコマンド集約である。しかし、LBA値が隣り合わないランダムなコマンドの場合、そのようなコマンド統合はそれほど効果的でない場合がある。例えば、ランダムなコマンドは通常、ランダムなLBA値を有する。そのため、シーケンシャルコマンドの統合で行ったように、単純に、最初のコマンドのLBA値を使用し、かつデータ転送カウントをそれら複数のコマンドの合計値に設定することによって、複数のランダムな読み出しまたは書き込みコマンドを1つの読み出しまたは書き込みコマンドに統合することは、不可能ではないにせよ、より困難でありうる。
【0034】
ランダムなLBAを有する小サイズのデータ転送のパフォーマンスを改善するには、コマンド集約ならびにNCQのコマンドキューイングデプスの増大をより汎用的かつインテリジェントなやり方で実施すればいい。例えば、NCQプロトコルに対して規定される最大数を超えるコマンドを送信するには、複数のNCQコマンドを1つのNCQコマンドに集約すればいい。
【0035】
SATAプロトコルでは、NCQのコマンドキューイングデプス(キューデプス)は32コマンドである。すなわち、ある任意の時刻において、合計32個のNCQコマンドが記憶装置に接続されるSATAによる実行を待つことができる。一部の実装において、各NCQコマンドはTAGに関連づけられている。ここに、TAGの値は0から31までの整数である。TAGは、ある特定の未処理のNCQコマンドを識別するための簡単な仕組みである。未処理の各NCQコマンドは一意のTAG値を有する。32個を超えるSATA NCQコマンドを送信するには、複数のNCQコマンドを1つのNCQコマンドに内包し、それを1つのTAGで参照するようにすればいい。
【0036】
一部の実装において、NCQコマンドはコマンドの中身を指定するフレーム情報構造(FIS)を含む。例えば、SATA NCQ読み出しまたは書き込みコマンドは、20バイトから成るFISを含み得る。一部の実装において、SATA NCQコマンドの最重要部分は、メモリロケーションに対応する論理ブロックアドレス(LBA)番号およびデータ転送カウントを含む。一部の実装において、SATA NCQコマンドのFISに含まれるLBA番号およびデータ転送カウントは、コマンド内の8バイトのデータに対応する。例えば、6バイトがLBAデータ用で、2バイトが転送カウントデータ用である。
【0037】
一部の実装において、ドライバ(例えば、記憶装置ドライバ206)がNCQコマンドを集約し、その情報を記憶装置(例えば、記憶装置208)に伝達する。例えば、記憶装置ドライバは、複数のNCQコマンドを1つのTAGによって参照される1つの集約型NCQコマンドに集約することができる。一部の実装において、記憶装置ドライバは、その集約型コマンドが集約型コマンドであることを識別可能にするために、集約型コマンドのFIS内のあるビットを設定する。例えば、あるコマンドが集約型コマンドであることを識別可能にするため、記憶装置ドライバは集約型コマンドのFISの制御レジスタ内のあるビットを設定することができる。
【0038】
さらに、記憶装置ドライバは、1つのTAGによって参照され、かつ複数の集約型コマンドに関する集約データを含む情報コマンドを構築することができる。一部の実装において、記憶装置ドライバは、その情報コマンドが情報コマンドであることを識別可能にするために、情報コマンドのFIS内のあるビットを設定する。例えば、記憶装置ドライバは、そのコマンドが情報コマンドであることを識別可能にするために、情報コマンドのFISの制御レジスタ内のあるビットを設定することができる。一部の実装では、コマンドが情報コマンドまたは集約型コマンドであることを識別するために他の基準が必要になり得る。例えば、情報コマンドは、情報コマンドのFIS内のすべてのLBAレジスタがゼロの値に設定されているものであると規定することもできる。
【0039】
以下は、通常コマンド、情報コマンド、および集約型コマンドの種別を指定する例を示すコマンドテーブルである。
【表1】
【0040】
図3は、SATA NCQコマンドの構造300の例を示す。
図3において、SATA NCQコマンドの構造300に対する最大キューデプスは32コマンドと示されている。一部の実装において、記憶装置ドライバ(例えば、記憶装置ドライバ206)は、TAG0(302で特定されるもの)ならびにTAG8、16、および24を用いて情報コマンドを参照し、TAG1(304で特定されるもの)ならびにTAG2〜7、9〜15、17〜23、および25〜31を用いて集約型コマンドを送信する。情報コマンドおよび集約型コマンドは
図3に示すTAGに限定される必要はない。むしろ、コマンドの構造300におけるあらゆるTAGが情報コマンドまたは集約型コマンドのいずれかに対応し得ると理解するべきである。
【0041】
一部の実装において、TAG0の情報コマンドは、TAG1からTAG7に対応する集約型コマンドの集約データを指定する。同様のスキームはTAG8、16、および24に対応する情報コマンドにも適用される。例えば、TAG8の情報コマンドは、TAG9からTAG15に対応する集約型コマンドの集約データを指定できる。TAG16の情報コマンドは、TAG17からTAG23に対応する集約型コマンドの集約データを指定できる。さらに、TAG24の情報コマンドは、TAG25からTAG31に対応する集約型コマンドの集約データを指定できる。
【0042】
図4Aは情報コマンドに対する構造402の例を示す。一部の実装において、構造402はTAG0(例えば
図3に示す302)によって指定される情報コマンドに対応することができ、512バイトのデータを有し得る。情報コマンドは512バイトのデータに限定されず、NCQのキューデプスをある所与のシステムにおいて所望のコマンド数に増大させるために必要なあらゆる適切な大きさでありうる。
【0043】
図4Bは集約型コマンドに対する情報構造452の例を示す。一部の実装において、構造452はTAG1(例えば
図3に示す304)によって指定される集約型コマンドに対応し、64バイトのデータを有する。集約型コマンドは64バイトのデータに限定されず、キューデプスをある所与のシステムにおいて所望のコマンド数に増大させるために必要なあらゆる適切な大きさでありうる。一部の実装において、NCQコマンドに対するLBAおよび転送カウントは合計8バイトであり、NCQコマンドに対するデータとして使用される。このように、情報構造452は1つのNCQ TAGに対応する8つのNCQコマンドを識別することができる。すなわち、1つのNCQコマンドは1つのNCQ TAGの名の下に8つのNCQコマンドを含むことができる。
【0044】
一部の実装では、
図4Aおよび
図4Bに示す構造の例、および32のNCQキューデプスを用い、32個のNCQコマンドのある真部分集合は情報コマンドに対応することができ、32個のNCQコマンドのある真部分集合は集約型コマンドに対応することができる。例えば、32個のコマンドのうちの4つがTAG(例えば、TAG0、TAG8,TAG16、およびTAG24)によって識別でき、かつ情報コマンドに対応することができる。また、残りの28個のコマンドは残りの28個のTAGによって識別でき、かつ集約型コマンドに対応することができる。一部の実装において、集約型コマンドのそれぞれは8つの通常のNCQコマンドを表す。32個のNCQコマンドのうちの4つの真部分集合が情報コマンドに対応し、かつ32個のNCQコマンドのうちの28の真部分集合が集約型コマンドに対応し、集約型コマンドのそれぞれが8つの通常のNCQコマンドを表す例では、得られるNCQのキューデプスは合計224のNCQコマンドとすることができる。
【0045】
一部の実装において、1つのNCQ TAGのもとでさらに多いNCQコマンドを集約する必要がある場合、集約型コマンドに関する集約データの増加とともに、情報コマンドのデータ長を増やすことができる。一般に、情報コマンドには任意の適切な数の集約型コマンドを指定でき、任意の適切な数のNCQコマンドを1つの集約型コマンドに集約することができる。
【0046】
図5は、NCQコマンドを集約する処理500の例を示す。一部の実装において、記憶装置ドライバ(例えば、記憶装置ドライバ206)は、
図5に記載するNCQコマンドの集約のために処理500を実行する。502において、プロセスは、記憶装置の第1のメモリロケーションへのアクセスを指示する第1のコマンドを受信する。一部の実装において、第1のコマンドは、記憶装置(例えば、記憶装置208)のメモリにアクセスするためにホストシステム(例えば、ホスト202)から発せられる読み出しまたは書き込み要求でありうる。504において、プロセスは、記憶装置の第2のメモリロケーションへのアクセスを指示する第2のコマンドを受信する。一部の実装において、第2のコマンドは、記憶装置(例えば、記憶装置208)のメモリにアクセスするためにホストシステム(例えば、ホスト202)から発せられる読み出しまたは書き込み要求でありうる。一部の実装において、第1のコマンドと第2のコマンドは、記憶装置の非シーケンシャルまたはランダムな論理ブロックアドレスへのアクセスを要求する。例えば、第1のコマンドと第2のコマンドは、連続するコマンドである必要も、また(例えば、ホスト202から)連続して受信される必要もない。
【0047】
506において、プロセスは、メモリアドレスおよびデータ転送カウントを含む集約型コマンドを、第1のコマンドと第2のコマンドのそれぞれから構築する。一部の実装において、その集約型コマンドはSATAの通常の読み出しまたは書き込みNCQコマンドであって、かつそのコマンドが集約型コマンドであることを識別可能にするある特定のビットが、そのコマンドに対するフレーム情報構造において設定されているコマンドでありうる。例えば、記憶装置ドライバ206は、あるSATA NCQ TAGに対応する集約型コマンドであって、502において受信される第1のコマンドに関連する論理ブロックアドレスおよびデータ転送カウント、並びに504において受信される第2のコマンドに関連する論理ブロックアドレスおよびデータ転送カウントを含むコマンドを構築することができる。
【0048】
508において、プロセスは、集約型コマンドに関する情報を有する情報コマンドを構築する。一部の実装において、その情報コマンドはSATAの通常の読み出しまたは書き込みNCQコマンドであって、かつそのコマンドが情報コマンドであることを識別可能にするある特定のビットが、そのコマンドに対するフレーム情報構造において設定されているコマンドでありうる。例えば、記憶装置ドライバ206は、あるSATA NCQ TAGに対応する情報コマンドであって、集約型コマンド(例えば、ある異なるTAGに対応する集約型NCQコマンド)に関する集約データを含むコマンドを構築することができる。
【0049】
510において、プロセスは、情報コマンドと集約型コマンドとを記憶装置に伝達する。一部の実装において、記憶装置ドライバ206は、記憶装置208の制御回路で実行されるファームウェアに対して情報コマンドと集約型コマンドとを伝達する。一部の実装において、情報コマンドと集約型コマンドとが記憶装置に伝達される順序は何でもよい。
【0050】
図6は、集約型NCQコマンドおよび情報NCQコマンドを処理する処理600の例を示す。一部の実装において、記憶装置に実装されるファームウェア(例えば、ソリッドステートドライブ102の制御回路106によって実行されるファームウェア)は、
図6に記載される、集約型NCQコマンドおよび情報NCQコマンドを処理する処理を実行するように構成され得る。602において、プロセスは第1のコマンドを受信する。一部の実装において、第1のコマンドはSATA NCQコマンドであり、記憶装置のファームウェア(例えば、ソリッドステートドライブ102の制御回路106において実行されるファームウェア)によって受信される。
【0051】
604において、プロセスは、第1のコマンドを、集約情報を有する情報コマンドであると識別する。一部の実装において、第1のコマンドはSATA NCQ情報コマンドであり、プロセスは、そのコマンドに対するフレーム情報構造においてある特定ビットが設定されているかどうか判定することによって、第1のコマンドを情報コマンドであると識別する。
【0052】
606において、プロセスは集約情報を記憶する。例えば、集約情報は、制御回路106が後続処理に利用できるように制御回路106のメモリに記憶することができる。
【0053】
608において、プロセスは第2のコマンドを受信する。一部の実装において、第2のコマンドはSATA NCQコマンドであり、記憶装置のファームウェア(例えば、ソリッドステートドライブ102の制御回路106において実行されるファームウェア)によって受信される。
【0054】
610において、プロセスは、第2のコマンドを集約情報に関連する集約型コマンドであると識別する。一部の実装において、第2のコマンドはSATA NCQ集約型コマンドであり、プロセスは、そのコマンドに対するフレーム情報構造においてある特定ビットが設定されているかどうか判定することによって、第2のコマンドを集約型コマンドであると識別する。
【0055】
612において、プロセスは、集約型コマンドから集約情報を用いて複数のコマンドを生成する。例えば、機器が集約型コマンドを受信および処理するときに、機器はその集約型コマンドに関連する複数のコマンドを集約情報を用いて識別することができる。機器はさらに、その複数のコマンドに対応する、いくつかの異なるLBAセグメントおよび関連する転送カウントを識別することができる。
【0056】
614において、プロセスは、ストレージに関してその複数のコマンドを処理する。複数のコマンドのそれぞれはアドレスおよびデータ転送カウントを含む。一部の実装において、アドレスは集積回路アセンブリ108のメモリロケーションに対応し、コマンドは指定されるメモリロケーションにアクセスするように制御回路106によって処理される。
【0057】
いくつかの実施形態についてこれまで詳しく説明してきた。これに対して多くの改変が可能である。開示される主題は、本明細書に記載する機能的動作を含め、本明細書に開示される構造的手段およびその構造的等価物などの、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせにおいて実現することができる。これには、1つ以上のデータ処理装置に記載の動作を実行させることが可能なプログラム(コンピュータ可読媒体内にエンコードされたプログラムなどであり、コンピュータ可読媒体はメモリデバイス、記憶装置、機械可読記憶基板、もしくはその他の物理的な機械可読媒体、またはそれらの1つ以上の組み合わせでありうる)が潜在的に含まれる。
【0058】
「データ処理装置」という用語はデータを処理するあらゆる装置、機器、および機械を包含し、一例として、1つのプログラマブルプロセッサ、1台のコンピュータ、または複数のプロセッサもしくはコンピュータを含む。装置は、ハードウェアのほか、当該コンピュータプログラムに対して実行環境を生成するコード(例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つ以上の組み合わせを構成するコード)を含み得る。
【0059】
本明細書は多くの具体的内容を含むが、それらを特許請求の範囲に規定され得る範囲を限定するものと解釈するべきではなく、特定の実施形態に特有でありうる特徴の説明であると解釈するべきである。複数の個別の実施形態の状況において本明細書に記載する一部の特徴は、ある1つの実施形態において併用して実装することもできる。逆に、ある1つの実施形態の状況において記載するさまざまな特徴を、複数の実施形態において別々に、あるいは適切に部分的に組み合わせて実装することもできる。さらに、特徴はある組み合わせで作用するものとして記載される、あるいは場合によっては特許請求の範囲において最初にそのように規定されることがあるが、ある場合において、特許請求の範囲に規定される組み合わせにおける1つ以上の特徴をその組み合わせから除外することができ、また特許請求の範囲に規定される組み合わせがある部分的な組み合わせ、もしくは部分的な組み合わせの変形を対象とすることがありうる。
【0060】
同様に、図面においては動作をある特定の順序で描いているが、それは、所望の結果を得るためにかかる動作を図示どおりの順序または逐次的に実行する必要がある、あるいは図示するすべての動作を実行する必要があると理解するべきではない。ある状況では、マルチタスク処理および並列処理が効果的でありうる。さらに、上記の実施形態における、さまざまなシステム構成要素に対する区分は、かかる区分がすべての実施形態において必要であると理解するべきではない。他の実施形態も、以下に示す特許請求の範囲の範疇に含まれる。