(57)【要約】【課題】ホストデバイスに対するレイテンシのばらつきの抑制を図ることができるストレージデバイスを提供することである。【解決手段】実施形態のストレージデバイスは、コマンド受信部と、制御部とを備える。前記コマンド受信部は、ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信する。前記制御部は、前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第１制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第１制御動作とは異なる第２制御動作を行う。【選択図】図３
2019049949.tif 000002
【特許請求の範囲】
【請求項１】
ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンド受信部が前記コマンドを受信してから前記処理が完了するまでのコマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから、前記コマンド受信部に前記完了報告を送信させる制御部と、
を備えたストレージデバイス。
【請求項２】
前記制御部は、前記コマンド受信部が前記コマンドを受信した場合に計測が開始され、前記処理が完了した場合に計測が終了された時間計測結果に基づき、前記コマンド処理時間を得る、
請求項１に記載のストレージデバイス。
【請求項３】
前記制御部は、前記コマンド処理時間と前記閾値との差分に基づき、前記待機時間の長さを決定する、
請求項１に記載のストレージデバイス。
【請求項４】
前記制御部は、ある期間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を設定する、
請求項１に記載のストレージデバイス。
【請求項５】
ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第１制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第１制御動作とは異なる第２制御動作を行う制御部と、
を備えたストレージデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ストレージデバイスに関する。
【背景技術】
【０００２】
ＳＳＤ（Solid State Drive）のようなストレージデバイスが知られている。ところで、ストレージデバイスは、ホストデバイスに対するレイテンシのばらつきが大きくなる場合がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１１１３３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、ホストデバイスに対するレイテンシのばらつきの抑制を図ることができるストレージデバイスを提供することである。
【課題を解決するための手段】
【０００５】
実施形態のストレージデバイスは、コマンド受信部と、制御部とを備える。前記コマンド受信部は、ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信する。前記制御部は、前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第１制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第１制御動作とは異なる第２制御動作を行う。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態のホストデバイスおよびストレージデバイスの一例を示す図。
【図２】第１の実施形態のコマンド処理の流れの一例を示す図。
【図３】第１の実施形態のコマンド受信部、時間計測部、およびレイテンシコントローラの一例を示す図。
【図４】第１の実施形態の閾値の設定処理の流れの一例を示すフローチャート。
【図５】第１の実施形態のレイテンシの調整を伴うストレージデバイスの処理の流れの一例を示すフローチャート。
【図６】第１の実施形態のストレージデバイスのリード動作の一例を示す図。
【図７】第１の実施形態のストレージデバイスのライト動作の一例を示す図。
【図８】第２の実施形態のコマンド受信部、時間計測部、およびレイテンシコントローラの一例を示す図。
【図９】第２の実施形態の閾値の設定処理の流れの一例を示すフローチャート。
【発明を実施するための形態】
【０００７】
以下、実施形態のストレージデバイスを、図面を参照して説明する。なお以下の説明では、同一または類似の機能を有する構成に同一の符号を付す。そして、それら構成の重複する説明は省略する場合がある。また、本願でいう「ＸＸに基づく」とは、「少なくともＸＸに基づく」ことを意味し、ＸＸに加えて別の要素に基づく場合も含む。また、「ＸＸに基づく」とは、ＸＸを直接に用いる場合に限定されず、ＸＸに対して演算や加工が行われたものに基づく場合も含む。「ＸＸ」は、任意の要素（例えば、任意の情報）である。
【０００８】
（第１の実施形態）
図１は、第１の実施形態のホストデバイス１００およびストレージデバイス２００の一例を示す図である。ホストデバイス１００とストレージデバイス２００は、例えば、ＳＡＴＡ（Serial Advanced Technology Attachment）インターフェース、ＳＡＳ（Serial Attached SCSI（Small Computer System Interface））インターフェース、ＰＣＩｅ（PCI Express）インターフェース、またはＮＶＭｅ（NVM Express ；Non-Volatile Memory Host Controller Interface）インターフェースを用いて接続される。
【０００９】
まず、ホストデバイス１００について説明する。ホストデバイス１００は、ストレージデバイス２００の外部に位置した「外部装置」の一例である。ホストデバイス１００は、ストレージデバイス２００が接続される装置を広く意味する。ホストデバイス１００は、例えば、サーバ装置またはパーソナルコンピュータなどの情報処理装置である。ホストデバイス１００は、例えば、ストレージデバイス２００の記憶空間を複数の論理領域に分割する。ホストデバイス１００は、複数の論理領域に互いに異なる論理アドレスを付与する。なお、ホストデバイス１００が論理アドレスに代えてキー情報を用いる場合、以下の説明における「論理アドレス」は「キー情報」と読み替えられてもよい。
【００１０】
ホストデバイス１００は、ストレージデバイス２００にデータ（以下、「ホストライトデータ」と称する）を書き込む場合に、ライトコマンドをストレージデバイス２００に送信する。「コマンド」とは、目的とする処理をコンピュータ（例えば、ストレージデバイス２００）に実行させる指示を広く意味する。なお、本願でいう「コマンド」とは、ホストデバイス１００が送信した指示に限定されず、ホストデバイス１００から受け取った指示に基づいてストレージデバイス２００の内部で生成された指示や、ストレージデバイス２００の内部処理（後述）に関する指示も含む。「コマンド」は、「指示」、「命令」、「信号」などと読み替えられてもよい。「ライトコマンド」とは、ホストライトデータの書き込み先を示す情報（例えば、書き込み先論理アドレス）を含むコマンドである。
【００１１】
一方で、ホストデバイス１００は、ストレージデバイス２００に書き込まれているデータを読み出す場合に、リードコマンドをストレージデバイス２００に送信する。「リードコマンド」とは、ホストデバイス１００による読み出し対象のデータ（以下、「ホストリードデータ」と称する）の読み出し先を示す情報（例えば、読み出し先論理アドレス）を含むコマンドである。また、ホストデバイス１００は、ストレージデバイス２００に書き込まれている少なくとも一部のデータを消去する場合に、イレーズコマンドをストレージデバイス２００に送信する。「イレーズコマンド」とは、消去対象のデータが書き込まれている領域を指定するコマンドである。
【００１２】
次に、ストレージデバイス２００について説明する。ストレージデバイス２００は、ＳＳＤのようなストレージデバイスである。例えば、ストレージデバイス２００は、データセンタなどのサーバ装置に搭載される。ただし、ストレージデバイス２００は、パーソナルコンピュータなどに搭載または装着されるストレージデバイスでもよい。例えば、ストレージデバイス２００は、ＵＳＢ（Universal Serial Bus）メモリ、またはＳＤ（登録商標）カードなどでもよい。
【００１３】
図１に示すように、ストレージデバイス２００は、例えば、コマンド受信部２１０、メモリコントローラ２２０、ＲＯＭ（Read Only Memory）２３０、ＮＡＮＤコントローラ２４０、時間計測部２５０、およびＮＡＮＤ２６０−１〜２６０−Ｎを含む。
【００１４】
コマンド受信部２１０、メモリコントローラ２２０、ＮＡＮＤコントローラ２４０、および時間計測部２５０は、例えば、ストレージデバイス２００のＣＰＵ（Central Processing Unit）のようなプロセッサがプログラムメモリに格納されたプログラムを実行することにより実現される。ただし、これらの機能部の一部または全部は、ＬＳＩ（Large Scale Integration）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field-Programmable Gate Array）などのハードウェア（例えば、回路部；circuitry）により実現されてもよい。コマンド受信部２１０、メモリコントローラ２２０、ＲＯＭ２３０、ＮＡＮＤコントローラ２４０、および時間計測部２５０は、ＳｏＣ（System on a Chip）として構成されてもよいし、複数のチップに分かれて構成されてもよい。
【００１５】
なお、図１では、コマンド受信部２１０、ＮＡＮＤコントローラ２４０、および時間計測部２５０は、説明の便宜上、メモリコントローラ２２０に含まれていないが、これに限定されず、メモリコントローラ２２０に、コマンド受信部２１０、ＮＡＮＤコントローラ２４０、および時間計測部２５０の機能が含まれていてもよい。ここで、本願で言う「制御部」は、少なくとも、メモリコントローラ２２０と、ＮＡＮＤコントローラ２４０と、時間計測部２５０とを含む。図１では、ＮＡＮＤコントローラ２４０は、複数のＮＡＮＤ２６０−１〜２６０−Ｎを制御するように記載されているが、複数のＮＡＮＤ２６０−１〜２６０−Ｎに対応する複数のＮＡＮＤコントローラ２４０が存在してもよい。また以下の説明では、ＮＡＮＤ２６０−１〜２６０−Ｎは、互いに区別されない場合は、単にＮＡＮＤ２６０と称される。以下、これら機能部について説明する。
【００１６】
まず、コマンド受信部２１０について説明する。コマンド受信部２１０は、ホストデバイス１００からコマンドを受信する。コマンド受信部２１０が受信するコマンドの種類は、リードコマンド、ライトコマンド、イレーズコマンドなどが代表例として挙げられるが、これらには限定されない。コマンド受信部２１０は、受信したコマンドに含まれる情報に基づき、受信したコマンドの種類を判定する。例えば、コマンド受信部２１０は、受信したコマンドがリードコマンドまたはライトコマンドであると判定された場合、受信したコマンドをメモリコントローラ２２０内のリードライトコントローラ２２１に送る。なお、受信したコマンドの種類の判定は、コマンド受信部２１０に代えて、メモリコントローラ２２０によって行われてもよい。
【００１７】
コマンド受信部２１０は、受信したコマンドで要求された処理（以下、「コマンド処理」と称する）が完了した場合、コマンド処理が完了したことを示す完了報告（以下、単に「完了報告」と称する）をホストデバイス１００に送信する。完了報告とは、コマンド処理の完了に対応して設定された所定の信号である。このため、完了報告は、「所定の信号」と読み替えられてもよい。
【００１８】
なお、完了報告は、コマンド受信部２１０が生成してもよく、レイテンシコントローラ２２３またはメモリコントローラ２２０内の他の機能部により生成された完了報告をコマンド受信部２１０が送信してもよい。コマンド受信部２１０は、「送受信機能部（transceiver）」と称されてもよい。なお、レイテンシの調整に関するコマンド受信部２１０の処理については後述する。
【００１９】
次に、メモリコントローラ２２０について説明する。メモリコントローラ２２０は、例えば、リードライトコントローラ２２１、内部処理コントローラ２２２、レイテンシコントローラ２２３、およびデータバッファ２２４を含む。
【００２０】
リードライトコントローラ２２１は、ホストデバイス１００により送信されたリードコマンドおよびライトコマンドを、コマンド受信部２１０を介して受信する。リードライトコントローラ２２１は、受信したコマンドがリードコマンドである場合、ＮＡＮＤ２６０からのホストリードデータのリードをＮＡＮＤコントローラ２４０に実施させる。ＮＡＮＤコントローラ２４０によりＮＡＮＤ２６０から読み出されたホストリードデータは、データバッファ２２４に一時的に格納される。リードライトコントローラ２２１は、データバッファ２２４に格納されたホストリードデータを、コマンド受信部２１０を介してホストデバイス１００に送信する。リードライトコントローラ２２１は、ホストデバイス１００に対するホストリードデータの送信が完了した場合、リードコマンドで要求された処理が完了したことを示す完了報告を、コマンド受信部２１０によりホストデバイス１００に送信させる。
【００２１】
リードライトコントローラ２２１は、受信したコマンドがライトコマンドである場合、ライトコマンドに伴うホストライトデータを、ライトキャッシュとして使用されるデータバッファ２２４に一時的に格納する。リードライトコントローラ２２１は、ＮＡＮＤ２６０へのホストライトデータのライトをＮＡＮＤコントローラ２４０に実施させる。リードライトコントローラ２２１は、ＮＡＮＤ２６０に対するホストライトデータの書き込みが完了した場合、ライトコマンドで要求された処理が完了したことを示す完了報告を、コマンド受信部２１０によりホストデバイス１００に送信させる。
【００２２】
内部処理コントローラ２２２は、例えば、リフレッシュコントローラ２２２ａと、ガーベジコレクションコントローラ２２２ｂとを含む。本明細書でいう「内部処理」とは、ホストデバイス１００からのコマンドには基づかないストレージデバイス２００の内部処理を意味する。例えば、内部処理は、ストレージデバイス２００を制御するためのソフトウェア、ファームウェアなどのプログラムによって起動および実行される、ＮＡＮＤ２６０に対する処理を意味する。このような内部処理は、例えば、以下に示すリフレッシュおよび／またはガーベジコレクションがある。ただし、内部処理は、リフレッシュおよびガーベジコレクションに限定されない。
【００２３】
「リフレッシュ」とは、ＮＡＮＤ２６０内のある領域に書き込まれているデータを、ＮＡＮＤ２６０内の別の領域、またはＮＡＮＤ２６０内のリフレッシュ前と同じ領域に書き込み直すことを意味する。例えば、リフレッシュは、誤り訂正符号によるエラー訂正の限界を超える前に、エラーの追加発生を抑制するために行われる。リフレッシュコントローラ２２２ａは、ＮＡＮＤ２６０に対するリフレッシュ動作を制御する。リフレッシュコントローラ２２２ａは、ＮＡＮＤ２６０のブロック（例えば論理ブロック）毎に、ブロックの状態を監視する。リフレッシュコントローラ２２２ａは、ブロックが所定の条件を満たした場合（例えば、ブロックに記憶されたデータに関するエラー発生数が所定数を超えた場合、またはブロックに含まれるメモリセル関してリードディスターブに伴うストレスが所定以上作用していると検出された場合）に、当該ブロックを対象とするリフレッシュを実行する。
【００２４】
「ガーベジコレクション」とは、ＮＡＮＤ２６０内の不要なデータが書き込まれている領域を再利用できるようにするため、不要なデータ以外のデータ（例えば有効データ）をＮＡＮＤ２６０内の任意の領域に移動させ、移動元の領域を解放する処理である。ガーベジコレクションコントローラ２２２ｂは、ＮＡＮＤ２６０に対するガーベジコレクション動作を制御する。ガーベジコレクションコントローラ２２２ｂは、例えばデータの書き込み先として利用可能なフリーブロックの数が一定数以下になった場合に、ガーベジコレクションを実行する。
【００２５】
レイテンシコントローラ２２３は、ホストデバイス１００から受信したコマンドに対する完了報告の送信タイミングを制御することで、ホストデバイス１００に対するレイテンシを制御する。なお、レイテンシコントローラ２２３については、後述する。
【００２６】
データバッファ２２４は、例えば、揮発性メモリである。データバッファ２２４は、ライトに用いられるライトバッファ（不図示）とリードに用いられるリードバッファ（不図示）を含んでもよく、内部処理に用いられるバッファをさらに含んでもよい。データバッファ２２４は、ライトコマンドに伴うホストライトデータを一時的に格納する。データバッファ２２４は、リードライトコントローラ２２１によりＮＡＮＤ２６０から読み出されたホストリードデータを一時的に格納する。さらに、データバッファ２２４は、リフレッシュコントローラ２２２ａによりＮＡＮＤ２６０から読み出されたリードデータ、およびガーベジコレクションコントローラ２２２ｂによりＮＡＮＤ２６０から読み出されたリードデータなどを一時的に格納する。さらに、データバッファ２２４には、各種管理データが格納される。管理データの一例は、後述するアドレス変換テーブルである。
【００２７】
ＲＯＭ２３０は、不揮発性メモリの一例である。ＲＯＭ２３０は、上述した管理データ、ソフトウェア、およびファームウェアを記憶している。ＲＯＭ２３０に記憶された種々の管理データ、ソフトウェア、およびファームフェアは、データバッファ２２４上にロードされて利用される。ＲＯＭ２３０は、例えば、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）、またはＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）である。
【００２８】
ＮＡＮＤコントローラ２４０は、ＮＡＮＤ２６０を制御する。ＮＡＮＤコントローラ２４０は、例えば、キュー２４１、およびシーケンサ２４２を含む。
【００２９】
キュー２４１には、ＮＡＮＤ２６０に関する複数のコマンドが格納される。キュー２４１に格納されるコマンドは、コマンド受信部２１０が受信したコマンドでもよく、コマンド受信部２１０が受信したコマンドに基づいてメモリコントローラ２２０によって生成されたコマンドでもよい。キュー２４１には、リードライトコントローラ２２１および内部処理コントローラ２２２（例えば、リフレッシュコントローラ２２２ａおよびガーベジコレクションコントローラ２２２ｂ）から供給されるコマンドが格納される。キュー２４１に格納された複数のコマンドは、キュー２４１に格納された順に、ＮＡＮＤコントローラ２４０によってＮＡＮＤ２６０に対する指示に変換されてシーケンサ２４２によって処理される。
【００３０】
シーケンサ２４２は、ＮＡＮＤ２６０変換された指示に従ってＮＡＮＤ２６０の動作を制御する。シーケンサ２４２は、リードライトコントローラ２２１および内部処理コントローラ２２２（例えば、リフレッシュコントローラ２２２ａおよびガーベジコレクションコントローラ２２２ｂ）から供給されたコマンドに基づく処理（ＮＡＮＤ２６０に対するリード、ライト、およびイレーズなど）を実行する。
【００３１】
時間計測部２５０は、監視タイマ２５１およびウェイトタイマ２５２を含む。本実施形態では、説明の便宜上、監視タイマ２５１およびウェイトタイマ２５２は、互いに異なる２つのタイマとして記載されているが、１つのタイマが監視タイマ２５１とウェイトタイマ２５２との両方の機能を有してもよい。なお、監視タイマ２５１およびウェイトタイマ２５２の機能については、後述する。
【００３２】
ＮＡＮＤ２６０は、「不揮発性メモリチップ」の一例である。各ＮＡＮＤ２６０は、例えば、複数のＮＡＮＤ型フラッシュメモリのチップを含んでいる。なお、不揮発性メモリチップは、ＮＡＮＤ型のフラッシュメモリに限定されず、ＮＯＲ型のフラッシュメモリでもよく、ＭＲＡＭ（Magnetoresistive Random Access Memory）でもよく、その他の種類のメモリチップでもよい。
【００３３】
ここで、本明細書中で使用されるいくつかの用語について定義する。図２は、第１の実施形態のコマンド処理の流れの一例を示す図である。
【００３４】
コマンドの「受信」とは、ホストデバイス１００により送信されたコマンドが、ストレージデバイス２００のコマンド受信部２１０によって受信されることを意味する。例えば、ＳＡＴＡ（Serial Advanced Technology Attachment）の場合、ホストデバイス１００がコマンドを格納したRegister Host to Device（Reg HD）ことを示すＦＩＳ（Frame Information Structure）をストレージデバイス２００に送信し、ホストデバイス１００により送信されたＦＩＳをストレージデバイス２００が受信したことを意味する。コマンドの受信は、リードコマンドの場合もライトコマンドの場合も同一である。
【００３５】
リードにおけるコマンド処理の「完了」とは、図２中の（ａ）に示すように、リードコマンドで指定された全てのホストリードデータがＮＡＮＤ２６０から読み出され、ストレージデバイス２００の外部に送信された（例えば、ホストデバイス１００に送信された）ことを意味する。ただし、リードにおけるコマンド処理の「完了」とは、リードにおけるコマンド処理が完了したことを示す完了報告をホストデバイス１００に送信することは含まない。
【００３６】
ライトにおけるコマンド処理の「完了」は、ストレージデバイス２００においてライトキャッシュが有効であるか、または無効であるかどうかによって異なる。図２中の（ｂ−１）に示すように、ライトキャッシュが無効の場合、ライトにおけるコマンド処理の「完了」とは、ライトコマンドで書き込みが要求された全てのホストライトデータがＮＡＮＤ２６０に書き込まれたことを意味する。詳しく述べると、上述したように、ホストライトデータは、リードライトコントローラ２２１の制御により、コマンド受信部２１０により受信された後、まずデータバッファ２２４に一時的に格納される。そして、ホストライトデータは、メモリコントローラ２２０およびＮＡＮＤコントローラ２４０の制御により、データバッファ２２４からＮＡＮＤ２６０に書き込まれる。このとき、メモリコントローラ２２０は、アドレス変換テーブルを更新する。アドレス変換テーブルは、ホストライトデータが書き込まれた書き込み先の論理アドレスと、ホストライトデータが書き込まれた物理アドレスとを対応付けたテーブルである。メモリコントローラ２２０は、コマンド受信部２１０からデータバッファ２２４にホストライトデータが格納された場合に、ホストライトデータに対応するアドレス変換テーブルの物理アドレスを、データバッファ２２４の物理アドレスに更新する。次に、メモリコントローラ２２０は、データバッファ２２４からＮＡＮＤ２６０にホストライトデータが書き込まれた場合に、ホストライトデータに対応するアドレス変換テーブルの物理アドレスを、ＮＡＮＤ２６０の物理アドレスに更新する。ライトにおけるコマンド処理の「完了」とは、例えば、ホストライトデータに対応するアドレス変換テーブルの物理アドレスがＮＡＮＤ２６０の物理アドレスに更新されたことを意味する。ただし、ライトにおけるコマンド処理の「完了」とは、ライトにおけるコマンド処理が完了したことを示す完了報告をホストデバイス１００に送信することは含まない。
【００３７】
図２中の（ｂ−２）に示すように、ライトキャッシュが有効の場合、ライトにおけるコマンド処理の「完了」とは、ライトコマンドで書き込みが要求された全てのホストライトデータがストレージデバイス２００において受信されたことを意味する。すなわち、ライトコマンドで書き込みが要求されたホストライトデータがＮＡＮＤ２６０に書き込まれたことを意味しない。例えば、メモリコントローラ２２０は、ホストライトデータが、コマンド受信部２１０により受信され、ライトキャッシュとして使用されるデータバッファ２２４に一時的に格納されたときに、ライトにおけるコマンド処理の「完了」と判断する。この場合、ライトにおけるコマンド処理の「完了」とは、例えば、ホストライトデータに対応するアドレス変換テーブルの物理アドレスがデータバッファ２２４の物理アドレスに更新されたことを意味してもよい。なお、ライトキャッシュが無効の場合と同様に、ライトにおけるコマンド処理の「完了」とは、ライトにおけるコマンド処理が完了したことを示す完了報告をホストデバイス１００に送信することは含まない。
【００３８】
「コマンド処理時間」とは、コマンド受信部２１０がコマンドを受信してから、コマンド処理が完了するまでの時間を意味する。この意味において、「コマンド処理時間」は、リードコマンドの場合もライトコマンドの場合も同一である。
【００３９】
「レイテンシ」とは、コマンド受信部２１０がコマンドを受信してから、ホストデバイス１００に対してストレージデバイス２００から前記コマンドに対応する完了報告が送信されるまでの時間を意味する。すなわち、「レイテンシ」は、コマンド処理時間と、コマンド処理完了から完了報告の送信が終わるまでの時間とを合計した時間である。これらの意味において、「レイテンシ」は、リードコマンドの場合もライトコマンドの場合も同一である。
【００４０】
次に、レイテンシの調整に関するコマンド受信部２１０、時間計測部２５０、およびレイテンシコントローラ２２３の機能について説明する。図３は、コマンド受信部２１０、時間計測部２５０、およびレイテンシコントローラ２２３の一例を示す図である。
【００４１】
コマンド受信部２１０は、所定のコマンドを受信した場合、コマンド受信の通知信号を時間計測部２５０の監視タイマ２５１に送信する。「所定のコマンド」とは、後述するレイテンシの調整対象となるコマンドである。本実施形態では、リードコマンドおよびライトコマンドが「所定のコマンド」の一例に該当するが、その他のコマンドが「所定のコマンド」に該当してもよい。一方で、本実施形態では、例えば、ストレージデバイス２００に関する一般的な情報を要求する問い合わせ(inquiry)コマンドは、「所定のコマンド」に該当しない。
【００４２】
コマンド受信部２１０は、さらに、所定のコマンドで要求されたコマンド処理が完了した場合に、コマンド処理が完了したことを示す信号をメモリコントローラ２２０から受け取る。コマンド受信部２１０は、コマンド処理が完了したことを示す信号をメモリコントローラ２２０から受け取った場合、コマンド処理完了の通知信号を監視タイマ２５１に送信する。なお、コマンド処理完了の通知信号は、コマンド受信部２１０に代えて、メモリコントローラ２２０から監視タイマ２５１に直接送信されてもよい。
【００４３】
監視タイマ２５１は、コマンド処理時間を計測するためのタイマである。監視タイマ２５１は、コマンド受信の通知信号をコマンド受信部２１０から受信すると、時間計測を開始する。監視タイマ２５１は、コマンド処理完了の通知信号をコマンド受信部２１０から受信すると、時間計測を終了する。監視タイマ２５１は、時間計測が終了すると、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの間の時間の計測結果（以下、「時間計測結果」と称する）を時間計測部２５０内の記憶部に格納する。監視タイマ２５１は、例えば、計測の開始時に０にセットされ、計測終了までカウントアップし、計測の終了時にカウントを停止し、計測終了時のカウント値を計測時間として出力するタイマでもよく、計測開始時の時刻と計測終了時の時刻との差分から計測時間を算出するタイマであってもよい。
【００４４】
本実施形態では、監視タイマ２５１は、コマンド処理の時間計測結果として、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの計測時間を示す情報を、レイテンシコントローラ２２３に通知する。これに代えて、監視タイマ２５１は、コマンド処理の時間計測結果として、計測開始時の時刻および計測終了時の時刻を示す情報を、レイテンシコントローラ２２３に出力してもよい。この場合、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの間の時間は、レイテンシコントローラ２２３によって算出される。
【００４５】
ウェイトタイマ２５２は、コマンド処理完了時に対して完了報告の送信を遅らせるための待機時間（以下、単に「待機時間」と称する）の経過を検出するためのタイマである。例えば、「待機時間」とは、コマンド処理完了から、完了報告の送信許可を与えるまでの時間である。待機時間は、レイテンシコントローラ２２３によって設定される。ウェイトタイマ２５２は、レイテンシコントローラ２２３からの待機時間のカウント開始を指示するカウント開始指示信号に基づきカウントを開始する。ウェイトタイマ２５２は、レイテンシコントローラ２２３によって設定された待機時間の経過後、待機時間の経過を知らせる待機時間経過通知信号をレイテンシコントローラ２２３に送信する。ウェイトタイマ２５２は、カウント開始時に０にセットされ、待機時間の結果までカウントアップし、待機時間の経過にカウントを停止するタイマでもよく、カウント開始時に待機時間にセットされ、待機時間の経過までカウントダウンし、待機時間の経過時（すなわち、カウンタ値が０）にカウントを停止するタイマでもよい。
【００４６】
レイテンシコントローラ２２３は、計測結果取得部２２３ａ、比較部２２３ｂ、待機時間マネージャ２２３ｃ、完了報告送信許可部２２３ｄ、および閾値設定部２２３ｅを含む。
【００４７】
計測結果取得部２２３ａは、例えば、監視タイマ２５１から時間計測結果を通知されることで、時間計測結果を取得する。これに代えて、計測結果取得部２２３ａは、所定のトリガ信号（例えば、監視タイマ２５１から送信される計測終了の通知信号）に基づき、監視タイマ２５１の内部に格納された計測結果を読み取ることによって時間計測結果を取得してもよい。計測結果取得部２２３ａは、監視タイマ２５１から取得された時間計測結果に基づき、コマンド処理時間を得る。例えば、計測結果取得部２２３ａは、監視タイマ２５１により計測されたコマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの計測時間を、コマンド処理時間として取得する。これに代えて、計測結果取得部２２３ａは、監視タイマ２５１から受け取る計測開始時の時刻および計測終了時の時刻を示す情報に基づき、コマンド受信の通知信号の受信からコマンド処理完了の通知信号の受信までの間の時間をコマンド処理時間として算出することで、コマンド処理時間を取得してもよい。計測結果取得部２２３ａは、取得したコマンド処理時間を比較部２２３ｂおよび待機時間マネージャ２２３ｃに送る。
【００４８】
比較部２２３ｂは、計測結果取得部２２３ａにより取得されたコマンド処理時間と、閾値設定部２２３ｅが保持する閾値とを比較する。閾値は、完了報告の送信前に待機時間を空けるか否かを判定するための閾値である。閾値は、「レイテンシのターゲット値」と称されてもよい。比較部２２３ｂは、コマンド処理時間が閾値以上の場合、コマンド処理時間が閾値以上であることを示す信号を、完了報告送信許可部２２３ｄに送る。一方で、比較部２２３ｂは、コマンド処理時間が閾値よりも小さい場合、コマンド処理時間が閾値よりも小さいことを示す信号を、待機時間マネージャ２２３ｃに送る。
【００４９】
待機時間マネージャ２２３ｃは、コマンド処理時間が閾値よりも小さいことを示す信号を比較部２２３ｂから受け取る場合、コマンド処理時間と閾値との差分を算出し、コマンド受信部２１０による完了報告の送信を遅らせる待機時間を決定する。例えば、待機時間マネージャ２２３ｃは、コマンド処理時間と閾値との差分に基づき、待機時間の長さを決定する。例えば、待機時間マネージャ２２３ｃは、コマンド処理時間と閾値との差分が大きければ大きいほど、長い待機時間を決定する。本実施形態では、待機時間マネージャ２２３ｃは、コマンド処理時間と閾値との差分と略同じ時間を、待機時間の長さとして決定する。待機時間マネージャ２２３ｃは、決定した待機時間をウェイトタイマ２５２に設定する。待機時間マネージャ２２３ｃは、カウント開始指示信号をウェイトタイマ２５２に送信することで、待機時間の残り時間の計測を開始する。待機時間マネージャ２２３ｃは、待機時間経過通知信号をウェイトタイマ２５２から受け取る。待機時間マネージャ２２３ｃは、待機時間経過通知信号をウェイトタイマ２５２から受け取った場合、待機時間が経過したことを示す信号を、完了報告送信許可部２２３ｄに送る。なお、待機時間の長さは、コマンド処理時間と閾値との差分に限らず、あらかじめ設定された複数の待機時間の中から、１つを選択することによって決定されてもよい。
【００５０】
完了報告送信許可部２２３ｄは、コマンド処理時間が閾値以上であることを示す信号を比較部２２３ｂから受け取る場合に、コマンド受信部２１０に完了報告の送信許可信号を送信する。完了報告送信許可部２２３ｄは、待機時間が経過したことを示す信号を待機時間マネージャ２２３ｃから受け取る場合、コマンド受信部２１０に完了報告の送信許可信号を送信する。送信許可信号は、「コマンド受信部に完了報告を送信させる」ことの指示の一例である。
【００５１】
本実施形態では、コマンド受信部２１０は、所定のコマンドで要求されたコマンド処理が完了した場合であっても、完了報告送信許可部２２３ｄから送信許可信号を受け取らない限り、ホストデバイス１００に対してコマンドの完了報告を送信しない。コマンド受信部２１０は、完了報告送信許可部２２３ｄから送信許可信号を受け取った場合、ホストデバイス１００に対してコマンドの完了報告を送信する。なお、コマンド受信部２１０は、待機時間マネージャ２２３ｃから送信許可信号を受け取ることに代えて、ウェイトタイマ２５２から待機時間経過通知信号を受け取ってもよい。この場合、コマンド受信部２１０は、ウェイトタイマ２５２から待機時間経過通知信号を受け取った場合、ホストデバイス１００に対してコマンドの完了報告を送信してもよい。
【００５２】
閾値設定部２２３ｅは、完了報告の前に待機時間を空けるか否かの判定に用いられる上記閾値を設定する。閾値設定部２２３ｅは、設定した閾値を、例えば閾値設定部２２３ｅ内の記憶領域に保持する。例えば、閾値設定部２２３ｅは、所定の期間（例えば、２４時間）にコマンド受信部２１０により受信された複数のコマンドから、サンプルとして複数のコマンド（例えば、１００，０００コマンド）を抽出する。なお、抽出は、所定の条件に基づいてもよく、無作為でもよい。そして、閾値設定部２２３ｅは、サンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を設定する。本実施形態では、閾値設定部２２３ｅは、サンプルとして抽出された複数のコマンドの各々のコマンド処理時間に基づき、前記サンプルとして抽出された複数のコマンドのコマンド処理時間の平均値を算出する。そして、閾値設定部２２３ｅは、算出したコマンド処理時間の平均値を、閾値として設定する。ただし、所定の期間は、２４時間に限定されず、任意の時間に設定可能である。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「所定の期間に受信された複数のコマンド」の一例である。ただし、「所定の期間に受信された複数のコマンド」は、上記例に限定されず、所定の期間に受信された全てのコマンドでもよい。
【００５３】
本実施形態では、閾値設定部２２３ｅは、ある周期（例えば、２４時間）毎に、少なくとも直近の周期の間にコマンド受信部２１０により受信された複数のコマンドからサンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を更新する。「少なくとも直近の周期の間にコマンド受信部２１０により受信された複数のコマンドのコマンド処理時間に基づき」とは、直近の周期の間にコマンド受信部２１０により受信された複数のコマンドのコマンド処理時間のみに基づく場合でもよいし、直近の周期の間にコマンド受信部２１０により受信された複数のコマンドに加え、それよりも前に受信した１以上のコマンドのコマンド処理時間に基づく場合も含む。例えば、閾値設定部２２３ｅは、２４時間毎に閾値を更新する場合、直近の２４時間の間に受信されたコマンドのコマンド処理時間のみに基づいてもよいし、直近の２４時間を含む一定の期間（例えば、直近４８時間）に受信されたコマンドのコマンド処理時間に基づいてもよい。また、所定の周期は、２４時間に限定されず、任意の周期が設定可能である。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「直近の周期の間に受信された複数のコマンド」の一例である。ただし、「直近の周期の間に受信された複数のコマンド」は、上記例に限定されず、直近の周期の間に受信された全てのコマンドでもよい。
【００５４】
閾値は、例えば、予め初期値が与えられ、その後適宜更新されてもよい。また、更新された閾値は、例えば、ＮＡＮＤ２６０に格納されてもよい。この場合、ストレージデバイス２００の電源が切られた場合であっても、次にストレージデバイス２００の電源が入れられた場合にＮＡＮＤ２６０から読み出されて用いられてもよい。
【００５５】
次に、本実施形態のストレージデバイス２００の処理の流れの一例について説明する。ストレージデバイスの処理の流れは、（１）閾値の設定処理と、（２）設定された閾値に基づきレイテンシを調整する処理とに大きく分かれる。そのため、ここでは上記２つを分けて説明する。図４は、ストレージデバイス２００の閾値の設定処理の流れの一例を示すフローチャートである。
【００５６】
まず、コマンド受信部２１０は、ホストデバイス１００からコマンドを受信する（Ｓ１０１）。コマンド受信部２１０は、受信したコマンドの種類を判定する（Ｓ１０２）。コマンド受信部２１０は、受信したコマンドが所定のコマンド（例えば、リードコマンドまたはライトコマンド）でない場合（Ｓ１０２：ＮＯ）は、Ｓ１０８の処理に移る。
【００５７】
コマンド受信部２１０は、受信したコマンドが所定のコマンドである場合（Ｓ１０２：ＹＥＳ）、コマンド受信の通知信号を監視タイマ２５１に送信する。これにより、監視タイマ２５１が時間計測を開始する（Ｓ１０３）。次に、メモリコントローラ２２０は、ホストデバイス１００により送信されたコマンドをコマンド受信部２１０を介して受け取り、そのコマンドで要求されたコマンド処理を実行する（Ｓ１０４）。なお、Ｓ１０３の処理とＳ１０４の処理は、いずれが先に開始されてもよいし、互いに略同時に開始されてもよい。
【００５８】
メモリコントローラ２２０は、受信したコマンドの処理が完了するまで（Ｓ１０５：ＮＯ）、コマンド処理を引き続き行う。メモリコントローラ２２０は、コマンド処理が完了すると（Ｓ１０５：ＹＥＳ）、コマンド処理が完了したことを示す信号をコマンド受信部２１０に送る。コマンド受信部２１０は、コマンド処理が完了したことを示す信号を受け取った場合、コマンド処理完了の通知信号を監視タイマ２５１に送信する。これにより、監視タイマ２５１は、時間計測を終了する（Ｓ１０６）。次に、レイテンシコントローラ２２３の計測結果取得部２２３ａは、監視タイマ２５１から時間計測結果を取得し、取得された時間計測結果に基づき、コマンド処理時間を得る（Ｓ１０７）。
【００５９】
ストレージデバイス２００は、Ｓ１０１〜Ｓ１０７の処理を、所定の周期（例えば、２４時間）の間、繰り返し行う（Ｓ１０８：ＮＯ）。ストレージデバイス２００は、前記所定の周期が経過したと判定された場合（Ｓ１０８：ＹＥＳ）、次の処理に進む。すなわち、レイテンシコントローラ２２３の閾値設定部２２３ｅは、所定の期間（例えば、直近の周期の間）にコマンド受信部２１０により受信された複数のコマンドのコマンド処理時間の平均値を算出する（Ｓ１０９）。そして、閾値設定部２２３ｅは、算出したコマンド処理時間の平均値を閾値として設定する（Ｓ１１０）。
【００６０】
図５は、レイテンシの調整を伴うストレージデバイス２００の処理の流れの一例を示すフローチャートである。まず、コマンド受信部２１０は、ホストデバイス１００からコマンドを受信する（Ｓ２０１）。コマンド受信部２１０は、受信したコマンドの種類を判定する（Ｓ２０２）。コマンド受信部２１０は、受信したコマンドが所定のコマンド（例えば、リードコマンドまたはライトコマンド）でない場合（Ｓ２０２：ＮＯ）は、本フローの処理を終了する。
【００６１】
コマンド受信部２１０は、受信したコマンドが所定のコマンドである場合（Ｓ２０２：ＹＥＳ）、コマンド受信の通知信号を監視タイマ２５１に送信する。これにより、監視タイマ２５１が時間計測を開始する（Ｓ２０３）。次に、メモリコントローラ２２０は、ホストデバイス１００により送信されたコマンドをコマンド受信部２１０を介して受け取り、そのコマンドで要求されたコマンド処理を実行する（Ｓ２０４）。なお、Ｓ２０３の処理とＳ２０４の処理は、いずれが先に開始されてもよいし、互いに略同時に開始されてもよい。
【００６２】
メモリコントローラ２２０は、受信したコマンドの処理が完了するまで（Ｓ２０５：ＮＯ）、コマンド処理を引き続き行う。メモリコントローラ２２０は、コマンド処理が完了すると（Ｓ２０５：ＹＥＳ）、コマンド処理が完了したことを示す信号をコマンド受信部２１０に送る。コマンド受信部２１０は、コマンド処理が完了したことを示す信号を受け取った場合、コマンド処理完了の通知信号を監視タイマ２５１に送信する。これにより、監視タイマ２５１は、時間計測を終了する（Ｓ２０６）。次に、レイテンシコントローラ２２３の計測結果取得部２２３ａは、監視タイマ２５１から時間計測結果を取得し、取得された時間計測結果に基づき、コマンド処理時間を得る（Ｓ２０７）。
【００６３】
次に、比較部２２３ｂは、計測結果取得部２２３ａが得たコマンド処理時間と、閾値設定部２２３ｅが保持する閾値とを比較する（Ｓ２０８）。比較部２２３ｂは、コマンド処理時間が閾値以上の場合（Ｓ２０８：ＮＯ）、コマンド処理時間が閾値以上であることを示す信号を完了報告送信許可部２２３ｄに送る。完了報告送信許可部２２３ｄは、コマンド処理時間が閾値以上であることを示す信号を比較部２２３ｂから受け取った場合、コマンド受信部２１０に完了報告の送信許可信号を送信する（Ｓ２１２）。コマンド受信部２１０は、完了報告の送信許可信号を受け取った場合、完了報告をホストデバイス１００に送信する（Ｓ２１３）。これらＳ２０８がＮＯである場合の処理は、「第１制御動作」の一例である。
【００６４】
一方で、比較部２２３ｂは、コマンド処理時間が閾値よりも小さい場合（Ｓ２０８：ＹＥＳ）、比較部２２３ｂは、コマンド処理時間が閾値よりも小さいことを示す信号を待機時間マネージャ２２３ｃに送信する。待機時間マネージャ２２３ｃは、コマンド処理時間と閾値との差分に基づき待機時間を決定し、決定した待機時間をウェイトタイマ２５２に設定する（Ｓ２０９）。さらに、待機時間マネージャ２２３ｃは、カウント開始指示信号をウェイトタイマ２５２に送信する。これにより、ウェイトタイマ２５２は、待機時間の残り時間の計測を開始する（Ｓ２１０）。
【００６５】
ウェイトタイマ２５２は、待機時間が経過した場合（Ｓ２１１：ＹＥＳ）、待機時間の経過通知信号を待機時間マネージャ２２３ｃに送信する。待機時間マネージャ２２３ｃは、待機時間の経過通知信号を受け取った場合、完了報告送信許可部２２３ｄに完了報告の送信許可信号を送信する（Ｓ２１２）。コマンド受信部２１０は、完了報告の送信許可信号を受け取った場合、完了報告をホストデバイス１００に送信する（Ｓ２１３）。これらＳ２０８がＹＥＳである場合の処理は、第１制御動作とは異なる「第２制御動作」の一例である。これにより、コマンド処理時間が閾値よりも短い場合、完了報告の送信に対して待機時間が設けられることでレイテンシが調整される。
【００６６】
ここで、内部処理コントローラ２２２は、待機時間が経過するまでの間（Ｓ２１１：ＮＯ）、例えば、ホストデバイス１００からのコマンドに基づかないストレージデバイス２００の内部処理を実行してもよい（Ｓ２１４）。例えば、内部処理コントローラ２２２は、待機時間の間に、リフレッシュおよび／またはガーベジコレクションの処理を実行してもよい。本実施形態では、内部処理コントローラ２２２は、待機時間の間に、リフレッシュおよび／またはガーベジコレクションに関する１つ以上のコマンドを、ＮＡＮＤコントローラ２４０のキュー２４１に格納する。これにより、キュー２４１において、ホストリードデータの読み出しおよび／またはライトリードデータの書き込みに関する複数のコマンドの間に、リフレッシュおよび／またはガーベジコレクションに関する１以上のコマンドが挿入される。これにより、内部処理に関するコマンドが消化されやすくなる。なお、Ｓ２１４のステップは、任意であり、必須ではない。また、Ｓ２１４のステップは、待機時間に意図的に実施されてもよいが、待機時間であるか否かに関係なく、ＮＡＮＤコントローラ２４０のキュー２４１に空きがあることの結果として実行されてもよい。
【００６７】
次に、本実施形態のストレージデバイス２００の動作の一例について説明する。図６は、ストレージデバイス２００のリード動作の一例を示す図である。なお図６では、ウェイトタイマ２５２として、待機時間をカウントダウンするタイマが用いられた例を示す。
【００６８】
まず、図６中の（ａ）を参照し、コマンド処理時間が閾値よりも小さい場合について説明する。ホストデバイス１００から送信されたリードコマンドをストレージデバイス２００が受信すると、監視タイマ２５１は、時間計測を開始する。リードコマンドで指定された全てのホストデータがＮＡＮＤ２６０から読み出され、ストレージデバイス２００の外部に送信されたときが、コマンド処理完了である。ここで、コマンド処理が完了したタイミングでの監視タイマ２５１のカウント値がＭであり、閾値はＴであり、Ｍ＜Ｔであると仮定する。このとき、待機時間マネージャ２２３ｃは、（Ｔ−Ｍ）の値をウェイトタイマ２５２に設定する。ウェイトタイマ２５２は、カウント値のカウントダウンを開始する。そして、ウェイトタイマ２５２のカウント値が０になったとき、待機時間マネージャ２２３ｃは、完了報告送信許可部２２３ｄに完了報告の送信許可信号を送信する。その結果、コマンド受信部２１０は、完了報告をホストデバイス１００に送信する。このような動作によれば、図６中の（ａ）に示すように、コマンド処理完了と完了報告の送信開始の間に、コマンド処理時間と閾値との差分に対応する待機時間を空けることができる。
【００６９】
次に、図６中の（ｂ）を参照し、コマンド処理時間が閾値以上の場合について説明する。コマンド処理の完了までの動作は、図６中の（ａ）と同じである。ここで、コマンド処理が完了したタイミングでの監視タイマ２５１のカウント値がＶであり、閾値はＴであり、Ｖ＞Ｔであると仮定する。このとき、比較部２２３ｂは、コマンド処理時間が閾値以上であることを示す信号を完了報告送信許可部２２３ｄに送る。これにより、待機時間を空けずに完了報告送信許可部２２３ｄにより完了報告の送信許可信号を送信させる。これにより、コマンド受信部２１０は、コマンド処理が完了した後すぐに完了報告をホストデバイス１００に送信する。
【００７０】
図７は、ストレージデバイス２００のライト動作の一例を示す図である。なお図７では、ウェイトタイマ２５２として、待機時間をカウントダウンするタイマが用いられた例を示す。なお、図７においては、ライトキャッシュが無効の場合の動作について説明するが、ライトキャッシュが有効の場合の動作は、コマンド処理完了が、ライトコマンドで書き込みが要求された全てのホストライトデータがストレージデバイス２００において受信されたことを意味することを除き、ライトキャッシュが無効の場合の動作と同様である。
【００７１】
まず、図７中の（ａ）を参照し、コマンド処理時間が閾値よりも小さい場合について説明する。ストレージデバイス２００ホストデバイス１００から送信されたライトコマンドをストレージデバイス２００が受信すると、監視タイマ２５１は、時間計測を開始する。ライトコマンドで指定された全てのデータがＮＡＮＤ２６０に格納された（例えば、ライトデータに対応するアドレス変換テーブルの物理アドレスがＮＡＮＤ２６０の物理アドレスに更新された）ときが、コマンド処理完了である。ここで、コマンド処理が完了したタイミングでの監視タイマ２５１のカウント値がＭであり、閾値はＴであり、Ｍ＜Ｔであると仮定する。このとき、待機時間マネージャ２２３ｃは、（Ｔ−Ｍ）の値をウェイトタイマ２５２に設定する。ウェイトタイマ２５２は、カウント値のカウントダウンを開始する。そして、ウェイトタイマ２５２のカウント値が０になったとき、待機時間マネージャ２２３ｃは、完了報告送信許可部２２３ｄに完了報告の送信許可信号を送信する。その結果、コマンド受信部２１０は、完了報告をホストデバイス１００に送信する。このような動作によれば、図７中の（ａ）に示すように、コマンド処理完了と完了報告の送信開始の間に、コマンド処理時間と閾値との差分に対応する待機時間を空けることができる。
【００７２】
次に、図７中の（ｂ）を参照し、コマンド処理時間が閾値以上の場合について説明する。コマンド処理の完了までの動作は、図７中の（ａ）と同じである。ここで、コマンド処理が完了したタイミングでの監視タイマ２５１のカウント値がＶであり、閾値はＴであり、Ｖ＞Ｔであると仮定する。このとき、比較部２２３ｂは、コマンド処理時間が閾値以上であることを示す信号を完了報告送信許可部２２３ｄに送る。これにより、待機時間を空けずに完了報告送信許可部２２３ｄにより完了報告の送信許可信号を送信させる。これにより、コマンド受信部２１０は、コマンド処理が完了した後すぐに完了報告をホストデバイス１００に送信する。
【００７３】
以上のような構成によれば、ホストデバイス１００に対するレイテンシのばらつきの抑制を図ることができる。ここで、レイテンシが調整されない比較例について考える。一般的なストレージデバイス２００では、ホストデバイス１００からのコマンドで要求されたコマンド処理に加え、ストレージデバイスの内部処理（例えば、リフレッシュおよび／またはガーベジコレクション）が並行して動作している。このため、ホストデバイス１００に対するレイテンシにばらつきが生じる場合がある。一方で、ユーザは、均一なレイテンシを期待している。
【００７４】
そこで、本実施形態では、ストレージデバイス２００は、コマンド受信部２１０と、制御部とを備える。コマンド受信部２１０は、ホストデバイス１００からコマンドを受信し、コマンドで要求された処理が完了した場合に完了報告をホストデバイス１００に送信する。制御部は、コマンド受信部２１０がコマンドを受信してから前記処理が完了するまでのコマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから、コマンド受信部２１０に完了報告を送信させる。これにより、コマンド処理時間が短い場合に完了報告の送信を敢えて遅らせることで、レイテンシのばらつきを抑制することができる。その結果、ユーザの満足度の向上を図ることができる。
【００７５】
本実施形態では、制御部は、コマンド受信部２１０がコマンドを受信した場合に計測が開始され、前記処理が完了した場合に計測が終了された時間計測結果に基づき、コマンド処理時間を得る。このような構成によれば、時間を計測することにより１つ１つのコマンドに関するコマンド処理時間を正確に得ることができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
【００７６】
本実施形態では、制御部は、コマンド処理時間と閾値との差分に基づき、待機時間の長さを決定する。このような構成によれば、コマンド処理時間と閾値との差分に基づいて、コマンド毎に待機時間を変化させることができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
【００７７】
本実施形態では、制御部は、ある期間にコマンド受信部２１０により受信された複数のコマンドのコマンド処理時間に基づき、閾値を設定する。このような構成によれば、ある期間における、実際のストレージデバイス２００の動作状態に基づいて閾値を設定することができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
【００７８】
本実施形態では、制御部は、複数のコマンドのコマンド処理時間の平均値を、閾値に設定する。このような構成によれば、平均値よりも短い処理時間のコマンドに対するレイテンシが、待機時間を空けることによって長くなる。このように、平均値よりも短い処理時間のコマンドに対するレイテンシのみを長くすることにより、ばらつきを効果的に抑制することができる。なお、制御部は、複数のコマンドのコマンド処理時間の平均値に代えて、複数のコマンドのコマンド処理時間の中央値または最頻値を閾値に設定してもよい。
【００７９】
本実施形態では、制御部は、ある周期毎に、少なくとも直近の周期の間にコマンド受信部２１０により受信された複数のコマンドのコマンド処理時間に基づき、閾値を更新する。このような構成によれば、ストレージデバイス２００が直近の周期の間に受信したコマンドのコマンド処理時間を反映することで、ストレージデバイスの最新の動作環境および／またはストレージデバイスの最新の内部状態に応じた閾値を設定することができる。これにより、レイテンシのばらつきをさらに高いレベルで抑制することができる。
【００８０】
本実施形態では、レイテンシの調整対象となる所定のコマンド（例えば、リードコマンドおよびライトコマンド）で同一の閾値を使用するものとした。ただし、閾値は、コマンドの種類毎で異なる閾値を有してもよい。すなわち、リードコマンドとライトコマンドとで互いに異なる閾値が設定されてもよい。この場合、図４に示されるストレージデバイス２００の閾値の設定処理、および図５に示されるストレージデバイス２００の処理は、コマンドの種類毎に行われてもよい。
【００８１】
ここで、ストレージデバイス２００では、ストレージデバイス２００の内部で所定の条件が満たされた場合、ホストデバイス１００からのコマンドに基づかないストレージデバイス２００の内部処理（例えば、リフレッシュおよび／またはガーベジコレクション）が実行される。このような内部処理は、一般的にホストデバイス１００からのコマンド処理と並行して行われるが、リードコマンドおよびライトコマンドに対する応答時間と比べて時間がかかる場合がある。このような内部処理の要求がストレージデバイス２００の内部で溜まり、溜まった内部処理の要求が連続して実行されると、リードコマンドおよびライトコマンドのレイテンシが長くなることがある。その結果、ホストデバイス１００に対するレイテンシが大きくばらつくことがある。
【００８２】
一方で、本実施形態では、制御部は、待機時間の間に、ホストデバイス１００からのコマンドに基づかないストレージデバイス２００の内部処理を実行する。このような構成によれば、内部処理に関するコマンドは、完了報告送信前の待機時間（すなわち、ＮＡＮＤコントローラ２４０のキュー２４１が比較的空いている時間の間）にキュー２４１投入される。これにより、内部処理に関するコマンドのキュー２４１への投入が分散される。これにより、内部処理の要求がストレージデバイス２００の内部で一定以上溜まることを抑制することができる。これにより、溜まった内部処理の要求が連続して実行されることを抑制することができる。その結果、レイテンシのばらつきをさらに高いレベルで抑制することができる。
【００８３】
（第２の実施形態）
次に、第２の実施形態について説明する。本実施形態では、閾値調整範囲の上限値および下限値がユーザの指定に基づき設定される点で第１の実施形態とは異なる。なお、以下に説明する以外の構成は、第１の実施形態と同様である。
【００８４】
図８は、第２の実施形態のコマンド受信部２１０、時間計測部２５０、およびレイテンシコントローラ２２３Ａの一例を示す図である。図８に示すように、レイテンシコントローラ２２３Ａは、計測結果取得部２２３ａ、比較部２２３ｂ、待機時間マネージャ２２３ｃ、完了報告送信許可部２２３ｄ、閾値設定部２２３ｅ、および記憶部２２３ｆを含む。
【００８５】
記憶部２２３ｆの一例は、例えば、レイテンシコントローラ２２３Ａを実現するファームウェアのパラメータ格納領域である。記憶部２２３ｆは、閾値設定部２２３ｅが設定する閾値の上限値および下限値を記憶する。本実施形態では、閾値設定部２２３ｅは、閾値の上限値および下限値として、ユーザによって指定された値を記憶部２２３ｆに記憶する。すなわち、閾値設定部２２３ｅは、例えばホストデバイス１００およびコマンド受信部２１０を通じて、閾値の上限値および下限値を指定するユーザの指示を受け付け、ユーザにより指定された閾値の上限値および下限値を記憶部２２３ｆに登録する。例えば、閾値の上限値および下限値は、ソフトウェアまたはファームウェアによって初期値が与えられており、ユーザの指示に基づき変更されてもよい。また、閾値の上限値および下限値は、ユーザの指示に基づかず、レイテンシコントローラ２２３Ａの内部動作によって設定されてもよい。
【００８６】
本実施形態では、閾値設定部２２３ｅは、ユーザにより指定された閾値の上限値と下限値との間の調整範囲で、コマンド処理時間と比較される閾値（第１の実施形態と同じく、完了報告の送信前に待機時間を空けるか否かを判定に用いられる閾値）を設定する。例えば、閾値設定部２２３ｅは、所定の期間（例えば、２４時間）にコマンド受信部２１０により受信された複数のコマンドから、サンプルとして複数のコマンド（例えば、１００，０００コマンド）を抽出する。なお、抽出は、所定の条件に基づいてもよく、無作為でもよい。サンプルとして抽出される複数のコマンドは、上限値と下限値との間の範囲内にあるもののみであってもよい。そして、閾値設定部２２３ｅは、サンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を設定する。本実施形態では、閾値設定部２２３ｅは、サンプルとして抽出された複数のコマンドの各々のコマンド処理時間に基づき、サンプルとして抽出された複数のコマンドのコマンド処理時間のなかで、閾値の上限値と下限値との間のなかで最大となるコマンド処理時間を閾値として設定する。なお、閾値設定部２２３ｅ、例えば、サンプルとして抽出された複数のコマンドのコマンド処理時間の全てが下限値を下回る場合、前記下限値を閾値として設定してもよい。また、閾値設定部２２３ｅ、例えば、サンプルとして抽出された複数のコマンドのコマンド処理時間の全てが上限値を上回る場合、前記上限値を閾値として設定してもよい。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「所定の期間に受信された複数のコマンド」の一例である。ただし、「所定の期間に受信された複数のコマンド」は、上記例に限定されず、所定の期間に受信された全てのコマンドでもよい。
【００８７】
本実施形態では、閾値設定部２２３ｅは、第１の実施形態と同様に、ある周期（例えば、２４時間）毎に、少なくとも直近の周期の間にコマンド受信部２１０により受信された複数のコマンドからサンプルとして抽出された複数のコマンドのコマンド処理時間に基づき、閾値を更新する。本実施形態では、「サンプルとして抽出された複数のコマンド」は、「直近の周期の間に受信された複数のコマンド」の一例である。ただし、「直近の周期の間に受信された複数のコマンド」は、上記例に限定されず、直近の周期の間に受信された全てのコマンドでもよい。
【００８８】
図９は、第２の実施形態のストレージデバイス２００の閾値の設定処理の流れの一例を示すフローチャートである。まず、閾値設定部２２３ｅは、閾値の上限値および下限値を指定するユーザの指示を受け付ける。閾値設定部２２３ｅは、閾値の上限値および下限値を指定するユーザの指示を受け付けた場合、ユーザにより指定された閾値の上限値および下限値を、記憶部２２３ｆに記憶させる（Ｓ３００）。次に、ストレージデバイス２００は、Ｓ３０１〜Ｓ３０８の処理を行う。これらＳ３０１〜Ｓ３０８の処理は、第１の実施形態のＳ１０１〜Ｓ１０８の処理と略同じであるため、ここでの重複する説明は省略する。
【００８９】
ストレージデバイス２００は、Ｓ３０１〜Ｓ３０７の処理を、所定の周期（例えば、２４時間）の間、繰り返し行う（Ｓ３０８：ＮＯ）。ストレージデバイス２００は、前記所定の周期が経過したと判定された場合（Ｓ３０８：ＹＥＳ）、次の処理に進む。すなわち、レイテンシコントローラ２２３Ａの閾値設定部２２３ｅは、所定の期間（例えば、直近の周期の間）にコマンド受信部２１０により受信された複数のコマンドのコマンド処理時間のなかで、閾値の上限値と下限値との間に含まれる最大値を特定し、特定したコマンド処理時間の最大値を閾値として設定する（Ｓ３０９）。
【００９０】
このような構成によれば、第１の実施形態と同様に、ホストデバイス１００に対するレイテンシのばらつきの抑制を図ることができる。さらに、本実施形態では、制御部は、閾値の上限値を記憶する領域を有し、上限値以下の範囲で閾値を設定する。このような構成によれば、閾値の上限値に基づいてレイテンシの調整が行われるため、ユーザのニーズに合わせたレイテンシの調整が可能になる。
【００９１】
本実施形態では、制御部は、閾値の上限値としてユーザにより指定された値を記憶する。このような構成によれば、ユーザによって指定された閾値の上限値に基づき、レイテンシの調整が行われる。これにより、さらにユーザのニーズに合わせたレイテンシの調整が可能になる。
【００９２】
本実施形態では、記憶部２２３ｆには、上限値に加えて、下限値も記憶する。制御部は、上限値と下限値との間の範囲で閾値を設定する。このような構成によれば、所定の周期の間に受信された複数のコマンドのコマンド処理時間が極めて短い場合であっても、下限値に応じた閾値が設定される。このため、その後、コマンド処理時間が長くなった場合でも、レイテンシの変化を一定以下に抑制することができる。
【００９３】
なお、記憶部２２３ｆは、閾値の上限値および下限値の両方を記憶する場合に代えて、閾値の上限値のみを記憶してもよい。この場合、閾値設定部２２３ｅは、閾値の上限値以下の範囲で閾値を設定する。すなわち、閾値設定部２２３ｅは、前記所定の期間にコマンド受信部２１０により受信された複数のコマンドの各々のコマンド処理時間に基づき、前記複数のコマンドのコマンド処理時間のなかで、閾値の上限値以下の範囲で最大となるコマンド処理時間を閾値として設定する。
【００９４】
以上説明した少なくとも１つの実施形態によれば、コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第１制御動作が行われ、コマンド処理時間が閾値よりも小さい場合に、第１制御動作とは異なる第２制御動作が行われることで、ホストデバイスに対するレイテンシのばらつきの抑制を図ることができる。
【００９５】
以下、いくつかのストレージデバイスおよびストレージデバイスの制御方法を付記する。
［１］ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンド受信部が前記コマンドを受信してから前記処理が完了するまでのコマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから、前記コマンド受信部に前記完了報告を送信させる制御部と、
を備えたストレージデバイス。
［２］、［１］に記載のストレージデバイスであって、
前記制御部は、前記コマンド受信部が前記コマンドを受信した場合に計測が開始され、前記処理が完了した場合に計測が終了された時間計測結果に基づき、前記コマンド処理時間を得る。
［３］、［１］に記載のストレージデバイスであって、
前記制御部は、前記コマンド処理時間と前記閾値との差分に基づき、前記待機時間の長さを決定する。
［４］、［１］に記載のストレージデバイスであって、
前記制御部は、ある期間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を設定する。
［５］、［４］に記載のストレージデバイスであって、
前記制御部は、ある周期毎に、少なくとも直近の周期の間に前記コマンド受信部により受信された複数のコマンドの前記コマンド処理時間に基づき、前記閾値を更新する。
［６］、［４］に記載のストレージデバイスであって、
前記制御部は、前記複数のコマンドの前記コマンド処理時間の平均値を、前記閾値に設定する。
［７］、［４］に記載のストレージデバイスであって、
前記制御部は、前記閾値の上限値を記憶する領域を有し、前記上限値以下の範囲で前記閾値を設定する。
［８］、［７］に記載のストレージデバイスであって、
前記制御部は、前記上限値としてユーザにより指定された値を前記領域に記憶する。
［９］、［７］に記載のストレージデバイスであって、
前記領域は、前記閾値の下限値をさらに記憶し、
前記制御部は、前記上限値と前記下限値との間の範囲で前記閾値を設定する。
［１０］、［１］に記載のストレージデバイスであって、
前記制御部は、前記待機時間の間に、前記ホストデバイスからのコマンドに基づかない前記ストレージデバイスの内部処理を実行する。
［１１］、［１０］に記載のストレージデバイスであって、
不揮発性メモリチップをさらに備え、
前記制御部は、前記不揮発性メモリチップに関する複数のコマンドが格納されるキューを有し、前記キューに格納された前記複数のコマンドを前記キューに格納された順に実行し、且つ、前記待機時間の間に、前記内部処理に関する１つ以上のコマンドを前記キューに格納する。
［１２］ホストデバイスからコマンドを受信し、前記コマンドで要求された処理が完了した場合に完了報告を前記ホストデバイスに送信するコマンド受信部と、
前記コマンドで要求された処理にかかったコマンド処理時間が閾値以上の場合に、第１制御動作を行い、前記コマンド処理時間が前記閾値よりも小さい場合に、前記第１制御動作とは異なる第２制御動作を行う制御部と、
を備えたストレージデバイス。
［１３］ホストデバイスからのコマンドで要求された処理にかかったコマンド処理時間を計測し、
前記コマンド処理時間が閾値よりも小さい場合に、前記処理の完了後に待機時間を空けてから前記コマンドの完了報告を送信する、
ストレージデバイスの制御方法。
［１４］、［１３］に記載のストレージデバイスの制御方法であって、
前記コマンド処理時間の算出は、前記コマンドが受信された場合に計測が開始され、前記コマンドで要求された処理が完了した場合に計測が終了された時間計測結果に基づき行われる。
［１５］、［１３］に記載のストレージデバイスの制御方法であって、
前記待機時間の長さは、前記コマンド処理時間と前記閾値との差分に基づき決定される。
【００９６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００９７】
１００…ホストデバイス、２００…ストレージデバイス、２１０…コマンド受信部、２２０…メモリコントローラ、２２１…リードライトコントローラ、２２２…内部処理コントローラ、２２３，２２３Ａ…レイテンシコントローラ、２２３ａ…計測結果取得部、２２３ｂ…比較部、２２３ｃ…待機時間マネージャ、２２３ｄ…完了報告送信許可部、２２３ｅ…閾値設定部、２２３ｆ…記憶部、２４０…ＮＡＮＤコントローラ、２４１…キュー、２４２…シーケンサ、２５０…時間計測部、２５１…監視タイマ、２５２…ウェイトタイマ、２６０，２６０−１，２６０−２，２６０−Ｎ…ＮＡＮＤ。
【図１】
2019049949.tif 000003
【図２】
2019049949.tif 000004
【図３】
2019049949.tif 000005
【図４】
2019049949.tif 000006
【図５】
2019049949.tif 000007
【図６】
2019049949.tif 000008
【図７】
2019049949.tif 000009
【図８】
2019049949.tif 000010
【図９】
2019049949.tif 000011