JP2019049949A - ストレージデバイス - Google Patents
ストレージデバイス Download PDFInfo
- Publication number
- JP2019049949A JP2019049949A JP2017174930A JP2017174930A JP2019049949A JP 2019049949 A JP2019049949 A JP 2019049949A JP 2017174930 A JP2017174930 A JP 2017174930A JP 2017174930 A JP2017174930 A JP 2017174930A JP 2019049949 A JP2019049949 A JP 2019049949A
- Authority
- JP
- Japan
- Prior art keywords
- command
- threshold
- time
- unit
- storage device
- 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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
-
- 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/0613—Improving I/O performance in relation to throughput
-
- 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
-
- 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]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Debugging And Monitoring (AREA)
- Memory System (AREA)
Abstract
【課題】ホストデバイスに対するレイテンシのばらつきの抑制を図ることができるストレージデバイスを提供することである。【解決手段】実施形態のストレージデバイスは、コマンド受信部と、制御部とを備える。前記コマンド受信部は、ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信する。前記制御部は、前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第1制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第1制御動作とは異なる第2制御動作を行う。【選択図】図3
Description
本発明の実施形態は、ストレージデバイスに関する。
SSD(Solid State Drive)のようなストレージデバイスが知られている。ところで、ストレージデバイスは、ホストデバイスに対するレイテンシのばらつきが大きくなる場合がある。
本発明が解決しようとする課題は、ホストデバイスに対するレイテンシのばらつきの抑制を図ることができるストレージデバイスを提供することである。
実施形態のストレージデバイスは、コマンド受信部と、制御部とを備える。前記コマンド受信部は、ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信する。前記制御部は、前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第1制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第1制御動作とは異なる第2制御動作を行う。
以下、実施形態のストレージデバイスを、図面を参照して説明する。なお以下の説明では、同一または類似の機能を有する構成に同一の符号を付す。そして、それら構成の重複する説明は省略する場合がある。また、本願でいう「XXに基づく」とは、「少なくともXXに基づく」ことを意味し、XXに加えて別の要素に基づく場合も含む。また、「XXに基づく」とは、XXを直接に用いる場合に限定されず、XXに対して演算や加工が行われたものに基づく場合も含む。「XX」は、任意の要素(例えば、任意の情報)である。
(第1の実施形態)
図1は、第1の実施形態のホストデバイス100およびストレージデバイス200の一例を示す図である。ホストデバイス100とストレージデバイス200は、例えば、SATA(Serial Advanced Technology Attachment)インターフェース、SAS(Serial Attached SCSI(Small Computer System Interface))インターフェース、PCIe(PCI Express)インターフェース、またはNVMe(NVM Express ;Non-Volatile Memory Host Controller Interface)インターフェースを用いて接続される。
図1は、第1の実施形態のホストデバイス100およびストレージデバイス200の一例を示す図である。ホストデバイス100とストレージデバイス200は、例えば、SATA(Serial Advanced Technology Attachment)インターフェース、SAS(Serial Attached SCSI(Small Computer System Interface))インターフェース、PCIe(PCI Express)インターフェース、またはNVMe(NVM Express ;Non-Volatile Memory Host Controller Interface)インターフェースを用いて接続される。
まず、ホストデバイス100について説明する。ホストデバイス100は、ストレージデバイス200の外部に位置した「外部装置」の一例である。ホストデバイス100は、ストレージデバイス200が接続される装置を広く意味する。ホストデバイス100は、例えば、サーバ装置またはパーソナルコンピュータなどの情報処理装置である。ホストデバイス100は、例えば、ストレージデバイス200の記憶空間を複数の論理領域に分割する。ホストデバイス100は、複数の論理領域に互いに異なる論理アドレスを付与する。なお、ホストデバイス100が論理アドレスに代えてキー情報を用いる場合、以下の説明における「論理アドレス」は「キー情報」と読み替えられてもよい。
ホストデバイス100は、ストレージデバイス200にデータ(以下、「ホストライトデータ」と称する)を書き込む場合に、ライトコマンドをストレージデバイス200に送信する。「コマンド」とは、目的とする処理をコンピュータ(例えば、ストレージデバイス200)に実行させる指示を広く意味する。なお、本願でいう「コマンド」とは、ホストデバイス100が送信した指示に限定されず、ホストデバイス100から受け取った指示に基づいてストレージデバイス200の内部で生成された指示や、ストレージデバイス200の内部処理(後述)に関する指示も含む。「コマンド」は、「指示」、「命令」、「信号」などと読み替えられてもよい。「ライトコマンド」とは、ホストライトデータの書き込み先を示す情報(例えば、書き込み先論理アドレス)を含むコマンドである。
一方で、ホストデバイス100は、ストレージデバイス200に書き込まれているデータを読み出す場合に、リードコマンドをストレージデバイス200に送信する。「リードコマンド」とは、ホストデバイス100による読み出し対象のデータ(以下、「ホストリードデータ」と称する)の読み出し先を示す情報(例えば、読み出し先論理アドレス)を含むコマンドである。また、ホストデバイス100は、ストレージデバイス200に書き込まれている少なくとも一部のデータを消去する場合に、イレーズコマンドをストレージデバイス200に送信する。「イレーズコマンド」とは、消去対象のデータが書き込まれている領域を指定するコマンドである。
次に、ストレージデバイス200について説明する。ストレージデバイス200は、SSDのようなストレージデバイスである。例えば、ストレージデバイス200は、データセンタなどのサーバ装置に搭載される。ただし、ストレージデバイス200は、パーソナルコンピュータなどに搭載または装着されるストレージデバイスでもよい。例えば、ストレージデバイス200は、USB(Universal Serial Bus)メモリ、またはSD(登録商標)カードなどでもよい。
図1に示すように、ストレージデバイス200は、例えば、コマンド受信部210、メモリコントローラ220、ROM(Read Only Memory)230、NANDコントローラ240、時間計測部250、およびNAND260−1〜260−Nを含む。
コマンド受信部210、メモリコントローラ220、NANDコントローラ240、および時間計測部250は、例えば、ストレージデバイス200のCPU(Central Processing Unit)のようなプロセッサがプログラムメモリに格納されたプログラムを実行することにより実現される。ただし、これらの機能部の一部または全部は、LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などのハードウェア(例えば、回路部;circuitry)により実現されてもよい。コマンド受信部210、メモリコントローラ220、ROM230、NANDコントローラ240、および時間計測部250は、SoC(System on a Chip)として構成されてもよいし、複数のチップに分かれて構成されてもよい。
なお、図1では、コマンド受信部210、NANDコントローラ240、および時間計測部250は、説明の便宜上、メモリコントローラ220に含まれていないが、これに限定されず、メモリコントローラ220に、コマンド受信部210、NANDコントローラ240、および時間計測部250の機能が含まれていてもよい。ここで、本願で言う「制御部」は、少なくとも、メモリコントローラ220と、NANDコントローラ240と、時間計測部250とを含む。図1では、NANDコントローラ240は、複数のNAND260−1〜260−Nを制御するように記載されているが、複数のNAND260−1〜260−Nに対応する複数のNANDコントローラ240が存在してもよい。また以下の説明では、NAND260−1〜260−Nは、互いに区別されない場合は、単にNAND260と称される。以下、これら機能部について説明する。
まず、コマンド受信部210について説明する。コマンド受信部210は、ホストデバイス100からコマンドを受信する。コマンド受信部210が受信するコマンドの種類は、リードコマンド、ライトコマンド、イレーズコマンドなどが代表例として挙げられるが、これらには限定されない。コマンド受信部210は、受信したコマンドに含まれる情報に基づき、受信したコマンドの種類を判定する。例えば、コマンド受信部210は、受信したコマンドがリードコマンドまたはライトコマンドであると判定された場合、受信したコマンドをメモリコントローラ220内のリードライトコントローラ221に送る。なお、受信したコマンドの種類の判定は、コマンド受信部210に代えて、メモリコントローラ220によって行われてもよい。
コマンド受信部210は、受信したコマンドで要求された処理(以下、「コマンド処理」と称する)が完了した場合、コマンド処理が完了したことを示す完了報告(以下、単に「完了報告」と称する)をホストデバイス100に送信する。完了報告とは、コマンド処理の完了に対応して設定された所定の信号である。このため、完了報告は、「所定の信号」と読み替えられてもよい。
なお、完了報告は、コマンド受信部210が生成してもよく、レイテンシコントローラ223またはメモリコントローラ220内の他の機能部により生成された完了報告をコマンド受信部210が送信してもよい。コマンド受信部210は、「送受信機能部(transceiver)」と称されてもよい。なお、レイテンシの調整に関するコマンド受信部210の処理については後述する。
次に、メモリコントローラ220について説明する。メモリコントローラ220は、例えば、リードライトコントローラ221、内部処理コントローラ222、レイテンシコントローラ223、およびデータバッファ224を含む。
リードライトコントローラ221は、ホストデバイス100により送信されたリードコマンドおよびライトコマンドを、コマンド受信部210を介して受信する。リードライトコントローラ221は、受信したコマンドがリードコマンドである場合、NAND260からのホストリードデータのリードをNANDコントローラ240に実施させる。NANDコントローラ240によりNAND260から読み出されたホストリードデータは、データバッファ224に一時的に格納される。リードライトコントローラ221は、データバッファ224に格納されたホストリードデータを、コマンド受信部210を介してホストデバイス100に送信する。リードライトコントローラ221は、ホストデバイス100に対するホストリードデータの送信が完了した場合、リードコマンドで要求された処理が完了したことを示す完了報告を、コマンド受信部210によりホストデバイス100に送信させる。
リードライトコントローラ221は、受信したコマンドがライトコマンドである場合、ライトコマンドに伴うホストライトデータを、ライトキャッシュとして使用されるデータバッファ224に一時的に格納する。リードライトコントローラ221は、NAND260へのホストライトデータのライトをNANDコントローラ240に実施させる。リードライトコントローラ221は、NAND260に対するホストライトデータの書き込みが完了した場合、ライトコマンドで要求された処理が完了したことを示す完了報告を、コマンド受信部210によりホストデバイス100に送信させる。
内部処理コントローラ222は、例えば、リフレッシュコントローラ222aと、ガーベジコレクションコントローラ222bとを含む。本明細書でいう「内部処理」とは、ホストデバイス100からのコマンドには基づかないストレージデバイス200の内部処理を意味する。例えば、内部処理は、ストレージデバイス200を制御するためのソフトウェア、ファームウェアなどのプログラムによって起動および実行される、NAND260に対する処理を意味する。このような内部処理は、例えば、以下に示すリフレッシュおよび/またはガーベジコレクションがある。ただし、内部処理は、リフレッシュおよびガーベジコレクションに限定されない。
「リフレッシュ」とは、NAND260内のある領域に書き込まれているデータを、NAND260内の別の領域、またはNAND260内のリフレッシュ前と同じ領域に書き込み直すことを意味する。例えば、リフレッシュは、誤り訂正符号によるエラー訂正の限界を超える前に、エラーの追加発生を抑制するために行われる。リフレッシュコントローラ222aは、NAND260に対するリフレッシュ動作を制御する。リフレッシュコントローラ222aは、NAND260のブロック(例えば論理ブロック)毎に、ブロックの状態を監視する。リフレッシュコントローラ222aは、ブロックが所定の条件を満たした場合(例えば、ブロックに記憶されたデータに関するエラー発生数が所定数を超えた場合、またはブロックに含まれるメモリセル関してリードディスターブに伴うストレスが所定以上作用していると検出された場合)に、当該ブロックを対象とするリフレッシュを実行する。
「ガーベジコレクション」とは、NAND260内の不要なデータが書き込まれている領域を再利用できるようにするため、不要なデータ以外のデータ(例えば有効データ)をNAND260内の任意の領域に移動させ、移動元の領域を解放する処理である。ガーベジコレクションコントローラ222bは、NAND260に対するガーベジコレクション動作を制御する。ガーベジコレクションコントローラ222bは、例えばデータの書き込み先として利用可能なフリーブロックの数が一定数以下になった場合に、ガーベジコレクションを実行する。
レイテンシコントローラ223は、ホストデバイス100から受信したコマンドに対する完了報告の送信タイミングを制御することで、ホストデバイス100に対するレイテンシを制御する。なお、レイテンシコントローラ223については、後述する。
データバッファ224は、例えば、揮発性メモリである。データバッファ224は、ライトに用いられるライトバッファ(不図示)とリードに用いられるリードバッファ(不図示)を含んでもよく、内部処理に用いられるバッファをさらに含んでもよい。データバッファ224は、ライトコマンドに伴うホストライトデータを一時的に格納する。データバッファ224は、リードライトコントローラ221によりNAND260から読み出されたホストリードデータを一時的に格納する。さらに、データバッファ224は、リフレッシュコントローラ222aによりNAND260から読み出されたリードデータ、およびガーベジコレクションコントローラ222bによりNAND260から読み出されたリードデータなどを一時的に格納する。さらに、データバッファ224には、各種管理データが格納される。管理データの一例は、後述するアドレス変換テーブルである。
ROM230は、不揮発性メモリの一例である。ROM230は、上述した管理データ、ソフトウェア、およびファームウェアを記憶している。ROM230に記憶された種々の管理データ、ソフトウェア、およびファームフェアは、データバッファ224上にロードされて利用される。ROM230は、例えば、EPROM(Erasable Programmable Read Only Memory)、またはEEPROM(Electrically Erasable Programmable Read-Only Memory)である。
NANDコントローラ240は、NAND260を制御する。NANDコントローラ240は、例えば、キュー241、およびシーケンサ242を含む。
キュー241には、NAND260に関する複数のコマンドが格納される。キュー241に格納されるコマンドは、コマンド受信部210が受信したコマンドでもよく、コマンド受信部210が受信したコマンドに基づいてメモリコントローラ220によって生成されたコマンドでもよい。キュー241には、リードライトコントローラ221および内部処理コントローラ222(例えば、リフレッシュコントローラ222aおよびガーベジコレクションコントローラ222b)から供給されるコマンドが格納される。キュー241に格納された複数のコマンドは、キュー241に格納された順に、NANDコントローラ240によってNAND260に対する指示に変換されてシーケンサ242によって処理される。
シーケンサ242は、NAND260変換された指示に従ってNAND260の動作を制御する。シーケンサ242は、リードライトコントローラ221および内部処理コントローラ222(例えば、リフレッシュコントローラ222aおよびガーベジコレクションコントローラ222b)から供給されたコマンドに基づく処理(NAND260に対するリード、ライト、およびイレーズなど)を実行する。
時間計測部250は、監視タイマ251およびウェイトタイマ252を含む。本実施形態では、説明の便宜上、監視タイマ251およびウェイトタイマ252は、互いに異なる2つのタイマとして記載されているが、1つのタイマが監視タイマ251とウェイトタイマ252との両方の機能を有してもよい。なお、監視タイマ251およびウェイトタイマ252の機能については、後述する。
NAND260は、「不揮発性メモリチップ」の一例である。各NAND260は、例えば、複数のNAND型フラッシュメモリのチップを含んでいる。なお、不揮発性メモリチップは、NAND型のフラッシュメモリに限定されず、NOR型のフラッシュメモリでもよく、MRAM(Magnetoresistive Random Access Memory)でもよく、その他の種類のメモリチップでもよい。
ここで、本明細書中で使用されるいくつかの用語について定義する。図2は、第1の実施形態のコマンド処理の流れの一例を示す図である。
コマンドの「受信」とは、ホストデバイス100により送信されたコマンドが、ストレージデバイス200のコマンド受信部210によって受信されることを意味する。例えば、SATA(Serial Advanced Technology Attachment)の場合、ホストデバイス100がコマンドを格納したRegister Host to Device(Reg HD)ことを示すFIS(Frame Information Structure)をストレージデバイス200に送信し、ホストデバイス100により送信されたFISをストレージデバイス200が受信したことを意味する。コマンドの受信は、リードコマンドの場合もライトコマンドの場合も同一である。
リードにおけるコマンド処理の「完了」とは、図2中の(a)に示すように、リードコマンドで指定された全てのホストリードデータがNAND260から読み出され、ストレージデバイス200の外部に送信された(例えば、ホストデバイス100に送信された)ことを意味する。ただし、リードにおけるコマンド処理の「完了」とは、リードにおけるコマンド処理が完了したことを示す完了報告をホストデバイス100に送信することは含まない。
ライトにおけるコマンド処理の「完了」は、ストレージデバイス200においてライトキャッシュが有効であるか、または無効であるかどうかによって異なる。図2中の(b−1)に示すように、ライトキャッシュが無効の場合、ライトにおけるコマンド処理の「完了」とは、ライトコマンドで書き込みが要求された全てのホストライトデータがNAND260に書き込まれたことを意味する。詳しく述べると、上述したように、ホストライトデータは、リードライトコントローラ221の制御により、コマンド受信部210により受信された後、まずデータバッファ224に一時的に格納される。そして、ホストライトデータは、メモリコントローラ220およびNANDコントローラ240の制御により、データバッファ224からNAND260に書き込まれる。このとき、メモリコントローラ220は、アドレス変換テーブルを更新する。アドレス変換テーブルは、ホストライトデータが書き込まれた書き込み先の論理アドレスと、ホストライトデータが書き込まれた物理アドレスとを対応付けたテーブルである。メモリコントローラ220は、コマンド受信部210からデータバッファ224にホストライトデータが格納された場合に、ホストライトデータに対応するアドレス変換テーブルの物理アドレスを、データバッファ224の物理アドレスに更新する。次に、メモリコントローラ220は、データバッファ224からNAND260にホストライトデータが書き込まれた場合に、ホストライトデータに対応するアドレス変換テーブルの物理アドレスを、NAND260の物理アドレスに更新する。ライトにおけるコマンド処理の「完了」とは、例えば、ホストライトデータに対応するアドレス変換テーブルの物理アドレスがNAND260の物理アドレスに更新されたことを意味する。ただし、ライトにおけるコマンド処理の「完了」とは、ライトにおけるコマンド処理が完了したことを示す完了報告をホストデバイス100に送信することは含まない。
図2中の(b−2)に示すように、ライトキャッシュが有効の場合、ライトにおけるコマンド処理の「完了」とは、ライトコマンドで書き込みが要求された全てのホストライトデータがストレージデバイス200において受信されたことを意味する。すなわち、ライトコマンドで書き込みが要求されたホストライトデータがNAND260に書き込まれたことを意味しない。例えば、メモリコントローラ220は、ホストライトデータが、コマンド受信部210により受信され、ライトキャッシュとして使用されるデータバッファ224に一時的に格納されたときに、ライトにおけるコマンド処理の「完了」と判断する。この場合、ライトにおけるコマンド処理の「完了」とは、例えば、ホストライトデータに対応するアドレス変換テーブルの物理アドレスがデータバッファ224の物理アドレスに更新されたことを意味してもよい。なお、ライトキャッシュが無効の場合と同様に、ライトにおけるコマンド処理の「完了」とは、ライトにおけるコマンド処理が完了したことを示す完了報告をホストデバイス100に送信することは含まない。
「コマンド処理時間」とは、コマンド受信部210がコマンドを受信してから、コマンド処理が完了するまでの時間を意味する。この意味において、「コマンド処理時間」は、リードコマンドの場合もライトコマンドの場合も同一である。
「レイテンシ」とは、コマンド受信部210がコマンドを受信してから、ホストデバイス100に対してストレージデバイス200から前記コマンドに対応する完了報告が送信されるまでの時間を意味する。すなわち、「レイテンシ」は、コマンド処理時間と、コマンド処理完了から完了報告の送信が終わるまでの時間とを合計した時間である。これらの意味において、「レイテンシ」は、リードコマンドの場合もライトコマンドの場合も同一である。
次に、レイテンシの調整に関するコマンド受信部210、時間計測部250、およびレイテンシコントローラ223の機能について説明する。図3は、コマンド受信部210、時間計測部250、およびレイテンシコントローラ223の一例を示す図である。
コマンド受信部210は、所定のコマンドを受信した場合、コマンド受信の通知信号を時間計測部250の監視タイマ251に送信する。「所定のコマンド」とは、後述するレイテンシの調整対象となるコマンドである。本実施形態では、リードコマンドおよびライトコマンドが「所定のコマンド」の一例に該当するが、その他のコマンドが「所定のコマンド」に該当してもよい。一方で、本実施形態では、例えば、ストレージデバイス200に関する一般的な情報を要求する問い合わせ(inquiry)コマンドは、「所定のコマンド」に該当しない。
コマンド受信部210は、さらに、所定のコマンドで要求されたコマンド処理が完了した場合に、コマンド処理が完了したことを示す信号をメモリコントローラ220から受け取る。コマンド受信部210は、コマンド処理が完了したことを示す信号をメモリコントローラ220から受け取った場合、コマンド処理完了の通知信号を監視タイマ251に送信する。なお、コマンド処理完了の通知信号は、コマンド受信部210に代えて、メモリコントローラ220から監視タイマ251に直接送信されてもよい。
監視タイマ251は、コマンド処理時間を計測するためのタイマである。監視タイマ251は、コマンド受信の通知信号をコマンド受信部210から受信すると、時間計測を開始する。監視タイマ251は、コマンド処理完了の通知信号をコマンド受信部210から受信すると、時間計測を終了する。監視タイマ251は、時間計測が終了すると、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの間の時間の計測結果(以下、「時間計測結果」と称する)を時間計測部250内の記憶部に格納する。監視タイマ251は、例えば、計測の開始時に0にセットされ、計測終了までカウントアップし、計測の終了時にカウントを停止し、計測終了時のカウント値を計測時間として出力するタイマでもよく、計測開始時の時刻と計測終了時の時刻との差分から計測時間を算出するタイマであってもよい。
本実施形態では、監視タイマ251は、コマンド処理の時間計測結果として、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの計測時間を示す情報を、レイテンシコントローラ223に通知する。これに代えて、監視タイマ251は、コマンド処理の時間計測結果として、計測開始時の時刻および計測終了時の時刻を示す情報を、レイテンシコントローラ223に出力してもよい。この場合、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの間の時間は、レイテンシコントローラ223によって算出される。
ウェイトタイマ252は、コマンド処理完了時に対して完了報告の送信を遅らせるための待機時間(以下、単に「待機時間」と称する)の経過を検出するためのタイマである。例えば、「待機時間」とは、コマンド処理完了から、完了報告の送信許可を与えるまでの時間である。待機時間は、レイテンシコントローラ223によって設定される。ウェイトタイマ252は、レイテンシコントローラ223からの待機時間のカウント開始を指示するカウント開始指示信号に基づきカウントを開始する。ウェイトタイマ252は、レイテンシコントローラ223によって設定された待機時間の経過後、待機時間の経過を知らせる待機時間経過通知信号をレイテンシコントローラ223に送信する。ウェイトタイマ252は、カウント開始時に0にセットされ、待機時間の結果までカウントアップし、待機時間の経過にカウントを停止するタイマでもよく、カウント開始時に待機時間にセットされ、待機時間の経過までカウントダウンし、待機時間の経過時(すなわち、カウンタ値が0)にカウントを停止するタイマでもよい。
レイテンシコントローラ223は、計測結果取得部223a、比較部223b、待機時間マネージャ223c、完了報告送信許可部223d、および閾値設定部223eを含む。
計測結果取得部223aは、例えば、監視タイマ251から時間計測結果を通知されることで、時間計測結果を取得する。これに代えて、計測結果取得部223aは、所定のトリガ信号(例えば、監視タイマ251から送信される計測終了の通知信号)に基づき、監視タイマ251の内部に格納された計測結果を読み取ることによって時間計測結果を取得してもよい。計測結果取得部223aは、監視タイマ251から取得された時間計測結果に基づき、コマンド処理時間を得る。例えば、計測結果取得部223aは、監視タイマ251により計測されたコマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの計測時間を、コマンド処理時間として取得する。これに代えて、計測結果取得部223aは、監視タイマ251から受け取る計測開始時の時刻および計測終了時の時刻を示す情報に基づき、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの間の時間をコマンド処理時間として算出することで、コマンド処理時間を取得してもよい。計測結果取得部223aは、取得したコマンド処理時間を比較部223bおよび待機時間マネージャ223cに送る。
比較部223bは、計測結果取得部223aにより取得されたコマンド処理時間と、閾値設定部223eが保持する閾値とを比較する。閾値は、完了報告の送信前に待機時間を空けるか否かを判定するための閾値である。閾値は、「レイテンシのターゲット値」と称されてもよい。比較部223bは、コマンド処理時間が閾値以上の場合、コマンド処理時間が閾値以上であることを示す信号を、完了報告送信許可部223dに送る。一方で、比較部223bは、コマンド処理時間が閾値よりも小さい場合、コマンド処理時間が閾値よりも小さいことを示す信号を、待機時間マネージャ223cに送る。
待機時間マネージャ223cは、コマンド処理時間が閾値よりも小さいことを示す信号を比較部223bから受け取る場合、コマンド処理時間と閾値との差分を算出し、コマンド受信部210による完了報告の送信を遅らせる待機時間を決定する。例えば、待機時間マネージャ223cは、コマンド処理時間と閾値との差分に基づき、待機時間の長さを決定する。例えば、待機時間マネージャ223cは、コマンド処理時間と閾値との差分が大きければ大きいほど、長い待機時間を決定する。本実施形態では、待機時間マネージャ223cは、コマンド処理時間と閾値との差分と略同じ時間を、待機時間の長さとして決定する。待機時間マネージャ223cは、決定した待機時間をウェイトタイマ252に設定する。待機時間マネージャ223cは、カウント開始指示信号をウェイトタイマ252に送信することで、待機時間の残り時間の計測を開始する。待機時間マネージャ223cは、待機時間経過通知信号をウェイトタイマ252から受け取る。待機時間マネージャ223cは、待機時間経過通知信号をウェイトタイマ252から受け取った場合、待機時間が経過したことを示す信号を、完了報告送信許可部223dに送る。なお、待機時間の長さは、コマンド処理時間と閾値との差分に限らず、あらかじめ設定された複数の待機時間の中から、1つを選択することによって決定されてもよい。
完了報告送信許可部223dは、コマンド処理時間が閾値以上であることを示す信号を比較部223bから受け取る場合に、コマンド受信部210に完了報告の送信許可信号を送信する。完了報告送信許可部223dは、待機時間が経過したことを示す信号を待機時間マネージャ223cから受け取る場合、コマンド受信部210に完了報告の送信許可信号を送信する。送信許可信号は、「コマンド受信部に完了報告を送信させる」ことの指示の一例である。
本実施形態では、コマンド受信部210は、所定のコマンドで要求されたコマンド処理が完了した場合であっても、完了報告送信許可部223dから送信許可信号を受け取らない限り、ホストデバイス100に対してコマンドの完了報告を送信しない。コマンド受信部210は、完了報告送信許可部223dから送信許可信号を受け取った場合、ホストデバイス100に対してコマンドの完了報告を送信する。なお、コマンド受信部210は、待機時間マネージャ223cから送信許可信号を受け取ることに代えて、ウェイトタイマ252から待機時間経過通知信号を受け取ってもよい。この場合、コマンド受信部210は、ウェイトタイマ252から待機時間経過通知信号を受け取った場合、ホストデバイス100に対してコマンドの完了報告を送信してもよい。
閾値設定部223eは、完了報告の前に待機時間を空けるか否かの判定に用いられる上記閾値を設定する。閾値設定部223eは、設定した閾値を、例えば閾値設定部223e内の記憶領域に保持する。例えば、閾値設定部223eは、所定の期間(例えば、24時間)にコマンド受信部210により受信された複数のコマンドから、サンプルとして複数のコマンド(例えば、100,000コマンド)を抽出する。なお、抽出は、所定の条件に基づいてもよく、無作為でもよい。そして、閾値設定部223eは、サンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を設定する。本実施形態では、閾値設定部223eは、サンプルとして抽出された複数のコマンドの各々のコマンド処理時間に基づき、前記サンプルとして抽出された複数のコマンドのコマンド処理時間の平均値を算出する。そして、閾値設定部223eは、算出したコマンド処理時間の平均値を、閾値として設定する。ただし、所定の期間は、24時間に限定されず、任意の時間に設定可能である。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「所定の期間に受信された複数のコマンド」の一例である。ただし、「所定の期間に受信された複数のコマンド」は、上記例に限定されず、所定の期間に受信された全てのコマンドでもよい。
本実施形態では、閾値設定部223eは、ある周期(例えば、24時間)毎に、少なくとも直近の周期の間にコマンド受信部210により受信された複数のコマンドからサンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を更新する。「少なくとも直近の周期の間にコマンド受信部210により受信された複数のコマンドのコマンド処理時間に基づき」とは、直近の周期の間にコマンド受信部210により受信された複数のコマンドのコマンド処理時間のみに基づく場合でもよいし、直近の周期の間にコマンド受信部210により受信された複数のコマンドに加え、それよりも前に受信した1以上のコマンドのコマンド処理時間に基づく場合も含む。例えば、閾値設定部223eは、24時間毎に閾値を更新する場合、直近の24時間の間に受信されたコマンドのコマンド処理時間のみに基づいてもよいし、直近の24時間を含む一定の期間(例えば、直近48時間)に受信されたコマンドのコマンド処理時間に基づいてもよい。また、所定の周期は、24時間に限定されず、任意の周期が設定可能である。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「直近の周期の間に受信された複数のコマンド」の一例である。ただし、「直近の周期の間に受信された複数のコマンド」は、上記例に限定されず、直近の周期の間に受信された全てのコマンドでもよい。
閾値は、例えば、予め初期値が与えられ、その後適宜更新されてもよい。また、更新された閾値は、例えば、NAND260に格納されてもよい。この場合、ストレージデバイス200の電源が切られた場合であっても、次にストレージデバイス200の電源が入れられた場合にNAND260から読み出されて用いられてもよい。
次に、本実施形態のストレージデバイス200の処理の流れの一例について説明する。ストレージデバイスの処理の流れは、(1)閾値の設定処理と、(2)設定された閾値に基づきレイテンシを調整する処理とに大きく分かれる。そのため、ここでは上記2つを分けて説明する。図4は、ストレージデバイス200の閾値の設定処理の流れの一例を示すフローチャートである。
まず、コマンド受信部210は、ホストデバイス100からコマンドを受信する(S101)。コマンド受信部210は、受信したコマンドの種類を判定する(S102)。コマンド受信部210は、受信したコマンドが所定のコマンド(例えば、リードコマンドまたはライトコマンド)でない場合(S102:NO)は、S108の処理に移る。
コマンド受信部210は、受信したコマンドが所定のコマンドである場合(S102:YES)、コマンド受信の通知信号を監視タイマ251に送信する。これにより、監視タイマ251が時間計測を開始する(S103)。次に、メモリコントローラ220は、ホストデバイス100により送信されたコマンドをコマンド受信部210を介して受け取り、そのコマンドで要求されたコマンド処理を実行する(S104)。なお、S103の処理とS104の処理は、いずれが先に開始されてもよいし、互いに略同時に開始されてもよい。
メモリコントローラ220は、受信したコマンドの処理が完了するまで(S105:NO)、コマンド処理を引き続き行う。メモリコントローラ220は、コマンド処理が完了すると(S105:YES)、コマンド処理が完了したことを示す信号をコマンド受信部210に送る。コマンド受信部210は、コマンド処理が完了したことを示す信号を受け取った場合、コマンド処理完了の通知信号を監視タイマ251に送信する。これにより、監視タイマ251は、時間計測を終了する(S106)。次に、レイテンシコントローラ223の計測結果取得部223aは、監視タイマ251から時間計測結果を取得し、取得された時間計測結果に基づき、コマンド処理時間を得る(S107)。
ストレージデバイス200は、S101〜S107の処理を、所定の周期(例えば、24時間)の間、繰り返し行う(S108:NO)。ストレージデバイス200は、前記所定の周期が経過したと判定された場合(S108:YES)、次の処理に進む。すなわち、レイテンシコントローラ223の閾値設定部223eは、所定の期間(例えば、直近の周期の間)にコマンド受信部210により受信された複数のコマンドのコマンド処理時間の平均値を算出する(S109)。そして、閾値設定部223eは、算出したコマンド処理時間の平均値を閾値として設定する(S110)。
図5は、レイテンシの調整を伴うストレージデバイス200の処理の流れの一例を示すフローチャートである。まず、コマンド受信部210は、ホストデバイス100からコマンドを受信する(S201)。コマンド受信部210は、受信したコマンドの種類を判定する(S202)。コマンド受信部210は、受信したコマンドが所定のコマンド(例えば、リードコマンドまたはライトコマンド)でない場合(S202:NO)は、本フローの処理を終了する。
コマンド受信部210は、受信したコマンドが所定のコマンドである場合(S202:YES)、コマンド受信の通知信号を監視タイマ251に送信する。これにより、監視タイマ251が時間計測を開始する(S203)。次に、メモリコントローラ220は、ホストデバイス100により送信されたコマンドをコマンド受信部210を介して受け取り、そのコマンドで要求されたコマンド処理を実行する(S204)。なお、S203の処理とS204の処理は、いずれが先に開始されてもよいし、互いに略同時に開始されてもよい。
メモリコントローラ220は、受信したコマンドの処理が完了するまで(S205:NO)、コマンド処理を引き続き行う。メモリコントローラ220は、コマンド処理が完了すると(S205:YES)、コマンド処理が完了したことを示す信号をコマンド受信部210に送る。コマンド受信部210は、コマンド処理が完了したことを示す信号を受け取った場合、コマンド処理完了の通知信号を監視タイマ251に送信する。これにより、監視タイマ251は、時間計測を終了する(S206)。次に、レイテンシコントローラ223の計測結果取得部223aは、監視タイマ251から時間計測結果を取得し、取得された時間計測結果に基づき、コマンド処理時間を得る(S207)。
次に、比較部223bは、計測結果取得部223aが得たコマンド処理時間と、閾値設定部223eが保持する閾値とを比較する(S208)。比較部223bは、コマンド処理時間が閾値以上の場合(S208:NO)、コマンド処理時間が閾値以上であることを示す信号を完了報告送信許可部223dに送る。完了報告送信許可部223dは、コマンド処理時間が閾値以上であることを示す信号を比較部223bから受け取った場合、コマンド受信部210に完了報告の送信許可信号を送信する(S212)。コマンド受信部210は、完了報告の送信許可信号を受け取った場合、完了報告をホストデバイス100に送信する(S213)。これらS208がNOである場合の処理は、「第1制御動作」の一例である。
一方で、比較部223bは、コマンド処理時間が閾値よりも小さい場合(S208:YES)、比較部223bは、コマンド処理時間が閾値よりも小さいことを示す信号を待機時間マネージャ223cに送信する。待機時間マネージャ223cは、コマンド処理時間と閾値との差分に基づき待機時間を決定し、決定した待機時間をウェイトタイマ252に設定する(S209)。さらに、待機時間マネージャ223cは、カウント開始指示信号をウェイトタイマ252に送信する。これにより、ウェイトタイマ252は、待機時間の残り時間の計測を開始する(S210)。
ウェイトタイマ252は、待機時間が経過した場合(S211:YES)、待機時間の経過通知信号を待機時間マネージャ223cに送信する。待機時間マネージャ223cは、待機時間の経過通知信号を受け取った場合、完了報告送信許可部223dに完了報告の送信許可信号を送信する(S212)。コマンド受信部210は、完了報告の送信許可信号を受け取った場合、完了報告をホストデバイス100に送信する(S213)。これらS208がYESである場合の処理は、第1制御動作とは異なる「第2制御動作」の一例である。これにより、コマンド処理時間が閾値よりも短い場合、完了報告の送信に対して待機時間が設けられることでレイテンシが調整される。
ここで、内部処理コントローラ222は、待機時間が経過するまでの間(S211:NO)、例えば、ホストデバイス100からのコマンドに基づかないストレージデバイス200の内部処理を実行してもよい(S214)。例えば、内部処理コントローラ222は、待機時間の間に、リフレッシュおよび/またはガーベジコレクションの処理を実行してもよい。本実施形態では、内部処理コントローラ222は、待機時間の間に、リフレッシュおよび/またはガーベジコレクションに関する1つ以上のコマンドを、NANDコントローラ240のキュー241に格納する。これにより、キュー241において、ホストリードデータの読み出しおよび/またはライトリードデータの書き込みに関する複数のコマンドの間に、リフレッシュおよび/またはガーベジコレクションに関する1以上のコマンドが挿入される。これにより、内部処理に関するコマンドが消化されやすくなる。なお、S214のステップは、任意であり、必須ではない。また、S214のステップは、待機時間に意図的に実施されてもよいが、待機時間であるか否かに関係なく、NANDコントローラ240のキュー241に空きがあることの結果として実行されてもよい。
次に、本実施形態のストレージデバイス200の動作の一例について説明する。図6は、ストレージデバイス200のリード動作の一例を示す図である。なお図6では、ウェイトタイマ252として、待機時間をカウントダウンするタイマが用いられた例を示す。
まず、図6中の(a)を参照し、コマンド処理時間が閾値よりも小さい場合について説明する。ホストデバイス100から送信されたリードコマンドをストレージデバイス200が受信すると、監視タイマ251は、時間計測を開始する。リードコマンドで指定された全てのホストデータがNAND260から読み出され、ストレージデバイス200の外部に送信されたときが、コマンド処理完了である。ここで、コマンド処理が完了したタイミングでの監視タイマ251のカウント値がMであり、閾値はTであり、M<Tであると仮定する。このとき、待機時間マネージャ223cは、(T−M)の値をウェイトタイマ252に設定する。ウェイトタイマ252は、カウント値のカウントダウンを開始する。そして、ウェイトタイマ252のカウント値が0になったとき、待機時間マネージャ223cは、完了報告送信許可部223dに完了報告の送信許可信号を送信する。その結果、コマンド受信部210は、完了報告をホストデバイス100に送信する。このような動作によれば、図6中の(a)に示すように、コマンド処理完了と完了報告の送信開始の間に、コマンド処理時間と閾値との差分に対応する待機時間を空けることができる。
次に、図6中の(b)を参照し、コマンド処理時間が閾値以上の場合について説明する。コマンド処理の完了までの動作は、図6中の(a)と同じである。ここで、コマンド処理が完了したタイミングでの監視タイマ251のカウント値がVであり、閾値はTであり、V>Tであると仮定する。このとき、比較部223bは、コマンド処理時間が閾値以上であることを示す信号を完了報告送信許可部223dに送る。これにより、待機時間を空けずに完了報告送信許可部223dにより完了報告の送信許可信号を送信させる。これにより、コマンド受信部210は、コマンド処理が完了した後すぐに完了報告をホストデバイス100に送信する。
図7は、ストレージデバイス200のライト動作の一例を示す図である。なお図7では、ウェイトタイマ252として、待機時間をカウントダウンするタイマが用いられた例を示す。なお、図7においては、ライトキャッシュが無効の場合の動作について説明するが、ライトキャッシュが有効の場合の動作は、コマンド処理完了が、ライトコマンドで書き込みが要求された全てのホストライトデータがストレージデバイス200において受信されたことを意味することを除き、ライトキャッシュが無効の場合の動作と同様である。
まず、図7中の(a)を参照し、コマンド処理時間が閾値よりも小さい場合について説明する。ストレージデバイス200ホストデバイス100から送信されたライトコマンドをストレージデバイス200が受信すると、監視タイマ251は、時間計測を開始する。ライトコマンドで指定された全てのデータがNAND260に格納された(例えば、ライトデータに対応するアドレス変換テーブルの物理アドレスがNAND260の物理アドレスに更新された)ときが、コマンド処理完了である。ここで、コマンド処理が完了したタイミングでの監視タイマ251のカウント値がMであり、閾値はTであり、M<Tであると仮定する。このとき、待機時間マネージャ223cは、(T−M)の値をウェイトタイマ252に設定する。ウェイトタイマ252は、カウント値のカウントダウンを開始する。そして、ウェイトタイマ252のカウント値が0になったとき、待機時間マネージャ223cは、完了報告送信許可部223dに完了報告の送信許可信号を送信する。その結果、コマンド受信部210は、完了報告をホストデバイス100に送信する。このような動作によれば、図7中の(a)に示すように、コマンド処理完了と完了報告の送信開始の間に、コマンド処理時間と閾値との差分に対応する待機時間を空けることができる。
次に、図7中の(b)を参照し、コマンド処理時間が閾値以上の場合について説明する。コマンド処理の完了までの動作は、図7中の(a)と同じである。ここで、コマンド処理が完了したタイミングでの監視タイマ251のカウント値がVであり、閾値はTであり、V>Tであると仮定する。このとき、比較部223bは、コマンド処理時間が閾値以上であることを示す信号を完了報告送信許可部223dに送る。これにより、待機時間を空けずに完了報告送信許可部223dにより完了報告の送信許可信号を送信させる。これにより、コマンド受信部210は、コマンド処理が完了した後すぐに完了報告をホストデバイス100に送信する。
以上のような構成によれば、ホストデバイス100に対するレイテンシのばらつきの抑制を図ることができる。ここで、レイテンシが調整されない比較例について考える。一般的なストレージデバイス200では、ホストデバイス100からのコマンドで要求されたコマンド処理に加え、ストレージデバイスの内部処理(例えば、リフレッシュおよび/またはガーベジコレクション)が並行して動作している。このため、ホストデバイス100に対するレイテンシにばらつきが生じる場合がある。一方で、ユーザは、均一なレイテンシを期待している。
そこで、本実施形態では、ストレージデバイス200は、コマンド受信部210と、制御部とを備える。コマンド受信部210は、ホストデバイス100からコマンドを受信し、コマンドで要求された処理が完了した場合に完了報告をホストデバイス100に送信する。制御部は、コマンド受信部210がコマンドを受信してから前記処理が完了するまでのコマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから、コマンド受信部210に完了報告を送信させる。これにより、コマンド処理時間が短い場合に完了報告の送信を敢えて遅らせることで、レイテンシのばらつきを抑制することができる。その結果、ユーザの満足度の向上を図ることができる。
本実施形態では、制御部は、コマンド受信部210がコマンドを受信した場合に計測が開始され、前記処理が完了した場合に計測が終了された時間計測結果に基づき、コマンド処理時間を得る。このような構成によれば、時間を計測することにより1つ1つのコマンドに関するコマンド処理時間を正確に得ることができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
本実施形態では、制御部は、コマンド処理時間と閾値との差分に基づき、待機時間の長さを決定する。このような構成によれば、コマンド処理時間と閾値との差分に基づいて、コマンド毎に待機時間を変化させることができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
本実施形態では、制御部は、ある期間にコマンド受信部210により受信された複数のコマンドのコマンド処理時間に基づき、閾値を設定する。このような構成によれば、ある期間における、実際のストレージデバイス200の動作状態に基づいて閾値を設定することができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
本実施形態では、制御部は、複数のコマンドのコマンド処理時間の平均値を、閾値に設定する。このような構成によれば、平均値よりも短い処理時間のコマンドに対するレイテンシが、待機時間を空けることによって長くなる。このように、平均値よりも短い処理時間のコマンドに対するレイテンシのみを長くすることにより、ばらつきを効果的に抑制することができる。なお、制御部は、複数のコマンドのコマンド処理時間の平均値に代えて、複数のコマンドのコマンド処理時間の中央値または最頻値を閾値に設定してもよい。
本実施形態では、制御部は、ある周期毎に、少なくとも直近の周期の間にコマンド受信部210により受信された複数のコマンドのコマンド処理時間に基づき、閾値を更新する。このような構成によれば、ストレージデバイス200が直近の周期の間に受信したコマンドのコマンド処理時間を反映することで、ストレージデバイスの最新の動作環境および/またはストレージデバイスの最新の内部状態に応じた閾値を設定することができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
本実施形態では、レイテンシの調整対象となる所定のコマンド(例えば、リードコマンドおよびライトコマンド)で同一の閾値を使用するものとした。ただし、閾値は、コマンドの種類毎で異なる閾値を有してもよい。すなわち、リードコマンドとライトコマンドとで互いに異なる閾値が設定されてもよい。この場合、図4に示されるストレージデバイス200の閾値の設定処理、および図5に示されるストレージデバイス200の処理は、コマンドの種類毎に行われてもよい。
ここで、ストレージデバイス200では、ストレージデバイス200の内部で所定の条件が満たされた場合、ホストデバイス100からのコマンドに基づかないストレージデバイス200の内部処理(例えば、リフレッシュおよび/またはガーベジコレクション)が実行される。このような内部処理は、一般的にホストデバイス100からのコマンド処理と並行して行われるが、リードコマンドおよびライトコマンドに対する応答時間と比べて時間がかかる場合がある。このような内部処理の要求がストレージデバイス200の内部で溜まり、溜まった内部処理の要求が連続して実行されると、リードコマンドおよびライトコマンドのレイテンシが長くなることがある。その結果、ホストデバイス100に対するレイテンシが大きくばらつくことがある。
一方で、本実施形態では、制御部は、待機時間の間に、ホストデバイス100からのコマンドに基づかないストレージデバイス200の内部処理を実行する。このような構成によれば、内部処理に関するコマンドは、完了報告送信前の待機時間(すなわち、NANDコントローラ240のキュー241が比較的空いている時間の間)にキュー241投入される。これにより、内部処理に関するコマンドのキュー241への投入が分散される。これにより、内部処理の要求がストレージデバイス200の内部で一定以上溜まることを抑制することができる。これにより、溜まった内部処理の要求が連続して実行されることを抑制することができる。その結果、レイテンシのばらつきをさらに高いレベルで抑制することができる。
(第2の実施形態)
次に、第2の実施形態について説明する。本実施形態では、閾値調整範囲の上限値および下限値がユーザの指定に基づき設定される点で第1の実施形態とは異なる。なお、以下に説明する以外の構成は、第1の実施形態と同様である。
次に、第2の実施形態について説明する。本実施形態では、閾値調整範囲の上限値および下限値がユーザの指定に基づき設定される点で第1の実施形態とは異なる。なお、以下に説明する以外の構成は、第1の実施形態と同様である。
図8は、第2の実施形態のコマンド受信部210、時間計測部250、およびレイテンシコントローラ223Aの一例を示す図である。図8に示すように、レイテンシコントローラ223Aは、計測結果取得部223a、比較部223b、待機時間マネージャ223c、完了報告送信許可部223d、閾値設定部223e、および記憶部223fを含む。
記憶部223fの一例は、例えば、レイテンシコントローラ223Aを実現するファームウェアのパラメータ格納領域である。記憶部223fは、閾値設定部223eが設定する閾値の上限値および下限値を記憶する。本実施形態では、閾値設定部223eは、閾値の上限値および下限値として、ユーザによって指定された値を記憶部223fに記憶する。すなわち、閾値設定部223eは、例えばホストデバイス100およびコマンド受信部210を通じて、閾値の上限値および下限値を指定するユーザの指示を受け付け、ユーザにより指定された閾値の上限値および下限値を記憶部223fに登録する。例えば、閾値の上限値および下限値は、ソフトウェアまたはファームウェアによって初期値が与えられており、ユーザの指示に基づき変更されてもよい。また、閾値の上限値および下限値は、ユーザの指示に基づかず、レイテンシコントローラ223Aの内部動作によって設定されてもよい。
本実施形態では、閾値設定部223eは、ユーザにより指定された閾値の上限値と下限値との間の調整範囲で、コマンド処理時間と比較される閾値(第1の実施形態と同じく、完了報告の送信前に待機時間を空けるか否かを判定に用いられる閾値)を設定する。例えば、閾値設定部223eは、所定の期間(例えば、24時間)にコマンド受信部210により受信された複数のコマンドから、サンプルとして複数のコマンド(例えば、100,000コマンド)を抽出する。なお、抽出は、所定の条件に基づいてもよく、無作為でもよい。サンプルとして抽出される複数のコマンドは、上限値と下限値との間の範囲内にあるもののみであってもよい。そして、閾値設定部223eは、サンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を設定する。本実施形態では、閾値設定部223eは、サンプルとして抽出された複数のコマンドの各々のコマンド処理時間に基づき、サンプルとして抽出された複数のコマンドのコマンド処理時間のなかで、閾値の上限値と下限値との間のなかで最大となるコマンド処理時間を閾値として設定する。なお、閾値設定部223e、例えば、サンプルとして抽出された複数のコマンドのコマンド処理時間の全てが下限値を下回る場合、前記下限値を閾値として設定してもよい。また、閾値設定部223e、例えば、サンプルとして抽出された複数のコマンドのコマンド処理時間の全てが上限値を上回る場合、前記上限値を閾値として設定してもよい。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「所定の期間に受信された複数のコマンド」の一例である。ただし、「所定の期間に受信された複数のコマンド」は、上記例に限定されず、所定の期間に受信された全てのコマンドでもよい。
本実施形態では、閾値設定部223eは、第1の実施形態と同様に、ある周期(例えば、24時間)毎に、少なくとも直近の周期の間にコマンド受信部210により受信された複数のコマンドからサンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を更新する。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「直近の周期の間に受信された複数のコマンド」の一例である。ただし、「直近の周期の間に受信された複数のコマンド」は、上記例に限定されず、直近の周期の間に受信された全てのコマンドでもよい。
図9は、第2の実施形態のストレージデバイス200の閾値の設定処理の流れの一例を示すフローチャートである。まず、閾値設定部223eは、閾値の上限値および下限値を指定するユーザの指示を受け付ける。閾値設定部223eは、閾値の上限値および下限値を指定するユーザの指示を受け付けた場合、ユーザにより指定された閾値の上限値および下限値を、記憶部223fに記憶させる(S300)。次に、ストレージデバイス200は、S301〜S308の処理を行う。これらS301〜S308の処理は、第1の実施形態のS101〜S108の処理と略同じであるため、ここでの重複する説明は省略する。
ストレージデバイス200は、S301〜S307の処理を、所定の周期(例えば、24時間)の間、繰り返し行う(S308:NO)。ストレージデバイス200は、前記所定の周期が経過したと判定された場合(S308:YES)、次の処理に進む。すなわち、レイテンシコントローラ223Aの閾値設定部223eは、所定の期間(例えば、直近の周期の間)にコマンド受信部210により受信された複数のコマンドのコマンド処理時間のなかで、閾値の上限値と下限値との間に含まれる最大値を特定し、特定したコマンド処理時間の最大値を閾値として設定する(S309)。
このような構成によれば、第1の実施形態と同様に、ホストデバイス100に対するレイテンシのばらつきの抑制を図ることができる。さらに、本実施形態では、制御部は、閾値の上限値を記憶する領域を有し、上限値以下の範囲で閾値を設定する。このような構成によれば、閾値の上限値に基づいてレイテンシの調整が行われるため、ユーザのニーズに合わせたレイテンシの調整が可能になる。
本実施形態では、制御部は、閾値の上限値としてユーザにより指定された値を記憶する。このような構成によれば、ユーザによって指定された閾値の上限値に基づき、レイテンシの調整が行われる。これにより、さらにユーザのニーズに合わせたレイテンシの調整が可能になる。
本実施形態では、記憶部223fには、上限値に加えて、下限値も記憶する。制御部は、上限値と下限値との間の範囲で閾値を設定する。このような構成によれば、所定の周期の間に受信された複数のコマンドのコマンド処理時間が極めて短い場合であっても、下限値に応じた閾値が設定される。このため、その後、コマンド処理時間が長くなった場合でも、レイテンシの変化を一定以下に抑制することができる。
なお、記憶部223fは、閾値の上限値および下限値の両方を記憶する場合に代えて、閾値の上限値のみを記憶してもよい。この場合、閾値設定部223eは、閾値の上限値以下の範囲で閾値を設定する。すなわち、閾値設定部223eは、前記所定の期間にコマンド受信部210により受信された複数のコマンドの各々のコマンド処理時間に基づき、前記複数のコマンドのコマンド処理時間のなかで、閾値の上限値以下の範囲で最大となるコマンド処理時間を閾値として設定する。
以上説明した少なくとも1つの実施形態によれば、コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第1制御動作が行われ、コマンド処理時間が閾値よりも小さい場合に、第1制御動作とは異なる第2制御動作が行われることで、ホストデバイスに対するレイテンシのばらつきの抑制を図ることができる。
以下、いくつかのストレージデバイスおよびストレージデバイスの制御方法を付記する。
[1]ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンド受信部が前記コマンドを受信してから前記処理が完了するまでのコマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから、前記コマンド受信部に前記完了報告を送信させる制御部と、
を備えたストレージデバイス。
[2]、[1]に記載のストレージデバイスであって、
前記制御部は、前記コマンド受信部が前記コマンドを受信した場合に計測が開始され、前記処理が完了した場合に計測が終了された時間計測結果に基づき、前記コマンド処理時間を得る。
[3]、[1]に記載のストレージデバイスであって、
前記制御部は、前記コマンド処理時間と前記閾値との差分に基づき、前記待機時間の長さを決定する。
[4]、[1]に記載のストレージデバイスであって、
前記制御部は、ある期間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を設定する。
[5]、[4]に記載のストレージデバイスであって、
前記制御部は、ある周期毎に、少なくとも直近の周期の間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を更新する。
[6]、[4]に記載のストレージデバイスであって、
前記制御部は、前記複数のコマンドの前記コマンド処理時間の平均値を、前記閾値に設定する。
[7]、[4]に記載のストレージデバイスであって、
前記制御部は、前記閾値の上限値を記憶する領域を有し、前記上限値以下の範囲で前記閾値を設定する。
[8]、[7]に記載のストレージデバイスであって、
前記制御部は、前記上限値としてユーザにより指定された値を前記領域に記憶する。
[9]、[7]に記載のストレージデバイスであって、
前記領域は、前記閾値の下限値をさらに記憶し、
前記制御部は、前記上限値と前記下限値との間の範囲で前記閾値を設定する。
[10]、[1]に記載のストレージデバイスであって、
前記制御部は、前記待機時間の間に、前記ホストデバイスからのコマンドに基づかない前記ストレージデバイスの内部処理を実行する。
[11]、[10]に記載のストレージデバイスであって、
不揮発性メモリチップをさらに備え、
前記制御部は、前記不揮発性メモリチップに関する複数のコマンドが格納されるキューを有し、前記キューに格納された前記複数のコマンドを前記キューに格納された順に実行し、且つ、前記待機時間の間に、前記内部処理に関する1つ以上のコマンドを前記キューに格納する。
[12]ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第1制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第1制御動作とは異なる第2制御動作を行う制御部と、
を備えたストレージデバイス。
[13]ホストデバイスからのコマンドで要求された処理にかかったコマンド処理時間を計測し、
前記コマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから前記コマンドの完了報告を送信する、
ストレージデバイスの制御方法。
[14]、[13]に記載のストレージデバイスの制御方法であって、
前記コマンド処理時間の算出は、前記コマンドが受信された場合に計測が開始され、前記コマンドで要求された処理が完了した場合に計測が終了された時間計測結果に基づき行われる。
[15]、[13]に記載のストレージデバイスの制御方法であって、
前記待機時間の長さは、前記コマンド処理時間と前記閾値との差分に基づき決定される。
[1]ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンド受信部が前記コマンドを受信してから前記処理が完了するまでのコマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから、前記コマンド受信部に前記完了報告を送信させる制御部と、
を備えたストレージデバイス。
[2]、[1]に記載のストレージデバイスであって、
前記制御部は、前記コマンド受信部が前記コマンドを受信した場合に計測が開始され、前記処理が完了した場合に計測が終了された時間計測結果に基づき、前記コマンド処理時間を得る。
[3]、[1]に記載のストレージデバイスであって、
前記制御部は、前記コマンド処理時間と前記閾値との差分に基づき、前記待機時間の長さを決定する。
[4]、[1]に記載のストレージデバイスであって、
前記制御部は、ある期間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を設定する。
[5]、[4]に記載のストレージデバイスであって、
前記制御部は、ある周期毎に、少なくとも直近の周期の間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を更新する。
[6]、[4]に記載のストレージデバイスであって、
前記制御部は、前記複数のコマンドの前記コマンド処理時間の平均値を、前記閾値に設定する。
[7]、[4]に記載のストレージデバイスであって、
前記制御部は、前記閾値の上限値を記憶する領域を有し、前記上限値以下の範囲で前記閾値を設定する。
[8]、[7]に記載のストレージデバイスであって、
前記制御部は、前記上限値としてユーザにより指定された値を前記領域に記憶する。
[9]、[7]に記載のストレージデバイスであって、
前記領域は、前記閾値の下限値をさらに記憶し、
前記制御部は、前記上限値と前記下限値との間の範囲で前記閾値を設定する。
[10]、[1]に記載のストレージデバイスであって、
前記制御部は、前記待機時間の間に、前記ホストデバイスからのコマンドに基づかない前記ストレージデバイスの内部処理を実行する。
[11]、[10]に記載のストレージデバイスであって、
不揮発性メモリチップをさらに備え、
前記制御部は、前記不揮発性メモリチップに関する複数のコマンドが格納されるキューを有し、前記キューに格納された前記複数のコマンドを前記キューに格納された順に実行し、且つ、前記待機時間の間に、前記内部処理に関する1つ以上のコマンドを前記キューに格納する。
[12]ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第1制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第1制御動作とは異なる第2制御動作を行う制御部と、
を備えたストレージデバイス。
[13]ホストデバイスからのコマンドで要求された処理にかかったコマンド処理時間を計測し、
前記コマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから前記コマンドの完了報告を送信する、
ストレージデバイスの制御方法。
[14]、[13]に記載のストレージデバイスの制御方法であって、
前記コマンド処理時間の算出は、前記コマンドが受信された場合に計測が開始され、前記コマンドで要求された処理が完了した場合に計測が終了された時間計測結果に基づき行われる。
[15]、[13]に記載のストレージデバイスの制御方法であって、
前記待機時間の長さは、前記コマンド処理時間と前記閾値との差分に基づき決定される。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
100…ホストデバイス、200…ストレージデバイス、210…コマンド受信部、220…メモリコントローラ、221…リードライトコントローラ、222…内部処理コントローラ、223,223A…レイテンシコントローラ、223a…計測結果取得部、223b…比較部、223c…待機時間マネージャ、223d…完了報告送信許可部、223e…閾値設定部、223f…記憶部、240…NANDコントローラ、241…キュー、242…シーケンサ、250…時間計測部、251…監視タイマ、252…ウェイトタイマ、260,260−1,260−2,260−N…NAND。
Claims (5)
- ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンド受信部が前記コマンドを受信してから前記処理が完了するまでのコマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから、前記コマンド受信部に前記完了報告を送信させる制御部と、
を備えたストレージデバイス。 - 前記制御部は、前記コマンド受信部が前記コマンドを受信した場合に計測が開始され、前記処理が完了した場合に計測が終了された時間計測結果に基づき、前記コマンド処理時間を得る、
請求項1に記載のストレージデバイス。 - 前記制御部は、前記コマンド処理時間と前記閾値との差分に基づき、前記待機時間の長さを決定する、
請求項1に記載のストレージデバイス。 - 前記制御部は、ある期間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を設定する、
請求項1に記載のストレージデバイス。 - ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第1制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第1制御動作とは異なる第2制御動作を行う制御部と、
を備えたストレージデバイス。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017174930A JP2019049949A (ja) | 2017-09-12 | 2017-09-12 | ストレージデバイス |
US15/904,293 US20190079697A1 (en) | 2017-09-12 | 2018-02-23 | Storage device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017174930A JP2019049949A (ja) | 2017-09-12 | 2017-09-12 | ストレージデバイス |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019049949A true JP2019049949A (ja) | 2019-03-28 |
Family
ID=65631192
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017174930A Pending JP2019049949A (ja) | 2017-09-12 | 2017-09-12 | ストレージデバイス |
Country Status (2)
Country | Link |
---|---|
US (1) | US20190079697A1 (ja) |
JP (1) | JP2019049949A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021043580A (ja) * | 2019-09-09 | 2021-03-18 | キオクシア株式会社 | メモリシステムおよびガベッジコレクション制御方法 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI784120B (zh) * | 2019-01-17 | 2022-11-21 | 韓商愛思開海力士有限公司 | 用於儲存裝置之記憶體控制器、儲存裝置、儲存裝置之控制方法以及記錄媒體 |
US10942677B2 (en) * | 2019-01-24 | 2021-03-09 | Silicon Motion, Inc. | Method for performing access management of memory device, associated memory device and controller thereof, associated host device and associated electronic device |
US11748277B2 (en) * | 2020-03-05 | 2023-09-05 | Seagate Technology, Llc | Client input/output (I/O) access rate variation compensation |
US11321017B2 (en) | 2020-06-29 | 2022-05-03 | SK Hynix Inc. | Systems and methods for controlling completion rate of commands |
US11385810B2 (en) * | 2020-06-30 | 2022-07-12 | Sandisk Technologies Llc | Dynamic staggering for programming in nonvolatile memory |
CN113867640A (zh) * | 2021-09-28 | 2021-12-31 | 合肥兆芯电子有限公司 | 存储器轮询方法、存储器存储装置及存储器控制电路单元 |
US20240004582A1 (en) * | 2022-06-29 | 2024-01-04 | Micron Technology, Inc. | Monitoring and exporting command execution times in a semiconductor device |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9983831B2 (en) * | 2014-07-22 | 2018-05-29 | Ngd Systems, Inc. | System and method for consistent performance in a storage device |
US9946469B2 (en) * | 2016-03-21 | 2018-04-17 | Smart Modular Technologies, Inc. | Solid state storage system with latency management mechanism and method of operation thereof |
TWI595412B (zh) * | 2016-09-09 | 2017-08-11 | 大心電子(英屬維京群島)股份有限公司 | 資料傳輸方法、記憶體儲存裝置及記憶體控制電路單元 |
-
2017
- 2017-09-12 JP JP2017174930A patent/JP2019049949A/ja active Pending
-
2018
- 2018-02-23 US US15/904,293 patent/US20190079697A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021043580A (ja) * | 2019-09-09 | 2021-03-18 | キオクシア株式会社 | メモリシステムおよびガベッジコレクション制御方法 |
JP7321851B2 (ja) | 2019-09-09 | 2023-08-07 | キオクシア株式会社 | メモリシステムおよびガベッジコレクション制御方法 |
Also Published As
Publication number | Publication date |
---|---|
US20190079697A1 (en) | 2019-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2019049949A (ja) | ストレージデバイス | |
KR102667430B1 (ko) | 호스트 메모리를 이용하는 데이터 저장 장치 및 그것의 동작 방법 | |
US9916087B2 (en) | Method and system for throttling bandwidth based on temperature | |
US9977623B2 (en) | Detection of a sequential command stream | |
KR102618699B1 (ko) | 호스트에 의해 제어되는 스토리지 장치를 포함하는 컴퓨팅 시스템 | |
TWI473011B (zh) | 用於非揮發性儲存之可變超量供給 | |
TWI584289B (zh) | 記憶體管理方法、記憶體儲存裝置及記憶體控制電路單元 | |
KR20160049200A (ko) | 데이터 저장 장치의 작동 방법, 이를 포함하는 모바일 컴퓨팅 장치, 및 이의 작동 방법 | |
US10115458B2 (en) | Perform read or write on a non-volatile memory having a pending read or write based on temperature thereof | |
US9535607B2 (en) | Semiconductor system performing status read for semiconductor device and operating method thereof | |
EP2816482A1 (en) | Information processing apparatus, control circuit, and control method | |
JP6094677B2 (ja) | 情報処理装置、メモリダンプ方法、およびメモリダンププログラム | |
TWI648634B (zh) | 記憶體管理方法、記憶體儲存裝置及記憶體控制電路單元 | |
JP6167646B2 (ja) | 情報処理装置、制御回路、制御プログラム、および制御方法 | |
TW202238571A (zh) | 記憶體系統 | |
US9880749B2 (en) | Storage method and device for controlling the output timing of commands based on a hold time | |
US11790997B2 (en) | Memory system | |
JP5447617B2 (ja) | フラッシュメモリコントローラ、フラッシュメモリシステム、及びフラッシュメモリ制御方法 | |
WO2015170702A1 (ja) | ストレージ装置と情報処理システム及びストレージ制御方法とプログラム | |
US9870156B2 (en) | Memory system and method of controlling memory system | |
JP7381269B2 (ja) | ストレージコントローラ、ストレージ装置及びストレージ装置の制御方法 | |
TWI670599B (zh) | 記憶體管理方法以及儲存控制器 | |
TWI841689B (zh) | 儲存控制器、儲存裝置及其控制方法 | |
JP2019101708A (ja) | 不揮発性メモリデバイス | |
US11954367B2 (en) | Active time-based command prioritization in data storage devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180912 |