(57)【要約】【課題】寿命を短くすること無く性能を改善することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、優先順位が付けられた複数の不揮発性メモリダイを各々が含む複数のダイ集合を管理する。前記コントローラは、ホストから受信した論理的な書き込み先のダイを指定する識別子基づいて前記複数のダイ集合から一つのダイ集合を選択する。前記コントローラは、前記選択されたダイ集合から、前記優先順位付けに基づいて不揮発性メモリダイを選択する。前記コントローラは、前記選択された不揮発性メモリダイを、前記ホストから受信されるライトデータの書き込み先のダイとして決定する。【選択図】図１
2018073038.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
前記複数の不揮発性メモリダイのうち優先順位付けされた複数の不揮発性メモリダイを各々が含む複数のダイ集合を管理し、
前記ホストから受信した論理的な書き込み先のダイを指定する識別子に基づいて前記複数のダイ集合から一つのダイ集合を選択し、
前記選択されたダイ集合から、前記優先順位付けに基づいて不揮発性メモリダイを選択し、
前記選択された不揮発性メモリダイを、前記ホストから受信されるライトデータの書き込み先のダイとして決定するように構成されている、メモリシステム。
【請求項２】
前記コントローラは、前記選択されたダイ集合内に含まれる不揮発性メモリダイそれぞれの書き替え回数と、前記選択されたダイ集合内の優先順位順と、に基づいて不揮発性メモリダイを選択するように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記選択されたダイ集合内に含まれる不揮発性メモリダイそれぞれに割り当てられている未完了の処理の残数がより少なく且つより高い優先順位を有する不揮発性メモリダイを選択するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記複数のダイ集合それぞれに含まれる最高優先順位の不揮発性メモリダイは、前記複数のダイ集合間で互いに異なっている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、前記識別子を含むライトコマンドを前記ホストから受信した場合に、前記受信されたライトコマンドに含まれる前記識別子に基づいて前記複数のダイ集合から一つのダイ集合を選択し、前記選択されたダイ集合から、前記優先順位付けに基づいて不揮発性メモリダイを選択し、前記選択された不揮発性メモリダイを前記書き込み先のダイとして決定し、前記ライトコマンドによって指定されるライトデータを前記書き込み先のダイに書き込むように構成されている請求項１記載のメモリシステム。
【請求項６】
前記受信されたライトコマンドが、ウェアレベリングを優先すべきことを示すポリシーを含む場合、前記コントローラは、前記選択されたダイ集合から、前記不揮発性メモリ内の前記複数の不揮発性メモリダイの最小書き替え回数との差が許容差以内である書き替え回数を有し且つより高い優先順位を有する不揮発性メモリダイを選択するように構成されている請求項５記載のメモリシステム。
【請求項７】
前記受信されたライトコマンドが、書き込み速度を優先すべきことを示すポリシーを含む場合、前記コントローラは、前記選択されたダイ集合内に含まれる不揮発性メモリダイそれぞれに割り当てられている未完了の処理がより少なく且つより高い優先順位を有する不揮発性メモリダイを選択するように構成されている請求項５記載のメモリシステム。
【請求項８】
前記コントローラは、
複数の論理アドレス範囲と、前記複数の論理アドレス範囲にそれぞれに割り当てるべき複数の識別子とを指定する第１コマンドを前記ホストから受信し、
前記ホストからライトコマンドを受信し、
前記受信されたライトコマンドによって指定される開始論理アドレスが前記複数の論理アドレス範囲のいずれに属するかを判定し、
前記開始論理アドレスが属する論理アドレス範囲に対応する識別子に基づいて、前記複数のダイ集合から一つのダイ集合を選択し、
前記選択されたダイ集合から、前記優先順位付けに基づいて不揮発性メモリダイを選択し、
前記選択された不揮発性メモリダイを前記書き込み先のダイとして決定し、
前記受信されたライトコマンドによって指定されるライトデータを前記書き込み先のダイに書き込むように構成されている請求項１記載のメモリシステム。
【請求項９】
前記第１コマンドは、前記複数の論理アドレス範囲にそれぞれに適用すべきポリシーをさらに指定し、
前記開始論理アドレスが属する論理アドレス範囲に適用すべきポリシーが、ウェアレベリングを優先すべきことを示す場合、前記コントローラは、前記選択されたダイ集合から、前記不揮発性メモリ内の前記複数の不揮発性メモリダイの最小書き替え回数との差が許容差以内である書き替え回数を有し且つより高い優先順位を有する不揮発性メモリダイを選択するように構成されている請求項８記載のメモリシステム。
【請求項１０】
前記第１コマンドは、前記複数の論理アドレス範囲にそれぞれに適用すべきポリシーをさらに指定し、
前記開始論理アドレスが属する論理アドレス範囲に適用すべきポリシーが、書き込み速度を優先すべきことを示すポリシーを含む場合、前記コントローラは、前記選択されたダイ集合内に含まれる不揮発性メモリダイそれぞれに割り当てられている未完了の処理の残数がより少なく且つより高い優先順位を有する不揮発性メモリダイを選択するように構成されている請求項８記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、その高性能という特徴により、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００４】
ＳＳＤに搭載されるＮＡＮＤ型フラッシュメモリは、複数のＮＡＮＤ型フラッシュメモリダイ（ＮＡＮＤ型フラッシュメモリチップとも云う）から構成されるのが一般的である。これらダイは並列に動作することができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“Open-Channel Solid State Drives NVMe Specification”、Revision 1.2、April 2016、[online]、［平成２８年１０月１１日検索］、インターネット(URL:http://lightnvm.io/docs/Open-ChannelSSDInterfaceSpecification12-final.pdf)
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、寿命を短くすること無く受信した要求に対する応答性能を改善することができるメモリシステムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、ホストに接続可能なメモリシステムは、並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、前記複数の不揮発性メモリダイのうち優先順位付けされた複数の不揮発性メモリダイを各々が含む複数のダイ集合を管理する。前記コントローラは、前記ホストから受信した論理的な書き込み先のダイを指定する識別子に基づいて前記複数のダイ集合から一つのダイ集合を選択する。前記コントローラは、前記選択されたダイ集合から、前記優先順位付けに基づいて不揮発性メモリダイを選択する。前記コントローラは、前記選択された不揮発性メモリダイを、前記ホストから受信されるライトデータの書き込み先のダイとして決定する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】同実施形態のメモリシステム内のＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図３】同実施形態のメモリシステムによって管理される書き替え回数（Ｐｒｏｇｒａｍ−Ｅｒａｓｅ  Ｃｙｃｌｅｓ  （Ｐ／Ｅ  Ｃｙｃｌｅｓ））テーブルを示す図。
【図４】同実施形態のメモリシステムによって管理されるＮＡＮＤ構造情報を示す図。
【図５】図同実施形態のメモリシステムによって管理される優先順位テーブルを示す図。
【図６】同実施形態のメモリシステムによって管理される実行キュー状態テーブルを示す図。
【図７】同実施形態のメモリシステムによって管理される、論理アドレスそれぞれとカラーそれぞれとの対応関係の例を示す図。
【図８】同実施形態のメモリシステムによって実行されるデータ書き込み処理シーケンスを示す図。
【図９】同実施形態のメモリシステムに適用されるライトコマンド（拡張ライトコマンド）の例を示す図。
【図１０】図９のライトコマンドの受信に応答して同実施形態のメモリシステムによって実行されるデータ書き込み処理シーケンスを示す図。
【図１１】同実施形態のメモリシステムに適用されるカラー管理コマンドの例を示す図。
【図１２】図９のカラー管理コマンドに応じて同実施形態のメモリシステムによって生成されるカラーテーブルを示す図。
【図１３】同実施形態のメモリシステムによって実行されるカラー割り当ておよびデータ書き込み処理シーケンスを示す図。
【図１４】同実施形態のメモリシステムによって管理される優先順位テーブルを示す図。
【図１５】同実施形態のメモリシステムによって管理される書き替え回数（Ｐｒｏｇｒａｍ−Ｅｒａｓｅ  Ｃｙｃｌｅｓ  （Ｐ／Ｅ  Ｃｙｃｌｅｓ））テーブルを示す図。
【図１６】同実施形態のメモリシステムによって管理される実行キュー状態テーブルを示す図。
【図１７】同実施形態のメモリシステムによって生成される重み付け結果テーブルを示す図。
【図１８】同実施形態のメモリシステムによって実行される書き込み動作の手順を示す図。
【図１９】図９のカラー管理コマンドに応じて同実施形態のメモリシステムによって実行されるカラーテーブル生成処理の手順を示すフローチャート。
【図２０】カラーテーブルの生成後に受信される通常のライトコマンドに応じて同実施形態のメモリシステムによって実行される書き込み動作の手順を示す図。
【図２１】ホストの構成例を示すブロック図。
【図２２】ホストと同実施形態のメモリシステムとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１０】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤ型フラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１１】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、ＳＳＤ３をアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータをＳＳＤ３に保存するストレージサーバ（サーバ）であってもよいし、パーソナルコンピュータであってもよい。
【００１２】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１３】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標），Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００１４】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＳＳＤ３は、ＤＲＡＭ６も備えていてもよい。ＮＡＮＤ型フラッシュメモリ５は、メモリセルアレイを含む。このメモリセルアレイは、多数のブロックＢ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。ブロックは「消去ブロック」または「物理ブロック」と称されることもある。
【００１５】
ブロックＢ０〜Ｂｍ−１は多数のページ（物理ページ）を含む。つまり、ブロックＢ０〜Ｂｍ−１の各々は、ページＰ０〜Ｐｎ−１を含む。ＮＡＮＤ型フラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。データを消去するための消去動作はブロック単位で実行される。
【００１６】
コントローラ４は、Ｔｏｇｇｌｅ、ＯＮＦＩのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。
【００１７】
ＮＡＮＤ型フラッシュメモリ５は、図２に示すように、複数のＮＡＮＤ型フラッシュメモリダイ（不揮発性メモリダイ）を含む。ダイは、「チップ」とも称される。各ＮＡＮＤ型フラッシュメモリダイは、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。このメモリセルアレイは、複数のブロックによって編成される。各ブロックは多数のページによって編成される。図２においては、ＮＡＮＤインタフェース１３に８個のチャンネル（Ｃｈ＃１〜Ｃｈ＃８）が接続されており、８個のチャンネル（Ｃｈ＃１〜Ｃｈ＃８）の各々に４つのＮＡＮＤ型フラッシュメモリダイが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。コントローラ４の制御の下、ＮＡＮＤインタフェース１３は、８個のチャンネル（Ｃｈ＃１〜Ｃｈ＃８）を介してＮＡＮＤ型フラッシュメモリダイ＃０〜＃３１をアクセスすることができる。なお、ＳＳＤ３に搭載されるＮＡＮＤ型フラッシュメモリダイの数は３２個に限定されず、任意の数のＮＡＮＤ型フラッシュメモリダイがＳＳＤ３に搭載され得る。また、チャンネルの数も８個に限定されず、任意の数のチャンネルが使用され得る。
【００１８】
ところで、近年、ＳＳＤなどに代表される高速なストレージデバイスに対する読み込み応答性能への要求が高まっている。特に、テールレイテンシ（ｔａｉｌ  ｌａｔｅｎｃｙ）と呼ばれる、アクセス要求に対する応答時間（レイテンシ）の平均値に対して極端に遅くなるような応答が問題となることがあるとされており、特にリード要求に対する応答時間（リードレイテンシ）の予測性を高めることが求められる。
【００１９】
リードレイテンシが変動する要因の一つとして、ＮＡＮＤフラッシュメモリへのアクセスの衝突がある。一つのＮＡＮＤ型フラッシュメモリダイ（単にダイともいう）に対する処理（書き込み動作、読み出し動作、消去動作）は並列化されず、逐次的に処理される。すなわち、ダイは並列実行の単位であり、多くのダイがあれば、チャンネルの帯域の制限はあるが、ダイの数と同数の処理を並列に行うことができる。
【００２０】
一般的に、ＮＡＮＤ型フラッシュメモリへの書き込み動作には読み出し動作に対してより長い時間がかかる。よって、書き込み動作中のダイに対して読み出し動作が発生した場合、その読み出しのレイテンシは通常よりも非常な長くなり、これがリードレイテンシ変動の一因となる。
【００２１】
また、ＮＡＮＤ型フラッシュメモリにおいては、消去状態のブロックにのみ書き込みが可能となる。このため、最初の書き込みの前にブロック単位で消去処理を行わなければならない。この消去処理を行っているダイに対して読み出し動作が発生した場合、その読み出しのレイテンシは通常よりも非常な長くなり、これもリードレイテンシ変動の一因となる。
【００２２】
このように、同一のダイに対して処理が要求されることを以下ダイ衝突（ｄｉｅ  ｃｏｌｌｉｓｉｏｎ）と呼ぶ。
【００２３】
ホストからＳＳＤへの書き込みにおいて、データが書き込まれるべき記憶位置は、通常、論理ブロックアドレス（ＬＢＡ）と称される論理アドレスで指示される。
【００２４】
一方、どのＬＢＡがどのダイのどのブロックに割り当てられるかは、通常、ＳＳＤ内部で隠蔽されるためホストが知ることはできない。
【００２５】
よって、ホストが書き込みを行った場合、どのダイが書き込み動作中になっているかをホストは知ることができない。このため、ホストはどの要求がダイ衝突を招くかを知ることができない。
【００２６】
ダイ衝突を避けるための一つの方法としては、ＳＳＤ内部のチャンネルおよびダイの構成に関する情報をホストに通知する方法が考えられる。この方法を使用すれば、ホストは、データが書き込まれるべき記憶位置を指定する情報として、通常のＬＢＡではなく、チャンネルおよびダイを指定することができる。これにより、ホスト側から、データが書き込まれるべきダイを直接的に指定することができるため、ホストはどの要求がダイ衝突を引き起こすかを知ることができる。
【００２７】
一方、この方法にはウェアレベリングの問題がある。
【００２８】
ウェアレベリングとは、書き替え回数（Ｐｒｏｇｒａｍ−Ｅｒａｓｅ  Ｃｙｃｌｅｓ  （Ｐ／Ｅ  Ｃｙｃｌｅｓ））を平準化する技術である。ＮＡＮＤ型フラッシュメモリでは、書き替え回数は有限であり、あるブロックの書き替え回数が上限を超えると、そのブロックは使用できなくなるという性質がある。
【００２９】
このため、ＳＳＤでは、ＳＳＤ全体の寿命を高めるため、ブロック間で書き替え回数を平準化することが必要である。
【００３０】
例えば、ホストから同じＬＢＡへの書き込み（書き替え）要求が到来しても、ＳＳＤは、同じ記憶位置にデータを書き込むのではなく、異なる記憶位置にデータを書き込み、そして、このＬＢＡと、データが実際に書き込まれた記憶位置との間の関係を記録する。データの書き込み先は、ブロック間で書き替え回数ができる限り平準化されるように選択される。
【００３１】
ホスト側から書き込み先のダイを直接的に指定するという上述の方法が適用されたＳＳＤでは、この平準化のための範囲が強く制約される。例えば、６４個のダイを持つＳＳＤの場合、ホストが同一のＬＢＡへの書き込みを続けた場合、通常のＳＳＤに対して６４分の１の書き込み量で、あるブロックの書き替え回数が限界を超えることが予想される。
【００３２】
このように、ホスト側から書き込み先のダイを直接的に指定するという上述の方法では、ある特定のダイにデータ書き込みが集中してしまう場合がある。この場合、この特定のダイの書き替え回数（Ｐｒｏｇｒａｍ−Ｅｒａｓｅ  Ｃｙｃｌｅｓ  （Ｐ／Ｅ  Ｃｙｃｌｅｓ））が早く上限に達しやすくなり、この結果、ＳＳＤの寿命が短くなる可能性がある。また、チャンネルやダイの数はＳＳＤのモデルによって異なるため、アプリケーションの振る舞いをモデルに合わせて変更する必要があり、これによってアプリケーションの開発負荷が高くなる。
【００３３】
そこで、本実施形態に係るＳＳＤ３は、ＳＳＤ３の寿命を短くすること無く、要求に対するＳＳＤ３の応答性能を改善することを可能にする新たな機能（以下カラーリングと称する）を有している。このカラーリングは、ホスト２に書き込み先のダイを直接指定させるのではなく、ある論理的な書き込み先ダイを示す識別子をホスト２から受信し、この受信された識別子に基づいて幾つかのダイ集合からいずれか一つのダイ集合を選択し、この選択されたダイ集合内のいずれか一つのダイを実際の書き込み先ダイとして決定する。
【００３４】
各ダイ集合においては、このダイ集合に含まれるダイそれぞれに優先順位が付けられている。ＳＳＤ３は、受信された識別子に基づいてダイ集合を選択し、この選択されたダイ集合内のダイそれぞれに対する上述の優先順位付けに基づいて、この選択されたダイ集合から一つのダイを選択し、選択されたダイを、ホスト２から受信されるライトデータの書き込み先のダイとして決定する。
【００３５】
よって、本実施形態のカラーリング機能では、ホスト２から受信された識別子に基づいてダイ集合と云う広い書き込み先範囲を選択することができ、この選択されたダイ集合内のダイ間で書き込み先を分散することができる。このことは、ＳＳＤ３の寿命を短くすることなくＳＳＤ３の応答性能を改善することを可能にする。
【００３６】
受信された識別子に基づいて選択されたダイ集合内の複数のダイからひとつのダイ（書き込み先のダイ）を選択するための方法としては、選択されたダイ集合内のダイの優先順位付けに基づいて書き込み先のダイを選択可能な任意の方法を使用できる。
【００３７】
例えば、ＳＳＤ３は、ウェアレベリングまたは性能の少なくとも一方に関する条件を満たし且つより高い優先順位を有するダイを書き込み先ダイとして決定してもよい。この場合、ＳＳＤ３は、選択されたダイ集合内のダイそれぞれの状態（例えば、書き替え回数、または未完了の処理の残数、等）を、これらダイの優先順位の順に評価してもよい。
【００３８】
ＳＳＤ３の使用が開始されているある一定の期間（初期期間）においては、どのダイもほぼ同じ状態である。このため、ＳＳＤ３への書き込みが要求される度に、選択されたダイ集合内の最高優先順位のダイが最優先で書き込み先ダイとして決定される。これにより、ホストからのライトデータは、選択されたダイ集合内の最高優先順位のダイに書き込まれる。
【００３９】
時間の経過に連れ、選択されたダイ集合内の最高優先順位のダイの書き替え回数は徐々に増える。いずれ、この最高優先順位のダイの書き替え回数と現在の最小書き替え回数との差は、ある書き替え回数許容差を超える。この場合、ＳＳＤ３は、この最高優先順位のダイの書き替え回数が、ウェアレベリングのための条件を満たなくなったと判定し、そして、書き込み先ダイを、選択されたダイ集合内で次に優先順位に高いダイに変更する。
【００４０】
このようにして、選択されたダイ集合においては、このダイ集合内のダイそれぞれの書き替え回数に応じて、書き込み先ダイとして使用されるダイは、最高優先順位のダイから最低優先順位のダイに向けて徐々に移動される。よって、たとえホスト２が特定のカラーに偏った書き込みを行った場合でも、このカラーに対応するダイ集合内のダイ間で書き替え回数を平準化することができ、ＳＳＤ３の寿命を維持することができる。
【００４１】
また、ホスト２が異なるカラーを指定したならば、異なるダイ集合が選択される。したがって、ホスト２が特定のカラーに偏らない書き込みを行う限り、ダイ衝突が発生する確率を下げることが可能となる。
【００４２】
ここでは、ウェアレベリングに関する条件（書き替え回数）に基づいて書き込み先ダイを決定する場合を説明したが、性能に関する条件（未完了の処理の残数）に基づいて書き込み先ダイを決定してもよい。この場合においても、初期の期間においては、最高優先順位のダイが最優先で書き込み先ダイとして決定されることが期待される。時間が経過するに連れ、最高優先順位のダイに格納されたデータ量が増加し、これに伴って最高優先順位のダイに向けられる読み出し動作の数も増える。よって、最高優先順位のダイの未完了の処理の残数が徐々に増えるので、書き込み先ダイは、選択されたダイ集合内のダイに亘って徐々に分散される。よって、性能に関する条件（未完了の処理の残数）を使用した場合においても、ウェアレベリングに関する条件（書き替え回数）を使用した場合と同様に、ＳＳＤ３の寿命を短くすることなくＳＳＤ３の性能を改善することができる。
【００４３】
次に、図１のコントローラ４の構成について説明する。
【００４４】
コントローラ４は、複数のチャンネル（例えば８個のチャンネル）を介して複数のＮＡＮＤ型フラッシュメモリダイに電気的に接続される。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５（複数のＮＡＮＤ型フラッシュメモリダイ）のデータ管理とＮＡＮＤフラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。
【００４５】
データ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。以下では、論理アドレスが論理ブロックアドレス（ＬＢＡ）である場合を想定する。
【００４６】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３２を用いて実行される。コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。管理サイズ単位は、限定されないが、例えば、４Ｋバイトであってもよい。アドレス変換テーブル（ＬＵＴ３２）は、ＳＳＤ３の電源オン時にＮＡＮＤフラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００４７】
あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤフラッシュメモリ５内の物理記憶位置を示す。物理アドレスは、例えば、ダイ番号とブロック番号とページ番号等との組み合わせによって表現されてもよい。
【００４８】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、同じＬＢＡへのライト（上書き）を、ＮＡＮＤ型フラッシュメモリ５上の異なるページにマッピングする。つまり、コントローラ４は、ホスト２から受信されるライトコマンドによって指定されるデータ（ライトデータ）を、このデータのＬＢＡとは無関係に、書き込み先ダイに含まれる書き込み先ブロック内の次の利用可能ページにライトする。そして、コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を更新して、このＬＢＡを、このデータが実際にライトされた物理記憶位置の物理アドレスに関連付ける。この書き込み先ブロックに利用可能ページが無くなると、新たなブロックが書き込み先ブロックとして割り当てられる。
【００４９】
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【００５０】
ホスト２は、読み出し要求（リードコマンド）、書き込み要求（ライトコマンド）、他の様々な要求（他の様々なコマンド）をＳＳＤ３に送出する。リードコマンドは、ＳＳＤ３に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータのＬＢＡ（開始ＬＢＡ）と、リードすべきデータのデータ長（転送長）とを含む。ライトコマンドは、ＳＳＤ３に対してデータのライトを要求するコマンドである。ライトコマンドは、ライトデータ（つまり書き込むべきデータ）のＬＢＡ（開始ＬＢＡ）と、ライトデータのデータ長（転送長）とを含む。
【００５１】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含んでもよい。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００５２】
ホストインタフェース１１は、ホスト２から様々なコマンド（例えば、ライトコマンド、リードコマンド、イレーズコマンド、アンマップ（ＵＮＭＡＰ）／トリム（Ｔｒｉｍ）コマンド、等）を受信する。
【００５３】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、ＳＳＤ３の電源オンに応答して、図示しないＲＯＭまたはＮＡＮＤ型フラッシュメモリ５に格納されている制御プログラム（ファームウェア）をＤＲＡＭ６上にロードして所定の処理を実行する。このＣＰＵ１２は、例えば、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行する。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行されるファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００５４】
ＣＰＵ１２は、ライト動作制御部２１、リード動作制御部２２、カラーリング制御部２３として機能することができる。
【００５５】
ライト動作制御部２１は、ホスト２からの書き込み要求（ライトコマンド）の受信に応答して、書き込みデータ（ライトデータ）をホスト２から受信する。そして、ライト動作制御部２１は、ライトデータを、ＮＡＮＤ型フラッシュメモリ５内の書き込み先ダイに書き込む。リード動作制御部２２は、ホスト２からの読み出し要求（リードコマンド）の受信に応答して、リードコマンドによって指定されるデータをＮＡＮＤ型フラッシュメモリ５から読み出す。そして、リード動作制御部２２は、読み出されたデータをホスト２に送信する。
【００５６】
カラーリング制御部２３は、上述のカラーリング機能を実行する。
【００５７】
カラーリング制御部２３は、ＮＡＮＤ型フラッシュメモリ５内の複数のＮＡＮＤ型フラッシュメモリダイを複数のダイ集合として管理する。各ダイ集合は、優先順位付けされた幾つかのＮＡＮＤ型フラッシュメモリダイを含む。カラーリング制御部２３は、論理的な書き込み先のダイを指定する識別子（カラー）をホスト２から受信し、このカラーに基づいて複数のダイ集合から一つのダイ集合を選択する。カラーリング制御部２３は、選択されたダイ集合内のＮＡＮＤ型フラッシュメモリダイそれぞれの状態をこれらＮＡＮＤ型フラッシュメモリダイの優先順位の順に評価することによって、選択されたダイ集合から、ウェアレベリングまたは性能の少なくとも一方に関する条件を満たし且つより高い優先順位を有するＮＡＮＤ型フラッシュメモリダイを選択する。そして、カラーリング制御部２３は、選択されたＮＡＮＤ型フラッシュメモリダイを、ホスト２から受信されるライトデータを書き込むべき書き込み先のダイとして決定する。
【００５８】
ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するＮＡＮＤコントローラである。ＤＲＡＭインタフェース１４は、ＤＲＡＭ６をアクセス制御するＤＲＡＭコントローラである。ＤＲＡＭ６の記憶領域は、ライトバッファ（ＷＢ）３１、ルックアップテーブル（ＬＵＴ）３２、システム管理情報３３を格納するために利用される。システム管理情報３３は、上述のカラーリング機能に必要な様々な管理情報を含む。
【００５９】
次に、ホスト２の構成について説明する。
【００６０】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３が含まれる。
【００６１】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００６２】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳなどがファイルシステム４３として使用されても良い。あるいは、ファイルオブジェクトシステム（例えば、Ceph Object Storage Daemon）、Key Value Store System (例えば、Rocks DB) がファイルシステム４３として使用されても良い。
【００６３】
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００６４】
アプリケーションソフトウェアレイヤ４１がリードコマンドまたはライトコマンドのようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションソフトウェアレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェアレイヤ４１に送出する。
【００６５】
ファイルシステム４３は、カラー指定部４４を含んでいてもよい。このカラー指定部４４は、上述の識別子（カラー）を指定するためのプログラムモジュールである。カラー指定部４４は、特定のカラーに偏らない書き込みを行うために、ファイルシステム４３が、カラーの値がパラメータとして追加されたライトコマンド（拡張ライトコマンド）を発行することを可能にする。なお、カラー指定部４４は、オペレーティングシステム４２に組み込まれていてもよいし、アプリケーションに組み込まれていてもよい。
【００６６】
図３は、書き替え回数（ｐ／ｅ  ｃｙｃｌｅｓ）テーブル３３Ａを示す。
【００６７】
書き替え回数（ｐ／ｅ  ｃｙｃｌｅｓ）テーブル３３Ａは、システム管理情報３３の一部であり、ＳＳＤ３に搭載されたＮＡＮＤ型フラッシュメモリダイ＃０、＃１、＃２、…＃ｎの書き替え回数（ｐ／ｅ  ｃｙｃｌｅｓ）を示す。各ダイの書き替え回数は、このダイに含まれる多数のブロックそれぞれの書き替え回数の総和である。
【００６８】
図４は、ＮＡＮＤ型フラッシュメモリ５の構造情報を示す。
【００６９】
ＮＡＮＤ型フラッシュメモリ５の構造情報は、システム管理情報３３の一部であり、ブロックサイズ（容量）、ＳＳＤ容量（ユーザ容量）、等を含む。ブロックサイズは、一つのブロックのサイズ（容量）を示す。ＳＳＤ容量（ユーザ容量）は、ＮＡＮＤ型フラッシュメモリ５の総容量の内、ホスト２が利用可能な容量（ユーザ容量）を示す。コントローラ４は、ホスト２からの要求に応じて、この構造情報をホスト２に報告することができる。
【００７０】
図５は、優先順位テーブル３３Ｃを示す。
【００７１】
優先順位テーブル３３Ｃは、システム管理情報３３の一部であり、カラーリング機能のための複数のダイ集合を管理するために利用される。
【００７２】
すなわち、ＳＳＤ３のコントローラ４は、ＳＳＤ３に搭載されたＮＡＮＤ型フラッシュメモリダイを、カラーリングのための異なる属性（ベースカラー）を使用して管理する。コントローラ４によって使用されるベースカラーの総数は、カラー分離数（number of base colors, NBC）と称される。このカラー分離数（number of base colors, NBC）は、カラーリングに使用されるダイ集合の数を示す。コントローラ４は、これらベースカラーに０から始まる連続した整数値を割り当てる。コントローラ４は、ベースカラー毎に、ダイの書き込み優先順位を決定する。
【００７３】
最高優先順位のダイは、ベースカラー間で互いに異なることが好ましい。したがって、典型的には、カラー分離数は、ＳＳＤ３に搭載されたダイの総数と等しくなる。なお、カラー分離数は、ダイの総数よりも少なくてもよい。各ベースカラーに対応するダイの優先順位は事前に定められ、その後、ダイの優先順位は変更されない。例えば、ＳＳＤ３の出荷時に、ベースカラー毎にダイの優先順位が定められてもよい。
【００７４】
図５の優先順位テーブル３３Ｃは、ＳＳＤ３に搭載されたダイの総数が３で、カラー分離数が３の場合を示している。優先順位テーブル３３Ｃにおいては、３つのベースカラー「０」、「１」、「２」に対して、３つの異なるダイ＃０、＃１、＃２が最高優先順位のダイとして割り当てられている。そして、ベースカラー「０」においては、ダイ＃０、＃１、＃２の順で優先順位（書き込み優先順位）が下がるように、ベースカラー「０」に対応するダイ集合に関する優先順位（書き込み優先順位）が決定されている。つまり、ダイ＃０、＃１、＃２は、ベースカラー「０」に対応するダイ集合として機能する。
【００７５】
同様に、ベースカラー「１」においては、ダイ＃１、＃２、＃０の順で優先順位（書き込み優先順位）が下がるように、ベースカラー「１」に対応するダイ集合に関する優先順位（書き込み優先順位）が決定され、ベースカラー「２」においては、ダイ＃２、＃０、＃１の順で優先順位（書き込み優先順位）が下がるように、ベースカラー「２」に対応するダイ集合に関する優先順位（書き込み優先順位）が決定されている。
【００７６】
なお、図５の優先順位テーブル３３Ｃにおいては、各ベースカラーに対応するダイ集合に含まれるダイの数は、ＳＳＤ３に搭載されたダイの総数（ここでは３）に等しい場合が示されているが、各ダイ集合に含まれるダイの数は、ＳＳＤ３に搭載されたダイの総数よりも少なくてもよい。
【００７７】
すなわち、ベースカラー毎に、ＳＳＤ３が持つ全てのダイについて優先順位を定めるのではなく、ベースカラー毎に、限られた一定個数のダイに対して優先順位を定めてもよい。この場合、ある選択されたベースカラーに対応するダイ集合内の全てのダイが書き込みのための条件を満たさない場合は、このダイ集合に含まれていない他のダイから書き込み先ダイを選択してもよい。
【００７８】
ベースカラーそれぞれとこれらベースカラーの各々が有するダイの優先順位（書き込み優先順位）の内容には、一定の関係性を持たせてもよい。例えば、隣り合うベースカラーが持つダイの書き込み優先順位は、隣り合うベースカラー間で書き込み先ダイとして選択されるダイが統計的に最も重複しにくくなるように定めてもよい。この場合、ホスト２は、最も衝突してほしくない２つの処理があった場合、この２つの処理に対して２つの隣接するカラーを割り当てる。これにより、ダイ衝突が発生する確率を最小にすることができる。なお、ベースカラーが隣接しているとは、２つの異なるベースカラーＣ１，Ｃ２が与えられたとき、Ｃ２−Ｃ１が１に等しいか、あるいは、Ｃ２−Ｃ１が、カラー分離数−１に等しいことを満たすことである。
【００７９】
ホスト２によって指定されるカラー（論理的な書き込み先ダイを示す識別子）としては、例えば、任意の整数が使用されてもよい。いま、ホスト２があるデータ書き込みのためにカラーｃを指定したとする（color=c）。ｃは、任意の整数でよい。コントローラ４は、まず、以下の式に従って、ベースカラー（base color）を求める。
【００８０】
base color = color  %  number of base colors
ここで、%は、モジュロ演算を示す演算記号である。
【００８１】
つまり、コントローラ４は、カラーｃをカラー分離数（number of base colors）で除した余りを求め、この余りをベースカラーとする。モジュロ演算の結果がbcであったとする。このbcは、選択すべきベースカラーの数字を示す。
【００８２】
このようにして、コントローラ４は、ホスト２によって指定されるカラーに基づいて、複数のベースカラー（複数のダイ集合）から一つのベースカラー（一つダイ集合）を選択することができる。選択されたベースカラーに対応するダイそれぞれには優先順位が割り当てられている。コントローラ４は、選択されたダイ集合内のダイそれぞれの状態をこれらダイの優先順位の順に評価することによって、選択されたダイ集合から、ウェアレベリングまたは性能に関する条件を満たし且つより高い優先順位を有するダイを選択する。
【００８３】
例えば、ダイ選択のためにウェアレベリングに関する条件が使用される場合には、コントローラ４は、選択されたダイ集合内に含まれるダイそれぞれの書き替え回数を優先順位順に評価することによって、ウェアレベリングに関する条件を満たし且つより高い優先順位を有するダイを選択する。ウェアレベリングに関する条件を満たすダイとは、現在の最小書き替え回数との差がある許容差以内の書き替え回数を有するダイを意味する。
【００８４】
また、例えば、ダイ選択のために性能に関する条件が使用される場合には、コントローラ４は、選択されたダイ集合内に含まれるダイそれぞれに割り当てられている未完了の処理の残数を優先順位順に評価することによって、選択されたダイ集合から、未完了の処理がより少なく且つより高い優先順位を有するダイを選択する。
【００８５】
ホスト２がカラーを指定せずにライトコマンドをＳＳＤ３に送信した場合には、コントローラ４は、このライトコマンドによって指定される書き込み先のＬＢＡに自動的にあるカラーを与えてもよい。この場合、コントローラ４は、このＬＢＡに与えたカラーをホスト２に通知してよい。これにより、ホスト２は、このＬＢＡに与えられたカラーを知ることができる。また，ホスト2は任意の時点で，あるLBAに与えられたカラーが何であるかをSSD3に問い合わせてもよい．この時も，SSD3はこのLBAに与えられたカラーをホスト2に通知してもよい．
なお、ホスト２は、カラーのみならず、書き込み先ダイの選択のために適用されるポリシーを指定することもできる。このポリシーは、ダイ選択のために優先して適用すべき条件を指定するための付加的な情報である。ポリシーは、例えば、「ダイ位置優先」、「書き込み速度優先」、または「ウェアレベリング優先」のいずれかを示してもよい。
【００８６】
ホスト２によってポリシーが指定された場合には、コントローラ４は、各ダイの書き替え回数の評価または未完了処理の残数の評価に対する重み付け値が変更される。
【００８７】
（１）ダイ位置優先
ポリシーが「ダイ位置優先」を示す場合、コントローラ４は、選択されたダイ集合から、可能な限り、最高優先度のダイを選択してもよい。ここで、可能な限りとは、ＳＳＤが決定する絶対に許容できないレベルを規定するルールを破らない、ということである。
【００８８】
例えば、どのダイの書き替え回数についても、その書き替え回数と現在の最小書き替え回数との差が最大許容差を上回らない、ということを厳守することが必要とされる。現在の最小書き替え回数は、全てのダイそれぞれの現在の書き替え回数の内の最小値である。この他にも、未完了の処理の残数が最大許容処理残数を上回らない、ということを厳守することが必要とされてもよい。
【００８９】
（２）書き込み速度優先
ポリシーが「書き込み速度優先」を示す場合、コントローラ４は、選択されたダイ集合から、可能な限り、要求された書き込み動作が早く終わるダイ、例えば、未完了の処理の残数が最も少ないダイを書き込み先ダイとして選択する。
【００９０】
この場合、未完了の処理の残数に基づいて書き込み先ダイを選択する方法としては、未完了の処理の残数のみに基づいて書き込み先ダイを選択する方法を使用してもよいし、未完了の処理の内容に基づいて残数に重み付けを行い、この重み付けされた残数に基づいて書き込み先ダイを選択する方法を使用してもよい。重み付けの例を以下に説明する。
【００９１】
例えば、読み出し処理の重みを１とした場合、書き込み処理の重みは１０、消去処理の重みは１００といった重み付けが行われてもよい。いま、優先順位が１位で、且つ書き込み処理が１個残っているダイＸと、優先順位が２位で、且つ読み出し処理が９個残っているダイＹとが存在する場合を想定する。ダイＸの未完了の処理の残数の重み付け結果は１０となり、ダイＹの未完了の処理の残数の重み付け結果は９となる。したがって、ダイＹが選択される。
【００９２】
さらに、ダイの優先順位が下がることに対する重み付けを行ってもよい。例えば、優先順位が１つ下がることに対して、３の重みが付加されてもよい。いま、優先順位が１位で、且つ書き込み処理が１個残っているダイＸと、優先順位が２位で、且つ読み出し処理が９個残っているダイＹとが存在する場合を想定する。ダイＸの未完了の処理の残数の重み付け結果は１０となり、ダイＹの未完了の処理の残数の重み付け結果は１２（＝９＋３）となる。したがって、ダイＸが選択される。
【００９３】
（３）ウェアレベリング優先
ポリシーが「ウェアレベリング優先」を示す場合、コントローラ４は、選択されたダイ集合から、最小書き替え回数との差がある許容差以下の書き替え回数を有し、且つより優先順位の高いダイを選択してもよい。
【００９４】
この許容差としては、例えば、
（ｉ）最小書き替え回数に対する最大許容差
（ｉｉ）最小書き替え回数に対する好ましい許容差
が使用されても良い。
【００９５】
通常、最大許容差は、好ましい許容差よりも大きい値に設定される。ポリシーが「ウェアレベリング優先」を示す場合、ダイ間の書き替え回数の差がより平準化されるように、コントローラ４は、選択されたダイ集合から、最小書き替え回数との差がある好ましい許容差以下の書き替え回数を有し、且つより優先順位の高いダイを選択してもよい。
【００９６】
（４）ポリシーの指定なし
ポリシーの指定がない場合、コントローラ４は、ＳＳＤ３が最も重要視する特性に対応するポリシー（デフォルトポリシー）を使用して、ダイを選択する。例えば、ウェアレベリングが最も重要視する指標であるならば、ＳＳＤ３は、最小書き替え回数との差がある許容差（例えば好ましい許容差）以下の書き替え回数を有し、且つより優先順位の高いダイを選択してもよい。
【００９７】
図６は、実行キュー状態テーブル３３Ｄを示す。
【００９８】
実行キュー状態テーブル３３Ｄは、システム管理情報３３の一部であり、「書き込み速度優先」のポリシーで書き込み先ダイを決定するために使用される。
【００９９】
実行キュー状態テーブル３３Ｄは、ダイ毎に、そのダイに割り当てられ且つ未完了の処理の残数を示してもよい。
【０１００】
次に、カラーを指示するための幾つかの方法について説明する。
【０１０１】
（１）ホストが書き込み時にカラーを明示的に指示
ホスト２は、ＳＳＤ３にライトコマンド（write）を送信する度に、以下のように、カラー（color）とポリシー（policy）とを指定してもよい。
【０１０２】
write (addr=x, data=y, color=z, policy=w)
ここで、addrはデータが書き込まれるべき開始論理アドレス(e.g. 開始LBA)を示す。
【０１０３】
（２）ホストが事前に論理アドレス(e.g. LBA)の範囲を指定してカラーを明示的に指示
この場合、ホスト２は、以下のように、論理アドレス範囲とこの論理アドレス範囲に適用すべきカラーとの組を含むカラー割り当て要求をＳＳＤ３に事前に送信する。
【０１０４】
color_assign(addr=100, len=16, color=z, policy=w)
ここで、addrはデータが書き込まれるべき開始論理アドレス(e.g. 開始LBA)を示し、lenは論理アドレス長（論理ブロックの数）を示す。
【０１０５】
colorが指定されていない書き込みに対しては、以下のように、color=z, policy=wが適用される。
【０１０６】
write(addr=101, data=y)  =>  color= z, policy=w
なお、lenは任意の長さを指定可能であるが、例えば、ブロックサイズに対応するlenを使用してもよい。この場合、ホスト２は、ＳＳＤ容量に対応する論理アドレス空間（ＬＢＡ空間）をブロックサイズ境界の単位で複数の論理アドレス範囲（ＬＢＡ範囲）に分け、これら複数のＬＢＡ範囲と、これら複数のＬＢＡ範囲にそれぞれ割り当てるべき複数のカラーとを指定するカラー割り当て要求をＳＳＤ３に送信してもよい。これにより、ブロック単位でカラーを容易に割り当てる事ができ、また、例えば、隣接する２つのＬＢＡ範囲への２つの書き込みを異なる２つのダイに向けることができる。
【０１０７】
（３）SSDが動的にカラーを選択
ホスト２が現在の書き込みに対してカラーを指定せず、且つ事前にもカラーが指定されていなかった場合、ＳＳＤ３は、動的にその書き込み先の論理アドレスに対してカラーを割り当ててもよい。
【０１０８】
つまり、ＳＳＤ３は、以下のライトコマンドをホスト２から受信する。
【０１０９】
write(addr=x, data=y)
addr xに対してホスト２が事前にカラーを指定していなかった場合、ＳＳＤ３は、このaddr xに対して、あるカラーを与えることができる。この時、ＳＳＤ３は、与えたカラーと上述のデフォルトポリシーとを使用して、ライトデータによって指定されるデータを書き込むべき書き込み先ダイを決定する。また，この時，SSD3は，デフォルトポリシーに対して最良の結果が得られるダイを選択し，そのダイが最優先となるカラーを，与えるカラーとして選択してもよい．
（４）SSDが事前に暗黙的にカラーを割り当てる
また、ＳＳＤ３は、事前に全ての論理アドレスに対して暗黙的にカラーを割り当ててもよい。例えば、ＳＳＤ３は、ＳＳＤ３の容量（ユーザ容量）に対応するＬＢＡ空間をx個のＬＢＡ毎(これをstepと呼ぶ)に分割し、これらstepに、異なるカラーを周期的に割り当てても良い。例えば stepが２、カラー分離数が４の場合、ＳＳＤ３は、図７に示すように、カラー０、カラー１、カラー２、カラー３を全ての論理アドレス（ＬＢＡ）に割り当てる。
【０１１０】
このようにＳＳＤ３が事前に暗黙的にカラーを割り当てるケースにおいては、ポリシーとしては、デフォルトポリシーが適用されてもよい。
【０１１１】
なお、ホスト２が明示的にカラーを指定するライトコマンドをＳＳＤ３に送信した場合、暗黙的に割り当てられたカラーよりも、このライトコマンドによって指定されたカラーが優先的に適用される。
【０１１２】
例えば、図７のように論理アドレス（ＬＢＡ）にカラーが割り当てられている状態で、ホスト２が以下のライトコマンドをＳＳＤ３に送信した場合を想定する。
【０１１３】
write(addr=2, data=X, color=3, policy=w)
この場合、addr 2については、暗黙的な値であるカラー1ではなく、ホスト２によって指定されたカラー３が割り当てられる。
【０１１４】
また、ホスト２は、ＬＢＡに現在割り当てられているカラーをＳＳＤ３に問い合わせることができる。
【０１１５】
color_query(addr=100)
ＳＳＤ３は、この問い合わせによって指定されたＬＢＡに割り当てられているカラーをホスト２に通知する。
【０１１６】
また、全てのＬＢＡに暗黙的にカラーが割り当てられている場合においては、ホスト２は、暗黙的なカラー割り当ての設定を問い合わせる以下の問い合わせコマンドをＳＳＤ３に送信することができる。
【０１１７】
color_implicit_setting_query()
この問い合わせコマンドを受信したことに応答して、ＳＳＤ３は、以下の応答をホスト２に送信してもよい。
【０１１８】
color_implicit_setting_query_reply(number_of_base_colors = 4, step=2)
図８は、ＳＳＤ３のコントローラ４によって実行されるデータ書き込み処理シーケンスを示す。
【０１１９】
ここでは、「ホストが書き込み時にカラーを明示的に指示」する方法または「ホストが事前に論理アドレス(e.g. LBA)の範囲を指定してカラーを明示的に指示」する方法を使用して、ホスト２がカラーを指定する場合を想定する。
【０１２０】
コントローラ４は、ホスト２が受信されたカラーに基づいて、複数のベースカラー（複数のダイ集合）から、一つのベースカラー（一つのダイ集合）を選択する（ステップＳ１０１）。次いで、コントローラ４は、選択されたダイ集合に属するダイの状態を優先順位の高いダイから順に評価し、これによって、選択されたダイ集合から、ウェアレベリングまたは性能に関する条件を満たし且つより高い優先順位を有するダイを選択する（ステップＳ１０２）。次いで、コントローラ４は、この選択されたダイを、ホスト２から受信されるライトデータを書き込むべき書き込み先ダイとして決定する（ステップＳ１０３）。
【０１２１】
コントローラ４は、ライトデータを、書き込み先ダイとして決定されたダイに書き込む（ステップＳ１０４）。そして、コントローラ４は、ＬＵＴ３２を更新して、このライトデータのＬＢＡに、ライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５の記憶位置を示す物理アドレスをマッピングする（ステップＳ１０５）。
【０１２２】
図９は、ＳＳＤ３に適用されるライトコマンド（拡張ライトコマンド）の例を示す。
【０１２３】
ライトコマンドは、以下のパラメータを含む。
【０１２４】
（１）開始ＬＢＡ
（２）データ長（論理ブロックの数）
（３）Ｃｏｌｏｒ
（４）Ｐｏｌｉｃｙ（オプショナル）
開始ＬＢＡ（開始論理アドレス）は、書き込まれるべきデータの最初のＬＢＡを示す。
【０１２５】
データ長は、書き込まれるべきデータの長さ（書き込まれるべきデータに対応する論理ブロックの数）を示す。
【０１２６】
Ｃｏｌｏｒは、書き込み先ダイ（論理的な書き込み先ダイ）を指定する識別子である。任意の整数をこの識別子として使用することができる。
【０１２７】
Ｐｏｌｉｃｙは、ダイ選択のために優先して適用すべき条件を指定するための付加的な情報であり、「ダイ（ｄｉｅ）位置優先」、「書き込み速度優先」、「ウェアレベリング（wear leveling）優先」のいずれかを指定する。
【０１２８】
図１０は、ＳＳＤ３のコントローラ４によって実行されるデータ書き込み処理シーケンスを示す。
【０１２９】
ここでは、ライトコマンドによってカラーとポリシーとが指定される場合を想定する。
【０１３０】
コントローラ４は、ホスト２から受信されたライトコマンドに含まれるカラーに基づいて複数のベースカラー（複数のダイ集合）から一つのベースカラー（一つのダイ集合）を選択する（ステップＳ２０１）。次いで、コントローラ４は、選択されたダイ集合に属するダイの状態を優先順位が高いダイから順に評価し、これによって、選択されたダイ集合から、ウェアレベリングまたは性能に関する条件を満たし且つより高い優先順位を有するダイを選択する（ステップＳ２０２）。次いで、コントローラ４は、この選択されたダイを、ホスト２から受信されるライトデータを書き込むべき書き込み先ダイとして決定する（ステップＳ２０３）。
【０１３１】
コントローラ４は、ライトデータを、書き込み先ダイとして決定されたダイに書き込む（ステップＳ２０４）。そして、コントローラ４は、ＬＵＴ３２を更新して、このライトデータのＬＢＡに、ライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５の記憶位置を示す物理アドレスをマッピングする（ステップＳ２０５）。
【０１３２】
図１１は、カラー管理コマンドの例を示す。
【０１３３】
カラー管理コマンドは、上述のカラー割り当て要求として使用されるコマンドである。カラー管理コマンドは、複数のＬＢＡ範囲と、これらＬＢＡ範囲に割り当てるべき複数のカラー、及び複数のポリシーを含んでもよい。つまり、カラー管理コマンドは、各組がＬＢＡ範囲、カラー、およびポリシーを含む、複数の組を指定することができる。
【０１３４】
ＬＢＡ範囲＃１は、同じカラーが適用されるべき、あるＬＢＡ範囲（論理アドレス範囲）を示す。
【０１３５】
Ｃｏｌｏｒ＃１で指定されるカラーは、ＬＢＡ範囲＃１に適用される。また、Ｐｏｌｉｃｙ＃１で指定されるポリシーは、ＬＢＡ範囲＃１に適用される。
【０１３６】
ＬＢＡ範囲＃２は、同じカラーが適用されるべき、別のＬＢＡ範囲（論理アドレス範囲）を示す。
【０１３７】
Ｃｏｌｏｒ＃２で指定されるカラーは、ＬＢＡ範囲＃２に適用され、Ｐｏｌｉｃｙ＃２で指定されるポリシーは、ＬＢＡ範囲＃２に適用される。
【０１３８】
同様に、Ｃｏｌｏｒ＃ｎで指定されるカラーは、ＬＢＡ範囲＃ｎに適用され、Ｐｏｌｉｃｙ＃ｎで指定されるポリシーは、ＬＢＡ範囲＃ｎに適用される。ｎは、カラー管理コマンドによって指定可能な、ＬＢＡ範囲、カラー、ポリシーの組の最大数である。
【０１３９】
図１２は、カラー管理コマンドに応じてＳＳＤ３のコントローラ４によって生成されるカラーテーブル３３Ｅを示す。
【０１４０】
カラーテーブル３３Ｅの各エントリは、ＬＢＡ範囲フィールド、カラーフィールド、およびポリシーフィールドを含む。
【０１４１】
エントリ＃１においては、カラー管理コマンドによって指定されるＬＢＡ範囲＃１がＬＢＡ範囲フィールドに登録され、カラー管理コマンドによって指定されるＣｏｌｏｒ＃１がカラーフィールドに登録され、カラー管理コマンドによって指定されるＰｏｌｉｃｙ＃１がポリシーフィールドに登録される。
【０１４２】
エントリ＃２においては、カラー管理コマンドによって指定されるＬＢＡ範囲＃２がＬＢＡ範囲フィールドに登録され、カラー管理コマンドによって指定されるＣｏｌｏｒ＃２がカラーフィールドに登録され、カラー管理コマンドによって指定されるＰｏｌｉｃｙ＃２がポリシーフィールドに登録される。
【０１４３】
同様に、エントリ＃ｎにおいては、カラー管理コマンドによって指定されるＬＢＡ範囲＃ｎがＬＢＡ範囲フィールドに登録され、カラー管理コマンドによって指定されるＣｏｌｏｒ＃ｎがカラーフィールドに登録され、カラー管理コマンドによって指定されるＰｏｌｉｃｙ＃ｎがポリシーフィールドに登録される。
【０１４４】
図１３は、ＳＳＤ３のコントローラ４によって実行されるカラー割り当ておよびデータ書き込み処理シーケンスを示す。
【０１４５】
ここでは、ホスト２がカラー管理コマンドを使用してカラー及びポリシーを事前に指定し、そしてカラー及びポリシーを含まないライトコマンドをＳＳＤ３に送信する場合を想定する。
【０１４６】
ＳＳＤ３が、ホスト２からカラー管理コマンドを受信すると、コントローラ４は、カラーテーブル３３Ｅを作成する（ステップＳ３０１）。
【０１４７】
この後、ＳＳＤ３が、ホスト２からライトコマンドを受信すると、コントローラ４は、カラーテーブル３３Ｅと、ホスト２から受信されたライトコマンドに含まれる開始ＬＢＡとに基づいて、一つのベースカラー（一つのダイ集合）を選択する（ステップＳ３０２）。ステップＳ３０２では、コントローラ４は、カラーテーブル３３Ｅを参照して、開始ＬＢＡが属するＬＢＡ範囲に対応するカラーを特定し、この特定されたカラーに基づいて、一つのベースカラー（一つのダイ集合）を選択する。
【０１４８】
次いで、コントローラ４は、選択されたダイ集合に属するダイの状態を優先順位の高いダイから順に評価し、これによって、選択されたダイ集合から、ウェアレベリングまたは性能に関する条件を満たし且つより高い優先順位を有するダイを選択する（ステップＳ３０３）。次いで、コントローラ４は、この選択されたダイを、受信されたライトコマンドによって指定されるライトデータを書き込むべき書き込み先ダイとして決定する（ステップＳ３０４）。
【０１４９】
コントローラ４は、ライトデータを、書き込み先ダイとして決定されたダイに書き込む（ステップＳ３０５）。そして、コントローラ４は、ＬＵＴ３２を更新して、このライトデータのＬＢＡに、ライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５の記憶位置を示す物理アドレスをマッピングする（ステップＳ３０６）。
【０１５０】
図１４は、ダイ数が８、カラー分離数が８の場合の優先順位テーブル３３Ｃの例を示す。優先順位テーブル３３Ｃは、ベースカラー「０」〜「７」と、ベースカラー「０」〜「７」に対応する８つのダイ集合との間の関係を示す。
【０１５１】
優先順位テーブル３３Ｃにおいては、８つのベースカラー「０」、「１」、「２」、「３」、「４」、「５」、「６」、「７」に対して、８つの異なるダイ＃０、＃１、＃２、＃３、＃４、＃５、＃６、＃７が最高優先順位のダイとして割り当てられている。
【０１５２】
ベースカラー「０」においては、ダイ＃０、＃３、＃６、＃１、＃４、＃７、＃２、＃５の順で優先順位（書き込み優先順位）が下がるように、ベースカラー「０」に対応するダイ集合に関する優先順位（書き込み優先順位）が決定されている。
【０１５３】
ベースカラー「１」においては、ダイ＃１、＃４、＃７、＃２、＃５、＃０、＃３、＃６の順で優先順位（書き込み優先順位）が下がるように、ベースカラー「１」に対応するダイ集合に関する優先順位（書き込み優先順位）が決定されている。
【０１５４】
同様に、ベースカラー「７」においては、ダイ＃７、＃２、＃５、＃０、＃３、＃６、＃１、＃４の順で優先順位（書き込み優先順位）が下がるように、ベースカラー「７」に対応するダイ集合に関する優先順位（書き込み優先順位）が決定されている。
【０１５５】
具体的には、ベースカラー「０」に対応するダイ集合は、ダイ＃０、ダイ＃３、ダイ＃６、ダイ＃１、ダイ＃４、ダイ＃７、ダイ＃２、ダイ＃５を含む。左端のダイ＃０はこのダイ集合の最高優先順位のダイであり、右端のダイ＃５はこのダイ集合の最も低優先順位のダイである。このように、ダイ番号は、優先順位が１レベル低下する毎に３ずつ増加される。
【０１５６】
ベースカラー「１」に対応するダイ集合は、ダイ＃１、ダイ＃４、ダイ＃７、ダイ＃２、ダイ＃５、ダイ＃０、ダイ＃３、ダイ＃６を含む。左端のダイ＃１はこのダイ集合の最高優先順位のダイであり、右端のダイ＃６はこのダイ集合の最も低優先順位のダイである。
【０１５７】
ベースカラー「２」に対応するダイ集合は、ダイ＃２、ダイ＃５、ダイ＃０、ダイ＃３、ダイ＃６、ダイ＃１、ダイ＃４、ダイ＃７を含む。左端のダイ＃２はこのダイ集合の最高優先順位のダイであり、右端のダイ＃７はこのダイ集合の最も低優先順位のダイである。
【０１５８】
同様に、ベースカラー「３」〜「７」に対応するダイ集合の各々においても、優先順位順にダイの番号が配置されている。
【０１５９】
なお、図１４では、ダイ数が８、カラー分離数が８の優先順位テーブル３３Ｃを示したが、これに限定されない。例えば、カラー分離数はダイ数よりも小さい数であってもよい。
【０１６０】
図１５は、書き替え回数テーブル３３Ａの一例を示す。
【０１６１】
書き替え回数テーブル３３Ａは、ダイ＃０〜＃７の書き替え回数を管理するために使用される。ここでは、ダイ＃０、＃１、＃２、＃３、＃４、＃５、＃６、＃７それぞれの現在の書き替え回数が、９５２、９６３、１０３１、１０１２、１０４１、９９３、９６３、１０１７である場合が例示されている。
【０１６２】
図１６は、実行キュー状態テーブル３３Ｄの一例を示す。
【０１６３】
実行キュー状態テーブル３３Ｄは、各ダイの実行キュー状態を管理するために使用される。ここで、実行キュー状態は、各ダイに割り当てられている個々の処理の内容を示す。図中の「Ｒ」は、読み出し処理、「Ｗ」は書き込み処理、「Ｅ」は、消去処理を表す。
【０１６４】
ここでは、ダイ＃０については、未完了の処理が無い状態が示されている。ダイ＃１については、一つの読み出し処理が未完了である状態が示されている。ダイ＃２については、二つの読み出し処理が未完了である状態が示されている。ダイ＃３については、一つの読み出し処理と一つの書き込み処理が未完了である状態が示されている。ダイ＃４については、未完了の処理が無い状態が示されている。ダイ＃５については、一つの書き込み処理が未完了である状態が示されている。ダイ＃６については、一つの消去処理が未完了である状態が示されている。ダイ＃７については、一つの書き込み処理と一つの消去処理が未完了である状態が示されている。
【０１６５】
図１７は、重み付け結果テーブルの一例を示している。
【０１６６】
コントローラ４は、各ダイの実行キュー状態に基づいて、ダイ毎に、未完了処理の残数の重み付け結果を計算してもよい。図１７は、図１４の優先順位テーブル３３Ｃにおいてベースカラー「３」が選択され、各ダイの実行キュー状態が図１６の実行キュー状態テーブル３３Ｄで示された通りである場合の重み付け結果テーブルである。「Ｗｅｉｇｈｔ」は、コントローラ４によって計算された重み付け結果を表しており、「ｂｒｅａｋｄｏｗｎ」は、重み付け結果の計算過程を表す。
【０１６７】
ここで、重み付けには、優先順位によるものと、処理の種類によるものとがある。優先順位による重み付けでは、最も優先順位が高いダイの場合には重み値０、そこから優先順位が１つ下がる毎に３ずつ増やした重み値を用いる。例えば、優先順位が２位のダイであれば重み値３、３位のダイであれば重み値６を用いる。処理の種類による重み付けでは、読み出し処理に重み値１、書き込み処理に重み値１０、消去処理に重み値１００を用いる。
【０１６８】
「書き込み速度優先」のポリシーで書き込み先ダイを決定する場合において、ベースカラー「３」が選択された場合、コントローラ４は、ベースカラー「３」のダイ集合から最も書き込み速度の速いダイを選択する。優先順位テーブル３３Ｃが図１４に示す内容である場合、コントローラ４は、ダイ＃３、＃６、＃１、＃４、＃７、＃２、＃５、＃０の順で、これらダイの状態を評価する。
【０１６９】
すなわち、コントローラ４は、最初にベースカラー「３」のダイ集合の中で最も優先順位が高いダイ＃３の未完了処理の残数の重み付け結果を計算する。図１６によると、ダイ＃３の未完了処理には一つの書き込み処理と一つの読み出し処理とが含まれる。コントローラ４は、優先順位による重み値として０、書き込み処理の重み値として１０、読み出し処理の重み値として１を用いて、それらの和からダイ＃３の未完了処理の残数の重み付け結果を１１と算出する。
【０１７０】
次に、コントローラ４は、優先順位が２位のダイ＃６の未完了処理の残数の重み付け結果を、優先順位による重み値として３、消去処理の重み値として１００を用いて、１０３と算出する。
【０１７１】
次に、コントローラ４は、優先順位が３位のダイ＃１の未完了処理の残数の重みを、優先順位による重み付けとして「６」、読み出し処理の重み付けとして「１」を用いて、「７」と算出する。
【０１７２】
次に、コントローラ４は、優先順位が４位のダイ＃４の未完了処理の残数の重みを、優先順位による重み付けとして「９」を用いて、「９」と算出する。優先順位が５位以降の各ダイ＃の優先順位による重み付けは「１２」以上であるので、この時点で、ダイ＃１に関する未完了処理の残数の重みが最も小さいことが分かる。したがって、ダイ＃１が、最も書き込み速度の速いダイとして選択される。
【０１７３】
図１８のフローチャートは、ホスト２がカラーを指定した場合にＳＳＤ３によって実行される書き込み動作の手順を示す。
【０１７４】
以下では、優先順位テーブル３３Ｃが図１４のように規定され、書き替え回数テーブル３３Ａが図１５に示す内容であり、実行キュー状態テーブル３３Ｄが図１５に示す内容である場合を想定する。
【０１７５】
ＳＳＤ３がホスト２からライトコマンドを受信すると（ステップＳ４０１のＹＥＳ）、コントローラ４は、ライトコマンドによって指定されたカラーに基づいてベースカラーを選択する（ステップＳ４０２）。
【０１７６】
例えば、ライトコマンドによってカラー「１０５１」が指定された場合、コントローラ４は、ベースカラーとして「３」を選択する。それは、ＳＳＤ３のカラー分離数８でカラー「１０５１」を除した余りが「３」であるためである。以下では、ベースカラーとして「３」が選択されたとして説明する。
【０１７７】
続いて、コントローラ４は、ライトコマンドによってポリシーが指定されているか否かを判定する（ステップＳ４０３）。
【０１７８】
ライトコマンドによってポリシーが指定されているならば（ステップＳ４０３のＹＥＳ）、コントローラ４は、以下の処理を実行する。
【０１７９】
ライトコマンドによって指定されたポリシーが「ウェアレベリング優先」であった場合（ステップＳ４０４のＹＥＳ）、コントローラ４は、書き替え回数テーブル３３Ａと、好ましい書き替え回数とに基づいて、ベースカラー「３」のダイ集合からダイを選択する（ステップＳ４０５）。
【０１８０】
ここで、ウェアレベリングの条件が、例えば、
（１）最小の書き替え回数に対する最大許容差が１００
（２）好ましい許容差が３０
であったとする。コントローラ４は、図１５の書き替え回数テーブル３３Ａから、最小書き替え回数が９５２であると判定する。したがって、好ましい書き替え回数は、９８２（＝９５２＋３０）であり、最大書き替え回数は、１０５２（＝９５２＋１００）である。
【０１８１】
コントローラ４は、ベースカラー「３」のダイの集合の中の優先順位が高いダイから順に、その書き替え回数と、好ましい書き替え回数（９８２回）とを比較していく。本説明の例では、優先順位が１位のダイ＃３の書き替え回数（１０１２回）は、好ましい書き替え回数（９８２回）を上回っている。優先順位が２位のダイ＃６の書き替え回数（９６３回）は、好ましい書き替え回数（９８２回）以下である。このため、コントローラ４は、ダイ＃６を選択する。なお、コントローラ４は、ダイ＃６を選択した後、優先順位が３位以降のダイの書き替え回数と好ましい書き替え回数との比較は行わない。
【０１８２】
ライトコマンドによって指定されているポリシーが「ダイ位置優先」であった場合（ステップＳ４０４のＹＥＳ）、コントローラ４は、選択されたダイ集合内のダイそれぞれの書き替え回数を考慮して、ダイを選択する（ステップＳ４０７）。
【０１８３】
コントローラ４は、ベースカラー「３」の集合の中で優先順位が高いダイから順に、その書き替え回数と、最大書き替え回数とを比較していく。ここで、最大書き替え回数とは、上述したウェアレベリング条件から導かれるもので、本説明の例では、１０５２である。
【０１８４】
本説明の例では、優先順位が１位のダイ＃３の書き替え回数（１０１２）が最大書き替え回数（１０５２）以下であるため、コントローラ４は、ダイ＃３を選択する。
【０１８５】
ライトコマンドによって指定されているポリシーが「書き込み速度優先」であった場合（ステップＳ４０８のＹＥＳ）、コントローラ４は、実行キュー状態テーブル３３Ｄに基づいてダイを選択する（ステップＳ４０９）。
【０１８６】
実行キュー状態テーブル３３Ｄが図１６で示す通りである場合、コントローラ４は、ベースカラー「３」のダイ集合の中で優先順位が高いダイから順にダイの未完了処理の残数の重み付け結果を計算していく。その重み付け結果は、図１７で示す重み付け結果テーブルの通りである。重み付け結果が小さいとは、受信されたライトコマンドに対する応答速度がそれだけ速いことを意味している。図１７で示す重み付け結果テーブルによれば、計算した重み付け結果が最小のダイはダイ＃１である。このため、コントローラ４は、ダイ＃１を選択する。
【０１８７】
次に、ライトコマンドによってポリシーが指定されていない場合について説明する（ステップＳ４０３のＮＯ）。
【０１８８】
この場合、コントローラ４は、ポリシーとして「ウェアレベリング優先」が指定された場合と同じ方法でダイを選択してもよい（ステップＳ４０５）。なお、図１８では、ポリシーの指定がない場合に「ウェアレベリング優先」のポリシーに従ってダイを選択することにしたが、これに限定されない。ポリシーの指定がない場合に、「ダイ位置優先」、或いは「書き込み速度優先」のポリシーに従ってダイを選択することにしてもよい。
【０１８９】
続いて、コントローラ４は、選択したダイを書き込み先のダイとして決定し（ステップＳ４１０）、ライトコマンドによって指定されたライトデータを、この決定したダイに書き込む（ステップＳ４１１）。その後、コントローラ４は、ＬＵＴ３２を更新して、ライトデータのＬＢＡに、このライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５の記憶位置を示す物理アドレスをマッピングする（ステップＳ４１２）。
【０１９０】
次に、カラー管理コマンドの受信に応答してＳＳＤ３によって実行される書き込み動作を説明する。
【０１９１】
図１９のフローチャートは、ホスト２からのカラー管理コマンドの受信時にＳＳＤ３によって実行される書き込み動作の手順を示す。
【０１９２】
ＳＳＤ３がホスト２からカラー管理コマンドを受信すると（ステップＳ５０のＹＥＳ）、コントローラ４は、以下の手順でカラーテーブル３３Ｅを作成する。
【０１９３】
まず、コントローラ４は、変数Ｋに「１」を代入し（ステップＳ５０２）、カラー管理コマンド内のＬＢＡ範囲＃Ｋをカラーテーブル３３Ｅのエントリ＃ＫのＬＢＡ範囲フィールドに登録する（ステップＳ５０３）。なお、Ｋがとりうる範囲は、１≦Ｋ≦ｎである。ｎは、カラー管理コマンドによって指定可能な、ＬＢＡ範囲、カラー、ポリシーの組の最大数である。
【０１９４】
次に、コントローラ４は、カラー管理コマンド内のカラー＃Ｋをカラーテーブル３３Ｅのエントリ＃Ｋのカラーフィールドに登録する（ステップＳ５０４）。
【０１９５】
続いて、コントローラ４は、カラー管理コマンド内のポリシー＃Ｋをカラーテーブル３３Ｅのエントリ＃Ｋのポリシーフィールドに登録する（ステップＳ５０５）。なお、カラー管理コマンドにポリシー指定がない場合、カラーテーブル３３Ｅのポリシーフィールドは、空白となる。
【０１９６】
ステップＳ５０５の処理が終わると、カラーテーブル３３Ｅのエントリ＃Ｋのすべてのフィールドが登録済みの状態になる。
【０１９７】
次に、コントローラ４は、現在の変数Ｋがｎであるか否かを確認し、Ｋがｎでない場合（ステップＳ５０６のＮＯ）、Ｋに「Ｋ＋１」を代入し（ステップＳ５０７）、ステップＳ５０３〜Ｓ５０５の処理を実行する。ステップＳ５０３〜Ｓ５０７の処理は、カラー管理コマンド内のすべてのＬＢＡ範囲、カラー、ポリシーがカラーテーブル３３Ｅに登録されるまで実行される。
【０１９８】
コントローラ４は、Ｓ５０３〜Ｓ５０７の処理を繰り返し、Ｋ＝ｎであることを確認した場合（ステップＳ５０６のＹＥＳ）、カラーテーブル３３Ｅの作成の処理を終える。このようにして、コントローラ４は、カラーテーブル３３Ｅを作成する。
【０１９９】
図２０のフローチャートは、ホストからのカラー管理コマンドの処理の完了後に通常のライトコマンドが受信された場合にＳＳＤ３によって実行される書き込み動作の手順を示す。ここで、ステップＳ４０１、ステップＳ４０３〜Ｓ４１２の処理は、図１８と同様の処理である。
【０２００】
なお、図２０で示す書き込み動作の前処理として、図１９で示したカラーテーブル３３Ｅを作成する処理が既に行われているものとする。
【０２０１】
ホスト２からのライトコマンドをＳＳＤ３が受信すると（ステップＳ４０１のＹＥＳ）、コントローラ４は、カラーテーブル３３Ｅと、ライトコマンドに含まれる開始ＬＢＡとに基づいてベースカラーを決定する（ステップＳ６０２）。ステップＳ６０２では、コントローラ４は、ライトコマンドに含まれる開始ＬＢＡが、事前に作成されたカラーテーブル３３Ｅに登録されたＬＢＡ範囲の中のいずれに属するかを判定する。例えば、開始ＬＢＡが例えばＬＢＡ範囲＃１に属する場合、コントローラ４は、ＬＢＡ範囲＃１に対応するカラー＃１に基づき、ベースカラーを選択する。例えば、カラー＃１が整数値「１０５１」を示すならば、コントローラ４は、ベースカラーとして「３」を選択する。それは、図１８の動作と同様に、「１０５１」をカラー分離数８で除した余りが「３」であるからである。
【０２０２】
コントローラ４は、ベースカラーを選択した後、図１８で説明したステップＳ４０３〜Ｓ４１２の処理を実行する。
【０２０３】
図２１は、ホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０２０４】
この情報処理装置は、サーバ（例えばストレージサーバ）のようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２０５】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ４１、ＯＳ４２、ファイルシステム４３、およびカラー指定部４４を含む。
【０２０６】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２０７】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２０８】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続される。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０２０９】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボード（ＫＢ）などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０２１０】
図２２は、複数のＳＳＤ３とホスト２とを含む情報処理装置（コンピューティングデバイス）の構成例を示す。
【０２１１】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されても良い。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２１２】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２１３】
以上説明したように、本実施形態によれば、複数の不揮発性メモリダイは、優先順位が付けられた複数の不揮発性メモリダイを各々が含む複数のダイ集合として管理される。そして、ホスト２から受信されるカラー（論理的な書き込み先のダイを指定する識別子）に基づいて、複数のダイ集合から一つのダイ集合が選択される。さらに、選択されたダイ集合内のダイの優先順位付けに基づいて、この選択されたダイ集合から不揮発性メモリダイが選択され、そして選択された不揮発性メモリダイが、ホスト２から受信されるライトデータを書き込むべき書き込み先のダイとして決定される。
【０２１４】
よって、時間の経過に伴って、書き込み先ダイとして使用されるダイを、選択されたダイ集合内のダイに渡って徐々に分散することができる。この結果、たとえホスト２が特定のカラーに偏った書き込みを行った場合でも、このカラーに対応するダイ集合内のダイ間に書き込みを分散させることができ、ＳＳＤ３の寿命を維持することができる。
【０２１５】
また、異なるカラーが指定された場合には異なるダイ集合が選択される。よって、ホスト２が特定のカラーに偏らない書き込みを行う限り、ダイ衝突が発生する確率を下げることが可能となる。
【０２１６】
よって、ＳＳＤ３の寿命を短くすることなくＳＳＤ３の性能を改善することができる。
【０２１７】
なお、本実施形態では、カラー分離数とホスト２が指定可能なカラーの数とが互いに異なる場合を主に説明したが、ホスト２が指定可能なカラーの数は、カラー分離数と同じ出あっても良い。この場合、ＳＳＤ３のコントローラ４は、例えば、ホスト２からの要求に応じて、カラー分離数をホスト２に通知してもよい。これにより、ホスト２は、指定可能なカラーの数を、このカラー分離数に一致させることが可能となる。
【０２１８】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２１９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２２０】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト動作制御部、２２…リード動作制御部、２３…カラーリング制御部。
【図１】
2018073038.tif 000003
【図２】
2018073038.tif 000004
【図３】
2018073038.tif 000005
【図４】
2018073038.tif 000006
【図５】
2018073038.tif 000007
【図６】
2018073038.tif 000008
【図７】
2018073038.tif 000009
【図８】
2018073038.tif 000010
【図９】
2018073038.tif 000011
【図１０】
2018073038.tif 000012
【図１１】
2018073038.tif 000013
【図１２】
2018073038.tif 000014
【図１３】
2018073038.tif 000015
【図１４】
2018073038.tif 000016
【図１５】
2018073038.tif 000017
【図１６】
2018073038.tif 000018
【図１７】
2018073038.tif 000019
【図１８】
2018073038.tif 000020
【図１９】
2018073038.tif 000021
【図２０】
2018073038.tif 000022
【図２１】
2018073038.tif 000023
【図２２】
2018073038.tif 000024