JP2023111190A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2023111190A JP2023111190A JP2022012900A JP2022012900A JP2023111190A JP 2023111190 A JP2023111190 A JP 2023111190A JP 2022012900 A JP2022012900 A JP 2022012900A JP 2022012900 A JP2022012900 A JP 2022012900A JP 2023111190 A JP2023111190 A JP 2023111190A
- Authority
- JP
- Japan
- Prior art keywords
- command
- erase
- read
- program
- commands
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 220
- 238000000034 method Methods 0.000 title claims description 14
- 230000001186 cumulative effect Effects 0.000 claims description 83
- 239000000725 suspension Substances 0.000 claims description 20
- 238000010586 diagram Methods 0.000 description 23
- 230000006870 function Effects 0.000 description 15
- 230000004044 response Effects 0.000 description 9
- 239000000872 buffer Substances 0.000 description 7
- 238000013507 mapping Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000010365 information processing Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000012937 correction Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000013403 standard screening design Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0605—Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- 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/0653—Monitoring storage devices or systems
-
- 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/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
Abstract
【課題】不揮発性メモリに対するアクセスを柔軟に制御するメモリシステムを実現する。【解決手段】メモリシステムは、不揮発性メモリにおいて実行されているコマンドが消去/プログラムコマンドであり、且つ、(i)第1のコマンドグループに含まれるリードコマンドの数もしくは第1のコマンドグループに含まれるリードコマンドそれぞれに関連付けられている重みの合計が第1の値以上であるという第1の条件、または(ii)第1のコマンドグループに一つ以上のリードコマンドが含まれ、且つ消去/プログラムコマンドの実行が開始あるいは再開されてからの経過時間が第2の値以上であるという第2の条件のいずれかが満たされた場合、不揮発性メモリにサスペンドコマンドを送信することによって消去/プログラムコマンドの実行を中断する。【選択図】図5
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
SSDは、データセンターのサーバのような様々なホスト計算機システムのストレージデバイスとして使用されている。
SSDのようなストレージデバイスにおいては、不揮発性メモリに対するアクセスを柔軟に制御可能にするための新たな技術の実現が必要とされる。
本発明が解決しようとする課題は、不揮発性メモリに対するアクセスを柔軟に制御可能なメモリシステムを提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記不揮発性メモリに送出すべきリードコマンドを含む第1のコマンドグループと、前記不揮発性メモリに送出すべき消去コマンドと前記不揮発性メモリに送出すべきプログラムコマンドのうち少なくとも一方が含まれる第2のコマンドグループとを受け付ける。前記コントローラは、前記第1のコマンドグループと前記第2のコマンドグループとのうちから、コマンドが実行されるべきコマンドグループを選択する。前記コントローラは、前記選択したコマンドグループに含まれるコマンドの実行を開始する。前記不揮発性メモリにおいて実行されているコマンドが消去/プログラムコマンドであり、且つ、(i)前記第1のコマンドグループに含まれるリードコマンドの数もしくは前記第1のコマンドグループに含まれる前記リードコマンドそれぞれに関連付けられている重みの合計が第1の値以上であるという第1の条件、または(ii)前記第1のコマンドグループに一つ以上のリードコマンドが含まれ、且つ前記消去/プログラムコマンドの実行が開始あるいは再開されてからの経過時間が第2の値以上であるという第2の条件のいずれかが満たされた場合、前記コントローラは、前記不揮発性メモリにサスペンドコマンドを送信することによって前記消去/プログラムコマンドの実行を中断する。前記コントローラは、前記第1のコマンドグループに含まれるリードコマンドの実行を開始する動作を、前記第1のコマンドグループにリードコマンドが無くなるか、または前記消去/プログラムコマンドの中断中に実行されたリードコマンドの数もしくは前記中断中に実行されたリードコマンドそれぞれに関連付けられている重みの合計が第3の値以上になるまで繰り返してから、前記中断された消去/プログラムコマンドの実行を再開する。
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、本実施形態に係るメモリシステムとホストとの関係を説明する。
まず、図1を参照して、本実施形態に係るメモリシステムとホストとの関係を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのフラッシュストレージデバイス1として実現されている。
フラッシュストレージデバイス1は、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
ホスト(ホストデバイス)2は、複数のフラッシュストレージデバイス1を制御するように構成されている。ホスト2は、複数のフラッシュストレージデバイス1を含むフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
ホスト(サーバ)2と複数のフラッシュストレージデバイス1は、インタフェース10を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース10としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク30を介して複数のエンドユーザ端末(クライアント)3に接続されてもよい。ホスト2は、これらエンドユーザ端末3に対して様々なサービスを提供することができる。
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末3)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末3)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末3)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、この仮想マシンに対応するエンドユーザ端末3によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。
ホスト(サーバ)2においては、フラッシュトランスレーションレイヤ(ホストFTL)も実行される。このホストFTLは、アクセス対象のデータを識別するためのデータ識別子(タグ)それぞれとフラッシュストレージデバイス1内の不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるルックアップテーブル(LUT)を含む。ホストFTLは、このLUTを使用することによって、フラッシュストレージデバイス1の不揮発性メモリにおける物理的なデータ配置を知ることができる。
フラッシュストレージデバイス1は、NAND型フラッシュメモリのような不揮発性メモリを含む。不揮発性メモリは、各々が複数のページを含む複数のブロックを含む。これらブロックの各々は、データを消去するデータ消去動作の単位である。データ消去動作は「消去動作」または「ブロック消去」としても参照される。各ブロックに含まれる複数のページの各々は、不揮発性メモリにデータを書き込むデータ書き込み動作、および不揮発性メモリからデータを読み出すデータ読み出し動作の単位である。
フラッシュストレージデバイス1は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションは不揮発性メモリのアブストラクションのための機能である。ローレベルアブストラクションは、データ配置を補助する機能等を含む。データ配置を補助する機能の例は、ホスト2からのユーザデータが書き込まれるべき書き込み先ブロックを割り当てる機能、ユーザデータの書き込み先位置(書き込み先ブロック、この書き込み先ブロック内の位置)を決定する機能、ユーザデータが書き込まれたこの書き込み先位置を示す物理アドレス(ブロックアドレス、ブロック内オフセット)を上位階層(ホスト2)に通知する機能、等を含む。
ブロックアドレスは、不揮発性メモリに含まれる複数のブロックのうちの特定の一つのブロックを識別するためのブロック識別子である。不揮発性メモリが複数の不揮発性メモリダイを含む場合には、ブロックアドレスは、ダイ識別子とブロックアドレスとの組み合わせによって表される。あるいは、各不揮発性メモリダイが複数のブレーンを含む場合には、ブロックアドレスは、ダイ識別子と、ブレーン識別子と、ブロックアドレスとの組み合わせによって表される。
また、データ配置を補助する機能の例は、不揮発性メモリに既に書き込まれているユーザデータがコピーされるべきコピー先ブロックを割り当てる機能、ユーザデータのコピー先位置(コピー先ブロック、このコピー先ブロック内の位置)を決定する機能、ユーザデータがコピーされたこのコピー先位置を示す物理アドレス(ブロックアドレス、ブロック内オフセット)を上位階層(ホスト2)に通知する機能、等を含んでいてもよい。
フラッシュストレージデバイス1は、ホスト2から受信される様々なコマンドを実行する。これらコマンドには、フラッシュストレージデバイス1の不揮発性メモリにデータを書き込むためのライトコマンド、不揮発性メモリからデータを読み出すためのリードコマンド、不揮発性メモリに既に書き込まれているデータを不揮発性メモリ内の別の記憶位置にコピーするコピーコマンド、等が含まれる。
図2はフラッシュストレージデバイス1とホスト2との間の役割分担を示す図である。
ホスト(サーバ)2においては、複数のエンドユーザにそれぞれ対応する複数の仮想マシン21が実行される。各仮想マシン21においては、対応するエンドユーザによって使用される、オペレーティングシステムおよびユーザアプリケーション22が実行される。
また、ホスト(サーバ)2においては、複数のユーザアプリケーション22にそれぞれ対応する複数のI/Oサービス23が実行される。これらI/Oサービス23には、論理ブロックアドレス(LBA)ベースのブロックI/Oサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各I/Oサービス23は、タグそれぞれとフラッシュストレージデバイス1の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル(LUT)を含む。
ここで、タグとは、アクセス対象のデータを識別するためのデータ識別子を意味する。例えば、LBAのような論理アドレスがタグとして使用される。あるいは、ユーザアドレス(例えば、キー・バリュー・ストアのキー、またはこのキーのハッシュ値、等)がタグとして利用されてもよい。
フラッシュストレージデバイス1の物理アドレスは、フラッシュストレージデバイス1に含まれる不揮発性メモリ内の物理記憶位置を特定するためのアドレスである。
LBAベースのブロックI/Oサービスにおいては、論理アドレス(LBA)それぞれとフラッシュストレージデバイス1の物理アドレスそれぞれとの間のマッピングを管理するLUTが使用されてもよい。
一方、キー・バリュー・ストアサービスにおいては、キー(またはキーのハッシュ値)それぞれとこれらキーに対応するデータが格納されているフラッシュストレージデバイス1の物理アドレスそれぞれとこれらキーに対応するデータそれぞれのデータ長との間のマッピングを管理するLUTが使用されてもよい。
各エンドユーザは、使用すべきアドレッシング方法(LBA、キー・バリュー・ストアのキー、このキーのハッシュ値、等)を選択することができる。
ホスト(サーバ)2においては、複数の仮想マシン21にそれぞれ対応する複数のライトバッファ(WB)24が管理されている。あるユーザアプリケーション22からのライトデータは、このユーザアプリケーション22に対応する仮想マシン21用のライトバッファ(WB)24に一時的に格納される。
ホスト(サーバ)2からフラッシュストレージデバイス1へのコマンドの送信およびフラッシュストレージデバイス1からホスト(サーバ)2へのコマンド完了のレスポンス等の返送は、ホスト(サーバ)2およびフラッシュストレージデバイス1の各々に存在するI/Oキュー100を介して実行される。
フラッシュストレージデバイス1は、フラッシュストレージデバイス1の不揮発性メモリを論理的に分割することによって得られる複数の領域それぞれをQoSドメイン11として管理する。これらQoSドメイン11の各々は、不揮発性メモリに含まれる複数のブロックの部分集合である。不揮発性メモリに含まれる複数のブロックの各々は一つのQoSドメイン11のみに属し、同じブロックが異なるQoSドメイン11に同時に属することはない。
これらQoSドメイン11は、QoSドメインIDと称される識別子によってそれぞれ識別される。これらQoSドメインIDは、これら複数の領域(複数のQoSドメイン)をそれぞれアクセスするための複数の識別子として使用される。
本実施形態においては、ホスト2から発行される各ライトコマンド(ライト要求)は、例えば、QoSドメインIDと、ライトデータのタグ(例えば、ライトデータに対応するLBA)と、ライトデータの長さと、ライトデータが格納されているホスト2のメモリ内の位置を示すバッファアドレスとを指定する。ホスト2のメモリは、以下では、単にホストメモリとしても参照される。
ライトコマンドをホスト2から受信した場合、フラッシュストレージデバイス1は、ライトコマンドによって指定されたQoSドメインIDに対応するQoSドメインに含まれるフリープロック群のうちの一つのフリーブロックを選択し、この選択したフリーブロックに対する消去動作(データ消去動作)を実行し、そして消去動作が実行されたフリーブロックを、このQoSドメイン用の新たな書き込み先ブロックとして割り当てる。
ここで、書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。このQoSドメイン用の書き込み先ブロックが既に割り当てられている場合には、このQoSドメイン用の新たな書き込み先ブロックを割り当てる処理の実行は不要である。
フラッシュストレージデバイス1は、ホスト2から受信したライトコマンドに関連付けられたライトデータをホストメモリから取得し、取得したライトデータをこのQoSドメイン用に新たに割り当てられた書き込み先ブロック(またはこのQoSドメイン用に既に割り当てられている書き込み先ブロック)に書き込む。
この場合、フラッシュストレージデバイス1は、ホスト2から受信したライトデータを、このライトデータのタグ(例えば、ライトデータに対応するLBA)と一緒に書き込み先ブロックに書き込む。
受信されたライトコマンドに関連付けられたライトデータが書き込み先ブロックに書き込まれると、フラッシュストレージデバイス1は、このデータのタグと、このデータの長さと、このデータが書き込まれた物理記憶位置を示す物理アドレス(ブロックアドレス、ブロック内オフセット)とをホスト2にアドレス記録要求として送信する。アドレス記録要求は、データが書き込まれた物理記憶位置を示す物理アドレスをホスト2に通知するための物理アドレス通知メッセージとして使用される。
フラッシュストレージデバイス1からのアドレス記録要求の受信に応じて、ホスト2は、このデータに対応するLBAのようなタグにこの物理アドレスが関連付けられるようにホスト2のLUT(論理物理アドレス変換テーブル)を更新する。
ホスト2は、フラッシュストレージデバイス1の不揮発性メモリの物理記憶位置それぞれに格納されているデータが有効データまたは無効データのいずれであるかを、LUTを使用して管理することができる。ここで、有効データとは、LBAのようなタグに関連付けられている最新のデータを意味する。つまり、ホスト2のLUT(論理物理アドレス変換テーブル)から最新のデータとしてリンクされているデータは有効データである。また、無効データとは、LBAのようなタグに関連付けられていないデータを意味する。ホスト2のLUTからリンクされていないデータは無効データである。例えば、あるLBAに対応する更新データがフラッシュストレージデバイス1に書き込まれた場合には、このLBAに対応する以前のデータは無効データとなる。
ホスト2から発行される各リードコマンド(リード要求)は、例えば、読み出し対象データが格納されている物理記憶位置を示す物理アドレス(ブロックアドレス、ブロック内オフセット)と、読み出し対象データの長さと、読み出し対象データが転送されるべきホストメモリ内の位置を示すバッファアドレスとを指定する。
リードコマンドをホスト2から受信した場合、フラッシュストレージデバイス1は、受信したリードコマンドによって指定される物理アドレスによって示される不揮発性メモリ内の物理記憶位置から読み出し対象データを読み出し、読み出した読み出し対象データを、受信したリードコマンドによって指定されるバッファアドレスによって示されるホストメモリ内の位置に転送する。
ホスト2から発行される各コピーコマンド(コピー要求)は、例えば、コピー元ブロックを示す物理アドレス(つまりコピー元ブロックのブロックアドレス)、コピー先ブロックを示す物理アドレス(つまりコピー先ブロックのブロックアドレス)、コピー元ブロックに対応するバリッドビットマップを示す。
バリッドビットマップは、コピー元ブロック内の複数の物理記憶位置にそれぞれに対応する複数のビットを含む。これら複数のビットの各々は、このビットに対応する物理記憶位置に有効データが存在するか否かを示す。換言すれば、バリッドビットマップは、コピー元ブロックに格納されているデータそれぞれが有効データまたは無効データのいずれであるかを示す。
コピーコマンドをホスト2から受信したことに応じて、フラッシュストレージデバイス1は、バリッドビットマップに基づいて、コピー元ブロックに格納されている各有効データを特定し、コピー元ブロックに格納されている各有効データをコピー先ブロックにコピーする。この場合、フラッシュストレージデバイス1は、コピー元ブロックに格納されている各有効データを、各有効データに対応するタグ(例えば、有効データに対応するLBA)と一緒に、コピー先ブロックにコピーする。
そして、フラッシュストレージデバイス1は、例えば、コピーされた各有効データのタグ(例えばLBA)と、各有効データの長さと、各有効データのコピー元物理アドレスと、各有効データのコピー先物理アドレスとを指定するアドレス変更要求を、ホスト2に送信する。
図3は、フラッシュストレージデバイス1の構成例を示す。
フラッシュストレージデバイス1は、コントローラ4および不揮発性メモリ(例えばNAND型フラッシュメモリ5)を含む。フラッシュストレージデバイス1は、ランダムアクセスメモリ、例えば、DRAM6を含む。
コントローラ4は、Toggle NANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のような、NANDインタフェース45を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKm-1を含む。ブロックBLK0~BLKm-1の各々は複数のページ(ここではページP0~Pn-1)を含む。ブロックBLK0~BLKm-1の各々は、データ消去動作の単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0~Pn-1の各々は、データ書き込み動作およびデータ読み込み動作の各々の単位である。
DRAM6は、揮発性の半導体メモリである。DRAM6は、例えば、NAND型フラッシュメモリ5に書き込むべきデータを一時的に格納するために使用される。また、DRAM6の記憶領域は、コントローラ4によって使用される様々な管理データを格納するために使用される。
次に、コントローラ4の詳細な構成について説明する。
コントローラ4は、ホストインタフェース(I/F)41と、CPU42と、直接メモリアクセスコントローラ(DMAC)43と、ECC(Error Correction Code)エンコード/デコード部44と、NANDインタフェース(I/F)45と、DRAMインタフェース(I/F)46とを含む。これらホストインタフェース41と、CPU42と、DMAC43と、ECCエンコード/デコード部44と、NANDインタフェース45と、DRAMインタフェース46とは、バス40を介して相互接続される。
ホストインタフェース41は、ホスト2との通信を実行するホストインタフェース回路である。ホストインタフェース41は、例えば、PCIeコントローラである。あるいは、フラッシュストレージデバイス1がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース41は、NVMe over Fablics(NVMeOF)コントローラであってもよい。ホストインタフェース41は、ホスト2から様々なコマンドを受信する。これらコマンドは、ライトコマンド、リードコマンド、コピーコマンド、等が含まれる。
CPU42は、プロセッサである。CPU42は、ホストインタフェース41と、DMAC43と、ECCエンコード/デコード部44と、NANDインタフェース45と、DRAMインタフェース46とを制御する。CPU42は、フラッシュストレージデバイス1への電源の供給に応じて、NAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードする。
DMAC43は、直接メモリアクセス(DMA)を実行する回路である。DMAC43は、CPU42の制御の下、ホスト2のメモリ(不図示)と、DRAM6との間のデータ転送を実行する。
ECCエンコード/デコード部44は、NAND型フラッシュメモリ5にデータをライトすべき時、このデータをエンコードすることによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部44は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う。
NANDインタフェース45は、複数の不揮発性メモリダイを制御するメモリインタフェース回路である。NANDインタフェース45は、CPU42の制御の下、NAND型フラッシュメモリ5を制御する。NANDインタフェース45は、例えば、複数のチャンネル(Ch)を介して複数のNAND型フラッシュメモリダイに接続される。NANDインタフェース45とNAND型フラッシュメモリ5との間の通信は、例えば、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠して実行される。
DRAMインタフェース46は、DRAM6を制御するDRAMインタフェース回路である。DRAMインタフェース46は、CPU42の制御の下、DRAM6を制御する。
次に、DRAM6の構成例について説明する。DRAM6の記憶領域の一部は、コマンドキュー61と、ブロック管理テーブル62を格納するために使用される。
コマンドキュー61は、NAND型フラッシュメモリ5に送信されるべき、一つ以上のコマンドを格納するキューである。コマンドキュー61は、例えば、先入れ先出しバッファ(FIFOバッファ)として実現され得る。コマンドキュー61は、コマンドの種類ごとにそれぞれ異なるキューが用意されていてもよい。例えば、コマンドキュー61は、リードコマンドを格納するためのキューである。
ブロック管理テーブル62は、NAND型フラッシュメモリ5内の複数のブロックそれぞれに対応する複数の管理テーブルを含む。各管理テーブルは、この管理テーブルに対応するブロックを管理するための管理情報(メタデータ)を格納するために使用される。メタデータは、これに限定されないが、対応するブロックの書き換え回数(プログラム/イレーズサイクルの数)、オープン/クローズ状態、等を含んでいてもよい。オープン/クローズ状態は、このブロックがオープン状態またはクローズ状態のいずれであるかを示す。オープン状態は、このブロックが書き込み先ブロックとして使用中の状態を示す。クローズ状態は、このブロックがデータで満たされているアクティブブロックとして管理されている状態を示す。
次に、CPU42の機能構成例について説明する。CPU42は、スケジューラ421と、サスペンドマネージャ422とを含む。スケジューラ421およびサスペンドマネージャ422の一部または全部は、ファームウェアによって制御されてもよいし、コントローラ4の専用ハードウェアによって実現されてもよい。
スケジューラ421は、NAND型フラッシュメモリ5へアクセスするための複数のコマンドを受け付け、これらコマンドのうちから、NAND型フラッシュメモリ5に送出すべきコマンドを決定するスケジューリング動作を行う。
NAND型フラッシュメモリ5へのアクセスには、NAND型フラッシュメモリ5にデータを書き込むライト動作(プログラム動作)、NAND型フラッシュメモリ5からデータを読み出す読み出し動作、NAND型フラッシュメモリ5に既に書き込まれているデータをブロック単位で消去するデータ消去動作が含まれる。
したがって、NAND型フラッシュメモリ5へアクセスするためにNAND型フラッシュメモリ5に送出されるべきコマンドは、消去コマンド、プログラムコマンド、リードコマンドに大別される。
スケジューラ421は、スケジューリング動作を制御するために、累積重みを管理する。累積重みは、スケジューラ421の第1の入力に入力されるリードコマンド(第1コマンドグループ)と、スケジューラ421の第2の入力に入力される消去コマンドおよびプログラムコマンド(第2コマンドグループ)との間の優先順位を定めるために使用されるパラメータである。累積重みは、実行が開始された各コマンドに関連付けられた重みを使用して更新される。
スケジューラ421は、累積重みに基づいて、第1の入力および第2の入力のうちから、コマンドが実行されるべき入力を選択する。スケジューラ421は、選択した入力に入力されているコマンドを実行する。
ここで、コマンドの実行とは、このコマンドに対応する動作を実行するためのコマンドシーケンスをNAND型フラッシュメモリ5に送信することによってこのコマンドに対応する動作をNAND型フラッシュメモリ5に実行させることを意味する。
サスペンドマネージャ422は、スケジューラ421からNAND型フラッシュメモリ5に出力されるコマンドシーケンスに基づいて、実行中の消去/プログラムコマンドに対する中断の回数または中断時間の合計を監視する。NAND型フラッシュメモリ5において実行されているコマンドが消去コマンドまたはプログラムコマンドであり、且つ実行中の消去コマンドまたはプログラムコマンドに対する中断回数または中断時間の合計が上限値未満である場合、サスペンドマネージャ422は、実行中の消去コマンドまたはプログラムコマンドを中断するサスペンド動作を実行することをスケジューラ421に許可する。
サスペンド動作は、NAND型フラッシュメモリ5において実行中の消去/プログラムコマンドの実行を中断(サスペンド)し、代わりに第1のコマンドグループに含まれるリードコマンドの実行を開始する動作である。
消去/プログラムコマンドが実行されているときに、ある条件が満たされた場合、スケジューラ421は、実行中の消去/プログラムコマンドを中断させるためのサスペンドコマンドを発行する。そして、消去/プログラムコマンドが中断されているときに、別の条件が満たされた場合、スケジューラ421は、中断されている消去/プログラムコマンドを再開させるためのレジュームコマンドを発行する。
次に、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係について説明する。図4は、実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示すブロック図である。
NAND型フラッシュメモリ5は、図4に示すように、複数のNAND型フラッシュメモリダイ(NAND型フラッシュメモリチップ)を含んでいてもよい。個々のNAND型フラッシュメモリダイは独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な単位として機能する。図4においては、NANDインタフェース13に16個のチャンネルCh.0~Ch.15が接続されており、16個のチャンネルCh.0~Ch.15の各々に2つのNAND型フラッシュメモリダイが接続されている場合が例示されている。
この場合、チャンネルCh.0~Ch.15に接続された16個のNAND型フラッシュメモリダイ#0~#15がバンク#0として編成されてもよく、またチャンネルCh.0~Ch.15に接続された残りの16個のNAND型フラッシュメモリダイ#16~#31がバンク#1として編成されてもよい。
バンクは、複数のメモリダイをバンクインタリーブによって並列動作させるための単位として機能する。図4の構成例においては、16個のチャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
データ消去動作およびブロック割り当て動作は、一つのブロックの単位で実行される。この場合、一つのブロックは一つの物理ブロックであってもよいし、並列動作可能な複数の物理ブロックの集合を含む一つのブロックグループであってもよい。ブロックグループはスーパーブロックとしても参照される。
一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#0~#31から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#0~#31の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#0~#31の各々が、2つのプレーン(プレーン#0、プレーン#1)を含むマルチプレーン構成を有する場合には、NAND型フラッシュメモリ5に含まれるプレーンの総数は64個である。一つのスーパーブロックはNAND型フラッシュメモリ5に含まれるこれら64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
一つのスーパーブロックにデータを書き込む動作においては、NAND型フラッシュメモリダイ#0~#31それぞれに対するデータ書き込み動作が並列に実行される。これにより、例えば、32ページ分のライトデータ(プレーン#0、プレーン#1を含むマルチプレーン構成を有する場合には、64ページ分のライトデータ)をNAND型フラッシュメモリ5内のNAND型フラッシュメモリダイ#1~#32に書き込む動作を並列に実行することができる。
次に、スケジューリング動作について説明する。図5は、実施形態に係るメモリシステムにおいて、スケジューリング動作を実行するスケジューラ421を示す図である。
コントローラ4において、ホスト2から受信した各ライトコマンドは、NAND型フラッシュメモリ5に送出すべきプログラムコマンドとしてスケジューラ421に送られる。ホスト2から受信した各リードコマンドは、NAND型フラッシュメモリ5に送出すべきリードコマンドとしてスケジューラ421に送られる。
また、コントローラ4においては、ホスト2から受信した各コピーコマンドに対応するデータ読み出し動作およびデータ書き込み動作を実行するためのリードコマンドおよびプログラムコマンドが生成される。コントローラ4によって生成されるリードコマンドおよびプログラムコマンドも、NAND型フラッシュメモリ5に送出すべきリードコマンドおよびプログラムコマンドとしてスケジューラ421に送られる。
また、ガベージコレクション動作において、コントローラ4は、リードコマンドおよびプログラムコマンドを生成する。
また、書き込み先ブロックを割り当てる動作において、コントローラ4は、フリーブロックに対する消去動作を実行するための消去コマンドを生成する。コントローラ4によって生成される消去コマンドは、NAND型フラッシュメモリ5に送出すべき消去コマンドとしてスケジューラ421に送られる。
この消去コマンドは、データをブロック単位で消去する消去動作を実行するために使用される。プログラムコマンドは、ホスト2から受信したライトデータまたはホスト2からのコピーコマンドによって指定されたコピー対象データをNAND型フラッシュメモリ5に書き込むために使用される。また、プログラムコマンドは、ガベージコレクション動作においてNAND型フラッシュメモリ5のコピー元ブロックから読み出されたデータをNAND型フラッシュメモリ5のコピー先ブロックに書き込むためにも使用される。リードコマンドは、ホスト2から要求されたリード対象データまたはホスト2からのコピーコマンドによって指定されたコピー対象データをNAND型フラッシュメモリ5から読み出すために使用される。また、リードコマンドは、ガベージコレクション動作においてNAND型フラッシュメモリ5のコピー元ブロックからデータを読み出すためにも使用される。
NAND型フラッシュメモリ5においては、リードコマンド(読み出し動作)の実行に要する時間は、消去コマンド(消去動作)またはプログラムコマンド(プログラム動作)の実行に要する時間よりも短い。
リードコマンド(読み出し動作)の実行に要する時間は、例えば、数十μs~100μsである。消去コマンド(消去動作)またはプログラムコマンド(プログラム動作)の実行に要する時間は、例えば、1ms~数msである。
このように、一つの消去/プログラムコマンド(一つの消去コマンドまたは一つのプログラムコマンド)の実行に要する時間は、一つのリードコマンドの実行に要する時間の10倍から数十倍である。
ホスト2は、NAND型フラッシュメモリ5の総アクセス時間を読み出し動作とプログラム動作とに所定の比率で配分すべきことをフラッシュストレージデバイス1に要求する場合がある。
例えば、ホスト2が、NAND型フラッシュメモリ5の総アクセス時間の50パーセントの時間を読み出し動作のために割り当て、残りの時間をプログラム動作に割り当てることを要求する場合、つまり読み出し動作とプログラム動作との間の時間配分を1:1にすることを要求する場合を想定する。一つのリードコマンドの実行に要する時間が100μsであり、一つのプログラムコマンドの実行に要する時間が3msであるケースにおいては、一つのプログラムコマンドの実行に要する時間は一つのリードコマンドの実行に要する時間の30倍である。したがって、この場合には、スケジューラ421は、リードコマンドがプログラムコマンドの30倍の頻度で実行されるようにスケジューリング動作を行う。これにより、読み出し動作とプログラム動作との間の時間配分を1:1にすることができる。
また、ホスト2は、読み出し動作と消去動作とプログラム動作との間の時間配分を1:1:1にすることを要求する場合もあり得る。一つのリードコマンドの実行に要する時間が100μsであり、一つの消去コマンドの実行に要する時間が1msであり、一つのプログラムコマンドの実行に要する時間が3msであるケースにおいては、一つの消去コマンドの実行に要する時間は一つのリードコマンドの実行に要する時間の10倍であり、一つのプログラムコマンドの実行に要する時間は一つのリードコマンドの実行に要する時間の30倍である。したがって、スケジューラ421は、リードコマンドが消去コマンドの10倍の頻度で実行され、且つリードコマンドがプログラムコマンドの30倍の頻度で実行されようにスケジューリング動作を行う。これにより、読み出し動作と消去動作とプログラム動作との間の時間配分を1:1:1にすることができる。
さらに、ホスト2は、リードコマンドのレイテンシ(リードレイテンシ)の変動量をある値以下に抑えるべきことをフラッシュストレージデバイス1に要求する場合がある。
したがって、スケジューラ421は、NAND型フラッシュメモリ5に送出すべきリードコマンドそれぞれを受け付けるための第1の入力と、NAND型フラッシュメモリ5に送出すべき消去コマンドそれぞれとNAND型フラッシュメモリ5に送出すべきプログラムコマンドそれぞれとを受け付けるための第2の入力のうちから、コマンドが処理されるべき入力を選択する、というスケジューリング動作を行う。
ここで、コマンドの処理とは、このコマンドに対応する動作を実行するためのコマンドシーケンスをNAND型フラッシュメモリ5に送信することによってこのコマンドに対応する動作をNAND型フラッシュメモリ5に実行させることを意味する。
スケジューラ421は、NAND型フラッシュメモリ5に含まれるNAND型フラッシュメモリダイ毎に、スケジューリング動作を実行する。以下では、あるNAND型フラッシュメモリダイに対するスケジューリング動作を例示するが、他のNAND型フラッシュメモリダイに対するスケジューリング動作も同様の手順で実行される。
スケジューラ421は、このNAND型フラッシュメモリ5に送出すべきリードコマンドを含む第1のコマンドグループを受け付けるための第1の入力(input#0)と、NAND型フラッシュメモリ5に送出すべき消去コマンドとNAND型フラッシュメモリ5に送出すべきプログラムコマンドのうち少なくとも一方が含まれる第2のコマンドグループを受け付けるための第2の入力(input#1)とを有する。スケジューラ421は、選択された入力に格納されているコマンドを実行する。以下では、NAND型フラッシュメモリ5に送出すべき消去コマンドとNAND型フラッシュメモリ5に送出すべきプログラムコマンドとが、第2のコマンドグループとして第2の入力(input#1)に入力される場合について説明する。
スケジューラ421は、スケジューリング動作を制御するために、累積リード(VTPS)と、リード数(RinQ)と、経過時間(T)とを管理テーブルT#0を用いて管理する。
累積リード(VTPS、Virtual Time Per Suspend)は、一度のサスペンド中に処理されたリードコマンドの数の合計である。あるいは、VTPSは、一度のサスペンド中に処理されたリードコマンドそれぞれに関連付けられた重みの合計であってもよい。
リード数(RinQ)は、input#0に入力されたリードコマンドの数、つまり、コマンドキュー61に格納されている未処理のリードコマンドの数である。あるいは、RinQは、コマンドキュー61に格納されている未処理のリードコマンドそれぞれに関連付けられた重みの合計であってもよい。
経過時間(T)は、消去/プログラムコマンドの処理が開始されてから経過した時間である。そして、Tは、その消去/プログラムコマンドが中断された際にリセットされる。Tは、消去/プログラムコマンドの処理が再開された際に、再度カウントを開始する。そのため、Tは、一つの消去/プログラムコマンドの処理が開始されてから経過した時間、あるいは、一つの消去/プログラムコマンドの処理が中断された後に再開されてから経過した時間である。
サスペンドマネージャ422は、スケジューラ421からNAND型フラッシュメモリ5に出力されるコマンドシーケンスに基づいて、実行中の消去/プログラムコマンドに対する中断の回数または中断時間の合計を監視する。NAND型フラッシュメモリ5において実行されているコマンドが消去コマンドまたはプログラムコマンドであり、且つ実行中の消去コマンドまたはプログラムコマンドに対する中断回数または中断時間の合計が上限値未満である場合、サスペンドマネージャ422は、中断可能を示すフラグ(Readable flag)をオン状態に設定することで、スケジューラ421がサスペンドコマンドを発行することを許可する。
スケジューラ421がサスペンドコマンドを発行するための条件は、第1のコマンドグループに含まれるリードコマンドの数、つまり、コマンドキュー61に格納されている未実行のリードコマンドの数が第1の値に達したことである(第1のサスペンド条件)。スケジューラ421に入力された未実行のリードコマンドは、ペンディング中のリードコマンドとも称される。
一つの消去/プログラムコマンド当たりに許容される中断回数は、ある上限値までに制限される場合がある。このため、消去/プログラムコマンドの中断中に実行されるリードコマンドの数が少なすぎると、この消去/プログラムコマンドの中断回数が上限値を超えやすくなる。この消去/プログラムコマンドの中断回数が上限値を超えると、もはやこの消去/プログラムコマンドの実行を中断できない。したがって、例えば、この消去/プログラムコマンドの中断回数が上限値を超えた後にスケジューラ421に入力されるどのリードコマンドも、この消去/プログラムコマンドの実行が完了するまで、実行できなくなる。したがって、これらリードコマンドのレイテンシが大きくなる。
第1のコマンドグループに含まれるリードコマンドの数が第1の値に達したという条件(第1のサスペンド条件)が満たされた場合に消去/プログラムコマンドの実行を中断することにより、消去/プログラムコマンドの1回の中断中に、第1の値以上の数のリードコマンドを実行することができる。これにより、リードコマンドのレイテンシの変動を低減できる。
また、リードコマンドが第1のコマンドグループに含まれ、且つ、消去/プログラムコマンドの実行が開始または再開されてからの経過時間が第2の値に達したという条件(第2のサスペンド条件)も、スケジューラ421がサスペンドコマンドを発行するための条件として使用される。
第1のサスペンド条件または第2のサスペンド条件のいずれかが満たされた場合に消去/プログラムコマンドの実行を中断することにより、たとえコマンドキュー61に格納されている未実行のリードコマンドの数が第1の値未満であっても、各リードコマンドのレイテンシの増加を抑制できる。
例えば、消去/プログラムコマンドの開始または再開から第2の値に対応する時間が経過する前に一つのリードコマンドがスケジューラ421に入力された場合、このリードコマンドは、消去/プログラムコマンドの開始または再開から第2の値に対応する時間が経過するまで実行されない。つまり、消去/プログラムコマンドの実行を中断する動作は、消去/プログラムコマンドの開始または再開から第2の値に対応する時間が経過するまで待たされる。この間に、スケジューラ421に新たなリードコマンドが到着する場合もあるので、ペンディング中のリードコマンドの数を増やすことができる。消去/プログラムコマンドの開始または再開から第2の値に対応する時間が経過すると、消去/プログラムコマンドの実行が中断される。そして、この時点までにスケジューラ421に入力されているペンディング中の各リードコマンドが実行される。
スケジューラ421は、第1のコマンドグループに含まれるリードコマンドの数、つまり、未実行のリードコマンドの数を管理する。あるいは、スケジューラ421は、未実行のリードコマンドそれぞれに関連付けられた重みの合計を管理してもよい。スケジューラ421は、未実行のリードコマンドの数と、第1の値とを比較する代わりに、未実行のリードコマンドそれぞれに関連付けられた重みの合計と、第1の値とを比較することで、サスペンドコマンドを発行するための条件が満たされているか否かを判定してもよい。
スケジューラ421は、消去/プログラムコマンドの実行が開始されてからの経過時間を管理する。スケジューラ421は、消去/プログラムコマンドの実行が開始されてからの経過時間が第2の値に達した時に、コマンドキュー61に一つ以上のリードコマンドが格納されていた場合、サスペンドコマンドを発行する。また、スケジューラ421は、消去/プログラムコマンドの実行が再開されてからの経過時間を管理する。スケジューラ421は、消去/プログラムコマンドの実行が再開されてからの経過時間が第2の値に達した時に、コマンドキュー61に一つ以上のリードコマンドが格納されていた場合、サスペンドコマンドを発行する。
具体的には、リード数(RinQ)の値が、第1の値である最小累積リード(MNVT、MiNimum Virtual Time)に達した時(第1のサスペンド条件が満たされた時)、Readable flagがオン状態である場合、スケジューラ421は、消去/プログラムコマンドの実行を中断し、代わりにinput#0に格納されているリードコマンドの実行を開始する。
また、input#0に未処理のリードコマンドがあり、且つ、経過時間(T)の値が、第2の値である最大サスペンド間隔(MXSI、MaXimum Suspend Interval)に達した時(第2のサスペンド条件が満たされた時)、Readable flagがオン状態である場合、スケジューラ421は、消去/プログラムコマンドの実行を中断し、代わりにinput#0に格納されているリードコマンドの実行を開始する。
一方、Readable flagがオフ状態である場合には、RinQがMNVTに達した、あるいはTがMXSIに達したとしても、スケジューラ421は、実行中のコマンドを中断させない。
そして、消去コマンドまたはプログラムコマンドが中断されている間に、リード数(RinQ)が0になった場合、スケジューラ421は、中断されている消去コマンドまたはプログラムコマンドの実行を再開する。
また、消去コマンドまたはプログラムコマンドが中断されている間に、累積リード(VTPS)が最大累積リード数(MXVTPS、MaXimum Virtual Time Per Suspend)に達した場合、スケジューラ421は、中断されている消去コマンドまたはプログラムコマンドの実行を再開する。
ここで、リードコマンドに関連付けられている重みは、リードコマンドにパラメータの一つとして含まれていてもよい。また、全てのリードコマンドに共通の重みが、リードコマンドの重み(Wr)として管理されていてもよい。
このとき、リードコマンドの重み(Wr)、最小リード数(MNVT)、最大サスペンド間隔(MXSI)、最大累積リード数(MXVTPS)それぞれは、あらかじめ設定された値であってもよいし、ホスト2によって指定された値であってもよい。スケジューラ421は、リードコマンドの重み(Wr)と、最小リード数(MNVT)と、最大サスペンド間隔(MXSI)と、最大累積リード数(MXVTPS)とを、管理テーブルT#1を用いて管理する。
図5において、リードコマンドの重み(Wr)は、例えば、1である。Wr=1は、リードコマンドそれぞれに関連付けられた重みが1であることを示す。Wr=1である場合、リードコマンドそれぞれに関連付けられた重みの合計と、リードコマンドの数とは、同じ値を示すことになる。
最小リード数(MNVT)は、例えば、4である。消去コマンドまたはプログラムコマンドを実行中に、未実行のリードコマンドの数が4に達した場合(または未実行のリードコマンドそれぞれに関連付けられた重みの合計が4に達した場合)、スケジューラ421は、消去コマンドまたはプログラムコマンドを中断する。
最大サスペンド間隔(MXSI)は、例えば、5である。消去コマンドまたはプログラムコマンドの実行の開始または再開されてから経過した時間が5に達した場合、スケジューラ421は、消去コマンドまたはプログラムコマンドを中断する。
最大累積リード数(MXVTPS)は、例えば、8である。消去コマンドまたはプログラムコマンドの1回のサスペンド中に処理されたリードコマンドの数の合計、つまりVTPS、が8に達した場合、スケジューラ521は、中断されている消去コマンドまたはプログラムコマンドの実行を再開させる。
次に、プログラムコマンドの実行中に、RinQの値がMNVTに達したことに応じて、サスペンド動作を実行する動作について説明する。図6は、実施形態に係るメモリシステムにおいて、プログラムコマンドの実行中に受け付けられた複数のリードコマンドの数に応じて、プログラムコマンドを中断する動作について説明する図である。
まず、時刻tにおいて、プログラムコマンドP1が実行されており、未実行のリードコマンドの数(RinQ)は、2である。コマンドキュー61には、リードコマンドR1と、リードコマンドR2とが格納されている。
次いで時刻t+1になると、リードコマンドR3およびリードコマンドR4が、コマンドキュー61に格納される。これにより、RinQが4になる。コントローラ4は、RinQの値がMNVTに達した(第1のサスペンド条件が満たされた)と判定する。
そして、時刻t+2になると、コントローラ4は、NAND型フラッシュメモリ5にサスペンドコマンドを送信することで、プログラムコマンドP1の実行を中断する。そして、コントローラ4は、リードコマンドR1を実行する。このサスペンド中に実行されたリードコマンドの数(VTPS)は、1になる。そして、RinQの値は、3になる。
時刻t+3になると、コントローラ4は、リードコマンドR2を実行する。そして、VTPSは、2になる。RinQの値は、2になる。
ここで、コントローラ4は、リードコマンドR5をさらに受信する。時刻t+4になると、コントローラ4は、リードコマンドR3を実行する。そして、VTPSは、3になる。RinQの値は、2になる。
時刻t+5になると、コントローラ4は、リードコマンドR4を実行する。そして、VTPSは、4になる。RinQの値は、1になる。
時刻t+6になると、コントローラ4は、リードコマンドR5を実行する。そして、VTPSは、5になる。RinQの値は、0になる。これにより、コントローラ4は、未実行のリードコマンドが無くなったことを判定する。
そして、時刻t+7になると、コントローラ4は、NAND型フラッシュメモリ5にレジュームコマンドを発行することで、プログラムコマンドP1の実行を再開する。このとき、VTPSは、リセットされている。コマンドキュー61には、いずれのリードコマンドも格納されていない。このように、たとえサスペンド中に実行されたリードコマンドの数(VTPS)がMXVTPS(=8)に達していなくても、第1のコマンドグループに未実行のリードコマンドが無くなると、プログラムコマンドP1の実行が再開される。
次に、プログラムコマンドの実行が開始されてから経過した時間TがMXSIに達したことに応じて、プログラムコマンドの実行中にサスペンド動作を実行する動作について説明する。図7は、実施形態に係るメモリシステムにおいて、プログラムコマンドの実行が開始されてからの経過時間に応じて、プログラムコマンドを中断する動作について説明する図である。
まず、時刻tにおいて、コントローラ4は、プログラムコマンドP1の実行を開始する。このとき、未実行のリードコマンドの数(RinQ)は、0である。
次いで、時刻t+1になると、リードコマンドR1が、コマンドキュー61に格納される。これにより、RinQの値が、1になる。コントローラ4は、更新されたRinQの値がMNVTに未だ達していないことを判定すると、プログラムコマンドP1を中断させるためのサスペンドコマンドを発行しないことを決定する。
そして、時刻t+5になると、コントローラ4は、プログラムコマンドP1の実行が開始された時刻tから経過した時間がMXSIに達したことを判定する。そして、RinQの値が1以上であるため、コントローラ4は、第2のサスペンド条件が満たされたと判定する。
時刻t+6になると、コントローラ4は、NAND型フラッシュメモリ5にサスペンドコマンドを送信することで、プログラムコマンドP1の実行を中断する。そして、コントローラ4は、リードコマンドR1を実行する。このサスペンド中に実行されたリードコマンドの数(VTPS)は、1になる。RinQの値が0になる。これにより、コントローラ4は、未実行のリードコマンドが無くなったことを判定する。
時刻t+7になると、コントローラ4は、NAND型フラッシュメモリ5にレジュームコマンドを発行することで、プログラムコマンドP1の実行を再開する。このとき、VTPSは、リセットされている。コマンドキュー61には、いずれのリードコマンドも格納されていない。
次に、プログラムコマンドの実行が再開されてから経過した時間TがMXSIに達したことに応じて、プログラムコマンドの実行中にサスペンド動作を実行する動作について説明する。図8は、実施形態に係るメモリシステムにおいて、プログラムコマンドの実行が再開されてからの経過時間に応じて、プログラムコマンドを中断する動作について説明する図である。
時刻tにおいて、プログラムコマンドP1は、中断されている。また、リードコマンドR5が実行されている。プログラムコマンドP1のサスペンド中に実行されたリードコマンドの数(VTPS)は、5である。そして、リードコマンドR5が実行されたことにより、コマンドキュー61に格納されている未実行のリードコマンドの数(RinQ)は、0である。これにより、コントローラ4は、未実行のリードコマンドが無くなったことを判定する。 そして、時刻t+1になると、コントローラ4は、NAND型フラッシュメモリ5にレジュームコマンドを送信することによって、プログラムコマンドP1の実行を再開する。このとき、VTPSはリセットされている。コマンドキュー61には、いずれのリードコマンドも格納されていない。
次いで、時刻t+2になると、リードコマンドR6が、コマンドキュー61に格納される。これにより、RinQの値が1になる。コントローラ4は、更新されたRinQの値がMNVTに未だ達していないことを判定すると、プログラムコマンドP1を中断させるためのサスペンドコマンドを発行しないことを決定する。
そして、時刻t+6になると、コントローラ4は、プログラムコマンドP1の実行が再開された時刻t+1から経過した時間がMXSIに達したことを判定する。そして、RinQの値が1以上であるため、コントローラ4は、第2のサスペンド条件が満たされたと判定する。
時刻t+7になると、コントローラ4は、NAND型フラッシュメモリ5にサスペンドコマンドを送信することで、プログラムコマンドP1の実行を中断する。そして、コントローラ4は、リードコマンドR6を実行する。VTPSは、1になる。そして、RinQの値が、0になる。 時刻t+8になると、コントローラ4は、NAND型フラッシュメモリ5にレジュームコマンドを発行することで、中断されていたプログラムコマンドP1の実行を再開させる。このとき、VTPSは、リセットされている。コマンドキュー61には、いずれのリードコマンドも格納されていない。
次に、プログラムコマンドのサスペンド中に実行されたリードコマンドの数が、MXVTPSに達したことに応じて、中断されていたプログラムコマンドの実行が再開される動作について説明する。図9は、実施形態に係るメモリシステムにおいて、プログラムコマンドが中断されている際に実行されたリードコマンドの数に応じて、中断されていたプログラムコマンドの実行が再開される動作について説明する図である。
まず、時刻tにおいて、コントローラ4は、プログラムコマンドP1を実行している。そして、コマンドキュー61に格納されているリードコマンドの数(RinQ)は、2である。
次いで、時刻t+1において、リードコマンドR3およびリードコマンドR4が、コマンドキュー61に格納される。これにより、RinQの値は、4になる。コントローラ4は、更新されたRinQの値がMNVTに達したことを判定すると、プログラムコマンドP1を中断させるためのサスペンドコマンドをNAND型フラッシュメモリ5に発行することを決定する。
そして、時刻t+2になると、コントローラ4は、サスペンドコマンドをNAND型フラッシュメモリ5に送信することで、プログラムコマンドP1の実行を中断する。コントローラ4は、リードコマンドR1を実行する。このサスペンド中に実行されたリードコマンドの数(VTPS)は、1である。コマンドキュー61には、リードコマンドR2、R3およびR4が格納されているため、RinQは、3である。
時刻t+3になると、コントローラ4は、リードコマンドR2を実行する。VTPSは、2である。コマンドキュー61には、リードコマンドR3およびR4が格納されているため、RinQは、2である。
時刻t+4において、リードコマンドR5~R10がコマンドキュー61に格納される。そして、コントローラ4は、リードコマンドR3を実行する。VTPSは、3である。コマンドキュー61には、リードコマンドR4~R10が格納されているため、RinQは、7である。
次いで、時刻t+5において、コントローラ4は、リードコマンドR4を実行する。VTPSは、4である。コマンドキュー61には、リードコマンドR5~R10が格納されているため、RinQは、6である。
時刻t+6において、コントローラ4は、リードコマンドR5を実行する。VTPSは、5である。コマンドキュー61には、リードコマンドR6~R10が格納されているため、RinQは、5である。
時刻t+7において、コントローラ4は、リードコマンドR6を実行する。VTPSは、6である。コマンドキュー61には、リードコマンドR7~R10が格納されているため、RinQは、4である。
時刻t+8において、コントローラ4は、リードコマンドR7を実行する。VTPSは、7である。コマンドキュー61には、リードコマンドR8、R9、およびR10が格納されているため、RinQは、3である。
時刻t+9において、コントローラ4は、リードコマンドR8を実行する。VTPSは、8である。コマンドキュー61には、リードコマンドR9、およびR10が格納されているため、RinQは、2である。ここで、コントローラ4は、VTPSが、最大累積リード数(MXVTPS)に達したことを判定する。VTPSがMXVTPSに達したことを判定したコントローラ4は、NAND型フラッシュメモリ5に中断されているプログラムコマンドP1の実行を再開させるレジュームコマンドを発行することを決定する。
時刻t+10になると、コントローラ4は、レジュームコマンドをNAND型フラッシュメモリ5に送信することで、プログラムコマンドP1の実行を再開する。VTPSの値は、リセットされる。そして、未実行のリードコマンドの数(RinQ)は、2である。
次に、スケジューラ421が、累積重みを使用して、複数の入力のうちから優先度の高い入力を選択する場合について説明する。図10は、実施形態に係るメモリシステムにおいて、累積重みを使用したスケジューリング動作を実行するスケジューラを示す図である。
スケジューラ421は、図5で説明した累積リード(VTPS)、未実行のリードコマンドの数(RinQ)、および経過時間(T)に加えて、累積重み(VT)をテーブルT#0を用いて管理する。さらに、スケジューラ421は、リードコマンドの重み(Wr)の他に、プログラムコマンドの重み(Wp)、およびイレーズコマンドの重み(We)をテーブルT#1を用いて管理していてもよい。あるいは、スケジューラ421は、各コマンドに含まれている重みを使用してもよい。
ここでは、スケジューラ421が、累積重み(VT)が初期値(例えば、0)よりも大きい場合にinput#0(第1コマンドグループ)を高優先度の入力(コマンドグループ)として選択し、累積重みが初期値よりも小さい場合にinput#1(第2コマンドグループ)を高優先度の入力(コマンドグループ)として選択するというポリシー(ポリシー#1)を利用するケースについて説明する。
この場合、累積重みは、第1のコマンドグループの一つのリードコマンドの実行が開始された場合、一つのリードコマンドに関連付けられた重みをこの累積重みから減算することによって得られる値に更新される。
また、第2のコマンドグループの一つの消去/プログラムコマンドの実行が開始された場合には、累積重みは、この一つの消去/プログラムコマンドに関連付けられた重みをこの累積重みに加算することによって得られる値に更新される。
累積重みの値が初期値よりも大きいという条件を満たしている間は、第1のコマンドグループが高優先度のコマンドグループとして選択される。つまり、累積重みの値が初期値よりも大きい間は、input#0に入力される各リードコマンドがinput#1に入力される各消去コマンドおよび各プログラムコマンドよりも優先して実行される。一方、累積重みの値が初期値よりも小さいという条件を満たしている間は、第2のコマンドグループが高優先度のコマンドグループとして選択される。つまり、累積重みの値が初期値よりも小さい間は、input#1に入力される各消去コマンドおよび各プログラムコマンドがinput#0に入力される各リードコマンドよりも優先して実行される。
したがって、例えば、各リードコマンドに関連付けられた重みを小さな値に設定した場合には、たとえ第1のコマンドグループが高優先度のコマンドグループとして一旦選択されても、累積重みは僅かしか減少されない。第1のコマンドグループの一つのリードコマンドの実行が開始されても、累積重みは僅かに減少するだけであるので、累積重みは初期値よりも大きい値に維持されやすくなり、この結果、第1のコマンドグループが高優先度の入力として再び選択されやすくなる。
また、各消去/プログラムコマンドに関連付けられた重みを大きな値に設定した場合には、第2のコマンドグループが高優先度の入力として一旦選択されると、累積重みは大きく増加される。したがって、各消去/プログラムコマンドに関連付けられた重みを大きな値に設定した場合には、第2のコマンドグループが高優先度のコマンドグループとして一旦選択されると、累積重みが大きく増加され、これによってしばらくの間は、第2のコマンドグループは高優先度の入力として選択され難くなる。
よって、例えば、各リードコマンドに関連付けられた重みを1に設定し、且つ各消去/プログラムコマンドに関連付けられた重みを30に設定した場合には、リードコマンドを、消去/プログラムコマンドの30倍の頻度で実行することが可能となる。
なお、累積重みが初期値に等しい場合には、第1のコマンドグループのリードコマンドと第2のコマンドグループの消去/プログラムコマンドのどちらが実行されてもよい。また、たとえ累積重みが初期値よりも小さい場合であっても、第2のコマンドグループに消去/プログラムコマンドがない場合には、第1のコマンドグループのリードコマンドが実行される。同様に、たとえ累積重みが初期値よりも大きい場合であっても、第1のコマンドグループにリードコマンドがない場合には、第2のコマンドグループの消去/プログラムコマンドが実行される。
また、累積重みの値がある上限値に達した後は、たとえ新規の消去/プログラムコマンドの実行が開始されても、累積重みの値は増加されず、累積重みの値は上限値に維持される。同様に、累積重みの値がある下限値に達した後は、たとえ新規のリードコマンドの実行が開始されても、累積重みの値は減少されず、累積重みの値は下限値に維持される。
これまでの説明ではポリシー#1を利用する場合を説明したが、ポリシー#1を利用する代わりに、ポリシー#2が利用されてもよい。
ポリシー#2では、累積重みが初期値(例えば、0)よりも小さい場合に第1のコマンドグループが高優先度のコマンドグループとして選択され、累積重みが初期値よりも大きい場合に第2のコマンドグループが高優先度のコマンドグループとして選択される。
ポリシー#2が利用されるケースにおいては、累積重みは、第1のコマンドグループの一つのリードコマンドの実行が開始された場合、累積重みは、一つのリードコマンドに関連付けられた重みをこの累積重みに加算することによって得られる値に更新される。また、第2のコマンドグループの一つの消去/プログラムコマンドの実行が開始された場合には、累積重みは、この一つの消去/プログラムコマンドに関連付けられた重みをこの累積重みから減算することによって得られる値に更新される。
また、ポリシー#2が利用されるケースにおいては、累積重みの値が初期値よりも小さいという条件を満たしている間は、第1のコマンドグループが高優先度のコマンドグループとして選択される。つまり、累積重みの値が初期値よりも小さい間は、第1のコマンドグループの各リードコマンドが第2のコマンドグループの各消去コマンドおよび各プログラムコマンドよりも優先して実行される。
一方、累積重みの値が初期値よりも大きいという条件を満たしている間は、第2のコマンドグループが高優先度のコマンドグループとして選択される。つまり、累積重みの値が初期値よりも大きい間は、第2のコマンドグループに入力される各消去/プログラムコマンドが第1のコマンドグループに入力される各リードコマンドよりも優先して実行される。
ここでは、各リードコマンドは、1の重みに関連付けられており、各消去コマンドは、10の重みに関連付けられており、各プログラムコマンドは、30の重みに関連付けられている。これにより、リードコマンド、消去コマンド、およびプログラムコマンドのそれぞれが処理される頻度は、1:10:30になり得る。この比率は、各コマンドの実行に必要とされる時間などに基づいて決定されてもよい。
そして、コマンドキュー61は、累積重み(VT)の値に応じて、格納可能なリードコマンドの数が変更されてもよい。累積重み(VT)の値が、input#0が高優先度の入力として選択される条件(VT>0)を満たしている場合、コントローラ4は、コマンドキュー61に格納可能なリードコマンドの数の上限を、累積重み(VT)の値に比例する数に設定する。例えば、VTが30で、各リードコマンドの重みが1である場合、コマンドキュー61に格納可能なリードコマンドの数の上限は30に設定される。また、VTが30で、各リードコマンドの重みが2である場合、コマンドキュー61に格納可能なリードコマンドの数の上限は15に設定される。この結果、コマンドキュー61のサイズを必要以上に大きくすることなく、実行されるリードコマンドの数と実行される消去/プログラムコマンドの数との間の比率を目的の時間配分に対応する比率に近づけるための制御を効率よく実行することができる。また、累積重みの値が、input#0が高優先度の入力として選択されるという条件を満たさない場合(VT≦0)、コントローラ4は、コマンドキュー61に格納可能なリードコマンドの数の上限を1に設定する。これにより、累積重み(VT)が、第1の入力が高優先度の入力として選択される条件を満たしていない間(VT≦0)は、コマンドキュー61に格納可能なリードコマンドの最大数を1に維持することができる。よって、例えば、input#1から消去/プログラムコマンドが無くなった直後に、コマンドキュー61内のリードコマンドを即座に実行することができる。
次に、累積重み(VT)の更新動作について説明する。図11は、スケジューラのinput#0のリードコマンドの実行が開始された場合に実行されるVT更新動作と、スケジューラのinput#1の消去またはプログラムコマンドの実行が開始された場合に実行されるVT更新動作とを示す図である。ここでは、ポリシー#1が使用される場合を想定する。
最初に、図11の(A)を参照して、input#0に3つのリードコマンドが連続して入力され、input#1に消去コマンドあるいはプログラムコマンドがまったく入力されない場合について説明する。input#0に入力される各リードコマンドにおいては、重みWr(=1)が設定されている。フラッシュストレージデバイス1は、これらのリードコマンドを連続的に実行する。
最初に、時刻tにおいて、VTの値は初期値(例えば0)に設定される。ここでは、input#1に消去コマンドあるいはプログラムコマンドがまったく入力されない場合を想定しているため、次の実行対象のコマンドとしてinput#0の最初のリードコマンドが選択される。時刻t+1において、最初のリードコマンドの実行が開始されると、この最初のリードコマンドに対応する重みWrがVTから減算され、VT=0-1=-1になる。
最初のリードコマンドの実行が完了すると、時刻t+2において、2番目のリードコマンドの実行が開始される。2番目のリードコマンドの実行が開始されると、この2番目のリードコマンドに対応する重みWrがVTから減算され、VT=-1-1=-2になる。
2番目のリードコマンドの実行が完了すると、時刻t+3において、3番目のリードコマンドの実行が開始される。3番目のリードコマンドの実行が開始されると、この3番目のリードコマンドに対応する重みWrがVTから減算され、VT=-2-1=-3になる。
このようにして、各リードコマンドの実行開始の度、各リードコマンドに対応する重みを使用してVTの値の更新が行われる。
次に、図11の(B)を参照して、input#0にリードコマンドがまったく入力されず、input#1にプログラムコマンド、消去コマンド、プログラムコマンドがこの順で入力される場合について説明する。
最初に、時刻tにおいて、VTの値は初期値(例えば0)に設定される。ここでは、input#0にリードコマンドがまったく入力されない場合を想定しているため、次の実行対象のコマンドとしてinput#1の最初のコマンド(ここでは、プログラムコマンド)が選択される。時刻t+1において、プログラムコマンドの実行が開始されると、このプログラムコマンドに対応する重みWp(=30)がVTに加算され、VT=0+30=+30になる。
このプログラムコマンドの実行が完了すると、時刻t+2において、次のコマンド(ここでは、消去コマンド)の実行が開始される。消去コマンドの実行が開始されると、この消去コマンドに対応する重みWe(=10)がVTに加算され、VT=30+10=+40になる。
このプログラムコマンドの実行が完了すると、時刻t+3において、さらに次のコマンド(ここでは、プログラムコマンド)の実行が開始される。VTの上限値が+40に設定されている場合においては、このプログラムコマンドの実行が開始されても、VTの値は上限値(=+40)に維持される。
このようにして、プログラムコマンドあるいは消去コマンドの実行が開始される度に、プログラムコマンドあるいは消去コマンドに対応する重みを使用してVTの値の更新が行われる。
次に、コントローラ4が、累積重みの値に基づいて、高優先度の入力を選択する動作について説明する。図12は、VTの値に基づいて、input#0とinput#1から、高優先度の入力を選択する動作を示す図である。図12の(A)、(B)の各々においては、二つの入力input#0、input#1の各々にコマンドが入力されている場合が想定されている。
図12の(A)では、VTの値が0より大きい場合が例示されている。VTが0より大きい場合、スケジューラ421は、input#0を高優先度の入力として選択し、input#0に入力されるコマンド(リードコマンド)の実行を開始する。
図12の(B)では、VTの値が0より小さい場合が例示されている。VTが0より小さい場合、スケジューラ421は、input#1を高優先度の入力として選択し、input#1に入力されるコマンド(ここではプログラムコマンド)の実行を開始する。
次に、コントローラ4が、累積重みに基づいて、リードコマンドと、プログラムコマンドとを実行する動作について説明する。図13は、input#0に入力される幾つかのリードコマンドの実行が完了した後に、input#1に入力されるプログラムコマンドの実行を開始する動作を示す図である。
最初に、時刻tにおいて、VTの値は初期値(例えば0)に設定される。ここで、input#0に2つのリードコマンドが連続して入力され、input#1に消去コマンドあるいはプログラムコマンドがまったく入力されない場合を想定する。
時刻t+1において、input#0の最初のリードコマンドの実行が開始され、VTからこの最初のリードコマンドに対応するWr(=1)が減算され、VT=0-1=-1となる。次に、時刻t+2において、2番目のリードコマンドの実行が開始され、VTからこの2番目のリードコマンドに対応するWr(=1)が減算され、VT=-1-1=-2となる。ここで、input#1にプログラムコマンドが入力されると、スケジューラ421は、VT<0であるため、input#1を高優先度の入力として選択する。
したがって、時刻t+3において、プログラムコマンドの実行が開始され、VTにこのプログラムコマンドに対応するWp(=30)が加算され、VT=-2+30=+28となる。ここで、input#0に後続のリードコマンドが入力された場合を想定する。この場合、このプログラムコマンドの実行が完了すると、スケジューラ421は、VT>0であるため、input#0を高優先度の入力として選択する。
そして、時刻t+4において、この後続のリードコマンドの実行が開始され、VTからこの後続のリードコマンドに対応するWr(=1)が減算され、VT=+28-1=+27となる。
このように、各コマンドの重みに応じて累積重みVTの値の更新を行いながら、各コマンドが実行される。
次に、累積重みの値に基づいて、サスペンド中のプログラムコマンドの実行を再開する動作について説明する。図14は、実施形態に係るメモリシステムにおいて、プログラムコマンドの実行中に受け付けられたリードコマンドの数に応じて、実行中のプログラム動作を中断し、中断中に更新されたVTの値に応じて、中断されているプログラム動作の実行を再開する動作を示す図である。
まず、時刻tにおいて、コントローラ4は、プログラムコマンドP1を実行している。ここで、累積重み(VT)の値は、7である。そして、コマンドキュー61に格納されている未実行のリードコマンドの数(RinQ)は、2である。
このとき、時刻t+1において、リードコマンドR3およびリードコマンドR4が、コマンドキュー61に格納される。コマンドキュー61には、リードコマンドR1~R4が格納されているため、RinQの値は、4である。これにより、コントローラ4は、RinQの値がMNVTに達しており、VTの値が0以上であることを判定する。コントローラ4は、実行中のプログラムコマンドP1を中断させるためのサスペンドコマンドをNAND型フラッシュメモリ5に発行することを決定する。そして、サスペンドコマンドを受信したNAND型フラッシュメモリ5は、プログラムコマンドP1の実行を中断する。
そして、時刻t+2において、コントローラ4は、サスペンドコマンドをNAND型フラッシュメモリ5に送信することで、プログラムコマンドP1の実行を中断する。コントローラ4は、リードコマンドR1を実行する。ここでは、各リードコマンドに割り当てられている重みの値が、1である場合を想定する。VTの値は、6(=7-1)である。このサスペンド中に実行されたリードコマンドの数(VTPS)は、1である。そして、RinQの値は、3である。
時刻t+3において、コントローラ4は、リードコマンドR2を実行する。VTの値は、5(=6-1)である。VTPSは、2である。RinQは、2である。
次いで、時刻t+4において、リードコマンドR5~R10が、コマンドキュー61に格納される。コントローラ4は、リードコマンドR3を実行する。VTの値は、4(=5-1)である。VTPSは、3である。RinQは、7である。
時刻t+5において、コントローラ4は、リードコマンドR4を実行する。VTの値は、3(=4-1)である。VTPSは、4である。RinQは、6である。
時刻t+6において、コントローラ4は、リードコマンドR5を実行する。VTの値は、2(=3-1)である。VTPSは、5である。RinQは、5である。
時刻t+7において、コントローラ4は、リードコマンドR6を実行する。VTの値は、1(=2-1)である。VTPSは、6である。RinQは、4である。
時刻t+8において、コントローラ4は、リードコマンドR7を実行する。VTの値は、0(=1-1)である。VTPSは、7である。RinQは、3である。ここで、コントローラ4は、VTの値が0以下になったことに応じて、中断されているプログラムコマンドP1の実行を再開させるレジュームコマンドをNAND型フラッシュメモリ5に発行することを決定する。 時刻t+9において、コントローラ4は、プログラムコマンドP1の実行を再開する。プログラムコマンドP1は、既に開始されていたため、VTの加算を実行しない。そのため、VTの値は、0である。VTPSの値は、リセットされている。そして、RinQの値は、3である。
次に、スケジューリング動作の手順について説明する。図15は、サスペンド動作と再開動作とを含むスケジューリング動作の手順を示すフローチャートである。
ここでは、第2の入力が選択されている場合を想定する。コントローラ4は、プログラムコマンドまたは消去コマンドを実行する(ステップS101)。コントローラ4は、プログラムコマンドまたは消去コマンドをNAND型フラッシュメモリ5に送信することで、プログラムコマンドまたは消去コマンドを実行する。
コントローラ4は、未実行のリードコマンドの数(RinQ)が最小リード数(MNVT)に達しているか否かを判定する(ステップS102)。コントローラ4は、コマンドキュー61に格納されているリードコマンドそれぞれに関連付けられた重みの合計を、RinQの値として管理していてもよい。
RinQの値がMNVTに達していない場合、つまり第1のサスペンド条件が満たされていない場合(ステップS102でNo)、コントローラ4は、未実行のリードコマンドが一つ以上あり、且つプログラム動作あるいは消去動作の開始時点または再開時点からの経過時間が最大サスペンド間隔(MXSI)に達しているという第2のサスペンド条件が満たされているか否かを判定する(ステップS103)。
第2のサスペンド条件が満たされていない場合(ステップS103でNo)、コントローラ4は、実行中のプログラム動作または消去動作を続行する(ステップS104)。
そして、コントローラ4は、実行中のプログラム動作または消去動作が完了したか否かを判定する(ステップS105)。
実行中のプログラム動作または消去動作が完了した場合(ステップS105でYes)、コントローラ4は、このプログラム動作または消去動作に対するサスペンド動作を制御するスケジューリング動作を終了する。
実行中のプログラム動作または消去動作が完了していない場合(ステップS105でNo)、コントローラ4は、ステップS102に戻る。コントローラ4は、実行中のプログラム動作または消去動作について、サスペンド動作を実行するか否かを再度判定する。
RinQの値がMNVTに達した場合(ステップS102でYes)、あるいは、未実行のリードコマンドが一つ以上あり、且つ経過時間がMXSIに達した場合(ステップS103でYes)、コントローラ4は、実行中のプログラム動作または消去動作を中断する(ステップS106)。コントローラ4は、サスペンドコマンドをNAND型フラッシュメモリ5に送信する。
コントローラ4は、リードコマンドを実行する(ステップS106)。コントローラ4は、リードコマンドが実行されたことに応じて、RinQの値と、このサスペンド中に実行されたリードコマンドの数(VTPS)とを更新する。
そして、コントローラ4は、未実行のリードコマンドが一つ以上あるか否かを判定する(ステップS108)。
未実行のリードコマンドが一つ以上ある場合(ステップS108でYes)、コントローラ4は、VTPSが最大累積リード数(MXVTPS)に達したか否かを判定する(ステップS109)。
VTPSがMXVTPSに達していない場合(ステップS109でNo)、コントローラ4は、コマンドキュー61に格納されている次のリードコマンドを、さらに実行する(ステップS107)。
未実行のリードコマンドがない(ステップS108でNo)、あるいはVTPSがMXVTPSに達した場合(ステップS109でYes)、コントローラ4は、中断されているプログラム動作または消去動作を再開する(ステップS110)。コントローラ4は、ステップS106で中断されたプログラム動作または消去動作を再開させるレジュームコマンドをNAND型フラッシュメモリ5に発行する。
そして、コントローラ4は、ステップS105に移行する。
次に、累積重みを使用する場合のスケジュール動作の手順について説明する。図16は、累積重みを使用した、サスペンド動作と再開動作とを含むスケジューリング動作の手順を示すフローチャートである。
ここでは、第2の入力が選択されている場合を想定する。コントローラ4は、プログラムコマンドまたは消去コマンドを実行する(ステップS201)。コントローラ4は、プログラムコマンドまたは消去コマンドをNAND型フラッシュメモリ5に送信することで、プログラムコマンドまたは消去コマンドを実行する。
コントローラ4は、累積重み(VT)の値が0以下であるか否かを判定する(ステップS202)。
VTが0より大きい場合(ステップS202でNo)、コントローラ4は、未実行のリードコマンドの数(RinQ)が最小リード数(MNVT)に達しているか否かを判定する(ステップS203)。コントローラ4は、コマンドキュー61に格納されているリードコマンドそれぞれに関連付けられた重みの合計を、RinQの値として管理していてもよい。
RinQの値がMNVTに達していない場合、つまり第1のサスペンド条件が満たされていない場合(ステップS203でNo)、コントローラ4は、未実行のリードコマンドが一つ以上あり、且つプログラム動作あるいは消去動作の開始時点または再開時点からの経過時間が最大サスペンド間隔(MXSI)に達しているという第2のサスペンド条件が満たされているか否かを判定する(ステップS204)。
VTが0以下である場合(ステップS202でYes)、または、第1のサスペンド条件と第2のサスペンド条件のいずれも満たされていない場合(ステップS204でNo)、コントローラ4は、実行中のプログラム動作または消去動作を続行する(ステップS205)。
そして、コントローラ4は、実行中のプログラム動作または消去動作が完了したか否かを判定する(ステップS206)。
実行中のプログラム動作または消去動作が完了した場合(ステップS206でYes)、コントローラ4は、このプログラム動作または消去動作に対するサスペンド動作を実行するか否かを判定するスケジューリング動作を終了する。
実行中のプログラム動作または消去動作が完了していない場合(ステップS206でNo)、コントローラ4は、ステップS202に戻る。コントローラ4は、実行中のプログラム動作または消去動作について、サスペンド動作を実行するか否かを再度判定する。
VTが0より大きく(ステップS202でNo)、RinQの値がMNVTに達した場合(ステップS203でYes)、あるいは、VTが0より大きく(ステップS202でNo)、未実行のリードコマンドが一つ以上あり、且つ経過時間がMXSIに達した場合(ステップS204でYes)、コントローラ4は、実行中のプログラム動作または消去動作を中断する(ステップS207)。コントローラ4は、サスペンドコマンドをNAND型フラッシュメモリ5に送信する。
コントローラ4は、リードコマンドを実行する(ステップS208)。コントローラ4は、リードコマンドが実行されたことに応じて、RinQの値と、このサスペンド中に実行されたリードコマンドの数(VTPS)とを更新する。
そして、コントローラ4は、VTが0以下であるか否かを判定する(S209)。
VTが0より大きい場合(ステップS209でNo)、コントローラ4は、未実行のリードコマンドが一つ以上あるか否かを判定する(ステップS210)。
未実行のリードコマンドが一つ以上ある場合(ステップS210でYes)、コントローラ4は、VTPSが最大累積リード数(MXVTPS)に達したか否かを判定する(ステップS211)。
VTPSがMXVTPSに達していない場合(ステップS211でNo)、コントローラ4は、コマンドキュー61に格納されている次のリードコマンドを、さらに実行する(ステップS208)。
VTが0以下(ステップS209でYes)、未実行のリードコマンドがない(ステップS210でNo)、あるいは、VTPSがMXVTPSに達した場合(ステップS211でYes)、コントローラ4は、中断されているプログラム動作または消去動作を再開する(ステップS212)。コントローラ4は、ステップS106で中断されたプログラム動作または消去動作を再開させるレジュームコマンドをNAND型フラッシュメモリ5に送信する。
そして、コントローラ4は、実行中のプログラム動作または消去動作が完了したか否かを判定する(ステップS206)。
以上で説明したように、本実施形態では、コントローラ4は、フラッシュストレージデバイス1の状況に合わせて、NAND型フラッシュメモリ5に送出すべきコマンドを柔軟に選択することができる。具体的には、コントローラ4は、コマンドキュー61に格納されている未実行のリードコマンドの数(RinQ)と、プログラムコマンドまたは消去コマンドの実行が開始または再開されてからの経過時間(T)と、サスペンド中に実行されたリードコマンドの数(VTPS)とを管理することで、消去/プログラムコマンドの中断および再開を制御する。
コントローラ4は、RinQの値がMNVT以上のときに、実行中の消去/プログラムコマンドを中断させることで、消去/プログラムコマンドの一度のサスペンドの間に、MNVT以上の数のリードコマンドを実行することができる。これにより、リードコマンドのレイテンシの変動を低減できる。
また、コントローラ4は、サスペンドの間に実行されたリードコマンドの数(VTPS)がMXVTPS(>MNVT)に達した際に、中断された消去/プログラムコマンドの実行を再開する。これにより、一度のサスペンドの間に実行されるリードコマンドの数の上限を設定することができる。なお、NAND型フラッシュメモリ5において、中断中に実行可能なリードコマンドの数または中断中に実行可能なリードコマンドそれぞれの重みの合計の上限値が物理的制約として規定されている場合には、コントローラ4は、MXVTPSと、NAND型フラッシュメモリ5において規定されている上限値のうちで、より小さい値を、一度のサスペンドの間に実行されるリードコマンドの数の上限として使用する。
また、コントローラ4は、RinQが1以上であって、経過時間TがMXSIに達した際にも、実行中の消去/プログラムコマンドを中断させることで、たとえ未実行のリードコマンドの数がMNVT未満である場合であっても、リードコマンドのレイテンシの増加を抑制できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…フラッシュストレージデバイス、2…ホスト、3…エンドユーザ端末、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、41…ホストインタフェース、42…CPU、43…DMAC、44…ECCエンコード/デコード部、45…NANDインタフェース、46…DRAMインタフェース、61…コマンドキュー、62…ブロック管理テーブル、421…スケジューラ、422…サスペンドマネージャ。
Claims (10)
- ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに送出すべきリードコマンドを含む第1のコマンドグループと、前記不揮発性メモリに送出すべき消去コマンドと前記不揮発性メモリに送出すべきプログラムコマンドのうち少なくとも一方が含まれる第2のコマンドグループとを受け付け、前記第1のコマンドグループと前記第2のコマンドグループとのうちから、コマンドが実行されるべきコマンドグループを選択し、前記選択したコマンドグループに含まれるコマンドの実行を開始するように構成されたコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリにおいて実行されているコマンドが消去/プログラムコマンドであり、且つ、(i)前記第1のコマンドグループに含まれるリードコマンドの数もしくは前記第1のコマンドグループに含まれる前記リードコマンドそれぞれに関連付けられている重みの合計が第1の値以上であるという第1の条件、または(ii)前記第1のコマンドグループに一つ以上のリードコマンドが含まれ、且つ前記消去/プログラムコマンドの実行が開始あるいは再開されてからの経過時間が第2の値以上であるという第2の条件のいずれかが満たされた場合、前記不揮発性メモリにサスペンドコマンドを送信することによって前記消去/プログラムコマンドの実行を中断し、
前記第1のコマンドグループに含まれるリードコマンドの実行を開始する動作を、前記第1のコマンドグループにリードコマンドが無くなるか、または前記サスペンドコマンドによる中断中に実行されたリードコマンドの数もしくは前記中断中に実行されたリードコマンドそれぞれに関連付けられている重みの合計が第3の値以上になるまで繰り返してから、前記中断された消去/プログラムコマンドの実行を再開するように構成されている、メモリシステム。 - 前記不揮発性メモリにおいて、前記中断中に実行可能なリードコマンドの数または前記中断中に実行可能なリードコマンドそれぞれの重みの合計の上限値が規定されている場合、
前記コントローラは、
前記ホストによって前記第3の値として指定された値と、前記不揮発性メモリにおいて規定されている前記上限値のうちで、より小さい値を、前記第3の値として使用するように構成されている請求項1に記載のメモリシステム。 - 前記不揮発性メモリにおいて、一つの消去/プログラムコマンドの実行中に許容される中断の回数または前記一つの消去/プログラムコマンドの実行中に許容される中断時間の合計についての上限値が規定されている場合、
前記コントローラは、前記消去/プログラムコマンドに対する中断の回数または中断時間の合計が前記上限値に達した後は、前記第1の条件および前記第2の条件にかかわらず、前記消去/プログラムコマンドの実行を中断せずに前記消去/プログラムコマンドの実行を継続するように構成されている請求項1に記載のメモリシステム。 - 前記不揮発性メモリにおいて、一つの消去/プログラムコマンドの実行の開始または再開から次回の中断までの間に確保すべきインターバル時間が規定されている場合、
前記コントローラは、前記消去/プログラムコマンドの実行の開始または再開からの経過時間が前記インターバル時間に満たない間は、前記第1の条件および前記第2の条件にかかわらず、前記消去/プログラムコマンドの実行を中断せずに前記消去/プログラムコマンドの実行を継続するように構成されている請求項1に記載のメモリシステム。 - 前記コントローラは、
累積重みが初期値よりも大きい場合に、前記第1のコマンドグループを前記第2のコマンドグループよりも優先して選択することによって、前記第1のコマンドグループのリードコマンドを実行し、
前記リードコマンドを実行する際に、前記リードコマンドに関連付けられている重みを、前記累積重みから減算し、
前記累積重みが前記初期値よりも小さい場合に、前記第2のコマンドグループを前記第1のコマンドグループよりも優先して選択することによって、前記第2のコマンドグループの消去/プログラムコマンドを実行し、
前記消去/プログラムコマンドを実行する際に、前記消去/プログラムコマンドに関連付けられている重みを、前記累積重みに加算し、
前記不揮発性メモリにおいて実行されているコマンドが消去/プログラムコマンドであり、前記累積重みが前記初期値よりも大きく、且つ、前記第1の条件または前記第2の条件のうちのいずれかが満たされている場合、前記不揮発性メモリにサスペンドコマンドを送信することによって前記消去/プログラムコマンドの実行を中断し、
前記第1のコマンドグループのリードコマンドの実行を開始する動作を、前記累積重みが前記初期値以下になるか、前記第1のコマンドグループにリードコマンドが無くなるか、または前記消去/プログラムコマンドの中断中に実行されたリードコマンドの数もしくは前記中断中に実行されたリードコマンドそれぞれに関連付けられている重みの合計が前記第3の値以上になるまで繰り返してから、前記中断されている消去/プログラムコマンドの実行を再開するように構成されている、請求項1に記載のメモリシステム。 - 前記コントローラは、前記不揮発性メモリに送出すべき一つ以上のリードコマンドを格納可能なコマンドキューを含み、
前記累積重みの値が前記初期値よりも大きい場合、前記コマンドキューに格納可能なリードコマンドの数の上限を、前記累積重みの値に比例する数に設定し、
前記累積重みの値が前記初期値以下である場合、前記コマンドキューに格納可能なリードコマンドの数の上限を1に設定するように構成されている、請求項5に記載のメモリシステム。 - 前記コントローラは、
累積重みが初期値よりも小さい場合に、前記第1のコマンドグループを前記第2のコマンドグループよりも優先して選択することによって、前記第1のコマンドグループのリードコマンドを実行し、
前記リードコマンドを実行する際に、前記リードコマンドに関連付けられている重みを、前記累積重みに加算し、
前記累積重みが前記初期値よりも大きい場合に、前記第2のコマンドグループを前記第1のコマンドグループよりも優先して選択することによって、前記第2のコマンドグループの消去/プログラムコマンドを実行し、
前記消去/プログラムコマンドを実行する際に、前記消去/プログラムコマンドに関連付けられている重みを、前記累積重みから減算し、
前記不揮発性メモリにおいて実行されているコマンドが消去/プログラムコマンドであり、前記累積重みが前記初期値よりも小さく、且つ、前記第1の条件または前記第2の条件のうちのいずれかが満たされている場合、前記不揮発性メモリにサスペンドコマンドを送信することによって前記消去/プログラムコマンドの実行を中断し、
前記第1のコマンドグループのリードコマンドの実行を開始する動作を、前記累積重みが前記初期値以上になるか、前記第1のコマンドグループにリードコマンドが無くなるか、または前記消去/プログラムコマンドの中断中に実行されたリードコマンドの数もしくは前記中断中に実行されたリードコマンドそれぞれに関連付けられている重みの合計が前記第3の値以上になるまで繰り返してから、前記中断されている消去/プログラムコマンドの実行を再開するように構成されている、請求項1に記載のメモリシステム。 - 前記コントローラは、前記不揮発性メモリに送出すべき一つ以上のリードコマンドを格納可能なコマンドキューを含み、
前記累積重みの値が前記初期値よりも小さい場合、前記コマンドキューに格納可能なリードコマンドの数の上限を、前記累積重みの値に比例する数に設定し、
前記累積重みの値が前記初期値以上である場合、前記コマンドキューに格納可能なリードコマンドの数の上限を1に設定するように構成されている、請求項7に記載のメモリシステム。 - 前記不揮発性メモリは、リードコマンド、消去コマンド、およびプログラムコマンドを実行するように構成され、前記リードコマンドの実行に要する時間は、前記消去コマンドの実行に要する時間および前記プログラムコマンドの実行に要する時間のどちらよりも短い、請求項1に記載のメモリシステム。
- 不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリに送出すべきリードコマンドを含む第1のコマンドグループと、前記不揮発性メモリに送出すべき消去コマンドと前記不揮発性メモリに送出すべきプログラムコマンドのうち少なくとも一方が含まれる第2のコマンドグループとを受け付けることと、
前記第1のコマンドグループと前記第2のコマンドグループとのうちから、コマンドが実行されるべきコマンドグループを選択することと、
前記選択したコマンドグループに含まれるコマンドの実行を開始すること、
前記不揮発性メモリにおいて実行されているコマンドが消去/プログラムコマンドであり、且つ、(i)前記第1のコマンドグループに含まれるリードコマンドの数もしくは前記第1のコマンドグループに含まれる前記リードコマンドそれぞれに関連付けられている重みの合計が第1の値以上であるという第1の条件、または(ii)前記第1のコマンドグループに一つ以上のリードコマンドが含まれ、且つ前記消去/プログラムコマンドの実行が開始あるいは再開されてからの経過時間が第2の値以上であるという第2の条件のいずれかが満たされた場合、前記不揮発性メモリにサスペンドコマンドを送信することによって前記消去/プログラムコマンドの実行を中断することと、
前記第1のコマンドグループに含まれるリードコマンドの実行を開始する動作を、前記第1のコマンドグループにリードコマンドが無くなるか、または前記消去/プログラムコマンドの中断中に実行されたリードコマンドの数もしくは前記中断中に実行されたリードコマンドそれぞれに関連付けられている重みの合計が第3の値以上になるまで繰り返してから、前記中断されている消去/プログラムコマンドの実行を再開することと、を具備する制御方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022012900A JP2023111190A (ja) | 2022-01-31 | 2022-01-31 | メモリシステムおよび制御方法 |
US17/931,300 US20230244383A1 (en) | 2022-01-31 | 2022-09-12 | Memory system and method of controlling nonvolatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022012900A JP2023111190A (ja) | 2022-01-31 | 2022-01-31 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023111190A true JP2023111190A (ja) | 2023-08-10 |
Family
ID=87432003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022012900A Pending JP2023111190A (ja) | 2022-01-31 | 2022-01-31 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230244383A1 (ja) |
JP (1) | JP2023111190A (ja) |
-
2022
- 2022-01-31 JP JP2022012900A patent/JP2023111190A/ja active Pending
- 2022-09-12 US US17/931,300 patent/US20230244383A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230244383A1 (en) | 2023-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7091203B2 (ja) | メモリシステムおよび制御方法 | |
TWI741671B (zh) | 記憶體系統 | |
JP7443195B2 (ja) | メモリシステムおよび制御方法 | |
JP6785204B2 (ja) | メモリシステムおよび制御方法 | |
JP2018049522A (ja) | メモリシステム及び制御方法 | |
JP7353934B2 (ja) | メモリシステムおよび制御方法 | |
JP2019185596A (ja) | メモリシステムおよび制御方法 | |
JP7337006B2 (ja) | メモリシステムおよび制御方法 | |
JP2019191909A (ja) | メモリシステムおよび制御方法 | |
JP2020123038A (ja) | メモリシステムおよび制御方法 | |
JP7381678B2 (ja) | メモリシステム | |
US20240241644A1 (en) | Storage device and storage system | |
CN110908595B (zh) | 存储装置及信息处理系统 | |
JP2020123039A (ja) | メモリシステムおよび制御方法 | |
JP2023111190A (ja) | メモリシステムおよび制御方法 | |
JP7337228B2 (ja) | メモリシステムおよび制御方法 | |
JP7102482B2 (ja) | メモリシステムおよび制御方法 | |
JP2024131387A (ja) | メモリシステムおよび制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240911 |