JP2023107418A - ストレージデバイスおよびストレージシステム - Google Patents

ストレージデバイスおよびストレージシステム Download PDF

Info

Publication number
JP2023107418A
JP2023107418A JP2022008613A JP2022008613A JP2023107418A JP 2023107418 A JP2023107418 A JP 2023107418A JP 2022008613 A JP2022008613 A JP 2022008613A JP 2022008613 A JP2022008613 A JP 2022008613A JP 2023107418 A JP2023107418 A JP 2023107418A
Authority
JP
Japan
Prior art keywords
command
host
memory
storage device
type
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022008613A
Other languages
English (en)
Inventor
伸一 菅野
Shinichi Sugano
健作 山口
Kensaku Yamaguchi
剛彦 蔵重
Takehiko Kurashige
勇輝 佐々木
Yuki Sasaki
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Kioxia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kioxia Corp filed Critical Kioxia Corp
Priority to JP2022008613A priority Critical patent/JP2023107418A/ja
Priority to US17/931,363 priority patent/US11972110B2/en
Publication of JP2023107418A publication Critical patent/JP2023107418A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling

Abstract

【課題】1つのコマンドに対して複数の応答をホストに送信することができるストレージデバイスを実現する。【解決手段】ストレージデバイスのコントローラは、第1タイプコマンドに対する1以上の先行応答の一つがストレージデバイスによってホストに送信されることを可能にするための1以上の第2タイプコマンドを、ホストから受信したことに応じて、受信した1以上の第2タイプコマンドを完了させずにメモリ領域に維持する。ホストから第1タイプコマンドを受信したことに応じて、コントローラは、一つの第2タイプコマンドを完了させ、完了した一つの第2タイプコマンドに対するコマンド完了応答を第1タイプコマンドに対する第1の先行応答としてホストに送信する。コントローラは、第1タイプコマンドの処理の完了に応じて、完了した第1タイプコマンドに対するコマンド完了応答をホストに送信する。【選択図】図6

Description

本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるストレージデバイスが広く普及している。このようなストレージデバイスの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
SSDのようなストレージデバイスとホストとの間の通信においては、ホストから発行される1つのコマンドに対して1つの完了応答がストレージデバイスによってホストに送信されることが許容された論理インタフェース規格が使用される場合がある。
このような論理インタフェース規格に従ってホストとの通信を実行するストレージデバイスにおいては、1つのコマンドに対して複数の応答をホストに送信可能な新たな技術の実現が要求されている。
米国特許出願公開第2020/0050402号明細書 米国特許出願公開第2018/0335975号明細書 米国特許第10,705,974号明細書
本発明の一実施形態が解決しようとする課題は、1つのコマンドに対して複数の応答をホストに送信することができるストレージデバイスおよびストレージシステムを提供することである。
実施形態によれば、ストレージデバイスは、ホストから発行される1つのコマンドに対して1つの完了応答がストレージデバイスによってホストに送信されることが許容された論理インタフェース規格に準拠してホストとの通信を実行する。前記ストレージデバイスは、不揮発性メモリと、前記ストレージデバイスに対して所定の動作の実行を要求する第1タイプコマンドに対する1以上の先行応答と、前記第1タイプコマンドが完了したことを示すコマンド完了応答とを前記ホストに送信するように構成されたコントローラとを具備する。前記1以上の先行応答は、前記第1タイプコマンドを受け付けたことを示す第1の先行応答を少なくとも含む。前記1以上の先行応答の各々は、前記コマンド完了応答の前に前記ストレージデバイスによって前記ホストに送信される応答である。前記コントローラは、前記1以上の先行応答の一つが前記ストレージデバイスによって前記ホストに送信されることを可能にするための1以上の第2タイプコマンドを、前記ホストから受信したことに応じて、前記受信した1以上の第2タイプコマンドを完了させずに前記ストレージデバイス内のメモリ領域に維持する。前記コントローラは、前記ホストから前記第1タイプコマンドを受信したことに応じて、前記メモリ領域から前記1以上の第2タイプコマンドのうちの一つの第2タイプコマンドを取得し、前記取得した一つの第2タイプコマンドを完了させ、前記完了した一つの第2タイプコマンドに対するコマンド完了応答を前記第1タイプコマンドに対する前記第1の先行応答として前記ホストに送信する。前記コントローラは、前記第1タイプコマンドの処理の完了に応じて、前記完了した第1タイプコマンドに対する前記コマンド完了応答を前記ホストに送信する。
実施形態に係るストレージデバイスを含むストレージシステムの構成例を示すブロック図。 ホストと実施形態に係るストレージデバイスとの間の役割分担を説明するための図。 ホストの構成例と実施形態に係るストレージデバイスの構成例とを示すブロック図。 実施形態に係るストレージデバイスに設けられた、NANDインタフェースと複数のNAND型フラッシュメモリダイとの関係を示すブロック図。 実施形態に係るストレージデバイスにおいて管理されるブロックグループの構成例を示す図。 実施形態に係るストレージデバイスにおいて実行される、ホストから事前に送信される1以上の第2タイプコマンドをプール内に維持する動作と、プール内の第2タイプコマンドの一つに対する完了応答を、ホストから送信される第1タイプコマンドに対する先行応答としてホストに送信する動作と、第1タイプコマンドの完了に応答して、第1タイプコマンドの完了を示す完了応答をホストに送信する動作とを示す図。 実施形態に係るストレージデバイスにおいて実行される、ホストから事前に送信される1つの第2タイプコマンドをプール内に維持する動作と、プール内の第2タイプコマンドに対する完了応答を、ホストから送信される第1タイプコマンドに対する先行応答としてホストに送信する動作と、第1タイプコマンドの完了に応答して、第1タイプコマンドの完了を示す完了応答をホストに送信する動作とを示す図。 第1タイプコマンドとして実施形態に係るストレージデバイスに発行されるライトコマンドの構成例を示す図。 第2タイプコマンドとして実施形態に係るストレージデバイスに発行されるフラッシュアドレスリードコマンドの構成例を示す図。 実施形態に係るストレージデバイスによってホストに送信される先行応答の構成例を示す図。 第1タイプコマンドとして実施形態に係るストレージデバイスに発行されるライトコマンドの別の構成例を示す図。 第2タイプコマンドとして実施形態に係るストレージデバイスに発行されるフラッシュアドレスリードコマンドの別の構成例を示す図。 実施形態に係るストレージデバイスによってホストに送信される先行応答の別の構成例を示す図。 実施形態に係るストレージデバイスに発行されるリードコマンドの構成例を示す図。 実施形態に係るストレージデバイスに発行されるquolity of dervice(QoS)ドメインクリエートコマンドの構成例を示す図。 ブロックグループが使用されるケースにおけるブロックアドレスとオフセットとの関係を示す図。 実施形態に係るストレージデバイスにおいて管理される複数のQoSドメインを示す図。 実施形態に係るストレージデバイスにおいて管理される、複数のQoSドメインと共通フラッシュブロックプールとの関係を示すブロック図。 実施形態に係るストレージデバイスとホストとによって実行されるデータ書き込み処理を説明するためのブロック図。 実施形態に係るストレージデバイスにおいて実行される、ホストから事前に送信される1以上のフラッシュアドレスリードコマンド(FAR)をFARプール内に維持する動作と、FARプール内のフラッシュアドレスリードコマンドの一つに対する完了応答を、ホストから送信されるライトコマンドに対する先行応答としてホストに送信する動作と、ライトコマンドの完了に応答して、ライトコマンドの完了を示す完了応答をホストに送信する動作とを示す図。 実施形態に係るストレージデバイスにおいて実行される、ホストから事前に送信される1つのフラッシュアドレスリードコマンド(FAR)をFARプール内に維持する動作と、FARプール内のフラッシュアドレスリードコマンドに対する完了応答を、ホストから送信されるライトコマンドに対する先行応答としてホストに送信する動作と、ライトコマンドの完了に応答して、ライトコマンドの完了を示す完了応答をホストに送信する動作とを示す図。 実施形態に係るストレージデバイスにおいて実行される、同じメモリリソースを指定する1以上のフラッシュアドレスリードコマンド(FAR)を同じFARプールに維持する動作と、ライトコマンドによって指定されたメモリリソースに対応するFARプールに維持されているフラッシュアドレスリードコマンド(FAR)を使用して、ライトコマンドに対する先行応答をホストに送信する動作と、ライトコマンドに対する完了応答をホストに送信する動作とを示すブロック図。 あるスーパーブロックを指定する1以上のフラッシュアドレスリードコマンド(FAR)をこのスーパーブロックに対応するFARプールに維持する動作と、このスーパーブロックを指定するライトコマンドに対する先行応答をホストに送信する動作と、このライトコマンドに対する完了応答をホストに送信する動作とを示すブロック図。 実施形態に係るストレージデバイスにおいて実行される、フラッシュアドレスリードコマンド(FAR)に対する処理の手順を示すフローチャート。 実施形態に係るストレージデバイスにおいて実行される、ライトコマンドに対する処理の手順を示すフローチャート。 ホストにおいて実行される処理の手順を示すフローチャート。
以下、図面を参照して、実施形態を説明する。
図1は、実施形態に係る実施形態に係るストレージデバイスを含むストレージシステムの構成例を示すブロック図である。
ストレージシステム1は、ホスト(ホストデバイス)2と、ストレージデバイス3とを含む。ホスト(ホストデバイス)2は、一つまたは複数のストレージデバイス3にアクセスするように構成された情報処理装置である。情報処理装置は、例えば、パーソナルコンピュータ、またはサーバコンピュータである。
以下では、サーバコンピュータのような情報処理装置がホスト2として使用される場合を主として説明する。
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
ホスト2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシンが、このホスト2として機能する物理サーバ上で実行されてもよい。ホスト2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、この仮想マシンに対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。
ホスト(サーバ)2においては、フラッシュトランスレーションレイヤ(ホストFTL)301も実行される。このホストFTL301は、データ識別子それぞれとストレージデバイス3内の不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるルックアップテーブル(LUT)を含む。ホストFTL301は、このLUTを使用することによって、ストレージデバイス3内の不揮発性メモリ上のデータ配置を知ることができる。
ストレージデバイス3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。
ストレージデバイス3は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションは不揮発性メモリのアブストラクションのための機能である。ローレベルアブストラクションは、データ配置を補助する機能等を含む。データ配置を補助する機能は、例えば、ホスト2から送信されるライトコマンドに対して、ユーザデータが書き込まれるべき不揮発性メモリ内の物理的な記憶位置を示す物理アドレスを割り当てる機能と、この割り当てられた物理アドレスを上位階層(ホスト2)に通知する機能とを含む。
ストレージデバイス3は、ホスト2にケーブルまたはネットワークを介して接続される。あるいは、ストレージデバイス3は、ホスト2に内蔵されてもよい。
ホスト2とストレージデバイス3との間の通信は、ホスト2から発行される1つのコマンドに対して1つの完了応答がストレージデバイス3によってホスト2に送信されることが許容された論理インタフェース規格を用いて実行される。ストレージデバイス3は、この論理インタフェース規格に準拠して、ホスト2との通信を実行する。この論理インタフェース規格は、例えば、NVM expressTM(NVMeTM)規格である。NVMe規格がこの論理インタフェース規格として使用された場合、ストレージデバイス3とホスト2との間を接続する物理的なインタフェース50としては、例えば、PCI ExpressTM(PCIeTM)、またはEthernetTMが使用される。
次に、ホスト2の役割とストレージデバイス3の役割について説明する。図2は、ストレージデバイス3とホスト2との間の役割分担を示す図である。
ホスト(サーバ)2においては、複数のエンドユーザにそれぞれ対応する複数の仮想マシン401が実行される。各仮想マシン401においては、対応するエンドユーザによって使用される、オペレーティングシステムおよびユーザアプリケーション402が実行される。
また、ホスト(サーバ)2においては、複数のユーザアプリケーション402にそれぞれ対応する複数のI/Oサービス403が実行される。これらI/Oサービス403には、論理ブロックアドレス(LBA)ベースのブロックI/Oサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各I/Oサービス403は、ユーザアドレスタグそれぞれとストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル(LUT)を含む。
ここで、ユーザアドレスタグとは、アクセス対象のデータを識別可能なデータ識別子を意味する。このユーザアドレスタグの例は、これに限定されないが、論理ブロックアドレス(LBA)のような論理アドレスである。あるいは、キー・バリュー・ストアのキー、またはこのキーのハッシュ値、等がユーザアドレスタグとして利用されてもよい。
ストレージデバイス3の物理アドレスは、ストレージデバイス3に含まれる不揮発性メモリ内の記憶位置(物理記憶位置)を特定するためのアドレスである。
LBAベースのブロックI/Oサービスにおいては、論理アドレス(LBA)それぞれとストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するLUTが使用されてもよい。
一方、キー・バリュー・ストアサービスにおいては、キー(またはキーのハッシュ値)それぞれとこれらキーに対応するデータが格納されているストレージデバイス3の物理アドレスそれぞれとこれらキーに対応するデータそれぞれのデータ長との間のマッピングを管理するLUTが使用されてもよい。
各エンドユーザは、使用すべきアドレッシング方法(LBA、キー・バリュー・ストアのキー、このキーのハッシュ値、等)を選択することができる。
ホスト(サーバ)2においては、複数の仮想マシン401にそれぞれ対応する複数のライトバッファ(WB)404が管理されていてもよい。あるユーザアプリケーション402からのライトデータは、このユーザアプリケーション402に対応する仮想マシン401用のライトバッファ(WB)404に一時的に格納されてもよい。
ホスト(サーバ)2からストレージデバイス3へのコマンドの送信およびストレージデバイス3からホスト(サーバ)2へのコマンド完了応答の返送は、I/Oキュー500を介して実行される。ホスト2からストレージデバイス3へ送信されるコマンドには、ライトコマンドおよびリードコマンド、等が含まれる。ライトコマンドは、ストレージデバイス3内の不揮発性メモリにデータを書き込むためのコマンドである。リードコマンドは、不揮発性メモリからリード対象データを読み出すためのコマンドである。
ストレージデバイス3は、ストレージデバイス3内の不揮発性メモリに含まれる複数のメモリリソースを管理する。複数のメモリリソースは、例えば、不揮発性メモリを論理的に分割することによって得られる複数の領域である。複数の領域それぞれは、quolity of service(QoS)ドメイン601として管理される。これらQoSドメイン601の各々は、不揮発性メモリに含まれる複数のブロックグループの部分集合である。
複数のブロックグループの各々は、不揮発性メモリに含まれる複数のブロック(物理ブロック)のうちの1つ以上のブロックを含む。複数のブロックグループの各々は、スーパーブロックとも称される。
複数のブロックグループの各々は一つのQoSドメイン601のみに属し、同じブロックグループが異なるQoSドメイン601に同時に属することはない。これにより、例えば、異なるエンドユーザに対して異なるQoSドメイン601を割り当てることによって、異なるエンドユーザのデータを異なる物理記憶領域に書き込むというデータ配置を実現できる。
これらQoSドメイン601は、QoSドメインIDと称される識別子によってそれぞれ識別される。これらQoSドメインIDは、これら複数の領域(複数のQoSドメイン)にそれぞれアクセスするための複数の識別子として使用される。
あるいは、複数のメモリリソースは、不揮発性メモリに含まれる複数のブロックグループ(スーパーブロック)であってもよい。この場合においても、異なるエンドユーザのデータを異なるスーパーブロックに書き込むというデータ配置を実現できる。スーパーブロックは、スーパーブロックIDと称される識別子によってそれぞれ識別される。
ストレージデバイス3は、共通フリーブロックプール602を管理する。共通フリーブロックプールは、複数のQoSドメイン601によって共有されるフリースーパーブロックの集合を管理するために使用される。
フリースーパーブロックとは、新たな書き込み先スーパーブロックとして使用可能な状態(フリー状態)のスーパーブロックを意味する。フリースーパーブロックは、有効データを格納していないスーパーブロックである。有効データとは、LBAのようなユーザアドレスタグに関連付けられている最新のデータを意味する。つまり、ホスト2のLUTから最新のデータとしてリンクされているデータは有効データである。また、無効データとは、LBAのようユーザアドレスタグに関連付けられていないデータを意味する。例えば、あるLBAに対応する更新データがストレージデバイス3に書き込まれた場合には、このLBAに対応する以前のデータは無効データとなる。
ストレージデバイス3は、QoSドメイン毎に、共通フリーブロックプール602内のフリースーパーブロックの一つを書き込み先スーパーブロックとして割り当てる。書き込み先スーパーブロックは、データが書き込まれるべきスーパーブロックである。また、各QoSドメインについて、ストレージデバイス3は、共通フリーブロックプール602内のフリースーパーブロックから2以上の書き込み先スーパーブロックを同時的に割り当てることもできる。
この場合、プレースメントIDと称される複数の領域識別子が、各QoSドメインに対して設定される。例えば、QoSドメイン#1に対してプレースメントID1とプレースメントID2とが設定されている場合、ストレージデバイス3は、共通フリーブロックプール602内のフリースーパーブロックの一つを、QoSドメイン#1のプレースメントID1用の書き込み先スーパーブロックとして割り当てる。
さらに、ストレージデバイス3は、共通フリーブロックプール602内のフリースーパーブロックの別の一つを、QoSドメイン#1のプレースメントID2用の書き込み先スーパーブロックとして割り当てる。
QoSドメイン#1とプレースメントID1とを指定するライトコマンドをホスト2から受信した場合、ストレージデバイス3は、この受信したライトコマンドに関連付けられたデータをQoSドメイン#1のプレースメントID1用の書き込み先スーパーブロックに書き込む。一方、QoSドメイン#1とプレースメントID2とを指定するライトコマンドをホスト2から受信した場合、ストレージデバイス3は、この受信したライトコマンドに関連付けられたデータをQoSドメイン#1のプレースメントID2用の書き込み先スーパーブロックに書き込む。
これにより、QoSドメイン#1のプレースメントID1に関連付けられたデータと、QoSドメイン#1のプレースメントID2に関連付けられたデータとを、QoSドメイン#1内の異なる領域に書き込むことができる。
次に、ホストの構成とストレージデバイスの構成について説明する。図3は、ホストの構成例と実施形態に係るストレージデバイスの構成例とを示すブロック図である。
ホスト2は、プロセッサ101と、メモリ102を含む。プロセッサ101は、ホスト2内の各構成要素を制御するように構成されたCPU(Central Pricessing Unit)である。プロセッサ101は、ストレージデバイス3、または、ホスト2内の他のストレージデバイスから、メモリ102にロードされたソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアには、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラムなどが含まれる。
メモリ102は、ホスト2に設けられたメインメモリである。メモリ102は、電力の供給が停止されると記憶内容が失われる、揮発性の半導体メモリである。メモリ102は、例えば、DRAM(Dynamic Random Access Memory)のようなランダムアクセスメモリである。
メモリ102の記憶領域の一部は、一つ以上のサブミッションキュー/コンプリーションキューペア(SQ/CQペア)を格納するために使用される。図3においては、メモリ102の記憶領域の一部に複数のSQ/CQペアが格納されている場合が例示されている。各SQ/CQペアは、少なくとも一つのサブミッションキュー(SQ)と、この少なくとも一つのサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む。
サブミッションキュー(SQ)は、ストレージデバイス3にコマンドを発行するために使用されるキューである。コンプリーションキュー(CQ)は、コマンドの完了を示すコマンド完了応答をストレージデバイス3から受信するために使用されるキューである。
NVMe規格のインタフェースでは、少なくとも一つのSQ/CQペアを使用して、ホスト2からSSD3への各コマンドの発行、およびSSD3からホスト2への各コマンド完了の送信が行われる。
この場合、各コマンドは、ホスト2によって任意のサブミッションキュー(SQ)に格納される。あるコマンドの処理が完了すると、このコマンドの完了を示すコマンド完了応答(「コマンド完了」、「完了」、「完了メッセージ」とも称される)は、このコマンドの発行に使用されたサブミッションキュー(SQ)に関連付けられているコンプリーションキュー(CQ)に、SSD3のコントローラ4によって格納される。
SSD3は、コントローラ4と、不揮発性メモリ(例えば、NAND型フラッシュメモリ5)とを備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラである。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。コントローラ4は、これに限定されないが、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠するNANDインタフェース13を介して、NAND型フラッシュメモリ5に電気的に接続されている。
コントローラ4は、上述したNANDインタフェース13の他、ホストインタフェース11と、CPU12と、DRAMインタフェース14と、直接メモリアクセスコントローラ(DMAC)15と、スタティックRAM(SRAM)16と、ECCエンコード/デコード部17とを含む。これらホストインタフェース11と、CPU12と、NANDインタフェース13と、DRAMインタフェース14と、DMAC15と、SRAM16と、ECCエンコード/デコード部17とは、バス10を介して相互接続される。
ホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。ホストインタフェース11は、例えば、PCIeコントローラである。あるいは、SSD3がネットワークインタフェースコントローラを内蔵する構成である場合には、ホストインタフェース11は、ネットワークインタフェースコントローラの一部として実現されてもよい。
ホストインタフェース11は、例えば、NVMe規格に準拠してホスト2との通信を実行する。ホストインタフェース11は、アービトレーション機構を含む。このアービトレーション機構は、コマンドがフェッチされるべきサブミッションキューを、ホスト2のメモリ102上に存在する複数のサブミッションキューから選択するための機構である。アービトレーション機構は、ラウンドロビンアービトレーション機構であってもよいし、重み付きラウンドロビンアービトレーション機構であってもよい。そして、ホストインタフェース11は、CPU12の制御の下、アービトレーション機構によって選択されたサブミッションキューから一つ以上のコマンドをフェッチする。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、SRAM16、ECCエンコード/デコード部17を制御するように構成されたプロセッサである。CPU12は、制御プログラム(ファームウェア)を実行することによって様々な処理を行う。CPU12は、ストレージデバイス3への電力の供給に応じて図示しないROMまたはNAND型フラッシュメモリ5から制御プログラム(ファームウェア)をSRAM16またはDRAM6にロードする。
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたNANDコントローラである。NAND型フラッシュメモリ5が複数のNAND型フラッシュメモリダイ(NAND型フラッシュメモリチップ)から構成されている場合、NANDインタフェース13は、複数のチャンネル(Ch)を介してこれらNAND型フラッシュメモリダイそれぞれと接続されてもよい。
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAMコントローラである。
DRAM6の記憶領域の一部は、フラッシュアドレスリード(FAR)プール31およびブロック管理テーブル32を格納するために使用される。FARプール31は、ホスト2から発行される特定のコマンドの各々を完了せずに維持しておくためのメモリ領域として使用される。ブロック管理テーブル32は、複数のスーパーブロックの各々の状態を示す情報を管理するために使用される。各スーパーブロックの状態を示す情報には、例えば、各スーパーブロックの消去回数を示す情報、各スーパーブロックがアクティブブロックまたはフリーブロックのいずれであるかを示す情報、等が含まれる。
内部バッファ161は、ホスト2から受信したデータと、ホスト2に送信すべきデータとを一時的に記憶する記憶領域として使用される。内部バッファ161は、例えば、SRAM16の記憶領域内に割り当てられている。あるいは、内部バッファ161は、DRAM6の記憶領域内に割り当てられてもよい。
DMAC15は、CPU12の制御の下、ホスト2のメモリ102と内部バッファ161との間のデータ転送を実行する。
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコードすることによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う。
次に、CPU12の詳細な構成について説明する。各第1タイプコマンドについて、CPU12は、第1タイプコマンドに対する1以上の先行応答と、第1タイプコマンドが完了したことを示すコマンド完了応答とを、ホスト2に送信するという、マルチフェーズコンプリーション応答処理を実行する。
例えば、第1タイプコマンドが受け付けられた時に第1の先行応答がコントローラ4によってホスト2に送信され、第1タイプコマンドの処理が完了した時にコマンド完了応答がコントローラ4によってホスト2に送信されるという2フェーズコンプリーション応答処理が実行される。
あるいは、第1タイプコマンドが受け付けられた時に第1の先行応答がコントローラ4によってホスト2に送信され、第1タイプコマンドの処理が開始された時に第2の先行応答がコントローラ4によってホスト2に送信され、第1タイプコマンドの処理が完了した時にコマンド完了応答がコントローラ4によってホスト2に送信されるという3フェーズコンプリーション応答処理が実行されてもよい。
あるいは、第1タイプコマンドが受け付けられた時に第1の先行応答がコントローラ4によってホスト2に送信され、第1タイプコマンドの処理が開始された時に第2の先行応答がコントローラ4によってホスト2に送信され、第1タイプコマンドの処理が中断された時に第3の先行応答がコントローラ4によってホスト2に送信され、第1タイプコマンドの処理が完了した時にコマンド完了応答がコントローラ4によってホスト2に送信されるという4フェーズコンプリーション応答処理が実行されてもよい。
マルチフェーズコンプリーション応答処理を実行することにより、第1タイプコマンドが受け付けられたから第1タイプコマンドの処理が完了するまでに要する時間が長い場合であっても、コントローラ4は、第1タイプコマンドの処理に関する情報を第1タイプコマンドに対する一つの先行応答としてホスト2に通知することが可能となる。
マルチフェーズコンプリーション応答処理を実現するために、CPU12は、コマンドフェッチ部21およびコマンド処理部22として機能する。コマンドフェッチ部21およびコマンド処理部22の各々の一部または全部は、コントローラ4内の専用ハードウェアによって実現されてもよい。
コマンドフェッチ部21は、ホスト2によって発行されたコマンドをサブミッションキュー(SQ)からフェッチする。本実施形態では、フェッチしたコマンドが第1タイプコマンドである場合、コマンドフェッチ部21は、フェッチしたコマンドをコマンド処理部22に送信する。第1タイプコマンドは、ストレージデバイス3に所定の処理の実行を要求する特定の種類のコマンドである。
フェッチしたコマンドが第2タイプコマンドである場合、コマンドフェッチ部21は、フェッチしたコマンドを完了させずにFARプール31内に維持する。第2タイプコマンドは、第1タイプコマンドに対する1以上の先行応答の一つがストレージデバイス3によってホスト2に送信されることを可能にするためのコマンドである。
1以上の先行応答の各々は、第1タイプコマンドが完了したことを示すコマンド完了応答の前に、ストレージデバイス3によってホスト2に送信される応答である。1以上の先行応答は、少なくとも、コントローラ4によって第1タイプコマンドが受け付けられたことを示す第1の先行応答を含む。また、1以上の先行応答は、例えば、第1の先行応答に加え、第1タイプコマンドの処理の開始を示す第2の先行応答を含んでいてもよい。また、1以上の先行応答は、第1の先行応答および第2に先行応答に加え、第1タイプコマンドの処理の中断を示す第3の先行応答を含んでいてもよい。
ホスト2は、第1タイプコマンドに対する1以上の先行応答の各々をストレージデバイス3から受信するために、第1タイプコマンドをストレージデバイス3に発行する前に、1以上の第2タイプコマンドをストレージデバイス3に事前に発行する。
コントローラ4においては、ホスト2から発行される1以上の第2タイプコマンドの各々はすぐには完了されずに、ストレージデバイス3内のメモリ領域であるFARプール31内に維持される。そして、第1タイプコマンドがホスト2から受信された場合に、コントローラ4は、第1の先行応答をホスト2に送信するために、FARプール31内に維持されている第2タイプコマンドの一つを完了させる。
より詳しくは、第1タイプコマンドがホスト2から受信された場合、コマンド処理部22は、FARプール31から1以上の第2タイプコマンドのうちの一つの第2タイプコマンドを取得する。そして、コマンド処理部22は、取得した一つの第2タイプコマンドを完了させ、完了された一つの第2タイプコマンドに対するコマンド完了応答を、第1タイプコマンドに対する第1の先行応答としてホスト2に送信する。
この場合、第1の先行応答を表す情報を含む、第2タイプコマンドに対するコマンド完了応答が、コンプリーションキュー(CQ)内の1つのエントリ(コンプリーションキューエントリ)に格納されてもよい。
1つのコンプリーションキューエントリのサイズは16バイトである。このため、第1の先行応答を表す情報を含む、第2タイプコマンドに対するコマンド完了応答を1つのコンプリーションキューエントリに格納するという構成を使用した場合には、第1タイプコマンドに対する第1の先行応答を表す情報の最大サイズは、比較的小さいサイズに制限される。
本実施形態では、例えば、コントローラ4からホスト2へのデータ転送を伴う一種のリードコマンドが第2タイプコマンドとして使用される。一種のリードコマンドである第2タイプコマンドは、情報が転送されるべきホスト2のメモリ102に含まれるバッファ領域を示すポインタを含む。
この場合、第1タイプコマンドの処理に関する情報を、このポインタによって指定されるバッファ領域に第1の先行応答として転送することができる。メモリ102に含まれるバッファ領域のサイズは十分に大きなサイズに設定可能である。したがって、第1タイプコマンドの処理に関する情報を、メモリ102のバッファ領域に第1の先行応答として転送することにより、第1の先行応答としてホスト2に通知可能な情報の量を増やすことが可能となる。
そして、この第1タイプコマンドの処理が完了した場合、コマンド処理部22は、第1タイプコマンドの完了を示すコマンド完了応答をホスト2に送信する。この場合、第1タイプコマンドの完了を示すコマンド完了応答は、一つのコンプリーションキューエントリに格納される。
このように、本実施形態では、第1タイプコマンドに対する先行応答をストレージデバイス3によってホスト2に送信することを可能にするための第2タイプコマンドが、ホスト2によってストレージデバイス3に事前に発行される。そして、ホスト2から発行される第1タイプコマンドを受信した場合、ストレージデバイス3のコントローラ4は、事前に発行された第2タイプコマンドの一つを完了させ、完了された第2タイプコマンドに対するコマンド完了応答を、第1タイプコマンドに対する先行応答の一つである第1の先行応答としてホスト2に送信する。
次に、第2タイプコマンドとしてコントローラ4からホスト2へのデータ転送を伴う一種のリードコマンドが使用されるケースについて説明する。
この場合、1以上の第2タイプコマンドの各々は、情報が転送されるべき、メモリ102内のバッファ領域を示すポインタを含む。
第1タイプコマンドがホスト2から受信された場合、コマンド処理部22は、FARプール31から1以上の第2タイプコマンドのうちの一つの第2タイプコマンドを取得する。そして、コマンド処理部22は、取得した一つの第2タイプコマンドを完了させ、そして、(1)完了された一つの第2タイプコマンドに対するコマンド完了応答をホスト2に送信する動作と、(2)第1タイプコマンドの処理に関する情報を、ポインタによって示されるメモリ102内のバッファ領域に第1の先行応答として転送する動作と、を実行する。
つまり、第2タイプコマンドに対するコマンド完了応答は、コンプリーションキュー(CQ)に格納される。一方、第1タイプコマンドの処理に関する情報は、メモリ102内のバッファ領域に第1の先行応答として転送される。
このように、コントローラ4からホスト2へのデータ転送を伴う一種のリードコマンドを第2タイプコマンドとして使用することにより、コンプリーションキュー(CQ)エントリよりも大きなサイズを有するメモリ102内のバッファ領域に、第1タイプコマンドに対する先行応答を転送することができる。よって、第1タイプコマンドの処理に関する様々な情報を、第1タイプコマンドに対する先行応答として、ホスト2に送信することが可能となる。
次に、NAND型フラッシュメモリ5に含まれる複数のメモリリソースにそれぞれ対応する複数のFARプールを使用する構成について説明する。
複数のメモリリソースは、例えば、複数のQoSドメインIDによって識別されるNAND型フラッシュメモリ5内の複数の領域である。あるいは、複数のメモリリソースは、例えば、複数のスーパーブロックIDによって識別されるNAND型フラッシュメモリ5内の複数のスーパーブロックであってもよい。
第1タイプコマンドの各々は、(1)NAND型フラッシュメモリ5に含まれる複数のメモリリソースのうちの処理対象メモリリソースを指定するパラメータと、(2)ホスト2によって実行される複数のプロセスのうち、この第1タイプコマンドに対応する処理の実行を要求したプロセスを示すプロセス識別子(プロセスID)を指定するパラメータと、を含む。
コントローラ4は、複数のメモリリソースに関連付けられた複数のメモリ領域である複数のFARプールを管理する。コマンドフェッチ部21は、各々が、複数のメモリリソースのうちの一つのメモリリソースを指定するパラメータと、複数のプロセスのうちの一つのプロセスを示すプロセス識別子を指定するパラメータと、を含む複数の第2タイプコマンドをホスト2から受信する。コマンドフェッチ部21は、同じメモリリソースを指定する第2タイプコマンドそれぞれが同じFARプール内に維持されるように、受信した複数の第2タイプコマンドの各々によって指定されるメモリリソースに基づいて、受信した複数の第2タイプコマンドの各々を、複数のFARプールのうちのFARプール内に維持する。
つまり、メモリリソース#1を指定する第2タイプコマンドの各々は、メモリリソース#1に対応するFARプール#1内に維持される。同様に、メモリリソース#2を指定する第2タイプコマンドの各々は、メモリリソース#2に対応するFARプール#2内に維持される。
ホスト2から第1タイプコマンドを受信した場合、コマンド処理部22は、まず、複数のFARプールから、受信した第1タイプコマンドによって指定された処理対象メモリリソースに対応するFARプール(ここでは、第1のFARプール)を選択する。コマンド処理部22は、選択した第1のFARプール内に維持されている第2タイプコマンドのうち、受信した第1タイプコマンドによって指定されるプロセス識別子と同一のプロセス識別子を指定する第2タイプコマンドを取得する。これにより、受信した第1タイプコマンドによって指定されるリソース識別子と同一のリソース識別子を指定し、且つ、受信した第1タイプコマンドによって指定されるプロセス識別子と同一のプロセス識別子を指定する第2タイプコマンドを容易に取得することができる。
そして、コマンド処理部22は、取得した第2タイプコマンドを完了させ、完了された第2タイプコマンドに対するコマンド完了応答を、受信した第1タイプコマンドに対する第1の先行応答としてホスト2に送信する。取得した第2タイプコマンドが、情報が転送されるべきホスト2のメモリ102内のバッファ領域を示すデータポインタを含む場合、コマンド処理部22は、受信した第1タイプコマンドの処理に関する情報を、メモリ102内のこのバッファ領域に、受信した第1タイプコマンドに対する第1の先行応答として転送する。例えば、コマンド処理部22は、メモリライト要求をホスト2に送信する。これにより、コマンド処理部22は、ホスト2のプロセッサ101を介して、受信した第1タイプコマンドの処理に関する情報を、データポインタによって示されるメモリ102内のバッファ領域に格納させる。これにより、第1タイプコマンドに対応する処理の実行を要求したプロセス以外の他のプロセスが、この第1タイプコマンドの処理に関する情報を参照することを、防ぐことができる。
また、1つ以上の先行応答の各々は、受信した第1タイプコマンドに含まれる識別情報も含む。受信した第1タイプコマンドがNAND型フラッシュメモリ5に含まれる複数のメモリリソースのうちの処理対象メモリリソースを識別するためのリソース識別子を含む場合、受信した第1タイプコマンドに対する1つ以上の先行応答の各々に含まれる識別情報は、受信した第1タイプコマンドに含まれるリソース識別子を含む。また、第1タイプコマンドに対する1つ以上の先行応答の各々に含まれる識別情報は、第1タイプコマンドがフェッチされたサブミッションキュー(SQ)を識別するため識別子であるサブミッションキューID(SQID)、受信した第1タイプコマンドを識別するためのコマンド識別子であるコマンドID、またはホスト2によって第1タイプコマンドに付与された任意の数値、の少なくとも1つを含む。
なお、選択した第1のFARプール内に維持されている第2タイプコマンドに、受信した第1タイプコマンドによって指定されるプロセス識別子と同一のプロセス識別子を指定する第2タイプコマンドが存在しない場合には、コマンド処理部22は、受信した第1タイプコマンドをエラーとして完了させる。この場合、コマンド処理部22は、受信した第1タイプコマンドのエラーを示すステータスを含む、第1タイプコマンドに対するコマンド完了応答をホスト2に送信する。
次に、特定のFARプール内に維持されており、且つ、未完了である第2タイプコマンドの各々をエラーとして完了させる動作について説明する。
コントローラ4は、複数のメモリリソースの各々について、利用可能状態または利用不可能状態のいずれであるかを管理する。例えば、複数のメモリリソースの各々がスーパーブロックである場合、未書き込み領域を含むスーパーブロックは利用可能状態である。スーパーブロック全体がデータで満たされたスーパーブロック、つまり、未書き込み領域を含まないスーパーブロックは、利用不可能状態である。
第1のメモリリソースを指定する複数の第1タイプコマンドがコントローラ4によって受信および処理されると、第1のメモリリソースは、利用可能状態から利用不可能状態に遷移する。例えば、あるスーパーブロックを指定する複数のライトコマンドがコントローラ4によって受信および処理されると、このスーパーブロックは、利用可能状態から利用不可能状態に遷移する。
第1のメモリリソースが利用可能状態から利用不可能状態に遷移した場合、コマンド処理部22は、複数のFARプールのうち、第1のメモリリソースに対応する一つのFARプール内に維持されており、且つ、未完了である第2タイプコマンドの各々をエラーとして完了させる。この場合、これら第2タイプコマンドの各々について、コマンド処理部22は、第2タイプコマンドのエラーを示すステータスを含む、第2タイプコマンドに対するコマンド完了応答をホスト2に送信する。
次に、第1タイプコマンドとして使用されるコマンドの例について説明する。本実施形態では、データ(ライトデータ)が書き込まれるべき処理対象メモリリソースを指定し、処理対象メモリリソース内の書き込み先位置を指定しないタイプのライトコマンド(ネームレスライトコマンド:NLWコマンド)が第1タイプコマンドとして使用される。
このライトコマンドは、メモリリソースIDを指定するパラメータと、ユーザアドレスタグのようなデータ識別子を指定するパラメータと、プロセスIDを指定するパラメータとを含む。メモリリソースIDを指定するパラメータは、複数のメモリリソースのうちの一つのメモリリソースを、データ(ライトデータ)が書き込まれるべき処理対象メモリリソースとして指定する。データ識別子を指定するパラメータは、ライトデータのデータ識別子を指定する。
ホスト2からライトコマンドを受信した場合、コマンド処理部22は、受信したライトコマンドに対して、ライトテータが書き込まれるべき処理対象メモリリソース内の物理的な記憶位置、つまり処理対象メモリリソース内の書き込み先位置、を示す物理アドレス(フラッシュアドレス)を割り当てる。割り当てられた物理アドレスは、処理対象メモリリソースを識別するリソース識別子と、処理対象メモリリソースの先頭から書き込み先位置までのオフセットとによって表される。そして、割り当てられた物理アドレスにライトテータを書き込むプログラム動作(ライト動作、またはフラッシュ書き込み処理とも称される)を開始する前に、コマンド処理部22は、割り当てられた物理アドレスとデータ識別子とを第1の先行応答としてホスト2に送信する。
この場合、コマンド処理部22は、受信したライトコマンドによって指定されたメモリリソースIDおよびプロセスIDとそれぞれ同じメモリリソースIDおよびプロセスIDを指定する一つの第2タイプコマンドをFARプール31から取得する。コマンド処理部22は、取得した一つの第2タイプコマンドを完了させ、(1)完了された一つの第2タイプコマンドに対するコマンド完了応答をホスト2に送信する動作と、(2)割り当てられた物理アドレスと、データ識別子とを、ホスト2に設けられたメモリ102内のバッファ領域に、第1の先行応答として転送する動作と、を実行する。
この後、コマンド処理部22は、受信したライトコマンドに関連付けられたライトデータをホスト2のメモリ102内のライトバッファから取得する。例えば、コマンド処理部22は、メモリリード要求をホスト2に送信する。これにより、コマンド処理部22は、ホスト2のプロセッサ101を介して、ライトデータをホスト2のメモリ102内のライトバッファから取得することができる。そして、コマンド処理部22は、割り当てられた物理アドレスに基づいて、取得したライトデータをNAND型フラッシュメモリ5に書き込む。この場合、ライトデータは、割り当てられた物理アドレスによって示される、処理対象リソース内の書き込み先位置に書き込まれる。
NAND型フラッシュメモリ5へのライトデータの書き込みの完了に応じて、コマンド処理部22は、ライトコマンドの完了を示すコマンド完了応答をホスト2に送信する。この場合、コマンド完了応答は、コンプリーションキュー(CQ)内の一つのエントリに格納される。
このように、ライトコマンド(ネームレスライトコマンド)が第1タイプコマンドとして使用されるケースにおいては、ライトコマンドの処理に関する情報として、ライトコマンドに対して割り当てられた物理アドレス(フラッシュアドレス)とライトデータのデータ識別子とがホスト2のメモリ102内のバッファ領域に転送される。つまり、ライトコマンドに対して割り当てられた物理アドレス(フラッシュアドレス)とライトデータのデータ識別子とが、ライトコマンドに対する第1の先行応答として、ホスト2のメモリ102内のバッファ領域に転送される。したがって、ライトコマンドに対応する先行応答がコントローラ4によってホスト2に送信されることを可能にするための第2タイプコマンドは、フラッシュアドレスリードコマンド(FARコマンド)として参照される。
なお、第1タイプコマンドは、コントローラ4にNAND型フラッシュメモリ5のメンテナンス動作を実行させるメンテナンスコマンドであってもよい。メンテナンス動作は、NAND型フラッシュメモリ5のガベージコレクション動作であってもよい。
次に、NAND型フラッシュメモリ5の構成について説明する。図4は、実施形態に係るストレージデバイスに設けられた、NANDインタフェースと複数のNAND型フラッシュメモリダイとの関係を示すブロック図である。
NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリダイを含む。個々のNAND型フラッシュメモリダイは独立して動作可能である。
図4においては、NANDインタフェース13に16個のチャンネルCh.1~Ch.16が接続されており、16個のチャンネルCh.1~Ch.16の各々に2つのNAND型フラッシュメモリダイが接続されている場合が例示されている。この場合、チャンネルCh.1~Ch.16に接続された16個のNAND型フラッシュメモリダイ#1~#16がバンク#0として編成されてもよく、またチャンネルCh.1~Ch.16に接続された残りの16個のNAND型フラッシュメモリダイ#17~#32がバンク#1として編成されてもよい。バンクは、複数のNAND型フラッシュメモリダイをバンクインタリーブによって並列動作させるための単位である。図4の構成例においては、16個のチャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、複数のブロックを含むブロックグループ(スーパーブロック)の単位で実行されてもよい。一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
図5には、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#1内の物理ブロックBLK2、NAND型フラッシュメモリダイ#2内の物理ブロックBLK3、NAND型フラッシュメモリダイ#3内の物理ブロックBLK7、NAND型フラッシュメモリダイ#4内の物理ブロックBLK4、NAND型フラッシュメモリダイ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#32内の物理ブロックBLK3)を含む一つのスーパーブロックSBが例示されている。
次に、マルチフェーズコンプリーション応答処理の手順について説明する。図6は、実施形態に係るストレージデバイス3において実行される、ホスト2から事前に送信される1以上の第2タイプコマンドをプール内に維持する動作と、プール内の第2タイプコマンドの一つに対する完了応答を、ホスト2から送信される第1タイプコマンドに対する先行応答としてホストに送信する動作と、第1タイプコマンドの完了に応答して、第1タイプコマンドの完了を示す完了応答をホストに送信する動作とを示す図である。
まず、ホスト2は、一つ以上の第2タイプコマンドを、サブミッションキュー(SQ)を介してストレージデバイス3に事前に発行する(ステップS11)。図6では、3つの第2タイプコマンドが事前に発行された場合が例示されている。複数の第2タイプコマンドをストレージデバイス3に事前に発行しておくことにより、たとえ複数の第1タイプコマンドが同時的にホスト2によってストレージデバイス3に発行された場合であっても、ストレージデバイス3は、複数の第1タイプコマンドの各々に対する先行応答をホスト2に返すことができる。なお、ホスト2がストレージデバイス3に同時に発行する第1タイプコマンドの数が1であることが保証されている場合には、ホスト2は、1つの第2タイプコマンドだけをストレージデバイス3に事前に発行すればよい。
ホスト2によって事前に発行された一つ以上の第2タイプコマンドの各々は、ストレージデバイス3のNAND型フラッシュメモリ5に含まれる複数のメモリリソースのうちの処理対象のメモリリソースを指定するパラメータと、第2タイプコマンドに関連付けられたプロセスを示すプロセス識別子を指定するパラメータとを含む。あるメモリリソースへの書き込みを開始する場合においては、このメモリリソースへの書き込み開始を要求したプロセスを示すプロセス識別子が、第2タイプコマンドに関連付けられたプロセスとして使用され得る。
一つ以上の第2タイプコマンドを受信した場合、ストレージデバイス3は、受信した第2タイプコマンドそれぞれをプールに格納する。ストレージデバイス3は、NAND型フラッシュメモリ5に含まれるメモリリソース毎にプールを管理する。ストレージデバイス3は、受信した第2タイプコマンドの各々に含まれる、処理対象メモリリソースを指定するパラメータに基づいて、受信した第2タイプコマンドの各々を格納すべきプールを決定する。ストレージデバイス3は、受信した各第2タイプコマンドを完了せずに、決定したプール内に維持する。
その後、ホスト2は、第1タイプコマンドを、サブミッションキュー(SQ)を介してストレージデバイス3に発行する(ステップS12)。第1タイプコマンドは、第2タイプコマンドと同様に、NAND型フラッシュメモリ5に含まれる複数のメモリリソースのうちの処理対象のメモリリソースを指定するパラメータと、ホスト2によって実行される複数のプロセスのうちの処理を要求したプロセスを示すプロセス識別子を指定するパラメータとを含む。
ストレージデバイス3は、第1タイプコマンドを受信したことに応じて、受信された第1タイプコマンドによって指定されたメモリリソース識別子およびプロセス識別子と同じメモリリソース識別子およびプロセス識別子をそれぞれ指定する第2タイプコマンドをプールから取得する。この場合、ストレージデバイス3は、まず、第1タイプコマンドによって指定されたメモリリソース識別子によって示される処理対象メモリリソースに対応するプールを選択する。そして、ストレージデバイス3は、選択したプールから、受信された第1タイプコマンドによって指定されたプロセス識別子と同じプロセス識別子を指定する第2タイプコマンドを取得する。
受信された第1タイプコマンドによって指定されたプロセス識別子と同じプロセス識別子を指定する複数の第2タイプコマンドが選択したプールに存在している場合には、ストレージデバイス3は、これら複数の第2タイプコマンドのうち、最後にホスト2から受信された第2タイプコマンドを取得する(後入れ先出し)。あるいは、ストレージデバイス3は、これら複数の第2タイプコマンドのうち、最初にホスト2から受信された第2タイプコマンドを取得してもよい(先入れ先出し)。
次に、ストレージデバイス3は、取得した第2タイプコマンドを完了させ、取得した第2タイプコマンドに対する完了応答を、ステップS12で受信された第1タイプコマンドに対する先行応答としてホスト2に送信する(ステップS13)。ステップS13では、ストレージデバイス3は、ステップS12で受信された第1タイプコマンドに対する先行応答を表す情報を含む、第2タイプコマンドに対するコマンド完了応答を、一つのコンプリーションキューエントリに格納してもよい。あるいは、第2タイプコマンドとして一種のリードコマンドが使用されるケースにおいては、ストレージデバイス3は、第2タイプコマンドに対するコマンド完了応答をホスト2に送信する動作と、第1タイプコマンドの処理に関する情報を、第1タイプコマンドに対する先行応答として、第2タイプコマンドに関連付けられたメモリ102内のバッファ領域に転送する動作と、を実行する。第2タイプコマンドに対するコマンド完了応答は、コンプリーションキュー(CQ)に格納される。
ステップS13でストレージデバイス3から送信された、第2タイプコマンドに対するコマンド完了応答を受信すると、ホスト2は、次の第1タイプコマンドをストレージデバイス3に発行する前に、追加の第2タイプコマンドを、サブミッションキュー(SQ)を介してストレージデバイス3に事前に発行する(ステップS14)。追加の第2タイプコマンドは、ステップS12でストレージデバイス3に発行された第1タイプコマンドによって指定されるメモリリソース識別子およびプロセス識別子と同一のメモリリソース識別子およびプロセス識別子を含む。先行応答の送信のために一つの第2タイプコマンドが完了されるので、未完了の第2タイプコマンドの数は1つ減少する。追加の第2タイプコマンドを発行することにより、未完了の第2タイプコマンドの数を、先行応答が送信される前の未完了の第2タイプコマンドの数に戻すことができる。
ストレージデバイス3は、第1タイプコマンドの処理を完了すると、第1タイプコマンドに対するコマンド完了応答をホスト2に送信する(ステップS15)。ステップS15で送信された第1タイプコマンドに対するコマンド完了応答は、第1タイプコマンドの処理が正常に実行されたか否を示すステータス等を含む。第1タイプコマンドに対するコマンド完了応答は、コンプリーションキュー(CQ)に格納される。
以上の動作によって、ストレージデバイス3は、一つの第1タイプコマンドに対して、先行応答とコマンド完了応答とを含む二つの応答をホスト2に送信することができる。また、第2タイプコマンドが、情報が転送されるべきメモリ102内のバッファ領域を示すポインタを含む場合には、第1の先行応答としてホスト2に通知可能な情報の量を増やすことが可能となる。
また、ストレージデバイス3は、あらかじめ1以上の第2タイプコマンドを保持しているため、第1タイプコマンドの受信後に第2タイプコマンドを受信する場合と比べて、より迅速に先行応答をホスト2に送信することができる。
ここでは、事前に複数の第2タイプコマンドがホスト2によって発行される場合について説明したが、ホスト2は、第1タイプコマンドを発行する直前に一つの第2タイプコマンドを発行してもよい。
次に、第1タイプコマンドを発行する直前に一つの第2タイプコマンドを発行する場合のマルチフェーズコンプリーション応答処理の手順について説明する。図7は、実施形態に係るストレージデバイスにおいて実行される、ホストから事前に送信される1つの第2タイプコマンドをプール内に維持する動作と、プール内の第2タイプコマンドに対する完了応答を、ホストから送信される第1タイプコマンドに対する先行応答としてホストに送信する動作と、第1タイプコマンドの完了に応答して、第1タイプコマンドの完了を示す完了応答をホストに送信する動作とを示す図である。
まず、ホスト2は、一つの第2タイプコマンドを、サブミッションキュー(SQ)を介してストレージデバイス3に事前に発行する(ステップS21)。第2タイプコマンドは、ストレージデバイス3に含まれる複数のメモリリソースのうちの処理対象のメモリリソースを指定するパラメータと、第2タイプコマンドに関連付けられたプロセスを示すプロセス識別子を指定するパラメータとを含む。あるメモリリソースへの書き込みを開始する場合においては、このメモリリソースへの書き込み開始を要求したプロセスを示すプロセス識別子が、第2タイプコマンドに関連付けられたプロセスとして使用され得る。図7に示されるマルチフェーズコンプリーション応答処理では、ホスト2は、第1タイプコマンドをストレージデバイス3に発行する直前に、第2タイプコマンドをストレージデバイス3に発行する。したがって、この第2タイプコマンドは、対応する第1タイプコマンドによって指定されるリソース識別子およびプロセス識別子と同じリソース識別子およびプロセス識別子をそれぞれ含む。
第2タイプコマンドを受信した場合、ストレージデバイス3は、受信した第2タイプコマンドをプールに格納する。ストレージデバイス3は、NAND型フラッシュメモリ5に含まれるメモリリソース毎にプールを管理する。ストレージデバイス3は、受信した第2タイプコマンドに含まれる、処理対象メモリリソースを指定するパラメータに基づいて、受信した第2タイプコマンドを格納すべきプールを決定する。ストレージデバイス3は、受信した第2タイプコマンドを完了せずに、決定したプール内に維持する。
その後、ホスト2は、第1タイプコマンドを、サブミッションキュー(SQ)を介してストレージデバイス3に発行する(ステップS22)。第1タイプコマンドは、第2タイプコマンドと同様に、NAND型フラッシュメモリ5に含まれる複数のメモリリソースのうちの処理対象のメモリリソースを指定するパラメータと、ホスト2によって実行される複数のプロセスのうちの処理を要求したプロセスを示すプロセス識別子を指定するパラメータとを含む。
ストレージデバイス3は、第1タイプコマンドを受信したことに応じて、受信した第1タイプコマンドによって指定されたメモリリソース識別子およびプロセス識別子と同じメモリリソース識別子およびプロセス識別子をそれぞれ指定する第2タイプコマンドをプールから取得する。この場合、ストレージデバイス3は、まず、第1タイプコマンドによって指定されたメモリリソース識別子によって示される処理対象メモリリソースに対応するプールを選択する。そして、ストレージデバイス3は、選択したプールから、受信された第1タイプコマンドによって指定されたプロセス識別子と同じプロセス識別子を指定する第2タイプコマンドを取得する。
ここでは、ストレージデバイス3は、例えば、後入れ先出し方式で第2タイプコマンドを取得する。この場合、ストレージデバイス3は、選択したプールに維持されている第2タイプコマンドのうち、受信した第1タイプコマンドによって指定されたプロセス識別子と同一のプロセス識別子を含み、且つ、ホスト2から最後に受信された第2タイプコマンドを取得する。図7に示されるマルチフェーズコンプリーション応答処理では、受信した第1タイプコマンドの直前に発行された第2タイプコマンドが、受信した第1タイプコマンドによって指定されたプロセス識別子と同一のプロセス識別子を含み、且つ、ホスト2から最後に受信された第2タイプコマンドとして、取得される。
そして、ストレージデバイス3は、取得した第2タイプコマンドを完了させ、完了された第2タイプコマンドに対するコマンド完了応答を、ステップS22で受信された第1タイプコマンドに対する先行応答としてホスト2に送信する(ステップS23)。ステップS23では、ストレージデバイス3は、ステップS22で受信された第1タイプコマンドに対する先行応答を表す情報を含む、第2タイプコマンドに対するコマンド完了応答を、一つのコンプリーションキューエントリに格納してもよい。あるいは、第2タイプコマンドとして一種のリードコマンドが使用されるケースにおいては、ストレージデバイス3は、第2タイプコマンドに対するコマンド完了応答をホスト2に送信する動作と、第1タイプコマンドの処理に関する情報を、第2タイプコマンドに関連付けられたメモリ102内のバッファ領域に第1タイプコマンドに対する先行応答して転送する動作とを実行してもよい。第2タイプコマンドに対するコマンド完了応答は、コンプリーションキュー(CQ)に格納される。
ステップS23でストレージデバイス3から送信された、第2タイプコマンドに対するコマンド完了応答を受信すると、ホスト2は、次の第1タイプコマンドをストレージデバイス3に発行する前に、追加の第2タイプコマンドを、サブミッションキュー(SQ)を介してストレージデバイス3に事前に発行してもよい(ステップS24)。追加の第2タイプコマンドは、ステップS22でストレージデバイス3に発行された第1タイプコマンドによって指定されるメモリリソース識別子およびプロセス識別子と同一のメモリリソース識別子およびプロセス識別子を含む。
あるいは、ホスト2は、次の第1タイプコマンドをストレージデバイス3に発行する直前に、次の第2タイプコマンドを、サブミッションキュー(SQ)を介してストレージデバイス3に発行してもよい。次の第2タイプコマンドは、次の第1タイプコマンドによって指定されるリソース識別子およびプロセス識別子と同じリソース識別子およびプロセス識別子をそれぞれ含む。また、ステップS24の処理が実行されるタイミングは、次の第1タイプコマンドをストレージデバイス3に発行する直前に変更される。そして、次の第1タイプコマンドをストレージデバイス3に発行する直前に、次の第1タイプコマンドに対応する次の第2タイプコマンドがストレージデバイス3に発行される。
ストレージデバイス3は、第1タイプコマンドの処理を完了すると、第1タイプコマンドに対するコマンド完了応答をホスト2に送信する(ステップS25)。ステップS25で送信された第1タイプコマンドに対するコマンド完了応答は、第1タイプコマンドの処理が正常に実行されたか否を示すステータス等を含む。第1タイプコマンドに対するコマンド完了応答は、コンプリーションキュー(CQ)に格納される。
次に、ホスト2からストレージデバイス3に送信されるコマンドの具体例について説明する。
図8は、第1タイプコマンドとして実施形態に係るストレージデバイスに発行されるライトコマンドの構成例を示す図である。
ライトコマンド(ネームレスライトコマンド:NLW)は、第1タイプコマンドとして使用されるライトコマンドである。このライトコマンドは、コマンドID、QoSドメインID、プレースメントID、ユーザアドレスタグ(UAタグ)、プロセスID、長さ、データポインタ、等を含んでいてもよい。
コマンドIDはこのコマンド(このライトコマンド)を識別するための識別子である。QoSドメインIDは、データが書き込まれるべきQoSドメインを一意に識別可能な識別子である。あるエンドユーザに対応するアプリケーションからのライト要求に応じてホスト2から送信されるライトコマンドは、このエンドユーザに対応するQoSドメインを指定するQoSドメインIDを含む。プレースメントIDは、データが書き込まれるべき、QoSドメイン内の記憶領域を一意に識別可能な識別子である。各QoSドメインにおいては、異なるプレースメントIDに関連付けられたデータは、そのQoSドメインに現在割り当てられている異なる書き込み先スーパーブロックに書き込まれる。このため、QoSドメインIDとプレースメントIDとの組み合わせは、データが書き込まれるべき書き込み先スーパーブロックを指定するパラメータとして使用される。ライトコマンド(NLW)をNVMe規格で規定された既存のライトコマンドを用いて実現する場合には、NVMe規格で規定された既存のライトコマンドに含まれるネームスペース識別子フィールドおよびストリーム識別子フィールドが、QoSドメインIDを指定するフィールドおよびプレースメントIDを指定するフィールドとしてそれぞれ使用され得る。
UAタグは、書き込まれるべきライトデータを識別するための識別子である。このUAタグは、LBAのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよいし、このキーのハッシュ値であってもよい。プロセスIDは、ライトデータの書き込みを要求したプロセスを一意に識別するための識別子である。
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、LBAの数によって指定されてもよいし、あるいはバイトによって指定されてもよい。
データポインタは、書き込まれるべきライトデータが格納されているホスト2のライトバッファ内の記憶位置を示す記憶位置情報である。ホスト2に設けられたメモリ102の記憶領域の一部がホスト2のライトバッファとして使用される。データポインタは、ライトバッファアドレスとしても参照される。
図9は、第2タイプコマンドとして実施形態に係るストレージデバイス3に発行されるフラッシュアドレスリードコマンドの構成例を示す図である。
フラッシュアドレスリードコマンド(FAR)は、ライトコマンド(NLW)に対して割り当てられた物理アドレスをホスト2に通知するために使用される。このFARは、ライトコマンド(NLW)に対応する先行応答がコントローラ4によってホスト2に送信されることを可能にするための第2タイプコマンドとして使用される。このFARは、コマンドID、QoSドメインID、プレースメントID、プロセスID、データポインタ、サイズを含んでいてもよい。
コマンドIDは、このコマンド(このFAR)を識別するための識別子である。QoSドメインIDは、このFARに関連付けられたQoSドメインを識別する識別子である。プレースメントIDは、このFARに関連付けられたQoSドメイン内の記憶領域を識別する識別子である。プロセスIDは、このFARに関連付けられた一つのプロセスを識別する識別子である。
データポインタは、このFARに対するコマンド完了応答に関連付けられたリードデータ、つまりライトコマンド(NLW)に対する先行応答に関連付けられた情報、が転送されるべき、ホスト2のメモリ102内の位置(バッファ領域)を示すバッファアドレスである。サイズは、このバッファ領域のサイズを示す。
図10は、実施形態に係るストレージデバイス3によってホスト2に先行応答として送信される情報の例を示す図である。
ライトコマンド(NLW)がコントローラ4によって受け付けられた場合、コントローラ4は、図10に示すアドレス記録要求(ARR)を、ライトコマンド(NLW)に対する先行応答としてホスト2に送信する。アドレス記録要求(ARR)は、フラッシュアドレスリードコマンド(FAR)に関連付けられたリードデータに対応する。アドレス記録要求(ARR)は、このライトコマンド(NLW)に対してNAND型フラッシュメモリ5内の物理アドレスが割り当てられた際に、ストレージデバイス3からホスト2に送信される。
先行応答つまりアドレス記録要求(ARR)には、UAタグ、物理アドレス、識別情報が含まれる。
UAタグは、この先行応答に対応するライトコマンドに含まれるUAタグである。物理アドレスは、この先行応答に対応するライトコマンドに割り当てられた物理アドレスである。物理アドレスは、ライトコマンドに関連付けられたデータが書き込まれるべき書き込み先位置を示す。物理アドレスは、データが書き込まれるべきスーパーブロックを示すスーパーブロック識別子と、このスーパーブロックの先頭から書き込み先位置までのオフセットとによって表される。
識別情報は、先行応答に対応するライトコマンドを識別するための識別情報である。識別情報は、例えば、QoSドメインID、プレースメントID、サブミッションキューID、ライトコマンドのコマンドID等である。
また、ライトコマンド(NLW)およびFARは、QoSドメインIDと、プレースメントIDとの代わりに、スーパーブロックIDを含んでいてもよい。
図11は、第1タイプコマンドとして実施形態に係るストレージデバイス3に発行されるライトコマンドの別の構成例を示す図である。
ライトコマンド(NLW)は、コマンドID、スーパーブロックID、ユーザアドレスタグ(UAタグ)、プロセスID、長さ、データポインタ、等を含んでいてもよい。
スーパーブロックIDは、データが書き込まれるべきスーパーブロックを一意に識別可能な識別子である。
図12は、第2タイプコマンドとして実施形態に係るストレージデバイス3に発行されるフラッシュアドレスリードコマンドの別の構成例を示す図である。
このフラッシュアドレスリードコマンド(FAR)は、図11で説明したライトコマンド(NLW)の構成に対応している。このフラッシュアドレスリードコマンド(FAR)は、コマンドID、スーパーブロックID、プロセスID、データポインタ、サイズを含んでいる。スーパーブロックIDは、このFARに関連付けられたスーパーブロックを識別する識別子である。
図13は、実施形態に係るストレージデバイス3によってホスト2に先行応答として送信される情報の別の構成例を示す図である。
図13に示されるアドレス記録要求(ARR)は、図11で説明したライトコマンド(NLW)の構成に対応している。この先行応答つまりアドレス記録要求(ARR)は、UAタグ、物理アドレス、識別情報を含む。識別情報は、先行応答に関連付けられたライトコマンドを識別するための識別情報である。識別情報は、例えば、スーパーブロックID、サブミッションキューID、ライトコマンドのコマンドID等である。
図14は、実施形態に係るストレージデバイスに発行されるリードコマンドの構成例を示す図である。
リードコマンドは、ストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、QoSドメインID、物理アドレス、長さ、リードバッファアドレスを含んでもよい。
コマンドIDはこのコマンド(このリードコマンド)を識別するための識別子である。QoSドメインIDは、読み出されるべきデータが格納されているQoSドメインを識別する識別子である。物理アドレスは、読み出されるべきデータが格納されている物理記憶位置を示す。物理アドレスは、スーパーブロック識別子とオフセットとによって表される。長さは、読み出されるべきデータの長さを示す。リードバッファアドレスは、読み出されたデータが転送されるべきホスト2のリードバッファ内の位置を示す。ホスト2に設けられたメモリ102の記憶領域の一部がホスト2のリードバッファとして使用される。
図15は、実施形態に係るストレージデバイスに発行されるQoSドメインクリエートコマンドの構成例を示す図である。
QoSドメインクリエートコマンドは、QoSドメインを作成するためのコマンドである。このQoSドメインクリエートコマンドは、コマンドID、QoSドメインID、容量を含んでもよい。
コマンドIDはこのコマンド(このQoSドメインクリエートコマンド)を識別するための識別子である。QoSドメインIDは、作成すべきQoSドメインの識別子である。容量は、作成すべきQoSドメイン用に確保すべき容量を示す。コントローラ4は、この容量に対応する個数のフリースーパーブロックを共通フリーブロックプール602から確保し、このQoSドメインIDを指定するライトコマンドに応じて、この確保されたフリースーパーブロックのうちの一つのスーパーブロックをこのQoSドメイン用の書き込み先スーパーブロックとして割り当てる。
図16は、ブロックグループ(スーパーブロック)の識別子とオフセットとの関係を示す図である。
ここでは、図示を簡単化するために、ある一つのスーパーブロックSB#1が4つのブロックBLK#11、BLK#21、BLK#31、BLK#41から構成されている場合が想定されている。スーパーブロックSB#1の識別子(スーパーブロックアドレス)はSB#1である。4つのブロックBLK#11、BLK#21、BLK#31、BLK#41は、異なる4個のNAND型フラッシュメモリダイからそれぞれ選択されたブロックであってもよい。
各ブロックBLKは、複数のページ(ここでは、ページ0~ページn)を含む。ページサイズ(各ページのユーザデータ格納領域)が16Kバイトであり、セクタサイズが4Kバイトであるケースにおいては、このブロックBLKは、4×(n+1)個の領域に論理的に分割される。
コントローラ4は、ブロックBLK#11のページ0、ブロックBLK#21のページ0、ブロックBLK#31のページ0、ブロックBLK#41のページ0、ブロックBLK#11のページ1、ブロックBLK#21のページ1、ブロックBLK#31のページ1、ブロックBLK#41のページ1、…という順序でデータを書き込む。
オフセット+0はブロックBLK#11のページ0の最初の4KB領域を示し、オフセット+1はブロックBLK#11のページ0の2番目の4KB領域を示し、オフセット+2はブロックBLK#11のページ0の3番目の4KB領域を示し、オフセット+3はブロックBLK#11のページ0の4番目の4KB領域を示す。
オフセット+4はブロックBLK#21のページ0の最初の4KB領域を示し、オフセット+5はブロックBLK#21のページ0の2番目の4KB領域を示し、オフセット+6はブロックBLK#21のページ0の3番目の4KB領域を示し、オフセット+7はブロックBLK#21のページ0の4番目の4KB領域を示す。
同様に、オフセット+12はブロックBLK#41のページ0の最初の4KB領域を示し、オフセット+13はブロックBLK#41のページ0の2番目の4KB領域を示し、オフセット+14はブロックBLK#41のページ0の3番目の4KB領域を示し、オフセット+15はブロックBLK#41のページ0の4番目の4KB領域を示す。
オフセット+16はブロックBLK#11のページ1の最初の4KB領域を示し、オフセット+17はブロックBLK#11のページ1の2番目の4KB領域を示し、オフセット+18はブロックBLK#11のページ1の3番目の4KB領域を示し、オフセット+19はブロックBLK#11のページ1の4番目の4KB領域を示す。
オフセット+20はブロックBLK#21のページ1の最初の4KB領域を示し、オフセット+21はブロックBLK#21のページ1の2番目の4KB領域を示し、オフセット+22はブロックBLK#21のページ1の3番目の4KB領域を示し、オフセット+23はブロックBLK#21のページ1の4番目の4KB領域を示す。
同様に、オフセット+28はブロックBLK#41のページ1の最初の4KB領域を示し、オフセット+29はブロックBLK#41のページ1の2番目の4KB領域を示し、オフセット+30はブロックBLK#41のページ1の3番目の4KB領域を示し、オフセット+31はブロックBLK#41のページ1の4番目の4KB領域を示す。
例えば、あるLBA(LBAx)を指定するライトコマンドに対応する4Kバイトデータをオフセット+8に対応する位置に書き込む場合には、コントローラ4は、UAタグ(=LBAx)、スーパーブロックアドレス(=SB#1)、オフセット(=+8)、長さ(=1)をアドレス記録要求ARRとしてホスト2に返してもよい。
図17は、実施形態に係るストレージデバイス3において管理される複数のQoSドメインを示す図である。
図17では、QoSドメイン#0、QoSドメイン#1、QoSドメイン#2が既に作成されている場合が明示されている。図17では、これらQoSドメインは四角によって表されている。あるQoSドメインを表す四角の縦幅は、このQoSドメインの容量を表している。
ユーザアプリケーション#0は、QoSドメイン#0のQoSドメインID#0を含むリード/ライトコマンドを使用して、QoSドメイン#0をリード/ライトアクセスすることができる。同様に、ユーザアプリケーション#1は、QoSドメイン#1のQoSドメインID#1を含むリード/ライトコマンドを使用して、QoSドメイン#1をリード/ライトアクセスすることができる。
ユーザアプリケーション#2、およびユーザアプリケーション#3は、QoSドメイン#2のQoSドメインID#2を含むリード/ライトコマンドを使用して、QoSドメイン#2をリード/ライトアクセスすることができる。
図18は、実施形態に係るストレージデバイス3において管理される、複数のQoSドメインと共通フリーブロックプールとの関係を示すブロック図である。
コントローラ4は、共通フリーブロックプール602に加え、各プレースメントIDに対応するアクティブブロックリスト(アクティブブロックプール)も管理することができる。
各スーパーブロックの状態は、有効データを格納しているアクティブブロック(クローズ状態のスーパーブロック)と、有効データを格納しておらず書き込み先スーパーブロックとして使用可能なフリーブロックとに大別される。例えば、QoSドメイン#0内のプレースメントID#1においては、アクティブブロックである各スーパーブロックは、プレースメントID#1に対応するアクティブブロックプール811によって管理される。一方、各プレースメントIDの書き込み先スーパーブロックに割り当て可能な各フリーブロックは、共通フリーブロックプール602によって管理される。
QoSドメイン#0およびプレースメントID#1を指定するライトコマンドをホスト2から受信した時、コントローラ4は、共通フリーブロックプール602内の一つのスーパーブロック(フリーブロック)を選択し、選択されたスーパーブロックを、QoSドメイン#0のプレースメントID#1に書き込み先スーパーブロックとして割り当てる。さらに、コントローラ4は、この書き込み先スーパーブロック内の位置(書き込み先位置)を決定する。書き込み先スーパーブロック内の書き込み先位置は、ページ書き込み順序の制約および不良ページ等を考慮して決定される。そして、コントローラ4は、ライトコマンドに関連付けられたデータを、書き込み先ブロック内の書き込み先位置に書き込む。
プレースメントID#1の書き込み先スーパーブロック全体がユーザデータで満たされたならば、コントローラ4は、この書き込み先スーパーブロックをQoSドメイン#0のプレースメントID#1のアクティブブロックプール811に移動させる。そして、コントローラ4は、共通フリーブロックプール602内の一つのスーパーブロック(フリーブロック)を再び選択し、選択されたスーパーブロックをQoSドメイン#0のプレースメントID#1の新たな書き込み先スーパーブロックとして割り当てる。
QoSドメイン#0およびプレースメントID#2を指定するライトコマンドをホスト2から受信した時、コントローラ4は、共通フリーブロックプール602内の一つのスーパーブロック(フリーブロック)を選択し、選択されたスーパーブロックを、QoSドメイン#0のプレースメントID#2に書き込み先スーパーブロックとして割り当てる。さらに、コントローラ4は、この書き込み先スーパーブロック内の位置(書き込み先位置)を決定する。そして、コントローラ4は、ライトコマンドに関連付けられたデータを、書き込み先ブロック内の書き込み先位置に書き込む。
プレースメントID#2の書き込み先スーパーブロック全体がユーザデータで満たされたならば、コントローラ4は、この書き込み先スーパーブロックをQoSドメイン#0のプレースメントID#2のアクティブブロックプール812に移動させる。そして、コントローラ4は、共通フリーブロックプール602内の一つのスーパーブロック(フリーブロック)を再び選択し、選択されたスーパーブロックをQoSドメイン#0のプレースメントID#2の新たな書き込み先スーパーブロックとして割り当てる。
図19は、実施形態に係るストレージデバイス3とホスト2とによって実行されるデータ書き込み処理を説明するためのブロック図である。
(1)ホスト2においては、ホストFTL301が実行される。このホストFTL301は、LBAのようなUAタグそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを、LUTを使用して管理する。あるユーザアプリケーションからのライト要求に応じて、ホストFTL301は、QoSドメインIDおよびプレースメントIDの組(または、スーパーブロックID)、プロセスID、UAタグ、データポインタ、長さを指定するライトコマンドをストレージデバイス3に送信する。ホストFTL301は、QoSドメインIDおよびプレースメントID(またはスーパーブロックID)のみを処理対象メモリリソースのリソース識別子として指定すればよく、処理対象メモリリソース内の書き込み先位置を指定する必要は無い。このため、ホストFTL301は、ストレージデバイス3内の不良ブロック、不良ページなどを管理する必要がなくなる。
(2)ストレージデバイス3のコントローラ4は、複数のQoSドメイン601によって共有される共通フリーブロックプール602のうちの一つのスーパーブロックを選択する。コントローラ4は、この選択したスーパーブロックを、受信されたライトコマンドによって指定されたプレースメントIDを有するプレースメントID用の書き込み先スーパーブロックとして割り当てる。共通フリーブロックプール602においては、不良ブロック以外のフリーブロック群のみが管理されていてもよい。例えば、最小プログラム/イレーズサイクル数を有するブロックが共通フリーブロックプール602から選択されてもよい。そして、コントローラ4は、この書き込み先スーパーブロックをデータが書き込まれるべきスーパーブロックとして決定し、さらに、データが書き込まれるべき、この書き込み先スーパーブロック内の書き込み先位置を決定する。なお、既にこのプレースメントID用の書き込み先スーパーブロックが割り当てられているならば、コントローラ4は、この既に割り当てられている書き込み先スーパーブロックをデータが書き込まれるべきスーパーブロックとして決定すればよく、共通フリーブロックプール602から一つのスーパーブロックをこのプレースメントID用の書き込み先スーパーブロックとして割り当てる動作を実行する必要は無い。
(3)コントローラ4は、ライトデータのUAタグと、決定された書き込み先スーパーブロックを示すブロックアドレスと、決定した書き込み先位置を示すオフセットとを含む先行応答をホスト2に送信して、このライトコマンドに関連付けられたライトデータが書き込まれる物理アドレスをホスト2に通知する。
(4)コントローラ4は、ライトコマンドに含まれるライトバッファアドレスに基づいて、ホスト2のライトバッファ404からライトデータを取得する。ライトバッファ404からのライトデータの取得はDMAコントローラ15を使用して実行されてもよい。そして、コントローラ4は、ライトデータを書き込み先スーパーブロック内の書き込み先位置に書き込むデータ書き込み動作を実行する。
(5)ライトデータの書き込みが終了してこのライトデータがNAND型フラッシュメモリ5から読み出し可能になった後、コントローラ4は、このライトデータが格納されているライトバッファ404内の領域を解放するための解放要求としてライトコマンドに対するコマンド完了応答をホスト2に送出する。ホスト2は、このコマンド完了応答に応じて、このライトデータが格納されているライトバッファ404内の領域を解放する。このライトバッファ404内の解放された領域は他のライトデータの格納等のために利用可能となる。
次に、図6を参照して説明したマルチフェーズコンプリーション応答処理の具体例について説明する。以下では、第1タイプコマンドとしてライトコマンドが使用され、第2タイプコマンドとしてフラッシュアドレスリードコマンド(FAR)が使用される場合を想定する。図20は、実施形態に係るストレージデバイス3において実行される、ホスト2から事前に送信される1以上のフラッシュアドレスリードコマンド(FAR)をFARプール内に維持する動作と、FARプール内のFARの一つに対する完了応答を、ホスト2から送信されるライトコマンドに対する先行応答としてホスト2に送信する動作と、ライトコマンドの完了に応答して、ライトコマンドの完了を示す完了応答をホスト2に送信する動作とを示す図である。
まず、ホスト2は、一つ以上のFARを、サブミッションキュー(SQ)を介してストレージデバイス3に事前に発行する(ステップS31)。FARは、コマンドIDと、プロセスIDと、データポインタと、サイズとを含む。また、FARは、QoSドメインIDおよびプレースメントIDの組、またはスーパーブロックIDのいずれかをリソース識別子として含む。以降では、FARがスーパーブロックIDをリソース識別子として含む場合について説明する。
一つ以上のFARを受信した場合、ストレージデバイス3は、受信したFARそれぞれをプールに格納する。ストレージデバイス3は、NAND型フラッシュメモリ5に含まれるスーパーブロック(書き込み先スーパーブロック)毎にFARプールを管理する。ストレージデバイス3は、受信したFARの各々に含まれる、スーパーブロックIDを指定するパラメータに基づいて、受信したFARの各々を格納すべきFARプールを決定する。ストレージデバイス3は、受信した各FARを完了せずに、決定したFARプール内に維持する。
その後、ホスト2は、ライトコマンド(NLW)をストレージデバイス3に送信する(ステップS32)。ライトコマンド(NLW)は、コマンドID、UAタグ、プロセスID、長さ、データポインタを含む。また、ライトコマンド(NLW)は、QoSドメインIDおよびプレースメントIDの組、またはスーパーブロックIDのいずれかをリソース識別子として含む。以降では、ライトコマンド(NLW)がスーパーブロックIDをリソース識別子として含む場合について説明する。
ストレージデバイス3は、ライトコマンド(NLW)を受信したことに応じて、受信したライトコマンド(NLW)に対して、受信したライトコマンド(NLW)に関連付けられたデータが書き込まれるべきNAND型フラッシュメモリ5内の物理的な記憶位置(書き込み先位置)を示す物理アドレスを割り当てる。
ストレージデバイス3は、受信したライトコマンド(NLW)によって指定されたスーパーブロックIDおよびプロセスIDと同じスーパーブロックIDおよびプロセスIDをそれぞれ指定するFARを取得する。この場合、ストレージデバイス3は、まず、受信したライトコマンド(NLW)によって指定されたスーパーブロックIDによって示される書き込み先スーパーブロックに対応するプールを選択する。そして、ストレージデバイス3は、選択したプールから、受信したライトコマンド(NLW)によって指定されたプロセスIDと同じプロセスIDを指定するFARを取得する。
そして、ストレージデバイス3は、取得したFARを完了させる。ストレージデバイス3は、完了されたFARに対するコマンド完了応答を、受信したライトコマンド(NLW)に対する先行応答としてホスト2に送信する(ステップS33)。ステップS33では、ストレージデバイス3は、完了されたFARに対するコマンド完了応答をホスト2に送信する。また、ステップS33では、ストレージデバイス3は、完了されたFARのデータポインタによって指定されるリードバッファにARRを転送する。ARRは、受信したライトコマンド(NLW)に割り当てられた物理アドレスと、受信したライトコマンド(NLW)によって指定されるUAタグと、受信したライトコマンド(NLW)に含まれる識別情報とを含む。
ステップS33でストレージデバイス3から送信された、FARに対する完了応答を受信すると、ホスト2は、S32で発行したライトコマンド(NLW)によって指定されたスーパーブロックIDと同じスーパーブロックIDを指定する次のライトコマンド(NLW)をストレージデバイス3に発行する前に、追加のFARを、サブミッションキュー(SQ)を介してストレージデバイス3に事前に発行する(ステップS34)。追加のFARは、ステップS32でストレージデバイス3に発行されたライトコマンド(NLW)によって指定されるスーパーブロックIDおよびプロセスIDと同一のスーパーブロックIDおよびプロセスIDを含む。
ストレージデバイス3は、ステップS32で受信したライトコマンド(NLW)に関連付けられているライトデータをホスト2のライトバッファから取得する。ストレージデバイス3は、受信したライトコマンド(NLW)に割り当てられた物理アドレスに基づいて、ライトデータをNAND型フラッシュメモリ5内の書き込み先位置に書き込むプログラム動作を実行する。このプログラム動作が終了すると、ストレージデバイス3は、受信したライトコマンド(NLW)に対するコマンド完了応答をホスト2に送信する(ステップS35)。ステップS35で送信された、ライトコマンド(NLW)に対するコマンド完了応答は、ライトコマンド(NLW)に関連付けられたデータの書き込み処理が正常に実行されたか否を示すステータス等を含む。ライトコマンド(NLW)に対するコマンド完了応答は、コンプリーションキュー(CQ)に格納される。
以上の動作によって、ストレージデバイス3は、ライトコマンド(NLW)に対して、先行応答とコマンド完了応答とを含む二つの応答をホスト2に送信することができる。また、FARが、情報が転送されるべきメモリ102内のバッファ領域を示すポインタを含んでいるので、比較的大きなサイズを有するARRをライトコマンド(NLW)に対する先行応答としてホスト2に通知することができる。
次に、図7を参照して説明したマルチフェーズコンプリーション応答処理の具体例について説明する。以下では、第1タイプコマンドとしてライトコマンドが使用され、第2タイプコマンドとしてフラッシュアドレスリードコマンド(FAR)が使用される場合を想定する。図21は、実施形態に係るストレージデバイス3において実行される、ホスト2から事前に送信される1つのフラッシュアドレスリードコマンド(FAR)をFARプール31内に維持する動作と、FARプール31内の1つのFARに対する完了応答を、ホスト2から送信されるライトコマンドに対する先行応答としてホスト2に送信する動作と、ライトコマンドの完了に応答して、ライトコマンドの完了を示す完了応答をホスト2に送信する動作とを示す図である。
まず、ホスト2は、一つのFARをストレージデバイス3に送信する(ステップS41)。FARは、コマンドIDと、QoSドメインIDと、プレースメントIDと、プロセスIDと、データポインタと、サイズとを含む。また、FARは、QoSドメインIDおよびプレースメントIDの代わりにスーパーブロックIDをリソース識別子として含んでいてもよい。以下では、FARが、スーパーブロックIDをリソース識別子として含む場合を想定する。図21に示されるマルチフェーズコンプリーション応答処理では、ホスト2は、ライトコマンド(NLW)をストレージデバイス3に発行する直前に、FARをストレージデバイス3に発行する。したがって、このFARは、対応するライトコマンド(NLW)によって指定されるリソース識別子(スーパーブロックID)およびプロセスIDと同じリソース識別子(スーパーブロックID)およびプロセスIDをそれぞれ含む。
FARを受信した場合、ストレージデバイス3は、受信したFARをFARプールに格納する。ストレージデバイス3は、NAND型フラッシュメモリ5に含まれるスーパーブロック(書き込み先スーパーブロック)毎にFARプールを管理する。ストレージデバイス3は、受信したFARに含まれるスーパーブロックIDに基づいて、受信したFARを格納すべきFARプールを決定する。ストレージデバイス3は、受信したFARを完了せずに、決定したFARプール内に維持する。
その後、ホスト2は、ライトコマンド(NLW)を、サブミッションキュー(SQ)を介してストレージデバイス3に発行する(ステップS42)。ライトコマンド(NLW)は、コマンドID、UAタグ、プロセスID、長さ、データポインタを含む。また、ライトコマンド(NLW)は、QoSドメインIDおよびプレースメントIDの組、またはスーパーブロックIDのいずれかをリソース識別子として含む。以降では、ライトコマンド(NLW)がスーパーブロックIDをリソース識別子として含む場合について説明する。
ストレージデバイス3は、ライトコマンド(NLW)を受信したことに応じて、受信したライトコマンド(NLW)に対して、受信したライトコマンド(NLW)に関連付けられたデータが書き込まれるべきNAND型フラッシュメモリ5内の物理的な記憶位置(書き込み先位置)を示す物理アドレスを割り当てる。
ストレージデバイス3は、受信したライトコマンド(NLW)によって指定されたスーパーブロックIDおよびプロセスIDと同じスーパーブロックIDおよびプロセスIDをそれぞれ指定するFARを取得する。この場合、ストレージデバイス3は、まず、受信したライトコマンド(NLW)によって指定されたスーパーブロックIDによって示される書き込み先スーパーブロックに対応するプールを選択する。そして、ストレージデバイス3は、選択したプールから、受信したライトコマンド(NLW)によって指定されたプロセスIDと同じプロセスIDを指定するFARを取得する。図21に示されるマルチフェーズコンプリーション応答処理では、受信したライトコマンド(NLW)の直前に発行されたFARが、受信したライトコマンド(NLW)によって指定されたスーパーブロックIDおよびプロセスIDと同じスーパーブロックIDおよびプロセスIDをそれぞれ指定するFARとして、取得される。
そして、ストレージデバイス3は、取得したFARを完了させる。ストレージデバイス3は、完了されたFARに対するコマンド完了応答を、受信したライトコマンド(NLW)に対する先行応答としてホスト2に送信する(ステップS43)。ステップS43では、ストレージデバイス3は、完了されたFARに対するコマンド完了応答をホスト2に送信する。また、ステップS43では、ストレージデバイス3は、完了されたFARのデータポインタによって指定されるリードバッファにARRを転送する。ARRは、受信したライトコマンド(NLW)に割り当てられた物理アドレスと、受信したライトコマンド(NLW)によって指定されるUAタグと、受信したライトコマンド(NLW)に含まれる識別情報とを含む。
ステップS43でストレージデバイス3から送信された、FARに対する完了応答を受信すると、ホスト2は、S42で発行したライトコマンド(NLW)によって指定されたスーパーブロックIDと同じスーパーブロックIDを指定する次のライトコマンド(NLW)をストレージデバイス3に発行する前に、追加のFARを、サブミッションキュー(SQ)を介してストレージデバイス3に事前に発行してもよい(ステップS44)。追加のFARは、ステップS42でストレージデバイス3に発行されたライトコマンド(NLW)によって指定されるスーパーブロックIDおよびプロセスIDと同一のスーパーブロックIDおよびプロセスIDを含む。
あるいは、ホスト2は、次のライトコマンド(NLW)をストレージデバイス3に発行する直前に、次のFARを、サブミッションキュー(SQ)を介してストレージデバイス3に発行してもよい。次のFARは、次のライトコマンド(NLW)によって指定されるスーパーブロックIDおよびプロセスIDと同じスーパーブロックIDおよびプロセスIDをそれぞれ含む。また、ステップS44が実行されるタイミングは、次のライトコマンド(NLW)をストレージデバイス3に発行する直前に変更される。そして、次のライトコマンド(NLW)をストレージデバイス3に発行する直前に、次のライトコマンド(NLW)に対応する次のFARがストレージデバイス3に発行される。
ストレージデバイス3は、ステップS42で受信したライトコマンド(NLW)に関連付けられているライトデータをホスト2のライトバッファから取得する。ストレージデバイス3は、受信したライトコマンド(NLW)に割り当てられた物理アドレスに基づいて、ライトデータをNAND型フラッシュメモリ5内の書き込み先位置に書き込むプログラム動作を実行する。このプログラム動作が終了すると、ストレージデバイス3は、受信したライトコマンド(NLW)に対するコマンド完了応答をホスト2に送信する(ステップS45)。ステップS45で送信された、ライトコマンド(NLW)に対するコマンド完了応答は、ライトコマンド(NLW)に関連付けられたデータの書き込み処理が正常に実行されたか否を示すステータス等を含む。ライトコマンド(NLW)に対するコマンド完了応答は、コンプリーションキュー(CQ)に格納される。
図22は、実施形態に係るストレージデバイス3において実行される、同じメモリリソースを指定する1以上のフラッシュアドレスリードコマンド(FAR)を同じFARプール31に維持する動作と、ライトコマンドによって指定されたメモリリソースに対応するFARプール31に維持されているFARを使用して、ライトコマンドに対する先行応答をホストに送信する動作と、ライトコマンドに対する完了応答をホストに送信する動作とを示すブロック図である。
まず、ホスト2は、ストレージデバイス3に送信すべきコマンドをサブミッションキュー(SQ)に格納する。サブミッションキューに格納されるコマンドは、ライトコマンド、フラッシュアドレスリードコマンド(FAR)、リードコマンド等、いずれのコマンドであってもよい。
ストレージデバイス3のコマンドフェッチ部21は、サブミッションキュー(SQ)からコマンドをフェッチする。ここで、フェッチされたコマンドがFARである場合、コマンドフェッチ部21は、フェッチされたFARに含まれるスーパーブロックIDに基づいて、書き込み先スーパーブロックを特定する。特定された書き込み先スーパーブロックに対応するFARプールが、フェッチされたFARを格納すべきFARプールとして決定される。
例えば、特定された書き込み先スーパーブロックが書き込み先スーパーブロックSB#1である場合、コマンドフェッチ部21は、書き込み先スーパーブロックSB#1に対応するFARプール31-1に、フェッチされたFARを格納する。また、特定された書き込み先スーパーブロックが書き込み先スーパーブロックSB#2である場合、コマンドフェッチ部21は、書き込み先スーパーブロックSB#2に対応するFARプール31-2に、フェッチされたFARを格納する。
フェッチされたコマンドがライトコマンド(NLW)である場合、コマンドフェッチ部21は、コマンド処理部22にライトコマンド(NLW)を送信する。ライトコマンドを受信したことに応じて、コマンド処理部22は、ライトコマンド(NLW)に関連付けられたデータが書き込まれるべきNAND型フラッシュメモリ5内の記憶領域を示す物理アドレスを決定する。そして、コマンド処理部22は、ライトコマンド(NLW)に含まれるスーパーブロックIDおよびプロセスIDを取得する。
例えば、ライトコマンド(NLW)がスーパーブロックSB#2を含む場合、コマンド処理部22は、FARプール31-2の中から、ライトコマンド(NLW)に含まれるプロセスIDと同じプロセスIDを含むFARを取得する。
コマンド処理部22は、取得したFARを完了させる。そして、コマンド処理部22は、完了されたFARに対するコマンド完了応答(FAR completion)を、受信したライトコマンド(NLW)に対する先行応答(第1の先行応答)としてホスト2に送信する。この場合、コマンド処理部22は、完了されたFARに対するコマンド完了応答(FAR completion)をコンプリーションキュー(CQ)に格納する動作と、完了されたFARのデータポインタによって示されるリードバッファ701内の位置に、受信したライトコマンド(NLW)に対応するARRを転送する動作とを実行する。
受信したライトコマンド(NLW)に対応するARRは、受信したライトコマンド(NLW)に割り当てられた物理アドレス、受信したライトコマンド(NLW)に含まれているUAタグ、受信したライトコマンド(NLW)を識別するための識別情報を含む。
ホスト2は、完了されたFARに対するコマンド完了応答(FAR completion)を処理する。これにより、ホスト2は、このFARによって指定されたメモリリソース(例えば、スーパーブロック)にデータを書き込むためのライトコマンド(NLW)に対するARRが先行応答としてストレージデバイス3によってリードバッファに格納されたことを認識する。そして、ホスト2は、ARRを処理し、ARRに含まれるUAタグにARRに含まれる物理アドレスが関連付けられるようにLUTを更新する。
完了されたFARに対するコマンド完了応答(FAR completion)を先行応答(第1の先行応答)としてホスト2に送信した後、コマンド処理部22は、受信したライトコマンド(NLW)に関連付けられたライトデータをホスト2のライトバッファ404から取得し、NAND型フラッシュメモリ5に書き込む。そして、コマンド処理部22は、受信したライトコマンド(NLW)に対するコマンド完了応答をホスト2に送信する。コマンド完了応答は、コンプリーションキュー(CQ)に格納される。
図23は、あるスーパーブロックを指定する1以上のフラッシュアドレスリードコマンド(FAR)をこのスーパーブロックに対応するFARプールに維持する動作と、このスーパーブロックを指定するライトコマンドに対する先行応答をホスト2に送信する動作と、このライトコマンドに対する完了応答をホスト2に送信する動作とを示すブロック図である。
ホスト2から送信されたFARを受信すると、コントローラ4は、受信したFARに含まれるスーパーブロックIDを取得する。受信したFARに含まれるスーパーブロックIDがSB#1を示す場合、コントローラ4は、SB#1に関連付けられたFARプール31-1にFARを格納する。FARプール31-1は、格納されたFARを維持する。
そして、SB#1を示すスーパーブロックIDを含むライトコマンド(NLW)を受信すると、コマンド処理部22は、フラッシュアドレス割り当て処理を実行する。フラッシュアドレス割り当て処理では、コマンド処理部22は、ライトコマンド(NLW)に関連付けられたデータが格納されるべきSB#1内の書き込み先位置を決定する。そして、コマンド処理部22は、ライトコマンド(NLW)に対して、決定した書き込み先位置を示す物理アドレス(スーパーブロックID、オフセット)を割り当てる。
また、コマンド処理部22は、FARプール31-1からFARを取得する。このとき、コマンド処理部22は、受信したライトコマンド(NLW)に含まれるプロセスIDと同じプロセスIDを含むFARをFARプール31-1の中から取得する。
コントローラ4は、取得したFARに関連付けられたリードデータとして、ライトコマンド(NLW)に割り当てられた物理アドレスと、ライトコマンド(NLW)に含まれるUAタグと、ライトコマンド(NLW)を識別するための識別情報とをホスト2に送信する。そして、コントローラ4は、FARに対するコマンド完了応答をホスト2に送信する。つまり、コントローラ4は、FARに対するコマンド完了応答と、FARに関連付けられたリードデータ(ARR)を、ライトコマンド(NLW)に対する先行応答としてホスト2に送信する。
そして、コマンド処理部22は、ライトコマンド(NLW)に関連付けられたデータをNAND型フラッシュメモリ5に書き込むフラッシュ書き込み処理を実行する。その後、コントローラ4は、ライトコマンド(NLW)に対するコマンド完了応答をホスト2に送信する。
図24は、実施形態に係るストレージデバイス3において実行される、フラッシュアドレスリードコマンド(FAR)に対する処理の手順を示すフローチャートである。
ホスト2からコマンドを受信した場合、つまりホスト2によって発行されたコマンドをサブミッションキュー(SQ)からフェッチした場合、コントローラ4は、受信したコマンドがFARであるか否かを判定する(ステップS51)。
受信したコマンドがFARではない場合(ステップS51でNo)、コントローラ4は、FARに対する処理を終了する。
受信したコマンドがFARである場合(ステップS51でYes)、コントローラ4は、受信したFARに含まれるリソース識別子に基づいて、受信したFARを複数のFARグループのうちの一つのFARグループに分類する(ステップS52)。ここで、FARに含まれるリソース識別子は、例えば、QoSドメインIDであってもよいし、QoSドメインIDとプレースメントIDとの組であってもよいし、スーパーブロックIDであってもよい。また、複数のFARグループは、複数のメモリリソース(例えば、複数の書き込み先スーパーブロック、または複数のQoSドメイン)にそれぞれ関連付けられている。
コントローラ4は、複数のFARグループに対応する複数のFARプールのうち、ステップS51で受信したFARが分類されたFARグループに対応するFARプールがフル状態であるか否かを判定する(ステップS53)。
受信したFARが分類されたFARグループに対応するFARプールがフル状態である場合(ステップS53でYes)、コントローラ4は、このFARプールに既に維持されており、且つ、未完了のFARのうち、最も古いFARをエラーとして完了する(ステップS54)。ステップS54では、コントローラ4は、未完了の最も古いFARのコマンドID、未完了の最も古いFARがフェッチされたサブミッションキューID、エラーを示すステータス、等を含むコマンド完了応答をコンプリーションキュー(CQ)に格納する。
サブミッションキューから一度にフェッチされる新たなコマンドの数は1以上である。このため、サブミッションキューから同じFARグループに属するN個(N>1)の新たなFARがフェッチされる場合もある。この場合、コントローラ4は、このFARプールに維持されている未完了のFARのうち、最も古いN個のFARをエラーとして完了する。
このように、あるFARプールに維持されるべきFARの数が、各FARプールに維持可能なFARの数の上限を超過した場合には、コントローラ4は、このFARプールに既に維持されており、且つ未完了のFARのうち、超過分の数のFARをエラーとして完了させる。
受信したFARが分類されたFARグループに対応するFARプール31がフル状態でない場合(ステップS55でNo)、または、ステップS54の処理が終了した場合、コントローラ4は、ステップS51で受信したFARを、このFARが分類されたFARグループに対応するFARプールに格納する(ステップS55)。
この動作によって、コントローラ4は、ホスト2から受信したFARを完了させずに、複数のFARプールのうちの一つに維持することができる。
図25は、実施形態に係るストレージデバイス3において実行される、ライトコマンド(NLW)に対する処理の手順を示すフローチャートである。
ホスト2からコマンドを受信した場合、つまりホスト2によって発行されたコマンドをサブミッションキュー(SQ)からフェッチした場合、コントローラ4は、受信したコマンドがライトコマンド(NLW)であるか否かを判定する(ステップS61)。
受信したコマンドがライトコマンド(NLW)ではない場合(ステップS61でNo)、コントローラ4は、ライトコマンド(NLW)に対する処理を終了する。
受信したコマンドがライトコマンド(NLW)である場合(ステップS61でYes)、コントローラ4は、受信したライトコマンド(NLW)に関連付けられたデータが書き込まれるべきNAND型フラッシュメモリ5内の書き込み先位置を決定する(ステップS62)。ステップS62では、コントローラ4は、受信したライトコマンド(NLW)によって指定されるリソース識別子によって示されるメモリリソース内の書き込み先位置を決定する。そして、コントローラ4は、決定した書き込み先位置を示す物理アドレス(書き込み先スーパーブロックのスーパーブロックID、書き込み先スーパーブロック先頭から書き込み先位置までのオフセット)を、受信したライトコマンド(NLW)に割り当てる。
次いで、コントローラ4は、受信したライトコマンド(NLW)によって指定されたリソース識別子に関連付けられたFARグループを選択する(ステップS63)。コントローラ4は、ライトコマンド(NLW)によって指定されたプロセス識別子と同一のプロセス識別子を含むFARが、選択されたFARグループに対応するFARプール31内に存在するか否かを判定する(ステップS64)。
受信したライトコマンド(NLW)によって指定されたプロセス識別子と同一のプロセス識別子を含むFARが、選択されたFARグループに対応するFARプール31内に存在する場合(ステップS64でYes)、コントローラ4は、受信したライトコマンド(NLW)によって指定されたプロセス識別子と同一のプロセス識別子を含むFARを、選択されたFARグループに対応するFARプール31から取得する(ステップS65)。ステップS65では、コントローラ4は、受信したライトコマンド(NLW)によって指定されたプロセス識別子と同一のプロセス識別子を含み、且つ、ホスト2から最後に受信されたFARを、選択されたFARグループに対応するFARプール31から取得する。
コントローラ4は、取得したFARを完了させ、完了されたFARに対するコマンド完了応答を、受信したライトコマンド(NLW)に対する先行応答としてホスト2に送信する(ステップS66)。ステップS66では、コントローラ4は、完了されたFARに対するコマンド完了応答をホスト2に送信する動作と、受信したライトコマンド(NLW)に対するARRをホスト2のリードバッファ内の位置に転送する動作とを実行する。ARRをホスト2のリードバッファ内の位置に転送する動作では、例えば、コントローラ4は、ホスト2のリードバッファ内の位置を指定するメモリライト要求をホスト2に送信する。これにより、コントローラ4は、ホスト2のプロセッサ101を介して、ARRをホスト2のリードバッファ内の位置に格納させる。
コントローラ4は、受信したライトコマンド(NLW)に関連付けられたデータをホスト2のライトバッファから取得する。そして、コントローラ4は、取得したデータをNAND型フラッシュメモリ5に書き込む書き込み動作を実行する(ステップS67)。書き込み動作が終了すると、コントローラ4は、受信したライトコマンド(NLW)に対するコマンド完了応答をホスト2に送信する(ステップS68)。
受信したライトコマンド(NLW)によって指定されたプロセス識別子と同一のプロセス識別子を含むFARが、選択されたFARグループに対応するFARプール31内に存在しない場合(ステップS64でNo)、コントローラ4は、受信したライトコマンド(NLW)をエラーとして完了する(ステップS69)。ステップS69では、コントローラ4は、受信したライトコマンド(NLW)のエラーを示すステータスを含む、受信したライトコマンド(NLW)に対するコマンド完了応答をホスト2に送信する。これにより、ライトコマンド(NLW)がエラーとして完了されたことがホスト2に通知される。
図26は、ホスト2において実行される処理の手順を示すフローチャートである。
まず、ホスト2は、NAND型フラッシュメモリ5内のあるメモリリソースへの書き込みが開始されるべき場合、このメモリリソースを書き込み先リソース(書き込み先メモリリソース)として特定する(ステップS101)。例えば、あるアプリケーションに対応するプロセスが起動されると、このプロセス(アプリケーション)に割り当てられているNAND型フラッシュメモリ5内のメモリリソースが、書き込みが開始されるべきメモリリソースとして、つまり書き込み先リソースとして、決定されてもよい。書き込み先リソースのリソース識別子は、QoSドメインIDとプレースメントIDとの組によって表されてもよいし、スーパーブロックIDによって表されてもよい。そして、ホスト2は、各々が、書き込み先リソースのリソース識別子と、この書き込み先リソースが割り当てられたプロセスのプロセスIDとを、含む1以上のFARをサブミッションキュー(SQ)に格納する(ステップS102)。このようにして、1以上のFARがサブミッションキュー(SQ)を介してストレージデバイス3に事前に発行される。
ホスト2は、このプロセス(アプリケーション)から書き込み要求(UAタグ、長さ、データポインタ)が発行されるまで待つ(ステップS103)。
アプリケーションからの書き込み要求が発行されない場合(ステップS103でNo)、ホスト2は、アプリケーションからの書き込み要求が発行されるまで待機する。このプロセス(アプリケーション)から書き込み要求が発行された場合(ステップS103でYes)、ホスト2は、書き込み要求に基づいて、ライトコマンド(NLW)をサブミッションキュー(SQ)に格納する(ステップS104)。ライトコマンド(NLW)は、書き込み先リソースのリソース識別子、書き込み要求を発行したプロセスを識別するプロセスID、書き込み要求に含まれるUAタグ、書き込み要求に含まれる長さ、書き込み要求に含まれるデータポインタ、等を含む。このようにして、ホスト2は、このプロセス(アプリケーション)から書き込み要求に、リソース識別子とプロセスIDとを追加することによって、ライトコマンド(NLW)を生成する。そして、ホスト2は、生成したライトコマンド(NLW)を、サブミッションキュー(SQ)を介してストレージデバイス3に発行する。
ホスト2から発行されたライトコマンド(NLW)を受信すると、ストレージデバイス3は、ライトコマンド(NLW)によって指定されたリソース識別子およびプロセスIDと同一のリソース識別子およびプロセスIDを指定する1つのFARを選択し、選択した1つのFARを完了させる。そして、ストレージデバイス3は、完了したFARに対するコマンド完了応答を、受信したライトコマンド(NLW)に対する先行応答としてホスト2に送信する。この場合、ストレージデバイス3は、完了したFARに対するコマンド完了応答をコンプリーションキュー(CQ)に格納する動作と、完了したFARによって指定されたリードバッファ内の位置に、受信したライトコマンド(NLW)に関連付けられたARRを転送する動作とを実行する。
ホスト2は、ストレージデバイス3から、FARに対するコマンド完了応答(先行応答)を受信したか否かを判定する(ステップS105)。ストレージデバイス3からFARに対するコマンド完了応答(先行応答)を受信していない場合(ステップS105でNo)、ホスト2は、ストレージデバイス3からFARに対するコマンド完了応答(先行応答)を受信するまで待つ。FARに対するコマンド完了応答を受信した場合、より詳しくは受信したFARに対するコマンド完了応答がFARの成功を示すステータスを含む場合(ステップS105でYes)、ホスト2は、完了したFARによって指定されたリードバッファからARRを取得し、取得したARRによって示されるUAタグに、取得したARRによって示される物理アドレスが関連付けられるように、LUTを更新する(ステップS106)。
ホスト2は、追加のFARをサブミッションキュー(SQ)に格納する(ステップS107)。追加のFARは、ステップS101で特定された書き込み先リソースのリソース識別子と、この書き込み先リソースが割り当てられたプロセスのプロセスIDとを、含む。これにより、ホスト2は、ステップS101で特定した書き込み先リソースを指定するFARを1つ補充する。
ホスト2は、ステップS104で発行したライトコマンド(NLW)に対するコマンド完了応答を受信したか否かを判定する(ステップS108)。
ライトコマンド(NLW)に対するコマンド完了応答を受信しない場合(ステップS108でNo)、ホスト2は、ライトコマンド(NLW)に対するコマンド完了応答を受信するまで待機する。
ライトコマンド(NLW)に対するコマンド完了応答を受信した場合(ステップS108でYes)、ホスト2は、ライトコマンド(NLW)に関連付けられたライトデータが格納されているライトバッファ内の領域を解放する(ステップS109)。
以上説明したように、本実施形態によれば、コントローラ4は、各々が、1以上の先行応答の一つがストレージデバイス3によってホスト2に送信されることを可能にするための1以上の第2タイプコマンドを、ホスト2から受信したことに応じて、受信した1以上の第2タイプコマンドを完了させずにストレージデバイス3内のメモリ領域であるFARプールに維持する。コントローラ4は、ホスト2から第1タイプコマンドを受信したことに応じて、メモリ領域から1以上の第2タイプコマンドのうちの一つの第2タイプコマンドを取得し、取得した一つの第2タイプコマンドを完了させ、完了させた一つの第2タイプコマンドに対するコマンド完了応答を、受信した第1タイプコマンドに対する第1の先行応答としてホスト2に送信する。そして、コントローラ4は、第1タイプコマンドの処理の完了に応じて、完了した第1タイプコマンドに対するコマンド完了応答をホスト2に送信する。
したがって、一つのコマンドに対して1つの応答のみを返す論理インタフェース規格に従ってホスト2との通信を行うケースであっても、第1タイプコマンドに対して、1以上の先行応答と、コマンド完了応答とを含む2以上の応答を返すことができる。
また、1以上の第2タイプコマンドの各々は、情報が転送されるべき、ホスト2に設けられたメモリ102内のバッファ領域を示すポインタを含む。コントローラ4は、完了された一つの第2タイプコマンドに対するコマンド完了応答をホスト2に送信する動作と、第1タイプコマンドに対する第1の先行応答をポインタによって指定されるメモリ102内のバッファ領域に転送する動作と、を実行する。このように、メモリ102のバッファ領域に第1の先行応答を転送することにより、第1の先行応答としてホスト2に通知可能な情報の量を増やすことが可能となる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…ストレージシステム、2…ホスト、3…ストレージデバイス、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、10…バス、11…ホストインタフェース、12…CPU、13…NANDインタフェース、14…DRAMインタフェース、15…DMAC、16…SRAM、17…ECCエンコード/デコード部、21…コマンドフェッチ部、22…コマンド処理部、31…FARプール、32…ブロック管理テーブル、101…プロセッサ、メモリ…102。

Claims (19)

  1. ホストから発行される1つのコマンドに対して1つの完了応答がストレージデバイスによってホストに送信されることが許容された論理インタフェース規格に準拠してホストとの通信を実行するストレージデバイスであって、
    不揮発性メモリと、
    前記ストレージデバイスに対して所定の動作の実行を要求する第1タイプコマンドに対する1以上の先行応答と、前記第1タイプコマンドが完了したことを示すコマンド完了応答とを前記ホストに送信するように構成されたコントローラと、
    を具備し、
    前記1以上の先行応答は、前記第1タイプコマンドを受け付けたことを示す第1の先行応答を少なくとも含み、前記1以上の先行応答の各々は、前記コマンド完了応答の前に前記ストレージデバイスによって前記ホストに送信される応答であり、
    前記コントローラは、
    前記1以上の先行応答の一つが前記ストレージデバイスによって前記ホストに送信されることを可能にするための1以上の第2タイプコマンドを、前記ホストから受信したことに応じて、前記受信した1以上の第2タイプコマンドを完了させずに前記ストレージデバイス内のメモリ領域に維持し、
    前記ホストから前記第1タイプコマンドを受信したことに応じて、前記メモリ領域から前記1以上の第2タイプコマンドのうちの一つの第2タイプコマンドを取得し、前記取得した一つの第2タイプコマンドを完了させ、前記完了した一つの第2タイプコマンドに対するコマンド完了応答を前記第1タイプコマンドに対する前記第1の先行応答として前記ホストに送信し、
    前記第1タイプコマンドの処理の完了に応じて、前記完了した第1タイプコマンドに対する前記コマンド完了応答を前記ホストに送信するように構成されている
    ストレージデバイス。
  2. 前記1以上の第2タイプコマンドの各々は、情報が転送されるべき、前記ホストに設けられたメモリ内のバッファ領域を示すポインタを含み、
    前記コントローラは、
    前記完了した一つの第2タイプコマンドに対する前記コマンド完了応答を前記ホストに送信する動作と、前記ホストに設けられた前記メモリ内の前記バッファ領域に、前記第1の先行応答として、前記第1タイプコマンドの処理に関する情報を転送する動作と、を実行する
    請求項1に記載のストレージデバイス。
  3. 前記第1タイプコマンドは、前記不揮発性メモリに含まれる複数のメモリリソースのうちの処理対象メモリリソースを指定するパラメータと、前記ホストによって実行される複数のプロセスのうち、前記第1タイプコマンドに対応する処理の実行を要求したプロセスを示すプロセス識別子を指定するパラメータと、を含み、
    前記コントローラは、
    前記複数のメモリリソースに対応する複数のメモリ領域を管理し、
    複数の第2タイプコマンドであって、前記複数のメモリリソースのうちの一つのメモリリソースを指定するパラメータと、前記複数のプロセスのうちの一つのプロセスを示すプロセス識別子を指定するパラメータと、をそれぞれ含む複数の第2タイプコマンドを前記ホストから受信し、
    同じメモリリソースを指定する第2タイプコマンドそれぞれが同じメモリ領域内に維持されるように、前記受信した複数の第2タイプコマンドの各々によって指定されるメモリリソースに基づいて、前記受信した複数の第2タイプコマンドの各々を、前記複数のメモリ領域のうちの一つのメモリ領域内に維持し、
    前記ホストから前記第1タイプコマンドを受信したことに応じて、
    前記複数のメモリ領域から、前記受信した第1タイプコマンドによって指定される前記処理対象メモリリソースに対応するメモリ領域を選択し、
    前記選択したメモリ領域内に維持されている前記第2タイプコマンドのうち、前記受信した第1タイプコマンドによって指定される前記プロセス識別子と同一のプロセス識別子を指定する第2タイプコマンドを取得し、
    前記取得した第2タイプコマンドを完了させ、前記完了した第2タイプコマンドに対するコマンド完了応答を前記受信した第1タイプコマンドに対する前記第1の先行応答として前記ホストに送信するように構成されている
    請求項1に記載のストレージデバイス。
  4. 前記コントローラは、前記選択した第1のメモリ領域内に維持されている前記1以上の第2タイプコマンドに、前記受信した第1タイプコマンドによって指定される前記プロセス識別子と同一のプロセス識別子を指定する第2タイプコマンドが存在しない場合、前記受信した第1タイプコマンドをエラーとして完了させるように構成されている
    請求項3に記載のストレージデバイス。
  5. 前記コントローラは、
    前記複数のメモリリソースの各々について、利用可能状態または利用不可能状態のいずれであるかを管理し、
    前記複数のメモリリソースのうちの第1のメモリリソースを指定する複数の第1タイプコマンドが前記コントローラによって受信および処理されることによって前記第1のメモリリソースが前記利用可能状態から前記利用不可能状態に遷移した場合、前記複数のメモリ領域のうち、前記第1のメモリリソースに対応する一つのメモリ領域内に維持されており、且つ、未完了である第2タイプコマンドの各々をエラーとして完了させるように構成されている
    請求項3に記載のストレージデバイス。
  6. 前記不揮発性メモリは、各々がデータ消去動作の単位である複数のブロックを含み、
    前記コントローラは、各々が1つ以上のブロックを含む複数のブロックグループを管理するように構成され、
    前記複数のメモリリソースの各々は、前記複数のブロックグループの一つである
    請求項3に記載のストレージデバイス。
  7. 前記第1タイプコマンドは、前記不揮発性メモリにデータを書き込むためのライトコマンドであり、
    前記ライトコマンドは、前記複数のメモリリソースのうちの一つのメモリリソースを、前記データが書き込まれるべき処理対象メモリリソースとして指定するパラメータと、前記データを識別するためのデータ識別子を指定するパラメータと、を含む
    請求項3に記載のストレージデバイス。
  8. 前記1以上の第2タイプコマンドの各々は、情報が転送されるべき、前記ホストに設けられたメモリ内のバッファ領域を示すポインタを含み、
    前記コントローラは、
    前記ホストから前記ライトコマンドを受信したことに応じて、
    前記ライトコマンドに対して、前記ライトコマンドに関連付けられたデータが書き込まれるべき前記処理対象メモリリソース内の物理的な記憶位置を示す物理アドレスを割り当て、
    前記取得した一つの第2タイプコマンドを完了させ、
    前記完了した一つの第2タイプコマンドに対する前記コマンド完了応答を前記ホストに送信する動作と、前記割り当てられた物理アドレスと前記データ識別子とを前記ホストに設けられた前記メモリ内の前記バッファ領域に前記第1の先行応答として転送する動作と、を実行するように構成されている
    請求項7に記載のストレージデバイス。
  9. 前記不揮発性メモリは、各々がデータ消去動作の単位である複数のブロックを含み、
    前記コントローラは、各々が1つ以上のブロックを含む複数のブロックグループを管理するように構成され、
    前記複数のメモリリソースの各々は、前記複数のブロックグループのうちの1つのブロックグループであり、
    前記複数のメモリリソースの各々の前記利用可能状態は、対応するブロックグループへの新たなデータの書き込みが可能な状態を示し、
    前記複数のメモリリソースの各々の前記利用不可能状態は、対応するブロックグループ全体がデータで満たされている状態を示す
    請求項5に記載のストレージデバイス。
  10. 前記1以上の先行応答の各々は、前記第1タイプコマンドに含まれる識別情報を含む
    請求項1に記載のストレージデバイス。
  11. 前記第1タイプコマンドは、前記不揮発性メモリに含まれる複数のメモリリソースのうちの処理対象メモリリソースを識別するためのリソース識別子を含み、
    前記1以上の先行応答の各々に含まれる前記識別情報は、前記第1タイプコマンドに含まれる前記リソース識別子を含む
    請求項10に記載のストレージデバイス。
  12. 前記1以上の先行応答の各々に含まれる前記識別情報は、前記第1タイプコマンドがフェッチされたサブミッションキューを識別するため識別子、前記第1タイプコマンドを識別するためのコマンド識別子、または前記ホストによって前記第1タイプコマンドに付与された任意の数値、の少なくとも1つを含む
    請求項10に記載のストレージデバイス。
  13. 前記コントローラは、
    前記選択した第1のメモリ領域内に維持されている第2タイプコマンドのうち、前記受信した第1タイプコマンドに含まれる前記プロセス識別子と同一のプロセス識別子を含み、且つ、前記ホストから最後に受信された第2タイプコマンドを取得し、
    前記取得した第2タイプコマンドを完了させ、前記完了された一つの第2タイプコマンドに対するコマンド完了応答を前記受信した第1タイプコマンドに対する前記第1の先行応答として前記ホストに送信するように構成されている
    請求項3に記載のストレージデバイス。
  14. 前記コントローラは、
    前記複数のメモリ領域のうちの一つのメモリ領域に維持されるべき第2タイプコマンドの数が、前記複数のメモリ領域の各々に維持可能なコマンド数の上限を超過した場合、前記一つのメモリ領域に既に維持されており、且つ未完了の第2タイプコマンドのうち、前記上限を超過した数の第2タイプコマンドをエラーとして完了させるように構成されている
    請求項3に記載のストレージデバイス。
  15. 前記コントローラは、
    前記一つのメモリ領域に既に維持されており、且つ、未完了の第2タイプコマンドのうち、最も古い1つ以上の第2タイプコマンドをエラーとして完了させるように構成されている
    請求項14に記載のストレージデバイス。
  16. 前記論理インタフェース規格はNVM express規格であり、
    前記コントローラは、前記NVM express規格に準拠して前記ホストとの通信を実行するように構成されている
    請求項1に記載のストレージデバイス。
  17. ホストとストレージデバイスとを含み、前記ホストと前記ストレージデバイスとの間の通信が、前記ホストから発行される1つのコマンドに対して1つの完了応答が前記ストレージデバイスによって前記ホストに送信されることが許容された論理インタフェース規格に従って実行される、ストレージシステムであって、
    前記ストレージデバイスは、
    不揮発性メモリと、
    前記不揮発性メモリにデータを書き込むためのライトコマンドに対する1以上の先行応答と、前記ライトコマンドが完了したことを示すコマンド完了応答とを前記ホストに送信するように構成されたコントローラと、
    を具備し、
    前記ライトコマンドは、前記データを識別するためのデータ識別子を指定するパラメータを含み、前記1以上の先行応答は、前記ライトコマンドを受け付けたことを示す第1の先行応答を少なくとも含み、前記1以上の先行応答の各々は、前記コマンド完了応答の前に前記ストレージデバイスによって前記ホストに送信される応答であり、
    前記ホストは、
    前記1以上の先行応答の一つが前記ストレージデバイスによって前記ホストに送信されることを可能にするための1以上の第2タイプコマンドを、前記ストレージデバイスに発行し、
    前記1以上の第2タイプコマンドの各々は、情報が転送されるべき、前記ホストに設けられたメモリ内のバッファ領域を示すポインタを含み、
    前記ストレージデバイスに前記1以上の第2タイプコマンドを発行した後に、前記ライトコマンドを前記ストレージデバイスに発行するように構成され、
    前記コントローラは、
    前記1以上の第2タイプコマンドを前記ホストから受信したことに応じて、前記1以上の第2タイプコマンドを前記ストレージデバイス内のメモリ領域に格納し、
    前記ホストから前記ライトコマンドを受信したことに応じて、
    前記ライトコマンドに対して、前記ライトコマンドに関連付けられたデータが書き込まれるべき前記不揮発性メモリ内の物理的な記憶位置を示す物理アドレスを割り当て、
    前記メモリ領域から前記1以上の第2タイプコマンドのうちの一つの第2タイプコマンドを取得し、
    前記取得した一つの第2タイプコマンドを完了させ、
    前記完了した一つの第2タイプコマンドに対する前記コマンド完了応答を前記ホストに送信する動作と、前記ホストに設けられた前記メモリ内の前記バッファ領域に前記第1の先行応答として前記割り当てられた物理アドレスと前記データ識別子とを転送する動作と、を実行し、
    前記ライトコマンドに関連付けられた前記データを前記ホストの前記メモリから取得し、前記割り当てられた前記物理アドレスに基づいて、前記取得したデータを前記不揮発性メモリに書き込み、
    前記不揮発性メモリへの前記データの書き込みの完了に応じて、前記ライトコマンドの完了を示す前記コマンド完了応答を前記ホストに送信するように構成されている
    ストレージシステム。
  18. 前記ライトコマンドは、前記不揮発性メモリに含まれる複数のメモリリソースのうち、前記ライトコマンドに関連付けられた前記データが書き込まれるべき処理対象メモリリソースを指定するパラメータと、前記ホストによって実行される複数のプロセスのうち、前記処理対象メモリリソースに対する処理を要求したプロセスを示すプロセス識別子を指定するパラメータと、を含み、
    前記コントローラは、
    前記複数のメモリリソースに対応する複数のメモリ領域を管理し、
    複数の第2タイプコマンドであって、前記複数のメモリリソースのうちの一つのメモリリソースを指定するパラメータと、前記複数のプロセスのうちの一つのプロセスを示すプロセス識別子を指定するパラメータと、をそれぞれ含む複数の第2タイプコマンドを前記ホストから受信し、
    同じメモリリソースを指定する第2タイプコマンドそれぞれが同じメモリ領域内に維持されるように、前記受信した複数の第2タイプコマンドの各々によって指定されるメモリリソースに基づいて、前記受信した複数の第2タイプコマンドの各々を、前記複数のメモリ領域のうちの一つのメモリ領域内に維持し、
    前記ホストから前記ライトコマンドを受信したことに応じて、
    前記複数のメモリ領域から前記受信したライトコマンドによって指定される前記処理対象メモリリソースに対応するメモリ領域を選択し、
    前記選択したメモリ領域内に維持されている第2タイプコマンドのうち、前記受信したライトコマンドによって指定される前記プロセス識別子と同一のプロセス識別子を指定する第2タイプコマンドを取得し、
    前記取得した1つの第2タイプコマンドを完了させ、
    前記完了した一つの第2タイプコマンドに対する前記コマンド完了応答を前記ホストに送信する動作と、前記ホストに設けられた前記メモリ内の前記バッファ領域に前記第1の先行応答として前記割り当てられた物理アドレスと前記データ識別子とを転送する動作と、を実行するように構成され、
    前記ホストは、前記ライトコマンドを前記ストレージデバイスに発行した後、前記処理対象メモリリソースを指定するパラメータと、前記複数のプロセスのうちの一つのプロセスを示すプロセス識別子を指定するパラメータと、を含む新たな第2タイプコマンドを前記ストレージデバイスに発行するように構成されている
    請求項17に記載のストレージシステム。
  19. 前記ホストは、
    データ識別子それぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルを管理し、
    前記ストレージデバイスから送信される前記データ識別子に前記ストレージデバイスから送信される前記物理アドレスが関連付けられるように前記アドレス変換テーブルを更新するように構成されている
    請求項17に記載のストレージシステム。
JP2022008613A 2022-01-24 2022-01-24 ストレージデバイスおよびストレージシステム Pending JP2023107418A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2022008613A JP2023107418A (ja) 2022-01-24 2022-01-24 ストレージデバイスおよびストレージシステム
US17/931,363 US11972110B2 (en) 2022-01-24 2022-09-12 Storage device and storage system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022008613A JP2023107418A (ja) 2022-01-24 2022-01-24 ストレージデバイスおよびストレージシステム

Publications (1)

Publication Number Publication Date
JP2023107418A true JP2023107418A (ja) 2023-08-03

Family

ID=87314045

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022008613A Pending JP2023107418A (ja) 2022-01-24 2022-01-24 ストレージデバイスおよびストレージシステム

Country Status (2)

Country Link
US (1) US11972110B2 (ja)
JP (1) JP2023107418A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240004556A1 (en) * 2022-06-29 2024-01-04 Western Digital Technologies, Inc. Asynchronous operation completion notification

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5412803A (en) * 1992-02-20 1995-05-02 International Business Machines Corporation Communications system having plurality of originator and corresponding recipient buffers with each buffer having three different logical areas for transmitting messages in single transfer
US20160342545A1 (en) * 2014-02-12 2016-11-24 Hitachi, Ltd. Data memory device
CN107209644B (zh) 2015-12-28 2020-04-28 华为技术有限公司 一种数据处理方法以及NVMe存储器
US20180335975A1 (en) 2017-05-16 2018-11-22 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Translating a host data storage command into multiple disk commands
US11544000B2 (en) 2018-08-08 2023-01-03 Marvell Asia Pte Ltd. Managed switching between one or more hosts and solid state drives (SSDs) based on the NVMe protocol to provide host storage services

Also Published As

Publication number Publication date
US20230236730A1 (en) 2023-07-27
US11972110B2 (en) 2024-04-30

Similar Documents

Publication Publication Date Title
CN114115747B (zh) 存储器系统及控制方法
JP7159069B2 (ja) メモリシステムおよび制御方法
US11726707B2 (en) System and method of writing to nonvolatile memory using write buffers
JP7155028B2 (ja) メモリシステムおよび制御方法
JP2019185596A (ja) メモリシステムおよび制御方法
JP2021033849A (ja) メモリシステムおよび制御方法
JP2019057151A (ja) メモリシステムおよび制御方法
JP2021033848A (ja) メモリシステムおよび制御方法
JP7381678B2 (ja) メモリシステム
JP2021033847A (ja) メモリシステムおよび制御方法
US20230359380A1 (en) Memory system and method for controlling nonvolatile memory
JP2021033845A (ja) メモリシステムおよび制御方法
US11972110B2 (en) Storage device and storage system
JP7167295B2 (ja) メモリシステムおよび制御方法
JP2022179798A (ja) メモリシステムおよび制御方法
JP2022121655A (ja) メモリシステムおよび制御方法