[go: up one dir, main page]

JP2018169810A - メモリシステムおよび制御方法 - Google Patents

メモリシステムおよび制御方法 Download PDF

Info

Publication number
JP2018169810A
JP2018169810A JP2017066789A JP2017066789A JP2018169810A JP 2018169810 A JP2018169810 A JP 2018169810A JP 2017066789 A JP2017066789 A JP 2017066789A JP 2017066789 A JP2017066789 A JP 2017066789A JP 2018169810 A JP2018169810 A JP 2018169810A
Authority
JP
Japan
Prior art keywords
command
queue
issue queue
subsequent
issue
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
JP2017066789A
Other languages
English (en)
Inventor
直也 福地
Naoya Fukuchi
直也 福地
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
Toshiba Memory 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 Toshiba Memory Corp filed Critical Toshiba Memory Corp
Priority to JP2017066789A priority Critical patent/JP2018169810A/ja
Priority to US15/703,769 priority patent/US10310810B2/en
Publication of JP2018169810A publication Critical patent/JP2018169810A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)

Abstract

【課題】ホストからのコマンドそれぞれを効率良く取り扱うことができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、ホストのメモリ上の発行キュー内の第1のコマンドをメモリシステム内の第1のキューにフェッチして実行する。メモリシステムは、発行キューまたは他の発行キュー内の後続のコマンドの内容を、前記発行キューまたは前記他の発行キュー内に前記後続のコマンドを残した状態でチェックする。前記メモリシステムは、前記後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記後続のコマンドを前記メモリシステム内の第2のキューにフェッチして、前記後続のコマンドを前記第1のコマンドと並列に実行する。【選択図】図12

Description

本発明の実施形態は、不揮発性メモリを備えるメモリシステムおよび制御方法に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
最近では、SSDにおいては、その性能改善のために、ホストからのコマンドを取り扱うコマンドハンドリング機能の向上が求められている。
特開2016−212580号公報
本発明が解決しようとする課題は、ホストからのコマンドそれぞれを効率良く取り扱うことができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、前記ホストのメモリ上の発行キュー内の第1のコマンドを前記メモリシステム内の第1のキューにフェッチする。前記コントローラは、前記第1のコマンドを実行する。前記コントローラは、前記第1のコマンドの実行中に、前記発行キューまたは前記ホストのメモリ上の他の発行キュー内の後続のコマンドの内容を、前記発行キューまたは前記他の発行キュー内に前記後続のコマンドを残した状態でチェックする。前記コントローラは、前記後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記発行キューまたは前記他の発行キューから前記後続のコマンドを前記メモリシステム内の第2のキューにフェッチして、前記後続のコマンドを前記第1のコマンドと並列に実行する。
実施形態に係るメモリシステムの構成例を示すブロック図。 実施形態のメモリシステムによって実行されるコマンド処理の概要を示すブロック図。 ホストメモリ上の複数の発行キューからコマンドがフェッチされるべき発行キューを選択するアービトレーション機構の例を示すブロック図。 実施形態のメモリシステムによって実行される、発行キューに入れられたコマンドをフェッチする動作を示す図。 実施形態のメモリシステムによって実行される、コマンド完了の応答を完了キューに積む動作を示す図。 コマンド処理の基本的な手順を示す図。 コマンドプレチェック処理を使用せずに、現在のコマンドの実行中に後続のコマンドをフェッチする動作を示す図。 コマンドプレチェック処理を使用しない場合のコマンド処理の手順を示すフローチャート。 実施形態のメモリシステムによって実行される、コマンドプレチェックを含むコマンド処理の例を示す図。 実施形態のメモリシステムによって実行される、コマンドプレチェックを含むコマンド処理の別の例を示す図。 実施形態のメモリシステムによって実行されるコマンドプレチェック動作を示す図。 実施形態のメモリシステムによって実行される、コマンドプレチェックを含むコマンド処理の手順を示すフローチャート。
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み込むように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NAND型フラッシュメモリを備えたソリッドステートドライブ(SSD)3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、SSD3をアクセスする情報処理装置(コンピューティングデバイス)である。ホスト2は、ストレージサーバ(サーバ)であってもよいし、パーソナルコンピュータであってもよい。
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、NVM Express(NVMe)(登録商標)、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、Ethernet(登録商標)、Fibre channel、等を使用し得る。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックB0〜Bm−1を含む。ブロックB0〜Bm−1の各々は多数のページ(ここではページP0〜Pn−1)によって編成される。ブロックB0〜Bm−1は、消去動作の単位である。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。ページP0〜Pn−1の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0〜Pn−1は、データ書き込み動作およびデータ読み込み動作の単位である。
コントローラ4は、Toggle、Open NAND Flash Interface(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。NANDインタフェース13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリチップを含んでいてもよい。NANDインタフェース13は、複数のチャンネルを介してこれら複数のNAND型フラッシュメモリチップに接続されていてもよい。
コントローラ4は、NANDインタフェース13を使用して、NAND型フラッシュメモリ5の動作(ライト(プログラム)動作、リード動作、消去動作、等)を制御する。ライト(プログラム)動作は、1ページ分のデータを書き込み対象のページに書き込む動作である。リード動作は、1ページ分のデータを読み出し対象のページからリードする動作である。消去動作は、あるブロック内の全てのメモリセルを消去状態にするための動作である。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)40を用いて実行される。コントローラ4は、ルックアップテーブル(LUT)40を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータがライトされたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。ルックアップテーブル(LUT)40は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、ルックアップテーブル(LUT)40を更新してこの論理アドレスをこの別の物理記憶位置に関連付ける。
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、SRAM15等を含んでもよい。これらCPU12、NANDインタフェース13、DRAMインタフェース14、SRAM15は、バス10を介して相互接続されていてもよい。
ホストインタフェース11は、ホスト2から様々なコマンドを受信する。ホストインタフェース11は、アービトレーション機構21と、コマンド送受信部22とを含む。アービトレーション機構21は、コマンドがフェッチされるべき発行キューを、ホスト2のメモリ上に存在する複数の発行キューから選択するための機構である。アービトレーション機構21は、ラウンドロビンアービトレーション機構であってもよいし、重み付きラウンドロビンアービトレーション機構であってもよい。コマンド送受信部22は、CPU12の制御の下、アービトレーション機構21によって選択された発行キューからコマンドを受信する処理、およびコマンド完了の応答をホスト2のメモリ上の完了キューに積む処理とを実行する。コマンド完了の応答は、このコマンドの処理の成功/失敗を示すステータスをホスト2に知らせるための完了通知である。あるコマンドに対応するコマンド完了の応答は、このコマンドが取り出された発行キューに対応する完了キューに積まれる。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、およびSRAM15を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答して、NAND型フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM15またはDRAM6上にロードし、このファームウェアを実行することによって様々な処理を行う。
このCPU12は、例えば、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。
CPU12は、コマンド処理部31、およびコマンドプレチェック部32として機能することができる。
コマンド処理部31は、ホスト2からの様々なコマンドを処理する。これらコマンドのタイプは、I/Oコマンドと、管理コマンドとに大別される。I/Oコマンドの例は、ライトコマンド、リードコマンド、コンペアコマンド、等を含む。
ライトコマンドは、SSD3に対してデータのライトを要求するコマンドである。ライトコマンドは、そのコマンドパラメータとして、例えば、データが書き込まれるべきLBA(開始LBA)と、転送長(データ長)と、書き込まれるべきデータ(ライトデータ)が存在するホスト2のメモリ上の位置を示すアドレス情報、等を含む。LBAは、論理セクタ(論理ブロック)に付与されるシリアル番号によって表現される。シリアル番号はゼロから始まる。
ライトコマンドを受信した時、コマンド処理部31は、ホスト2のメモリからライトデータを取得し、このライトデータをNAND型フラッシュメモリ5に書き込む。そして、ライトコマンドの処理が完了すると、コマンド処理部31は、このライトコマンドの成功または失敗を示すステータスを伴うコマンド完了の応答をホスト2に送信する。
リードコマンドは、SSD3に対してデータのリードを要求するコマンドである。リードコマンドは、そのコマンドパラメータとして、例えば、リードすべきデータのLBA(開始LBA)と、転送長(データ長)と、リードデータが転送されるべきホスト2のメモリ上の位置を示すアドレス情報、等を含む。
リードコマンドを受信した時、コマンド処理部31は、このリードコマンドによって指定されるデータをNAND型フラッシュメモリ5からリードし、このリードデータと、コマンド完了の応答をホスト2に送信する。コマンド完了の応答は、このリードコマンドの成功または失敗を示すステータスを含む。
コンペアコマンドは、SSD3に対して、コンペアコマンドによって指定されたLBA範囲に対応するデータを、NAND型フラッシュメモリ5からリードし、且つこのリードデータをコンペアコマンドによって指定された比較データと比較することを要求する。
コンペアコマンドを受信した時、コマンド処理部31は、このコンペアコマンドによって指定されたLBA範囲に対応するデータをNAND型フラッシュメモリ5からリードする。そして、コマンド処理部31は、このリードデータをコンペアコマンドによって指定された比較データと比較する。リードデータが比較データと等しいならば、コンペアコマンドは成功して完了する。コマンド処理部31は、成功または失敗を示すステータスを含むコマンド完了の応答をホスト2に送信する。
管理コマンドの例は、SSD3に対して発行キュー/完了キューの作成又は削除を要求するコマンド(create I/O submission queue command、delete I/O submission queue command)、SSD3から様々な内部設定情報を取得するためのコマンド(identify command)、SSD3に対して、以前に発行された特定のコマンドをアボートすることを要求するためのコマンド(abort command)、他の様々なコマンド等を含む。
コマンド処理部31は、コマンド送受信部22を使用して、アービトレーション機構21によって選択された発行キューからコマンドを順番にフェッチする。ここで、フェッチするとは、メモリ(ここではホスト2のメモリ)からコマンドを取得する動作を意味する。メモリからフェッチ(取得)されたコマンドは、SSD3内のローカルな受信キューに積まれる。コマンド処理部31は、これらフェッチされたコマンドを任意の順序で実行することができる。
発行キューからフェッチされたコマンドは、SSD3内のローカルな受信キューであるメイン受信キュー41に積まれる。コマンド処理部31は、メイン受信キュー41内に存在するこれらコマンドそれぞれをシリアルに実行する。例えば、メイン受信キュー41内の或るコマンドの実行が完了すると、コマンド処理部31は、メイン受信キュー41内の次のコマンドを実行する。
各コマンドの実行に要する時間は、個々のコマンドの内容(例えば、ライトコマンド/リードコマンドに対応するデータ長)およびNAND型フラッシュメモリ5の内部状態等に依存する。例えば、長いデータ長を伴うライトコマンドの実行には比較的多くの時間(コマンド実行時間)を要する場合がある。また、データ長が長い比較データを伴うコンペアコマンドのコマンド実行時間も比較的長くなる場合がある。
したがって、コマンド実行時間の長い現在のコマンドの実行中に、コマンド処理部31は、このコマンドがフェッチされた発行キューと同一の発行キューまたは別の発行キューから、後続のコマンドをフェッチしてもよい。このフェッチされた後続のコマンドは、メイン受信キュー41ではなく、サブ受信キュー42に積まれる。このサブ受信キュー42は、SSD3内の追加のローカルな受信キューである。通常、サブ受信キュー42には未処理のコマンドが存在しないので、コマンド処理部31は、サブ受信キュー42に積まれた後続のコマンドを解析する処理を即座に開始することができる。コマンド処理部31は、サブ受信キュー42に積まれた後続のコマンドを解析することによって、この後続のコマンドが、現在のコマンドの実行中に実行可能なコマンドであるか否かを判定する。この後続のコマンドが、現在のコマンドの実行中に実行可能なコマンドであるならば、この後続のコマンドは、現在のコマンドと並行して実行することができる。これにより、SSD3内のコマンドハンドリング機能を向上させることが可能となる。
しかし、サブ受信キュー42にフェッチされた後続のコマンドは、現在のコマンドの実行中に実行可能なコマンドであるとは限らない。
例えば、実行中の現在のコマンドがコンペアコマンドである場合においては、もしサブ受信キュー42にフェッチされた後続のコマンドが、コンペアコマンドによって指定されたLBA範囲とオーバーラップするLBA範囲へのデータ書き込みを要求するライトコマンドであるならば、この後続のコマンドは、現在のコマンドの実行中に実行することができないコマンドとして扱われる場合がある。なぜなら、もしこのライトコマンドが現在のコマンドの実行中に実行されたならば、NAND型フラッシュメモリ5内に格納されている比較対象のデータが、このライトコマンドによって更新されてしまう可能性があるからである。
また、例えば、実行中の現在のコマンドがある発行キュー(例えばSQ1)からフェッチされたコマンドである場合において、もしサブ受信キュー42にフェッチされた後続のコマンドが、この発行キューSQ1またはこの発行キューSQ1に対応する完了キューCQ1の削除を要求するコマンドであるならば、この後続のコマンドも、現在のコマンドの実行中に実行することができないコマンドとして扱われる場合がある。
このように、サブ受信キュー42にフェッチされた後続のコマンドが、現在のコマンドの実行中に実行することができないコマンドであったならば、この後続のコマンドは、実行中の現在のコマンドが完了するまでは実行できない。
この結果、実行のための受信キューをメイン受信キュー41とサブ受信キュー42との間で切り換える処理が頻繁に発生しやすくなる。
例えば、コマンド処理部31は、実行中の現在のコマンドが完了した時、サブ受信キュー42内の後続のコマンドを実行するために、実行のための受信キューをメイン受信キュー41からサブ受信キュー42に切り換えることが必要とされる。そして、サブ受信キュー42内のこの後続のコマンドの実行が完了した時、コマンド処理部31は、メイン受信キュー41内の別の後続のコマンドを実行するために、実行のための受信キューをサブ受信キュー42からメイン受信キュー41に再び切り換えることが必要とされる。
実行のための受信キューの切り替えのためのオーバーヘッドは、SSD3の処理性能を低下させる要因となり得る。
通常、各コマンドの処理は、設定された時間(コマンドタイムアウト値)内に完了することが必要とされる。もし発行キューからコマンドがフェッチされてからこのコマンドの完了応答が返されるまでの時間(コマンド実行時間)が設定されたコマンドタイムアウト値を超えたならば、深刻なシステムエラーが起こる可能性がある。
上述したように、もしサブ受信キュー42にフェッチされた後続のコマンドが、現在のコマンドの実行中に実行可能なコマンドではないならば、この後続のコマンドは、現在のコマンドが完了するまで実行されない。このことは、この後続のコマンドの処理に割り当て可能なコマンド実行時間が実際上短くなってしまうことを意味する。
このように、あるコマンドの実行中に、発行キュー内の後続のコマンドをサブ受信キュー42にフェッチするという構成のみでは、実行のための受信キューの切り替え頻度の増加による影響や、後続のコマンドのコマンド実行時間が短くなるという影響が生じうる。
そこで、本実施形態では、コマンドプレチェック部32が設けられている。
このコマンドプレチェック部32は、現在のコマンド(コマンドA)の実行中に、例えば、このコマンド(コマンドA)の処理の完了を待っている待ち時間中に、同一の発行キューまたは別の発行キューに存在する後続のコマンド(コマンドB)の内容(例えばコマンド種別等)を、後続のコマンド(コマンドB)を同一の発行キューまたは他の発行キュー内に残した状態でチェックする。ここで、後続のコマンドの内容を、後続のコマンドを同一の発行キューまたは他の発行キュー内に残した状態でチェックするとは、後続のコマンドを同一の発行キューまたは他の発行キューからSSD3内のキュー(サブ受信キュー42)に実際にフェッチすること無く、同一の発行キューまたは他の発行キュー内に存在する後続のコマンドの内容をチェックすることを意味する。これにより、後続のコマンドの内容を、後続のコマンドを同一の発行キューまたは他の発行キュー内に残した状態でチェックすることができ、これによって後続のコマンド(コマンドB)が現在のコマンド(コマンドA)の実行中に実行可能なコマンドであるか否かを判定することができる。
この後続のコマンド(コマンドB)が、コマンド(コマンドA)の実行中に実行可能なコマンドであるとコマンドプレチェック部32によって判定されたならば、コマンド処理部31は、この後続のコマンド(コマンドB)を発行キューからフェッチする。フェッチされた後続のコマンド(コマンドB)はサブ受信キュー42に積まれる。そして、コマンド処理部31は、この後続のコマンド(コマンドB)をコマンド(コマンドA)と並列に実行する。ここで、コマンドBをコマンドAと並列に実行するとは、コマンドAの処理が完了してからコマンドBを実行するというようにこれらコマンドA,Bを逐次的に処理するのではなく、コマンドBの処理期間(実行時間)がコマンドAの処理期間(実行時間)の少なくとも一部にオーバーラップするようにコマンドAの実行中にコマンドBを実行することを意味する。典型的には、コマンドAの処理の完了を待たずにコマンドBの処理が開始されればよい。もちろん、コマンドA,Bがほぼ同時に実行されてもよい。
この後続のコマンド(コマンドB)がコマンド(コマンドA)の実行中に実行可能なコマンドでないならば、コマンド処理部31は、この後続のコマンド(コマンドB)をフェッチせず、発行キュー内に維持する。
このように、本実施形態では、この後続のコマンド(コマンドB)が、コマンド(コマンドA)の実行中に実行可能なコマンドである場合にのみ、この後続のコマンド(コマンドB)が発行キューからサブ受信キュー42にフェッチされる。
したがって、コマンド(コマンドA)の実行中に実行できないコマンドが発行キューからサブ受信キュー42にフェッチされることを防止することができる。この結果、実行のための受信キューの切り替え頻度を低くすることができる。また、発行キューから後続のコマンド(コマンドB)がフェッチされない限り、このコマンドBのタイムアウト値をカウントするためのタイマーはスタートされない。よって、このコマンドBの処理に割り当て可能なコマンド実行時間が短くなることを防ぐことができる。
DRAMインタフェース14は、DRAM6をアクセス制御するように構成されたDRAMコントローラである。DRAM6の記憶領域は、ルックアップテーブル(LUT)40、メイン受信キュー41、サブ受信キュー42、および完了送信キュー43を格納するために利用される。あるいは、ルックアップテーブル(LUT)40、メイン受信キュー41、サブ受信キュー42、および完了送信キュー43は、DRAM6上ではなく、コントローラ4内に内蔵されたランダムアクセスメモリであるSRAM15上に存在してもよい。
次に、ホスト2の構成について説明する。
ホスト2は、CPU(ホストCPU)51、メインメモリ52、ホストコントローラ53等を含む。これらCPU51、メインメモリ52、ホストコントローラ53は、バス50を介して相互接続される。
CPU51は、ホスト2内のコンポーネントを制御するプロセッサである。CPU51は、SSD3または他のストレージデバイスからメインメモリ52にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、SSD3を制御するためのプログラムを含む。
メインメモリ52は、DRAMのようなランダムアクセスメモリ(RAM)である。このメインメモリ52の記憶領域の一部は、一つ以上の発行キュー(submission queue)SQ、および一つ以上の発行キューSQに対応する一つ以上の完了キュー(conpletion queue)CQを格納するために使用される。発行キューは、ホスト2がコマンドを発行するために使用されるキューである。完了キューCQは、SSD3のコントローラ4がホスト2にコマンド完了を通知するために使用されるキューである。メインメモリ52上には、発行キューSQと完了キューCQとを各々が含む一つ以上のキューペアが存在する。図1においては、複数の発行キューSQ1、SQ2、SQ3、…と、発行キューSQ1、SQ2、SQ3、…にそれぞれ対応する複数の完了キューCQ1、CQ2、CQ3、…とがメインメモリ52上に存在する場合が例示されている。
ホストソフトウェアによって生成されるコマンドそれぞれは、発行キューSQのいずれかに入れられる。コマンドのタイプには、上述のI/Oコマンドと、上述の管理コマンドとがある。管理コマンドが入れられる発行キューは、I/Oコマンドが入れられる発行キュー(I/O submission queue)とは異なる発行キュー(Admin submission queue:ASQ)である。管理コマンドの完了応答が入れられる完了キューは、I/Oコマンドの完了応答が入れられる完了キュー(I/O completion queue)とは異なる完了キュー(Admin completion queue:ACQ)である。メインメモリ52上のキューペアSQ,CQの中には、少なくともASQ、ACQのキューペアが含まれる。ホスト2は、必要に応じて、発行キューSQ(I/O submission queue)および完了キューCQ(I/O completion queue)のキューペアを作成することができる。
ホストコントローラ53は、SSD3とインタフェースするように構成されたコントローラである。ホストコントローラ53はCPU51に内蔵されていてもよい。
図2は、コマンド処理の概要を示す。
ホストソフトウェアによって発行されたコマンドそれぞれは、発行キューSQ1、SQ2、SQ3、…のいずれかに入れられる。発行キューSQ1、SQ2、SQ3、…の一つがアービトレーション機構21によって選択される。アービトレーション機構21がラウンドロビンアービトレーション機構である場合には、アービトレーション機構21は、図3に示すように、構成されていてもよい。図3では、4つの発行キューSQ1、SQ2、SQ3、SQ4がホスト2のメインメモリ52上に存在する場合が例示されている。アービトレーション機構21は、発行キューSQ1、SQ2、SQ3、SQ4を順番に選択する。コマンドは、アービトレーション機構21によって選択された発行キューからフェッチされる。選択された発行キューからフェッチされるコマンドの最大数は、Burstサイズ(Arbitration Burst)によって指定されてもよい。このBurstサイズによって指定された数のコマンドが選択された発行キューから順番にフェッチされた後、アービトレーション機構21によって次の発行キューが選択される。
選択された発行キューからフェッチされた各コマンドは、コマンド送受信部22を介してメイン受信キュー41に送られ、このメイン受信キュー41またはサブ受信キュー42に積まれる。通常は、フェッチされた各コマンドはメイン受信キュー41に積まれる。コマンドプレチェック部32によってプレチェックされたコマンドが発行キューからフェッチされた場合にのみ、このコマンドは、サブ受信キュー42に積まれる。
メイン受信キュー41/サブ受信キュー42内のコマンドは、コマンド処理部31によって実行される。
実行されるべきコマンドがライトコマンドならば、コマンド処理部31は、このライトコマンドによって指定されるライトデータをホスト2のメインメモリ52から取得し、このライトデータをNAND型フラッシュメモリ5に書き込む。ライトコマンドの処理が完了した時、コマンド完了の応答がコマンド処理部31によって完了送信キュー43に入れられる。そして、このコマンド完了の応答は、コマンド送受信部22を介して、選択された発行キューに対応する完了キューCQに積まれる。
実行されるべきコマンドがリードコマンドならば、コマンド処理部31は、リードコマンドによって指定されるデータをNAND型フラッシュメモリ5からリードする。リードコマンドの処理が完了した時、コマンド完了の応答がコマンド処理部31によって完了送信キュー43に入れられる。そして、リードデータがホスト2のメインメモリ52に送信されると共に、このコマンド完了の応答が、コマンド送受信部22を介して、選択された発行キューに対応する完了キューCQに積まれる。
図4は、発行キューSQに入れられたコマンドをフェッチする動作を示す。
発行キューSQは、固定サイズの複数のエントリを含む循環バッファ(循環キュー)であってもよい。各エントリはコマンドを格納するために使用される。あるコマンドが格納されているエントリにおいては、このコマンドのオペレーションコード、このコマンドの識別子、このコマンドがフェッチされた発行キューSQの識別子、および、このコマンドの様々なコマンドパラメータが格納されている。
この発行キューSQは、この発行キューSQに対応するテールポインタおよびヘッドポインタによって制御される。
テールポインタは、次のコマンドが入れられるべき発行キューSQ内のエントリを指すためのポインタである。テールポインタの値は、ホスト2によって更新される。ヘッドポインタは、次のコマンドがフェッチされるべき発行キューSQ内のエントリを指すポインタである。ヘッドポインタの値は、SSD3のコントローラ4によって更新される。テールポインタの値がヘッドポインタの値に等しい時、発行キューSQは空である。
(1)ホスト2は、コマンドを生成し、このコマンドをテールポインタによって指される発行キューSQ内のエントリに格納する。そして、ホスト2は、テールポインタの値を更新(インクリメント)することによって、新たなコマンドが発行キューSQに積まれたことをSSD3のコントローラ4に通知する。テールポインタの値を更新する処理においては、ホスト2は、更新されたテールポインタの値を、コントローラ4内のレジスタ(この発行キューSQに対応するドアベルテールレジスタ)に書き込み、これによって、更新されたテールポインタの値をSSD3のコントローラ4に通知する。更新されたテールポインタの値と現在のヘッドポインタとの間の差分は、発行キューSQに積まれた新たなコマンドの数を示す。
(2)SSD3のコントローラ4は、ヘッドポインタによって指される発行キューSQ内のエントリからコマンドをフェッチし、フェッチされたコマンドをメイン受信キュー41に格納する。
(3)発行キューSQ内のエントリからコマンドをフェッチした時、SSD3のコントローラ4は、ヘッドポインタの値を更新(インクリメント)して、以前のヘッドポインタの値によって指されていたエントリを解放する。ホスト2は、以前のヘッドポインタの値によって指されていたエントリを空きエントリとして扱うことができる。
図5は、コマンド完了の応答を完了キューに積む動作を示す。
完了キューCQも、固定サイズの複数のエントリを含む循環バッファ(循環キュー)であってもよい。各エントリは完了応答(完了通知)を格納するために使用される。この完了キューCQも、この完了キューCQに対応するテールポインタおよびヘッドポインタによって制御される。テールポインタは、次の完了応答が入れられるべき完了キューCQ内のエントリを指すためのポインタである。テールポインタの値は、SSD3のコントローラ4によって更新される。ヘッドポインタは、処理されるべき次の完了応答が格納されている完了キューCQ内のエントリを指すためのポインタである。ヘッドポインタの値は、ホスト2によって更新される。テールポインタの値がヘッドポインタの値に等しい時、完了キューCQは空である。
(1)コントローラ4は、完了応答を生成し、この完了応答をテールポインタによって指される完了キューCQ内のエントリに格納する。そして、コントローラ4は、テールポインタの値を更新(インクリメント)することによって、新たな完了応答が完了キューCQに積まれたことをホスト2に通知する。テールポインタの値を更新する処理においては、コントローラ4は、更新されたテールポインタの値を、コントローラ4内のレジスタ(完了キューCQに対応するドアベルテールレジスタ)に書き込み、これによって、更新されたテールポインタの値をホスト2に通知する。更新されたテールポインタの値と現在のヘッドポインタとの間の差分は、完了キューCQに積まれた新たな完了応答の数を示す。
(2)ホスト2は、ヘッドポインタによって指される完了キューCQ内のエントリから完了応答を取得し、取得した完了応答を処理する。
(3)ホスト2は、ヘッドポインタの値を更新(インクリメント)する。
図6は、コマンド処理の基本的な手順を示す。
(1)ホスト2が新たなコマンドを発行キューSQに入れる。そして、ホスト2が更新されたテールポインタの値を発行キューSQに対応するドアベルテールレジスタに書き込み、これによって、新たなコマンドが発行キューSQに入れられたことをSSD3のコントローラ4に通知する。
(2)SSD3のコントローラ4がアービトレーション機構21によって、コマンドをフェッチすべき発行キューSQを選択する。
(3)SSD3のコントローラ4が選択された発行キューSQからコマンドをフェッチする。
(4)SSD3のコントローラ4がフェッチしたコマンドを解析し、このコマンドを処理する。
(5)このコマンドの処理(実行)が完了すると、SSD3のコントローラ4は、完了応答を発行キューSQに対応する完了キューCQに積み、そして新たな完了応答が完了キューCQに積まれたことをホスト2に通知する。
(6)SSD3のコントローラ4は、同じ発行キューSQに対して(3)〜(5)を事前に決められたコマンド数(Burstサイズ)分、繰り返す。なお、コマンドのフェッチは、Burstサイズ分まとめて実行されてもよい。この場合、SSD3のコントローラ4は、Burstサイズによって指定される数のコマンドを同じ発行キューSQから一度にフェッチする。
(7)SSD3のコントローラ4によって実行される処理は、(2)に戻る。
図7は、上述のコマンドプレチェック処理を使用せずに、現在のコマンドの実行中に後続のコマンドをフェッチする動作を示す。
ホスト2では、SSD3によって実行されるべきコマンドが発行キューSQに積まれる。図7では、発行キューSQ1にコマンドAが積まれ、発行キューSQ2にコマンドBが積まれている場合が例示されている。コマンドが発行キューSQに積まれると、新たなコマンドが発行キューSQに存在することがSSD3に通知される。
SSD3では、コマンドをフェッチすべき発行キューが複数の発行キューSQ1,SQ2から選択される。図7では、発行キューSQ1が選択された場合が例示されている。
(1)コマンドのフェッチ
SSD3のコントローラ4は、コマンド送受信部22を使用して、選択された発行キューから一つ以上のコマンドを順番にフェッチする。フェッチされたコマンド(ここでは、コマンドA)は、SSD3のメイン受信キュー41に積まれる。コマンドがフェッチされる際、Burstサイズによって指定される数のコマンドが一度にフェッチされてもよい。もしくは、コマンドをフェッチする動作とフェッチされたコマンドを処理する動作とを含むサイクルを、フェッチされたコマンドの数がBurstサイズによって指定される数に達するまで繰り返されてもよい。ある一つの発行キューからBurstサイズによって指定される数のコマンドがフェッチされると、アービトレーション機構21によってコマンドをフェッチすべき発行キューが新たに選択し直される。
例えば、発行キューSQ1からBurstサイズによって指定される数のコマンドがフェッチされた後、コマンドをフェッチすべき発行キューが発行キューSQ2に切り替えられ、発行キューSQ2からコマンドがフェッチされるようになる。また、発行キューSQ2からBurstサイズによって指定される数のコマンドがフェッチされた後、コマンドをフェッチすべき発行キューが発行キューSQ1に切り替えられ、発行キューSQ1から後続のコマンドがフェッチされるようになる。
(2)コマンド処理
次に、SSD3のコントローラ4は、フェッチされたコマンド(ここでは、コマンドA)を実行する。また、コマンドAが実行されている間に、SSD3のコントローラ4は、コマンドAが他のコマンドと並列に実行可能なコマンドであるか否か(つまり、並列処理可能か否か)を判定する。コマンドAが排他的に実行されなければならない種別のコマンドであるならば、並列処理不可能と判定される。一方、コマンドAが排他的に実行されなくてもよい種別のコマンドであるならば、並列処理可能と判定される。
なお、この判定は、コマンドAの処理に要する時間が閾値t1よりも長い場合にのみ、実行されてもよい。
(3)後続のコマンドのフェッチ
並列処理可能と判定されたならば、SSD3のコントローラ4は、コマンドAがフェッチされた発行キューと同じ発行キューまたは他の発行キューから後続のコマンドをフェッチする。例えば、現在選択されている発行キューからフェッチされたコマンドの数がBurstサイズによって指定される数に満たない場合には、同じ発行キューから後続のコマンドがフェッチされてもよい。この場合、SSD3のコントローラ4は、同じ発行キューに対応するヘッドポインタによって指されるこの発行キューのエントリから後続のコマンドをフェッチする。一方、現在選択されている発行キューからフェッチされたコマンドの数がBurstサイズによって指定される数に達した後は、アービトレーション機構21によって新たに選択される別の発行キューから後続のコマンドがフェッチされてもよい。もし新たに選択された発行キューにおいてテールポインタがヘッドポインタと等しいならば、この発行キューはスキップされ、次の発行キューがアービトレーション機構21によって新たに選択される。新たに選択された発行キューにコマンドが積まれているならば、新たに選択された発行キューに対応するヘッドポインタによって指されるこの発行キューのエントリから後続のコマンドがフェッチされる。図7では、発行キューSQ2から後続のコマンド(ここでは、コマンドB)がフェッチされる場合が例示されている。フェッチされたコマンド(ここでは、コマンドB)は、SSD3内のサブ受信キュー42に積まれる。
(4)コマンドチェック
次に、SSD3のコントローラ4は、フェッチされた後続のコマンド(コマンドB)を解析し、このフェッチされた後続のコマンド(コマンドB)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドであるか否かを判定する。
(5)チェック結果に基づく動作
コマンドチェックの結果、コマンドBがコマンドAの実行中に実行可能なコマンドであると判定されたならば、SSD3のコントローラ4は、実行中の現在のコマンド(コマンドA)の完了を待つこと無く、サブ受信キュー42に入れられたコマンドBを実行する。即ち、コマンドAとコマンドBとが並列に実行される。
他方、コマンドBがコマンドAの実行中に実行可能なコマンドではないならば、コマンドAの処理が完了するまでコマンドBは実行されない。
このように、現在のコマンドの実行中に後続のコマンドをフェッチしても、そのフェッチした後続のコマンドによっては、この後続のコマンドを、実行中の現在のコマンドと並列に実行できない場合がある。
図8のフローチャートは、上述のコマンドプレチェック処理を使用しない場合のコマンド処理の手順を示す。
ホスト2において、SSD3に所定の動作を実行させるためのコマンドが発行キューに積まれる(ステップS101)。コマンドが発行キューに積まれると、新たなコマンドが発行キューSQに存在することがSSD3に通知される。
SSD3では、アービトレーション機構21によってコマンドをフェッチすべき発行キューが選択される(ステップS102)。そして、コマンド処理部31は、コマンド送受信部22を使用して、選択された発行キューから一つ以上のコマンドをフェッチする(ステップS103)。フェッチされたコマンドは、メイン受信キュー41に積まれる(ステップS104)。そして、コマンド処理部31によってメイン受信キュー41内のコマンドが実行される(ステップS105)。
次に、実行中のコマンドが他のコマンドと並列に実行可能なコマンドであるか否かが判定される(ステップS106)。
実行中のコマンドが他のコマンドと並列に実行可能なコマンドであると判定されたならば(ステップS106のYES)、後続のコマンドが、実行中の現在のコマンドがフェッチされた発行キューと同じ発行キューまたは他の発行キューからフェッチされる(ステップS102またはステップS103)。
フェッチされた後続のコマンドは、サブ受信キュー42に積まれる(ステップS104)。サブ受信キュー42に積まれた後続のコマンドが現在のコマンドの実行中に実行可能なコマンドであるか否かがコマンド処理部31によって判定される。後続のコマンドが現在のコマンドの実行中に実行可能なコマンドであるならば、後続のコマンドは、現在のコマンドと並列に実行される。一方、後続のコマンドが現在のコマンドの実行中に実行可能なコマンドではないならば、後続のコマンドは、現在のコマンドが完了するまで実行されない。
実行中の現在のコマンドが、他のコマンドと並列に実行可能なコマンドではないと判定されたならば(ステップS106のNO)、後続のコマンドはフェッチされず、実行中のコマンドの処理が継続される。
実行中のコマンドの処理が完了すると(ステップS107)、コマンド完了の応答が完了送信キュー43に積まれ(ステップS108)、そしてこのコマンド完了の応答が完了キューに積まれる(ステップS109)。
次に、SSD3において、現在選択されている発行キューからフェッチおよび実行されたコマンドの数がBurstサイズによって指定された数に達したか否かが判定される(ステップS110)。
現在選択されている発行キューからフェッチおよび実行されたコマンドの数がBurstサイズによって指定された数に達していなければ(ステップS110のNO)、現在選択されている発行キューから後続のコマンドがフェッチされる(ステップS103)。
他方、現在選択されている発行キューからフェッチおよび実行されたコマンドの数がBurstサイズによって指定された数に達したならば(ステップS110のYES)、ホスト2内のすべてのコマンドが処理されたか否かが判定される(ステップS111)。
すべてのコマンドが処理されたならば(ステップS110のYES)、本フローチャートで示される処理は終了する。
他方、すべての発行キューに属するコマンドのなかで未処理のコマンドが存在するならば(ステップS111のNO)、本フローチャートで示される処理はステップS102の処理に移る。
次に、本実施形態のSSD3によって実行される、コマンドプレチェックを含むコマンド処理を説明する。
本実施形態では、現在のコマンドの処理の完了を待っている待ち時間中に、ホストメモリ上の発行キューSQの後続のコマンドのコマンド種別等を先行して判定するプレチェック処理が行われ、これによって後続のコマンドが現在のコマンドの実行中に実行可能か否かの判定をコマンド受信前に行うことが可能となる。以下、コマンドプレチェックを含むコマンド処理の概要を説明する。
(1)SSD3のコントローラ4が発行キューSQからコマンドをフェッチし、このコマンドの処理を開始する。
(2)このコマンドが他のコマンドと並列に処理可能なコマンドあるか、あるいは、このコマンドが他のコマンドと並列に処理可能なコマンドあり且つこのコマンドの処理に要する時間が閾値t1よりも長い場合
(a)SSD3のコントローラ4が実行中の現在のコマンドがフェッチされた発行キューと同じ発行キューまたは他の発行キュー内の後続のコマンドを、この後続のコマンドを同じ発行キューまたは他の発行キューに残した状態でプレチェックする。
(b)後続のコマンドが現在のコマンドの実行中に実行可能なコマンドである場合
(i)コントローラ4がこの後続のコマンドをサブ受信キュー42にフェッチして、この後続のコマンドを処理する。
(c)後続のコマンドが現在のコマンドの実行中に実行可能なコマンドでない場合
(i)コントローラ4は何もしない。
(3)このコマンドが他のコマンドと並列に処理可能なコマンドではない場合、あるいはこのコマンドが他のコマンドと並列に処理可能なコマンドであるが、このコマンドの処理に要する時間が閾値t1以下である場合
(a)コントローラ4は何もしない。
このように、本実施形態では、後続のコマンドが、この後続のコマンドを発行キュー内に残した状態でチェックされ、後続のコマンドが実際にフェッチされる前に、この後続のコマンドが現在のコマンドの実行中に実行可能なコマンドであるか否かが判定される。これにより、現在のコマンドの実行中に実行できない後続のコマンドが発行キューからサブ受信キュー42にフェッチされることを防止でき、またこの後続のコマンドの処理に割り当て可能なコマンド実行時間が短くなることを防ぐことができる。
このように、本実施形態では、より細やかなコマンド制御が可能となることで、以下のような効果も期待できる。
<Abortコマンドの機能強化>
コントローラ4は、発行キューSQをプレチェックすることによってAbortコマンドが発行キューSQに存在するか否かを事前に確認することができる。Abortコマンドが発行キューSQに存在する場合には、コントローラ4は、このAbortコマンドによってアボートされるべきコマンドの処理を事前に停止しておくことができる。
<連続実行が必要なコマンド(Fusedオペレーション)の処理判定の高速化>
連続実行が必要なコマンドにおいては、コマンドパラメータがこれらコマンド間で矛盾していた場合にこれらコマンドの処理を中止する必要がある。コントローラ4は、発行キューSQをプレチェックすることによって、連続実行が必要なコマンド(Fusedオペレーション)間のコマンドパラメータの整合性を事前に確認することができる。コマンドパラメータがこれらコマンド間で矛盾していた場合、コントローラ4は、これらコマンドの処理を停止すべきことを速やかに判定することができる。
<柔軟なコマンド処理>
Burstサイズによって指定されたコマンド数がある発行キューSQからメイン受信キュー41にフェッチされており、これらコマンドの少なくとも一つの処理に多くの時間を要する場合、コントローラ4は、別の発行キューSQをプレチェックすることによって、実行中の現在のコマンドと並列処理可能なコマンドを別の発行キューSQからサブ受信キュー42にフェッチすることができる。これにより、コマンド処理の効率を向上することが可能となる。
図9は、コマンドプレチェックを含むコマンド処理の例を示す。
ホスト2では、SSD3によって実行されるべきコマンドが発行キューSQに積まれる。図9では、発行キューSQ1にコマンドAが積まれ、発行キューSQ2にコマンドBが積まれた場合が例示されている。コマンドが発行キューSQに積まれると、新たなコマンドが発行キューSQに存在することがSSD3に通知される。
SSD3では、コマンドをフェッチすべき発行キューが複数の発行キューSQ1,SQ2から選択される。図9では、発行キューSQ1が選択された場合が例示されている。
(1)コマンドのフェッチ
SSD3のコントローラ4は、コマンド送受信部22を使用して、選択された発行キューから一つ以上のコマンドを順番にフェッチする。フェッチされたコマンド(ここでは、コマンドA)は、SSD3のメイン受信キュー41に積まれる。コマンドがフェッチされる際、Burstサイズによって指定される数のコマンドが一度にフェッチされてもよい。もしくは、コマンドをフェッチする動作とフェッチされたコマンドを処理する動作とを含むサイクルを、フェッチされたコマンドの数がBurstサイズによって指定される数に達するまで繰り返されてもよい。ある一つの発行キューからBurstサイズによって指定される数のコマンドがフェッチされると、アービトレーション機構21によってコマンドをフェッチすべき発行キューが新たに選択し直される。
(2)コマンド処理
次に、SSD3のコントローラ4は、フェッチされたコマンド(ここでは、コマンドA)を実行する。また、コマンドAが実行されている間に、SSD3のコントローラ4は、コマンドAが他のコマンドと並列処理可能か否かを判定する。なお、この判定は、コマンドAの処理に要する時間が閾値t1よりも長い場合にのみ、実行されてもよい。
(3)コマンドのプレチェック
並列処理可能と判定されたならば、実行中の現在のコマンド(ここでは、コマンドA)がフェッチされた発行キューと同じ発行キュー(発行キューSQ1)または他の発行キュー(発行キューSQ2)内の後続のコマンドが、コマンドプレチェック部32によってプレチェックされる。この後続のコマンドは、発行キューSQ1内の先頭のコマンドまたは発行キューSQ2内の先頭のコマンドである。例えば、現在選択されている発行キューからフェッチされたコマンドの数がBurstサイズによって指定される数に満たない場合には、同じ発行キュー内の後続のコマンド(先頭のコマンド)がプレチェックされてもよい。この場合、SSD3のコントローラ4は、同じ発行キューに対応するヘッドポインタによって指されるこの発行キューのエントリに格納されている後続のコマンドをプレチェックする。一方、現在選択されている発行キューからフェッチされたコマンドの数がBurstサイズによって指定される数に達した後は、アービトレーション機構21によって新たに選択される別の発行キュー内の後続のコマンド(先頭のコマンド)がプレチェックされてもよい。この場合、コマンドプレチェック部32は、新たに選択された発行キューに対応するヘッドポインタによって指されるこの発行キューのエントリに格納されている後続のコマンドをプレチェックする。
図9では、発行キューSQ2内のコマンドBがプレチェックされる場合が例示されている。後続のコマンドをプレチェックする処理では、コマンドプレチェック部32は、後続のコマンド(ここでは、発行キューSQ2内のコマンドB)の内容を、この後続のコマンドを発行キューSQ2内に残した状態でチェックして、後続のコマンド(コマンドB)が、現在のコマンド(ここでは、コマンドA)の実行中に実行可能なコマンドであるか否かを判定する。例えば、コマンドプレチェック部32は、発行キューSQ2に対応するヘッドポインタによって指される発行キューSQ2内のエントリをこのヘッドポインタを更新せずに参照する。これにより、このエントリは空きエントリにはならないので、後続のコマンドはこのエントリ内に維持される。エントリを参照する処理においては、コマンドプレチェック部32は、このエントリ内の一部の情報のみをホストメモリからリードしてもよい。例えば、このエントリからオペレーションコードのみをリードしてもよいし、このエントリからオペレーションコードとコマンドパラメータの一部(例えば、データ長、開始LBA、等)のみをリードしてもよい。
そして、コマンドプレチェック部32は、このプレチェック結果に基づいて、後続のコマンド(コマンドB)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドであるか否かを判定する。
(4)フェッチ処理なし
後続のコマンド(コマンドB)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドではないと判定されたならば、後続のコマンド(コマンドB)はフェッチされない。図9では、コマンドBは発行キューSQ2からフェッチされず、発行キューSQ2内に維持される。
(5)フェッチ処理の実行
後続のコマンド(コマンドB)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドであると判定されたならば、後続のコマンド(コマンドB)がフェッチされる。図9では、コマンドBが発行キューSQ2からフェッチされる。この場合、発行キューSQ2に対応するヘッドポインタは更新される。フェッチされた後続のコマンド(コマンドB)はサブ受信キュー42に積まれる。
(6)並列処理
続いて、SSD3のコントローラ4は、実行中の現在のコマンド(コマンドA)の完了を待つこと無く、サブ受信キュー42に入れられたコマンドBを実行する。即ち、コマンドAとコマンドBとが並列に実行される。
なお、発行キューSQ1からフェッチされたコマンドA,B,Cがメイン受信キュー41内にフェッチされ、これらコマンドA,B,Cがコマンド処理部31によって実行されるケースにおいては、これらコマンドA,B,Cと並列に実行可能なコマンドが発行キューSQ1またはSQ2に存在するか否かが判定されてもよい。例えば、発行キューSQ2に積まれているコマンドD,E,FがコマンドA,B,Cの実行中に実行可能なコマンド群であるならば、これらコマンドD,E,Fが発行キューSQ2からサブ受信キュー42にフェッチされ、コマンドA,B,Cと並列に実行されてもよい。
図10は、本実施形態のメモリシステムによって実行される、コマンドプレチェックを含むコマンド処理の別の例を示す。
ホスト2では、SSD3によって実行されるべきコマンドが発行キューSQに積まれる。図10では、発行キューSQ1にコマンドAが積まれ、発行キューSQ2にコマンドBが積まれ、発行キューSQ3にコマンドCが積まれた場合が例示されている。コマンドが発行キューSQに積まれると、新たなコマンドが発行キューSQに存在することがSSD3に通知される。
SSD3では、発行キューSQ1,SQ2,SQ3に積まれたコマンドを処理するために、アービトレーション機構21によって、コマンドをフェッチすべき発行キューが複数の発行キューSQ1,SQ2,SQ3から選択される。図10では、発行キューSQ1が選択されている。
(1)コマンドのフェッチ
アービトレーション機構21によって発行キューが選択されると、SSD3のコントローラ4は、コマンド送受信部22を使用して、選択された発行キューから一つ以上のコマンドをフェッチする。フェッチされたコマンド(ここでは、コマンドA)は、SSD3のメイン受信キュー41に積まれる。コマンドがフェッチされる際、Burstサイズによって指定される数のコマンドが一度にフェッチされてもよい。もしくは、コマンドをフェッチする動作とフェッチされたコマンドを処理する動作とを含むサイクルを、フェッチされたコマンドの数がBurstサイズによって指定される数に達するまで繰り返されてもよい。
(2)コマンド処理
次に、SSD3のコントローラ4は、フェッチされたコマンド(ここでは、コマンドA)を実行する。また、コマンドAが実行されている間に、SSD3のコントローラ4は、コマンドAが他のコマンドと並列処理可能か否かを判定する。なお、この判定は、コマンドAの処理に要する時間が閾値t1よりも長い場合にのみ、実行されてもよい。
(3)コマンドのプレチェック
並列処理可能と判定されたならば、実行中の現在のコマンド(ここでは、コマンドA)がフェッチされた発行キューと異なる発行キュー(発行キューSQ2、または発行キューSQ3)内の後続のコマンドが、コマンドプレチェック部32によってプレチェックされる。図10では、発行キューSQ2内のコマンドBがプレチェックされる場合が例示されている。後続のコマンドをプレチェックする処理では、コマンドプレチェック部32は、後続のコマンド(ここでは、発行キューSQ2内のコマンドB)の内容を、この後続のコマンドを発行キューSQ2内に残した状態でチェックして、後続のコマンド(コマンドB)が、現在のコマンド(ここでは、コマンドA)の実行中に実行可能なコマンドであるか否かを判定する。例えば、コマンドプレチェック部32は、発行キューSQ2に対応するヘッドポインタによって指される発行キューSQ2内のエントリをこのヘッドポインタを更新せずに参照する。これにより、たとえこのエントリが参照されても、後続のコマンド(コマンドB)はこのエントリ内に維持される。エントリを参照する処理においては、コマンドプレチェック部32は、このエントリ内の一部の情報のみをホストメモリからリードしてもよい。
そして、コマンドプレチェック部32は、このプレチェック結果に基づいて、後続のコマンド(コマンドB)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドであるか否かを判定する。
(4)別の発行キュー内のコマンドのプレチェック
後続のコマンド(コマンドB)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドではないと判定されたならば、その後続のコマンド(コマンドB)はフェッチされず、さらに別の発行キュー(発行キューSQ3)内の後続のコマンド(コマンドC)が、コントローラ4のコマンドプレチェック部32によってプレチェックされる。そして、コマンドプレチェック部32は、このプレチェック結果に基づいて、後続のコマンド(コマンドC)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドであるか否かを判定する。発行キューSQ3の後続のコマンド(コマンドC)をプレチェックする処理では、コマンドプレチェック部32は、後続のコマンド(ここでは、発行キューSQ3内のコマンドC)の内容を、この後続のコマンドを発行キューSQ3内に残した状態でチェックして、後続のコマンド(コマンドC)が、現在のコマンド(ここでは、コマンドA)の実行中に実行可能なコマンドであるか否かを判定する。例えば、コマンドプレチェック部32は、発行キューSQ3に対応するヘッドポインタによって指される発行キューSQ3内のエントリをこのヘッドポインタを更新せずに参照する。これにより、たとえこのエントリが参照されても、後続のコマンドはこのエントリ内に維持される。エントリを参照する処理においては、コマンドプレチェック部32は、このエントリ内の一部の情報のみをホストメモリからリードしてもよい。
(5)フェッチ処理の実行
後続のコマンド(コマンドC)が、現在のコマンド(コマンドA)の実行中に実行可能なコマンドであると判定されたならば、後続のコマンドがフェッチされる。図10で言うと、コマンドCが発行キューSQ3からフェッチされる。フェッチされた後続のコマンド(コマンドC)はサブ受信キュー42に積まれる。
(6)並列処理
続いて、SSD3のコントローラ4は、実行中の現在のコマンド(コマンドA)の完了を待つこと無く、サブ受信キュー42に入れられたコマンドCを実行する。即ち、コマンドAとコマンドCとが並列に実行される。
なお、発行キューSQ1からフェッチされたコマンドA,B,Cがメイン受信キュー41内にフェッチされ、これらコマンドA,B,Cがコマンド処理部31によって実行されるケースにおいては、これらコマンドA,B,Cと並列に実行可能なコマンドが他の発行キューSQ2またはSQ3に存在するか否かが判定されてもよい。例えば、まず、発行キューSQ2に積まれているコマンドD,E,Fがプレチェックされ、これらコマンドD,E,FがコマンドA,B,Cの実行中に実行可能なコマンド群であるか否かが判定されてもよい。これらコマンドD,E,FがコマンドA,B,Cの実行中に実行可能なコマンド群ではないならば、発行キューSQ3に積まれているコマンドG,H,Iがプレチェックされ、これらコマンドG,H,IがコマンドA,B,Cの実行中に実行可能なコマンド群であるか否かが判定されてもよい。これらコマンドG,H,IがコマンドA,B,Cの実行中に実行可能なコマンド群であるならば、これらコマンドG,H,Iが発行キューSQ3からサブ受信キュー42にフェッチされ、コマンドA,B,Cと並列に実行されてもよい。
図11は、本実施形態のメモリシステムによって実行されるコマンドプレチェック動作を示す。
(1)SSD3のコントローラ4は、ヘッドポインタによって指される発行キューSQ内のエントリに格納されているコマンドをプレチェックする。このとき、SSD3のコントローラ4は、ヘッドポインタによって指される発行キューSQ内のエントリをヘッドポインタを更新せずに参照する。
(2)プレチェック結果に基づいて、プレチェックされたコマンドが、現在のコマンドの実行中に実行可能なコマンドであると判定されたならば、SSD3のコントローラ4は、ヘッドポインタによって指される発行キューSQ内のエントリからコマンドをフェッチし、フェッチされたコマンドをサブ受信キュー42に格納する。
(3)SSD3のコントローラ4は、ヘッドポインタの値を更新(インクリメント)する。ホスト2は、以前のヘッドポインタの値によって指されていたエントリを空きエントリとして扱うことができる。
図12のフローチャートは、本実施形態のコマンド処理の手順を示す。
ホスト2において、SSD3に所定の動作を実行させるためのコマンドが発行キューSQに積まれる(ステップS201)。コマンドが発行キューSQに積まれると、更新されたテールポインタの値がホスト2によってコントローラ4内のレジスタ(この発行キューSQに対応するドアベルテールレジスタ)に書き込まれ、これによって新たなコマンドが発行キューSQに存在することがホスト2によってSSD3に通知される。
SSD3では、アービトレーション機構21によってコマンドをフェッチすべき発行キューSQが複数の発行キューSQ1、SQ2、SQ3、…から選択される(ステップS202)。そして、コマンド処理部31は、コマンド送受信部22を使用して、選択された発行キューSQから一つ以上のコマンドをフェッチする(ステップS203)。ステップS203では、選択された発行キューSQに対応するヘッドポインタによって指されるこの選択された発行キューSQのエントリからコマンドがフェッチされる。フェッチされたコマンドは、メイン受信キュー41に積まれる(ステップS204)。そして、コマンド処理部31によってメイン受信キュー41内のコマンドが解析され、このコマンドが処理(実行)される(ステップS205)。そして、実行中のコマンドが他のコマンドと並列に実行可能なコマンドであるか否かがコマンド処理部31によって判定される(ステップS206)。
実行中のコマンドが他のコマンドと並列に実行可能なコマンドであると判定されたならば(ステップS206のYES)、実行中の現在のコマンドがフェッチされた発行キューと同じ発行キューまたは他の発行キュー内の後続のコマンドが、コマンドプレチェック部32によってプレチェックされる(ステップS207)。ステップS207では、コマンドプレチェック部32は、プレチェック対象の発行キューに対応するヘッドポインタによって指されるエントリをこのヘッドポインタを更新せずに参照し、これによって後続のコマンドの内容を、この後続のコマンドをプレチェック対象の発行キュー内に残した状態でチェックする。ステップS207では、コマンドプレチェック部32は、このエントリ内の一部の情報のみをヘッドポインタによって指されるエントリからリードしてもよい。
そして、コマンドプレチェック部32は、このプレチェック結果に基づいて、後続のコマンドが現在のコマンドの実行中に実行可能なコマンドであるか否かを判定する(ステップS208)。
後続のコマンドが、現在のコマンドの実行中に実行可能なコマンドであると判定されたならば(ステップS208のYES)、その後続のコマンドはフェッチされる。この後続のコマンドが同じ発行キュー内のコマンドであるならば、この後続のコマンドはステップS203においてフェッチされる。一方、この後続のコマンドが他の発行キュー内のコマンドであるならば、アービトレーション機構21によって当該他の発行キューが選択された後に、当該他の発行キューからフェッチされてもよい(ステップS202、S203)。そして、プレチェック対象の発行キューに対応するヘッドポインタの値が更新され、以前のヘッドポインタの値によって指されたエントリは解放される。フェッチされた後続のコマンドは、サブ受信キュー42に積まれ(ステップS204)、そして現在のコマンドと並列に実行される(ステップS205)。
他方、後続のコマンドが、現在のコマンドの実行中に実行可能なコマンドではないと判定されたならば(ステップS208のNO)、プレチェックされた後続のコマンドはフェッチされない。プレチェック対象の発行キューに対応するヘッドポインタの値も更新されない。
実行中の現在のコマンドが、他のコマンドと並列に実行可能なコマンドではないと判定されたならば(ステップS206のNO)、後続のコマンドのプレチェックは実行されず、実行中のコマンドの処理が継続される。
実行中のコマンドの処理が完了すると(ステップS209)、コマンド完了の応答が完了送信キュー43に積まれ(ステップS210)、そしてこのコマンド完了の応答が完了キューに積まれる(ステップS211)。
次に、SSD3において、現在選択されている発行キューからフェッチおよび実行されたコマンドの数がBurstサイズによって指定された数に達したか否かが判定される(ステップS212)。
現在選択されている発行キューからフェッチおよび実行されたコマンドの数がBurstサイズによって指定された数に達していなければ(ステップS212のNO)、現在選択されている発行キューから後続のコマンドがフェッチされる(ステップS203)。
他方、現在選択されている発行キューからフェッチおよび実行されたコマンドの数がBurstサイズによって指定された数に達したならば(ステップS212のYES)、ホスト2内のすべてのコマンドが処理されたか否かが判定される(ステップS213)。
すべてのコマンドが処理されたならば(ステップS213のYES)、本フローチャートで示される処理は終了する。
他方、すべての発行キューに属するコマンドのなかで未処理のコマンドが存在するならば(ステップS213のNO)、本フローチャートで示される処理はステップS202の処理に移る。
上述したステップS208において、プレチェックの結果に基づいて、後続のコマンドが実行中の現在のコマンドと並列に実行可能なコマンドではないと判定された場合、ホスト2内のすべての発行キュー内の全てのコマンドの中から、実行中のコマンドと並列に実行可能なコマンドを探してもよい。そして、実行中のコマンドと並列に実行可能な後続のコマンドが存在すれば、その後続のコマンドをフェッチし、そのフェッチされた後続のコマンドを実行中のコマンドとを並列に実行してもよい。この場合、もし実行中のコマンドと並列に実行可能な後続のコマンドが発行キュー内の先頭のコマンドではないならば、先頭のコマンドからこの後続のコマンドまでのコマンドがまとめてフェッチされ、そして、後続のコマンドだけが実行中のコマンドと並列に実行されてもよい。例えば、発行キューにコマンドA,B,Cがこの順に積まれていた場合において、このコマンドAが現在実行されており、次のコマンドBがコマンドAと並列に実行可能なコマンドではなく、さらに次のコマンドCがコマンドAと並列に実行可能なコマンドであったならば、コマンドBとコマンドCがまとめてフェッチされ、そして、コマンドCだけがコマンドAと並列に実行されてもよい。
実行中のコマンドと並列に実行可能な後続のコマンドが存在しなければ、実行中のコマンドの処理が完了するまで後続のコマンドはフェッチされない。
以上説明したように、本実施形態においては、現在のコマンドの実行中に、現在のコマンドがフェッチされた発行キューと同一の発行キューまたは他の発行キューの後続のコマンドの内容が、この後続のコマンドを同一の発行キューまたは他の発行キュー内に残した状態でチェックされる。このチェックは、例えば、同一の発行キューまたは他の発行キューに対応するヘッドポインタによって指される同一の発行キューまたは他の発行キュー内のエントリをこのヘッドポインタを更新せずに参照することによって実行できる。後続のコマンドが現在のコマンドの実行中に実行可能なコマンドである場合、同一の発行キューまたは他の発行キューからこの後続のコマンドがサブ受信キュー42にフェッチされ、この後続のコマンドが現在のコマンドと並列に実行される。
このように、本実施形態では、後続のコマンドが、この後続のコマンドを発行キュー内に残した状態でチェックされ、後続のコマンドが実際にフェッチされる前に、この後続のコマンドが現在のコマンドの実行中に実行可能なコマンドであるか否かが判定される。これにより、現在のコマンドの実行中に実行できない後続のコマンドが発行キューからサブ受信キュー42にフェッチされてしまうことを防止できるので、実行のための受信キューの切り換え頻度の増加によるオーバーヘッドを軽減でき、またコマンド実行時間が短くなることも防止することができる。結果、コマンドハンドリング機能の向上することが可能となり、これによってSSD3のコマンド処理の性能を改善することが可能となる。
なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、21…アービトレーション機構21、22…コマンド送受信部、31…コマンド処理部、32…コマンドプレチェック部、41…メイン受信キュー、42…サブ受信キュー、43…完了送信キュー。

Claims (10)

  1. ホストに接続可能なメモリシステムであって、
    不揮発性メモリと、
    前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラと、を具備し、
    前記コントローラは、
    前記ホストのメモリ上の発行キュー内の第1のコマンドを前記メモリシステム内の第1のキューにフェッチし、
    前記第1のコマンドを実行し、
    前記第1のコマンドの実行中に、前記発行キューまたは前記ホストのメモリ上の他の発行キュー内の後続のコマンドの内容を、前記発行キューまたは前記他の発行キュー内に前記後続のコマンドを残した状態でチェックし、
    前記後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記発行キューまたは前記他の発行キューから前記後続のコマンドを前記メモリシステム内の第2のキューにフェッチして、前記後続のコマンドを前記第1のコマンドと並列に実行する、メモリシステム。
  2. 前記コントローラは、前記発行キューまたは前記他の発行キューに対応するヘッドポインタによって指される前記発行キューまたは前記他の発行キュー内のエントリを前記ヘッドポインタを更新せずに参照することによって、前記後続のコマンドの内容を前記後続のコマンドを前記発行キューまたは前記他の発行キュー内に残した状態でチェックする請求項1記載のメモリシステム。
  3. 前記コントローラは、前記後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記発行キューまたは前記他の発行キューから前記後続のコマンドを前記メモリシステム内の前記第2のキューにフェッチし、且つ前記発行キューまたは前記他の発行キューに対応する前記ヘッドポインタを更新する請求項2記載のメモリシステム。
  4. 前記コントローラは、前記後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドではない場合、前記発行キューまたは前記他の発行キューから前記後続のコマンドをフェッチしない請求項1記載のメモリシステム。
  5. 前記第1のキューおよび前記第2のキューは前記メモリシステム内のランダムアクセスメモリ上に存在する請求項1記載のメモリシステム。
  6. ホストに接続可能なメモリシステムであって、
    不揮発性メモリと、
    前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラと、を具備し、
    前記コントローラは、
    前記ホストのメモリ上の第1の発行キュー内の第1のコマンドを前記メモリシステム内の第1のキューにフェッチし、
    前記第1のコマンドを実行し、
    前記第1のコマンドの実行中に、前記ホストのメモリ上の第2の発行キュー内の第1の後続のコマンドの内容を、前記第2の発行キュー内に前記第1の後続のコマンドを残した状態でチェックし、
    前記第1の後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記第2の発行キューから前記第1の後続のコマンドを前記メモリシステム内の第2のキューにフェッチして、前記第1の後続のコマンドを前記第1のコマンドと並列に実行し、
    前記第1の後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドではない場合、前記ホストのメモリ上の第3の発行キュー内の第2の後続のコマンドの内容を、前記第2の発行キュー内に前記第2の後続のコマンドを残した状態でチェックし、
    前記第2の後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記第3の発行キューから前記第2の後続のコマンドを前記第2のキューにフェッチして、前記第2の後続のコマンドを前記第1のコマンドと並列に実行する、メモリシステム。
  7. 前記コントローラは、
    前記第2の発行キューに対応するヘッドポインタによって指される前記第2の発行キュー内のエントリを前記第2の発行キューに対応するヘッドポインタを更新せずに参照することによって、前記第1の後続のコマンドの内容を前記第1の後続のコマンドを前記第2の発行キュー内に残した状態でチェックし、
    前記第1の後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドではない場合、前記第3の発行キューに対応するヘッドポインタによって指される前記第3の発行キュー内のエントリを前記第3の発行キューに対応するヘッドポインタを更新せずに参照することによって、前記第2の後続のコマンドの内容を前記第2の後続のコマンドを前記第3の発行キュー内に残した状態でチェックする請求項6記載のメモリシステム。
  8. 不揮発性メモリと前記不揮発性メモリを制御するコントローラとを含むメモリシステムによって実行される制御方法であって、
    ホストのメモリ上の発行キュー内の第1のコマンドを前記メモリシステム内の第1のキューにフェッチし、
    前記第1のコマンドを実行し、
    前記第1のコマンドの実行中に、前記発行キューまたは前記ホストのメモリ上の他の発行キュー内の後続のコマンドの内容を、前記発行キューまたは前記他の発行キュー内に前記後続のコマンドを残した状態でチェックし、
    前記後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記発行キューまたは前記他の発行キューから前記後続のコマンドを前記メモリシステム内の第2のキューにフェッチして、前記後続のコマンドを前記第1のコマンドと並列に実行する制御方法。
  9. 前記後続のコマンドの内容を前記後続のコマンドを前記発行キューまたは前記他の発行キュー内に残した状態でチェックすることは、前記発行キューまたは前記他の発行キューに対応するヘッドポインタによって指される前記発行キューまたは前記他の発行キュー内のエントリを前記ヘッドポインタを更新せずに参照することを含む請求項8記載の制御方法。
  10. 前記後続のコマンドが前記第1のコマンドの実行中に実行可能なコマンドである場合、前記発行キューまたは前記他の発行キューから前記後続のコマンドを前記メモリシステム内の前記第2のキューにフェッチし、且つ前記発行キューまたは前記他の発行キューに対応する前記ヘッドポインタを更新する請求項9記載の制御方法。
JP2017066789A 2017-03-30 2017-03-30 メモリシステムおよび制御方法 Pending JP2018169810A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017066789A JP2018169810A (ja) 2017-03-30 2017-03-30 メモリシステムおよび制御方法
US15/703,769 US10310810B2 (en) 2017-03-30 2017-09-13 Memory system and method for controlling nonvolatile memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017066789A JP2018169810A (ja) 2017-03-30 2017-03-30 メモリシステムおよび制御方法

Publications (1)

Publication Number Publication Date
JP2018169810A true JP2018169810A (ja) 2018-11-01

Family

ID=63671705

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017066789A Pending JP2018169810A (ja) 2017-03-30 2017-03-30 メモリシステムおよび制御方法

Country Status (2)

Country Link
US (1) US10310810B2 (ja)
JP (1) JP2018169810A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230077609A (ko) * 2021-11-25 2023-06-01 삼성전자주식회사 비휘발성 메모리 기반의 저장 장치, 장치 컨트롤러 및 방법
US12271628B2 (en) 2021-11-25 2025-04-08 Samsung Electronics Co., Ltd. Non-volatile memory-based storage device, device controller and method thereof

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10509569B2 (en) 2017-03-24 2019-12-17 Western Digital Technologies, Inc. System and method for adaptive command fetch aggregation
US10452278B2 (en) 2017-03-24 2019-10-22 Western Digital Technologies, Inc. System and method for adaptive early completion posting using controller memory buffer
US10466903B2 (en) 2017-03-24 2019-11-05 Western Digital Technologies, Inc. System and method for dynamic and adaptive interrupt coalescing
US10296473B2 (en) * 2017-03-24 2019-05-21 Western Digital Technologies, Inc. System and method for fast execution of in-capsule commands
US10466906B2 (en) 2017-12-19 2019-11-05 Western Digital Technologies, Inc. Accessing non-volatile memory express controller memory manager
US11055022B2 (en) * 2019-03-25 2021-07-06 Western Digital Technologies, Inc. Storage system and method for early host command fetching in a low queue depth environment
US11126375B2 (en) * 2019-07-18 2021-09-21 Micron Technology, Inc. Arbiter circuit for commands from multiple physical functions in a memory sub-system
JP2021033845A (ja) 2019-08-28 2021-03-01 キオクシア株式会社 メモリシステムおよび制御方法
US11194742B2 (en) * 2020-04-30 2021-12-07 International Business Machines Corporation Detecting potentially overlapping input/output queues
JP2022076620A (ja) * 2020-11-10 2022-05-20 キオクシア株式会社 メモリシステムおよび制御方法
US11762587B2 (en) * 2021-05-05 2023-09-19 Samsung Electronics Co., Ltd Method and memory device for atomic processing of fused commands
US11941298B2 (en) * 2021-05-11 2024-03-26 Mediatek Inc. Abort handling by host controller for storage device
KR20230034634A (ko) * 2021-09-03 2023-03-10 에스케이하이닉스 주식회사 메모리 시스템 및 그 동작 방법
US11726715B2 (en) 2021-10-11 2023-08-15 Western Digital Technologies, Inc. Efficient data path in compare command execution
US12386555B2 (en) * 2022-02-02 2025-08-12 Samsung Electronics Co., Ltd. Systems, methods, and devices for queue entry monitoring
US12481429B2 (en) 2022-03-23 2025-11-25 Samsung Electronics Co., Ltd. Client and network based erasure code recovery

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9547472B2 (en) 2013-09-18 2017-01-17 HGST Netherlands B.V. ACK-less protocol for noticing completion of read requests
US9778859B2 (en) 2013-09-18 2017-10-03 Western Digital Technologies, Inc. Doorless protocol having multiple queue read requests in flight
US9535870B2 (en) 2013-09-18 2017-01-03 HGST Netherlands B.V. Acknowledgement-less protocol for solid state drive interface
US9454310B2 (en) 2014-02-14 2016-09-27 Micron Technology, Inc. Command queuing
US20160124876A1 (en) 2014-08-22 2016-05-05 HGST Netherlands B.V. Methods and systems for noticing completion of read requests in solid state drives
JP2016212580A (ja) 2015-05-07 2016-12-15 富士通株式会社 半導体記憶装置、半導体記憶装置の制御方法および制御プログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230077609A (ko) * 2021-11-25 2023-06-01 삼성전자주식회사 비휘발성 메모리 기반의 저장 장치, 장치 컨트롤러 및 방법
KR102553878B1 (ko) * 2021-11-25 2023-07-10 삼성전자주식회사 비휘발성 메모리 기반의 저장 장치, 장치 컨트롤러 및 방법
US12271628B2 (en) 2021-11-25 2025-04-08 Samsung Electronics Co., Ltd. Non-volatile memory-based storage device, device controller and method thereof

Also Published As

Publication number Publication date
US20180285073A1 (en) 2018-10-04
US10310810B2 (en) 2019-06-04

Similar Documents

Publication Publication Date Title
JP2018169810A (ja) メモリシステムおよび制御方法
US20220147283A1 (en) Memory system and method of controlling nonvolatile memory
JP7051546B2 (ja) メモリシステムおよび制御方法
KR102094236B1 (ko) 스토리지 디바이스 및 컴퓨터 시스템
JP6553566B2 (ja) メモリシステムおよび制御方法
US12124735B2 (en) System and method of writing to nonvolatile memory using write buffers
JP6414852B2 (ja) メモリシステムおよび制御方法
CN106874211B (zh) 存储器系统及非易失性存储器的控制方法
US11747989B2 (en) Memory system and method for controlling nonvolatile memory
US11494082B2 (en) Memory system
US12086444B2 (en) Memory system and method for controlling nonvolatile memory
US20240295991A1 (en) Memory system and method of controlling nonvolatile memory with checking a total size indicative of a sum of data length specified by a write command
JP2020123038A (ja) メモリシステムおよび制御方法
JP2020123040A (ja) メモリシステムおよび制御方法
JP2022143278A (ja) メモリシステム
JP2019148913A (ja) メモリシステム
JP2019212103A (ja) メモリシステム
JP6552701B2 (ja) メモリシステムおよび制御方法
EP4287028B1 (en) Storage device providing high purge performance and memory block management method thereof
JP7337228B2 (ja) メモリシステムおよび制御方法
JP6721765B2 (ja) メモリシステムおよび制御方法
KR20230166803A (ko) 높은 퍼지 성능을 제공하는 스토리지 장치 및 그것의 메모리 블록 관리 방법

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170531

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20170531

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180830