(57)【要約】【課題】適切でない状況下で実行中のガベッジコレクションを適応的に停止することができるストレージ装置を提供する。【解決手段】実施形態によれば、ストレージ装置は、インタフェースを介してホスト装置と接続可能であり、データの上書きを行えない不揮発性記憶媒体と、コントローラとを具備する。コントローラは、ホスト装置と接続された場合に要求され得る不揮発性記憶媒体に対するデータの書き込みまたは読み出しを制御する。コントローラは、ガベッジコレクション処理部と、ガベッジコレクション制御部とを具備する。ガベッジコレクション処理部は、不揮発性記憶媒体上の不要となったデータが残存する記憶領域を再利用するためのガベッジコレクションを実行する。ガベッジコレクション制御部は、ストレージ装置が閾値以下の負荷状態の場合、ガベッジコレクション処理部が実行中のガベッジコレクションを停止する。【選択図】図２
2019174941.tif 000002
【特許請求の範囲】
【請求項１】
インタフェースを介してホスト装置と接続可能なストレージ装置であって、
データを書き込み済みの記憶領域へのデータの上書きを行うことができない不揮発性記憶媒体と、
前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置からの要求に応じて前記不揮発性記憶媒体へのデータの書き込みまたは前記不揮発性記憶媒体からのデータの読み出しを制御するコントローラと、
を具備し、
前記コントローラは、
前記不揮発性記憶媒体上の不要となったデータが残存する記憶領域を再利用するためのガベッジコレクションを実行するガベッジコレクション処理部と、
前記ストレージ装置が閾値以下の負荷状態の場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止するガベッジコレクション制御部と、
を具備するストレージ装置。
【請求項２】
前記ガベッジコレクション制御部は、前記ストレージ装置内においてキューイングされている前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置によって発行されたコマンドの数が第１値以下の場合、前記ストレージ装置は前記閾値以下の負荷状態と判定する請求項１に記載のストレージ装置。
【請求項３】
前記第１値は、前記不揮発性記憶媒体が備える並列的に動作可能な複数のメモリチップの数である請求項２に記載のストレージ装置。
【請求項４】
前記ガベッジコレクション制御部は、前記ストレージ装置が処理中の前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置によって発行されたコマンドの数が第２値以下の場合、前記ストレージ装置は前記閾値以下の負荷状態と判定する請求項１に記載のストレージ装置。
【請求項５】
前記第２値は、前記不揮発性記憶媒体が備える並列的に動作可能な複数のメモリチップの数である請求項４に記載のストレージ装置。
【請求項６】
前記ガベッジコレクション制御部は、前記ストレージ装置内においてキューイングされている前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置によって発行されたコマンドによるデータの書き込みまたは読み出しの総データサイズが第３値以下の場合、前記ストレージ装置は前記閾値以下の負荷状態と判定する請求項１に記載のストレージ装置。
【請求項７】
前記第３値は、前記不揮発性記憶媒体へ書き込むデータまたは前記不揮発性記憶媒体から読み出したデータが一時的に格納されるバッファメモリのサイズである請求項６に記載のストレージ装置。
【請求項８】
前記ガベッジコレクション制御部は、前記ストレージ装置内においてキューイングされている前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置によって発行されたコマンドの数が第１値以下である第１条件、前記ストレージ装置が処理中の前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置によって発行されたコマンドの数が第２値以下である第２条件、および前記ストレージ装置内においてキューイングされている前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置によって発行されたコマンドによるデータの書き込みまたは読み出しの総データサイズが第３値以下である第３条件の中のあらかじめ定められた２以上の条件の一部または全部が満たされる場合、前記ストレージ装置は前記閾値以下の負荷状態と判定する請求項１に記載のストレージ装置。
【請求項９】
前記ガベッジコレクションは、対象となっている記憶領域内から読み出すべきデータを決定する第１工程と、前記決定したデータを読み出す第２工程と、前記読み出したデータを書き戻す第３工程とを含み、
前記ガベッジコレクション制御部は、前記ガベッジコレクション処理部が実行中の工程を完了させた時点で前記ガベッジコレクションの処理を停止する、
請求項１に記載のストレージ装置。
【請求項１０】
前記ガベッジコレクションは、対象となっている記憶領域内から読み出すべきデータを決定する第１工程と、前記決定したデータを読み出す第２工程と、前記読み出したデータを書き戻す第３工程とを含み、
前記ガベッジコレクション処理部は、前記第１工程乃至前記第３工程を、前記不揮発性記憶媒体の第１使用単位ごとに巡回的に実行し、
前記ガベッジコレクション制御部は、前記ガベッジコレクション処理部が前記第１工程乃至前記第３工程を前記第１使用単位分完了させた時点で前記ガベッジコレクションの処理を停止する、
請求項１に記載のストレージ装置。
【請求項１１】
前記ガベッジコレクション制御部は、前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置の状態を示す通知が、前記ホスト装置が第１状態であることを示す場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を行う請求項１に記載のストレージ装置。
【請求項１２】
前記ガベッジコレクション制御部は、前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置の状態を示す通知が、前記ホスト装置が第１状態でないことを示す場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を行う請求項１に記載のストレージ装置。
【請求項１３】
前記ガベッジコレクション制御部は、
前記ホスト装置と接続された場合に前記ホスト装置から受信し得る前記ホスト装置の状態を示す通知の履歴に基づき、前記ホスト装置が第１状態にある期間的な割合を算出し、
前記算出した割合が基準値を超える場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を、前記ホスト装置が前記第１状態であることを示す前記通知を前記ホスト装置から受信した場合に行い、
前記算出した割合が前記基準値以下の場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を、前記ホスト装置が前記第１状態でないことを示す前記通知を前記ホスト装置から受信した場合に行う、
請求項１に記載のストレージ装置。
【請求項１４】
ホスト装置と、データを書き込み済みの記憶領域へのデータの上書きを行うことができない不揮発性記憶媒体を有し、前記ホスト装置からの要求に応じて前記不揮発性記憶媒体へのデータの書き込みまたは前記不揮発性記憶媒体からのデータの読み出しを実行するストレージ装置とによって構成されるコンピュータシステムであって、
前記ホスト装置は、前記ホスト装置の状態を示す通知を前記ストレージ装置へ送信するステータス通知部を具備し、
前記ストレージ装置は、
前記不揮発性記憶媒体上の不要となったデータが残存する記憶領域を再利用するためのガベッジコレクションを実行するガベッジコレクション処理部と、
前記通知を前記ホスト装置から受信した場合、前記ストレージ装置が閾値以下の負荷状態か否かを判定し、前記ストレージ装置が前記閾値以下の負荷状態の場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止するガベッジコレクション制御部と、
を具備するコンピュータシステム。
【請求項１５】
前記ストレージ装置の前記ガベッジコレクション制御部は、前記ホスト装置が第１状態であることを前記通知が示す場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を行う請求項１４に記載のコンピュータシステム。
【請求項１６】
前記ストレージ装置の前記ガベッジコレクション制御部は、前記ホスト装置が第１状態でないことを前記通知が示す場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を行う請求項１４に記載のコンピュータシステム。
【請求項１７】
前記ストレージ装置の前記ガベッジコレクション制御部は、
前記ホスト装置から受信した前記ホスト装置の状態を示す通知の履歴に基づき、前記ホスト装置が第１状態にある期間的な割合を算出し、
前記算出した割合が基準値を超える場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を、前記ホスト装置が前記第１状態であることを示す前記通知を前記ホスト装置から受信した場合に行い、
前記算出した割合が前記基準値以下の場合、前記ガベッジコレクション処理部が実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を、前記ホスト装置が前記第１状態でないことを示す前記通知を前記ホスト装置から受信した場合に行う、
請求項１４に記載のコンピュータシステム。
【請求項１８】
データを書き込み済みの記憶領域へのデータの上書きを行うことができない不揮発性記憶媒体を有するストレージ装置の動作方法であって、
前記不揮発性記憶媒体上の不要となったデータが残存する記憶領域を再利用するためのガベッジコレクションを実行することと、
前記ストレージ装置が閾値以下の負荷状態か否かを判定することと、
前記ストレージ装置が前記閾値以下の負荷状態の場合、実行中の前記ガベッジコレクションを停止することと、
を具備するストレージ装置の動作方法。
【請求項１９】
前記ストレージ装置内においてキューイングされているホスト装置によって発行されたコマンドの数が第１値以下である第１条件、前記ストレージ装置が処理中の前記ホスト装置によって発行されたコマンドの数が第２値以下である第２条件、および前記ストレージ装置内においてキューイングされている前記ホスト装置によって発行されたコマンドによるデータの書き込みまたは読み出しの総データサイズが第３値以下である第３条件の中のあらかじめ定められた２以上の条件の一部または全部が満たされる場合、前記ストレージ装置は前記閾値以下の負荷状態と判定することを具備する請求項１８に記載のストレージ装置の動作方法。
【請求項２０】
ホスト装置の状態を示す通知を前記ホスト装置から受信した場合、実行中の前記ガベッジコレクションを停止すべきか否かを決定するための前記ストレージ装置が前記閾値以下の負荷状態か否かの判定を行うことを具備する請求項１８に記載のストレージ装置の動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ストレージ装置、コンピュータシステムおよびストレージ装置の動作方法に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリを主たる不揮発性記憶媒体とするＳＳＤ（Solid State Drive）と呼ばれるストレージ装置では、ＮＡＮＤフラッシュメモリ上の不要となったデータが残存する記憶領域を再利用するためのガベッジコレクション（ＧＣ：Garbage Collection）と呼ばれる処理が必要となる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１７／０１７７４６９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＧＣは、ストレージ装置と当該ストレージ装置を用いるホスト装置とによって構成されるコンピュータシステムにおいて適切な状況下で実行されることが好ましい。
本発明が解決しようとする課題は、適切でない状況下で実行中のＧＣを適応的に停止することができるストレージ装置、コンピュータシステムおよびストレージ装置の動作方法を提供することである。
【課題を解決するための手段】
【０００５】
実施形態によれば、ストレージ装置は、インタフェースを介してホスト装置と接続可能であり、不揮発性記憶媒体と、コントローラとを具備する。不揮発性記憶媒体は、データを書き込み済みの記憶領域へのデータの上書きを行うことができない。コントローラは、ホスト装置と接続された場合にホスト装置から受信し得るホスト装置からの要求に応じて不揮発性記憶媒体へのデータの書き込みまたは不揮発性記憶媒体からのデータの読み出しを制御する。コントローラは、ガベッジコレクション処理部と、ガベッジコレクション制御部とを具備する。ガベッジコレクション処理部は、不揮発性記憶媒体上の不要となったデータが残存する記憶領域を再利用するためのガベッジコレクションを実行する。ガベッジコレクション制御部は、ストレージ装置が閾値以下の負荷状態の場合、ガベッジコレクション処理部が実行中のガベッジコレクションを停止する。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態のコンピュータシステムの一例を示す図。
【図２】第１実施形態のストレージ装置の詳細な構成の一例を示す図。
【図３】ＮＡＮＤフラッシュメモリのブロックの構成および状態を例示する図。
【図４】ガベッジコレクションの概要を説明するための図。
【図５】第１実施形態のストレージ装置のＧＣに関わる処理手順を示すフローチャート。
【図６】第２実施形態のコンピュータシステムにおけるＧＣに関わるホスト装置とストレージ装置との連携を示すシーケンスチャート。
【図７】、ＮＶＭｅ（登録商標）で規定されるAdmin Commandのフォーマットを示す図。
【図８】第２実施形態のホスト装置のＧＣに関わる処理手順を示すフローチャート。
【図９】第２実施形態のストレージ装置のＧＣに関わる処理手順を示すフローチャート。
【図１０】第３実施形態のストレージ装置のＧＣに関わる処理手順を示すフローチャート。
【図１１】第４実施形態のコンピュータシステムにおけるストレージ装置のＧＣに関わる処理手順を示すフローチャート。
【発明を実施するための形態】
【０００７】
以下、実施の形態について図面を参照して説明する。
（第１実施形態）
まず、第１実施形態について説明する。
図１は、本実施形態のコンピュータシステムの一例を示す図である。図１に示されるように、このコンピュータシステムは、ストレージ装置１と、このストレージ装置１をたとえばメインストレージとして用いるホスト装置２とから構成される。ストレージ装置１とホスト装置２とは、信号線３によって接続される。ストレージ装置１は、ホスト装置２の筐体内に収納されるものであってもよいし、ホスト装置２に外部接続されるものであってもよい。ここでは、ストレージ装置１が、ＳＳＤとして実現されるものと想定する。
【０００８】
ストレージ装置１は、コントローラ１１と、揮発性メモリ１２と、不揮発性メモリ１３とを有する。なお、揮発性メモリ１２は、コントローラ１１内に設けられてもよい。つまり、揮発性メモリ１２を有しない構成も考えられ得る。
コントローラ１１は、ホスト装置２からのコマンドを受け付け、揮発性メモリ１２をバッファとして使用しながら、不揮発性メモリ１３へのデータの書き込み、不揮発性メモリ１３からのデータの読み出しを行う処理回路である。コントローラ１１は、たとえばＣＰＵ（Central Processing Unit）を内蔵するＳｏＣ（System on Chip）である。不揮発性メモリ１３の所定の領域には、ストレージ装置１に目的の動作を行わせるためのプログラムが格納されている。このプログラムは、たとえばストレージ装置１の起動時やリセット時などに、その一部または全部が揮発性メモリ１２にロードされ、コントローラ１１内のＣＰＵによって実行される。
【０００９】
揮発性メモリ１２は、たとえばＤＲＡＭ（Dynamic RAM[Random Access Memory]）である。また、ＳＳＤとして実現されることが想定されるストレージ装置１における不揮発性メモリ１３は、ＮＡＮＤフラッシュメモリである。なお、ここでは、ストレージ装置１がＳＳＤとして実現されるものと想定するが、これに限らず、データを書き込み済みの記憶領域へのデータの上書きを行うことができない（ＮＡＮＤフラッシュメモリ以外の）メモリを不揮発性メモリ１３として有し、ＧＣを必要とするものであればよい。
【００１０】
一方、ホスト装置２は、ＰＣ（Personal Computer）やサーバなどの情報処理装置である。ホスト装置２は、プロセッサ２１と、主メモリ２２と、入力装置２３と、表示装置２４と、ストレージインタフェースコントローラ２５とを有する。
【００１１】
プロセッサ２１は、ホスト装置２内のコンポーネントの制御を司る処理回路である。プロセッサ２１は、ストレージ装置１から各種プログラムを主メモリ２２へロードして実行する。各種プログラムの中には、第２実施形態において説明する、ステータス通知部２０１を有するストレージ管理プログラム２００が含まれる。主メモリ２２には、各種プログラムによって用いられるユーザデータ２１０も一時的に格納される。ユーザデータ２１０の中には、ストレージ装置１へ書き込むデータや、ストレージ装置１から読み出したデータが含まれる。
【００１２】
入力装置２３は、たとえば、キーボードやマウスなどである。表示装置２４は、ディスプレイである。入力装置２３および表示装置２４の一方または両方は、ホスト装置２に外部接続されるものであってもよい。また、入力装置２３は、（キーボードやマウスなどを含む）外部機器との間で有線または無線の通信を実行する通信装置であってもよい。
【００１３】
ストレージインタフェースコントローラ２５は、ストレージ装置１との間で信号線３を介した通信を実行するデバイスである。ここで、ストレージ装置１とホスト装置２との間の接続や通信プロトコルについて説明する。
ホスト装置２は、ストレージ装置１に対して、信号線３を介して、データの読み書きを含むデータ処理の要求、状態変化の要求、統計情報の要求などを送る。一方、ストレージ装置１は、ホスト装置２に対して、信号線３を介して、データ処理の結果、状態変化の結果、自装置の統計情報などのホスト装置２からの要求に対する返答を送る。様々なホスト装置２とストレージ装置１とを相互接続できるように、このような要求や返答を信号線３上で送る方法には、様々な標準規格が存在する。
【００１４】
たとえば、ホスト装置２とストレージ装置１との間で、信号線３上で情報を送受信するための標準規格には、ＰＣＩ Express（ＰＣＩｅ）（登録商標）が存在する。また、たとえば、ホスト装置２とストレージ装置１との間で送受信される、前述の要求や返答の手続きやデータフォーマット等の標準規格には、Non-Volatile Memory Express（ＮＶＭｅ）（登録商標）が存在する。なお、本実施形態のコンピュータシステムにおいては、信号線３上で情報を送受信するための仕組みや、前述の要求や返答を送受信するための手続きやデータフォーマット等については、特定の規格を仮定しない。ここで説明されるＧＣに関する手法は、ＰＣＩｅ（登録商標）やＮＶＭｅ（登録商標）をはじめ、様々な標準規格および標準規格以外の方法を用いた場合でも適用可能である。
【００１５】
さらに、ホスト装置２とストレージ装置１とは、物理的な信号線で接続されている必要はない。ホスト装置２とストレージ装置１とは、無線ＬＡＮ（Local Area Network）等の物理的な信号線を伴わない方法で接続されていても構わない。つまり、ここで説明されるＧＣに関する手法は、ホスト装置２とストレージ装置１とが物理的な信号線を伴わない方法で接続されていても適用可能である。
【００１６】
図２は、ストレージ装置１の詳細な構成の一例を示す図である。
前述したように、ストレージ装置１は、コントローラ１１と、揮発性メモリ１２と、不揮発性メモリ１３とを有する。コントローラ１１は、ホストインターフェースコントローラ１１１、ホスト要求処理部１１２、データ制御部１１３、ＮＡＮＤインターフェースコントローラ１１４、Direct Memory Access Controller（ＤＭＡＣ）１１５、誤り訂正処理部１１６などを有している。また、ストレージ装置１は、揮発性メモリ１２としてバッファメモリ１２Ａを有し、不揮発性メモリ１３としてＮＡＮＤフラッシュメモリ１３Ａを有している。前述したように、バッファメモリ１２Ａは、コントローラ１１内に設けられてもよい。ＮＡＮＤフラッシュメモリ１３Ａは、並列的に動作可能な複数のＮＡＮＤフラッシュメモリチップ１３１を備えている。つまり、ストレージ装置１は、理論的には、ＮＡＮＤフラッシュメモリ１３Ａへのデータの書き込みまたはＮＡＮＤフラッシュメモリ１３Ａからのデータの読み出しを、最大で、ＮＡＮＤフラッシュメモリチップ１３１の数だけ並列的に実行することができる。
【００１７】
ホストインターフェースコントローラ１１１は、信号線３を介してホスト装置２から送信されたストレージ装置１に対する処理要求を受信し、ホスト要求処理部１１２に要求の内容を伝える。また、ホストインターフェースコントローラ１１１は、ホスト要求処理部１１２からの要求にしたがい、ホスト装置２からの処理要求に対する処理結果の返答を、信号線３を介してホスト装置２に送信する。さらに、ホストインターフェースコントローラ１１１は、ＤＭＡＣ１１５からの指示にしたがい、ホスト装置２からの書き込み要求対象のデータをホスト装置２側の主メモリ２２から読み出してバッファメモリ１２Ａに書き込んだり、ホスト装置２からの読み出し要求対象のデータをバッファメモリ１２Ａから読み出してホスト装置２側の主メモリ２２に書き込んだりする。
【００１８】
ホスト要求処理部１１２は、ホスト装置２から送信された処理要求をホストインターフェースコントローラ１１１から受信し、処理要求の内容を解釈し、処理要求の内容にしたがって、ストレージ装置１内部を制御する。ホスト要求処理部１１２は、たとえば、ホスト装置２からデータ読み出し要求を受信すると、データ制御部１１３に対してＮＡＮＤフラッシュメモリ１３Ａから当該要求データをバッファメモリ１２Ａに読み出すように指示し、バッファメモリ１２Ａに読み出されたデータを、ＤＭＡＣ１１５を操作してホスト装置２側の主メモリ２２に転送する。また、ホスト要求処理部１１２は、たとえば、ホスト装置２からデータ書き込み要求を受信すると、ＤＭＡＣ１１５を操作してホスト装置２側の主メモリ２２から書き込みデータをバッファメモリ１２Ａに転送し、データ制御部１１３に対して、バッファメモリ１２Ａ内のデータをＮＡＮＤフラッシュメモリ１３Ａに書き込むよう指示を出す。ホスト要求処理部１１２は、ホスト装置２から受信した要求の処理が完了したら、ホスト装置２に対して処理結果を送信する。このホスト装置２からの読み書き要求は、読み書き等の要求する処理の種類と、処理を要求するデータのサイズとを伴う。
【００１９】
さらに、ホスト要求処理部１１２は、ＧＣ制御部１１２１を有する。ＧＣ制御部１１２１は、ストレージ装置１があらかじめ定められた状況下でＧＣを実行中であった場合、当該実行中のＧＣを停止する。このＧＣ制御部１１２１による、実行中のＧＣの停止については後述する。
【００２０】
ところで、ホスト要求処理部１１２およびホストインターフェースコントローラ１１１は、ホスト装置２から通知される処理要求（コマンド）を溜めておくことがある。たとえばＮＶＭｅ（登録商標）では、複数のコマンドキューが存在すること、および各コマンドキューの最大の深さが規定されている。ストレージ装置１は、ホスト装置２から送信されたコマンドをすぐに処理できない場合に、このキューにコマンドを溜めておく。逆に、ホスト装置２は、ストレージ装置１へのコマンドを、その時点でストレージ装置１が実行可能かどうかに関わらず、このキューに空きがある限り、ストレージ装置１に送ることができる。なお、このコマンドキューは、ホスト要求処理部１１２およびホストインターフェースコントローラ１１１のどちらかに存在していてもよいし、これらの両方に存在していてもよい。
【００２１】
また、ストレージ装置１がホスト装置２から受信する要求は、データの読み書きだけではない。前述したように、たとえば、低消費電力状態への状態変化の要求、総書き込みデータ量や総読み出しデータ量といった統計情報の要求などを受信することもある。統計情報の要求などは、ＮＶＭｅ（登録商標）が定義しているものもある。これらの要求を受信したホスト要求処理部１１２は、データ制御部１１３に具体的な処理を要求して、所望の処理を実現する。
【００２２】
データ制御部１１３は、ストレージ装置１内に格納されているデータの管理およびＮＡＮＤフラッシュメモリ１３Ａに対するアクセスの制御を行う。具体的には、データ制御部１１３は、ホスト装置２からの読み書き要求時に指定されるＬＢＡ（Logical Block Address）と、そのＬＢＡに対応する最新データが格納されているＮＡＮＤフラッシュメモリ１３Ａ内の位置情報との組を保持している。このＮＡＮＤフラッシュメモリ１３Ａ内の位置情報のことを、ＮＡＮＤ物理アドレス（ＮＡＮＤ Physical Address:ＮＰＡ）と呼ぶことにする。また、データ制御部１１３が管理する、ＬＢＡとＮＰＡとの対応関係の表のことを、論物変換テーブルと呼ぶことにする。
【００２３】
次に、論物変換テーブルの更新が発生する、ストレージ装置１のデータ書き込み時の処理について説明する。
ホスト装置２からストレージ装置１に対してデータの書き込み要求が送られた場合、ストレージ装置１は、次のように処理を行う。
ホスト装置２からデータの書き込み要求を送られたストレージ装置１は、まず、ホスト要求処理部１１２が、ホストインターフェースコントローラ１１１経由でこの書き込み要求を受信する。この書き込み要求には、書き込み先ＬＢＡ領域の先頭ＬＢＡと、書き込みサイズと、書き込むデータが格納されているホスト装置２側の主メモリ２２の先頭アドレスが含まれている。
【００２４】
そこで、ホスト要求処理部１１２は、ＤＭＡＣ１１５を操作して、指定されるホスト装置２側の主メモリ２２の先頭アドレスから、指定される書き込みサイズのデータをバッファメモリ１２Ａに転送する。そして、ホスト要求処理部１１２は、データ制御部１１３に対して、バッファメモリ１２Ａ内のデータをＮＡＮＤフラッシュメモリ１３Ａに書き込むよう指示を出す。
【００２５】
なお、ホスト要求処理部１１２は、ホスト装置２から受信した書き込み要求に対する返答を、書き込みを要求されたデータをすべてバッファメモリ１２Ａに転送し終わった時点でホスト装置２に送信してもよいし、書き込みを要求されたデータをすべてＮＡＮＤフラッシュメモリ１３Ａに書き終えた時点でホスト装置２に送信してもよい。
【００２６】
ホスト要求処理部１１２からデータのＮＡＮＤフラッシュメモリ１３Ａへの書き込み要求を受領したデータ制御部１１３は、当該データをＮＡＮＤフラッシュメモリ１３ＡのどのＮＰＡに書き込むかを決定し、必要に応じて誤り訂正処理部１１６を操作して、当該データから符号化したデータを作成し、ＮＡＮＤインターフェースコントローラ１１４を操作して、符号化したデータをＮＡＮＤフラッシュメモリ１３Ａに書き込む。
【００２７】
データ制御部１１３は、この符号化したデータをＮＡＮＤフラッシュメモリ１３Ａに書き込んだ後に、そのデータのＬＢＡと、そのデータから作成した符号化したデータを書き込んだＮＰＡとを対応付けて、論物変換テーブルに記録する。
もし、この論物変換テーブルに、そのＬＢＡと、そのＬＢＡに対応する古いデータが記録されているＮＰＡとの組が記録されていた場合、データ制御部１１３は、そのエントリを新しいＮＰＡで更新する。このようにして、論物変換テーブルの内容は、ＬＢＡとＮＰＡとの対応関係が常に最新になるように管理される。
【００２８】
また、データ制御部１１３は、ＮＡＮＤフラッシュメモリ１３Ａの状態に応じてＧＣを実行するＧＣ処理部１１３１を有する。次に、ＧＣの処理内容について説明する。
前述の通り、ストレージ装置１は、ホスト装置２から受信した書き込み要求のデータをＮＡＮＤフラッシュメモリ１３Ａに書き込んでいく。また、ＮＡＮＤフラッシュメモリ１３Ａは、一旦データを書きこんだ記憶領域を再利用するためには、ブロックと呼ばれる単位でデータの消去処理が必要である。
【００２９】
つまり、ストレージ装置１は、ホスト装置２からのデータ書き込み要求を処理し続けていくと、ＮＡＮＤフラッシュメモリ１３Ａ内に無効になったデータが残されたまま再利用できない記憶領域を多数保持することになる。そのままホストからのデータ書き込み要求を処理し続けていくと、最終的には、新たにデータを書き込む場所がなくなってしまい、データ書き込み要求を処理できなくなる。この状態を回避するために行う処理がＧＣである。
【００３０】
図３および図４を参照して、ＧＣの概要を説明する。
図３は、ＮＡＮＤフラッシュメモリ１３Ａのブロックの構成および状態を例示する図である。ここでは、説明の簡略化のため、ＮＡＮＤフラッシュメモリ１３Ａのブロックが９つのページ（ａ〜ｉ）から構成されている例を示している。また、たとえばページｇのように、符号ａ１で示されるハッチングが施されていないページ（ｇ，ｈ，ｉ）は、空きページであることを示している。一方、たとえばページａのように、符号ａ２で示される形状のハッチングが施されているページ（ａ，ｅ，ｆ）は、有効データを記録したページであることを示し、たとえばページｄのように、符号ａ３で示される形状のハッチングが施されているページ（ｂ，ｃ，ｄ）は、無効データを記録したページであることを示している。
【００３１】
一方、図４は、（ＮＡＮＤフラッシュメモリ１３Ａのブロックが図３に示すように構成されており、かつ、ブロック内の各ページの状態が図３と同様に示されていることを前提として）ＧＣの概要を説明するための図である。
ＮＡＮＤフラッシュメモリ１３Ａのブロックが図４（Ａ）に示す状態にある場合、ストレージ装置１は、次にホスト装置２から受信したデータ書き込み要求について、ブロック３のページgにデータを書き込む。また、ブロック１とブロック２とは、既に全てのページがデータで埋まっていて、これら２つのブロックには、そのままではデータを書きこむことはできない。したがって、このままでは、ホスト装置２からのデータ書き込み要求を処理できなくなる。
【００３２】
そこで、ストレージ装置１は、図４（Ｂ）に示すように、ブロック１とブロック２とに記録されているデータのうち、有効なデータを一旦ＮＡＮＤフラッシュメモリ１３Ａから読み出して、ブロック１とブロック２との全データを消去し、一旦読み出した有効データをブロック２に書き戻す。なお、図４（Ｂ）中、たとえば「１−ａ」は、「ブロック１のページａ」を示している。
【００３３】
すると、ＮＡＮＤフラッシュメモリ１３Ａのブロックの状態は、図４（Ｃ）に示すようになり、ブロック１が空きブロックとして再利用可能な状態となる。このようにして空きブロックを作り出すのがＧＣである。
このように、ＧＣは、有効なデータをＮＡＮＤフラッシュメモリ１３Ａから読み出す処理と、再度ＮＡＮＤフラッシュメモリ１３Ａに書きこむ処理とで構成される。より詳しくは、ＮＡＮＤフラッシュメモリ１３Ａから読み出すデータを決める処理と、前述の２つの処理とで構成される。すなわち、ＧＣを行っている最中は、ＮＡＮＤフラッシュメモリ１３Ａは、ホスト装置２からの書き込みまたは読み出し要求に基づく処理を行うことができない。
【００３４】
より具体的に言えば、図２のＮＡＮＤインターフェースコントローラ１１４とＮＡＮＤフラッシュメモリ１３Ａをつなぐ信号線や、バッファメモリ１２ＡがＧＣのために使用される。また、データ制御部１１３は、ＮＡＮＤフラッシュメモリ１３Ａ内のどのデータをＧＣにおけるコピー対象とするかの判断処理等を行う。さらに、ＧＣを行うことで、論物変換テーブルの内容が変化する。なぜなら、ＧＣによるデータコピーによって、あるＬＢＡに対応する最新データが記録されているＮＰＡが変わるからである。
【００３５】
以上の通り、ＧＣは、ＮＡＮＤフラッシュメモリ１３Ａを占有し、バッファメモリ１２Ａやデータ制御部１１３などのストレージ装置１内のリソースを消費し、さらに論物変換テーブルの内容が変化する。
従来は、このような理由から、ＧＣを、ストレージ装置１がホスト装置２からデータ読み出しや書き込み要求を受信していない「暇な時」に行うことで、ホスト装置２からのデータ読み出しや書き込み要求を邪魔しないようにしていた。しかし、この「暇な時」にＧＣを行うことは、前述の通り、ストレージ装置１内部の状態を変化させてしまう。このことは、結局、ホスト装置２からのデータ読み出しや書き込み要求を邪魔してしまうことがある。
【００３６】
たとえば、ＧＣのためにＮＡＮＤフラッシュメモリ１３Ａからのデータ読み出しやＮＡＮＤフラッシュメモリ１３Ａへのデータの書き込みの最中にホスト装置２からコマンドを受信した場合、このデータの読み出しや書き込みが完了するまで、当該コマンドの処理を開始することができない。これは、ホスト装置２から見たコマンド処理時間が長くなる原因となる。
【００３７】
また、ＧＣによって論物変換テーブルの内容が変化することは、当該変化した論物変換テーブルの内容を不揮発化しなければならないことを意味する。これは、ストレージ装置１としては不安定な状態にあることを示す。
さらに、本来、ＧＣは、ホスト装置２からの書き込み要求の存在に合わせて行われるべき処理であり、「暇な時」にあらかじめ行ったＧＣは、実は無駄なＧＣである可能性もある。これは、ストレージ装置１の寿命を縮める可能性がある。
【００３８】
以上の通り、ストレージ装置１が「暇な時」にＧＣを行うことはデメリットが多い。
一方、ＧＣを行ってよいかどうかをホスト装置２からストレージ装置１に指定する仕組みが存在する。
しかし、前述の通り、ＧＣはストレージ装置１が自身の内部状態を参照して行う処理である。また、ホスト装置２がＧＣの実行を指示した時がストレージ装置１にとって「暇な時」とは限らない。たとえば、「暇な時」にＧＣを行うことをポリシーとするストレージ装置１の場合、ホスト装置２がストレージ装置１にＧＣの実行を指示しても、ストレージ装置１がホスト装置２からのコマンドを処理している最中の場合、ＧＣを行うことができない。
【００３９】
したがって、ホスト装置２からストレージ装置１でのＧＣの実行を指示する仕組みよりも、ストレージ装置１自身がＧＣを行う時を選択したほうが効率は良い。
以上の状況を鑑み、本実施形態では、ストレージ装置１自身が暇かどうかを判断し、暇な時にはＧＣを行わないようにする。
【００４０】
ストレージ装置１が暇かどうかは、たとえば、ストレージ装置１のホストインターフェースコントローラ１１１またはホスト要求処理部１１２が備えるコマンドキューに溜まっているコマンドの数がある閾値（第１閾値［第１値］）以下であるかどうかで判断することが考えられる（第１条件）。この第１閾値としては、ストレージ装置１が備えるＮＡＮＤフラッシュメモリ１３ＡのＮＡＮＤフラッシュメモリチップ１３１の数とすることが考えられる。なぜなら、１つのホストコマンドを処理するためには最低１つのＮＡＮＤフラッシュメモリチップ１３１を動作させる必要があるため、キューに溜まっているコマンド数がＮＡＮＤフラッシュメモリチップ１３１の数より少ない場合には、当該コマンド群の処理は、ストレージ装置１に負荷をかけずに実行できる可能性が高いからである。
【００４１】
また、たとえば、ストレージ装置１が処理中のコマンドの数がある閾値（第２閾値［第２値］）以下であるかどうかで判断することも考えられる（第２条件）。この第２閾値としても、第１閾値と同様に、ストレージ装置１が備えるＮＡＮＤフラッシュメモリ１３ＡのＮＡＮＤフラッシュメモリチップ１３１の数を用いることが考えられる。
【００４２】
さらに、たとえば、ストレージ装置１内のキューに溜まっているコマンドの総読み書きデータサイズがある閾値（第３閾値［第３値］）以下であるかどうかで判断することも考えられる（第３条件）。この第３閾値としては、ストレージ装置１が備えるバッファメモリ１２Ａのサイズとすることが考えられる。なぜなら、ストレージ装置１がホスト装置２との間で読み書き対象のデータをやり取りするためにはバッファメモリ１２Ａが必要であり、キューに溜まっているコマンドに関するデータの総サイズがバッファメモリ１２Ａのサイズ以下であれば、当該コマンド群の処理はストレージ装置１に負荷をかけずに実行できる可能性が高いからである。前述したように、ホスト装置２からの読み書き要求は、読み書き等の要求する処理の種類と、処理を要求するデータのサイズとを伴うので、キューに溜まっているコマンドの総読み書きデータサイズを得ることは可能である。
【００４３】
すなわち、本実施形態のストレージ装置１は、要求される性能を発揮し得る閾値以下の負荷状態の場合、ＧＣを行わないようにする。より詳しくは、そのような状況下でＧＣが実行されていたならば、その処理を停止（中断または終了）する。つまり、ここでのストレージ装置１が「暇な時」とは、従来のような、ストレージ装置１がホスト装置２からデータ読み出しや書き込み要求を受信していない時ではなく、ストレージ装置１が（要求される性能を発揮し得る）閾値以下の負荷状態の時である。前述したように、ＧＣは、データ制御部１１３のＧＣ処理部１１３１によって実行される。そして、ホスト要求処理部１１２のＧＣ制御部１１２１は、前述の判断を行い、データ制御部１１３のＧＣ処理部１１３１が実行中のＧＣを適応的に停止する。また、ホスト要求処理部１１２のＧＣ制御部１１２１は、データ制御部１１３のＧＣ処理部１１３１が実行していたＧＣを停止したことを記憶しておき、さらに、当該停止中のＧＣを適応的に再開することができる。より詳しくは、ホスト要求処理部１１２のＧＣ制御部１１２１は、ストレージ装置１が暇ではなくなった時、ＧＣが停止中ならば、当該停止中のＧＣを再開する。
【００４４】
なお、ストレージ装置１が暇かどうかの判断には、例示した複数の閾値（第１閾値、第２閾値、第３閾値）、換言すれば、複数の条件（第１条件、第２条件、第３条件）の任意の組み合わせで定義しても構わない。
ストレージ装置１は、このようにして定義した判断基準に従ってチェックを行い、ストレージ装置１が暇であると判断した場合、以降、ＧＣを行わない。もし、ＧＣを実行中に「ストレージ装置１が暇である」と判断した場合、速やかに処理を停止する。以下、速やかに処理を停止する例をいくつか説明する。
【００４５】
図３および図４を用いて説明したように、ＧＣは、（Ａ）ＮＡＮＤフラッシュメモリ１３Ａから読み出すデータを決める処理［第１工程］、（Ｂ）ＮＡＮＤフラッシュメモリ１３Ａからデータを読み出す処理［第２工程］、（Ｃ）読み出したデータをＮＡＮＤフラッシュメモリ１３Ａに書き込む処理［第３工程］の３つの工程に分割することができる。
【００４６】
図４に示したように、ブロック丸ごとを処理単位とすると、１つの例では、（Ａ）の処理の所要時間は数ミリ秒程度、（Ｂ）の処理の所要時間は２０ミリ秒程度、（Ｃ）の処理の所要時間は１００ミリ秒程度である。一方、ホスト装置２から要求されたデータのＮＡＮＤフラッシュメモリ１３Ａからの読み出しの所要時間は数１０マイクロ秒程度である。つまり、（Ａ）＋（Ｂ）＋（Ｃ）の総所要時間はとても長く、１ブロック分の処理を完了させてからＧＣを停止するのは速やかではないといえる。
【００４７】
そこで、本実施形態のストレージ装置１は、実行中の工程の処理を完了させた時点でＧＣを停止する。つまり、（Ａ）を処理中であれば（Ｂ）には進まず、（Ｂ）を処理中であれば（Ｃ）には進まないようにする。
また、（Ａ）〜（Ｃ）をブロック単位ではなく、ページ単位（第１使用単位）で巡回的に行っていくことも考えられ得る。つまり、１ブロック分まとめて（Ｂ）の処理でデータを読み出すのではなく、１ページ分のデータを（Ｂ）の処理で読み出したら（Ｃ）の処理で書き込むということを繰り返すことも考えられ得る。なお、この場合、図４に示したように、たとえばブロック１およびブロック２から読み出した有効なデータを（データ消去後の）当該ブロック１およびブロック２の一方に書き戻すのではなく、当該ブロック１およびブロック２以外の空きブロックに書き戻すことになる。（Ａ）〜（Ｃ）をページ単位にすると、１つの例では、（Ａ）の処理の所要時間は１ミリ秒程度、（Ｂ）の処理の所要時間は数ミリ秒程度、（Ｃ）の処理の所要時間も数ミリ秒程度となる。
【００４８】
そして、この場合、本実施形態のストレージ装置１は、仕掛かり中のページについては（Ｃ）の処理までやり切って、そのページについての処理を完了させた時点でＧＣを停止する。これにより、より迅速にＧＣを停止させることができる。
もちろん、「ストレージ装置１が暇である」と判断したことに起因してＧＣを停止させるタイミングとして、仕掛かり中のブロックについての処理を完了させた時点を採用してもよく、本実施形態のストレージ装置１は、これを排除するものではない。
【００４９】
図５は、本実施形態のストレージ装置１のＧＣに関わる処理手順を示すフローチャートである。なお、ストレージ装置１は、図５に示される動作を、ホスト装置２からコマンドを受信する度に行っても構わないし、ホスト装置から受信したコマンドの処理が完了する度に行っても構わない。つまり、ストレージ装置１が図５に示される動作を行うタイミングは、特に限定されない。
【００５０】
まず、ストレージ装置１は、前述したような判断基準によって、ストレージ装置１が暇かどうかをチェックする（ステップＡ１）。チェックの結果、ストレージ装置１が暇であると判断された場合（ステップＡ２：ＹＥＳ）、ストレージ装置１は、次に、ＧＣを実行中かどうかチェックする（ステップＡ３）。そして、ＧＣ実行中だった場合（ステップＡ３：ＹＥＳ）、ストレージ装置１は、速やかにＧＣを停止（中断または終了）する（ステップＡ４）。速やかにＧＣを停止することについては、前述したいくつかの例の中のいずれを採用しても構わない。
【００５１】
ＧＣ実行中ではなかった場合（ステップＡ３：ＮＯ）またはＧＣ実行中でＧＣ停止が完了したら、ストレージ装置１は、内部状態が変化しているかどうかをチェックする（ステップＡ５）。換言すれば、ストレージ装置１は、内部状態の不揮発化が必要かどうかをチェックする。この内部状態とは、たとえば前述の論物変換テーブルの内容などである。
【００５２】
内部状態が変化していなかった場合（ステップＡ５：ＮＯ）、ストレージ装置１は、この図５の処理を終了する。内部状態が変化していた場合（ステップＡ５：ＹＥＳ）、ストレージ装置１は、変化した内部状態を不揮発化し（ステップＡ６）、図５の処理を終了する。なお、不揮発化とは、ＮＡＮＤフラッシュメモリ１３Ａへの書き込みを意味する。
【００５３】
また、ストレージ装置１は暇ではないと判断された場合（ステップＡ２：ＮＯ）、ストレージ装置１は、次に、ＧＣを停止中かどうかチェックする（ステップＡ７）。ＧＣ停止中だった場合（ステップＡ７：ＹＥＳ）、ストレージ装置１は、ＧＣを再開する（ステップＡ８）。ＧＣ停止中でない場合には（ステップＡ７：ＮＯ）、ストレージ装置１は、そのまま図５の処理を終了する。
【００５４】
以上のような処理手順により、ストレージ装置１は、「暇な時」にＧＣを行わないことを実現できる。「暇な時」にＧＣを行わないことによって、ホスト装置２から見たコマンド処理時間を短くすることや、ストレージ装置１が長期にわたって不安定な状態にあることを避けることや、不必要にストレージ装置１の寿命を縮めることなどをなくすことができる。
【００５５】
（第２実施形態）
次に、第２実施形態について説明する。なお、前述した第１実施形態と同一の構成要素については同一の符号を使用し、重複した説明を省略する。
第１実施形態では、ストレージ装置１が、ストレージ装置１自身が暇であるかどうかを判断して、ストレージ装置１が暇な時にＧＣを実行しないことで、様々な効果を奏することを示した。一方、前述の通り、ホスト装置２からストレージ装置１に対しては、読み書き要求だけでなく、様々な要求や通知を行うことができる。
【００５６】
そこで、本実施形態のコンピュータシステムにおいては、ホスト装置２が暇（低負荷状態［第１状態］）かどうかの状態に応じて、ストレージ装置１が、第１実施形態において説明した前述の図５で示される処理を行うようにする。そのために、ホスト装置２は、ステータス通知部２０１を有するストレージ管理プログラム２００を具備する。ストレージ管理プログラム２００は、ストレージ装置１と連携してＧＣの実行可否を含むストレージ装置１の管理を行うための常駐プログラムであり、ステータス通知部２０１は、ホスト装置２の状態を取得する処理と、ホスト装置２の状態を示す通知をストレージ装置１に送信する処理とを実行する。ホスト装置２が暇な時にストレージ装置１が図５で示される処理を行って、ＧＣを停止すれば、システム全体として処理量が減り、システムの消費電力をより下げることができる。なお、ここでは、ホスト装置２がどのような状況下にある場合に暇であるとするかについては問わない。
【００５７】
図６は、本実施形態のコンピュータシステムにおけるＧＣに関わるホスト装置２とストレージ装置１との連携を示すシーケンスチャートである。
まず、ホスト装置２は、ホスト装置２の状態を示す通知、より詳しくは、ホスト装置２が暇かどうかを示す通知をストレージ装置１に対して送信する（図６：（１））。この通知には、たとえば、ＮＶＭｅ（登録商標）で規定されるAdmin Commandを用いることができる。図７を参照して、ホスト装置２の状態を示す通知への当該Admin Commandの一使用例を説明する。
【００５８】
図７は、Admin Commandのフォーマットを示している。
ＮＶＭｅ（登録商標）では、１コマンドが６４バイトに定められている。また、符号ｂ１で示される位置に格納されるOpecodeについて、”C0h”から”FFh”までがvendor specificであると定められている。さらに、（６４バイトのコマンド以外の）データ転送を含まない場合はOpecodeのビット[1:0]を”00b”にすることが定められている。そこで、ホスト装置２の状態を示す通知に用いるコマンドのOpecodeとして、たとえば”C0h(11000000b)”を割り当てる（図７：ｂ１）。そして、Opecodeが”C0h”の場合、たとえば符号ｂ２で示されるCDW(Command DWord)2が、”0h”ならば「ホスト装置２は暇である」、”1h”ならば「ホスト装置２は暇ではない」という取り決めをする。これにより、ホスト装置２からストレージ装置１へホスト装置２の状態を示す通知を送信することができる。
【００５９】
図６に戻って説明を続ける。
ストレージ装置１は、ホスト装置２から送信される、ホスト装置２の状態を示す通知を受信すると、その通知の内容に基づき、実行中のＧＣを停止したり、停止中のＧＣを再開したりなどのＧＣの制御を行う（図６：（２））。
【００６０】
図８は、本実施形態のコンピュータシステムにおけるホスト装置２のＧＣに関わる処理手順を示すフローチャートである。なお、ここでは、ホスト装置２が、ホスト装置２の状態に変化が生じた場合にストレージ装置１への通知を行うことを想定しているが、これに限らず、たとえば一定間隔ごとにストレージ装置１への通知を行ってもよい。
【００６１】
ホスト装置２は、まず、ホスト装置２の負荷状態をチェックする（ステップＢ１）。次に、ホスト装置２は、低負荷状態から高負荷状態または高負荷状態から低負荷状態の変化が生じているかどうかを調べる（ステップＢ２）。
ホスト装置２の状態に変化が生じていた場合（ステップＢ２：ＹＥＳ）、ホスト装置２は、ホスト装置２の状態を示す通知をストレージ装置１へ送信し（ステップＢ３）、図８の処理を終了する。ホスト装置２の状態に変化が生じていない場合は（ステップＢ２：ＮＯ）、ホスト装置２は、そのまま図８の処理を終了する。
【００６２】
図９は、本実施形態のコンピュータシステムにおけるホスト装置２のＧＣに関わる処理手順を示すフローチャートである。
まず、ストレージ装置１は、ホスト装置２から送信される、ホスト装置２の状態を示す通知を受信する（ステップＣ１）。ストレージ装置１は、受領した通知の内容をチェックする（ステップＣ２）。
【００６３】
受領した通知の内容が、ホスト装置が暇であることを示すものであった場合（ステップＣ３：ＹＥＳ）、ストレージ装置１は、第１実施形態において説明した図５で示される処理を行う（ステップＣ４）。受領した通知の内容が、ホスト装置２が暇ではないことを示すものであった場合（ステップＣ３：ＮＯ）、ストレージ装置１は、図５で示される処理は行わない。
【００６４】
これにより、本実施形態のコンピュータシステムにおいては、ストレージ装置１だけでなく、ホスト装置２の状態も考慮した、システム全体の状態の最適化が可能となる。
（第３実施形態）
次に、第３実施形態について説明する。なお、前述した第１および第２実施形態と同一の構成要素については同一の符号を使用し、重複した説明を省略する。
【００６５】
第２実施形態では、ホスト装置２が暇な時に、ストレージ装置１が第１実施形態において説明した図５で示される処理を行うことを示した。しかし、ホスト装置２が暇ではない時でも、ストレージ装置１が暇になることはあり得る。たとえば、ホスト装置２が大量の計算処理をしている場合、ストレージ装置１へのアクセスは少なくても、ホスト装置２は暇ではない。
【００６６】
そこで、本実施形態のコンピュータシステムにおいては、ストレージ装置１は、ホスト装置２が暇ではないことを示す通知を受領した場合に、図５で示される処理を行うようにする。
図１０は、本実施形態のコンピュータシステムにおけるストレージ装置のＧＣに関わる処理手順を示すフローチャートである。
【００６７】
まず、ストレージ装置１は、ホスト装置２から送信される、ホスト装置２の状態を示す通知を受信する（ステップＤ１）。ストレージ装置１は、受領した通知の内容をチェックする（ステップＤ２）。
受領した通知の内容が、ホスト装置が暇ではないことを示すものであった場合（ステップＤ３：ＹＥＳ）、ストレージ装置１は、第１実施形態において説明した図５で示される処理を行う（ステップＤ４）。受領した通知の内容が、ホスト装置２が暇であることを示すものであった場合（ステップＤ３：ＮＯ）、ストレージ装置１は、図５で示される処理は行わない。
【００６８】
これにより、本実施形態のコンピュータシステムにおいては、ストレージ装置１は、ホスト装置２の状態を把握した上で、自身の内部状態にしたがってＧＣの実行判断を行うことができ、より柔軟なシステムが実現できる。
（第４実施形態）
次に、第３実施形態について説明する。なお、前述した第１乃至第３実施形態と同一の構成要素については同一の符号を使用し、重複した説明を省略する。
【００６９】
第２実施形態と第３実施形態とでは、ホスト装置２が暇かどうかによって、ストレージ装置１内部でのＧＣを停止する処理（図５）を実行するかどうかを判断する方法をそれぞれ示した。ところで、ホスト装置２が暇な時間が多いかどうかは、システムの性質によって異なる。たとえば、ＰＣは、おおよそ一人の人間が使うものであり、システムは暇な状態になることが多い。一方、サーバや科学技術計算向けシステムは、多数のユーザに同時に使用され、常に忙しく稼働していることが多い。また、ホスト装置２が暇な時間が多いかどうかは、ホスト装置２から送信される、前述のホスト装置２が暇かどうかを示す通知の履歴を取れば判断することができる。より詳しくは、一定期間においてホスト装置２が暇な時間の占める割合を算出し、当該算出した値があらかじめ定められる基準値を超えるかどうかで判断することができる。
【００７０】
そこで、本実施形態のコンピュータシステムにおいては、ストレージ装置１は、ホスト装置２が暇な時間が多い場合に図９の処理を、ホスト装置２が暇な時間が少ない場合に図１０の処理を行うように、動的に切り替えるようにする。
図１１は、本実施形態のコンピュータシステムにおけるストレージ装置１のＧＣに関わる処理手順を示すフローチャートである。
【００７１】
ストレージ装置１は、ホスト装置２から受信した、ホスト装置２の状態を示す通知の履歴に基づき、ホスト装置２が暇な時間が多いかどうかを判断する（ステップＥ１）。ホスト装置２が暇な時間が多いと判断された場合（ステップＥ２：ＹＥＳ）、ストレージ装置１は、ホスト装置２が暇な時に図５の処理を行うように、つまり、図９の処理が適用されるように設定する（ステップＥ３）。一方、ホスト装置２が暇な時間が少ないと判断された場合（ステップＥ２：ＮＯ）、ストレージ装置１は、ホスト装置２が暇ではない時に図５の処理を行うように、つまり、図１０の処理が適用されるように設定する（ステップＥ４）。
【００７２】
なお、図１１に示す手順とは逆に、ホスト装置２が暇な時間が多い場合に図１０の処理が適用され、ホスト装置２が暇な時間が少ない場合に図９の処理が適用されるように設定することもできる。
どちらにするかは、空きブロックが十分に存在するかや、ストレージ装置１が寿命に近いかなどのストレージ装置１の状態に関する判断基準で選択することが考えられる。
【００７３】
以上のように、第１乃至第４実施形態のコンピュータシステムによれば、ストレージ装置１が暇な時にＧＣを行わないことで、ホスト装置２から見たコマンド処理時間を短くすることや、ストレージ装置１が長期にわたって不安定な状態にあることを避けることや、不必要にストレージ装置１の寿命を縮めることなどをなくすことができる。すなわち、適切でない状況下で実行されるＧＣを適応的に停止することができる。
【００７４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７５】
１…ストレージ装置、２…ホスト装置、３…信号線、１１…コントローラ、１２…揮発性メモリ、１２Ａ…バッファメモリ、１３…不揮発性メモリ、１３Ａ…ＮＡＮＤフラッシュメモリ、２１…プロセッサ、２２…主メモリ、２３…入力装置、２４…表示装置、２５…ストレージインタフェースコントローラ、１１１…ホストインターフェースコントローラ、１１２…ホスト要求処理部、１１３…データ制御部、１１４…ＮＡＮＤインターフェースコントローラ、１１５…ＤＭＡＣ、１１６…誤り訂正処理部、１３１…ＮＡＮＤフラッシュメモリチップ、２００…ストレージ管理プログラム、２０１…ステータス通知部、１１２１…ＧＣ制御部、１１３１…ＧＣ処理部。
【図１】
2019174941.tif 000003
【図２】
2019174941.tif 000004
【図３】
2019174941.tif 000005
【図４】
2019174941.tif 000006
【図５】
2019174941.tif 000007
【図６】
2019174941.tif 000008
【図７】
2019174941.tif 000009
【図８】
2019174941.tif 000010
【図９】
2019174941.tif 000011
【図１０】
2019174941.tif 000012
【図１１】
2019174941.tif 000013