(57)【要約】【課題】  状況に応じてコマンドをスケジューリングしながら消費電力を削減できる電子機器を実現する。【解決手段】  実施形態によれば、電子機器は、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、ホストにより発行された複数のコマンドを並列に処理可能なコントローラとを具備する。前記コントローラは、前記ホストによって、処理されるべきデッドライン時間がそれぞれ指定された一つ以上のコマンドが発行された場合、前記デッドライン時間に基づいて、前記一つ以上のコマンドの各々が処理されるタイミングを示すスケジューリング方式を決定し、前記スケジューリング方式に従って前記一つ以上のコマンドに応じた処理を実行するように構成される。【選択図】図２
2019175292.tif 000002
【特許請求の範囲】
【請求項１】
インターフェースを介してホストと接続可能な電子機器であって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記ホストにより発行された複数のコマンドを並列に処理可能なコントローラとを具備し、
前記コントローラは、前記ホストと接続された場合に、
前記ホストによって、処理されるべきデッドライン時間がそれぞれ指定された一つ以上のコマンドが発行された場合、前記デッドライン時間に基づいて、前記一つ以上のコマンドの各々が処理されるタイミングを示すスケジューリング方式を決定し、
前記スケジューリング方式に従って前記一つ以上のコマンドに応じた処理を実行するように構成される電子機器。
【請求項２】
前記コントローラは、前記ホストによって前記一つ以上のコマンドが格納されたキューから、前記スケジューリング方式に従って第１コマンドをフェッチ可能であり、前記フェッチされた第１コマンドに応じた処理を実行するように構成される請求項１記載の電子機器。
【請求項３】
前記一つ以上のコマンドは、リードコマンドであり、
前記一つ以上のコマンドに対してそれぞれ指定される一つ以上のデッドライン時間は、前記ホストによって前記電子機器に対して要求されるリード速度に基づいて決定される請求項１記載の電子機器。
【請求項４】
前記一つ以上のコマンドは、ライトコマンドであり、
前記一つ以上のコマンドに対してそれぞれ指定される一つ以上のデッドライン時間は、前記ホストによって前記電子機器に対して要求されるライト速度に基づいて決定される請求項１記載の電子機器。
【請求項５】
前記コントローラは、さらに、前記ホストと接続された場合に、前記一つ以上のコマンドの処理がそれぞれ完了した時間を前記ホストに通知可能であるように構成される請求項１記載の電子機器。
【請求項６】
メモリと、
前記メモリに格納されたプログラムを実行するように構成されたプロセッサとを具備し、
前記プロセッサは、
当該プロセッサにより発行された複数のコマンドを並列に処理可能なストレージデバイスに対して、第１コマンドを発行することが要求される場合、前記第１コマンドが処理されるべきデッドライン時間を決定し、
前記デッドライン時間が指定された前記第１コマンドを前記ストレージデバイスに対して発行するように構成される電子機器。
【請求項７】
前記プロセッサは、前記発行された第１コマンドをキューに格納し、
前記格納された第１コマンドは、前記デッドライン時間に基づいて決定されるスケジューリング方式に従って、前記キューからフェッチされる請求項６記載の電子機器。
【請求項８】
前記第１コマンドは、リードコマンドであり、
前記プロセッサは、前記ストレージデバイスに対して要求するリード速度に基づいて、前記デッドライン時間を決定するように構成される請求項６記載の電子機器。
【請求項９】
前記第１コマンドは、ライトコマンドであり、
前記プロセッサは、前記ストレージデバイスに対して要求するライト速度に基づいて、前記デッドライン時間を決定するように構成される請求項６記載の電子機器。
【請求項１０】
前記プロセッサは、さらに、
ファイルがネットワークを介して前記電子機器にダウンロードされる間に、前記ファイルを構成する少なくとも一部のデータを前記ストレージデバイスに書き込む場合、前記ファイルがダウンロードされる速度に基づいて、前記少なくとも一部のデータを書き込むためのライトコマンドが処理されるべき第１デッドライン時間を決定し、
前記第１デッドライン時間が指定された前記ライトコマンドを前記ストレージデバイスに発行するように構成される請求項６記載の電子機器。
【請求項１１】
前記プロセッサは、さらに、
第１ストレージデバイスに格納されたデータを第２ストレージデバイスにコピーする場合に、前記第１ストレージデバイスのリード性能と前記第２ストレージデバイスのライト性能とに基づいて、前記データを読み出すためのリードコマンドが処理されるべき第１デッドライン時間を決定し、
前記第１デッドライン時間が指定された前記リードコマンドを前記第１ストレージデバイスに発行するように構成される請求項６記載の電子機器。
【請求項１２】
前記プロセッサは、さらに、
第１性能を有する第１ストレージデバイスに対して、第１デッドライン時間が指定された第１コマンドを、前記第１性能よりも低い第２性能を有する第２ストレージデバイスに対して、前記第１デッドライン時間よりも長い第２デッドライン時間が指定された第２コマンドを、発行し、
前記第２ストレージデバイスによる前記第２コマンドの処理が完了する前に、前記第１ストレージデバイスによる前記第２コマンドの処理が完了した場合、前記第２ストレージデバイスに対して、前記第２コマンドを中止するアボートコマンドを発行する請求項６記載の電子機器。
【請求項１３】
前記プロセッサは、さらに、前記ストレージデバイスによって前記第１コマンドの処理が完了した時間に基づいて、前記ストレージデバイスの疲弊度を推定する請求項６記載の電子機器。
【請求項１４】
ストレージデバイスとホストとを含むコンピュータシステムであって、
前記ストレージデバイスは、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記ホストにより発行された複数のコマンドを並列に処理可能なコントローラとを具備し、
前記ホストは、
メモリと、
前記メモリに格納されたプログラムを実行するように構成されたプロセッサとを具備し、
前記プロセッサは、
前記ストレージデバイスに対して一つ以上のコマンドを発行することが要求される場合、前記一つ以上のコマンドがそれぞれ処理されるべき一つ以上のデッドライン時間を決定し、
前記一つ以上のデッドライン時間がそれぞれ指定された前記一つ以上のコマンドを前記ストレージデバイスに対して発行するように構成され、
前記コントローラは、
前記一つ以上のデッドライン時間に基づいて、前記一つ以上のコマンドの各々が処理されるタイミングを示すスケジューリング方式を決定し、
前記スケジューリング方式に従って前記一つ以上のコマンドに応じた処理を実行するように構成されるコンピュータシステム。
【請求項１５】
前記プロセッサは、前記発行された一つ以上のコマンドをキューに格納するように構成され、
前記コントローラは、前記キューから、前記スケジューリング方式に従ってコマンドをフェッチし、前記フェッチされたコマンドに応じた処理を実行するように構成される請求項１４記載のコンピュータシステム。
【請求項１６】
前記一つ以上のコマンドは、リードコマンドであり、
前記プロセッサは、前記ストレージデバイスに対して要求するリード速度に基づいて、前記一つ以上のコマンドに対してそれぞれ指定される一つ以上のデッドライン時間を決定するように構成される請求項１４記載のコンピュータシステム。
【請求項１７】
前記一つ以上のコマンドは、ライトコマンドであり、
前記プロセッサは、前記ストレージデバイスに対して要求するライト速度に基づいて、前記一つ以上のコマンドに対してそれぞれ指定される一つ以上のデッドライン時間を決定するように構成される請求項１４記載のコンピュータシステム。
【請求項１８】
不揮発性メモリを備える電子機器の制御方法であって、
ホストによって、処理されるべきデッドライン時間がそれぞれ指定された一つ以上のコマンドが発行された場合、前記デッドライン時間に基づいて、前記一つ以上のコマンドの各々が処理されるタイミングを示すスケジューリング方式を決定し、
前記スケジューリング方式に従って前記一つ以上のコマンドに応じた処理を実行する制御方法。
【請求項１９】
電子機器の制御方法であって、
前記電子機器により発行された複数のコマンドを並列に処理可能なストレージデバイスに対して、コマンドを発行することが要求される場合、前記コマンドが処理されるべきデッドライン時間を決定し、
前記デッドライン時間が指定された前記コマンドを前記ストレージデバイスに対して発行する制御方法。
【請求項２０】
ホストと、不揮発性メモリを備える、ホストにより発行された複数のコマンドを並列に処理可能なストレージデバイスとを含むコンピュータシステムの制御方法であって、
前記ストレージデバイスに対して、一つ以上のコマンドを発行することが要求される場合、前記一つ以上のコマンドがそれぞれ処理されるべき一つ以上のデッドライン時間を決定し、
前記一つ以上のデッドライン時間がそれぞれ指定された前記一つ以上のコマンドを、前記ホストから前記ストレージデバイスに対して発行し、
前記一つ以上のデッドライン時間に基づいて、前記一つ以上のコマンドの各々が実行されるタイミングを示すスケジューリング方式を決定し、
前記スケジューリング方式に従って前記一つ以上のコマンドに応じた処理を実行する制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを備える電子機器、コンピュータシステム、およびその制御方法に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるストレージが広く普及している。
【０００３】
このようなストレージの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００４】
現状のＳＳＤは、ホストからのコマンド要求を常に全力（ベスト・エフォート）で処理し、応答する。全力とは、例えば、リードやライト等のホスト（ＰＣ）からストレージデバイス（ＳＳＤ）への複数の要求コマンドがある場合に、要求された全てのコマンドを順番に処理しデータの読み書きを行い、処理完了を通知する、までの一連の処理をホストからのコマンド要求がなくなるまで可能な限り速く行うことを意味する。
【０００５】
電池で駆動するポータブルＰＣに搭載されるＳＳＤでは、ＳＳＤを低消費電力状態に移行させることが重要である。このようなＳＳＤは、コマンドキューに投入された全てのコマンドを処理した後、しばらく（例えば、数秒間）何ら処理が行われない状態が経過した後に低消費電力状態に入ることが一般的である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献２】米国特許第８１２２１５８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
実際のユースケースでは、特にコンシューマ向けＳＳＤにおいて、ＳＳＤが全力で動作する必要がない場合も想定される。そのため、状況に応じたコマンドのスケジューリングで消費電力を削減できる新たな機能の実現が必要とされる。
【０００８】
本発明が解決しようとする課題は、状況に応じてコマンドをスケジューリングしながら消費電力を削減できる電子機器、コンピュータシステム、および制御方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、電子機器は、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、ホストにより発行された複数のコマンドを並列に処理可能なコントローラとを具備する。前記コントローラは、前記ホストによって、処理されるべきデッドライン時間がそれぞれ指定された一つ以上のコマンドが発行された場合、前記デッドライン時間に基づいて、前記一つ以上のコマンドの各々が処理されるタイミングを示すスケジューリング方式を決定し、前記スケジューリング方式に従って前記一つ以上のコマンドに応じた処理を実行するように構成される。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るコンピュータシステムの構成例を示すブロック図。
【図２】同実施形態のコンピュータシステムにおけるコマンド処理の動作の例を説明するための図。
【図３】同実施形態のコンピュータシステムで用いられるデッドライン時間を指定したコマンド（サブミッションキューエントリ）のフォーマットの例を示す図。
【図４】図３のデッドライン時間のフォーマットの例を示す図。
【図５】ラウンド・ロビン方式のコマンドアービトレーションの例を示す図。
【図６】加重ラウンド・ロビン方式のコマンドアービトレーションの例を示す図。
【図７】同実施形態のコンピュータシステムにおけるコマンドアービトレーションの例を示す図。
【図８】同実施形態のコンピュータシステムで用いられる完了時間を含むコンプリーションキューエントリのフォーマットの例を示す図。
【図９】同実施形態のコンピュータシステムに設けられるホストによって実行されるコマンド発行処理の手順の例を示すフローチャート。
【図１０】同実施形態のコンピュータシステムに設けられるホストによって実行されるコマンド中止処理の手順の例を示すフローチャート。
【図１１】同実施形態のコンピュータシステムに設けられるＳＳＤによって実行される実行制御処理の手順の例を示すフローチャート。
【図１２】同実施形態のコンピュータシステムにおけるストリーミング動作を説明するための図。
【図１３】同実施形態のコンピュータシステムにおけるダウンロード動作を説明するための図。
【図１４】同実施形態のコンピュータシステムにおけるバックアップ動作を説明するための図。
【図１５】同実施形態のコンピュータシステムにおけるマルチレイヤストレージシステムへのアクセス動作を説明するための図。
【図１６】図１５のアクセス動作における処理シーケンスを示す図。
【図１７】同実施形態のコンピュータシステムに設けられるＳＳＤにおける電力状態の遷移の例を示す図。
【図１８】同実施形態のコンピュータシステムに設けられるＳＳＤの消費電力の変化を説明するための図。
【図１９】同実施形態のコンピュータシステムに設けられるＳＳＤにおける消費電力削減の効果を説明するための図。
【図２０】デッドライン時間に基づくスケジューリングなしのコンピュータシステムにおける消費パワーとバスアナライザ波形の遷移の例を示す図。
【図２１】同実施形態のコンピュータシステムにおける消費パワーとバスアナライザ波形の遷移の例を示す図。
【図２２】同実施形態のコンピュータシステムに設けられるホストの構成例を示すブロック図。
【発明を実施するための形態】
【００１１】
以下、実施の形態について図面を参照して説明する。
【００１２】
まず、図１を参照して、実施形態に係るコンピュータシステム１の構成を説明する。
【００１３】
コンピュータシステム１は、ホスト（ホストデバイス）２と、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された一つ以上の半導体ストレージデバイスとを含む。
【００１４】
ホスト２は、半導体ストレージデバイスにアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータを半導体ストレージデバイスに保存するサーバ（ストレージサーバ）であってもよいし、パーソナルコンピュータであってもよい。半導体ストレージデバイスは、例えば、ＮＡＮＤ型フラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１５】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１６】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｕｎｉｖｅｒｓｅｌ  Ｆｌａｓｈ  Ｓｔｏｒａｇｅ（ＵＦＳ）、エンベデッドマルチメディアカード（ｅＭＭＣ（登録商標））等が使用され得る。
【００１７】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。コントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現され得る。ＳＳＤ３は、揮発性メモリであるランダムアクセスメモリ、例えば、ＤＲＡＭ６を備えていてもよい。あるいは、ＳＲＡＭのようなランダムアクセスメモリがコントローラ４に内蔵されていてもよい。
【００１８】
ＤＲＡＭ６等のランダムアクセスメモリには、例えば、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータを一時的に格納するためのバッファ領域であるリードバッファ（ＲＢ）６１と、ＮＡＮＤ型フラッシュメモリ５に書き込まれるデータを一時的に格納するためのバッファ領域であるライトバッファ（ＷＢ）６２およびＧＣバッファ６３と、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）６４のキャッシュ領域とが設けられている。さらに、ＤＲＡＭ６等のランダムアクセスメモリには、処理中に用いられる各種の情報の格納領域が設けられてもよい。なお、ＤＲＡＭ６は、コントローラ４の内部に設けられていてもよい。ＬＵＴ６４は、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。
【００１９】
ＮＡＮＤ型フラッシュメモリ５は、複数のＮＡＮＤ型フラッシュメモリチップ（複数のＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。各チップは、メモリセル当たりに複数ビットを格納可能に構成されたフラッシュメモリとして実現されている。
【００２０】
コントローラ４は、Ｔｏｇｇｌｅ  ＤＤＲ、Ｏｐｅｎ  ＮＡＮＤ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１３は、複数のチャンネルを介して、ＮＡＮＤ型フラッシュメモリ５内の複数のチップにそれぞれ接続されていてもよい。
【００２１】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして機能する。
【００２２】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去（イレーズ）動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、例えば、論理ブロックアドレス（ＬＢＡ）が使用される。
【００２３】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するＬＵＴ６４を用いて実行される。コントローラ４は、ＬＵＴ６４を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。ＬＵＴ６４は、ＳＳＤ３の電源オン時にＮＡＮＤ型フラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００２４】
１つのページへのデータ書き込みは、１つのＰ／Ｅサイクル当たり１回のみ可能である。このため、コントローラ４は、あるＬＢＡに対応する更新データを、このＬＢＡに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、ＬＵＴ６４を更新してこのＬＢＡをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。以下では、ＬＵＴ６４から参照されているデータ（すなわち論理アドレスと紐付けられているデータ）を有効データと称する。また、どの論理アドレスとも紐付けられていないデータを無効データと称する。有効データは、後にホスト２からリードされる可能性があるデータである。無効データは、もはやホスト２からリードされる可能性が無いデータである。
【００２５】
ブロック管理には、バッドブロックの管理、ウェアレベリング、ガベージコレクション（ＧＣ）、等が含まれる。
【００２６】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含んでもよい。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００２７】
ホストインタフェース１１は、ホスト２から様々なコマンド、例えば、Ｉ／Ｏコマンド、各種制御コマンド、等を受信する回路として機能する。Ｉ／Ｏコマンドには、ライトコマンド、リードコマンド、アンマップコマンド（トリムコマンド）、フォーマットコマンド、フラッシュコマンド等が含まれ得る。
【００２８】
ＤＲＡＭインタフェース１４は、ＤＲＡＭ６のアクセスを制御するように構成されたＤＲＡＭコントローラとして機能する。ＤＲＡＭ６の記憶領域は、リードバッファ（ＲＢ）６１、ライトバッファ（ＷＢ）６２、ＧＣバッファ６３、ＬＵＴ６４等を格納するために利用される。
【００２９】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されている制御プログラム（ファームウェア）を実行することによって様々な処理を行う。このＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００３０】
次に、ホスト２の構成について説明する。
【００３１】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションレイヤ４１、オペレーティングシステム（ＯＳ）４２、デバイスドライバ（ミドルウェア）４３等が含まれる。
【００３２】
一般に知られているように、ＯＳ４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００３３】
デバイスドライバ４３は、ＳＳＤ３へのアクセスのためのソフトウェアである。デバイスドライバ４３は、ファイル操作（作成、保存、更新、削除等）のための制御を行うファイルシステムと連携して使用されてもよい。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳ等がファイルシステムとして使用される。あるいは、ファイルオブジェクトシステム（例えば、Ｃｅｐｈ  Ｏｂｊｅｃｔ  Ｓｔｏｒａｇｅ  Ｄａｅｍｏｎ）、Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ  Ｓｙｓｔｅｍ（例えば、Ｒｏｃｋｓ  ＤＢ）がファイルシステムとして使用されてもよい。
【００３４】
様々なアプリケーションソフトウェアスレッドがアプリケーションレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００３５】
アプリケーションレイヤ４１がリードコマンドまたはライトコマンドのようなリクエストをＳＳＤ３に対して発行することが必要な時、アプリケーションレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをデバイスドライバ４３に送出する。デバイスドライバ４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。デバイスドライバ４３は、コマンドを、ＳＳＤ３に対して発行する。ＳＳＤ３からのレスポンスが受信された際、デバイスドライバ４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションレイヤ４１に送出する。
【００３６】
ホスト２には、ＳＳＤ３に対して発行されるコマンドが投入されるキュー３０が設けられる。キュー３０は、例えば、一つ以上のサブミッションキュー３１と、一つ以上のコンプリーションキュー３２とを含む。サブミッションキュー３１は、特定のスロットサイズを有し、ホスト２（ホストソフトウェア）が、ＳＳＤ３のコントローラ４によって実行されるコマンドを発行（投入）するために用いられる命令キューである。コンプリーションキュー３２は、特定のスロットサイズを有し、完了したコマンドに関するステータスを通知するために用いられる応答キューである。
【００３７】
デバイスドライバ４３はコマンド発行部４３１を備える。コマンド発行部４３１は、ＯＳ４２（アプリケーションレイヤ４１）からのリクエストを受け付けた場合、このリクエストに対応するコマンドがＳＳＤ３において処理されるべきデッドライン時間を決定する。そして、コマンド発行部４３１は、そのデッドライン時間を指定したコマンドを発行し、サブミッションキュー３１に投入する。
【００３８】
コマンド発行部４３１は、例えば、ＳＳＤ３を全力で動作させる必要がない場合には、ホスト２がＳＳＤ３に対して要求する適切な性能（例えば、リード性能、ライト性能等）、速度（例えば、リード速度、ライト速度等）、タイミング（例えば、リード時間、ライト時間等）の少なくともいずれかに基づいて、デッドライン時間を決定する。ＳＳＤ３では、指定されたデッドライン時間に基づいてコマンドを適切にスケジューリングすることにより、省電力化およびＱｏＳ向上（例えば、適切なリソース配分）の効果を得ることができる。
【００３９】
また、ＳＳＤ３に設けられるコントローラ４内のＣＰＵ１２は、リード制御部１２１、ライト制御部１２２、ＧＣ制御部１２３、およびアービトレーション制御部１２４として機能することができる。
【００４０】
リード制御部１２１は、論理アドレス（ＬＢＡ）に対応するＬＵＴ６４のエントリに基づいて、ＬＢＡに対応する物理アドレスを求め、ＮＡＮＤ型フラッシュメモリ５からリードコマンドに応じたデータを読み出す。
【００４１】
ライト制御部１２２は、ライトコマンドに応じてホスト２から受信されたユーザデータを、ＤＲＡＭ６上のライトバッファ６２に蓄積する。そして、ライト制御部１２２は、ライトバッファ６２内にＮＡＮＤ型フラッシュメモリ５の書き込み単位分のユーザデータが蓄積されたならば、ＮＡＮＤ型フラッシュメモリ５のチップ（チップのデータラッチ）にその書き込み単位分のユーザデータを転送する。ライト制御部１２２は、ライトバッファ６２内の、転送されたユーザデータが蓄積されていた領域を解放する。
【００４２】
次いで、ライト制御部１２２は、ＮＡＮＤ型フラッシュメモリ５のチップにプログラムを指示する。すなわち、ライト制御部１２２は、ＮＡＮＤ型フラッシュメモリ５のチップにプログラムコマンドを送ることにより、当該チップに対して、転送されたユーザデータを書き込み先ブロックにプログラムさせる。チップ内のメモリセルアレイは複数のブロックを含んでいる。ブロックは、有効データを格納していて、新たにデータを書き込むことができないブロック（アクティブブロック）と、有効データを格納しておらず、イレーズ処理を経ることで新たなデータの書き込みに利用可能なブロック（フリーブロック）とに大別される。１つ以上のフリーブロックから、１個が選択され、イレーズ処理を経ることで、書き込み先ブロックとして割り当てられる。書き込み先ブロックは、有効データを格納し得る。
【００４３】
ＧＣ制御部１２３も、ＧＣバッファ６３を用いて、上述したようなライト制御部１２２による書き込み動作と同様にして、ＮＡＮＤ型フラッシュメモリ５への書き込みを行うことができる。ＧＣ制御部１２３は、有効データを格納しているアクティブブロック群からガベージコレクションソースブロック（ＧＣソースブロック）を選択し、このＧＣソースブロック内の有効データを、フリーブロック群から書き込み先ブロックとして確保されたガベージコレクションデスティネーションブロック（ＧＣデスティネーションブロック）に書き込む。
【００４４】
また、アービトレーション制御部１２４は、サブミッションキュー３１内のエントリ、すなわち、コマンドを任意の順序でフェッチすることができる。ＳＳＤ３内の各部は、フェッチされたコマンドに応じて動作する。例えば、フェッチされたリードコマンドに応じて、リード制御部１２１によるリード処理が行われ、またフェッチされたライトコマンドに応じて、ライト制御部１２２によるライト処理が行われる。
【００４５】
初期のＡＴＡ  ＨＤＤ（Ｐａｒａｌｌｅｌ  ＡＴＡ）では１個のコマンドの処理が完了するまで次のコマンドを送出することができなかったが、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）  ＨＤＤ／ＳＳＤ規格におけるコマンドキューイング規格の拡張で一つのコマンドキューに対して複数個のコマンドをインオーダー要求することが可能になった。さらに、ＮＶＭｅ規格では複数個のコマンドキューに対して複数個のコマンドをアウトオブオーダー要求することができるように拡張された。ＮＶＭｅ規格上は、コマンドキュー（サブミッション）の個数は６４Ｋ個まで、１個のコマンドキューにおいて要求できるコマンドの数は６４Ｋ個まで、定義可能である。
【００４６】
市場に流通しているＳＳＤおよびＷｉｎｄｏｗｓ（登録商標）１０等のＯＳでは、例えば、１個あたり１ＫエントリのコマンドキューがＣＰＵの個数分（例えば、８個）だけ作成される。この場合、最大で１Ｋ×８個＝８Ｋコマンドを同時に発行できることになるが、数千個以上のコマンドを受け取ったＳＳＤは、無数ある処理の順列（組み合わせ）から任意の順番でコマンドを処理可能である。限られた演算資源を持つＳＳＤにおいて、最適な処理順番を解くことは困難である。ＳＳＤは、例えば、複数個のコマンドキューから数個のコマンドを入れられた順番に単純ラウンド・ロビン（または加重ラウンド・ロビン）で処理していくのが精一杯であり、完全にフェアな順番でコマンドを処理することは困難である。
【００４７】
本実施形態のアービトレーション制御部１２４は、サブミッションキュー３１に格納された各コマンドに指定されたデッドライン時間に基づいて、デッドライン時間が早いコマンドから順に処理（フェッチ）されるように制御することができる。アービトレーション制御部１２４は、サブミッションキュー３１に一つ以上のコマンドが格納されている場合、各コマンドに指定されたデッドライン時間に基づいて、それら一つ以上のコマンドの各々が処理されるタイミングを示すスケジューリング方式（ｓｃｈｅｄｕｌｉｎｇ）を決定する。アービトレーション制御部１２４は、例えば、一つ以上のコマンドが、各々のデッドライン時間までに処理され、且つできる限りその処理が遅延されるように、スケジューリング方式を決定する。このスケジューリング方式は、コマンドが処理されるタイミングに応じて、ＳＳＤ３がいずれの電力状態に設定されるかをさらに示してもよい。ＳＳＤ３が設定され得る電力状態は、例えば、フルスピード動作の電力状態、またはシャロースリープ（Ｓｈａｌｌｏｗ  Ｓｌｅｅｐ）もしくはディープスリープの低消費電力状態である。シャロースリープは浅いスリープ状態を示し、ディープスリープは深いスリープ状態を示す。例えば、シャロースリープに設定されたＳＳＤ３で消費される電力は、ディープスリープに設定されたＳＳＤ３で消費される電力よりも大きい。アービトレーション制御部１２４は、決定されたスケジューリング方式に従って、一つ以上のコマンドに応じた処理が実行されるように、ＳＳＤ３内の各部を制御する。
【００４８】
なお、一般的に、ＳＳＤ３は、リアルタイムクロックを持たないので、その内部で現在の時刻を得ることはできない。ＮＶＭｅ規格には、ホスト２がＳＳＤ３（コントローラ４）に現在の時刻を設定することを可能にするオプショナルコマンドであるＳｅｔＦｅａｔｕｒｅｓコマンドが規定されている。このＳｅｔＦｅａｔｕｒｅｓコマンドでは、いずれの特徴を設定するかを識別するためのＦｅａｔｕｒｅ  Ｉｄｅｎｔｉｆｉｅｒとして、タイムスタンプを示す“０Ｅｈ”が指定される。
【００４９】
ＳＳＤ３は、通常電力状態である間は、通知された現在時刻を用い、内部タイマをカウントアップすることにより現在時刻を得ることができる。しかし、低消費電力状態で内部タイマも止まる場合には、現在時刻からのカウントアップができないので、低消費電力状態から通常電力状態への遷移時に、毎回、ホスト２からＳＳＤ３に現在時刻を通知する必要がある。
【００５０】
以下では、ホスト２とＳＳＤ３とが、ＮＶＭｅ規格に基づくインタフェースを介して接続される例を示すが、ＵＦＳ、ＳＡＴＡ、ｅＭＭＣ、ＳＣＳＩ等の他のストレージインタフェースで接続される場合にも同様に適用可能である。
【００５１】
図２を参照して、ホスト２とＳＳＤ３のコントローラ４とによるコマンド処理の動作の例についてより具体的に説明する。
【００５２】
まず、ホスト２（コマンド発行部４３１）は、サブミッションキュー３１のエントリ（サブミッションキューエントリ）にコマンドを書き込むときに、そのコマンドの処理を期待する時間を指定する。この「処理を期待する時間」は、コマンドが処理されるべき時間であり、例えば、コマンドの投入発行時刻、ＳＳＤ３内での処理開始時刻（例えば、サブミッションキュー３１からコマンドがフェッチされる時刻）、コマンドに応じたデータの転送が開始される時刻、コマンドに応じたデータの転送が完了する時刻、コマンドに応じた割り込みが通知される時刻のような、コマンドの処理に関する任意の時刻が用いられ得る。以下では、この「処理を期待する時間」を、デッドライン時間とも称する。
【００５３】
ホスト２（コマンド発行部４３１）は、例えば、アプリケーションレイヤ４１からの指示を受けてデッドライン時間を指定する。ホスト２は、例えば、プロセスの優先度、ＬＢＡの位置、参照頻度（アクセス頻度）、転送されるデータのサイズ、アプリケーション名、ファイルシステムメタデータ（例えば、ＮＴＦＳでの＄ＭＦＴ）、ＳＳＤ３の電源状態等の情報を用いて、デッドライン時間を算出（決定）する。
【００５４】
サブミッションキュー３１は、特定のスロットサイズを有し、ホスト２（ホストソフトウェア）が、ＳＳＤ３のコントローラ４によって実行されるコマンドを発行（投入）するために用いられる。各サブミッションキューエントリは、コマンドに相当する。コマンドは、例えば、６４バイトのサイズを有する。つまり、一つのコマンド当たり６４バイトのメモリ領域を用いて、ホスト２からＳＳＤ３に処理が指示される。
【００５５】
図３は、コンピュータシステム１で用いられるサブミッションキューエントリのフォーマットの例を示す。ここでは、ＮＶＭｅ規格（Ｒｅｖｉｓｉｏｎ  １．３）に示されるサブミッションキューエントリのフォーマットを、デッドライン時間に関する情報をさらに指定するように変更する場合について説明する。
【００５６】
ライトコマンドまたはリードコマンドが発行される場合、サブミッションキューエントリにおいて、［３−０］バイト内の［７−０］ビットに対応するＯｐｃｏｄｅ（ＯＰＣ）フィールドには、ライトを示す“０１ｈ”またはリードを示す“０２ｈ”が設定されている。
【００５７】
サブミッションキューエントリ内の［１５−８］バイトのフィールドは、ＮＶＭｅ規格では空きフィールド（Ｒｅｓｅｒｖｅｄ）であり、本実施形態では、このフィールドをデッドライン時間のタイムスタンプを設定するために用いる。例えば、発行されるコマンドがライトコマンドまたはリードコマンドである場合、このフィールドに、そのライトコマンドまたはリードコマンドが処理されるべきデッドライン時間が設定される。
【００５８】
図４は、８バイトのフィールドに設定されるタイムスタンプのフォーマットの例を示す。図４に示すように、８バイトのフィールドの内の［５−０］バイトに、タイムスタンプが設定される。このタイムスタンプは、例えば、１９７０年１月１日午前０時（ＵＴＣ）から経過したミリ秒（ｍｓ）単位の秒数で表される。
【００５９】
なお、ホスト２は、サブミッションキュー３１に入れられたコマンドの中止を要求するためのアボートコマンドを発行することもできる。アボートコマンドは、例えば、アドミンサブミッションキューに投入され、ベスト・エフォートコマンドとして処理される。アボートコマンドでは、例えば、中止すべきコマンドの識別情報と、そのコマンドが投入されたサブミッションキュー３１の識別情報とが特定される。
【００６０】
図２に戻り、コントローラ４は、ホスト２により指定されたデッドライン時間に基づいて、各コマンドの処理の優先度を認識する。そして、コントローラ４は、その優先度に応じて、サブミッションキュー３１内のコマンドをスケジューリングする。これにより、例えば、ホスト２内に複数のサブミッションキュー３１が設けられる場合に、特定のサブミッションキュー内のコマンドの処理に注力してしまったがために、別のサブミッションキュー内のコマンドの処理が遅れてしまい、ホスト２上のアプリケーションを必要以上に待たせてしまうことを回避することができる。
【００６１】
より具体的には、コントローラ４は、各コマンドに指定されたデッドライン時間に基づいて、サブミッションキュー３１から一つのコマンドをフェッチする。コントローラ４は、サブミッションキュー３１に格納されている一つ以上のコマンドの各々のデッドライン時間に基づいて、例えば、それら一つ以上のコマンドをそれぞれのデッドライン時間までに処理し、且つＳＳＤ３によって消費される電力を低減できるコマンド処理のスケジューリング方式を決定する。このスケジューリング方式は、例えば、各コマンドが実行（フェッチ）されるタイミングを示す。また、このスケジューリング方式では、デッドライン時間に基づいて、例えば、各コマンドに応じた処理の開始をできるだけ遅延させるようにタイミングが決定される。
【００６２】
各コマンドに応じた処理の開始をできるだけ遅延させるスケジューリングにより、例えば、ある動作を途中でキャンセルするユーザ操作等に応じて、サブミッションキュー３１に投入済みのコマンドをアボートコマンドの発行によって中止しようとする場合に、その投入済みのコマンドに応じた処理が既に行われている、あるいは既に行われたという状況を回避できる可能性が上がる。これにより、中止されるべき処理に要する電力の分だけ、ＳＳＤ３の消費電力を削減することができる。
【００６３】
また、ホスト２に複数のサブミッションキュー３１（アドミンサブミッションキューおよびＩ／Ｏサブミッションキュー）が設けられる場合、ＮＶＭｅ規格では、これらキュー３１のアービトレーションアルゴリズムとして、ラウンド・ロビンと、加重ラウンド・ロビンと、ベンダ・スペシフィック・アービトレーションの三種類が規定されている。
【００６４】
図５に示すように、ラウンド・ロビンのアービトレーションでは、複数のサブミッションキュー３１が均等な優先度で扱われ、コントローラ４は、ラウンド毎に、各サブミッションキュー３１から、特定の数の処理すべき候補コマンドを選択（フェッチ）する。
【００６５】
また、図６に示すように、加重ラウンド・ロビンのアービトレーションでは、三つの優先度のクラスと、三つの優先度のレベルとが規定される。三つの優先度のクラスは、最も高い優先度のアドミンクラス９１と、次に高い優先度の緊急（ｕｒｇｅｎｔ）クラス９２と、最も低い優先度の加重ラウンド・ロビンクラス９３とで構成される。
【００６６】
アドミンクラス９１には、アドミンサブミッションキュー９１１が割り当てられる。アドミンサブミッションキュー９１１に発行（投入）されるコマンドは、このアドミンクラス９１以外のクラス９２，９３に割り当てられたサブミッションキューに発行されるコマンドよりも高い優先度を有している。
【００６７】
緊急クラス９２に割り当てられたＩ／Ｏサブミッションキュー９２１に発行されるコマンドは、アドミンサブミッションキュー９１１に発行されたコマンドの後であって、加重ラウンド・ロビンクラス９３に割り当てられたＩ／Ｏサブミッションキューに発行されるコマンドよりも前に、処理される。なお、緊急クラス９２に割り当てられた複数のＩ／Ｏサブミッションキュー９２１の間では、ラウンド・ロビンのアービトレーションが適用される。
【００６８】
加重ラウンド・ロビンクラス９３は、加重ラウンド・ロビンアービトレーションを用いて残りのバンド幅を共有する高優先度（Ｈｉｇｈ）９３Ｈ、中優先度（Ｍｅｄｉｕｍ）９３Ｍ、低優先度（Ｌｏｗ）９３Ｌの三つのレベルからなる。各レベル９３Ｈ，９３Ｍ，９３Ｌには、それぞれＩ／Ｏサブミッションキュー９３１，９３２，９３３が割り当てられる。同一のレベルに割り当てられた複数のＩ／Ｏサブミッションキューの間では、ラウンド・ロビンのアービトレーションが適用される。そして、加重ラウンド・ロビンのラウンド毎に、例えば、各レベルから重みに応じた数の候補コマンドが選択される。
【００６９】
このようなラウンド・ロビンおよび加重ラウンド・ロビンのアービトレーションではいずれも、あるサブミッションキューから指定された数のコマンドがフェッチされた後に、フェッチの対象が別のサブミッションキューに移る。そのため、例えば、特定のサブミッションキューに一時的に大量の細かい単位（４ＫｉＢ）のコマンドが投入された場合に、他のサブミッションキューの要求は待たされてしまうことになる。
【００７０】
ＮＶＭｅ規格のアービトレーション方式で規定されるもう一つのベンダ・スペシフィック・アービトレーションの実装方法は、ＮＶＭｅ規格書のスコープ外であり、ベンダが選択可能なアービトレーション方式である。
【００７１】
本実施形態では、このベンダ・スペシフィック・アービトレーションが用いられるようにＳＳＤ３を構成し、このベンダ・スペシフィック・アービトレーションとして、処理すべきデッドライン時間が指定されたコマンドを、デッドライン時間を考慮したスケジューリングに基づくアービトレーションを設定する。このようなスケジューリング方式としては、ＯＳがプロセスの実行順序を動的に決める種々のスケジューリング方式を利用することができ、例えば、デッドライン時間が早いものから処理するＥａｒｌｉｅｓｔ  Ｄｅａｄｌｉｎｅ  Ｆｉｒｓｔ（ＥＤＦ）や、Ｌｅａｓｔ  Ｌａｘｉｔｙ（ＬＬ）、Ｅａｒｌｉｅｓｔ  Ｄｅａｄｌｉｎｅ  Ｚｅｒｏ  Ｌａｘｉｔｙ（ＥＤＺＬ）、Ｅａｒｌｉｅｓｔ  Ｄｅａｄｌｉｎｅ  Ｃｒｉｔｉｃａｌ  Ｌａｘｉｔｙ（ＥＤＣＬ）、Ｌｅａｓｔ  Ｓｌａｃｋ  Ｔｉｍｅ（ＬＳＴ）等が挙げられる。
【００７２】
図７は、ＥＤＦスケジューリングに基づくアービトレーションの例を示す。ここでは、ホスト２に、四つのサブミッションキュー３１−１，３１−２，３１−３，３１−４が設けられていることを想定する。各サブミッションキュー３１−１，３１−２，３１−３，３１−４には、それぞれ複数のコマンド３５１〜３６２が格納されている。
【００７３】
コントローラ４は、サブミッションキュー３１−１，３１−２，３１−３，３１−４に格納されているコマンド３５１〜３６２を、指定されたデッドライン時間が早いものから順にフェッチする。図７に示す例では、コントローラ４は、デッドライン時間が５ミリ秒であるコマンド３５１、デッドライン時間が８ミリ秒であるコマンド３６１、デッドライン時間が１０ミリ秒であるコマンド３５２、デッドライン時間が１５ミリ秒であるコマンド３５７、……のように、デッドライン時間が早いものから順にコマンドをフェッチしている。
【００７４】
このようなＥＤＦスケジューリングに基づくアービトレーションにより、全てのサブミッションキューに対してフェアなアービトレーションを行うことができる。したがって、ホスト２とＳＳＤ３とからなるコンピュータシステム１を、ソフトリアルタイムシステムとして実現でき、ホスト２からＳＳＤ３へのアクセスのワースト・レーテンシを削減することができる。
【００７５】
ソフトリアルタイムシステムは、システムに与えられたタスクの処理がデッドライン時間内に終了しなかったという事象（デッドラインミス）が起きたとしても、システム全体に致命的なダメージが生じず、その処理の価値が完了時間等に応じて低減するシステムである。これに対して、ハードリアルタイムシステムは、デッドラインミスにより故障するシステムであり、ファームリアルタイムシステムは、デッドラインミスが致命的なダメージを与えるものではないが、デッドライン時間までに終了しなかったことによってその処理の価値が即座にゼロになるシステムである。
【００７６】
図２に戻り、コントローラ４は、フェッチされたコマンドを実行する。すなわち、コントローラ４は、ＳＳＤ３内の各部と連携して、コマンドに応じた処理（例えば、リード処理、ライト処理、等）を実行する。
【００７７】
そして、コントローラ４は、コマンドの実行が完了した場合、コンプリーションキュー３２に、フェッチされたコマンドとコマンド完了時間とを示すコンプリーションキューエントリを書き込む。これにより、ホスト２は、各コマンドの完了時間を取得することができる。コマンド完了時間は、コマンドに応じた処理が完了した時間であってもよいし、指定されたデッドライン時間が対象とした動作（例えば、フェッチ、データ転送開始、データ転送完了、割り込み通知、等）が実際に行われた時間であってもよい。
【００７８】
コンプリーションキュー３２は、完了したコマンドに関するステータスを通知するために用いられる。完了したコマンドは、ホスト２によって割り当てられた、関連付けられたサブミッションキューの識別情報とコマンドの識別情報との組に基づいて一意に特定される。複数のサブミッションキュー３１が一つのコンプリーションキュー３２に関連付けられてもよい。また、コンプリーションキュー３２の各エントリは、例えば、少なくとも１６バイトのサイズを有する。
【００７９】
図８は、コンピュータシステム１で用いられるコンプリーションキューエントリのフォーマット（応答メッセージプロトコル）の例を示す。ここでは、ＮＶＭｅ規格（Ｒｅｖｉｓｉｏｎ  １．３）に示されるコンプリーションキューエントリのフォーマットを、コマンド完了時間に関する情報をさらに指定するように変更する場合について説明する。
【００８０】
このフォーマットは、コマンド実行の成功／失敗およびその原因と、サブミッションキュー３１およびコンプリーションキュー３２の状態とを通知するように構成されている。本実施形態では、コンプリーションキューエントリ内の［３−０］バイトに対応するＤｗｏｒｄ  ０の領域、および［７−４］バイトに対応するＤｗｏｒｄ  １の領域を、コマンドの完了時間のタイムスタンプを設定するための領域として用いる。例えば、発行されたコマンドがライトコマンドまたはリードコマンドである場合、このフィールドに、そのライトコマンドまたはリードコマンドの処理が完了した時間が設定される。さらに、このエントリ内の［１５−１２］バイトに対応する領域の内の［２９−２８］ビットに対応する領域を、指定されたデッドライン時間を超えてコマンドが処理されたかどうかを示す情報（Ｅｘｐｉｒｅｄ）を設定する領域として用いる。
【００８１】
ホスト２は、このコンプリーションキューエントリを用いて、指定されたデッドライン時間内に処理できなかったコマンドがあることを認識できるので、アプリケーションを利用しているユーザに伝える、コマンドの投入量を調整する、複数のストレージデバイスが設けられている場合には別のストレージデバイスの利用を検討する、ストレージデバイスに大量にアクセスしている別のアプリケーションがあって、それが不要ならば中止させる、等の対処をすることが可能になる。
【００８２】
なお、ホスト２のデバイスドライバ４３には、疲弊度推定部４３２がさらに設けられていてもよい。疲弊度推定部４３２は、処理されたコマンドに関するＳＳＤ３からの応答であるコンプリーションキューエントリを解析し、ＳＳＤ３の疲弊度を推定する。コンプリーションキューエントリには、例えば、コマンド完了時間と指定されたデッドライン時間を超えてコマンドが処理されたかどうかを示す情報とが含まれている。疲弊度推定部４３２は、例えば、指定されたデッドライン時間を超えてコマンドが処理されたかどうかを示す情報を用いるか、あるいはこのコマンド完了時間と、ホスト２が要求したデッドライン時間とを比較することにより、デッドライン時間までにコマンドが処理されたか否かに応じて、ＳＳＤ３の疲弊度を推定する。
【００８３】
推定された疲弊度の利用方法は、ホスト２の運用次第であり、多数の応用例が考えられるが、例えば、以下の３点が挙げられる。  
（１）ＳＳＤ３の寿命が近づいたと判断し、ユーザに警告を出し、交換を促す。  
（２）エラーがある領域（ＬＢＡ＋サイズ）のデータを、別の領域に移動し、解放する（リフレッシュ）。  
（３）複数台のＳＳＤが用いられるコンピュータシステム１では、以下のように対処する。  
・複数台のＳＳＤの内、デッドライン時間までにコマンドが処理されなかった違反の数が最大であるＳＳＤを、寿命が近づいたと判断して交換する。  
・複数台のＳＳＤから書き込み先のＳＳＤを選択するときに、違反の数が多いＳＳＤほど選択されにくいようにする。  
・複数台のＳＳＤがミラー等のレプリカのＳＳＤを含む場合に、違反の数が多いＳＳＤほど長いデッドライン時間を指定したコマンドを発行する。これにより、違反の数が少ないＳＳＤでリード動作のような処理が実際に行われたことに応じて、違反の数が多いＳＳＤでは、コマンドがキャンセルされ、実際の処理が行われないようにする。つまり、違反の数が多いＳＳＤでは、長いデッドライン時間を指定することで、コマンドがキャンセルされやすいようにする。
【００８４】
次いで、図９のフローチャートは、ホスト２によって実行されるコマンド発行処理の手順の例を示す。
【００８５】
ホスト２は、ホスト２上で実行されるアプリケーション４１やＯＳ４２等によって、ＳＳＤ３に対するコマンドの発行が要求されたか否かを判定する（ステップＳ１１）。コマンドの発行が要求されていない場合（ステップＳ１１のＮＯ）、ステップＳ１１に戻る。
【００８６】
コマンドの発行が要求された場合（ステップＳ１１のＹＥＳ）、ホスト２は、そのコマンドの処理のデッドライン時間を決定する（ステップＳ１２）。そして、ホスト２は、デッドライン時間が指定されたコマンドをサブミッションキューに投入する（ステップＳ１３）。例えば、ホスト２は、コマンドＩＤ、デッドライン時間、等をサブミッションキューエントリに書き込む。
【００８７】
以上により、サブミッションキュー３１に、要求に応じたコマンドを投入することができる。
【００８８】
また、図１０のフローチャートは、ホスト２によって実行されるコマンド中止処理の手順の例を示す。
【００８９】
ホスト２は、サブミッションキュー３１に入れられたコマンドの中止が要求されたか否かを判定する（ステップＳ２１）。ホスト２は、例えば、発行されたコマンドに対応するプロセスが中止されたことに応じて、当該コマンドの中止が要求されたと判定する。コマンドの中止が要求されていない場合（ステップＳ２１のＮＯ）、ステップＳ２１に戻る。
【００９０】
コマンドの中止が要求された場合（ステップＳ２１のＹＥＳ）、ホスト２は、そのコマンドを中止するためのアボートコマンドをサブミッションキュー（アドミンサブミッションキュー）３１に投入する（ステップＳ２２）。
【００９１】
ＳＳＤ３のコントローラ４は、このアボートコマンドに応じて、指定されたコマンドの処理を中止（キャンセル）するための処理を行うことができる。
【００９２】
図１１のフローチャートは、ＳＳＤ３のコントローラ４によって実行される実行制御処理の手順の例を示す。ここでは、説明を分かりやすくするために、サブミッションキュー３１に複数のコマンドが一括で投入され、その処理中に新たなコマンドが投入されない場合について例示する。
【００９３】
コントローラ４は、サブミッションキュー３１にコマンドが投入されたか否かを判定する（ステップＳ３１）。サブミッションキュー３１にコマンドが投入されていない場合（ステップＳ３１のＮＯ）、ステップＳ３１に戻る。
【００９４】
サブミッションキュー３１にコマンドが投入された場合（ステップＳ３１のＹＥＳ）、コントローラ４は、サブミッションキュー３１内の各コマンドに指定されたデッドライン時間に基づいて、各コマンドが処理（フェッチ）されるタイミングを示すスケジューリング方式を決定する（ステップＳ３２）。
【００９５】
次いで、コントローラ４は、決定されたスケジューリング方式に基づいて、フェッチすべきコマンドがあるか否かを判定する（ステップＳ３３）。フェッチすべきコマンドがある場合（ステップＳ３３のＹＥＳ）、コントローラ４は、サブミッションキュー３１からそのコマンドをフェッチする（ステップＳ３５）。
【００９６】
一方、フェッチすべきコマンドがない場合（ステップＳ３４のＮＯ）、コントローラ４は、スケジューリング方式に基づいて、コマンドがフェッチされるべきタイミングまで待機し（ステップＳ３４）、その後、サブミッションキュー３１からコマンドをフェッチする（ステップＳ３５）。なお、ステップＳ３４の待機中、ＳＳＤ３は低消費電力状態に移行されてもよい。
【００９７】
コントローラ４は、フェッチされたコマンドに応じた処理を実行する（ステップＳ３６）。コントローラ４は、例えば、リードコマンドに応じてＮＡＮＤ型フラッシュメモリ５からデータを読み出したり、ライトコマンドに応じてＮＡＮＤ型フラッシュメモリ５にデータを書き込んだりする。
【００９８】
そして、コントローラ４は、コマンドに応じた処理の実行が完了したか否かを判定する（ステップＳ３７）。実行が完了していない場合（ステップＳ３７のＮＯ）、ステップＳ３７に戻る。
【００９９】
実行が完了した場合（ステップＳ３７のＹＥＳ）、コントローラ４は、コンプリーションキュー３２に、完了したコマンドに関するコンプリーションキューエントリを書き込む（ステップＳ３８）。このコンプリーションキューエントリには、完了時間や、デッドライン時間までに実行が完了したかどうかを示す情報等が含まれる。
【０１００】
次いで、コントローラ４は、投入された全てのコマンドに応じた処理が完了したか否かを判定する（ステップＳ３９）。全てのコマンドに応じた処理が完了していない場合（ステップＳ３９のＮＯ）、ステップＳ３３に戻り、スケジューリング方式に基づく処理が続行される。
【０１０１】
一方、全てのコマンドに応じた処理が完了した場合（ステップＳ３９のＹＥＳ）、ステップＳ３１に戻る。
【０１０２】
なお、上記の処理中に新たなコマンドが投入された場合には、その新たなコマンドを含む、サブミッションキュー内のコマンドの実行（フェッチ）が再度スケジューリングされてもよい。
【０１０３】
以上の構成により、状況に応じてコマンドをスケジューリングしながらＳＳＤ３の消費電力を削減することができる。ホスト２は、処理すべきデッドライン時間が指定された一つ以上のコマンドを発行し、キューに入れる。ＳＳＤ３は、各々のデッドライン時間に基づいて、各コマンドが実行されるタイミングを示すスケジューリング方式を決定する。ＳＳＤ３は、各々のデッドライン時間までにコマンドが処理され、且つＳＳＤ３が低消費電力状態に移行できる期間を長くすることができるようにスケジューリング方式を決定する。したがって、コンピュータシステム１では、一つ以上のコマンドに対応する一つ以上のデッドライン時間の状況に応じてコマンドをスケジューリングしながら、ＳＳＤ３の消費電力を削減することができる。
【０１０４】
以下、上述のような構成を有するコンピュータシステム１が適用される応用例についていくつか説明する。
【０１０５】
（応用例１）
図１２は、コンピュータシステム１における動画再生のためのストリーミング動作の例を示す。ここでは、ホスト２が、ＳＳＤ３に格納された動画ファイル５１を読み出しながら、読み出された動画ファイル５１のデータに基づく動画を再生するユースケースを想定する。
【０１０６】
動画ファイルの再生では、ファイル内のプログラムストリーム（ＰＳ）／トランスポートストリーム（ＴＳ）等のストリーム情報から、ストリーム（データ）を読み出すべきビットレートが予め分かっている。ホストがＳＳＤに大量のリードコマンドを発行した場合、通常の動作では、それら全てのリードコマンドの処理が完了するまで、ＳＳＤは低消費電力状態（低消費電力モード）に移行することはできない。
【０１０７】
本実施形態では、ホスト２は、動画ファイル５１を読み出すためのリードコマンドを発行する場合に、ＳＳＤ３がホスト２に応答すべき時間をデッドライン時間として指定したリードコマンドを発行し、サブミッションキュー３１に投入する。ＳＳＤ３のコントローラ４は、指定されたデッドライン時間までに応答でき、且つＳＳＤ３の消費電力を削減するように、各コマンドを処理するタイミングをスケジューリングする。
【０１０８】
コントローラ４は、サブミッションキュー３１にコマンド（要求）があっても、例えば、デッドライン時間が１０分後であるコマンドであれば、低優先度のコマンドと判断し、他のコマンドを優先する。応答すべきデッドライン時間が１０分後であるリードコマンドに対しては、ＳＳＤ３が、例えば、現時点から９分間、低電力状態に設定された後に、通常電力状態（通常モード）に復帰し、リードコマンドに応じたデータの読み出しを開始したとしても、ホスト２では、動画を破綻することなく適切に再生することができる。
【０１０９】
さらに、ホスト２において、現時点から５分後に動画再生の停止が指示される可能性もあり、そのような場合、現時点から５分後より後のデータが前もって読み出されていたならば、その読み出しに要したエネルギー（電力）は無駄になる。
【０１１０】
例えば、動画データのビットレートは、ＤＶＤで１０Ｍｂｐｓ程度、ブルーレイ（登録商標）で３０〜５０Ｍｂｐｓ、ウルトラＨＤブルーレイで８０〜１００Ｍｂｐｓであり、ＳＳＤ３のシーケンシャルリード性能である１０００〜３０００ＭＢ／ｓと比較すると、数百分の一にも満たない。ＳＳＤ３のリード速度を下げることで、ＳＳＤ３の電力を下げることができる場合には、ＮＡＮＤ型フラッシュメモリ５の並列動作を１／Ｎに減らすことにより、ピーク電力を削減することも可能である。
【０１１１】
動画データをどの程度前もって読み出すかは、アプリケーションの実装に依存するが、一つのリードコマンドの処理が完了する毎に次のリードコマンドを発行して、バッファフルを保ち続けるような処理フローである場合、ＳＳＤ３だけでなく、ホスト２内のＣＰＵコア（プロセッサコア）も、長時間の低消費電力状態に入ることはできない。
【０１１２】
また、昨今のＰＣプラットフォームでは、ハードウェアデコーダがＣＰＵやＧＰＵ内に搭載されることも多い。ハードウェアデコーダによるデコード時間は確定的であるので、指定されたデッドライン時間までにデータをホスト２に供給できさえすれば、適切な動画再生が可能である。
【０１１３】
（応用例２）
図１３は、コンピュータシステム１におけるファイルのダウンロード動作の例を示す。ここでは、ホスト２が、ネットワーク上のサーバ等から大きなサイズのファイルを長時間かけてダウンロードしながら、そのファイルのデータをＳＳＤ３に書き込むユースケースを想定する。なお、ホスト２において、ダウンロード速度のおおよそのビットレートが既知であるものとする。
【０１１４】
ホスト２は、ダウンロードされたデータを書き込むためのライトコマンドを発行し、サブミッションキュー３１に投入する。ライトコマンドには、ダウンロードのビットレートに基づいて、データをＳＳＤ３に書き込むべきデッドライン時間が指定される。
【０１１５】
コントローラ４は、サブミッションキュー３１にコマンドがあっても、例えば、デッドライン時間が１０分後であるコマンドであれば、低優先度のコマンドと判断し、他のコマンドを優先する。また、書き込むべきデッドライン時間が３分後であるライトコマンドに対しては、例えば、現時点から２分後にデータの書き込みを開始したとしても、ホスト２において、ファイルを適切にダウンロードすることができる。
【０１１６】
例えば、ホスト２が、１ＧＢのファイルを８Ｍｂｐｓのビットレートで約１６分かけてダウンロードする場合において、コントローラ４は、ＳＳＤ３のライト性能の限界まで、全速力で、ダウンロードされたデータをＮＡＮＤ型フラッシュメモリ５に書き込む必要はない。ＳＳＤ３は、最大限遅延させながらも８Ｍｂｐｓのレートで書き込めば、ホスト２とＳＳＤ３とによるダウンロード動作は破綻しない。
【０１１７】
このような動作により、ダウンロード中に、ユーザが異なる処理の実行を要求した際のレスポンスは改善することが見込まれる。また、ファイルのダウンロードが中止（キャンセル）された場合には、既にＳＳＤ３に書き込まれたデータは不要であるため削除されることになる。したがって、ライトコマンドに応じた処理が完了してしまったデータは、ダウンロードの中止により無駄になる。
【０１１８】
しかし、ライトコマンドに応じた処理の開始を遅延させていた場合、ホスト２がアボートコマンドを発行することにより、サブミッションキュー３１内のライトコマンドを中断することができる。したがって、ライト／イレーズ回数（プログラム／イレーズサイクル数）に制限のあるＮＡＮＤ型フラッシュメモリ５を用いたＳＳＤ３では、その寿命の延長が期待できる。
【０１１９】
（応用例３）
図１４は、複数のＳＳＤ３Ａ，３Ｂが設けられたコンピュータシステム１における、第１ＳＳＤ３Ａから第２ＳＳＤ３Ｂへのデータのバックアップ動作の例を示す。第１ＳＳＤ３Ａおよび第２ＳＳＤ３Ｂは、上述したＳＳＤ３と同様の構成をそれぞれ有する。一般に、ＳＳＤのライト性能はリード性能よりも低いことが多い。ここでは、ＳＳＤ３Ａ，３Ｂのシーケンシャルのリード性能が３０００ＭＢ／ｓであって、ライト性能が１０００ＭＢ／ｓであり、リード性能とライト性能とがアンバランスである場合を想定する。なお、二つのＳＳＤ３Ａ，３Ｂのリード／ライト性能が同一である場合を例示するが、第１ＳＳＤ３Ａのリード／ライト性能と第２ＳＳＤ３Ｂのリード／ライト性能とは異なっていてもよい。
【０１２０】
第１ＳＳＤ３Ａが、そのリード性能の限界である全速力（ピーク性能）でデータを読み出す速度（３０００ＭＢ／ｓ）と同一の書き込み速度で、第２ＳＳＤ３Ｂがデータを書き込むことはできない。一般的に、ホスト２は、第２ＳＳＤ３Ｂによる書き込みの完了を待って、第１ＳＳＤ３Ａに次のリードコマンドを発行するので、第２ＳＳＤ３Ｂへのデータ書き込みのための時間だけ、第１ＳＳＤ３Ａにおいて空き時間が生じるものの、断続的にリードコマンドが発行されることにより、第１ＳＳＤ３Ａが低消費電力状態に移行することはできない。
【０１２１】
そのため、第１ＳＳＤ３Ａに格納されたデータを第２ＳＳＤ３Ｂにコピー（バックアップ）する場合に、ホスト２は、第１ＳＳＤ３Ａに対して、第２ＳＳＤ３Ｂのライト性能に相当するリード速度（１０００ＭＢ／ｓ）でゆっくり読み出してよいことを通知する。より具体的には、ホスト２は、第１ＳＳＤ３Ａのリード性能と第２ＳＳＤ３Ｂのライト性能とに基づいて、第１ＳＳＤ３Ａからデータを読み出すためのリードコマンドが処理されるべきデッドライン時間を、第２ＳＳＤ３Ｂのライト性能に相当するリード速度を満たすように決定する。
【０１２２】
そして、ホスト２は、このデッドライン時間が指定されたリードコマンドを発行し、第１ＳＳＤ３Ａのためのサブミッションキュー３１に投入する。これにより、第１ＳＳＤ３Ａは、デッドライン時間に基づいてリードコマンドの実行タイミングをスケジューリングすることが可能になり、例えば、バッファの容量の限界までデータを読み出した後、長時間の低消費電力状態に移行することができる。
【０１２３】
また、ホスト２は、第１ＳＳＤ３Ａから読み出されたデータを、第２ＳＳＤ３Ｂに書き込むためのライトコマンドを発行し、第２ＳＳＤ３Ｂのためのサブミッションキュー３１に投入する。ホスト２は、このデータを書き込む際に、第２ＳＳＤ３Ｂがライト性能（１０００ＭＢ／ｓ）を発揮するようにデッドライン時間を指定してもよい。
【０１２４】
バックアップを短時間に完了させることよりも、ＳＳＤ３Ａ，３Ｂが消費するピーク電力を下げることが重要である場合には、ＮＡＮＤ型フラッシュメモリ５に対してプログラム／リードする並列数を下げることを優先するように、コマンドをスケジューリングする。これにより、ピーク消費電力を下げることができる。
【０１２５】
（応用例４）
図１５は、マルチレイヤストレージシステム７が設けられたコンピュータシステム１における、ホスト２からマルチレイヤストレージシステム７へのアクセスの例を示す。マルチレイヤストレージシステム７は、異なるアクセス性能のレイヤに属する複数のストレージデバイスから構成される。ここでは、マルチレイヤストレージシステム７が、第１リード／ライト性能を有する高速のキャッシュＳＳＤ３Ｃと、第１リード／ライト性能よりも低い第２リード／ライト性能を有する中速のデータＳＳＤ３Ｄと、第２リード／ライト性能よりも低い第３リード／ライト性能を有する低速のバックアップＳＳＤ３Ｅとから構成されることを想定する。キャッシュＳＳＤ３Ｃ、データＳＳＤ３Ｄ、およびバックアップＳＳＤ３Ｅは、上述したＳＳＤ３と同様の構成をそれぞれ有する。
【０１２６】
このようなマルチレイヤストレージシステムにおいて、各ストレージデバイスは、デッドライン時間（制限時間）内に完了しなかったコマンドについて、制限時間を超えたことを示すエラーを早期にホストに返却する機能（Ｆａｓｔ  Ｆａｉｌ）を有することがある。ホストは、あるレイヤのストレージデバイスにコマンドを発行し、このコマンドについて制限時間を超えたことを示すエラーが返却された場合には、別のレイヤのストレージデバイスに同様のコマンドを発行することにより、マルチレイヤストレージシステム全体でのコマンドの応答時間を短縮することができる。
【０１２７】
本実施形態のホスト２は、Ｆａｓｔ  Ｆａｉｌ機能によるエラーを受けてから、別のレイヤのストレージデバイスにコマンドを発行するのではなく、複数のレイヤに属する複数のストレージデバイス３Ｃ，３Ｄ，３Ｅのそれぞれに対して、性能が高いものほど短いデッドライン時間を指定したコマンドを一斉に、投機的に発行する。ホスト２は、短いデッドライン時間を指定したコマンドを処理したストレージデバイス（例えば、キャッシュＳＳＤ３Ｃ）から正常終了の応答を受けたならば、より長いデッドライン時間を指定したコマンドを発行した別のストレージデバイス（例えば、データＳＳＤ３ＤおよびバックアップＳＳＤ３Ｅ）に対して、そのコマンドのキャンセルを要求するアボートコマンドをさらに発行する。
【０１２８】
また、短いデッドライン時間を指定したコマンドを処理したストレージデバイス（例えば、キャッシュＳＳＤ３Ｃ）が異常終了したならば、より長いデッドライン時間を指定したコマンドを発行した別のストレージデバイスでのコマンド処理が続行される。以上により、冗長性を有するマルチレイヤストレージシステム７において、無駄なエネルギーを消費することなく投機的なアクセスが行われ、全体での応答時間も短縮することができる。
【０１２９】
例えば、ホスト２からマルチレイヤストレージシステム７にリードコマンドが発行されることを想定する。図１５に示すように、ホスト２は、キャッシュＳＳＤ３Ｃに対して５ミリ秒のデッドライン時間を指定したリードコマンドを、データＳＳＤ３Ｄに対して５０ミリ秒のデッドライン時間を指定したリードコマンドを、バックアップＳＳＤ３Ｅに対して５００ミリ秒のデッドライン時間を指定したリードコマンドを、一斉に、投機的に発行する。そして、発行した時点から１ミリ秒後に、キャッシュＳＳＤ３Ｃからリードの正常終了を示す応答を受けた場合、ホスト２は、データＳＳＤ３ＤおよびバックアップＳＳＤ３Ｅに、リードコマンドをキャンセルするためのアボートコマンドを発行する。
【０１３０】
図１６は、ホスト２からマルチレイヤストレージシステム７にリードコマンドが発行される場合の処理シーケンスの例を示す。ここでは、説明を分かりやすくするために、マルチレイヤストレージシステム７にキャッシュＳＳＤ３ＣとデータＳＳＤ３Ｄとが設けられる場合について例示するが、３台以上のＳＳＤ（ストレージデバイス）が設けられている場合も同様である。
【０１３１】
まず、ホスト２は、データＳＳＤ３Ｄに対して５０ミリ秒のデッドライン時間が指定された第１リードコマンドを、キャッシュＳＳＤ３Ｃに対して５ミリ秒のデッドライン時間が指定された第２リードコマンドを、一斉に発行することにより、リクエストを送出する（Ａ１，Ａ２）。すなわち、これら二つのリードコマンドは、一方のリードコマンドを発行してから他方のリードコマンドを発行するまでに特定の時間だけ待つ待ち合わせを行うことなく、発行される。発行されたコマンドは、例えば、ＳＳＤ３Ｃ，３Ｄにそれぞれ対応するサブミッションキュー３１に投入される。複数のリードコマンドが一斉に発行される場合、別々に発行される場合よりも、ホスト２にかかる負荷が、待ち合わせに要する負荷がない分だけ軽減される。
【０１３２】
データＳＳＤ３Ｄは、第１リードコマンドに指定された５０ミリ秒のデッドライン時間に基づいて、（５０−α）ミリ秒だけ待つ（Ａ３）。時間αは、例えば、データＳＳＤ３Ｄが第１リードコマンドに応じたリード処理を行うのに要する時間に対応する。つまり、データＳＳＤ３Ｄは、第１リードコマンドに応じたリード処理の開始をできるだけ遅延させるように、コマンド処理のスケジューリング方式を決定する。このスケジューリング方式は、例えば、現時点から（５０−α）ミリ秒後に、フェッチおよびリード動作（Ａ８，Ａ９）が行われることを示す。
【０１３３】
一方、キャッシュＳＳＤ３Ｃは、第２リードコマンドに指定された５ミリ秒のデッドライン時間に基づいて、例えば、即座に、第２リードコマンドをフェッチする（Ａ４）。そして、キャッシュＳＳＤ３Ｃは、第２リードコマンドに応じたリード動作を行い（Ａ５）、ホスト２に応答する（Ａ６）。この応答には、リード動作が正常終了したならば、正常終了したことを示す情報が含まれる。以下では、リード動作が正常終了したことを想定する。
【０１３４】
ホスト２は、この応答に応じて、データＳＳＤ３Ｄに対して発行された第１リードコマンドをキャンセルするためのアボートコマンドを、データＳＳＤ３Ｄに対して発行する（Ａ７）。データＳＳＤ３Ｄは、このアボートコマンドに応じて第１リードコマンドを中止する。したがって、スケジューリングされていた、第１リードコマンドをフェッチし（Ａ８）、リードする動作（Ａ９）は、中止される。
【０１３５】
このように、マルチレイヤストレージシステム７からあるデータを読み出すために、複数のＳＳＤに対して複数のリードコマンドが発行されるものの、実際にリード動作が行われるＳＳＤは、リードコマンドが発行された複数のＳＳＤの内の一つに制限されるように制御することができる。これにより、コンピュータシステム１全体で消費される電力を低減できると共に、アクセスによるＮＡＮＤ型フラッシュメモリの疲弊も低減することができる。
【０１３６】
なお、リードコマンドが発行されるキャッシュＳＳＤ３ＣとデータＳＳＤ３Ｄとが直接的に通信することはない。コンピュータシステム１では、ホスト２により発行される各コマンドにデッドライン時間が指定され、各ＳＳＤ３Ｃ，３Ｄ内でデッドライン時間に基づいての動作の制御が行われるので、ＳＳＤ３Ｃ，３Ｄ間の通信は不要である。
【０１３７】
次いで、図１７から図１９を参照して、ＳＳＤ３におけるコマンドの処理と電力状態との関係について説明する。
【０１３８】
図１７は、ＳＳＤ３の動作における三つの電力状態と、それら状態間の遷移の例を示す。
【０１３９】
電力状態ＰＳ０は、ＳＳＤ３がフルスピードで動作するときの電力状態である。つまり、電力状態ＰＳ０であるＳＳＤ３は稼働状態であると云える。電力状態ＰＳ０であるＳＳＤ３の最大電力は、例えば、５Ｗである。ここでは、稼働状態である場合の電力状態としてＰＳ０のみを示したが、ＰＳ０よりも消費電力が低い電力状態ＰＳ１，ＰＳ２がさらに設けられていてもよい。
【０１４０】
電力状態ＰＳ３は、ＳＳＤ３がシャロースリープに入っているときの電力状態である。電力状態ＰＳ３であるＳＳＤ３の最大電力は、例えば、５０ｍＷである。また、電力状態ＰＳ４は、ＳＳＤ３がディープスリープに入っているときの電力状態である。電力状態ＰＳ４であるＳＳＤ３の最大電力は、例えば、２．５ｍＷである。電力状態ＰＳ３またはＰＳ４であるＳＳＤ３は非稼働状態である。
【０１４１】
以下では、説明を分かりやすくするために、図１７に示すように、ＳＳＤ３が三つの電力状態ＰＳ０，ＰＳ３，ＰＳ４のいずれかで動作する場合について例示する。
【０１４２】
電力状態ＰＳ０であるＳＳＤ３は、０．５秒のアイドル時間が経過したことに応じて、電力状態ＰＳ３に遷移する。電力状態ＰＳ３であるＳＳＤ３は、１０秒のアイドル時間が経過したことに応じて、電力状態ＰＳ４に遷移する。また、電力状態ＰＳ３または電力状態ＰＳ４であるＳＳＤ３は、リクエスト（コマンド）が投入されたことに応じて、電力状態ＰＳ０に遷移する。
【０１４３】
図１８は、このように状態遷移するＳＳＤ３がコマンドを処理する場合の消費電力の変化の例を示す。図１８に示す例では、リクエスト８５１，８５２，８５３が三回投入される場合における、デッドライン時間に基づくスケジューリングなしの動作による消費電力８６と、デッドライン時間に基づくスケジューリングありの動作による消費電力８７との変化が示されている。ここでは、一例として、各リクエスト８５１，８５２，８５３が、一つ以上のリードコマンドを含むことを想定する。
【０１４４】
まず、デッドライン時間に基づくスケジューリングなしの動作による消費電力８６について説明する。１回目のリクエスト８５１が投入されたことに応じて、ＳＳＤ３は、ＰＳ４からＰＳ０に遷移し、そのリクエスト８５１に応じた全てのリード処理を実行する。その後、０．５秒のアイドル時間が経過したならば、ＳＳＤ３はＰＳ０からＰＳ３に遷移することにより、シャロースリープに入る。シャロースリープに対応するＰＳ３では、ＰＳ０での電力よりも低い電力が消費されている。
【０１４５】
このシャロースリープの期間が１０秒未満である間に２回目のリクエスト８５２が投入されたことに応じて、ＳＳＤ３は、ＰＳ３からＰＳ０に遷移し、そのリクエスト８５２に応じた全てのリード処理を実行する。その後、０．５秒のアイドル時間が経過したならば、ＳＳＤ３はＰＳ０からＰＳ３に遷移することにより、シャロースリープに入る。
【０１４６】
さらに、このシャロースリープの期間が１０秒未満である間に３回目のリクエスト８５３が投入されたことに応じて、ＳＳＤ３は、ＰＳ３からＰＳ０に遷移し、そのリクエスト８５３に応じた全てのリード処理を実行する。その後、０．５秒のアイドル時間が経過したならば、ＳＳＤ３はＰＳ０からＰＳ３に遷移することにより、シャロースリープに入る。
【０１４７】
上述したように、ＳＳＤ３は、１０秒のアイドル時間が経過したことに応じて、ＰＳ３からＰＳ４（ディープスリープ）に遷移する。したがって、あるリクエストの処理後にＰＳ３に遷移してから新たなリクエストが投入されるまでの間隔が１０秒未満であるならば、ＳＳＤ３は、ＰＳ０とＰＳ３との間での遷移を繰り返し、ＰＳ４に遷移することがない。
【０１４８】
次いで、本実施形態のコンピュータシステム１における、デッドライン時間に基づくスケジューリングありの動作による消費電力８７について説明する。
【０１４９】
１回目のリクエスト８５１が投入されたことに応じて、ＳＳＤ３は、ＰＳ４からＰＳ０に遷移し、そのリクエスト８５１に応じた必要最小限のリード処理を実行し、ＰＳ４に遷移する。つまり、ＳＳＤ３は、デッドライン時間に基づいて、可能な限り遅延させてリード処理を実行するようにスケジューリングし、遅延させることができないリード処理のみを実行する。そして、ＳＳＤ３は、ＰＳ０からＰＳ４に遷移し、遅延させるリード処理を実行するべき時間まで、または新たなリクエストが投入されるまで、ディープスリープに入る。ディープスリープに対応するＰＳ４では、シャロースリープのＰＳ３での電力よりも低い電力が消費されている。
【０１５０】
ディープスリープ中に２回目のリクエスト８５２が投入されたことに応じて、ＳＳＤ３は、ＰＳ４からＰＳ３に遷移し、そのリクエスト８５２に応じた全てのリード処理の実行を遅延させることができると判定して、遅延させるリード処理をスケジューリングする。リクエスト８５２に応じた全てのリード処理の実行を遅延させることができるので、ＳＳＤ３は、再度、ＰＳ３からＰＳ４に遷移する。
【０１５１】
さらに、ディープスリープ中に３回目のリクエスト８５３が投入されたことに応じて、ＳＳＤ３は、ＰＳ４からＰＳ３に遷移し、そのリクエスト８５３に応じた全てのリード処理の実行を遅延させることができると判定して、遅延させるリード処理をスケジューリングする。リクエスト８５３に応じた全てのリード処理の実行を遅延させることができるので、ＳＳＤ３は、再度、ＰＳ３からＰＳ４に遷移する。
【０１５２】
その後、スケジューリング方式に基づいて、リード処理の実行を再開すべき時間に達したならば、ＳＳＤ３は、ＰＳ４からＰＳ０に遷移し、リード処理を実行する。これにより、デッドライン時間までにリクエスト８５１，８５２，８５３が処理されるように、リード処理が実行される。そして、ＳＳＤ３は、ＰＳ０からＰＳ３（またはＰＳ４）に遷移する。
【０１５３】
上述したように、ＳＳＤ３は、リクエスト（リードコマンド）に指定されたデッドライン時間に基づいて、可能な限り遅延させてリード処理を実行するようにスケジューリングし、必要最小限のリード処理を実行して、ＰＳ０からＰＳ４に遷移する。そのため、スケジューリング方式に基づきリード処理が必要である場合にＰＳ０に遷移し、新たなリクエストが投入された場合にＰＳ３に遷移する以外では、可能な限り、最も消費電力が低いＰＳ４に設定される。
【０１５４】
図１９は、デッドライン時間に基づくスケジューリングなしの場合と、デッドライン時間に基づくスケジューリングありの場合とにおいて、図１８に示した全期間の内で、各電力状態ＰＳ０，ＰＳ３，ＰＳ４に設定される期間の割合を示す。
【０１５５】
フルスピード動作するＰＳ０に設定される期間は、デッドライン時間に基づくスケジューリングなしの場合と、デッドライン時間に基づくスケジューリングありの場合で、いずれも１０％である。つまり、リクエスト８５１，８５２，８５３に応じた同一の処理内容では、ＰＳ０であるアクティブ時間は同じになる。
【０１５６】
シャロースリープのＰＳ３に設定される期間は、デッドライン時間に基づくスケジューリングなしの場合に９０％であり、デッドライン時間に基づくスケジューリングありの場合には１％である。また、ディープスリープのＰＳ４に設定される期間は、デッドライン時間に基づくスケジューリングなしの場合に０％であり、デッドライン時間に基づくスケジューリングありの場合には８９％である。
【０１５７】
デッドライン時間に基づくスケジューリングなしの場合にＰＳ４に設定される期間がないのは、あるリクエストの処理後、ＰＳ３に遷移してから新たなリクエストが投入されるまでの間隔が１０秒未満であるならば、ＳＳＤ３が、ＰＳ０とＰＳ３との間での遷移を繰り返し、ＰＳ４に遷移することがないためである。また、デッドライン時間に基づくスケジューリングありの場合にＰＳ４に設定される期間が長いのは、デッドライン時間に基づいて、可能な限り遅延させて処理を実行するようにスケジューリングし、必要最小限の処理が実行されたことに応じて、ＰＳ０からＰＳ４に遷移するためである。つまり、スケジューリング方式に基づき処理が必要である場合と、新たなリクエストが投入された場合以外では、可能な限り、最も消費電力が低いＰＳ４に設定されるためである。
【０１５８】
このような各電力状態ＰＳ０，ＰＳ３，ＰＳ４に設定される期間の割合の違いにより、デッドライン時間に基づくスケジューリングなしの場合に消費される総電力が５４５ｍＷであるのに対して、デッドライン時間に基づくスケジューリングありの場合に消費される総電力は５０３ｍＷである。したがって、この例では、デッドライン時間に基づくスケジューリングを行うことによって、７．８％の電力削減効果が得られると云える。
【０１５９】
次いで、図２０および図２１を参照して、あるＳＳＤ３が、デッドライン時間に基づくスケジューリングなしで動作しているか、それともデッドライン時間に基づくスケジューリングありで動作しているかを判断するための例について説明する。ここでは、ＳＳＤ３に、当該ＳＳＤ３に供給される電源（例えば、ＤＣ３．３Ｖ）に流れる電流を計測するための電流計と、ホスト２とＳＳＤ３との間のバス（ホストＩ／Ｆ１１）の論理的なトラフィック（コマンドやデータ）を時刻情報付きで観測するバスアナライザとが設けられていることを想定する。
【０１６０】
図２０は、デッドライン時間に基づくスケジューリングなしで動作するＳＳＤ３における、消費電力８１とトラフィックの有無を示すバスアナライザ波形８２との遷移を示す。
【０１６１】
まず、ＳＳＤ３は、ホスト２によって一括して投入されたリクエスト（コマンド）８５４に対応するジョブ１，２，３を処理するために、それぞれ電力Ｐ１，Ｐ２ａ，Ｐ２ｂで動作する。その間、バスアナライザ波形８２は、ジョブ１とジョブ２との間に相当する位置と、ジョブ２とジョブ３との間に相当する位置とに、ホスト２との間で伝送されるトラフィックがないこと（ＯＦＦ）を示す微小なアイドル時間Ｔｉｄｌｅ（例えば、１ｍｓ）を含むものの、トラフィックがあること（ＯＮ）をほぼ示している。
【０１６２】
リクエスト８５４に対応するジョブ１，２，３の処理が完了し、閾値（例えば、０．５秒）を超えるアイドル時間Ｔｉｄｌｅが経過したことに応じて、ＳＳＤ３は、低消費電力状態（例えば、ＰＳ３）に遷移する。その間、ホスト２との間で伝送されるトラフィックはないので、バスアナライザ波形８２はＯＦＦを示す。
【０１６３】
そして、ＳＳＤ３は、ホスト２によるリクエストではなく、ＧＣのようなＳＳＤ３の内部動作のために、電力Ｐｉｎｎｅｒで動作する。ＳＳＤ３の内部動作であるため、この間、ホスト２との間で伝送されるトラフィックはなく、バスアナライザ波形８２はＯＦＦを示している。
【０１６４】
また、図２１は、本実施形態のデッドライン時間に基づくスケジューリングありで動作するＳＳＤ３における、消費電力８３とトラフィックの有無を示すバスアナライザ波形８４との遷移を示す。
【０１６５】
まず、ＳＳＤ３は、ホスト２によって一括して投入されたリクエスト（コマンド）８５４に対応するジョブ１，２，３を、指定されたデッドライン時間に基づいてスケジューリングする。そして、ＳＳＤ３は、ジョブ１，２，３の内、すぐに処理すべき最小限のジョブ１を処理するために、電力Ｐ１で動作する。その間、ジョブ１の処理に応じてホスト２との間で伝送されるトラフィックがあるので、バスアナライザ波形８４はＯＮを示している。
【０１６６】
ＳＳＤ３は、ジョブ１の処理が完了したことに応じて、スケジューリング方式に基づく待機時間Ｔｗａｉｔ（例えば、１００ｍｓ）だけ低消費電力状態（例えば、ＰＳ４）に入る。その間、ホスト２との間で伝送されるトラフィックはないので、バスアナライザ波形８４はＯＦＦを示す。
【０１６７】
待機時間Ｔｗａｉｔが経過したならば、ＳＳＤ３は、スケジューリング方式に基づき、ジョブ２を処理するために電力Ｐ２で動作する。その間、ジョブ２の処理に応じてホスト２との間で伝送されるトラフィックがあるので、バスアナライザ波形８４はＯＮを示している。
【０１６８】
そして、ＳＳＤ３は、ジョブ２の処理が完了したことに応じて、低消費電力状態（例えば、ＰＳ４）に遷移した後、ホスト２によるリクエストではなく、ＧＣのようなＳＳＤ３の内部動作のために、電力Ｐｉｎｎｅｒで動作する。ＳＳＤ３の内部動作であるため、この間、ホスト２との間で伝送されるトラフィックはなく、バスアナライザ波形８４はＯＦＦを示している。
【０１６９】
さらに、ＳＳＤ３は、この内部動作が完了したことに応じて、低消費電力状態（例えば、ＰＳ４）に遷移した後、スケジューリング方式に基づき、ジョブ３を処理するために電力Ｐ３で動作する。その間、ジョブ３の処理に応じてホスト２との間で伝送されるトラフィックがあるので、バスアナライザ波形８４はＯＮを示している。
【０１７０】
図２０に示したデッドライン時間に基づくスケジューリングなしで動作するＳＳＤでは、リクエストに対応するジョブ１，２，３の処理が完了するまで、消費電力８１は高いままであり、またバスアナライザ波形８２も、ジョブ間の微小なアイドル時間ＴｉｄｌｅにＯＦＦになることを除いて、ＯＮのままである。そして、ジョブ１，２，３の処理が完了した後は、ＧＣのようなＳＳＤ３の内部動作のために消費電力８１が高くなることがあるものの、後続のリクエスト（ジョブ）が投入されない限り、バスアナライザ波形８２はＯＦＦのままである。すなわち、後続のリクエストが投入されない限り、ホスト２との間のトラフィックが発生することはない。
【０１７１】
これに対して、図２１に示したデッドライン時間に基づくスケジューリングありで動作する本実施形態のＳＳＤ３では、リクエストに対応するジョブ１，２，３の内、必要最小限のジョブ１のみを処理し、他のジョブ２，３の処理は可能な限り遅延させる。そのため、全てのジョブ１，２，３の処理が完了していない状態（例えば、ジョブ１の処理のみか完了した状態）において、消費電力８３が下がり（低消費電力状態になり）、且つバスアナライザ波形８４もオフになる長い待機時間Ｔｗａｉｔが発生し得る。さらに、この待機時間Ｔｗａｉｔの後には、新たなリクエストが投入されることなく、消費電力が高くなり（Ｐ２，Ｐ３）、且つバスアナライザ波形８４がＯＮになる期間が発生する。したがって、あるリクエスト８５４に応じた全てのジョブ１，２，３が処理される期間内に、長い待機時間Ｔｗａｉｔが発生する。
【０１７２】
このように、デッドライン時間に基づくスケジューリングありで動作するＳＳＤ３と、デッドライン時間に基づくスケジューリングなしで動作ＳＳＤ３とでは、リクエスト８５４に応じたジョブが処理される期間において、バスアナライザ波形８２，８４がＯＦＦになる時間の長さが異なることがある。例えば、図２０および図２１に示したように、デッドライン時間に基づくスケジューリングありで動作するＳＳＤ３におけるジョブ１の処理とジョブ２の処理との間の待機時間Ｔｗａｉｔは、デッドライン時間に基づくスケジューリングなしで動作するＳＳＤ３におけるジョブ１の処理とジョブ２の処理との間のアイドル時間Ｔｉｄｌｅよりも長い。
【０１７３】
したがって、あるリクエストに応じた全てのジョブが処理される期間内に、デッドライン時間に基づくスケジューリングなしで動作するＳＳＤで想定されるアイドル時間Ｔｉｄｌｅよりも長い待機時間Ｔｗａｉｔが発生しているならば、そのＳＳＤは、本実施形態のデッドライン時間に基づくスケジューリングありのＳＳＤ３であると云える。そのため、ホスト２によるリクエストが投入された後の消費電力とバスアナライザ波形とを計測することにより、あるＳＳＤ３が、デッドライン時間に基づくスケジューリングなしで動作しているか、それともデッドライン時間に基づくスケジューリングありで動作しているかを判別することができる。
【０１７４】
また、図２２は、ホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０１７５】
この情報処理装置は、サーバ（例えば、ストレージサーバ）のようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０１７６】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションレイヤ４１、ＯＳ４２、デバイスドライバ４３を含む。
【０１７７】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０１７８】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。ネットワークコントローラ１０５を用いた有線通信または無線通信により、例えば、ストレージデバイスとの間でデータを送受信することもできる。
【０１７９】
周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０１８０】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続されてもよい。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０１８１】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボードなどの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０１８２】
以上説明したように、本実施形態によれば、状況に応じてコマンドをスケジューリングしながら消費電力を削減することができる。ホスト２内のプロセッサ１０１は、ＳＳＤ３に対して一つ以上のコマンドを発行することが要求される場合、それら一つ以上のコマンドがそれぞれ処理されるべき一つ以上のデッドライン時間を決定し、一つ以上のデッドライン時間がそれぞれ指定された一つ以上のコマンドをＳＳＤ３に対して発行する。ＳＳＤ３のコントローラ４は、一つ以上のデッドライン時間に基づいて、一つ以上のコマンドの各々が実行されるタイミングを示すスケジューリング方式を決定し、そのスケジューリング方式に従って一つ以上のコマンドを実行する。
【０１８３】
このように、コンピュータシステム１は、状況に応じたデッドライン時間が指定されたコマンドを発行するホスト２と、そのコマンドを適切にスケジューリングして処理するＳＳＤ３とで構成される。これにより、コンピュータシステム１で消費される電力量を削減し、ワーストケースでのコマンド応答時間を短縮する、すなわち、ＱｏＳを向上させる効果を得ることができる。
【０１８４】
また、本実施形態に記載された様々な機能の各々は、回路（処理回路）によって実現されてもよい。処理回路の例には、中央処理装置（ＣＰＵ）のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム（命令群）を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたＣＰＵ以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【０１８５】
また、本実施形態の各種処理はコンピュータプログラムによって実現することができるので、このコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのコンピュータプログラムをコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【０１８６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１８７】
１…コンピュータシステム、２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、６…ＤＲＡＭ、１０…バス、１１…ホストＩ／Ｆ、１２…ＣＰＵ、１３…ＮＡＮＤ  Ｉ／Ｆ、１４…ＤＲＡＭ  Ｉ／Ｆ、１２１…リード制御部、１２２…ライト制御部、１２３…ＧＣ制御部、１２４…アービトレーション制御部、３０…キュー、３１…サブミッションキュー、３２…コンプリーションキュー、４１…アプリケーションレイヤ、４２…ＯＳ、４３…デバイスドライバ、４３１…コマンド発行部、４３２…疲弊度推定部。
【図１】
2019175292.tif 000003
【図２】
2019175292.tif 000004
【図３】
2019175292.tif 000005
【図４】
2019175292.tif 000006
【図５】
2019175292.tif 000007
【図６】
2019175292.tif 000008
【図７】
2019175292.tif 000009
【図８】
2019175292.tif 000010
【図９】
2019175292.tif 000011
【図１０】
2019175292.tif 000012
【図１１】
2019175292.tif 000013
【図１２】
2019175292.tif 000014
【図１３】
2019175292.tif 000015
【図１４】
2019175292.tif 000016
【図１５】
2019175292.tif 000017
【図１６】
2019175292.tif 000018
【図１７】
2019175292.tif 000019
【図１８】
2019175292.tif 000020
【図１９】
2019175292.tif 000021
【図２０】
2019175292.tif 000022
【図２１】
2019175292.tif 000023
【図２２】
2019175292.tif 000024