JP2018088137A - 半導体記憶装置 - Google Patents
半導体記憶装置 Download PDFInfo
- Publication number
- JP2018088137A JP2018088137A JP2016231246A JP2016231246A JP2018088137A JP 2018088137 A JP2018088137 A JP 2018088137A JP 2016231246 A JP2016231246 A JP 2016231246A JP 2016231246 A JP2016231246 A JP 2016231246A JP 2018088137 A JP2018088137 A JP 2018088137A
- Authority
- JP
- Japan
- Prior art keywords
- stream
- data
- thread
- semiconductor memory
- host
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
Abstract
【課題】半導体記憶装置の信頼性、装置寿命、及び、性能を向上させる。
【解決手段】実施形態の半導体記憶装置は、一括して無効化されることが期待されるデータの集合であるストリームデータを識別子に関連付け、複数のストリームデータのそれぞれを識別子により識別可能に送信するホストと通信可能である。また、第1の単位ごとにデータの書き込みが行われ、複数の第1の単位からなる第2の単位ごとにデータの消去が行われる不揮発性半導体メモリと、バッファと、コントローラと、を具備する。コントローラは、複数のストリームデータのうち優先度の高いストリームデータについては、第2の単位の1つに、単一の識別子に関連付けられるストリームデータを書き込み、複数のストリームデータのうち優先度の低いストリームデータについては、第2の単位の1つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む。
【選択図】図13
【解決手段】実施形態の半導体記憶装置は、一括して無効化されることが期待されるデータの集合であるストリームデータを識別子に関連付け、複数のストリームデータのそれぞれを識別子により識別可能に送信するホストと通信可能である。また、第1の単位ごとにデータの書き込みが行われ、複数の第1の単位からなる第2の単位ごとにデータの消去が行われる不揮発性半導体メモリと、バッファと、コントローラと、を具備する。コントローラは、複数のストリームデータのうち優先度の高いストリームデータについては、第2の単位の1つに、単一の識別子に関連付けられるストリームデータを書き込み、複数のストリームデータのうち優先度の低いストリームデータについては、第2の単位の1つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む。
【選択図】図13
Description
本発明の実施形態は、半導体記憶装置に関する。
不揮発性半導体メモリを有する半導体記憶装置においては、信頼性維持のためにライト回数やイレース回数を低減することと、リードライト性能を高くすることの両立が求められる。また、メモリコントローラの回路規模の増大を防ぐことが、コストや消費電力の観点からも重要である。
INCITS Technical Committee T10、"SCSI Block Command -4 (Rev.11)"、[online]、2016年6月30日、インターネット、<URL: http://www.t10.org/drafts.htm#SBC_Family>
本発明が解決しようとする課題は、半導体記憶装置の信頼性、装置寿命、及び、性能を向上させることにある。
上記課題を達成するために、実施形態の半導体記憶装置は、一括して無効化されることが期待されるデータの集合であるストリームデータを識別子に関連付け、複数のストリームデータのそれぞれを識別子により識別可能に送信するホストと通信可能である。また、第1の単位ごとにデータの書き込みが行われ、複数の第1の単位からなる第2の単位ごとにデータの消去が行われる不揮発性半導体メモリと、ホストと不揮発性半導体メモリとの間でデータを一時的に格納するバッファと、不揮発性半導体メモリへのデータの書き込みを制御するコントローラと、を具備する。コントローラは、複数のストリームデータのうち優先度の高いストリームデータについては、第2の単位の1つに、単一の識別子に関連付けられるストリームデータを書き込み、複数のストリームデータのうち優先度の低いストリームデータについては、第2の単位の1つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む。
以下、実施形態の半導体記憶装置を、図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。
[第1の実施形態]
図1は、第1の実施形態の半導体記憶装置1の構成を説明するブロック図である。
図1は、第1の実施形態の半導体記憶装置1の構成を説明するブロック図である。
半導体記憶装置1は、メモリコントローラ10と、不揮発性半導体メモリ20と、を含む。以下の説明においては、不揮発性半導体メモリ20からのデータのリードに必要な機能ブロックの説明は省略してある。
メモリコントローラ10は、ホスト2と通信し半導体記憶装置1全体の動作を制御する。メモリコントローラ10は、例えばSoC(System on a Chip)として構成される半導体集積回路である。
本実施形態の説明では、ホスト2はSAS(Serial Attached SCSI)規格のインターフェースをサポートするコンピュータであるが、その他の規格、例えばSATA(Serial ATA)規格やNVMe(NVM Express)(登録商標)規格のインターフェースをサポートするコンピュータであってもよい。半導体記憶装置1は、複数のホスト2と通信可能なように構成されてもよい。
不揮発性半導体メモリ20は、データを不揮発的に記憶する。本実施形態の不揮発性半導体メモリ20はNAND型フラッシュメモリであるが、3次元構造フラッシュメモリ、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory)など他の種類の不揮発性半導体メモリでもよい。
以下の説明においては、不揮発性半導体メモリ20をNAND型フラッシュメモリ20と表記することがある。また、本実施形態の半導体記憶装置1は16チャネル(Ch)のNAND型フラッシュメモリ20を有する。メモリコントローラ10は、各チャネルに接続されたNAND型フラッシュメモリ20を並列に制御可能である。1つのチャネルに複数のNAND型フラッシュメモリ20が接続されてもよい。以下では各チャネルに接続されているNAND型フラッシュメモリ20をNAND型フラッシュメモリ群Ch0〜Ch15と表記する。なお、チャネルの数は16より多くても少なくてもよい。
メモリコントローラ10は、ホストインターフェース(IF)制御部100と、バッファ管理部200と、NAND管理部300と、論物変換テーブル400と、CPU(Central Processing Unit)500と、を含む。
ホストIF制御部100は、ホスト2から受信したコマンドの解釈や実行などを行う。ホストIF制御部100は、受信FIFO110と、コマンドキュー120と、を含む。
受信FIFO110は、ホスト2より受信するライトデータやコマンドを一時的に格納する。コマンドキュー120は、ホスト2より受信するコマンドをキューイングする。
バッファ管理部200は、バッファ210の管理などを行う。バッファ管理部200は、バッファ210と、ストリーム制御部220と、ストリーム/スレッド変換部230と、を含む。バッファ210は、ホスト2より受信したライトデータを一時的に格納する。本実施形態のバッファ210はSRAM(Static Random Access Memory)からなるメモリであるが、DRAM(Dynamic Random Access Memory)など他の種類のメモリを採用してもよい。ストリーム制御部220は、後述するストリームデータのライト制御を行う。ストリーム/スレッド変換部230は、後述するストリームとスレッドとの変換を行う。
NAND管理部300は、NAND型フラッシュメモリ20へのデータのライトを管理する。NAND管理部300は、NANDコントローラ310と、バッファ読み出し制御部320と、ブロック管理部330と、を含む。NANDコントローラ310は、NAND型フラッシュメモリ群Ch0〜Ch15のそれぞれに接続される。NANDコントローラ310は、NAND型フラッシュメモリ20へのデータのライト・リード・イレース等の動作を制御する。以下、NANDコントローラ310をNANDコントローラCh0〜Ch15と表記することがある。バッファ読み出し制御部320は、バッファ210から読み出したデータを各NANDコントローラ310に転送する。ブロック管理部330は、後述するスレッドごとに、データの書き込み先となる論理ブロックを供給する。
論物変換テーブル400は、ホスト2からのコマンドで指定される論理アドレスとNAND型フラッシュメモリ20の物理アドレスとの変換を行う。CPU500は、FW(Firmware)に基づき半導体記憶装置1全体の制御を行う。
なお、バッファ210及びCPU500はメモリコントローラ10に内蔵せず、別個の半導体集積回路としてもよい。また、以下の説明においてFWにより実行される機能の一部、又は、全部は専用のHW(Hardware)によっても実行可能であり、HWにより実行される機能の一部、又は、全部をFWによって実行することも可能である。
半導体記憶装置1の特性を評価する指標としてWAF(Write Amplification Factor)がある。WAFは、以下の式により求められる。
WAF=(NAND型フラッシュメモリ20へライトされるデータの総量)/(ホスト2から受信したライトデータの総量) ・・・ (1)
WAFは、NAND型フラッシュメモリ20へライトされるユーザデータ量、管理データ量、冗長データ量、ガベージコレクション(コンパクション)の頻度、などの要素により変動する。NAND型フラッシュメモリ20は、データのライトやイレースを行うと記憶素子が劣化する。従って、ライト回数、イレース回数はなるべく少ないほうが望ましく、WAFも、低いほうが望ましい。
WAFは、NAND型フラッシュメモリ20へライトされるユーザデータ量、管理データ量、冗長データ量、ガベージコレクション(コンパクション)の頻度、などの要素により変動する。NAND型フラッシュメモリ20は、データのライトやイレースを行うと記憶素子が劣化する。従って、ライト回数、イレース回数はなるべく少ないほうが望ましく、WAFも、低いほうが望ましい。
次に、図2a及び図2bを参照して、本実施形態のNAND型フラッシュメモリ20の物理ページ600及び物理ブロック610の構成を説明する。
図2aに示すように、NAND型フラッシュメモリ20に対するデータのリード・ライトにおける最小管理単位はクラスタ620と呼ばれる。本実施形態ではクラスタ620の大きさは4kBである。また、NAND型フラッシュメモリ20の内部で一度にデータのリード・ライトが可能な最小の回路構成の単位(第1の単位)は物理ページ600と呼ばれる。本実施形態では物理ページ600の大きさは16クラスタ(4kB×16クラスタ=64kB)である。
また、図2bに示すように、NAND型フラッシュメモリ20のデータのイレースが可能な最小の回路構成の単位(第2の単位)は物理ブロック610と呼ばれる。本実施形態では物理ブロック610の大きさは256クラスタ、すなわち16物理ページ(64kB×16物理ページ=1024kB)である。なお、これら各単位のサイズは一例であり、これらの値に限定されるものではない。
次に、図3a及び図3bを参照して、論理ページ700及び論理ブロック710の構成を説明する。
本実施形態では、図3aに示すように、並列動作が可能なNAND型フラッシュメモリCh0〜Ch15それぞれの1つの物理ページ600を含む集合を論理ページ700とする。コントローラ10は、論理ページ700を論理的な単位として、NAND型フラッシュメモリ20へのデータのライトを制御する。コントローラ10は、クラスタ620を論理的な単位として、NAND型フラッシュメモリ20からのデータのリードを制御する。また、図3bに示すように、コントローラ10は16個の論理ページ700のデータである論理ブロック710を論理的な単位として、NAND型フラッシュメモリ20のデータのイレースを制御する。すなわち、コントローラ10はNAND型フラッシュメモリ20のデータのイレースの最小単位である物理ブロック610ごとではなく、論理ブロック710ごとにイレース処理を行う。
次に、図4を参照して、スレッド800について説明する。
本実施形態のメモリコントローラ10は、ライトデータがNAND型フラッシュメモリ20にライトされるまでに通過する経路を、スレッド800と呼ばれる領域で管理する。スレッド800は、少なくともバッファ210の一部の領域を含む。スレッド800には、エラー訂正符号の生成回路などが接続されていてもよい。本実施形態では、スレッドの最大数m(mは自然数)は8である。スレッドの最大数は8より多くても少なくてもよい。スレッドの最大数が増えるとメモリコントローラ10の回路規模も増大する。従って、スレッドの最大数を過度に増やすことは好ましくない。
ホストIF制御部100より受信したライトデータは、各スレッド800のバッファ210に格納される。各スレッド800のバッファ210に格納されたライトデータは、バッファ読み出し制御部320が読み出し、NANDコントローラ310に転送する。バッファ読み出し制御部320は、複数のスレッド800のバッファ210に格納されたライトデータが、1つの論理ブロック710にライトされないように各ライトデータをNANDコントローラ310に転送する。すなわち、バッファ管理部210は、1つの論理ブロック710にライトされるライトデータを、1つのスレッド800のバッファ210に格納する。
また、CPU500は、FWの制御に基づいて、スレッド800ごとにガベージコレクションを行う。すなわち、CPU500は、あるスレッド800に属する論理ブロック710をガベージコレクション元ブロックとする場合、当該スレッド800に属する論理ブロック710からガベージコレクション先ブロックを選択する。ガベージコレクション元ブロックであった論理ブロック710は、データがイレースされた後、当該スレッド800のデータのライトに用いられる。
以上、本実施形態の半導体記憶装置1の構成について説明した。以下では、ストリームデータのライトの概要について説明する。
近年では不揮発性半導体メモリのイレース回数を低減するために、同一のライフサイクルを有することが期待されるデータの集合、すなわちホストが無効化する時には一括して無効化することが期待されるデータの集合(以下、ストリームデータと呼ぶ)を、不揮発性半導体メモリの同一イレース単位内にまとめてライトする技術が導入されている。
ここで、ホストがあるデータを無効化する時には、ホストは、(a)当該データと同一の論理アドレスを指定するライトコマンドの発行及びライトデータの送信、(b)当該データに対する無効化を指示するコマンド(例えばSCSI規格で規定されているUNMAPコマンド、ATA規格で規定されているTRIMコマンド)の発行、(c)記憶装置の全領域の初期化を指示するコマンド(例えばSCSI規格で規定されているFORMAT UNITコマンド)の発行、などを行いうる。
図5及び図6は、SAS規格を含むSCSI規格においてストリームデータのライトに使用されるコマンドの例を説明する図である。
図5に示すSTREAM CONTROLコマンドは、各ストリームデータを識別するための識別子(ストリームID)の割り当てを、ホスト2が半導体記憶装置1に要求するコマンドである。また、STREAM CONTROLコマンドは、不要になったストリームIDの解放を、ホスト2が半導体記憶装置1に要求するためにも使用される。
STR_CTLフィールドは、STREAM CONTROLコマンドが、ストリームIDの割り当て(OPEN)又はストリームIDの解放(CLOSE)のどちらを要求しているのかを示す。STR_CTLフィールドが01bの時は、割り当て要求(OPEN)である。この時は、STR_IDフィールドは任意の値でよい。一方、STR_CTLフィールドが10bの時は、解放要求(CLOSE)である。解放すべきストリームIDは、STR_IDフィールドで指定される。以下ではSTR_CTLフィールドが01bであるSTREAM CONTROLコマンドをSTREAM CONTROL(OPEN)コマンドと表記し、STR_CTLフィールドが10bであるSTREAM CONTROLコマンドをSTREAM CONTROL(CLOSE)コマンドと表記する。
図6に示すWRITE STREAMコマンドは、ストリームデータのライトに使用されるコマンドである。ホスト2はSTR_IDフィールドに、STREAM CONTROL(OPEN)コマンドに応じて半導体記憶装置1が割り当てたストリームIDを指定して、半導体記憶装置1にコマンドを発行する。
次に、図7を参照して、SAS規格においてストリームデータを転送する場合のプロトコルの一例を説明する。なお、説明を簡略化するため、XFER_RDYフレームやRESPONSEフレーム、DATAフレーム等、SAS規格においてコマンド実行に必要なフレームについての説明は省略してある。
まず、ホスト2がSTREAM CONTROL(OPEN)コマンドを発行し、ストリームIDの割り当てを要求する。半導体記憶装置1はバッファ210の空きスペースを確保する等の処理を行った後、ストリームID=1を割り当てたことをホスト2に通知する。同様に、半導体記憶装置1がストリームID=2、3を割り当てたことが、ホスト2に通知されている。
ホスト2は、割り当てられたストリームID=1、2、3を使ってWRITE STREAMコマンドを発行し、ストリームデータの転送を行う。ホスト2は各ストリームデータのライフサイクルを把握している。ホスト2は異なるライフサイクルのストリームデータを、同一のストリームIDを用いて転送することはしない。例えば、ストリームID=1のWRITE STREAMコマンドによって転送されたストリームデータは、ホスト2が無効化する時にはそのすべてを一括して無効化することが期待される。
ストリームデータの転送が完了すると、ホスト2はSTREAM CONTROL(CLOSE)コマンドを発行し、不要になったストリームID=1、2、3の解放を要求する。
なお、上記以外のプロトコルによってストリームデータを転送してもよい。例えば、不要になったストリームIDが解放されないプロトコルであってもよい。
SAS規格においてはコマンドをキューイングして実行することが可能である。キューイングの一例を図8に示す。図8では、ストリームID=1、2、3のストリームデータの転送が行われ、それぞれの転送量は3DATAフレーム分である。この時、ストリームID=1のストリームデータの転送がすべて(3DATAフレーム分)完了する前、例えばストリームID=1の最初の1DATAフレームのみの転送が完了した後、ストリームID=2やストリームID=3のストリームデータを転送することが可能である。
以上、ストリームデータのライトの概要について説明した。以下では、本実施形態の半導体記憶装置1が、ストリームデータをどのようにNAND型フラッシュメモリ20にライトするのかについて説明する。
図9aは、1つの論理ブロック710に、同一のストリームIDを有するストリームデータがライトされた状態を説明する図である。ある論理ブロック710(論理ブロック#1とする)に、ストリームID=1のストリームデータがライトされている。
図9bは、図9aの状態で、ホスト2がストリームID=1のストリームデータを無効化した時の状態を説明する図である。上述したように、同一のストリームIDを有するストリームデータは、ホスト2によって一括して無効化されることが期待される。ストリームID=1のストリームデータの無効化により、論理ブロック#1にライトされているデータはすべて無効化された。この状態で論理ブロック#1を消去済み論理ブロックとするには、論理ブロック#1がイレースされればよい。
図10aは、1つの論理ブロック710に、2つのストリームIDを有するストリームデータがライトされた状態を説明する図である。ある論理ブロック710(論理ブロック#2とする)に、ストリームID=1のストリームデータと、ストリームID=2のストリームデータがライトされている。
図10bは、図10aの状態で、ホスト2がストリームID=1のストリームデータを無効化した時の状態を説明する図である。ストリームID=1のストリームデータの無効化により、論理ブロック#2にライトされているデータのうち、ストリームID=1のストリームデータは無効化された。しかしながら、ストリームID=2のストリームデータは無効化されていない。この状態で論理ブロック#2を消去済み論理ブロックとするには、論理ブロック#2にライトされているデータのうち、まだ有効であるストリームID=2のストリームデータを別な論理ブロック710(例えば、図示しない論理ブロック#3)にライトした後(すなわちガベージコレクションをした後)に、論理ブロック#2がイレースされなければならない。
図10aのようにストリームデータをNAND型フラッシュメモリ20にライトすると、図9aの場合と比べ、消去済み論理ブロックを得るために必要な、NAND型フラッシュメモリ20へライトされるデータの総量が増加してしまう。すなわち、WAF(Write Amplification Factor)が増加してしまう。
図11aは、1つの論理ブロック710に、3つのストリームIDを有するストリームデータがライトされた状態を説明する図である。ある論理ブロック710(論理ブロック#4とする)に、ストリームID=1のストリームデータと、ストリームID=2のストリームデータと、ストリームID=3のストリームデータがライトされている。
図11bは、図11aの状態で、ホスト2がストリームID=1のストリームデータを無効化した時の状態を説明する図である。ストリームID=1のストリームデータの無効化により、論理ブロック#4にライトされているデータのうち、ストリームID=1のストリームデータは無効化された。しかしながら、ストリームID=2のストリームデータとストリームID=3のストリームデータは無効化されていない。この状態で論理ブロック#4を消去済み論理ブロックとするには、論理ブロック#4にライトされているデータのうち、まだ有効であるストリームID=2のストリームデータとストリームID=3のストリームデータを別な論理ブロック710(例えば、論理ブロック#5)にライトした後(すなわちガベージコレクションをした後)に、論理ブロック#4がイレースされなければならない。
図11cは、上記したように、ストリームID=2のストリームデータとストリームID=3のストリームデータが、論理ブロック#5にライトされた後の状態を説明する図である。
図11dは、図11cの状態で、ホスト2がストリームID=2のストリームデータを無効化した時の状態を説明する図である。ストリームID=2のストリームデータの無効化により、論理ブロック#5にライトされているデータのうち、ストリームID=2のストリームデータは無効化された。しかしながら、ストリームID=3のストリームデータは無効化されていない。この状態で論理ブロック#5を消去済み論理ブロックとするには、論理ブロック#5にライトされているデータのうち、まだ有効であるストリームID=3のストリームデータを別な論理ブロック710(例えば、図示しない論理ブロック#6)にライトした後(すなわちガベージコレクションをした後)に、論理ブロック#5がイレースされなければならない。
図11aのようにストリームデータをNAND型フラッシュメモリ20にライトし、図11bの状態から消去済み論理ブロックを得て、さらに図11dの状態から消去済み論理ブロックを得ようとすると、図10aの場合と比べ、消去済み論理ブロックを得るために必要な、NAND型フラッシュメモリ20へライトされるデータの総量が増加してしまう。すなわち、WAFが増加してしまう。
以上説明したように、1つの論理ブロック710に複数のストリームIDを有するストリームデータがライトされると、WAFが増加する。1つの論理ブロック710にライトされるストリームデータのストリームIDの数の増加とともにWAFも増加する。
このことを、図12a及び図12bを参照して説明する。1つの論理ブロック710に1つのストリームIDを有するストリームデータのみがライトされた場合、当該物論理ブロック710はガベージコレクションをせずにフリー論理ブロックにすることができるので、WAFは1である。1つの論理ブロック710に複数のストリームIDを有するストリームデータがライトされた場合、上述のように当該論理ブロック710をフリー論理ブロックにするにはガベージコレクションをしなければならない。従って、WAFは増加する。
図12aに示すように、WAFは1つの論理ブロック710にライトされるストリームデータのストリームIDの数の増加とともに増加し、Random WAFに近づいてゆく。ここでRandom WAFとは、完全にランダムなデータ、すなわち無効化される時刻がすべて異なるデータ、が1つの論理ブロック710にライトされたと仮定した時のWAFである。
なお、1つの論理ブロック710に複数のストリームIDを有するストリームデータがライトされる場合のWAFの絶対値は、表記容量(User Capacity)に対する余裕容量(Overprovisioning Capacity)の割合(OP率)によって変化する。表記容量とは、ホスト2が指定可能なアドレス範囲に対応するメモリ容量である。余裕容量とは、表記容量と、NAND型フラッシュメモリ20の実際のメモリ容量である実装容量(Physical Capacity)との差である。
図12bでは、縦軸にWAF、横軸にOP率を示している。図12bに示すように、同じOP率であっても、1つの論理ブロック710にライトされるストリームIDの数が増加すると、WAFは増加する。また、1つの論理ブロック710にライトされるストリームIDの数が同じである場合、OP率が増加すると、WAFは低減する。例えば、OP率が0.1である場合、1つの論理ブロック710に2つのストリームIDを有するストリームデータがライトされるとWAFは約3.2であり、1つの論理ブロック710に4つのストリームIDを有するストリームデータがライトされるとWAFは約4.3である。なお、上述したように、1つの論理ブロック710に1つのストリームIDを有するストリームデータのみがライトされる場合は、OP率によらずWAFは1である。
本実施形態では、スレッド800ごとのWAF(以下、ローカルWAFと称する)を以下の式によって定義する。
ローカルWAF=(ホスト2から受信したあるスレッド800へのライトデータの総量+ガベージコレクションによる当該スレッド800へのライト総量)/(ホスト2から受信した当該スレッド800へのライトデータの総量) ・・・ (2)
また、半導体記憶装置1の全体のWAF(以下、装置WAFと称する)は、ローカルWAFを用いて、以下ように表される。
また、半導体記憶装置1の全体のWAF(以下、装置WAFと称する)は、ローカルWAFを用いて、以下ように表される。
装置WAF = Σβi×ローカルWAFi ・・・ (3)
ここで、iはスレッド800の番号(本実施形態においてはi=1〜8である)、ローカルWAFiはスレッド#iのローカルWAF、βiはスレッド800ごとの係数であり、以下のように表される。
ここで、iはスレッド800の番号(本実施形態においてはi=1〜8である)、ローカルWAFiはスレッド#iのローカルWAF、βiはスレッド800ごとの係数であり、以下のように表される。
βi =(ホスト2から受信し、スレッド#iを経由してNAND型フラッシュメモリ20へライトされるライトデータのスループット)/(ホスト2から受信し、NAND型フラッシュメモリ20へライトされる全ライトデータのスループット) ・・・ (4)
スループットと、単位時間当たりにNAND型フラッシュメモリ20へライトされるライトデータの総量とは比例するからである。また、ここでのスループットは、ホスト2と半導体記憶装置1の間のデータ転送のスループットのことである。以下ではこのスループットを、ホストスループットと称する。
スループットと、単位時間当たりにNAND型フラッシュメモリ20へライトされるライトデータの総量とは比例するからである。また、ここでのスループットは、ホスト2と半導体記憶装置1の間のデータ転送のスループットのことである。以下ではこのスループットを、ホストスループットと称する。
次に、図13を参照して、本実施形態のストリーム/スレッド変換部230によるスレッド800の割り当ての例を説明する。ここでは説明を簡略化するため、半導体記憶装置1は最大4つのスレッド800を有するものとする。1つの論理ブロック710に2つのストリームIDを有するストリームデータがライトされた時のWAFは、図12bで説明したように、3.2であるとする。1つの論理ブロック710に1つのストリームIDを有するストリームデータのみがライトされた時のWAFは、前述したように、1であるとする。
ホスト2からは、ストリームID=1〜5の5つのストリームデータが送信される。各ストリームデータのホストスループットは、ストリームID=1が1200MB/s、ストリームID=2が1100MB/s、ストリームID=3が1000MB/s、ストリームID=4が500MB/s、ストリームID=5が400MB/sである。ホストスループットの算出方法については後述する。
ストリーム/スレッド変換部230は、ストリームID=1〜5の5つのストリームデータを、スレッド#1〜スレッド#4の4つのスレッド800のバッファ210に格納する。以下ではこのことを、例えば、ストリームID=1をスレッド#1に割り当てると表現する。前述のとおり、スレッドの最大数を過度に増やすことは好ましくない。本実施形態においては、ストリームID数がスレッドの最大数より多い時、以下に説明するようなスレッドの割り当てを行う。
ストリーム/スレッド変換部230は、ホストスループットの高いストリームIDについては、優先的にスレッドを割り当てる。すなわち、ストリームID=1、2、3については、それぞれをスレッド#1、スレッド#2、スレッド#3に割り当てる。また、ホストスループットの低いストリームID=4、5についてはスレッド#4に混在させて割り当てる。
前述のように、1つの論理ブロック710に1つのストリームIDを有するストリームデータがライトされた時のWAFは1である。従って、スレッド#1、スレッド#2、スレッド#3のローカルWAFは1である。
また、βiは式(4)により、
β1=1200/(1200+1100+1000+500+400)=0.286
β2=1100/(1200+1100+1000+500+400)=0.262
β3=1000/(1200+1100+1000+500+400)=0.238
である。
β1=1200/(1200+1100+1000+500+400)=0.286
β2=1100/(1200+1100+1000+500+400)=0.262
β3=1000/(1200+1100+1000+500+400)=0.238
である。
一方で、1つの論理ブロック710に2つのストリームIDを有するストリームデータがライトされた時のWAFは3.2である。従って、スレッド#4のローカルWAFは3.2である。β4は、スレッド#4のバッファ210に格納されるストリームデータのホストスループットが500MB/s(ストリームID=4)+400MB/s(ストリームID=5)=900MB/sであるので、式(4)により、
β4= 900/(1200+1100+1000+500+400)=0.214
である。
β4= 900/(1200+1100+1000+500+400)=0.214
である。
従って、図13のようにストリームIDがスレッドに割り当てられた場合の装置WAFは、式(3)により、
装置WAF=0.286×1+0.262×1+0.238×1+0.214×3.2=1.47
である。
装置WAF=0.286×1+0.262×1+0.238×1+0.214×3.2=1.47
である。
次に、図14を参照して、比較例のストリーム/スレッド変換部230によるスレッド800の割り当ての例を説明する。
ホスト2から送信されるストリームデータのホストスループットは、図13の場合と同じである。比較例のストリーム/スレッド変換部230は、ホストスループットの高いストリームID=1、2をスレッド#1に混在させて割り当てる。また、比較例のストリーム/スレッド変換部230は、ホストスループットの低いストリームID=3、4、5をスレッド#2、スレッド#3、スレッド#4にそれぞれ割り当てる。このように各ストリームIDが各スレッド800に割り当てられた結果、βiは
β1=2200/(1200+1100+1000+500+400)=0.523
β2=1000/(1200+1100+1000+500+400)=0.238
β3= 500/(1200+1100+1000+500+400)=0.119
β4= 400/(1200+1100+1000+500+400)=0.095
となる。従って、比較例においては、
装置WAF=0.523×3.2+0.238×1+0.119×1+0.095×1=2.13
となり、本実施形態の場合に比べ、装置WAFが高くなってしまうことがわかる。従って、本実施形態のように、適切にスレッドを割り当てることが重要である。
β1=2200/(1200+1100+1000+500+400)=0.523
β2=1000/(1200+1100+1000+500+400)=0.238
β3= 500/(1200+1100+1000+500+400)=0.119
β4= 400/(1200+1100+1000+500+400)=0.095
となる。従って、比較例においては、
装置WAF=0.523×3.2+0.238×1+0.119×1+0.095×1=2.13
となり、本実施形態の場合に比べ、装置WAFが高くなってしまうことがわかる。従って、本実施形態のように、適切にスレッドを割り当てることが重要である。
次に、図15を参照して、本実施形態のストリーム制御部220の詳細な構成を説明する。
ストリーム制御部220は、ホスト2に割り当てるストリームIDを管理するためのストリームID管理テーブル222を含む。ストリームID管理テーブル222は、ストリームID、Openフラグ、Activeフラグを有する。本実施形態ではストリームID=1〜16がホスト2に割り当て可能である。
ホスト2からSTREAM CONTROL(OPEN)コマンドを受信すると、CPU500は、FWの制御に基づいてストリームID管理テーブル222から割り当て可能なストリームIDを検索する。CPU500は、割り当てたストリームID(以下、オープンストリームIDと称する)をホスト2へ通知するようにホストIF制御部100を制御する。この時、CPU500は、当該ストリームIDについてストリームID管理テーブル222のOpenフラグをセットする。
また、ホスト2からストリームデータの転送が開始されると、ホストIF制御部100はDATAフレームのヘッダーを読み取り、各ストリームデータのストリームID(すなわちホスト2からのストリームデータの転送が実際に始まっているストリームID。以下、アクティブストリームIDと称する)を、ストリーム制御部220に通知する。
アクティブストリームIDの通知を受けたストリーム制御部220は、当該ストリームIDについて、ストリームID管理テーブル222のActiveフラグをセットする。
ストリームデータの転送完了後、ホスト2がSTREAM CONTROL(CLOSE)コマンドを発行し、不要になったストリームIDの解放を要求すると、CPU500は当該ストリームIDについて、ストリームID管理テーブル222のOpenフラグ及びActiveフラグをクリアーする。
図15では、ストリームID=1、2、3、4がホスト2に割り当て済みであり、ストリームID=1、2についてストリームデータの転送が開始されている。
次に、図16及び図17を参照して、本実施形態のストリーム/スレッド変換部230の詳細な構成を説明する。図16はストリーム/スレッド変換部230のブロック図である。図17はストリーム/スレッド変換部230に実装されるストリーム/スレッド変換テーブル232の構成を説明する図である。ストリーム/スレッド変換テーブル232は、ホスト2に割り当て可能なストリームIDと同じ数(本実施形態においては16)のエントリーを有する。ストリーム/スレッド変換テーブル232の1つのエントリーは、ストリームID、ホストスループット、優先度、スレッド番号を含む。
図16に示すように、ストリーム/スレッド変換部230には、ホストIF制御部100より、ストリームIDごとのホストスループットが入力される。ホストスループットの算出方法については後述するが、ホスト2へストリームIDが割り当てられた段階で算出可能な場合と、ホスト2からのストリームデータの転送が実際に始まってから算出可能な場合とがある。
ストリーム/スレッド変換部230は、ホストIF制御部100から入力されたホストスループットをストリーム/スレッド変換テーブル232に登録する。スレッド決定部234は、ストリーム/スレッド変換テーブル232に登録されたホストスループットから、各ストリームIDの優先度を決定する。また、スレッド決定部234は、各ストリームIDをどのスレッドに割り当てるのかを決定する。スレッド決定部234は、優先度及びスレッド番号をストリーム/スレッド変換テーブル232に登録する。
スレッド決定部234は、ホストスループットの高いストリームIDの優先度を高く決定する。ホストスループットが等しいストリームIDが複数ある場合には、番号の小さいほうのストリームIDの優先度を高く決定する。
スレッド決定部234は、優先度が第1位から第(m−n)位(mはスレッドの最大数、nは1以上m未満の自然数)までのストリームIDを、スレッド#1〜スレッド#(m−n)に割り当てる。以下では優先度が第1位から第(m−n)位までのストリームIDが割り当てられるスレッドを、専用スレッドと称する。
スレッド決定部234は、優先度が第(m−n+1)位以下のストリームIDを、スレッド#(m−n+1)〜スレッド#mに割り当てる。以下では優先度が第(m−n+1)位以下のストリームIDが割り当てられるスレッドを、混在スレッドと称する。混在スレッドが複数ある場合、すなわちn≧2の場合、各混在スレッドに割り当てられるストリームIDの数は同一でなくてもよい。
m=8、n=1とした場合、スレッド#1〜スレッド#7が専用スレッド、スレッド#8が混在スレッドとなる。
なお、専用スレッドとして使用されるスレッドの番号は#1〜#(m−n)以外でもよい。混在スレッドとして使用されるスレッドの番号は#(m−n+1)〜#m以外でもよい。
ストリーム/スレッド変換部230は、ホストIF制御部100より、ストリームデータを受信し、当該ストリームデータのストリームIDの通知を受ける。データ選択部236は、通知を受けたストリームIDをインデックスとしてストリーム/スレッド変換テーブル232を検索し、当該ストリームデータをどのスレッド800に転送するかを選択する。
図17は、ストリーム/スレッド変換テーブル232に登録される情報の一例を説明するための図である。ここでは、n=1であるとする。
各ストリームデータのホストスループットは、ストリームID=1が1200MB/s、ストリームID=2が1100MB/s、ストリームID=3が1050MB/s、ストリームID=4が1000MB/s、ストリームID=5が950MB/s、ストリームID=6が900MB/s、ストリームID=7が850MB/s、ストリームID=8〜16がそれぞれ100MB/sである。
各ストリームIDの優先度は、ホストスループットの高い順に決定される。優先度が第1位〜第7位であるストリームID=1〜7は、専用スレッドであるスレッド#1〜スレッド#7にそれぞれ割り当てられる。優先度が第8位〜第16位であるストリームID=8〜16は、混在スレッドであるスレッド#8にまとめて割り当てられる。
次に、図18を参照してスレッド決定部234によるスレッド割り当ての動作を説明する。
ホストIF制御部100よりホストスループットが入力されると(S100)、スレッド決定部234は、ホストスループットの高い順に、高い優先度を割り当てる(S101)。スレッド決定部234は、優先度が第1位から第(m−n)位までのストリームIDを、専用スレッドに割り当てる(S102)。スレッドが割り当てられていないストリームIDがある場合(S103:Yes)、スレッド決定部234は、優先度が第(m−n+1)位以下のストリームIDを、混在スレッドに割り当てる(S104)。
なお、スレッド決定部234は、ストリームIDが割り当てられていないライトデータ、すなわちストリームデータではないライトデータについては、混在スレッドに割り当てる。
以上、本実施形態の半導体記憶装置1が、ストリームデータをどのようにNAND型フラッシュメモリ20にライトをするのかについて説明した。
次に、図19を参照して、ストリームIDごとの優先度の決定方法について説明する。
優先度の決定は、ホスト2又は半導体記憶装置1によって行われる。
ホスト2が優先度を決定する場合(S200)、ホスト2は、ホスト2と半導体記憶装置1との間のホストスループットを測定し(S201)、優先度を決定する。決定された優先度は、例えばSTREAM CONTROL(OPEN)コマンドによって、半導体記憶装置1に通知される。なお、この場合、図18のS100及びS101の処理はスキップされる。
半導体記憶装置1が優先度を決定する場合(S202)、半導体記憶装置1は、ホストスループットを基に優先度を決定する。この場合、ホストスループットの決定は、ホスト2又は半導体記憶装置1によって行われる。
ホスト2がホストスループットを決定する場合(S203)、ホスト2は、ホスト2と半導体記憶装置1との間のスループットを測定し、ホストスループットを決定する。本ステップはS201と同様である。決定されたホストスループットは、例えばSTREAM CONTROL(OPEN)コマンドによって、半導体記憶装置1に通知される。そして、半導体記憶装置1は通知されたホストスループットを基に、優先度を決定する。
半導体記憶装置1がホストスループットを決定する場合(S204)、実測による方法(S205)、又は、コマンドの待ち行列の長さによる方法(S206)が用いられる。
実測による方法が用いられる場合(S205)、半導体記憶装置1は、例えば過去の一定期間(時間T1とする)内に完了したWRITE STREAMコマンドの数によって、ホストスループットを決定すればよい。この場合、WRITE STREAMコマンドごとのデータ転送長が考慮されてもよい。具体的には、時間T1内に完了したWRITE STREAMコマンドによって転送されたデータ長の合計を、時間T1で割ることによりスループットを決定すればよい。
コマンドの待ち行列の長さによる方法が用いられる場合(S206)、厳密なホストスループットは決定できないが、半導体記憶装置1は、以下に説明するような推定をもってホストスループットであると決定する。すなわち、半導体記憶装置1は、例えばある時刻T2にコマンドキュー120にキューイングされているWRITE STREAMコマンドの数を基に、ホストスループットを推定する。この場合も、WRITE STREAMコマンドごとのデータ転送長が考慮されてもよい。具体的には、時刻T2にコマンドキュー120にキューイングされているWRITE STREAMコマンドによって転送されるべきデータ長の合計を基に、ホストスループットを推定する。
そして、半導体記憶装置1は自ら決定したホストスループットを基に、優先度を決定する。
以上説明した第1の実施形態の半導体記憶装置によれば、ホストスループットの高いストリームIDには優先してスレッドを割り当てるので、半導体記憶装置のWAFを低減することができる。
[第2の実施形態]
第1の実施形態の半導体記憶装置では、ホストスループットの高いストリームIDに高い優先度を割り当て、優先度に従ってスレッドを割り当てた。これに対し本実施形態の半導体記憶装置では、ストリームデータのシーケンシャル性により、さらにスレッドの割り当てを変更する。本実施形態においては、同一のストリームIDを用いて転送されたストリームデータが一括して無効化されない場合でも、シーケンシャルなデータは一括して無効化される可能性が高い(例えば当該データが同一のファイルを構成している場合)との仮定に基づいて、より適切にスレッドを割り当てることを試みる。
第1の実施形態の半導体記憶装置では、ホストスループットの高いストリームIDに高い優先度を割り当て、優先度に従ってスレッドを割り当てた。これに対し本実施形態の半導体記憶装置では、ストリームデータのシーケンシャル性により、さらにスレッドの割り当てを変更する。本実施形態においては、同一のストリームIDを用いて転送されたストリームデータが一括して無効化されない場合でも、シーケンシャルなデータは一括して無効化される可能性が高い(例えば当該データが同一のファイルを構成している場合)との仮定に基づいて、より適切にスレッドを割り当てることを試みる。
図20aは、ホスト2が同一のストリームIDを用いて、複数のWRITE STREAMコマンドを発行する時の一例を説明する図である。
ホスト2は、ストリームID=1を用いて、開始LBA=0x0000から転送数=0x50セクター、開始LBA=0x0100から転送数=0x30セクター、開始LBA=0x0500から転送数=0x80セクター、開始LBA=0x0800から転送数=0x100セクター、の4つのWRITE STREAMコマンドをそれぞれ発行する。
また、ホスト2は、ストリームID=2を用いて、開始LBA=0x1000から転送数=0x800セクター、開始LBA=0x1800から転送数=0x800セクター、の2つのWRITE STREAMコマンドをそれぞれ発行する。
この時にホスト2から送信されるストリームデータのLBAは、図20bに示すようになる。図20bの実線部分はストリームデータが転送されるLBA範囲を示す。図20bの点線部分はストリームデータが転送されないLBA範囲を示す。ストリームID=1のストリームデータはシーケンシャル性が低く(すなわちランダム性が高く)、ストリームID=2のストリームデータはシーケンシャル性が高い。
図21aは、1つの論理ブロック710に、1つのストリームIDを有する2つのシーケンシャルデータがライトされた状態を説明する図である。ある論理ブロック710(論理ブロック#1とする)に、ストリームID=1・シーケンシャル#1(例えばLBA=0x0000〜0x1000)のストリームデータと、ストリームID=1・シーケンシャル#2(例えばLBA=0x2000〜0x3000)のストリームデータがライトされている。
図21bは、図21aの状態で、ホスト2がストリームID=1・シーケンシャル#1のストリームデータを無効化した時の状態を説明する図である。ストリームID=1・シーケンシャル#1のストリームデータの無効化により、論理ブロック#1にライトされているデータのうち、ストリームID=1・シーケンシャル#1のストリームデータは無効化された。しかしながら、ストリームID=1・シーケンシャル#2のストリームデータは無効化されていない。この状態で論理ブロック#1を消去済み論理ブロックとするには、論理ブロック#1にライトされているデータのうち、まだ有効であるストリームID=1・シーケンシャル#2のストリームデータを別な論理ブロック710(例えば、図示しない論理ブロック#2)にライトした後(すなわちガベージコレクションをした後)に、論理ブロック#1がイレースされなければならない。
従って、第1の実施形態で説明した図10a〜図10bと、本実施形態の図21a〜図21bを比較すると、図21a〜図21bの場合は、同じ数の消去済み論理ブロックを得るのに、NAND型フラッシュメモリ20へライトされるデータの総量が増加している。すなわち、シーケンシャル性の低いストリームデータは、WAFを増加させてしまう。
次に、図22〜図24を参照して、本実施形態のストリーム/スレッド変換部230によるスレッド800の割り当ての例を説明する。
図22に示すように、ホスト2から、ストリームID=1〜5の5つのストリームデータが送信される場合を想定する。各ストリームデータのホストスループットは、ストリームID=1〜3が1100MB/s、ストリームID=4〜5が1000MB/sである。ストリームID=1〜3のストリームデータはランダム性が高く、ストリームID=4〜5のストリームデータはシーケンシャル性が高いものとする。ここでは、半導体記憶装置1は最大3つのスレッド800を有するものとする。
この時、第1の実施形態で説明したスレッド割り当て条件に従えば、ストリームID=1は専用スレッドであるスレッド#1に割り当てられる。ストリームID=2は専用スレッドであるスレッド#2に割り当てられる。ストリームID=3〜5は、混在スレッドであるスレッド#3に割り当てられる。この結果、ランダム性が高いストリームID(ストリームID=1〜3)がスレッド#1〜#3のいずれにも割り当てられる。そして、スレッド#1〜#3のいずれのスレッドのローカルWAFも、Random WAFに収束してしまう。
図23は、本実施形態のストリーム/スレッド変換部230によるスレッド800の割り当ての例を説明するための図である。図23においてホスト2から送信されるストリームデータは、図22と同じである。
本実施形態のストリーム/スレッド変換部230は、ランダム性が高いストリームID=1〜3を、混在スレッドであるスレッド#3に割り当てる。シーケンシャル性が高いストリームID=1を、専用スレッドであるスレッド#1に割り当てる。シーケンシャル性が高いストリームID=2を、専用スレッドであるスレッド#2に割り当てる。この結果、スレッド#3のローカルWAFのみ、Random WAFに収束する。一方でシーケンシャル性が高いストリームデータが割り当てられたスレッド#1のローカルWAFは、このストリームデータが一括して無効化されると仮定すると、1となる。同様に、スレッド#2のローカルWAFも1となる。
図24は、本実施形態のストリーム/スレッド変換部230によるスレッド800の割り当ての別の例を説明するための図である。図24に示すように、ホスト2から、ストリームID=1〜3の3つのストリームデータが送信される場合を想定する。ストリームID=1は、1つのシーケンシャルデータであるとする。ストリームID=2は、複数のシーケンシャルデータを含むとする。ストリームID=3は、ランダムデータであるとする。ここでは、半導体記憶装置1は最大2つのスレッド800を有するものとする。
本実施形態のストリーム/スレッド変換部230は、1つのストリームIDによって複数のシーケンシャルデータが送信された場合、当該ストリームIDを混在スレッドに割り当てる。すなわち、複数のシーケンシャルデータを含むストリームID=2は、ランダムデータを有するストリームID=3とともに、混在スレッドであるスレッド#2に割り当てられる。
以上概説したように、本実施形態のストリーム/スレッド変換部230は、ストリームデータのシーケンシャル性を考慮し、スレッドを割り当てる。これにより、装置全体のWAFを低減することができる。
次に、図25a及び図25bを参照して、本実施形態においてシーケンシャル性を判定するためのアルゴリズムの概要を説明する。図25a及び図25bは、WRITE STREAMコマンド(A)〜WRITE STREAMコマンド(E)によって転送されるストリームデータ(以下、データ(A)〜データ(E)と称する)の、開始LBA、及び、転送数を示している。
本実施形態の半導体記憶装置1では、ホストIF制御部100から入力される開始LBAや転送数を用いて、ストリーム制御部220がシーケンシャル性を判定する。ストリーム制御部220は、同一のストリームIDを有するストリームデータの、基準となる開始LBAを記憶する。すなわち、図25aに示す例において、ストリーム制御部220はデータ(A)の開始LBAを、基準開始LBAとして記憶する。ストリーム制御部220は、データ(A)のLBA範囲と連続するLBA範囲を有するデータ(B)〜データ(E)のそれぞれの転送数の累積数を記憶する。そして、データ(D)の受信により、累積数があらかじめ設定されたロングシーケンシャル判定閾値以上になると、ストリーム制御部220は、このストリームデータのシーケンシャル性は高いと判定する。
ホスト2のストリームデータの転送の仕方によっては、半導体記憶装置1はシーケンシャル性が高いストリームデータを、LBA順に受信できるとは限らない。図25bに示す例においては、半導体記憶装置1は、データ(B)、データ(A)、データ(C)、データ(D)、データ(E)の順にストリームデータを受信している。ストリーム制御部220は、このように受信されたストリームデータについても、シーケンシャル性を判定することができる。
次に、図26a〜図26gを参照して、ロングシーケンシャル判定テーブルの構成の一例を説明する。ロングシーケンシャル判定テーブルは、ストリーム制御部220内に実装される。ストリーム制御部220は、ロングシーケンシャル判定テーブルを用いて、ストリームデータのシーケンシャル性を判定する。
ロングシーケンシャル判定テーブルは、複数のエントリーを有する。本実施形態においては、ロングシーケンシャル判定テーブルは、3つのエントリーを有する。1つのエントリーは、開始LBAと、最終LBAと、累積数と、世代番号と、を含む。また、ロングシーケンシャル判定テーブルは、ロング判定フラグを有する。ロングシーケンシャル判定テーブルはストリームIDごとに管理される。すなわち、1つのストリームIDに対し、1つのロングシーケンシャル判定テーブルが存在する。ロングシーケンシャル判定テーブルは、STREAM CONTROL(OPEN)コマンドに応じてストリームIDが割り当てられた時に、CPU500によって初期化されてもよい。
以下の説明ではロングシーケンシャル判定閾値は0x700が設定されているものとする。
図26aは、ロングシーケンシャル判定テーブルが初期化された状態を示す。図では省略してあるが、すべてのエントリーの開始LBA、最終LBA、累積数、世代番号はゼロである。ロング判定フラグはセットされていない。
図26bは、図26aの状態で開始LBA=0x1000から転送数=0x200セクターのWRITE STREAMコマンド(コマンドA)が発行された時のロングシーケンシャル判定テーブルの状態を示す。エントリー0の開始LBAは0x1000、最終LBAは開始LBA+転送数−1なので、0x11FFとなる。エントリー0の累積数は、登録されている累積値(0x000)に、コマンドAの転送数(0x200)を足したもので、0x200になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー0の世代番号は1になる。
図26cは、図26bの状態で開始LBA=0x1200から転送数=0x100セクターのWRITE STREAMコマンド(コマンドB)が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドBの開始LBAは、エントリー0の最終LBAと連続である。従って、コマンドBの情報はエントリー0に登録される。エントリー0の開始LBAは0x1000のまま、最終LBAはコマンドBの最終LBAである0x12FFとなる。エントリー0の累積数は、登録されている累積値(0x200)に、コマンドBの転送数(0x100)を足したもので、0x300になる。受信したコマンドのLBA範囲と連続するLBA範囲を有するエントリーの世代番号は1になる。すなわち、エントリー0の世代番号は1のままである。
図26dは、図26cの状態で開始LBA=0x1400から転送数=0x200セクターのWRITE STREAMコマンド(コマンドC)が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドCの開始LBAはエントリー0の最終LBAと連続ではない。この時、コマンドCの情報は、エントリー1に登録される。エントリー1の開始LBAは0x1400、最終LBAは0x15FFとなる。エントリー1の累積数は、登録されている累積値(0x000)に、コマンドCの転送数(0x200)を足したもので、0x200になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー1の世代番号は1になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、1ずつインクリメントされる。すなわち、エントリー0の世代番号は2になる。
図26eは、図26dの状態で開始LBA=0x0E00から転送数=0x100セクターのWRITE STREAMコマンド(コマンドD)が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドDの開始LBAはエントリー0の最終LBA、及び、エントリー1の最終LBAのいずれとも連続ではない。この時、コマンドDの情報は、エントリー2に登録される。エントリー2の開始LBAは0x0E00、最終LBAは0x0EFFとなる。エントリー2の累積数は、登録されている累積値(0x000)に、コマンドDの転送数(0x100)を足したもので、0x100になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー2の世代番号は1になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、1ずつインクリメントされる。すなわち、エントリー0の世代番号は3になる。エントリー1の世代番号は2になる。
図26fは、図26eの状態で開始LBA=0x1300から転送数=0x100セクターのWRITE STREAMコマンド(コマンドE)が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドEの開始LBAはエントリー0の最終LBAと連続である。また、コマンドEの最終LBAはエントリー1の開始LBAと連続である。この時、エントリー0の情報、エントリー1の情報、コマンドEの情報はマージされて、開始LBAが小さいほうのエントリー、すなわちエントリー0に登録される。エントリー0の開始LBAは0x1000のままである。エントリー0の最終LBAはエントリー1の最終LBAであった0x15FFとなる。エントリー0の累積数は、登録されている累積値(0x300)に、エントリー1の累積数(0x200)及びコマンドEの転送数(0x100)を足したもので、0x600になる。マージされたエントリーのうち、開始LBAが小さいほうのエントリーの世代番号は1になる。すなわち、エントリー0の世代番号は1になる。マージされたエントリーのうち、開始LBAが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー1は初期化される。マージされたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、小さい世代番号を有するエントリーから順に、2、3、・・・と割り当てられる。すなわち、エントリー2の世代番号は1から2に書き換えられる。
図26gは、図26fの状態で開始LBA=0x0F00から転送数=0x100セクターのWRITE STREAMコマンド(コマンドF)が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドFの開始LBAはエントリー2の最終LBAと連続である。また、コマンドFの最終LBAはエントリー0の開始LBAと連続である。この時、エントリー0の情報、エントリー2の情報、コマンドFの情報はマージされて、開始LBAが小さいほうのエントリー、すなわちエントリー2に登録される。エントリー2の開始LBAは0x0E00のままである。エントリー2の最終LBAはエントリー0の最終LBAであった0x15FFとなる。エントリー2の累積数は、登録されている累積値(0x100)に、エントリー0の累積数(0x600)及びコマンドFの転送数(0x100)を足したもので、0x800になる。マージされたエントリーのうち、開始LBAが小さいエントリーの世代番号は1になる。すなわち、エントリー2の世代番号は1になる。マージされたエントリーのうち、開始LBAが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー0は初期化される。
ここで、エントリー2の累積数がロングシーケンシャル判定閾値(0x700)以上となったので、ロング判定フラグがセットされる。
いずれのエントリーの累積数もゼロではない時に受信したコマンドのLBA範囲が、いずれのエントリーの開始LBA又は最終LBAとも不連続である場合には、世代番号が最大のエントリーが初期化される。なお、この場合は累積数が最小のエントリーを初期化するようにしてもよい。そして、初期化されたエントリーに、受信したコマンドの情報が登録される。
次に、図27を参照して、本実施形態のストリーム制御部220によるロングシーケンシャル判定テーブルの更新手順を説明する。
WRITE STREAMコマンドを受信すると(S300)、ストリーム制御部220は、累積数がゼロではなく、かつ、受信したコマンドのLBA範囲と連続する開始LBA又は最終LBAを有するエントリーがあるか否かを確認する(S301)。
LBAが連続するエントリーがない場合(S301:No)、ストリーム制御部220は、累積数がゼロのエントリーがあるか否かを確認する(S302)。累積数がゼロのエントリーがある場合(S302:Yes)、ストリーム制御部220は、累積数がゼロであるエントリーのうち、エントリー番号が最小のエントリーにコマンド情報を登録する(S303)。この時、当該エントリーの世代番号は1にされる。累積数がゼロのエントリーがない場合(S302:No)、ストリーム制御部220は、世代番号が最大であるエントリー、又は、累積数が最小であるエントリーを初期化する(S304)。
LBAが連続するエントリーがある場合(S301:Yes)、ストリーム制御部220は、マージ可能なエントリーがあるか否かを確認する(S305)。すなわち、受信したコマンドの開始LBAと連続する最終LBAを有するエントリー(第1のエントリー)と、受信したコマンドの最終LBAと連続する開始LBAを有するエントリー(第2のエントリー)、の両方があるか否かを確認する。
マージ可能なエントリーがない場合、すなわち、第1のエントリー又は第2のエントリーのうち、いずれか一方のみが存在する場合(S305:No)、ストリーム制御部220は、第1のエントリー又は第2のエントリーに、コマンド情報を登録する(S306)。具体的には、第1のエントリーにコマンド情報が登録される第1の場合には、第1のエントリーの開始LBAは変更されず、第1のエントリーの最終LBAには受信したコマンドの最終LBAが登録される。また、第2のエントリーにコマンド情報が登録される第2の場合には、第2のエントリーの開始LBAには受信したコマンドの開始LBAが登録され、第2のエントリーの最終LBAは変更されない。第1の場合、及び、第2の場合のいずれにおいても、当該エントリーの累積数は受信したコマンドの転送数が加えられ、当該エントリーの世代番号は1にされる。また、登録対象ではないエントリーのうち、累積数がゼロではないエントリーの世代番号は1ずつインクリメントされる(S307)。
マージ可能なエントリーがある場合、すなわち、第1のエントリー及び第2のエントリーの両方が存在する場合(S305:Yes)、ストリーム制御部220は、第1のエントリーに、第2のエントリーの情報、及び、コマンド情報をマージして登録する(S308)。すなわち、第1のエントリーの開始LBAは変更されない。第1のエントリーの最終LBAには、第2のエントリーの最終LBAが登録される。第1のエントリーの累積数には、第1のエントリーの累積数と第2のエントリーの累積数の合計に、受信したコマンドの転送数を加えた値が登録される。第1のエントリーの世代番号は1にされる。また、マージ対象ではないエントリーのうち、累積数がゼロではないエントリーの世代番号は、世代番号の小さい順に2、3、・・・と再割り当てされる(S309)。
なお、マージ可能なエントリーがない場合(S305:No)、マージ可能なエントリーがある場合(S305:Yes)のいずれの場合においても、第1のエントリーが2つ以上存在する場合、又は、第2のエントリーが2つ以上存在する場合がある。この場合、ストリーム制御部220は、例えば2つ以上存在する第1のエントリー(又は2つ以上存在する第2のエントリー)のうち、いずれか1つを選択し、上記の処理を行う。
次にストリーム制御部220は、いずれかのエントリーの累積数がロングシーケンシャル判定閾値以上となったか否かを確認し(S310)、該当するエントリーがある場合(S310:Yes)は、ロング判定フラグをセットする(S311)。
次に、図28を参照して、本実施形態のストリーム/スレッド変換テーブル232の構成の一例を説明する。
本実施形態では、第1の実施形態のストリーム/スレッド変換テーブル232の構成に、ロング判定フラグが追加される。なお、ロング判定フラグはストリームIDとともに、ストリーム制御部220からストリーム/スレッド変換部230に入力される。
図28に示すように、ストリームID=5、7については、ロング判定フラグがセットされていない。この時、第1の実施形態で説明したスレッド割り当て条件に従えば、優先度がそれぞれ第5位と第7位であるストリームID=5、7は、専用スレッドであるスレッド#5、#7に割り当てられるべきであるとする。しかしながら、本実施形態のスレッド決定部234は、ロング判定フラグがセットされていないストリームID=5、7について、優先度とは無関係に混在スレッドであるスレッド#8に割り当てる。その結果、優先度がそれぞれ第6位、第8位、第9位であるストリームID=6、8、9は、専用スレッドであるスレッド#5、スレッド#6、スレッド#7にそれぞれ割り当てられる。
なお、上記ではロング判定フラグがセットされていないストリームIDについては、優先度とは無関係に混在スレッドに割り当てた。しかしながら、当該ストリームIDについて、ホストスループットから決定される優先度を下げるとしてもよい。また、ホスト2が優先度を決定する場合(図19のS200の場合)、ホスト2はストリームデータのシーケンシャル性を考慮して優先度を決定してもよい。半導体記憶装置1が優先度を決定する場合(図19のS202の場合)は、ホスト2が半導体記憶装置1にストリームデータのシーケンシャル性を通知してもよい。この場合、シーケンシャル性は例えばSTREAM CONTROL(OPEN)コマンドによって、半導体記憶装置1に通知される。
以上説明した第2の実施形態の半導体記憶装置によれば、シーケンシャル性の高いストリームIDには優先してスレッドを割り当てるので、半導体記憶装置のWAFを低減することができる。
[第3の実施形態]
第3の実施形態の半導体記憶装置では、データのシーケンシャル性に基づいて、半導体記憶装置自身によって各データにストリームIDを割り当てる。すなわち、本実施形態においては、ストリームデータを識別可能に送信しないホストと接続された場合においても、各ストリームデータを各スレッドに適切に割り当てる。
第3の実施形態の半導体記憶装置では、データのシーケンシャル性に基づいて、半導体記憶装置自身によって各データにストリームIDを割り当てる。すなわち、本実施形態においては、ストリームデータを識別可能に送信しないホストと接続された場合においても、各ストリームデータを各スレッドに適切に割り当てる。
本実施形態の半導体記憶装置1においても、第2の実施形態と同様、ホストIF制御部100から入力される開始LBAや転送数を用いて、ストリーム制御部220がシーケンシャル性を判定する。シーケンシャル性の判定に用いられるアルゴリズムは、第2の実施形態と同様である。すなわち、基準開始LBAからシーケンシャルにつながったデータの累積数がロングシーケンシャル判定閾値以上になると、ストリーム制御部220は、このデータのシーケンシャル性が高いと判定する。本実施形態においては、ストリーム制御部220は、シーケンシャル性が高いと判定されたデータに、ストリームIDを付加する。
第2の実施形態の半導体記憶装置1においては、1つのストリームIDに対し、1つのロングシーケンシャル判定テーブルが存在した。これに対し本実施形態においては、ストリーム制御部220に実装される1つのロングシーケンシャル判定テーブルによって、データのシーケンシャル性を判定する。
図29a〜図29hは、本実施形態におけるロングシーケンシャル判定テーブルの構成の一例を説明する図である。ロングシーケンシャル判定テーブルは、複数のエントリーを有する。本実施形態においては、ロングシーケンシャル判定テーブルは、3つのエントリーを有する。1つのエントリーは、開始LBAと、最終LBAと、累積数と、世代番号と、ストリームIDと、を含む。ロングシーケンシャル判定テーブルは、任意のタイミングでCPU500によって初期化されてもよい。以下の説明ではロングシーケンシャル判定閾値は0x700が設定されているものとする。
図29aは、ロングシーケンシャル判定テーブルが初期化された状態を示す。図では省略してあるが、すべてのエントリーの開始LBA、最終LBA、累積数、世代番号、ストリームID、はゼロである。
図29b〜図29fは、図26b〜図26fとそれぞれ同様であるので、ここでは説明を省略する。ただし、本実施形態においては、WRITE STREAMコマンドに限らず、データのライトに使用されるコマンド(WRITEコマンド)全般がシーケンシャル性の判定対象となる。
図29gは、図29fの状態で開始LBA=0x2000から転送数=0x200セクターのWRITEコマンド(コマンドF)が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドFの開始LBAはエントリー0の最終LBA、及び、エントリー2の最終LBAと連続ではない。この時、コマンドFの情報は、エントリー1に登録される。エントリー1の開始LBAは0x2000、最終LBAは0x21FFとなる。エントリー1の累積数は、登録されている累積値(0x000)に、コマンドFの転送数(0x200)を足したもので、0x200になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー1の世代番号は1になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、1ずつインクリメントされる。すなわち、エントリー0の世代番号は2になり、エントリー2の世代番号は3になる。
図29hは、図29gの状態で開始LBA=0x0F00から転送数=0x100セクターのWRITEコマンド(コマンドG)が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドGの開始LBAはエントリー2の最終LBAと連続である。また、コマンドFの最終LBAはエントリー0の開始LBAと連続である。この時、エントリー0の情報、エントリー2の情報、コマンドFの情報はマージされて、開始LBAが小さいほうのエントリー、すなわちエントリー2に登録される。エントリー2の開始LBAは0x0E00のままである。エントリー2の最終LBAはエントリー0の最終LBAであった0x15FFとなる。エントリー2の累積数は、登録されている累積値(0x100)に、エントリー0の累積数(0x600)及びコマンドFの転送数(0x100)を足したもので、0x800になる。マージされたエントリーのうち、開始LBAが小さいエントリーの世代番号は1になる。すなわち、エントリー2の世代番号は1になる。マージされたエントリーのうち、開始LBAが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー0は初期化される。マージされたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、小さい世代番号を有するエントリーから順に、2、3、・・・と割り当てられる。すなわち、エントリー1の世代番号は1から2に書き換えられる。
ここで、エントリー2の累積数がロングシーケンシャル判定閾値(0x700)以上となったので、エントリー2にストリームIDが割り当てられる。割り当てられるストリームIDは任意であるが、ここでは1が割り当てられている。ストリームIDが割り当てられたエントリーに属するデータには、当該ストリームIDが割り当てられる。
累積数がロングシーケンシャル判定閾値未満であるエントリーに属するデータ(ランダムライトデータ)には、ストリームIDが割り当てられない。すなわち、本実施形態のストリーム制御部220は、受信した複数のWRITEコマンドから、ストリームデータとランダムライトデータを分離することができる。
エントリー1についても、その後のWRITEコマンドの受信により、累積数がロングシーケンシャル判定閾値以上となれば、別なストリームID(例えば2)が割り当てられる。すなわち、本実施形態のストリーム制御部220は、受信した複数のWRITEコマンドから、複数のストリームデータを抽出し、それぞれに異なるストリームIDを割り当てることができる。
本実施形態のストリーム/スレッド変換部230は、上述したようにストリーム制御部220によって各データに割り当てられたストリームIDを基にして、第1の実施形態と同様にスレッド800の割り当てを行う。すなわち、ホストスループットの高いストリームIDには優先してスレッド800を割り当てる。また、ストリーム/スレッド変換部230は、ランダムライトデータについては、混在スレッドに割り当てる。
以上説明した第3の実施形態の半導体記憶装置によれば、半導体記憶装置自身によってストリームIDを割り当て、シーケンシャル性が高く、かつ、ホストスループットの高いストリームIDには優先してスレッドを割り当てるので、ストリームデータを識別可能に送信しないホストと接続された場合においても、半導体記憶装置のWAFを低減することができる。
[第4の実施形態]
第1の実施形態の半導体記憶装置では、WAFを低減するため、ホストスループットの高いストリームIDに高い優先度を割り当て、優先度に従ってスレッドを割り当てた。これに対し本実施形態の半導体記憶装置では、半導体記憶装置とホスト間のスループットを向上させるため、各スレッドの最大スループットを考慮してスレッドを割り当てる。
第1の実施形態の半導体記憶装置では、WAFを低減するため、ホストスループットの高いストリームIDに高い優先度を割り当て、優先度に従ってスレッドを割り当てた。これに対し本実施形態の半導体記憶装置では、半導体記憶装置とホスト間のスループットを向上させるため、各スレッドの最大スループットを考慮してスレッドを割り当てる。
本実施形態では、各スレッド800の最大スループットを最大スレッドスループットと称する。最大スレッドスループットは、メモリコントローラ10からNAND型フラッシュメモリ20へのデータ転送能力によって決定される。最大スレッドスループットは、各スレッド800で同一でもよく、スレッド800ごとに異なっていてもよい。最大スレッドスループットは、例えば半導体記憶装置1を低消費電力モードに設定した時などには、通常時に比べて低くなりうる。また、スレッド800を経由してライトデータがライトされるNAND型フラッシュメモリ20のチャネル数やバンクインターリーブ数によっても変化しうる。
本実施形態におけるホストスループットは、第1の実施形態と同様にして決定される。
図30は、本実施形態のストリーム/スレッド変換部230によるスレッド800の割り当ての例を説明するための図である。図13と同様、ここでは説明を簡略化するため、半導体記憶装置1は最大4つのスレッド800を有するものとする。
ホスト2から送信されるストリームID=1〜5のホストスループットは、図13の場合と同じである。スレッド#1の最大スレッドスループットは1200MB/sである。スレッド#2の最大スレッドスループットは1150MB/sである。スレッド#3の最大スレッドスループットは1100MB/sである。スレッド#4の最大スレッドスループットは1000MB/sである。
ストリーム/スレッド変換部230は、5つのストリームIDを4つのスレッド800に割り当てる。ストリーム/スレッド変換部230は、ホストスループットの高いストリームIDを、最大スレッドスループットの高いスレッド800に優先的に割り当てる。すなわち、ホストスループットが一番高いストリームID=1を、最大スレッドスループットが一番高いスレッド#1に割り当てる。ホストスループットが二番目に高いストリームID=2を、最大スレッドスループットが二番目に高いスレッド#2に割り当てる。ホストスループットが三番目に高いストリームID=3を、最大スレッドスループットが三番目に高いスレッド#3に割り当てる。ホストスループットが四番目と五番目であるストリームID=4、5についてはスレッド#4に混在させて割り当てる。
このように各ストリームIDが各スレッド800に割り当てられた結果、スレッド#1の実効スレッドスループットは1200MB/sとなる。スレッド#2の実効スレッドスループットは1100MB/sとなる。スレッド#3の実効スレッドスループットは1000MB/sとなる。スレッド#4の実効スレッドスループットは900MB/sとなる。各実効スレッドスループットの合計は、4200MB/sとなる。
次に、図31を参照して、比較例のストリーム/スレッド変換部230によるスレッド800の割り当ての例を説明する。
ホスト2から送信されるストリームデータのホストスループットは、図30の場合と同じである。各スレッド800の最大スレッドスループットも、図30の場合と同じである。比較例のストリーム/スレッド変換部230は、ホストスループットが一番目に高いストリームID=1と、ホストスループットが二番目に高いストリームID=2をスレッド#1に混在させて割り当てる。また、比較例のストリーム/スレッド変換部230は、ホストスループットが三番目以降のストリームID=3、4、5をスレッド#2、スレッド#3、スレッド#4にそれぞれ割り当てる。
このように各ストリームIDが各スレッド800に割り当てられた結果、スレッド#1の実効スレッドスループットは1200MB/sとなる。スレッド#2の実効スレッドスループットは1000MB/sとなる。スレッド#3の実効スレッドスループットは500MB/sとなる。スレッド#4の実効スレッドスループットは400MB/sとなる。各実効スレッドスループットの合計は、3100MB/sとなり、本実施形態の場合に比べ、各実効スレッドスループットの合計が低くなる、すなわち、性能が低くなってしまうことがわかる。
次に、図32を参照して、本実施形態のストリーム/スレッド変換部230によるスレッド800の割り当ての別の例を説明する。
ホスト2から送信されるストリームID=1〜5のホストスループットは、図30の場合と同じである。スレッド#1の最大スレッドスループットは800MB/sである。スレッド#2の最大スレッドスループットは750MB/sである。スレッド#3の最大スレッドスループットは700MB/sである。スレッド#4の最大スレッドスループットは650MB/sである。図32の場合、ホストスループットよりも最大スレッドスループットのほうが小さい。
ストリーム/スレッド変換部230は、5つのストリームIDを4つのスレッド800に割り当てる。ストリーム/スレッド変換部230は、ホストスループットの高いストリームIDを、最大スレッドスループットの高いスレッド800に優先的に割り当てる。すなわち、ホストスループットが一番高いストリームID=1を、最大スレッドスループットが一番高いスレッド#1に割り当てる。ホストスループットが二番目に高いストリームID=2を、最大スレッドスループットが二番目に高いスレッド#2に割り当てる。ホストスループットが三番目に高いストリームID=3を、最大スレッドスループットが三番目に高いスレッド#3に割り当てる。ホストスループットが四番目と五番目であるストリームID=4、5のストリームデータについてはスレッド#4に混在させて割り当てる。
このように各ストリームIDが各スレッド800に割り当てられた結果、スレッド#1の実効スレッドスループットは800MB/sとなる。スレッド#2の実効スレッドスループットは750MB/sとなる。スレッド#3の実効スレッドスループットは700MB/sとなる。スレッド#4の実効スレッドスループットは650MB/sとなる。各実効スレッドスループットの合計は、2900MB/sとなる。
次に、図33を参照して、比較例のストリーム/スレッド変換部230によるスレッド800の割り当ての別の例を説明する。
ホスト2から送信されるストリームデータのホストスループットは、図32の場合と同じである。各スレッド800の最大スレッドスループットも、図32の場合と同じである。比較例のストリーム/スレッド変換部230は、ホストスループットが一番目に高いストリームID=1と、ホストスループットが二番目に高いストリームID=2をスレッド#1に混在させて割り当てる。また、比較例のストリーム/スレッド変換部230は、ホストスループットが三番目以降のストリームID=3、4、5のストリームデータをスレッド#2、スレッド#3、スレッド#4にそれぞれ割り当てる。
このように各ストリームIDが各スレッド800に割り当てられた結果、スレッド#1の実効スレッドスループットは800MB/sとなる。スレッド#2の実効スレッドスループットは750MB/sとなる。スレッド#3の実効スレッドスループットは500MB/sとなる。スレッド#4の実効スレッドスループットは400MB/sとなる。各実効スレッドスループットの合計は、2450MB/sとなり、本実施形態の場合に比べ、各実効スレッドスループットの合計が低くなる、すなわち、性能が低くなってしまうことがわかる。
次に、図34及び図35を参照して、本実施形態のストリーム/スレッド変換部230によるスレッド800の割り当てのアルゴリズムを説明する。
ホスト2から送信されるストリームID=1〜5のホストスループットは、それぞれQs1〜Qs5であるとする。スレッド#1〜スレッド#4の最大スレッドスループットは、それぞれT1〜T4であるとする。
まず、図34に示すように、ストリームID=1をスレッド#1に、ストリームID=2をスレッド#2に、ストリームID=3をスレッド#3に、ストリームID=4とストリームID=5をスレッド#4にそれぞれ割り当てた場合を考える。この場合、スレッド#1の実効スレッドスループットQt1は、Qt1=min(Qs1、T1)である。スレッド#2の実効スレッドスループットQt2は、Qt2=min(Qs2、T2)である。スレッド#3の実効スレッドスループットQt3は、Qt3=min(Qs3、T3)である。スレッド#4の実効スレッドスループットQt4は、Qt4=min(Qs4+Qs5、T4)である。
次に、図35に示すように、ストリームID=1をスレッド#1に、ストリームID=2をスレッド#2に、ストリームID=3とストリームID=4をスレッド#3に、ストリームID=5をスレッド#4にそれぞれ割り当てた場合を考える。この場合、スレッド#1の実効スレッドスループットQt1は、Qt1=min(Qs1、T1)である。スレッド#2の実効スレッドスループットQt2は、Qt2=min(Qs2、T2)である。スレッド#3の実効スレッドスループットQt3は、Qt3=min(Qs3+Qs4、T3)である。スレッド#4の実効スレッドスループットQt4は、Qt4=min(Qs5、T4)である。
ストリーム/スレッド変換部230は、以上で説明したようなスレッド800に割り当てるストリームIDの組み合わせのうち、各スレッド800の実効スレッドスループットの合計、すなわちQt1+Qt2+Qt3+Qt4が最大となるような組み合わせを選択する。
なお、実効スレッドスループットの合計が最大となるような組み合わせが複数あった場合、ホストスループットが高いストリームIDは、なるべく専用のスレッド800を割り当てる。第1の実施形態で説明したとおり、ホストスループットが高い複数のストリームIDを1つのスレッド800に割り当てると、WAFが高くなってしまうからである。
以上説明した第4の実施形態の半導体記憶装置によれば、実効スレッドスループットの合計が最大となるようにスレッドを割り当てるので、半導体記憶装置の性能を向上させることができる。
以上説明した少なくとも1つの実施形態の半導体記憶装置によれば、不揮発性半導体メモリにおける、ストリームデータの記憶先を適切に選択することができるので、半導体記憶装置の信頼性と性能を向上させることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…半導体記憶装置、2…ホスト、10…メモリコントローラ、20…不揮発性メモリ、22…ページバッファ、24…メモリセル、100…ホストインターフェース制御部、110…受信FIFO、120…コマンドキュー、200…バッファ管理部、210…バッファ、220…ストリーム制御部、222…ストリームID管理テーブル、230…ストリーム/スレッド変換部、232…ストリーム/スレッド変換テーブル、234…スレッド決定部、236…データ選択部、300…NAND管理部、310…NANDコントローラ、320…バッファ読み出し制御部、330…ブロック管理部、400…論物変換テーブル、500…CPU、600…物理ページ、610…物理ブロック、620…クラスタ、700…論理ページ、710…論理ブロック、800…スレッド
Claims (14)
- 一括して無効化されることが期待されるデータの集合であるストリームデータを識別子に関連付け、複数の前記ストリームデータのそれぞれを前記識別子により識別可能に送信するホストと通信可能である半導体記憶装置であって、
第1の単位ごとにデータの書き込みが行われ、複数の前記第1の単位からなる第2の単位ごとにデータの消去が行われる不揮発性半導体メモリと、
前記ホストと前記不揮発性半導体メモリとの間でデータを一時的に格納するバッファと、
前記不揮発性半導体メモリへのデータの書き込みを制御するコントローラと、
を具備し、
前記コントローラは、
前記複数のストリームデータのうち優先度の高いストリームデータについては、
前記第2の単位の1つに、単一の識別子に関連付けられるストリームデータを書き込み、
前記複数のストリームデータのうち前記優先度の低いストリームデータについては、
前記第2の単位の1つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む
半導体記憶装置。 - 前記コントローラは、
前記バッファをm個(mは2以上の自然数)のスレッドに分けて管理し、
前記複数のストリームデータのうち前記優先度が第1位から第(m−n)位(nは1以上m未満の自然数)までのストリームデータについては、
前記スレッドの1つに、単一の識別子に関連付けられるストリームデータを格納し、
前記スレッドの1つに格納された前記ストリームデータを、前記第2の単位の1つに書き込み、
前記複数のストリームデータのうち前記優先度が第(m−n+1)位以下のストリームデータについては、
前記スレッドの1つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを格納し、
前記スレッドの1つに格納された前記ストリームデータを、前記第2の単位の1つに書き込む
請求項1に記載の半導体記憶装置。 - 前記nは1である請求項2に記載の半導体記憶装置。
- 前記優先度は、前記ホストによって決定される
請求項1に記載の半導体記憶装置。 - 前記優先度は、
前記ホストと前記半導体記憶装置との間における前記ストリームデータのスループットが大きい時に高く決定される
請求項4に記載の半導体記憶装置。 - 前記優先度は、前記コントローラによって決定される
請求項1に記載の半導体記憶装置。 - 前記優先度は、
前記ホストと前記半導体記憶装置との間における前記ストリームデータのスループットが大きい時に高く決定される
請求項6に記載の半導体記憶装置。 - 前記スループットは、前記ホストによって決定される
請求項7に記載の半導体記憶装置。 - 前記スループットは、前記コントローラによって決定される
請求項7に記載の半導体記憶装置。 - 前記コントローラはさらに、
ストリームデータ内に含まれる各データの記憶先を示す論理アドレスの連続性に応じて前記優先度を変更する
請求項1に記載の半導体記憶装置。 - 前記コントローラは、
前記論理アドレスが連続した累積数を記憶し、
前記累積数が第1の閾値未満であるストリームデータについては、
前記第2の単位の1つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む
請求項10に記載の半導体記憶装置。 - 前記コントローラは、
前記バッファを複数のスレッドに分けて管理し、
前記スレッドごとの前記スレッドと前記不揮発性半導体メモリとの間のストリームデータのスループットの、
前記複数のスレッドについての合計が最大となるように、
前記スレッドの1つにストリームデータを格納し、
前記スレッドの1つに格納された前記ストリームデータを、前記第2の単位の1つに書き込む
請求項1に記載の半導体記憶装置。 - 第1の単位ごとにデータの書き込みが行われ、複数の前記第1の単位からなる第2の単位ごとにデータの消去が行われる不揮発性半導体メモリと、
ホストから受信したコマンドが指定するアドレス範囲に応じて前記不揮発性半導体メモリへのデータの書き込みを制御するコントローラと、
を具備し、
前記コントローラは、
複数のコマンドがそれぞれ指定する前記アドレス範囲が連続した累積数を記憶し、
前記累積数が第1の閾値以上となる連続コマンド群に属するコマンドを前記ホストから受信したことに応じ、
前記連続コマンド群に属するコマンドに応じて前記ホストから送信されるデータを、前記連続コマンド群ごとに識別子に関連付け、
前記識別子に関連付けられたデータのうち優先度の高いデータについては、
前記第2の単位の1つに、単一の識別子に関連付けられるデータを書き込み、
前記識別子に関連付けられたデータのうち前記優先度の低いデータについては、
前記第2の単位の1つに、それぞれ異なる識別子に関連付けられる複数のデータを書き込む
半導体記憶装置。 - 前記コントローラは、
前記第2の単位の1つに、前記連続コマンド群に属さないコマンドに応じて前記ホストから送信される複数のデータを書き込む
請求項13に記載の半導体記憶装置。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016231246A JP2018088137A (ja) | 2016-11-29 | 2016-11-29 | 半導体記憶装置 |
US15/826,415 US10747444B2 (en) | 2016-11-29 | 2017-11-29 | Allocation of memory regions of a nonvolatile semiconductor memory for stream-based data writing |
US16/927,492 US11199974B2 (en) | 2016-11-29 | 2020-07-13 | Allocation of memory regions of a nonvolatile semiconductor memory for stream-based data writing |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016231246A JP2018088137A (ja) | 2016-11-29 | 2016-11-29 | 半導体記憶装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018088137A true JP2018088137A (ja) | 2018-06-07 |
Family
ID=62190226
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016231246A Pending JP2018088137A (ja) | 2016-11-29 | 2016-11-29 | 半導体記憶装置 |
Country Status (2)
Country | Link |
---|---|
US (2) | US10747444B2 (ja) |
JP (1) | JP2018088137A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020115275A (ja) * | 2019-01-17 | 2020-07-30 | 富士通株式会社 | 情報処理装置およびプログラム |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105278876B (zh) * | 2015-09-23 | 2018-12-14 | 华为技术有限公司 | 一种固态硬盘的数据擦除方法及装置 |
US10534736B1 (en) * | 2018-12-31 | 2020-01-14 | Texas Instruments Incorporated | Shared buffer for multi-output display systems |
CN111813326B (zh) * | 2019-04-12 | 2024-04-19 | 建兴储存科技(广州)有限公司 | 具多数据流写入的固态存储装置及其相关写入方法 |
KR20200143912A (ko) | 2019-06-17 | 2020-12-28 | 삼성전자주식회사 | 멀티-스트리밍을 지원하는 스토리지 장치 및 비휘발성 메모리 장치의 동작 제어 방법 |
KR20200145151A (ko) | 2019-06-20 | 2020-12-30 | 삼성전자주식회사 | 맵핑 정보를 축약하는 플래시 변환 계층 구조를 이용하여 메모리 리소스를 관리하는 데이터 저장 장치 |
US11922012B2 (en) * | 2019-09-10 | 2024-03-05 | Micron Technology, Inc. | Memory mapping device and method |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7065619B1 (en) * | 2002-12-20 | 2006-06-20 | Data Domain, Inc. | Efficient data storage system |
US6986019B1 (en) * | 2003-04-21 | 2006-01-10 | Maxtor Corporation | Method and apparatus for detection and management of data streams |
US20050283822A1 (en) * | 2004-06-09 | 2005-12-22 | International Business Machines Corporation | System and method for policy-enabling electronic utilities |
CN101646993B (zh) | 2006-12-06 | 2017-04-12 | 桑迪士克科技有限责任公司 | 恢复固态存储器内的存储空间的装置、系统和方法 |
JP2011175615A (ja) * | 2010-01-27 | 2011-09-08 | Toshiba Corp | ホスト装置およびメモリデバイス |
US8423722B1 (en) | 2011-08-26 | 2013-04-16 | Western Digital Technologies, Inc. | System and method for high performance command processing in solid state drives |
US9158687B2 (en) | 2013-03-04 | 2015-10-13 | Dot Hill Systems Corporation | Method and apparatus for processing fast asynchronous streams |
US9335950B2 (en) | 2013-03-15 | 2016-05-10 | Western Digital Technologies, Inc. | Multiple stream compression and formatting of data for data storage systems |
KR102074329B1 (ko) | 2013-09-06 | 2020-02-06 | 삼성전자주식회사 | 데이터 저장 장치 및 그것의 데이터 처리 방법 |
US20150261473A1 (en) | 2014-03-11 | 2015-09-17 | Kabushiki Kaisha Toshiba | Memory system and method of controlling memory system |
US9619157B2 (en) | 2014-04-03 | 2017-04-11 | Analysis Solution Llc | High-speed data storage |
US10324832B2 (en) * | 2016-05-25 | 2019-06-18 | Samsung Electronics Co., Ltd. | Address based multi-stream storage device access |
US10592171B2 (en) * | 2016-03-16 | 2020-03-17 | Samsung Electronics Co., Ltd. | Multi-stream SSD QoS management |
KR102318477B1 (ko) * | 2016-08-29 | 2021-10-27 | 삼성전자주식회사 | Ssd 어레이 관리를 위한 스트림 식별자 기반 스토리지 시스템 |
US10216417B2 (en) * | 2016-10-26 | 2019-02-26 | Samsung Electronics Co., Ltd. | Method of consolidate data streams for multi-stream enabled SSDs |
-
2016
- 2016-11-29 JP JP2016231246A patent/JP2018088137A/ja active Pending
-
2017
- 2017-11-29 US US15/826,415 patent/US10747444B2/en active Active
-
2020
- 2020-07-13 US US16/927,492 patent/US11199974B2/en active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020115275A (ja) * | 2019-01-17 | 2020-07-30 | 富士通株式会社 | 情報処理装置およびプログラム |
Also Published As
Publication number | Publication date |
---|---|
US20180150238A1 (en) | 2018-05-31 |
US11199974B2 (en) | 2021-12-14 |
US10747444B2 (en) | 2020-08-18 |
US20200341654A1 (en) | 2020-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11893238B2 (en) | Method of controlling nonvolatile semiconductor memory | |
JP2018088137A (ja) | 半導体記憶装置 | |
JP6250613B2 (ja) | 装置における電源管理のためのリソース割当及び解除 | |
US10180811B2 (en) | Semiconductor storage device that dynamically changes a data buffering manner | |
KR102549545B1 (ko) | 스토리지 장치 및 스토리지 장치의 동작 방법 | |
CN107885456B (zh) | 减少io命令访问nvm的冲突 | |
US11436136B2 (en) | Memory system including non-volatile buffer and control method thereof | |
JP2019057172A (ja) | メモリシステムおよび制御方法 | |
JP6678230B2 (ja) | ストレージ装置 | |
US20150095555A1 (en) | Method of thin provisioning in a solid state disk array | |
JP6139381B2 (ja) | メモリシステムおよび方法 | |
CN109697027B (zh) | 包括共享存储器区域和专用存储器区域的数据存储设备 | |
JP2022171208A (ja) | メモリシステムおよび制御方法 | |
JP2019148913A (ja) | メモリシステム | |
US9632950B2 (en) | Storage control device controlling access to a storage device and access controlling method of a storage device | |
KR20120011634A (ko) | 플래시 메모리장치 | |
JP6276208B2 (ja) | メモリシステム及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20170531 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20170821 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180907 |
|
RD07 | Notification of extinguishment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7427 Effective date: 20180907 |