(57)【要約】【課題】不揮発メモリストレージの書き込み時間を短縮する不揮発メモリストレージ制御装置の実現。【解決手段】不揮発メモリストレージ30A-30Nのブロック31ごとの書き換え回数を保持する書き換え回数保持部25と、不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第１種データであるか第２種データであるかを判定し、第１種データを書き込むブロックとして書き換え回数の少ないブロックを、第２種データを書き込むブロックとして書き換え回数の多いブロックを選択するプログラムブロック選択部22と、を有する不揮発メモリストレージ制御装置。【選択図】図２
2016115081.tif 000002
【特許請求の範囲】
【請求項１】
不揮発メモリストレージのブロックごとの書き換え回数を保持する書き換え回数保持部（２５）と、
前記不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第１種データであるか第２種データであるかを判定し、前記第１種データを書き込むブロックとして書き換え回数の少ないブロックを、前記第２種データを書き込むブロックとして書き換え回数の多いブロックを選択するプログラムブロック選択部（２２）と、を有することを特徴とする不揮発メモリストレージ制御装置。
【請求項２】
外部から入力する前記書き込みデータは、前記第１種データまたは前記第２種データであるかを示す情報を有する請求項１に記載の不揮発メモリストレージ制御装置。
【請求項３】
前記プログラムブロック選択部は、
前記不揮発メモリストレージのブロックを、第１領域と第２領域とに分類し、前記第１種データを前記第１領域のブロックに書き込み、前記第２種データを前記第２領域のブロックに書き込むように指示し、
前記第１領域のうち書き換え回数の多いブロックを前記第２領域に分類変更し、または前記第２領域のうち書き換え回数の少ないブロックを前記第１領域に分類変更する領域変更を行う、請求項１または２に記載の不揮発メモリストレージ制御装置。
【請求項４】
前記第１種データおよび前記第２種データの読み出し頻度および書き換え頻度を監視し、書き換え頻度が大きい前記第１種データを第２種データに、読み出し頻度が大きい前記第２種データを第１種データに変更する読み出し／プログラム判定部を、さらに有する請求項１に記載の不揮発メモリストレージ制御装置。
【請求項５】
前記プログラムブロック選択部は、
前記不揮発メモリストレージのブロックのうち、書き換え回数がコールド回数を超えたブロックを、コールドデータ領域に分類し、
前記第１種データおよび前記第２種データの読み出し頻度および書き換え頻度を監視し、前記読み出し頻度および前記書き換え頻度の両方が限界頻度より小さい前記第１種データおよび前記第２種データをコールドデータに分類し、
コールドデータに分類したデータを前記コールド領域のブロックに書き込むように指示する請求項１から４のいずれか１項に記載の不揮発メモリストレージ制御装置。
【請求項６】
前記プログラムブロック選択部は、
前記コールド領域のブロックに書き込まれた前記コールドデータを、一定時間ごとに読み出して書き直すように指示する請求項５に記載の不揮発メモリストレージ制御装置。
【請求項７】
不揮発メモリストレージのブロックごとの書き換え回数を監視し、
前記不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第１種データであるか第２種データであるかを判定し、
書き込みデータが前記第１種データである時に、前記第１種データを書き込むブロックとして書き換え回数の少ないブロックを選択し、前記第２種データを書き込むブロックとして書き換え回数の多いブロックを選択する、ことを特徴とする不揮発メモリストレージの書き込み制御方法。
【請求項８】
コンピュータに、
不揮発メモリストレージのブロックごとの書き換え回数を監視し、
前記不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第１種データであるか第２種データであるかを判定し、
書き込みデータが前記第１種データである時に、前記第１種データを書き込むブロックとして書き換え回数の少ないブロックを選択し、前記第２種データを書き込むブロックとして書き換え回数の多いブロックを選択する、ように動作させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラムに関する。
【背景技術】
【０００２】
複数のＮＡＮＤフラッシュデバイスを搭載したSolid State Drive (SSD)等の不揮発メモリストレージが使用されている。ＮＡＮＤフラッシュデバイスは、書き換えを繰り返すと記憶性能が劣化し、一定回数を超えると使用不可能になる。そのため、複数のＮＡＮＤフラッシュデバイスの書き換え回数を均一にするウェアレベリングという手法を採用し、全体が均一に劣化するようにしていた。ウェアレベリング手法によれば、データを書き込む際、最も書き換え回数の少ないブロックを選択してデータを書き込む（ダイナミックウェアレベリング）制御が行われる。
【０００３】
ＮＡＮＤフラッシュデバイスの書き込み（プログラム:Program)時間は、書き換え回数が増えるほど短く（高速に）なるという特性がある。ウェアレベリング手法によれば、常に書き換え回数が少ないブロックが選択されるため、プログラム時間が最も長いブロックに書き込みが行われることになる。言い換えれば、書き込みは、他のブロックを選択すればより短いプログラム時間で完了するにもかかわらずプログラム時間が最も長いブロックを選択して行うことになる。
【０００４】
１つの視点によれば、不揮発メモリストレージに書き込むデータは、書き込んだ後あまり書き換えられずに頻繁に読み出される第１種のデータと、書き込んだ後あまり読み出されずに頻繁に書き換えられる第２種のデータと、に分類される。ここでは、第１種のデータをread intensive data（リードインテンシィブデータ）と称し、第２種のデータをwrite intensive data（ライトインテンシィブデータ）と称する。read intensiveデータは、例えば画像データ、動画データ、音楽データなどのコンテンツデータを含む。write intensiveデータは、例えば、log（ログ）データ、テンポラリィデータなどを含む。いずれのデータとすべきか明確でないデータも存在するが、ここではそのようなデータはread intensiveデータとして取り扱うものとして説明する。
【０００５】
Write intensiveデータは、頻繁に書き換えられるデータであり、書き込み時間が短ければ、不揮発メモリストレージの性能が実質的に向上する。しかし、ウェアレベリング手法によれば、書き込みにおいては、read intensiveデータとWrite intensiveデータの区別なく、Program時間が長いブロックが選択されるため、ウェアレベリングを行わない場合に比べ性能が悪くなっていた。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−２２２８８９号公報
【特許文献２】特表２０１１−５１３８０５号公報
【特許文献３】特表２０１２−５０５４４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
不揮発メモリストレージの性能向上が求められている。
【課題を解決するための手段】
【０００８】
第１の態様の不揮発メモリストレージ制御装置は、不揮発メモリストレージのブロックごとの書き換え回数を保持する書き換え回数保持部と、プログラムブロック選択部と、を有する。プログラムブロック選択部は、不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第１種データであるか第２種データであるかを判定し、第１種データを書き込むブロックとして書き換え回数の少ないブロックを、第２種データを書き込むブロックとして書き換え回数の多いブロックを選択する。
【発明の効果】
【０００９】
第１の態様によれば、不揮発メモリストレージの書き込み時間を短縮する不揮発メモリストレージ制御装置が実現される。
【図面の簡単な説明】
【００１０】
【図１】図１は、ＮＡＮＤフラッシュデバイスにおける書き換え回数と平均program（プログラム）時間［μｓ］の変化例を示す図である。
【図２】図２は、第１実施形態の情報処理装置の全体構成を示す図である。
【図３】図３は、第１実施形態において、ＮＡＮＤコントローラのプログラムブロック選択部が、プログラム動作時に書き込むブロックを選択する処理を説明する図である。
【図４】図４は、第１実施形態においてホストが不揮発性メモリストレージに対してプログラムを行う（データを書き込む）時に行う処理を示すフローチャートである。
【図５】図５は、データ転送リクエストのデータ構造例を示す図である。
【図６】図６は、第１実施形態においてホストが不揮発性メモリストレージに対してプログラムを行う（データを書き込む）時の処理を示すフローチャートである。
【図７】図７は、プログラムブロック選択部がデータを書き込む物理アドレス、すなわちブロックを決定する処理を示すフローチャートである。
【図８】図８は、第１実施形態においてホストが不揮発性メモリストレージからプログラムされている（書き込まれている）データを読み出す時の処理を示すフローチャートである。
【図９】図９は、書き換え回数が前述の一定回数（コールド回数）を超えたブロックを、コールドデータ領域に分類する処理を示すフローチャートである。
【図１０】図１０は、第２実施形態におけるプログラムブロック選択部の処理を説明する図である。
【図１１】図１１は、第２実施形態におけるプログラムブロック選択部の処理を示すフローチャートである。
【図１２】図１２は、再分類処理を示すフローチャートである。
【図１３】図１３は、第３実施形態の情報処理装置の全体構成を示す図である。
【発明を実施するための形態】
【００１１】
実施形態の不揮発メモリストレージを説明する前に、一般的な不揮発メモリストレージについて説明する。
【００１２】
不揮発メモリストレージは、ホストコンピュータ（以下、ホストと称する）に不揮発メモリストレージ制御装置（コントローラ）を介して接続され、外部記憶装置として利用されるのが一般的である。現在、不揮発メモリストレージは、ＮＡＮＤフラッシュデバイスで実現するのが一般的であり、以下、ＮＡＮＤフラッシュデバイスを使用する不揮発メモリストレージを例として説明を行うが、これに限定されるものではない。
【００１３】
ＮＡＮＤフラッシュデバイスで書き換えを行うには、書き込まれている（プログラムされている）データを消去した後、新たなデータを書き込む。通常、消去によりデータ“１”が書き込まれた状態にし、“１”を書き込む時にはその状態を維持し、“０”を書き込む時には高電圧を印加する。ＮＡＮＤフラッシュデバイスは、消去の際の逆電圧の印加および“０”を書き込む時の高電圧の印加により劣化し、読み出し動作では印加する電圧が低いためほとんど劣化しない。
【００１４】
ＮＡＮＤフラッシュデバイスでの書き換えは、ブロック単位で行われる。言い換えれば、ブロックの一部にプログラムされているデータを書き換える場合でも、ブロック全体を消去して、書き換えるデータとそれまでプログラムされている書き換えないデータを合わせて書き込む。
【００１５】
ＮＡＮＤフラッシュデバイスにデータを書き込むのに要すwrite time（書き込み時間）は、ＮＡＮＤフラッシュデバイスからデータを読み出すのに要するread time（読み出し時間）に比べて大幅に長い。これは、データを書き込む場合、上記のように消去動作と書き込み動作を行う上に、書き込み動作では書き込み電圧印加とデータが書き込まれたかを確認するベリファイ動作を繰り返し行うためである。そのため、書き込み時間を短縮することが求められている。
【００１６】
コントローラは、ホストの論理アドレスと不揮発メモリストレージの物理アドレスを対応付ける論理−物理アドレス変換テーブルを有し、ホストからの論理アドレスによるアクセスを不揮発メモリストレージへの物理アドレスによるアクセスに変換する。一般に、ホストからの論理アドレスはページ単位であり、不揮発メモリストレージのブロックと一致するとは限らない。そのため、ホストから書き換えが指示された論理アドレスに対応する物理アドレスを含むブロックに他の書き換えないデータが記憶されている場合には、別の消去済みのブロックに、書き換えデータと書き換えないデータを合わせて書き込む。コントローラは、ホストからの書き込みおよび書き換えデータを書き込むブロックを選択する。
【００１７】
ＮＡＮＤフラッシュデバイスは、書き換えを繰り返すと、記憶しているデータを保持する時間が短くなる、すなわち記憶性能が劣化し、不揮発性ストレージとして機能しなくなることが知られている。そのため、ＮＡＮＤフラッシュデバイスを使用する不揮発メモリストレージは、書き換え回数を均一にするウェアレベリング手法を採用している。一方、ＮＡＮＤフラッシュデバイスのプログラム時間は、書き換え回数が増えるほど短く（高速に）なるという特性がある。
【００１８】
図１は、ＮＡＮＤフラッシュデバイスにおける書き換え回数と平均program（プログラム）時間［μｓ］の変化例を示す図である。図１では５つのデバイスの例を示すが、ＮＡＮＤフラッシュデバイスはほぼ同様の特性を有する。
【００１９】
ＮＡＮＤフラッシュデバイスの上記の特性のため、ウェアレベリング手法によれば、常に書き換え回数が少ないブロックが選択され、プログラム時間が最も長いブロックに書き込みが行われることになる。言い換えれば、ウェアレベリング手法による書き込みは、他のブロックを選択すればより短いプログラム時間で完了するにもかかわらずプログラム時間が最も長いブロックを選択して行う。
【００２０】
これまで、不揮発メモリストレージに書き込むデータは、同種のデータとして扱われ、特に分類されることはなかった。しかし、不揮発メモリストレージに書き込むデータは、書き込んだ後あまり書き換えられずに頻繁に読み出される第１種のデータと、書き込んだ後あまり読み出されずに頻繁に書き換えられる第２種のデータと、に分類される。ここでは、第１種のデータをread intensive data（リードインテンシィブデータ）と称し、第２種のデータをwrite intensive data（ライトインテンシィブデータ）と称する。read intensiveデータは、例えば画像データ、動画データ、音楽データなどのコンテンツデータである。write intensiveデータは、例えば、log（ログ）データ、テンポラリィデータなどを含む。
【００２１】
Write intensiveデータは、頻繁に書き換えられるデータであり、書き込み時間が短ければ、不揮発メモリストレージの性能が実質的に向上する。しかし、ウェアレベリング手法によれば、書き込みにおいては、read intensiveデータとWrite intensiveデータの区別なく、Program（プログラム）時間が長いブロックが選択されるため、ウェアレベリングを行わない場合に比べ性能が悪くなっていた。
【００２２】
以下に説明する実施形態では、read intensiveデータとwrite intensiveデータに応じて書き込むブロックを選択することにより、不揮発メモリストレージの書き込み時間を短縮し、性能を実質的に向上させる。read intensiveデータとwrite intensiveデータのいずれのデータともいえないデータも存在する。実施形態では、そのようなデータはread intensiveデータとして取り扱う。
【００２３】
図２は、第１実施形態の情報処理装置の全体構成を示す図である。
第１実施形態の情報処理装置は、ホストコンピュータ（以下、ホストと略す）１０と、不揮発メモリストレージ制御装置（ＮＡＮＤコントローラまたは単にコントローラと称する）２０と、不揮発メモリストレージと、を有する。図示の例では、不揮発メモリストレージは、複数のＮＡＮＤフラッシュデバイス３０Ａ−３０Ｎを含む。ＮＡＮＤフラッシュデバイス３０Ａ−３０Ｎは、ＮＡＮＤコントローラ２０を介してホスト１０に接続される。ホスト１０は、電源をオフした場合にも記憶しておくデータを不揮発メモリストレージに記憶する。
【００２４】
ホスト１０は、一般的なコンピュータと同様の構成を有し、プログラムにより各種アプリケーション１１が動作する。ホスト１０は、不揮発メモリストレージにアクセスするためにＮＡＮＤコントローラ２０との間で信号を入出力するドライバ１２を有する。ドライバ１２は、不揮発メモリストレージにデータを書き込むまたはデータを書き換える（すなわちプログラムする）時には、ＮＡＮＤコントローラ２０に、データプログラムリクエストを出力する。データプログラムリクエストは、Program（プログラム）要求、offset（オフセットアドレス）、Size（データサイズ）およびRead/Write intensive（リード／ライト・インテンシィブ）信号を含む。ドライバ１２は、不揮発メモリストレージからデータを読み出す時には、ＮＡＮＤコントローラ２０に、データ読み出しリクエストを出力する。データ読み出しリクエストは、Read（読み取り）要求、offset（オフセットアドレス）およびSize（データサイズ）を含む。プログラム時には、ＮＡＮＤコントローラ２０は、ドライバ１２からデータプログラムリクエストおよび書き込みするデータＤａｔａを受ける。読み出し時には、ＮＡＮＤコントローラ２０は、ドライバ１２からデータ読み出しリクエストを受け、それに応じて不揮発メモリストレージから読み出した読み出しデータＤａｔａをドライバに出力する。
【００２５】
ＮＡＮＤコントローラ２０は、バッファ２１と、Program（プログラム）ブロック選択部２２と、Read（読み出し）ブロック選択部２３と、論理−物理アドレス変換テーブル２４と、書き換え回数保持部２５と、セレクタ２６と、を有する。ＮＡＮＤコントローラ２０は、さらにＮ個のＮＡＮＤインターフェース(NAND I/F)２７Ａ−２７Ｎを有する。不揮発メモリストレージに含まれるＮ個のＮＡＮＤフラッシュデバイス３０Ａ−３０Ｎは、それぞれＮ個のＮＡＮＤインターフェース２７Ａ−２７Ｎに接続される。なお、１個のＮＡＮＤインターフェースに複数個のＮＡＮＤフラッシュデバイスが接続される場合もあり得る。各ＮＡＮＤフラッシュデバイスは、消去単位である複数のblock（ブロック）３１を有し、書き換えはブロック単位で行われる。Ｎ個のＮＡＮＤフラッシュデバイス３０Ａ−３０Ｎに含まれるすべてのブロックは、物理アドレス空間に割り当てられる。
【００２６】
バッファ２１は、ホスト１０と不揮発メモリストレージとの間で転送される書き込み（プログラム）データおよび読み出しデータを一時的に保持する。論理−物理アドレス変換テーブル２４は、ホスト１０の論理アドレスと不揮発メモリストレージの物理アドレス空間の対応関係を記憶する。書き換え回数保持部２５は、不揮発メモリストレージのブロック３１ごとの書き換え回数を記憶する。前述のように、ホスト１０が同じ論理アドレスのデータを書き換えるプログラム要求を出した場合、そのデータが記憶されている物理アドレスのデータが書き換えられるとは限らず、異なる物理アドレス、すなわち異なるブロックに書き換えデータが記憶される。そのため、論理アドレスと物理アドレス空間の関係は、データのプログラムごとに変化する。
【００２７】
プログラムブロック選択部２２は、ホスト１０からデータプログラムリクエストを受けると、論理−物理アドレス変換テーブル２４に記憶された変換テーブルおよび書き換え回数保持部２５に記憶されたブロックごとの書き換え回数に基づいて、書き込むブロックを選択する。プログラムブロック選択部２２は、プログラムするデータの論理アドレスと選択したブロックの物理アドレスの関係に基づいて、論理−物理アドレス変換テーブル２４を書き換える。さらに、プログラムブロック選択部２２は、セレクタ２６に選択したブロックの物理アドレスを出力する。
【００２８】
読み出しブロック選択部２３は、ホスト１０からデータ読み出しリクエストを受けると、論理−物理アドレス変換テーブル２４に記憶された変換テーブルに基づいて、データを読み出すブロックを選択し、セレクタ２６に選択したブロックの物理アドレスを出力する。
【００２９】
セレクタ２６は、プログラムブロック選択部２２から出力された物理アドレスおよび読み出しブロック選択部２３から出力された物理アドレスに応じて、ＮＡＮＤインターフェースを選択する。これにより、バッファ２１およびプログラムブロック選択部２２または読み出しブロック選択部２３は、アクセスするブロックのＮＡＮＤフラッシュデバイスに接続され、データのプログラムおよび読み出しが行える状態になる。
【００３０】
以上のＮＡＮＤコントローラ２０の構成は、ウェアレベリング手法を採用する一般的な不揮発メモリストレージ用のコントローラと同じである。第１実施形態のＮＡＮＤコントローラ２０は、プログラム動作時に書き込むブロックを選択する処理が異なる。
【００３１】
図３は、第１実施形態において、ＮＡＮＤコントローラ２０のプログラムブロック選択部２２が、プログラム動作時に書き込むブロックを選択する処理を説明する図である。
ＮＡＮＤフラッシュデバイス３０Ａ−３０Ｎを含む不揮発メモリストレージは、物理アドレス空間４０を有する。物理アドレス空間４０は、ブロック単位で書き換え回数に応じてソートされて（並び替えられて）おり、図３では、書き換え回数の少ない方が上側で、多い方が下側である。書き換え回数が一定回数（コールド回数）以上のブロックは故障する少し前の状態であり、そのブロックをCold Data（コールドデータ）領域４２に分類する。物理アドレス空間４０のコールドデータ領域４２以外の領域を通常領域４１とする。上記のように、通常領域４１は、書き換え回数に応じてソートされている。なお、第１実施形態では、コールドデータ領域４２を分類し、物理アドレス空間４０からコールドデータ領域４２を除いた領域を通常領域とするが、これに限定されず、コールドデータ領域４２を分類せず、物理アドレス空間４０のすべてを通常領域としてもよい。
【００３２】
前述のように、ＮＡＮＤフラッシュデバイスは、書き換え回数の増加に伴いプログラム速度が速くなる（プログラム時間が短縮される）。したがって、コールドデータ領域４２は、プログラム速度が最速である。しかし、ＮＡＮＤフラッシュデバイスは、書き換え回数の増加に伴い記憶性能が劣化し、限界回数を超えると使用不可能になる。そのため、コールドデータ領域４２は、プログラムを繰り返すとすぐに限界回数を超えて使用不能に至る領域であり、通常の記憶動作には適さない領域である。第１実施形態では、コールドデータ領域４２にはプログラムも読み出しの頻度も少ないコールドデータを格納し、一定期間ごと（例えば、１週間毎、１か月ごとなど）にリフレッシュし、確実にデータが保持されるようにする。
【００３３】
通常領域４１内のブロックは、書き換えを繰り返すと、書き換え回数が上記の一定回数を超え、コールドデータ領域４２に分類される。コールドデータ領域４２の分類処理は随時行われる。
【００３４】
第１実施形態では、ホスト１０がコントローラ２０に出力するデータプログラムリクエストは、プログラムするデータがread intensiveデータであるかwrite intensiveデータであるかを示す情報を有する。プログラムブロック選択部２２は、Write intensiveデータについては、通常領域４１内の書き換え回数が多いブロックから順に選択していく。また、プログラムブロック選択部２２は、Read intensiveデータについては、書き換え回数が少ないブロックから順に選択していく。Write intensiveデータとRead intensiveデータは、同一ブロックに混在しないようにする。
【００３５】
なお、ＮＡＮＤフラッシュデバイスの使用回数が少ない場合、コールドデータ領域４２に分類されるブロックは存在しない。コールドデータ領域４２に分類されるブロックがゼロであってもよい。また、コールドデータに分類するデータ量は、コールドデータ領域４２の容量以上である必要はない。コールドデータ領域４２の容量以上のコールドデータが分類された時には、Write intensiveデータより高い優先度で書き換え回数が多いブロックから順にコールドデータ用に選択していく。
【００３６】
書き換え回数の多いブロックは、書き換え回数の少ないブロックに比べて、相対的にプログラム速度が速い。第１実施形態では、書き換え頻度の高いWrite intensiveデータを、書き換え回数の比較的多いプログラム速度の速いブロックを選択して書き込むため、プログラム時間を短縮し、不揮発性メモリストレージの性能を向上させることができる。
【００３７】
ＮＡＮＤフラッシュデバイスは、書き換え回数の少ないブロックは、書き換え回数の多いブロックに比べて、記憶特性が良好で、読み出し時のBit（ビット）エラー率およびRead（読み出し）可能回数が多い。したがって、読み出し頻度の高いRead intensiveデータをプログラムするのに適している。これに対して、書き換え回数の多いブロックは、相対的にビットエラー率が高く、読み出し可能回数が少なく、読み出しには適していない。第１実施形態では、読み出し頻度の低いWrite intensiveデータを書き換え回数の多いブロックにプログラムするため、悪影響を低減できる。
【００３８】
なお、コールド領域は、ビットエラー率がより高くなり、エラー訂正ビットを付加するなどしてエラー訂正を行うことが望ましい。エラー訂正ビットを付加することにより、Read（読み出し）性能が低下するが、第１実施形態では、コールドデータ領域は、読み出し頻度も書き換え頻度も少ないコールドデータのプログラムに使用するため、悪影響を低減できる。さらに、コールドデータ領域は、読み出し可能回数がより少なく、読み出しを繰り返すとデータが破壊されやすいが、コールドデータ領域に記憶されるデータはコールドデータであり、もともと読み出しおよびプログラムの頻度が少なく、問題が発生してもペナルティが小さい。その上、書き換え回数が一定以上のブロックではデータ保持可能な時間が短くなるが、定期的にリフレッシュすることによりデータ保持することができるため、セルの寿命を延ばすことができる。
【００３９】
図４は、第１実施形態においてホスト１０が不揮発性メモリストレージに対してプログラムを行う（データを書き込む）時に行う処理を示すフローチャートである。
ステップＳ２２で、ホスト１０がデータ書き込み処理を開始する。
【００４０】
ステップＳ１２で、ホスト１０が、書き込むデータがWrite Intensiveデータであるか、Read Intensiveデータであるか決定し、Read IntensiveデータであればステップＳ１３に進み、Write IntensiveデータであればステップＳ１４に進む。
【００４１】
ステップＳ１３で、Read Intensiveデータであることを示す付加情報として“１”を付与する。
ステップＳ１４で、Write Intensiveデータデータであることを示す付加情報として“０”を付与する。
ステップＳ１５で、ホスト１０は、コントローラ２０にデータ転送リクエストを発行する。
【００４２】
図５は、データ転送リクエストのデータ構造例を示す図である。
データ転送リクエストは、読み出しであるか書き込みであるかを示すread_writeフラグと、アドレスオフセットを示すoff-setと、データサイズを示すsizeと、read_write_intensiveと、を有する。read_write_intensiveは、書き込みの場合に有効で、データがWrite Intensiveデータである時に“０”で、Read Intensiveデータである時に“１”である。データ転送リクエストは、read_writeフラグが書き込みを示す場合に前述のデータプログラムリクエストとなり、read_writeフラグが読み出しを示す場合に前述のデータ読み出しリクエストとなる。また、図５では、read_writeフラグおよびread_write_intensiveは、それぞれ1byte（１バイト）で表しているが、両方を１バイトにまとめてもよい。
【００４３】
図６は、第１実施形態においてホスト１０が不揮発性メモリストレージに対してプログラムを行う（データを書き込む）時の処理を示すフローチャートである。
ステップＳ２１で、ホスト１０が、書き込むデータ(Data)、論理アドレス(offset, size)、付加情報(read_write_intensive)と一緒にプログラム要求をコントローラ２０に出力する。言い換えれば、プログラム要求は、書き込むデータ(Data)と、図５のread_writeフラグがプログラムを示すデータ転送リクエストと、を有する。
【００４４】
ステップＳ２２で、コントローラ２０のプログラムブロック選択部２２は、書き換え回数保持部２５より書き換え回数情報を取り出し、データを書き込むブロック、すなわち物理アドレスを決定する。この際、プログラムブロック選択部２２は、論理−物理アドレス変換テーブル２４を参照して、未プログラムのブロック（消去済み）から、read intensiveデータは書き換え回数の少ないブロック、write intensiveデータは書き換え回数の多いブロックを選択する。プログラムブロック選択部２２は、さらに決定した物理アドレスを論理−物理アドレス変換テーブル２４に格納する。言い換えれば、プログラムブロック選択部２２は、論理−物理アドレス変換テーブル２４を、決定した物理アドレスで更新する。決定した物理アドレスに書き込みデータがプログラムされるので、プログラムブロック選択部２２は、さらに書き換え回数保持部２５の書き換え回数情報を更新する。
【００４５】
ステップＳ２３で、セレクタ２６は、決定した物理アドレスからプログラムするブロック３１を有するＮＡＮＤフラッシュデバイスを決定し、それに接続されるＮＡＮＤインターフェースを選択する。これにより、バッファ２１から、選択したＮＡＮＤインターフェースを介して、データを書き込むブロックを含むＮＡＮＤフラッシュデバイスに、書き込みデータを転送できる状態になる。
【００４６】
ステップＳ２４で、ＮＡＮＤインターフェースは、ＮＡＮＤフラッシュデバイスに書き込みデータを転送する。ＮＡＮＤフラッシュデバイスは、転送された書き込みデータを、指定されたブロック（複数の場合もあり得る）にプログラムする。
【００４７】
図７は、プログラムブロック選択部２２がデータを書き込む物理アドレス、すなわちブロックを決定する処理を示すフローチャートである。図７のフローチャートは、上記のステップＳ２２における処理をより詳細に示す。
【００４８】
ステップＳ３１で、プログラムブロック選択部２２は、ホスト１０から、論理アドレス、付加情報(read_write_intensive)を受信する。
ステップＳ３２で、プログラムブロック選択部２２は、付加情報がwrite intensiveを示すデータであるか判定し、write intensiveデータであればステップＳ３３に進み、write intensiveデータでなければステップＳ３４に進む。
【００４９】
ステップＳ３３で、プログラムブロック選択部２２は、書き換え回数保持部２５より書き換え回数情報を取り出し、論理−物理アドレス変換テーブル２４の未プログラムのブロックから、書き換え回数の多いブロックの物理アドレスを書き込み先に決定する。
【００５０】
ステップＳ３４で、プログラムブロック選択部２２は、書き換え回数保持部２５より書き換え回数情報を取り出し、論理−物理アドレス変換テーブル２４の未プログラムのブロックから、書き換え回数の少ないブロックの物理アドレスを書き込み先に決定する。
【００５１】
ステップＳ３５で、プログラムブロック選択部２２は、決定した物理アドレスを論理−物理アドレス変換テーブル２４に格納し、書き換え回数保持部２５の書き換え回数情報を更新する。
【００５２】
なお、書き換える前にデータを記憶していた物理アドレス、すなわち書き換え元の物理アドレスのブロックについては、消去動作を行うようにＮＡＮＤフラッシュデバイスに支持する。これにより、そのブロックは、消去済みの未プログラムブロックとなる。
【００５３】
次に、第１実施形態においてホスト１０が不揮発性メモリストレージからプログラムされている（書き込まれている）データを読み出す時の処理を説明する。この読み出し処理は、一般的な不揮発性メモリストレージからの読み出し処理と同じである。
【００５４】
図８は、第１実施形態においてホスト１０が不揮発性メモリストレージからプログラムされている（書き込まれている）データを読み出す時の処理を示すフローチャートである。
【００５５】
ステップＳ４１で、ホスト１０が、コントローラ２０に、論理アドレスと一緒にRead（リード）要求（データ読み出しリクエスト）を出す。
ステップＳ４２で、コントローラ２０のRead（リード）ブロック選択部２３は、論理−物理アドレス変換テーブル２４から、受信した論理アドレスに対応する物理アドレスを読み出す。
【００５６】
ステップＳ４３で、セレクタ２６は、物理アドレスからデータを読み出すブロック３１を有するＮＡＮＤフラッシュデバイスを決定し、それに接続されるＮＡＮＤインターフェースに決定した物理アドレスを出力する。これにより、決定したＮＡＮＤフラッシュデバイスからバッファ２１に、ＮＡＮＤインターフェースを介して、読み出しみデータを転送できる状態になる。
【００５７】
ステップＳ４４で、ＮＡＮＤインターフェースは、ＮＡＮＤフラッシュデバイスから、指定した物理アドレスに記憶されたデータを読み出す。
ステップＳ４５で、セレクタ２６は、Read（読み出し）データをバッファ２１に格納し、バッファ２１からホスト１０にデータを転送する。
【００５８】
図９は、書き換え回数が前述の一定回数（コールド回数）を超えたブロックを、コールドデータ領域４２に分類する処理を示すフローチャートである。
ステップＳ５１で、プログラムブロック選択部２２は、書き換え回数保持部２５から、各ブロックの書き換え回数を読み出す。
【００５９】
ステップＳ５２で、各ブロックの書き換え回数がコールド回数を超えたか判定し、超えていればステップＳ５３に進み、超えていなければステップＳ５４に進む。
ステップＳ５３で、書き換え回数がコールド回数を超えたブロックを、コールドデータブロックに設定し、ステップＳ５４に進む。
【００６０】
ステップＳ５４で、すでにコールドデータ領域４２に分類されたブロック以外のすべてのブロックについて分類が終了したかを判定し、終了していなければステップＳ５１に戻り、終了するまでＳ５１からＳ５４を繰り返し、終了するとステップＳ５５に進む。
ステップＳ５５で、コールドデータ領域４２への分類処理を終了する。
図９のコールドデータ領域４２への分類処理は、不揮発性メモリストレージへのプログラム要求が分類起動回数行われるごとに行えばよい。
【００６１】
以上説明したように、第１実施形態では、Write Intensiveデータを書き換え回数の多いブロックに格納することにより、プログラム時間を短縮でき、不揮発性メモリストレージの性能が向上する。
【００６２】
第１実施形態では、コールドデータ領域４２以外の通常データ領域４１は、書き換え回数に応じてソートされる。そのため、頻繁にソート処理を行うことになる。次に説明する第２実施形態では、Read intensiveデータを格納する領域と、Write intensiveデータを格納する領域をあらかじめ決めておき、書き換え回数が一定回数（再分類回数）を超えたとき、または一定時間経過したとき、領域の見直しを行う。
【００６３】
第２実施形態の情報処理装置は、図２に示した第１実施形態の情報処理装置と同じ全体構成を有し、プログラムブロック選択部２２の処理が異なる。
図１０は、第２実施形態におけるプログラムブロック選択部２２の処理を説明する図である。
【００６４】
第２実施形態においては、不揮発性メモリストレージ（ＮＡＮＤフラッシュデバイス）の物理アドレス空間４０を、Read intensiveデータを格納する領域４３と、Write intensiveデータを格納する領域４４と、にあらかじめ分類しておく。例えば、不揮発性メモリストレージの使用開始直後であれば、図３のコールドデータ領域４２は存在せず、物理アドレス空間４０のすべてが通常領域４１に分類される。不揮発性メモリストレージが使用され、コールドデータ領域４２が生じると、物理アドレス空間４０からコールドデータ領域４２を除いた通常領域４１を領域４３および領域４４に分類する。なお、コールドデータ領域４２を分類せずに、物理アドレス空間４０のすべてを通常領域４１とする場合もあり得る。
【００６５】
最初に物理アドレス空間４０を、Read intensive領域４３と、Write intensive領域４４と、に分類する方法は任意であり、使用状況に応じて領域４３と領域４４の比率および物理アドレスを決定する。図１０では、ブロック番号の小さい側にRead intensive領域４３を、ブロック番号の大きい側にWrite intensive領域４４を設定する。
【００６６】
上記の状態で不揮発性メモリストレージの使用を開始し、Read intensiveの付加情報を有するデータは領域４３に、Write intensiveの付加情報を有するデータは領域４４に格納（プログラム）される。
【００６７】
書き換え回数が一定回数を超えた時、または一定時間経過した時、領域の見直しを行う。例えば、図示のように、領域４３にも１０３回、２０５回など書き換え回数の多いブロックが存在し、領域４３にも１２０回、５０回など書き換え回数の少ないブロックが存在する。そこで、図１０の左側に示すように、全ブロックを書き換え回数でソートし、書き換え回数が少ない領域をread intensive領域４３とし、書き換え回数が多い領域をwrite intensive領域４４とする。この際、領域４３から領域４４に分類が変更されるブロック数と、領域４４から領域４３に分類が変更されるブロック数を同じにすれば、領域４３と領域４４の比率は変化しない。変更するブロックにすでに書き込まれていたデータは、領域を見直す時に新たな領域に移動しても、次に書き換える時に新たな領域に移動してもよい。
【００６８】
以後、書き換え回数が一定回数を超えるごとに以上の処理を行う。なお、コールドデータ領域４２を分類する場合には、コールドデータ領域変更を領域４３と４４の変更に合わせて行い、コールドデータ領域４２に新たに分類されるブロック数を考慮して領域４４と領域４３の間のブロックの変更を行えば、比率は変化しない。さらに、領域４４と領域４３のブロック数の比率は、適宜変更してもよい。
【００６９】
図１１は、第２実施形態におけるプログラムブロック選択部２２の処理を示すフローチャートである。
ステップＳ６１で、プログラムブロック選択部２２は、物理アドレス空間４０をread intensive領域４３とwrite intensive領域４４とに分類する。
ステップＳ６２で、書き換え回数をカウントするためのパラメータｍを“１”に設定する。
【００７０】
ステップＳ６３で、書き換えを含む書き込み動作を行う。読み出し動作は適宜行われるが、この処理に関係しないので無視する。書き込み動作は、書き込むデータがread intensiveデータであればread intensive領域４３から選択したブロックに行い、write intensiveデータであればwrite intensive領域４４から選択したブロックに行うように制御する。
【００７１】
ステップＳ６４で、パラメータｍを１増加させる。
ステップＳ６５で、パラメータｍが一定回数（再分類回数）を超えたか判定し、超えていなければステップＳ６３に戻り、Ｓ６３からＳ６５の処理を繰り返し、超えていればステップＳ６６に進む。
【００７２】
ステップＳ６６で、図９で説明したコールドデータ領域のブロックの分類処理を行う。
ステップＳ６７で、書き換え回数に基づいて、read intensive領域４３のブロックと、write intensive領域４４のブロックの再分類処理を行う。
以後、ステップＳ６２からＳ６７を繰り返す。
【００７３】
図１２は、ステップＳ６７で行う再分類処理を示すフローチャートである。
ステップＳ７１で、read intensive領域４３のブロックを、書き換え回数の多い順にソートする。
ステップＳ７２で、write intensive領域４４のブロックを、書き換え回数の少ない順にソートする。
【００７４】
ステップＳ７３で、read intensive領域４３のブロック数とwrite intensive領域４４のブロックの比率が所望の比率であるか判定し、所望の比率であればステップＳ７５に進み、所望の比率でなければステップＳ７４に進む。この処理は、図１１のステップＳ６６で、新たにコールドデータ領域４２に分類されたブロックが生じたために、所望の比率でなくなった場合に補正するために行う。
【００７５】
ステップＳ７４で、所望の比率になるように、read intensive領域４３のブロックをwrite intensive領域４４に分類変更するか、またはwrite intensive領域４４のブロックをread intensive領域４３に分類変更する。この分類変更は、どのようにブロックを選択してもよいが、read intensive領域４３のブロックをwrite intensive領域４４に分類変更する場合には、もっとも書き換え回数の多いブロックを選択することが望ましい。また、write intensive領域４４のブロックをread intensive領域４３に分類変更する場合には、もっとも書き換え回数の少ないブロックを選択することが望ましい。分類変更したブロックは、それぞれの領域のソート位置に配置する。
【００７６】
ステップＳ７５で、分類変更する個数パラメータｎを“１”に設定する。
ステップＳ７６で、ソートしたread intensive領域４３のｎ番目のブロックの書き換え回数Ｒｎと、ソートしたwrite intensive領域４４のｎ番目のブロックの書き換え回数Ｗｎと、を比較する。
【００７７】
ステップＳ７７で、ＲｎとＷｎを比較し、Ｗｎ＜ＲｎであればステップＳ７８に進み、そうでなければステップＳ７９に進む。
ステップＳ７８で、read intensive領域４３のｎ番目のブロックとwrite intensive領域４４のｎ番目のブロックの分類を変更する。言い換えれば、read intensive領域４３のｎ番目のブロックはwrite intensive領域４４に分類変更し、write intensive領域４４のｎ番目のブロックはread intensive領域４３に分類変更する。
ステップＳ７９で分類変更処理を終了する。
【００７８】
以上説明したように、第２実施形態では、read intensive領域のブロックとwrite intensive領域のブロックの分類変更は、所定の間隔をおいて行われるため、演算処理および演算時間を短縮できる。
【００７９】
第１および第２実施形態では、ホスト１０は、書き込みデータがRead intensiveであるかWrite intensiveであるかを決定し、その情報を付加情報としてデータ転送リクエストに付加していた。しかし、コントローラ２０が、データのRead/Write履歴によって判断することも可能である。次に説明する第３実施形態では、コントローラ２０が、データのRead/Write履歴によってRead intensiveであるかWrite intensiveであるか（データ属性）を判定し、判定結果にしたがって書き込む領域を制御する。
【００８０】
図１３は、第３実施形態の情報処理装置の全体構成を示す図である。
第３実施形態の情報処理装置は、コントローラ２０にRead/program（読み出し／プログラム）携行判定部２８を設けたことが第１および第２実施形態と異なり、他の部分は同じである。
【００８１】
最初は、書き込みデータのデータ属性が不明なので、例えば、すべてWrite intensiveであるとして、それに応じた領域のブロックを選択して書き込む。例えば、第１実施形態であれば、書き換え回数が多いブロックから選択して書き込み、第１実施形態であれば領域４４のブロックから選択して書き込む。
【００８２】
読み出し／プログラム携行判定部２８は、一定範囲のオフセットアドレス（論理アドレス）毎にそこに書き込まれたデータのread（読み出し）頻度とprogram（プログラム）頻度を監視する。例えば、読み出し頻度が、プログラム頻度より大きく且つ標準頻度より大きい時、そのデータをRead intensiveデータと判定して、Read intensiveデータを書き込む領域から選択したブロックに書き込み、物理アドレスを変更する。プログラム頻度が、読み出し頻度より大きく且つ標準閾値より大きい時、そのデータをWrite intensiveデータと判定する。このデータは、上記のように、Write intensive領域のブロックに書き込まれているので、領域を変更する必要はない。さらに、読み出し頻度およびプログラム頻度の両方とも一定頻度（限界頻度）以下の場合には、そのデータをコールドデータと判定し、コールドデータ領域から選択したブロックに書き込み、物理アドレスを変更する。
【００８３】
上記の処理は、随時行われ、一旦属性（付加情報）が変更されたデータが、元の属性を有するように再度変更されてもよい。
【００８４】
以上第１から第３実施形態を説明したが、各種の変形例が可能である。例えば、説明した処理の一部を行わないようにすることや、処理を合わせて行うようにすることも可能である。例えば、第１または第２実施形態に第３実施形態の処理を組み合わせ、ホストがRead intensiveデータであるかWrite intensiveデータであるかの付加情報を付加するが、コントローラが第３実施形態の処理を行って付加情報を変更することも可能である。この場合、付加情報を変更したことをホストに通知するようにしてもよい。
【００８５】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものである。特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【符号の説明】
【００８６】
１０    ホスト
２０    コントローラ
２１    バッファ
２２    プログラムブロック選択部
２３    リードブロック選択部
２４    論理−物理アドレス変換テーブル
２５    書き換え回数保持部
２６    セレクタ
２７Ａ−２７Ｎ    ＮＡＮＤインターフェース
３０Ａ−３０Ｎ    ＮＡＮＤフラッシュデバイス
３１    ブロック
【図１】
2016115081.tif 000003
【図２】
2016115081.tif 000004
【図３】
2016115081.tif 000005
【図４】
2016115081.tif 000006
【図５】
2016115081.tif 000007
【図６】
2016115081.tif 000008
【図７】
2016115081.tif 000009
【図８】
2016115081.tif 000010
【図９】
2016115081.tif 000011
【図１０】
2016115081.tif 000012
【図１１】
2016115081.tif 000013
【図１２】
2016115081.tif 000014
【図１３】
2016115081.tif 000015