(57)【要約】  本発明の一実施形態は、コントローラとソリッドステートディスクとを備えた記憶システムを提供する。ソリッドステートディスクは複数のチャネルを含み、各チャネルは複数のダイに接続される。コントローラは、予め複数のセグメントを作成し、複数のダイから第1のダイを選択し、複数のセグメントから第1のセグメントを選択し、第1のセグメントの使用可能なオフセットを判定し、書き込み要求を生成し、書き込み要求は、書き込みアドレス、目標データ、および目標データのデータ長を含み、書き込みアドレスは、第1のダイに接続されたチャネルの識別子、第1のダイの識別子、第1のセグメントの識別子、および使用可能なオフセットを含み、ソリッドステートディスクに書き込み要求を送信する。ソリッドステートディスクは、書き込み要求を受信し、書き込みアドレスおよびデータ長に従って、目標データを記憶する。本発明によって提供される記憶システムでは、コントローラは、ソリッドステートディスクの記憶空間を効果的に使用することができる。
2019508765.tif 000002
【特許請求の範囲】
【請求項１】
記憶システムであって、前記記憶システムはコントローラとソリッドステートディスクとを備え、前記コントローラは前記ソリッドステートディスクと通信することができ、前記ソリッドステートディスクは複数のチャネルを含み、前記複数のチャネルのそれぞれは複数のダイに接続され、
前記コントローラは、複数のセグメントを作成し、前記複数のダイから第1のダイを選択し、前記複数のセグメントから第1のセグメントを選択し、前記第1のセグメントの使用可能なオフセットを判定し、書き込み要求を生成し、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、前記第1のダイに接続されたチャネルの識別子、前記第1のダイの識別子、前記第1のセグメントの識別子、および前記使用可能なオフセットを含み、前記ソリッドステートディスクに前記書き込み要求を送信するように構成され、
前記ソリッドステートディスクは、前記書き込み要求を受信し、前記書き込みアドレスおよび前記目標データの前記データ長に従って、前記目標データを記憶するように構成される、
記憶システム。
【請求項２】
前記コントローラは、前記複数のダイの状態を記録するようにさらに構成され、
前記コントローラは、前記複数のダイからステートレスダイを前記第1のダイとして選択するように特に構成される、
請求項1に記載の記憶システム。
【請求項３】
前記コントローラは、前記目標データのホスト論理ブロックアドレスに基づいて前記目標データのアクセス頻度を判定するようにさらに構成され、
前記目標データの前記アクセス頻度がアクセス頻度閾値よりも大きい場合、前記コントローラは、前記アクセス頻度閾値よりもアクセス頻度が大きい、記憶されるデータ量が第1の閾値未満であるダイを前記第1のダイとして選択するように特に構成される、
請求項1に記載の記憶システム。
【請求項４】
前記コントローラは、前記複数のダイのそれぞれに記憶された有効データ量を記録するようにさらに構成され、
前記コントローラは、有効データ量が第2の閾値未満であるダイを前記第1のダイとして選択するように特に構成される、
請求項1に記載の記憶システム。
【請求項５】
前記コントローラは、前記複数のダイのそれぞれの疲弊度を記録するようにさらに構成され、
前記コントローラは、疲弊度が疲弊度閾値未満であるダイを前記第1のダイとして選択するように特に構成される、
請求項1に記載の記憶システム。
【請求項６】
前記コントローラは、前記複数のダイのそれぞれで処理される読み出し要求の量を記録するようにさらに構成され、
前記コントローラは、処理される読み出し要求がないダイを前記第1のダイとして選択する、または処理される読み出し要求の量が第3の閾値未満であるダイを前記第1のダイとして選択するように特に構成される、
請求項1に記載の記憶システム。
【請求項７】
前記コントローラは、特定のセグメントが前記第1のダイに既に割り当てられ、使用可能な記憶空間を有する場合、前記特定のセグメントを前記第1のセグメントとして選択する、または前記複数のセグメントからブランクセグメントを前記第1のセグメントとして選択するように特に構成される、請求項1から6のいずれか一項に記載の記憶システム。
【請求項８】
前記コントローラは、マッピング関係を生成し、前記マッピング関係は、前記目標データの前記ホスト論理ブロックアドレスと、前記第1のダイに接続された前記チャネル、前記第1のダイ、前記第1のセグメント、および前記使用可能なオフセットと、の間のマッピングを記録するように構成され、前記マッピング関係をシステムマッピングテーブルに記憶するようにさらに構成される、請求項1から7のいずれか一項に記載の記憶システム。
【請求項９】
前記ソリッドステートディスクは、
前記書き込みアドレスに含まれた前記第1のセグメントの前記識別子および前記使用可能なオフセットに従って、ローカルマッピングテーブルに問い合わせし、前記ローカルマッピングテーブルは、前記ソリッドステートディスクのセグメントと物理ブロックアドレスとの間のマッピング関係を記憶するように構成され、前記ローカルマッピングテーブルに前記第1のセグメントに対応するブロックが記録されている場合、前記書き込みアドレスに含まれた前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブロックに書き込む
ように特に構成される、さもなければ
前記第1のダイに接続された前記チャネルの前記識別子と前記第1のダイの前記識別子とに基づいて、前記第1のダイの複数のブロックからブランクブロックを選択し、前記書き込みアドレスに含まれる前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブランクブロックに書き込む
ように特に構成される、請求項1に記載の記憶システム。
【請求項１０】
前記ソリッドステートディスクは、新しいマッピング関係を生成し、前記新しいマッピング関係は、前記第1のセグメントと前記ブランクブロックとの間のマッピングを記録するように構成され、前記新しいマッピング関係を前記ローカルマッピングテーブルに記憶するようにさらに構成される、請求項9に記載の記憶システム。
【請求項１１】
記憶システムであって、前記記憶システムはコントローラとソリッドステートディスクとを備え、前記コントローラは前記ソリッドステートディスクと通信することができ、前記ソリッドステートディスクは複数のチャネルを含み、前記複数のチャネルのそれぞれは複数のダイに接続され、
前記コントローラは、複数のセグメントを作成し、前記複数のダイから第1のダイを選択し、前記複数のセグメントから第1のセグメントを選択し、前記第1のセグメントの使用可能なオフセットを判定し、書き込み要求を生成し、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、前記第1のセグメントの識別子および前記使用可能なオフセットを含み、前記第1のセグメントの前記識別子は、前記第1のダイの識別子および前記第1のダイに接続されたチャネルの識別子を含み、前記第1のダイが属する前記ソリッドステートディスクに前記書き込み要求を送信するように構成され、
前記ソリッドステートディスクは、前記書き込み要求を受信し、前記書き込みアドレスおよび前記目標データの前記データ長に従って、前記目標データを記憶するように構成される、
記憶システム。
【請求項１２】
前記コントローラは、前記複数のダイの状態を記録するようにさらに構成され、
前記コントローラは、前記複数のダイからステートレスダイを前記第1のダイとして選択するように特に構成される、
請求項11に記載の記憶システム。
【請求項１３】
前記コントローラは、前記目標データのホスト論理ブロックアドレスに基づいて前記目標データのアクセス頻度を判定するようにさらに構成され、前記目標データの前記アクセス頻度がアクセス頻度閾値よりも大きい場合、
前記コントローラは、前記アクセス頻度閾値よりもアクセス頻度が大きい、記憶されるデータ量が第1の閾値未満であるダイを前記第1のダイとして選択するように特に構成される
請求項11に記載の記憶システム。
【請求項１４】
前記コントローラは、前記複数のダイのそれぞれに記憶された有効データ量を記録するようにさらに構成され、
前記コントローラは、有効データ量が第2の閾値未満であるダイを前記第1のダイとして選択するように特に構成される、
請求項11に記載の記憶システム。
【請求項１５】
前記コントローラは、前記複数のダイのそれぞれの疲弊度を記録するようにさらに構成され、
前記コントローラは、疲弊度が疲弊度閾値未満であるダイを前記第1のダイとして選択するように特に構成される、
請求項11に記載の記憶システム。
【請求項１６】
前記コントローラは、前記複数のダイのそれぞれで処理される読み出し要求の量を記録するようにさらに構成され、
前記コントローラは、処理される読み出し要求がないダイを前記第1のダイとして選択する、または処理される読み出し要求の量が第3の閾値未満であるダイを前記第1のダイとして選択するように特に構成される、
請求項11に記載の記憶システム。
【請求項１７】
前記コントローラは、マッピング関係を生成し、前記マッピング関係は、前記目標データのホスト論理ブロックアドレスと、前記第1のセグメントおよび前記使用可能なオフセットと、の間のマッピングを記録するように構成され、前記マッピング関係をシステムマッピングテーブルに記憶するようにさらに構成される、請求項11に記載の記憶システム。
【請求項１８】
前記ソリッドステートディスクは、
前記書き込みアドレスに含まれた前記第1のセグメントの前記識別子および前記使用可能なオフセットに従って、ローカルマッピングテーブルに問い合わせし、前記ローカルマッピングテーブルは、前記ソリッドステートディスクのセグメントと物理ブロックアドレスとの間のマッピング関係を記憶するように構成され、
前記ローカルマッピングテーブルに前記第1のセグメントに対応するブロックが記録されている場合、前記書き込みアドレスに含まれた前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブロックに書き込むように特に構成される、さもなければ
前記第1のセグメントの前記識別子を解析して、前記第1のダイに接続された前記チャネルの前記識別子および前記第1のダイの前記識別子を取得し、前記第1のダイに接続された前記チャネルの前記識別子と前記第1のダイの前記識別子とに基づいて、前記第1のダイの複数のブロックからブランクブロックを選択し、前記書き込みアドレスに含まれる前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブランクブロックに書き込むように特に構成される、
請求項11に記載の記憶システム。
【請求項１９】
ソリッドステートディスクであって、前記ソリッドステートディスクは、プロセッサ、メモリ、通信インターフェース、および複数のチャネルを含み、前記プロセッサおよび前記メモリは、前記複数のチャネルのそれぞれを介して、複数のダイにそれぞれ接続され、前記複数のダイのそれぞれが複数のブロックを含み、前記プロセッサ、前記メモリ、および前記通信インターフェースが互いに通信することができ、
前記通信インターフェースは、書き込み要求を受信するように構成され、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、第1のダイの識別子、前記第1のダイに接続されたチャネルの識別子、第1のセグメントの識別子、および使用可能なオフセットを含み、
前記メモリは、ローカルマッピングテーブルを記憶するように構成され、前記ローカルマッピングテーブルは、セグメントと前記ソリッドステートディスクの物理ブロックアドレスとの間のマッピング関係を記録するように構成され、
前記プロセッサは、前記書き込みアドレスに含まれた前記第1のセグメントの前記識別子および前記使用可能なオフセットに従って、前記ローカルマッピングテーブルに問い合わせし、前記ローカルマッピングテーブルに前記第1のセグメントに対応するブロックが記録されている場合、前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブロックに書き込むように構成される、さもなければ、前記第1のダイに接続された前記チャネルの前記識別子と前記第1のダイの前記識別子とに基づいて、前記第1のダイの複数のブロックからブランクブロックを選択し、前記書き込みアドレスに含まれる前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブランクブロックに書き込むように構成される、
ソリッドステートディスク。
【請求項２０】
前記プロセッサは、新しいマッピング関係を生成し、前記新しいマッピング関係は、前記第1のセグメントと前記ブランクブロックとの間のマッピングを記録するように構成され、前記新しいマッピング関係を前記ローカルマッピングテーブルに記憶するようにさらに構成される、請求項19に記載のソリッドステートディスク。
【請求項２１】
ソリッドステートディスクであって、前記ソリッドステートディスクは、プロセッサ、メモリ、通信インターフェース、および複数のチャネルを含み、前記プロセッサおよび前記メモリは、前記複数のチャネルのそれぞれを介して、複数のダイにそれぞれ接続され、前記複数のダイのそれぞれが複数のブロックを含み、前記プロセッサ、前記メモリ、および前記通信インターフェースが互いに通信することができ、
前記通信インターフェースは、書き込み要求を受信するように構成され、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、第1のセグメントの識別子および使用可能なオフセットを含み、前記第1のセグメントの前記識別子は、第1のダイの識別子および前記第1のダイに接続されたチャネルの識別子を運び、
前記メモリは、ローカルマッピングテーブルを記憶するように構成され、前記ローカルマッピングテーブルは、セグメントと前記ソリッドステートディスクの物理ブロックアドレスとの間のマッピング関係を記録するように構成され、
前記プロセッサは、前記書き込みアドレスに含まれた前記第1のセグメントの前記識別子および前記使用可能なオフセットに従って、前記ローカルマッピングテーブルに問い合わせし、前記ローカルマッピングテーブルに前記第1のセグメントに対応するブロックが記録されている場合、前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブロックに書き込むように構成される、さもなければ
前記第1のセグメントの前記識別子を解析して、前記第1のダイの前記識別子および前記第1のダイに接続された前記チャネルの前記識別子を取得し、前記第1のダイに接続された前記チャネルの前記識別子と前記第1のダイの前記識別子とに基づいて、前記第1のダイの複数のブロックからブランクブロックを選択し、前記書き込みアドレスに含まれる前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブランクブロックに書き込むように構成される、
ソリッドステートディスク。
【請求項２２】
前記プロセッサは、新しいマッピング関係を生成し、前記新しいマッピング関係は、前記第1のセグメントと前記ブランクブロックとの間のマッピングを記録するように構成され、前記新しいマッピング関係を前記ローカルマッピングテーブルに記憶するようにさらに構成される、請求項21に記載のソリッドステートディスク。
【請求項２３】
ソリッドステートディスクにデータを書き込むための方法であって、前記方法は、記憶システムに適用可能であり、前記記憶システムはコントローラと前記ソリッドステートディスクとを備え、前記コントローラは前記ソリッドステートディスクと通信することができ、前記ソリッドステートディスクは複数のチャネルを含み、前記複数のチャネルのそれぞれは複数のダイに接続され、前記コントローラは、予め複数のセグメントを作成し、前記方法は、
前記コントローラによって、前記複数のダイから第1のダイを選択するステップと、
前記コントローラによって、前記複数のセグメントから第1のセグメントを選択し、前記第1のセグメントの使用可能なオフセットを判定するステップと、
前記コントローラによって、書き込み要求を生成するステップであって、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、前記第1のダイに接続されたチャネルの識別子、前記第1のダイの識別子、前記第1のセグメントの識別子、および前記使用可能なオフセットを含む、ステップと、
前記コントローラによって、前記ソリッドステートディスクに前記書き込み要求を送信するステップと、
を含む、方法。
【請求項２４】
前記第1のダイがステートレスダイである、請求項23に記載の方法。
【請求項２５】
前記コントローラは、前記目標データのホスト論理ブロックアドレスに基づいて前記目標データのアクセス頻度を判定し、
前記目標データの前記アクセス頻度がアクセス頻度閾値よりも大きい場合、前記第1のダイに記憶され、かつ前記アクセス頻度閾値よりもアクセス頻度が大きい、データ量が第1の閾値未満である、
請求項23に記載の方法。
【請求項２６】
前記第1のダイに記憶された有効データの量が第2の閾値未満である、請求項23に記載の方法。
【請求項２７】
前記第1のダイの疲弊度が疲弊度閾値未満である、請求項23に記載の方法。
【請求項２８】
前記第1のダイには処理される読み出し要求がない、または前記第1のダイにおける処理される読み出し要求の量が第3の閾値未満である、請求項23に記載の方法。
【請求項２９】
前記第1のセグメントがブランクセグメントである、請求項23に記載の方法。
【請求項３０】
前記第1のセグメントは既に前記第1のダイに割り当てられ、前記第1のセグメントには使用可能な空間がある、請求項23に記載の方法。
【請求項３１】
前記方法は、
前記コントローラによって、マッピング関係を生成するステップであって、前記マッピング関係は、前記目標データのホスト論理ブロックアドレスと、前記第1のダイに接続された前記チャネル、前記第1のダイ、前記第1のセグメント、および前記使用可能なオフセットと、の間のマッピングを記録するように構成される、ステップと、
前記マッピング関係をシステムマッピングテーブルに記憶するステップと、
をさらに含む、請求項23に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、記憶技術の分野に関し、特に、記憶システムおよびソリッドステートディスクに関する。
【背景技術】
【０００２】
フラッシュアレイは、ソリッドステートディスクと、コントローラと、を含む記憶システムである。コントローラは、ソリッドステートディスクの記憶空間をセグメント（segment）の形で管理する。セグメントは、連続する論理ブロックアドレスのセグメントがコントローラによって割り当てられた領域であり、セグメントは、ソリッドステートディスク上の連続する論理ブロックアドレスのセグメントにマッピングされ得る。コントローラは、ホストからの書き込み要求を受け取った後、書き込み要求にセグメントを割り当て、割り当てられたセグメントに基づいて新しい書き込み要求を生成し、新しい書き込み要求は、書き込まれるデータと、ソリッドステートディスクのものであり、かつ割り当てられたセグメントに対応する論理ブロックアドレスと、を運び、次いで、ソリッドステートディスクに新しい書き込み要求を送信する。ソリッドステートディスクは、コントローラからの新しい書き込み要求を受信した後、ソリッドステートディスクのポリシーに基づいて物理記憶リソースを選択し、新しい書き込み要求において運ばれたデータを物理記憶リソースに書き込み、次いで、ソリッドステートディスクの論理ブロックアドレスと物理記憶リソースとの間のマッピング関係を記録し、記録されたマッピング関係は、後続のデータ問い合わせの基礎として使用される。
【０００３】
ソリッドステートディスクによる物理記憶リソースの選択プロセスは、ソリッドステートディスクのポリシーに完全に基づいており、コントローラには透明であるため、コントローラがソリッドステートディスクの記憶空間を効果的に使用できないという問題が発生する場合がある。
【発明の概要】
【０００４】
本発明の実施形態は、ソリッドステートディスクの記憶空間をより効果的かつ適切に使用するための記憶システムおよびソリッドステートディスクを提供する。
【課題を解決するための手段】
【０００５】
第1の実施態様によれば、本発明の一実施形態は記憶システムを提供し、記憶システムはコントローラとソリッドステートディスクとを備え、コントローラはソリッドステートディスクと通信することができ、ソリッドステートディスクは複数のチャネルを含み、複数のチャネルのそれぞれは複数のダイに接続され、コントローラは、予め複数のセグメントを作成し、複数のダイから第1のダイを選択し、複数のセグメントから第1のセグメントを選択し、第1のセグメントの使用可能なオフセットを判定し、書き込み要求を生成し、書き込み要求は、書き込みアドレス、目標データ、および目標データのデータ長を含み、書き込みアドレスは、第1のダイに接続されたチャネルの識別子、第1のダイの識別子、第1のセグメントの識別子、および使用可能なオフセットを含み、目標データはソリッドステートディスクに書き込まれるデータであり、ソリッドステートディスクに書き込み要求を送信するように構成され、
ソリッドステートディスクは、書き込み要求を受信し、書き込みアドレスおよび目標データのデータ長に従って、目標データを記憶するように構成される。
【０００６】
本発明の本実施形態では、コントローラは、第1のダイを選択する前に、ホストからの1つ以上のホスト書き込み要求を受信し、各ホスト書き込み要求は、ホスト論理ブロックアドレス、データ、およびデータ長を運び、ホスト論理ブロックアドレスは、ホストがデータを書き込むための開始論理アドレスであり、データは、記憶システムに書き込まれるデータであり、データ長は、データの長さを識別するために使用される。コントローラは、データをキャッシュすることができ、ソリッドステートディスクのページの容量を単位として使用して、ホスト書き込み要求で運ばれたデータの分割および／または結合動作をさらに行って、複数の単位長のデータブロックを生成できる。コントローラは、ホスト書き込み要求を受信した直後に第1のダイを選択するステップを行ってもよいし、第1の条件が満たされた場合に第1のダイを選択するステップを行うことを開始してもよい。第1の条件は、キャッシュされたデータのデータ長が指定された閾値よりも大きいことであってもよいし、コントローラが新しいデータ書き込みサイクルに入ることであってもよい。
【０００７】
第1のダイを選択する前に、コントローラは、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長をさらにまず判定してもよい。目標データは、受信した1つ以上のホスト書き込み要求で運ばれたデータのすべてまたは一部であってもよく、例えば、単位長データブロックのうちの1つ以上であってもよい。具体的な数量は、コントローラによって柔軟に設定することができる。あるいは、コントローラは、第1のセグメントおよび使用可能なオフセットを選択した後に使用可能なオフセットに従って、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長を判定してもよい。ここで、データ長は、第1のセグメントの使用可能な記憶空間のサイズ未満であるべきであり、使用可能なオフセットに基づいて判定され、目標データは、単位長データブロックのうちの1つ以上であってもよい。
【０００８】
第1の実施態様に関連して、第1の実施態様の第1の実装では、コントローラは、複数のダイの状態を記録するようにさらに構成され、コントローラは、複数のダイからステートレスダイを第1のダイとして選択するように特に構成される。
【０００９】
第1の実施態様または第1の実施態様の第1の実装に関連して、第1の実施態様の第2の実装では、コントローラは、目標データのホスト論理ブロックアドレスに基づいて目標データのアクセス頻度を判定するようにさらに構成され、目標データのアクセス頻度がアクセス頻度閾値よりも大きい場合、コントローラは、アクセス頻度閾値よりもアクセス頻度が大きい、含まれるデータ量が第1の閾値未満であるダイを第1のダイとして選択するように特に構成される。
【００１０】
場合により、コントローラは、上述の分割および／または結合動作を行うことによって取得された各単位長データブロックのホスト論理ブロックアドレスに基づいて、各データのアクセス頻度を判定するアクセス頻度テーブルに問い合わせるようにさらに構成され、各データブロックがホットデータであるかコールドデータであるかを問い合わせ結果から識別することができる。次いで、コントローラは、コールドおよびホットデータ分布テーブルに問い合わせし、各ダイに現在既に記憶され、かつコールドおよびホットデータ分布テーブルに記録された、ホットデータの量を第1の閾値と比較し、ホットデータの量が第1の閾値未満であるダイからのダイを第1のダイとして選択し、第1のダイは、ホットデータとして識別される単位長データブロックのうちに1つ以上を記憶するために使用され得る。場合により、複数のダイに現在記憶されているホットデータの量がすべて第1の閾値未満であることが分かった場合、コントローラは、最も少ない量のホットデータを現在記憶しているダイを第1のダイとして選択することができる。場合により、複数のダイに現在記憶されているホットデータの量が第1の閾値未満であることが分かった場合、コントローラはまた、第1の実施態様の上述の第1の実装、または後述する第1の実施態様の第3、第4、もしくは第5の実装のいずれか1つ以上をさらに参照することによって、複数のダイから第1のダイを選択できる。場合により、複数の第1のダイも選択することができ、各第1のダイは、ホットデータである複数の単位長データブロックのいくつかを記憶するために使用される。
【００１１】
第1の実施態様または第1の実施態様の上述の実装のいずれか1つに関連して、第1の実施態様の第3の実装では、コントローラは、複数のダイのそれぞれに記憶された有効データ量を記録するようにさらに構成され、コントローラは、有効データ量が第2の閾値未満であるダイを第1のダイとして選択するように特に構成される。
【００１２】
第1の実施態様または第1の実施態様の上述の実装のいずれか1つに関連して、第1の実施態様の第4の実装では、コントローラは、複数のダイのそれぞれの疲弊度を記録するようにさらに構成され、コントローラは、疲弊度が疲弊度閾値未満のダイを第1のダイとして選択するように特に構成される。
【００１３】
第1の実施態様または第1の実施態様の第1から第4の実装のいずれか1つに関連して、第1の実施態様の第5の実装では、コントローラは、複数のダイのそれぞれで処理される読み出し要求の量を記録するようにさらに構成され、コントローラは、処理される読み出し要求がないダイを第1のダイとして選択する、または処理される読み出し要求の量が第3の閾値未満であるダイを第1のダイとして選択するように特に構成される。
【００１４】
第1の実施態様または第1の実施態様の上述の実装のいずれか1つに関連して、第1の実施態様の第6の実装では、コントローラは、特定のセグメントが第1のダイに既に割り当てられ、使用可能な記憶空間を有する場合、特定のセグメントを第1のセグメントとして選択する、または複数のセグメントからブランクセグメントを第1のセグメントとして選択するように特に構成される。
【００１５】
場合により、コントローラが、第1のセグメントを選択し、使用可能なオフセットを判定した後に、使用可能なオフセットに基づいて目標データおよびデータ長を判定することは、具体的には、使用可能なオフセットに基づいて、第1のセグメントにおける現在の残りの使用可能な記憶空間を判定するステップであって、書き込み要求における目標データの長さは、残りの使用可能な記憶空間のサイズを超えることはできない、ステップと、判定されたデータ長に基づいて目標データを選択するステップであって、目標データは、単位長データブロックのうちの1つ以上であり得る、ステップと、である。
【００１６】
場合により、上述したように、目標データおよび目標データのデータ長はまた、第1のダイを選択する前にコントローラによって判定されてもよい。この場合、コントローラは、書き込み要求を生成する前に、目標データの判定されたデータ長と、第1のセグメントの使用可能なオフセットに基づいて判定される第1のセグメントの使用可能な記憶空間と、をまず比較してもよい。目標データのデータ長が第1のセグメントの使用可能な記憶空間のサイズ未満である場合、目標データおよび目標データのデータ長は直接書き込み要求に含められる。目標データのデータ長が第1のセグメントの使用可能な記憶空間のサイズよりも大きい場合、コントローラは、第1のセグメントの使用可能な記憶空間のサイズに従って、目標データを2つのサブブロックに分割する必要があり、第1のサブブロックのデータ長は、第1のセグメントの使用可能な記憶空間のサイズ以下であり、第2のサブブロックは、目標データにおける第1のサブブロック以外の残りの部分である。この場合、コントローラは、書き込み要求を生成する際に、分割により取得された第1のサブブロックおよび第1のサブブロックの対応するデータ長を、それぞれ、目標データおよび目標データのデータ長として、書き込み要求に含める。第2のサブブロックについては、第1のセグメントを選択し、使用可能なオフセットを判定するステップと、書き込み要求を生成するステップとを繰り返し行うことができる、または場合により、第1のダイを選択し、第1のセグメントを選択し、使用可能なオフセットを確認するステップと、書き込み要求を生成するステップと、を繰り返し行うことができる。
【００１７】
第1の実施態様または第1の実施態様の上述の実装のいずれか1つに関連して、第1の実施態様の第7の実装では、コントローラは、マッピング関係を生成し、マッピング関係は、目標データのホスト論理ブロックアドレスと、第1のダイに接続されたチャネル、第1のダイ、第1のセグメント、および使用可能なオフセットと、の間のマッピングを記録するように構成され、マッピング関係をシステムマッピングテーブルに記憶するようにさらに構成される。
【００１８】
第1の実施態様または第1の実施態様の上述の実装のいずれか1つに関連して、第1の実施態様の第8の実装では、ソリッドステートディスクは、書き込みアドレスに含まれた第1のセグメントの識別子および使用可能なオフセットに従って、ローカルマッピングテーブルに問い合わせし、ローカルマッピングテーブルは、ソリッドステートディスクのセグメントと物理ブロックアドレスとの間のマッピング関係を記憶するように構成され、ローカルマッピングテーブルに第1のセグメントに対応するブロックが記録されている場合、書き込みアドレスに含まれた使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブロックに書き込むように特に構成される、さもなければ、第1のダイに接続されたチャネルの識別子と第1のダイの識別子とに基づいて、第1のダイの複数のブロックからブランクブロックを選択し、書き込みアドレスに含まれる使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブランクブロックに書き込むように特に構成される。
【００１９】
第1の実施態様の第8の実装に関連して、第1の実施態様の第9の実装では、ソリッドステートディスクは、新しいマッピング関係を生成し、新しいマッピング関係は、第1のセグメントとブランクブロックとの間のマッピングを記録するように構成され、新しいマッピング関係をローカルマッピングテーブルに記憶するようにさらに構成される。
【００２０】
場合により、ローカルマッピングテーブルは、多次元アレイのローカルマッピングテーブルであってもよいし、複数のレベルのローカルマッピングテーブルであってもよい。
【００２１】
場合により、ローカルマッピングテーブルはまた、「セグメント＋使用可能なオフセット」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピング関係を記憶することができ、ソリッドステートディスクの物理ブロックアドレスは、ブロック識別子とページ識別子とを含む。
【００２２】
本発明の本実施形態では、ソリッドステートディスクに書き込むデータがある場合、コントローラは、第1のダイを選択する必要があり、書き込む目標データが第1のダイに含まれるブロックに記憶されるべきであることが要求され、その後、ソリッドステートディスクは、目標データを記憶するために第1のダイの範囲内に物理的な記憶リソースを割り当てる必要がある。これにより、ソリッドステートディスクが、内部ポリシーだけに基づいて、物理的記憶リソースを書き込み要求に自律的に割り当てるために生じる不均衡なデータ分布やいくつかのダイの輻輳などにより、ソリッドステートディスクの記憶リソースを有効に使用できないという従来の問題が回避される。さらに、第1のダイを選択する際に、コントローラは、ソリッドステートディスクに書き込むデータのための最適なダイを選択するために、選択ポリシー、例えば、ダイの状態、データアクセス頻度、ダイの有効データ量、ダイの疲弊度、およびダイで処理される読み出し要求などの要因のうちの1つ以上を柔軟に使用でき、その結果、コントローラは、ソリッドステートディスクの記憶空間を有効に使用できる。
【００２３】
第2の実施態様によれば、本発明の一実施形態は別の記憶システムを提供し、記憶システムはコントローラとソリッドステートディスクとを備え、コントローラはソリッドステートディスクと通信することができ、ソリッドステートディスクは複数のチャネルを含み、複数のチャネルのそれぞれは複数のダイに接続され、コントローラは、複数のセグメントを作成し、複数のダイから第1のダイを選択し、複数のセグメントから第1のセグメントを選択し、第1のセグメントの使用可能なオフセットを判定し、書き込み要求を生成し、書き込み要求は、書き込みアドレス、目標データ、および目標データのデータ長を含み、書き込みアドレスは、第1のセグメントの識別子および使用可能なオフセットを含み、第1のセグメントの識別子は、第1のダイの識別子および第1のダイに接続されたチャネルの識別子を含み、第1のダイが属するソリッドステートディスクに書き込み要求を送信するように構成され、ソリッドステートディスクは、書き込み要求を受信し、書き込みアドレスおよび目標データのデータ長に従って、目標データを記憶するように構成される。
【００２４】
第2の実施態様に関連して、本発明の本実施形態は、第2の実施態様の第1の実装から第5の実装をさらに提供する。第2の実施態様の第1の実装から第5の実装は、第1の実施態様の第1の実装から第5の実装とそれぞれ同じであり、ここではこれ以上説明しない。
【００２５】
第2の実施態様または第2の実施態様の上述の実装のいずれか1つに関連して、第2の実施態様の第6の実装では、コントローラは、マッピング関係を生成し、マッピング関係は、目標データのホスト論理ブロックアドレスと、第1のセグメントおよび使用可能なオフセットと、の間のマッピングを記録するように構成され、マッピング関係をシステムマッピングテーブルに記憶するようにさらに構成される。
【００２６】
第2の実施態様または第2の実施態様の上述の実装のいずれか1つに関連して、第2の実施態様の第7の実装では、ソリッドステートディスクは、書き込みアドレスに含まれた第1のセグメントの識別子および使用可能なオフセットに従って、ローカルマッピングテーブルに問い合わせし、ローカルマッピングテーブルは、ソリッドステートディスクのセグメントと物理ブロックアドレスとの間のマッピング関係を記憶するように構成され、ローカルマッピングテーブルに第1のセグメントに対応するブロックが記録されている場合、書き込みアドレスに含まれた使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブロックに書き込むように特に構成される、さもなければ、第1のセグメントの識別子を解析して、第1のダイに接続されたチャネルの識別子および第1のダイの識別子を取得し、第1のダイに接続されたチャネルの識別子と第1のダイの識別子とに基づいて、第1のダイの複数のブロックからブランクブロックを選択し、書き込みアドレスに含まれる使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブランクブロックに書き込むように特に構成される。
【００２７】
第3の実施態様によれば、本発明の一実施形態は、ソリッドステートディスクを提供し、ソリッドステートディスクは、プロセッサ、メモリ、通信インターフェース、および複数のチャネルを含み、プロセッサおよびメモリは、複数のチャネルのそれぞれを介して、複数のダイにそれぞれ接続され、複数のダイのそれぞれが複数のブロックを含み、プロセッサ、メモリ、および通信インターフェースが互いに通信することができ、通信インターフェースは、書き込み要求を受信するように構成され、書き込み要求は、書き込みアドレス、目標データ、および目標データのデータ長を含み、書き込みアドレスは、第1のダイの識別子、第1のダイに接続されたチャネルの識別子、第1のセグメントの識別子、および使用可能なオフセットを含み、
メモリは、ローカルマッピングテーブルを記憶するように構成され、ローカルマッピングテーブルは、セグメントとソリッドステートディスクの物理ブロックアドレスとの間のマッピング関係を記録するように構成され、ソリッドステートディスクの物理ブロックアドレスは、ブロック識別子を含み、
プロセッサは、書き込みアドレスに含まれた第1のセグメントの識別子および使用可能なオフセットに従って、ローカルマッピングテーブルに問い合わせし、ローカルマッピングテーブルに第1のセグメントに対応するブロックが記録されている場合、使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブロックに書き込むように構成される、さもなければ、第1のダイに接続されたチャネルの識別子と第1のダイの識別子とに基づいて、第1のダイの複数のブロックからブランクブロックを選択し、書き込みアドレスに含まれる使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブランクブロックに書き込むように構成される。
【００２８】
第3の実施態様に関連して、第3の実施態様の第1の実装では、プロセッサは、新しいマッピング関係を生成し、新しいマッピング関係は、第1のセグメントとブランクブロックとの間のマッピングを記録するように構成され、新しいマッピング関係をローカルマッピングテーブルに記憶するようにさらに構成される。
【００２９】
場合により、ローカルマッピングテーブルは、多次元アレイのローカルマッピングテーブルであってもよいし、複数のレベルのローカルマッピングテーブルであってもよい。
【００３０】
場合により、ローカルマッピングテーブルはまた、「セグメント＋使用可能なオフセット」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピング関係を記憶することができ、ソリッドステートディスクの物理ブロックアドレスは、ブロック識別子とページ識別子とを含む。
【００３１】
第4の実施態様によれば、本発明の一実施形態は、ソリッドステートディスクを提供し、ソリッドステートディスクは、プロセッサ、メモリ、通信インターフェース、および複数のチャネルを含み、プロセッサおよびメモリは、複数のチャネルのそれぞれを介して、複数のダイにそれぞれ接続され、複数のダイのそれぞれが複数のブロックを含み、プロセッサ、メモリ、および通信インターフェースが互いに通信することができ、
通信インターフェースは、書き込み要求を受信するように構成され、書き込み要求は、書き込みアドレス、目標データ、および目標データのデータ長を含み、書き込みアドレスは、第1のセグメントの識別子および使用可能なオフセットを含み、第1のセグメントの識別子は、第1のダイの識別子および第1のダイに接続されたチャネルの識別子を運び、
メモリは、ローカルマッピングテーブルを記憶するように構成され、ローカルマッピングテーブルは、セグメントとソリッドステートディスクの物理ブロックアドレスとの間のマッピング関係を記録するように構成され、ソリッドステートディスクの物理ブロックアドレスは、ブロック識別子を含み、
プロセッサは、書き込みアドレスに含まれた第1のセグメントの識別子および使用可能なオフセットに従って、ローカルマッピングテーブルに問い合わせし、ローカルマッピングテーブルに第1のセグメントに対応するブロックが記録されている場合、使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブロックに書き込むように構成される、さもなければ、
第1のセグメントの識別子を解析して、第1のダイの識別子および第1のダイに接続されたチャネルの識別子を取得し、第1のダイに接続されたチャネルの識別子と第1のダイの識別子とに基づいて、第1のダイの複数のブロックからブランクブロックを選択し、書き込みアドレスに含まれる使用可能なオフセットに従って、ページ識別子を判定し、目標データのデータ長に基づいて、かつページ識別子に対応するページから開始して、目標データをブランクブロックに書き込むように特に構成される。
【００３２】
第4の実施態様に関連して、第4の実施態様の第1の実装では、プロセッサは、新しいマッピング関係を生成し、新しいマッピング関係は、第1のセグメントとブランクブロックとの間のマッピングを記録するように構成され、新しいマッピング関係をローカルマッピングテーブルに記憶するようにさらに構成される。
【００３３】
場合により、ローカルマッピングテーブルは、多次元アレイのローカルマッピングテーブルであってもよいし、複数のレベルのローカルマッピングテーブルであってもよい。
【００３４】
場合により、ローカルマッピングテーブルはまた、「セグメント＋使用可能なオフセット」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピング関係を記憶することができ、ソリッドステートディスクの物理ブロックアドレスは、ブロック識別子とページ識別子とを含む。
【００３５】
第5の実施態様によれば、本発明の一実施形態はソリッドステートディスクにデータを書き込むための方法を提供し、本方法は、記憶システムに適用可能であり、記憶システムはコントローラとソリッドステートディスクとを備え、コントローラはソリッドステートディスクと通信することができ、ソリッドステートディスクは複数のチャネルを含み、複数のチャネルのそれぞれは複数のダイに接続され、コントローラは、予め複数のセグメントを作成し、本方法は、
コントローラによって、複数のダイから第1のダイを選択するステップと、
コントローラによって、複数のセグメントから第1のセグメントを選択し、第1のセグメントの使用可能なオフセットを判定するステップと、
コントローラによって、書き込み要求を生成するステップであって、書き込み要求は、書き込みアドレス、目標データ、および目標データのデータ長を含み、書き込みアドレスは、第1のダイに接続されたチャネルの識別子、第1のダイの識別子、第1のセグメントの識別子、および使用可能なオフセットを含む、ステップと、
コントローラによって、ソリッドステートディスクに書き込み要求を送信するステップと、
を含む。
【００３６】
本発明の本実施形態では、コントローラは、第1のダイを選択する前に、ホストからの1つ以上のホスト書き込み要求を受信し、各ホスト書き込み要求は、ホスト論理ブロックアドレス、データ、およびデータ長を運び、ホスト論理ブロックアドレスは、ホストがデータを書き込むための開始論理ブロックアドレスであり、データは、記憶システムに書き込まれるデータであり、データ長は、データの長さを識別するために使用される。コントローラは、データをキャッシュすることができ、ソリッドステートディスクのページの容量を単位として使用して、ホスト書き込み要求で運ばれたデータの分割および／または結合動作を行って、複数の単位長のデータブロックを生成できる。コントローラは、ホスト書き込み要求を受信した直後に第1のダイを選択するステップを行ってもよいし、第1の条件が満たされた場合に第1のダイを選択するステップを行うことを開始してもよい。第1の条件は、キャッシュされたデータのデータ長が指定された閾値よりも大きいことであってもよいし、コントローラが新しいデータ書き込みサイクルに入ることであってもよい。
【００３７】
第1のダイを選択する前に、コントローラは、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長をさらにまず判定してもよい。目標データは、単位長データブロックのうちの1つ以上であってもよい。具体的な数量は、コントローラによって柔軟に設定することができる。あるいは、コントローラは、第1のセグメントおよび使用可能なオフセットを選択した後に、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長を判定してもよい。ここで、データ長は、第1のセグメントにある使用可能な記憶空間未満であるべきであり、使用可能なオフセットに基づいて確認され、目標データは、単位長データブロックのうちの1つ以上であってもよい。
【００３８】
第5の実施態様に関連して、第5の実施態様の第1の実装では、第1のダイはステートレスダイである。
【００３９】
第5の実施態様または第5の実施態様の第1の実装に関連して、第5の実施態様の第2の実装では、コントローラは、目標データのホスト論理ブロックアドレスに基づいて目標データのアクセス頻度を判定し、目標データのアクセス頻度がアクセス頻度閾値よりも大きい場合、第1のダイに記憶され、かつアクセス頻度閾値よりもアクセス頻度が大きい、データ量が第1の閾値未満である。
【００４０】
場合により、コントローラは、上述の分割および／または結合動作を行うことによって取得された各単位長データブロックのホスト論理ブロックアドレスに基づいて、各データのアクセス頻度を判定するアクセス頻度テーブルに問い合わせるようにさらに構成され、各データブロックがホットデータであるかコールドデータであるかを問い合わせ結果から識別することができる。次いで、コントローラ1は、コールドおよびホットデータ分布テーブルに問い合わせし、各ダイに現在既に記憶され、かつコールドおよびホットデータ分布テーブルに記録された、ホットデータの量を第1の閾値と比較し、ホットデータの量が第1の閾値未満であるダイからのダイを第1のダイとして選択し、第1のダイは、ホットデータとして識別される単位長データブロックのうちに1つ以上を記憶するために使用され得る。場合により、複数のダイに現在記憶されているホットデータの量が第1の閾値未満であることが分かった場合、コントローラは、最も少ない量のホットデータを現在記憶しているダイを第1のダイとして選択することができる。場合により、複数のダイに現在記憶されているホットデータの量がすべて第1の閾値未満であることが分かった場合、コントローラはまた、第1の実施態様の上述の第1の実装、または第1の実施態様の第3、第4、もしくは第5の実装のいずれか1つ以上をさらに参照することによって、複数のダイから第1のダイを選択できる。場合により、複数の第1のダイも選択することができ、各第1のダイは、ホットデータである複数の単位長データブロックのいくつかを運ぶために使用される。
【００４１】
第5の実施態様または第5の実施態様の上述の実装のいずれか1つに関連して、第5の実施態様の第3の実装では、第1のダイに記憶された有効データ量は、第2の閾値未満である。
【００４２】
第5の実施態様または第5の実施態様の上述の実装のいずれか1つに関連して、第5の実施態様の第4の実装では、第1のダイの疲弊度は、疲弊度閾値未満である。
【００４３】
第5の実施態様または第5の実施態様の上述の実装のいずれか1つに関連して、第5の実施態様の第5の実装では、第1のダイには処理される読み出し要求がない、または第1のダイにおける処理される読み出し要求の量が第3の閾値未満である。
【００４４】
第5の実施態様または第5の実施態様の上述の実装のいずれか1つに関連して、第5の実施態様の第6の実装では、第1のセグメントは、ブランクセグメントである。
【００４５】
第5の実施態様または第5の実施態様の上述の実装のいずれか1つに関連して、第5の実施態様の第7の実装では、第1のセグメントは、第1のダイに既に割り当てられ、第1のセグメントには使用可能な記憶空間がある。
【００４６】
場合により、コントローラが、第1のセグメントを選択し、使用可能なオフセットを判定した後に、使用可能なオフセットに基づいて目標データおよびデータ長を判定することは、具体的には、使用可能なオフセットに基づいて、第1のセグメントにおける現在の残りの使用可能な記憶空間を判定するステップであって、書き込み要求における目標データの長さは、残りの使用可能な記憶空間を超えることはできない、ステップと、判定されたデータ長に基づいて目標データを選択するステップであって、目標データは、単位長データブロックのうちの1つ以上であり得る、ステップと、である。
【００４７】
場合により、上述したように、目標データおよび目標データのデータ長はまた、第1のダイを選択する前にコントローラによって判定されてもよい。この場合、コントローラは、書き込み要求を生成する前に、目標データの判定されたデータ長と、第1のセグメントの使用可能なオフセットに基づいて判定される第1のセグメントの使用可能な記憶空間のサイズと、をまず比較してもよい。目標データのデータ長が第1のセグメントの使用可能な記憶空間のサイズ未満である場合、目標データおよび目標データのデータ長は直接書き込み要求に含められる。目標データのデータ長が第1のセグメントの使用可能な記憶空間のサイズよりも大きい場合、コントローラは、第1のセグメントの使用可能な記憶空間に従って、目標データを2つのサブブロックに分割する必要があり、第1のサブブロックのデータ長は、第1のセグメントの使用可能な記憶空間のサイズ以下であり、第2のサブブロックは、目標データにおける第1のサブブロック以外の残りの部分である。この場合、コントローラは、書き込み要求を生成する際に、分割により取得された第1のサブブロックおよび第1のサブブロックの対応するデータ長を、それぞれ、目標データおよび目標データのデータ長として、書き込み要求に含める。第2のサブブロックについては、第1のセグメントを選択し、使用可能なオフセットを確認するステップと、書き込み要求を生成するステップとを繰り返し行うことができる、または場合により、第1のダイを選択し、第1のセグメントを選択し、使用可能なオフセットを確認するステップと、書き込み要求を生成するステップと、を繰り返し行うことができる。
【００４８】
第5の実施態様または第5の実施態様の上述の実装のいずれか1つに関連して、第5の実施態様の第8の実装では、コントローラは、マッピング関係を生成し、マッピング関係は、目標データのホスト論理ブロックアドレスと、第1のダイに接続されたチャネル、第1のダイ、第1のセグメント、および使用可能なオフセットと、の間のマッピングを記録するように構成され、マッピング関係をシステムマッピングテーブルに記憶する。
【００４９】
本発明の本実施形態では、ソリッドステートディスクに書き込むデータがある場合、コントローラは、第1のダイを選択する必要があり、書き込む目標データが第1のダイに含まれるブロックに記憶されるべきであることを示す。これにより、ソリッドステートディスクが、内部ポリシーだけに基づいて、物理的記憶リソースを書き込み要求に自律的に割り当てるために生じる不均衡なデータ分布やいくつかのダイの輻輳などにより、ソリッドステートディスクの記憶リソースを有効に使用できないという従来の問題が回避される。さらに、第1のダイを選択する際に、コントローラは、ソリッドステートディスクに書き込むデータのための最適なダイを選択するために、選択ポリシー、例えば、ダイの状態、データアクセス頻度、ダイの有効データ量、ダイの疲弊度、およびダイで処理される読み出し要求などの要因のうちの1つ以上を柔軟に使用でき、その結果、コントローラは、ソリッドステートディスクの記憶空間を有効に使用できる。
【００５０】
第6の実施態様によれば、本発明の一実施形態は、コントローラを提供し、コントローラは、プロセッサと、メモリと、第2の通信インターフェースと、を備える。メモリはプログラム命令を記憶する。プロセッサは、具体的には本出願の第1、第2および第5の実施態様で説明したような、コントローラの様々な処理動作を完了するためにプログラム命令を実行するように構成される。メモリは、システムマッピングテーブルを記憶するようにさらに構成される。第2の通信インターフェースは、ソリッドステートディスクと通信するように構成される。第2の通信インターフェースを使用することによって、プロセッサは、書き込み要求または読み出し要求などの動作命令をソリッドステートディスクに送信し、ソリッドステートディスクから様々なメッセージを受信することができる。コントローラは、第1の通信インターフェースをさらに備え、第1の通信インターフェースは、ホストと通信するように構成される。コントローラは、第1の通信インターフェースを用いて、ホストの読み出し要求またはホストの書き込み要求などのホストの動作命令を受信し、処理命令をプロセッサに渡して処理するようにしてもよい。第1の通信インターフェースは、書き込み成功メッセージ、書き込み失敗メッセージ、読み出し失敗メッセージ、または読み出されたデータなどのメッセージをホストに送信するようにさらに構成される。第1の通信インターフェースは、ホストバスアダプタカードであってもよい。メモリは、ホストから第1の通信インターフェースが受信したホスト書き込み要求で運ばれたデータをキャッシュする、またはソリッドステートディスクから読み出されたデータをキャッシュするようにさらに構成されてもよい。
【００５１】
第7の実施態様によれば、本発明の一実施形態は、コントローラを提供し、コントローラは、第1の通信モジュールと、記憶モジュールと、ダイ選択モジュールと、セグメント選択モジュールと、処理モジュールと、第2の通信モジュールと、を備える。第1の通信モジュールは、ホストと通信し、ホストの読み出し要求またはホスト書き込み要求などのホストの動作命令を受信するように構成され、書き込み成功メッセージ、書き込み失敗メッセージ、読み出し失敗メッセージ、または読み出されたデータなどのメッセージをホストに送信するようにさらに構成される。
【００５２】
記憶モジュールは、ホストから第1の通信モジュールによって受信されたホスト書き込み要求で運ばれるデータをキャッシュするように構成されてもよい。
【００５３】
処理モジュールは、キャッシュされたデータに対して分割および／または結合動作を行って、単位長（例えば16KBなど）のデータブロックおよび各データブロックのホスト論理ブロックアドレスを生成するように構成されてもよく、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長を判定するように構成されてもよく、複数のセグメントを作成し、複数の作成されたセグメントに関する基本情報を記憶モジュールに記憶するようにさらに構成されてもよい。
【００５４】
ダイ選択モジュールは、第1のダイを選択するように構成される。詳細については、本出願の第1の実施態様の第1〜第5の実装、第2の実施態様の第1〜第5の実装、および第5の実施態様の第1〜第5の実装を参照されたい。
【００５５】
セグメント選択モジュールは、第1のセグメントを選択し、使用可能なオフセットを判定するように構成される。詳細については、本出願の第1の実施態様の第6の実装、第2の実施態様の第6の実装、および第5の実施態様の第6および第7の実装を参照されたい。
【００５６】
処理モジュールは、ダイ選択モジュールによって選択された第1のダイ、ならびにセグメント選択モジュールによって選択された第1のセグメントおよび判定された使用可能なオフセットに従って、書き込み要求を生成するようにさらに構成される。場合により、処理モジュールは、第1のセグメントの使用可能なオフセットの値に従って、目標データおよび目標データのデータ長を判定し、目標データおよび目標データのデータ長に基づいて、書き込み要求を生成するようにさらに構成され、システムマッピングテーブルを生成し、リアルタイムでシステムマッピングテーブルを更新するようにさらに構成される。詳細については、本出願の第1、第2、および第5の実施態様の様々な実装を参照されたい。
【００５７】
記憶モジュールは、システムマッピングテーブルを記憶するようにさらに構成される。
【００５８】
第2の通信モジュールは、ソリッドステートディスクと通信するように構成される。第2の通信モジュールを使用することによって、処理モジュールは、書き込み要求および読み出し要求などの様々な動作コマンドをソリッドステートディスクに送信し、ソリッドステートディスクから様々なメッセージを受信することができる。
【００５９】
処理モジュールは、ホストから第1の通信モジュールが受信したホスト読み出し要求に従って、システムマッピングテーブルに問い合わせ、第2の読み出し要求を生成し、第2の通信モジュールを使用して第2の読み出し要求をソリッドステートディスクに送信するようにさらに構成される。第2の通信モジュールは、ソリッドステートディスクから返された読み出されたデータを受信する。記憶モジュールは、読み出されたデータをキャッシュするようにさらに構成される。処理モジュールは、第1の通信モジュールを使用することによって、読み出されたデータをホストに送信するようにさらに構成される。
【００６０】
第8の実施態様によれば、本発明の一実施形態は、ソリッドステートディスクを提供し、ソリッドステートディスクは、通信モジュールと、キャッシュモジュールと、処理モジュールと、記憶モジュールと、を備える。
【００６１】
通信モジュールは、コントローラと通信し、コントローラからの書き込み要求、読み出し要求、または別の命令などのメッセージを受信するように構成され、書き込み成功メッセージ、書き込み失敗メッセージ、読み出し成功メッセージ、または読み出し失敗メッセージなどのメッセージをコントローラに送信するようにさらに構成される。
【００６２】
キャッシュモジュールは、コントローラから通信モジュールが受信したメッセージで運ばれたデータをキャッシュするように構成される。
【００６３】
処理モジュールは、予めローカルマッピングテーブルを生成するように構成され、ローカルマッピングテーブルは、キャッシュモジュールに記憶されてもよいし、記憶モジュールに記憶されてもよく、使用のために必要なときに、処理モジュールによって読み出され、キャッシュモジュールにキャッシュされ、また通信モジュールが受信した書き込み要求を処理するようにさらに構成される。詳細については、本出願の第1の実施態様の第8の実装、第2の実施態様の第7の実装、第3の実施態様、および第4の実施態様を参照されたい。
【００６４】
処理モジュールは、新しいマッピング関係を生成し、マッピング関係をローカルマッピングテーブルに記憶するようにさらに構成される。詳細については、本出願の第1の実施態様の第9の実装を参照されたい。
【００６５】
処理モジュールは、通信モジュールが受信した読み出し要求に基づいて、ローカルマッピングテーブルに問い合わせ、問い合わせ結果に基づいて記憶モジュールからデータを読み出し、通信モジュールを使用して読み出されたデータをホストに送信するようにさらに構成される。
【００６６】
第9の実施態様によれば、本発明の一実施形態は、記憶媒体を提供し、記憶媒体はプログラムを記憶する。コンピューティングデバイスがプログラムを実行すると、コンピューティングデバイスは、第1の実施態様または第1の実施態様の各実装のいずれか1つに記載の記憶システムにおけるコントローラの処理動作を行う、または第2の実施態様または第2の実施態様の各実装のいずれか1つに記載の記憶システムにおけるコントローラの処理動作を行う、または第5の実施態様または第5の実施態様の各実装のいずれか1つに記載のソリッドステートディスクにデータを書き込むための方法を行う、または第6の実施態様または第6の実施態様の各実装のいずれか1つに記載のコントローラの動作を行う、または第7の実施態様または第7の実施態様の各実装のいずれか1つに記載のコントローラの動作を行う。記憶媒体は、フラッシュメモリ、HDD、またはSSDを含むが、これに限定されるものではない。
【００６７】
第10の実施態様によれば、本発明の一実施形態は、記憶媒体を提供し、記憶媒体はプログラムを記憶する。コンピューティングデバイスがプログラムを実行すると、コンピューティングデバイスは、第1の実施態様または第1の実施態様の各実装のいずれか1つに記載の記憶システムにおけるソリッドステートディスクの処理動作を行う、または第2の実施態様または第2の実施態様の各実装のいずれか1つに記載の記憶システムにおけるソリッドステートディスクの処理動作を行う、または第3の実施態様または第3の実施態様の各実装のいずれか1つに記載のソリッドステートディスクの動作を行う、または第4の実施態様または第4の実施態様の各実装のいずれか1つに記載のソリッドステートディスクの動作を行う、または第8の実施態様または第8の実施態様の各実装のいずれか1つに記載のソリッドステートディスクの動作を行う。記憶媒体は、フラッシュメモリ、HDD、またはSSDを含むが、これに限定されるものではない。
【００６８】
第11の実施態様によれば、本発明の一実施形態は、コンピュータプログラム製品を提供し、コンピュータプログラム製品は、プログラム命令を含む。コンピュータがコンピュータプログラム製品を実行すると、コンピュータは、第1の実施態様または第1の実施態様の各実装のいずれか1つに記載の記憶システムにおけるコントローラの処理動作を行う、または第2の実施態様または第2の実施態様の各実装のいずれか1つに記載の記憶システムにおけるコントローラの処理動作を行う、または第5の実施態様または第5の実施態様の各実装のいずれか1つに記載のソリッドステートディスクにデータを書き込むための方法を行う、または第6の実施態様または第6の実施態様の各実装のいずれか1つに記載のコントローラが行う動作を行う、または第7の実施態様または第7の実施態様の各実装のいずれか1つに記載のコントローラが行う動作を行う。コンピュータプログラム製品は、ソフトウェアインストールパッケージであってもよい。
【００６９】
第12の実施態様によれば、本発明の一実施形態は、コンピュータプログラム製品を提供し、コンピュータプログラム製品は、プログラム命令を含む。コンピュータがコンピュータプログラム製品を実行すると、コンピュータは、第1の実施態様または第1の実施態様の各実装のいずれか1つに記載の記憶システムにおけるソリッドステートディスクの処理動作を行う、または第2の実施態様または第2の実施態様の各実装のいずれか1つに記載の記憶システムにおけるソリッドステートディスクの処理動作を行う、または第3の実施態様または第3の実施態様の各実装のいずれか1つに記載のソリッドステートディスクの動作を行う、または第4の実施態様または第4の実施態様の各実装のいずれか1つに記載のソリッドステートディスクの動作を行う、または第8の実施態様または第8の実施態様の各実装のいずれか1つに記載のソリッドステートディスクの動作を行う。
【００７０】
本発明の実施形態では、ソリッドステートディスクに書き込むデータがある場合、コントローラは、第1のダイを選択する必要があり、書き込む目標データが第1のダイに含まれるブロックに記憶されるべきであることが要求され、その後、ソリッドステートディスクは、目標データを記憶するために第1のダイの範囲内に物理的な記憶リソースを割り当てる必要がある。これにより、ソリッドステートディスクが、内部ポリシーだけに基づいて、物理的記憶リソースを書き込み要求に自律的に割り当てるために生じる不均衡なデータ分布やいくつかのダイの輻輳などにより、ソリッドステートディスクの記憶リソースを有効に使用できないという従来の問題が回避される。さらに、第1のダイを選択する際に、コントローラは、ソリッドステートディスクに書き込むデータのための最適なダイを選択するために、選択ポリシー、例えば、ダイの状態、データアクセス頻度、ダイの有効データ量、ダイの疲弊度、およびダイで処理される読み出し要求などの要因のうちの1つ以上を柔軟に使用でき、その結果、コントローラは、ソリッドステートディスクの記憶空間を有効に使用できる。
【００７１】
本発明の実施形態における技術的な解決策をより明確に説明するために、以下、実施形態に必要な添付の図面を簡単に説明する。
【図面の簡単な説明】
【００７２】
【図１】本発明の一実施形態による、適用シナリオの図である。
【図２】本発明の一実施形態によるソリッドステートディスクの構成図である。
【図３】本発明の一実施形態によるソリッドステートディスクによる記憶システムへのアクセスの初期化流れ図である。
【図４】本発明の一実施形態によるコントローラによる書き込み要求を処理するための方法の流れ図である。
【図５】本発明の一実施形態によるソリッドステートディスクによる書き込み要求を処理するための方法の流れ図である。
【図６】本発明の一実施形態による記憶システムにおける読み出し要求を処理するための方法の流れ図である。
【図７】本発明の一実施形態によるコントローラの構成図である。
【図８】本発明の一実施形態による別のコントローラの論理構成図である。
【図９】本発明の一実施形態による別のソリッドステートディスクの論理構成図である。
【発明を実施するための形態】
【００７３】
本発明の実施形態は、ソリッドステートディスクの記憶空間を効果的かつ適切に使用するための記憶システムおよびソリッドステートディスクを提供する。
【００７４】
図1は、本発明の一実施形態による記憶システムの構成図を示す。記憶システムは、コントローラ100と、ソリッドステートディスク200と、を備える。実際のネットワーキングでは、複数のソリッドステートディスク200が存在し得る。
【００７５】
例えば、コントローラ100とホスト（図示せず）との間では、ストレージエリアネットワーク（Storage Area Network、SAN）を使用することによって、またはイーサネット（登録商標）、ローカルエリアネットワーク、またはワイドエリアネットワークなどの別のネットワークを使用することによって、通信を行うことができる。コントローラ100は、サーバまたはデスクトップコンピュータなどのコンピューティングデバイスであってもよい。コントローラ100には、オペレーティングシステムおよびアプリケーションプログラムがインストールされていてもよい。コントローラ100は、ホストから入出力（I／O）要求を受信することができる。コントローラ100は、I／O要求で運ばれるデータ（もしあれば）をさらに記憶し、任意のソリッドステートディスク200にデータを書き込むことができる。
【００７６】
図1は、説明のための例としてのみ使用される。実際の適用では、記憶システムは複数のコントローラを含むことができる。各コントローラの物理的構造および機能は、コントローラ100のものと同様である。コントローラ間、および各コントローラとソリッドステートディスク200との間で相互通信を行うことができる。本実施形態では、コントローラの数、コントローラ間の接続モード、および任意のコントローラとソリッドステートディスク200との間の接続モードは限定されない。
【００７７】
コントローラ100は、記憶システム内のシステムコントローラである。システムコントローラは、一般に独立したデバイスである。特に指定のない限り、本実施形態のコントローラはシステムコントローラである。
【００７８】
図2に示すように、図2は、本発明の一実施形態によるソリッドステートディスク200の概略的な構成図である。ソリッドステートディスク200は、通信インターフェース2001と、プロセッサ2002と、メモリ2003と、を備える。通信インターフェース2001、プロセッサ2002、およびメモリ2003は、相互に通信可能である。ソリッドステートディスク200は、複数のフラッシュ（Flash）チップをさらに含む。複数のフラッシュチップは、ソリッドステートディスク200の記憶媒体である。ソリッドステートディスク200は、複数のチャネル（Channel）をさらに含む。プロセッサ2002およびメモリ2003は、各チャネルを介して複数のフラッシュチップの一部とそれぞれ通信する。
【００７９】
通信インターフェース2001は、コントローラ100と通信し、コントローラ100からの書き込み要求、読み出し要求、または別のコマンドなどのメッセージを受信するように構成され、書き込み成功メッセージ、書き込み失敗メッセージ、読み出し成功メッセージ、または読み出し失敗メッセージなどのメッセージをコントローラ100に送信するようにさらに構成される。
【００８０】
メモリ2003は、コントローラ100が受信したメッセージで運ばれたデータまたはフラッシュチップから読み出されたデータをキャッシュするように構成される。メモリ2003は、RAM、ROM、フラッシュメモリ（Flash memory）、またはソリッドステートディスク（Solid State Disk、SSD）などのデータを記憶することができる非一時的（non−transitory）機械可読媒体であってもよい。このことは、本明細書において限定されない。メモリはプログラム命令をさらに記憶することができる。
【００８１】
プロセッサ2002は、中央処理装置CPUまたは特定用途向け集積回路ASIC（Application−Specific Integrated Circuit）であってもよいし、本発明の本実施形態を実装するための1つ以上の集積回路として構成されてもよい。本発明の本実施形態では、プロセッサ2002は、メモリ2003に記憶されたプログラム命令を実行して、対応する処理、例えば、コントローラ100からのメッセージ（読み出し要求または書き込み要求など）、および例えばローカルマッピングテーブルの作成および更新、またはガベージ・コレクションなどのソリッドステートディスクの様々な管理動作を処理するように構成することができる。詳細については、以下の方法の実施形態の詳細な説明を参照されたい。ここで、プログラム命令を実行することによってプロセッサ2002によって作成および更新されたローカルマッピングテーブルは、メモリ2003に記憶されてもよい。
【００８２】
図2に示すように、ソリッドステートディスク200では、プロセッサ2002およびメモリ2003は、各チャネルを介して複数のフラッシュチップの一部とそれぞれ通信する。チャネルは互いに独立しており、メッセージの同時処理を実装できる。つまり、プロセッサ2002は、各チャネルを使用することによって異なるフラッシュチップでメッセージまたはデータ伝送を別々に行うことができる。図2の例では、ソリッドステートディスクは16チャネルを有する。しかしながら、当業者は、本発明の本実施形態では、ソリッドステートディスク内のチャネルの数が限定されないことを理解されよう。
【００８３】
フラッシュチップは、単層セル（SLC）であってもよいし、多層セル（MLC）であってもよいし、別の記憶装置であってもよい。各フラッシュチップは、1つ以上のダイ（DIE）を含む。各ダイはMブロック（Block）を含む。各ブロックはNページ（Page）を含む。当業者であれば、ソリッドステートディスクの各フラッシュチップに含まれるダイの数量、各ダイに含まれるブロック数M、各ブロックに含まれるページ数Nは、フラッシュチップ、ダイ、ブロック、およびページの異なる容量設定に基づいて、異なる値に設定することができることを理解されよう。例えば、各ページの容量が16KBに設定され、各ブロックの容量が8MBに設定されている場合、Nの値は512に設定される、つまり、各ブロックは512ページを含むことができ、各ダイの容量が16GBに設定されている場合、Mの値は2048である、つまり、各ダイは2048ブロックを含むことができる。例えば、各フラッシュチップが2つのダイを含む場合、各フラッシュチップの容量は32GBであり、各チャネルが4つのフラッシュチップに接続されている場合、8つのダイがチャネルに接続され得ることを示し、この場合、各チャネルで管理される容量は128GBである。図2を参照すると、ソリッドステートディスクが16チャネルを含む場合、ソリッドステートディスクの総容量は2TBである。当業者であれば、ソリッドステートディスクでは、各書き込み動作がページの単位でデータを書き込むことであり、各読み出し動作は、ページ全体またはページの一部を読み出すことができ、ダイはソリッドステートディスクの最小同時処理単位である、つまり、各ダイは、例えば、読み出し要求、書き込み要求、または消去コマンドなど、どんな時にも1つのメッセージしか処理できないことを理解されよう。メッセージの処理中に、他のメッセージに応答することはできない。図2に示すソリッドステートディスクを例にとると、どんな時にも各チャネルで最大8つのメッセージを処理することができ、どんな時にもソリッドステートディスクで最大128個のメッセージを処理することができる。
【００８４】
図3に示すように、図3は、本発明の一実施形態によるソリッドステートディスクによる記憶システムへのアクセスの初期化流れ図である。この手続きは、記憶システムが電源投入されたとき、または新しいソリッドステートディスクが記憶システムにアクセスするときに実行され、その結果、コントローラ100がソリッドステートディスクに関する基本情報を取得し、コントローラ100がソリッドステートディスクの記憶空間を管理およびスケジューリングできる。
【００８５】
ステップ301：コントローラが、ソリッドステートディスクに基本情報要求メッセージを送信する。
【００８６】
記憶システムは電源投入されている。コントローラ100は、ブロードキャストまたはマルチキャストモードで、記憶システム内のソリッドステートディスク200に基本情報要求メッセージを送信してもよいし、ユニキャストモードで、記憶システム内の各ソリッドステートディスク200に基本情報要求メッセージを送信してもよい。記憶システムの実行プロセスにおいて、コントローラ100は、新たに接続されたソリッドステートディスクを発見するために、基本情報要求メッセージをさらに周期的に送信できる。ソリッドステートディスク200の通信インターフェース2001は、コントローラ100からの基本情報要求メッセージを受信する。
【００８７】
ステップ302：ソリッドステートディスクは、基本情報フィードバックメッセージをコントローラに送信する。
【００８８】
ソリッドステートディスク200は、基本情報要求メッセージを受信した後、ソリッドステートディスク200に関する基本情報を基本情報フィードバックメッセージに追加し、メッセージをコントローラ100に送信する。例えば、プロセッサ2002は、ソリッドステートディスク200に関する基本情報を基本情報フィードバックメッセージに追加し、通信インターフェース2001を使用してコントローラ100にメッセージを送信することができる。本発明の本実施形態では、基本情報は、以下の情報、すなわち、ソリッドステートディスクの識別子、ソリッドステートディスクの容量、チャネルの数、各チャネルのダイの数、各ダイ内のブロック数、各ブロック内のページ数、各ページの容量などのうちの1つ以上を含むことができる。場合により、ソリッドステートディスク200は、ソリッドステートディスク200の各チャネルのチャネル識別子を、各チャネルの各ダイのダイ識別子とともにコントローラ100にさらに報告することができる。
【００８９】
本発明の本実施形態では、コントローラ100が各ソリッドステートディスク200によって報告された基本情報フィードバックを受信した後、各ソリッドステートディスク200が、チャネルの数、各チャネルのダイの数、および各ダイ内のブロック数のみを報告した場合、コントローラ100は、各ソリッドステートディスク200内の各チャネルおよび各ダイに識別子を割り当てることができる。場合により、コントローラ100は、当業界における現在の一般的な実装に従って識別子を割り当てることができる。ソリッドステートディスク200が16のチャネルを含み、各チャネルが8つのダイを含むと仮定すると、チャネル識別子は、順にchannel 0、channel 1、・・・、channel 15であり得、各チャネルにおけるダイのダイ識別子は、die 0、die 1、・・・、die 7であり得る。従って、コントローラ100は、「ソリッドステートディスクの識別子、チャネル識別子、およびダイ識別子」に基づいて、各ソリッドステートディスク内のすべての128個のダイを識別および区別する必要がある。場合により、コントローラ100は、ソリッドステートディスク内のすべての128個のダイにグローバル識別子、すなわち、順にdie 0、die 1、die 2、・・・、die 126、およびdie 127を割り当てることもできる。場合により、コントローラ100は、ダイ識別子を設定する場合に、ダイ識別子の一部としてチャネル識別子を使用することもできる。例えば、channel 0に含まれる第1のダイの識別子を「channel 0 die 0」に設定してもよい。あるいは、ダイ識別子が設定される場合に、ソリッドステートディスクの識別子とチャネル識別子とをダイ識別子の一部として一緒に使用することができる。例えば、ダイ識別子は、「solid state disk 200 channel 0 die 0」とすることができる。さらに、コントローラ100は、コントローラ100が各ソリッドステートディスク200内のチャネルおよびダイに識別子を割り当てた後、識別子割り当て規則をソリッドステートディスク200に通知することができる。このようにして、後に、ソリッドステートディスク200は、コントローラ100によって割り当てられたダイ識別子に基づいて、対応するダイを正確に識別することができる。
【００９０】
各ソリッドステートディスク200が、ステップ302において、ソリッドステートディスク200の各チャネルのチャネル識別子および各ダイのダイ識別子をさらにフィードバックする場合、コントローラ100は、割り当て自体を行う必要はないが、ソリッドステートディスク200によって報告された「ソリッドステートディスクの識別子、チャネル識別子、およびダイ識別子」を直接使用して、各ソリッドステートディスク内の各ダイを識別および区別できる。
【００９１】
上述の手続きでは、各ソリッドステートディスクが記憶システムにアクセスした後、ソリッドステートディスクはその基本情報をコントローラ100にフィードバックする。記憶システム内の各ソリッドステートディスク200に関する基本情報を収集した後、コントローラ100は、すべてのソリッドステートディスクの記憶空間を管理し、ホストに記憶サービスを提供することができる。
【００９２】
本発明の本実施形態では、コントローラ100は、セグメント（Segment）の単位で記憶空間を管理し、ホストに記憶サービスを提供する。コントローラ100は、複数のセグメントを生成する。本実施形態では、セグメントの容量をソリッドステートディスク200のブロックの容量の整数倍に設定することが提案されている。ブロックの容量が8MBであると仮定すると、セグメントの容量は、8MB、16MB、24MB、．．．などに設定することができる。セグメントの容量は、本発明の本実施形態では具体的に限定されないことを強調しておきたい。ユーザは、実際の記憶要件に基づいてセグメントの容量を柔軟に設定することができる。セグメントの容量が判定された後、作成する必要があるセグメントの量は、ソリッドステートディスク200の容量に基づいてさらに判定されてもよい。基本情報は、セグメントが作成された後、各セグメントに対して構成されてもよい。例えば、ソリッドステートディスクの容量は2TBであり、セグメントの容量は16MBである。この場合、コントローラ100は128Kセグメント（2TB／16MB＝128K）を作成し、各セグメントに関する基本情報を設定する必要がある。本発明の本実施形態では、各セグメントに関する基本情報は、以下のフィールドを含むことができる：
セグメント識別子：セグメントを一意的に識別するために使用され、セグメント識別子は、数字、文字、もしくは記号であってもよいし、数字、文字、もしくは記号の任意の組み合わせであってもよい；
ホスト論理ブロックアドレス：セグメント内の各オフセットによって記憶されたデータに対応するホスト論理ブロックアドレスを示すために使用される；
セグメント状態：セグメントの現在の状態を示し、本実施形態では、フリー（Free）状態、書き込み（Writing）状態、フル（Full）状態、およびガベージコレクション（Garbage Collection）状態の4つの状態が存在し、フリー状態は、セグメントにデータが現在書き込まれていないことを示し、例えば、セグメントは、初期化されたセグメントまたはガーベジコレクションが行われたばかりのセグメントであり得、書き込み状態は、セグメントが既に割り当てられ、データの書き込みに使用し得ることを示し、フル状態は、セグメントのすべての空間が既にいっぱいであることを示し、ガベージコレクション状態は、セグメント上で現在ガベージコレクションが現在行われていることを示す；
セグメント内の無効なデータの量：任意のパラメータであり、セグメント内の無効なデータの量を記録するために使用され、初期値は0であり、セグメントに記録されているホスト論理ブロックアドレスのデータに対して変更または削除動作が行われるたびに、セグメント内の無効データ量の値に1が加算される；
ソリッドステートディスク識別子：任意のパラメータであり、セグメントが割り当てられた場合にセグメントに対応するソリッドステートディスクを示すために使用される；
チャネル識別子：任意のパラメータであり、セグメントが割り当てられた場合にセグメントに対応するチャネルを示すために使用される；
ダイ識別子：任意のパラメータであり、セグメントが割り当てられた場合にセグメントに対応するダイを示すために使用される；
使用可能なオフセット：任意のパラメータであり、セグメントの現在の使用可能なオフセットの開始位置を記録するために使用され、初期値は0であってもよい。セグメントの異なる容量設定に基づいて、セグメントのオフセットの値の範囲が変わる。上述のように、本発明の本実施形態では、セグメントの容量は、ソリッドステートディスク内のブロックの容量の整数倍であることが提案される。ここで、例えば、ブロックの容量は8MBであり、セグメントの容量は16MBである、すなわち、ソリッドステートディスクでは、各セグメントに対応する2つのブロックが存在するはずである。各ブロックに512ページが含まれる場合、セグメントの容量は1024ページに相当する。この場合、セグメントのオフセットの値の範囲は0〜1023である。従って、セグメントの使用可能なオフセットの初期値は0である。各オフセットはブロックの1ページに対応し、セグメントに連続してデータが書き込まれると、使用可能なオフセットの値が大きくなる。ここで、使用可能なオフセットが0〜511に設定されている場合、値は、セグメントに対応する2つのブロックのうちの第1ブロックの512ページに対応し、使用可能なオフセットが512〜1023に設定されている場合、値は、セグメントに対応する2つのブロックのうちの第2のブロックの512ページに対応する。
【００９３】
各セグメントが作成されると、セグメント識別子がセグメントに割り当てられ、セグメントの状態がフリー状態に設定され、セグメント内の使用可能なオフセットおよび無効データの量が0に設定され、他の基本情報は最初はnullであり得る。その後、セグメントがホストに割り当てられ、データが書き込まれた後、セグメントに関する基本情報の他の情報項目が設定される。本実施形態では、場合により、コントローラ100は、アレイまたはリンクされたリストの形ですべてのセグメントを管理することができる。アレイまたはリンクされたリスト内の各ノードは1つのセグメントを表し、ノードはセグメントに関する基本情報を記録するために使用される。場合により、本発明の本実施形態では、上述のセグメントをそれぞれ管理するために複数のキューを使用することもできる：
ブランクセグメントキュー：すべての未割り当てセグメントを管理するために使用され、すべてのセグメントは、初期フェーズで管理のためにキューに配置される；
フルロードセグメントキュー：セグメントがユーザに既に割り当てられていて、セグメントが既にいっぱいになっている、つまり、使用可能な空間がない場合、セグメントは管理のためにフルロードセグメントキューに配置される。
【００９４】
さらに、パーシャルロードセグメントキューを設定することもできる。セグメントが既に割り当てられていて、ブロックの容量の整数倍に等しい空間が占有され、セグメントに使用可能な空間がある場合、セグメントは管理のためにパーシャルロードセグメントキューに配置される。セグメントに関する基本情報における使用可能なオフセットの値がセグメントのオフセットの最大値に達しない場合、このことは、セグメント内に使用可能な空間があることを示していることが理解されよう。式「（使用可能なオフセットの値＋1）／各ブロックに含まれるページ数」に従って取得された計算結果が正の整数であれば、ブロックの容量の整数倍に相当する空間がセグメントで占有される。上述の例に示すように、各ブロックに含まれるページ数は512であり、各セグメントは2ブロックの容量に対応することができる。この場合、セグメントのオフセットの最大値は1023であり得る。
【００９５】
記憶システムによるデータを記憶するための手続きは、コントローラ100の処理手続きと、ソリッドステートディスク200の処理手続きと、を含む。図4に示すように、図4は、本発明の一実施形態によるコントローラによってソリッドステートディスクにデータを書き込むための方法の流れ図である。
【００９６】
ステップ400：コントローラは、ホスト書き込み要求を受信する。
【００９７】
コントローラ100は、ホストからの1つ以上のホスト書き込み要求を受信し、各ホスト書き込み要求は、ホスト論理ブロックアドレス（Logical Block Address、LBA）、データ（Data）、およびデータ長（Data Length）を運び、ホスト論理ブロックアドレスは、ホストがデータを書き込むための開始論理ブロックアドレスであり、データは、記憶システムに書き込まれるデータであり、データ長は、データの長さを識別するために使用される。
【００９８】
場合により、ホスト書き込み要求を受信した後、コントローラ100は、ホスト書き込み要求で運ばれたデータをキャッシュし、ホストに書き込み完了メッセージ（図示せず）を送信することができ、書き込み完了メッセージは、ホスト書き込み要求が成功裏に処理されたことをホストに通知するために使用される、または後続の処理を完了し、ソリッドステートディスク200にデータを送信し、ソリッドステートディスク200からの書き込み成功メッセージを受信した後、書き込み完了メッセージ（図示せず）をホストに送信でき、書き込み完了メッセージは、ホスト書き込み要求が成功裏に処理されたことをホストに通知するために使用される。
【００９９】
場合により、ホストが送信した異なるホスト書き込み要求のデータ長が変わり得るため、ホスト書き込み要求のデータが記憶のためにソリッドステートディスク200に直接送信された場合、「ページオーバーフロー」現象が起こり得る、つまり、ソリッドステートディスクは、データを記憶するために1つ以上のページを割り当てる必要があるが、1つ以上の割り当てられたページの最後のページは完全に占有されていない場合がある。従って、ソリッドステートディスクの空間の使用率が低く、アドレス管理が複雑になるなどの問題が発生する可能性がある。コントローラ100は、「ページオーバーフロー」現象の発生を回避するために、ソリッドステートディスク200のページの容量を単位として使用して、ホスト書き込み要求で運ばれたデータの分割および／または結合動作を行うことができる。分割動作は、具体的には、以下のとおりである：例えば、ホストの書き込み要求が3MBのデータを運んでいる場合、ページの容量が16KBである上述の例に基づいて、ホスト書き込み要求のデータを3MB／16KB＝192データブロックに分割でき、各データブロックのデータ長は16KBである。結合動作は、具体的には、以下のとおりである：ホスト書き込み要求で運ばれるデータのデータ長が10KBの場合、データのデータ長が1ページの容量より小さいため、データは、分割する必要はないが、別のホスト書き込み要求のデータの全部または一部と結合して16KBのデータブロックにすることができる。ホスト書き込み要求で運ばれるデータの長さが19KBである場合、19KBのデータを2つのデータブロックにまず分割することができ、一方のデータブロックのデータ長は16KBであり、もう一方のデータブロックのデータ長は3KBであり、次いで、3KBのデータブロックと、別のホスト書き込み要求の全部または一部が、16KBのデータ長のデータブロックへと結合される。コントローラ100は、複数のホスト書き込み要求を受信した後、上述の分割および／または結合動作を柔軟に行って、ホストから受信した1つ以上のホスト書き込み要求のデータを複数の16KBデータブロックに分割し、各ホスト書き込み要求で運ばれたホスト論理ブロックアドレスに基づく計算によって、分割および／または結合によって得られた各16KBデータブロックのホスト論理ブロ
ックアドレスを取得する。本実施形態では、1ページ分の容量（16KBなど）は、説明のための一例としてのみ用いられていることに留意されたい。実際の適用では、ページの容量の整数倍を単位として、ホストからのデータに対して分割および／または結合動作を行うことができる。具体的なサイズは柔軟に設定することができる。コントローラ100は、ホスト書き込み要求を受信した後、次の手続きを開始して後続のステップの動作を行うことができる、または上述したようにホスト書き込み要求で運ばれたデータをキャッシュし、第1の条件が満たされた場合、以下の手続きを開始して後続ステップの動作を行うことができる。本実施形態では、第1の条件は、ホスト書き込み要求で運ばれたキャッシュされたデータのデータ長が特定の閾値よりも大きいことであり得る、またはコントローラ100は、ホスト書き込み要求で運ばれ、コントローラ100によってキャッシュされるデータをソリッドステートディスク200に周期的に書き込むことができ、従って、第1の条件は、新しいデータ書き込みサイクルが始動された後、以下の手続きが開始され、後続のステップの動作が行われることであり得る。
【０１００】
場合により、ステップ401を行う前に、コントローラ100は、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長をまず判定してもよい。目標データは、16KBデータブロックのうちの1つ以上であってもよい。具体的な数量は、コントローラ100によって柔軟に設定することができる。あるいは、コントローラ100は、以下の手続きのステップ402の後に、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長を判定してもよい。
【０１０１】
ステップ401：コントローラは、第1のダイを選択する。
【０１０２】
コントローラ100は、複数のダイから第1のダイをまず選択する。本発明の本実施形態では、コントローラ100は、以下のように具体的に説明される複数の基準に基づいて第1のダイを選択することができる。
【０１０３】
基準1：ランダム原則
【０１０４】
コントローラ100は、複数のダイから第1のダイとして任意のダイをランダムに選択してもよい。
【０１０５】
基準2：ステートレス優先原則
【０１０６】
コントローラ100は、複数のダイから「ステートレスダイ」を第1のダイとして選択することができる。「ステートレスダイ」は、ダイが処理されるメッセージを現在持たないことを示す。本実施形態では、「現在処理するメッセージがない」ということの考えられる原因は、コントローラ100が選択動作を実行する前に第1のダイで処理されるべきメッセージが送信されないか、第1のダイがコントローラ100が選択動作を行うときにすべての履歴メッセージを処理したことであり得る。
【０１０７】
場合により、コントローラ100は、状態テーブルをリアルタイムで維持することができ、状態テーブルは、記憶システム内の各ダイの現在の状態を記録する。各ダイの初期状態は「ステートレス」である。メッセージがダイに送信されると、ダイの状態が「ステートフル」に変わり、ソリッドステートディスクによって返された処理成功または処理失敗メッセージがその後受信されると、ダイの状態は再び「ステートレス」に変わる。この場合、コントローラ100は、第1のダイを選択する際に、コントローラ100が維持する状態テーブルに問い合わせを行い、現在「ステートレス」であるダイを第1のダイとして選択することができる。
【０１０８】
ダイはソリッドステートディスクの最小同時処理単位であるため、第1のダイがステートレスダイである場合に第1のダイにデータが書き込まれると、第1のダイが属するソリッドステートディスクがデータ書き込みを処理する場合、リアルタイム品質が最も高く、処理時間は最短である。このようにして、ソリッドステートディスクにデータを書き込む効率が最も高くなる。これは、記憶システムの全体的な処理効率の向上を促進するので、コントローラ100は、ソリッドステートディスクの記憶空間をより効果的かつ適切に使用することができる。
【０１０９】
基準3：性能優先原則
【０１１０】
ユーザが、記憶システムにデータを連続的に記憶したり、ユーザの要求に基づいて記憶システムからなんらかの記憶データを繰り返し読み出したり、なんらかの記憶されたデータを変更したりするにつれて、ユーザのデータのうちの一部は、頻繁にアクセスされる、例えば読み出されたり修正されたりすることにより、ホットデータになり得る。また、ユーザの一部のデータは、一定期間内にアクセスされないか、アクセス回数がほとんどないことから、コールドデータになる。場合により、コントローラ100は、アクセス頻度テーブルを維持し、16KBデータブロックのホスト論理ブロックアドレスをインデックスとして使用して、各16KBデータブロックのアクセス頻度を記録することができる。データブロックがソリッドステートディスクに初めて書き込まれるとき、データブロックにアクセスする回数は1回である。その後、データブロックがアクセスされるたびに、例えば、読み出しまたは変更された場合、データブロックにアクセスする回数に1が加算される。データブロックへのアクセス回数がアクセス頻度閾値より大きい場合、データブロックはホットデータであると考えられ、さもなければデータブロックへのアクセス回数がアクセス頻度閾値よりも小さい場合、データブロックはコールドデータであると考えられる。さらに、コントローラ100はまた、コールドおよびホットデータ分布テーブルをリアルタイムに記録および維持し、コールドおよびホットデータ分布テーブルは、各ダイのコールドおよびホットデータの分布を記録する、つまり、各ダイ内のホットデータの量（すなわち、アクセス頻度がアクセス頻度閾値よりも大きいデータ量）を記録し、各ダイ内のコールドデータの量（すなわち、アクセス頻度がアクセス頻度閾値未満であるデータ量）を記録するために使用される。
【０１１１】
場合により、コントローラ100が、ステップ401を行う前に、ソリッドステートディスクに書き込まれる目標データを判定した場合、コントローラ100は、第1のダイを選択するときの目標データのホスト論理ブロックアドレスに従って、アクセス頻度テーブルに問い合わせて、目標データのアクセス頻度を判定し、目標データがホットデータであることが確認された場合には、コントローラ100は、コールドおよびホットデータ分布テーブルに問い合わせ、コールドおよびホットデータ分布テーブルに記録されている各ダイに現在記憶されているホットデータの量を第1の閾値と比較し、ホットデータの量が第1の閾値未満であるダイからダイを第1のダイとして選択する。場合により、現在記憶されているホットデータの量が第1の閾値未満である複数のダイがあることが問い合わせにより分かった場合、コントローラ100は、複数のダイから、最も少ない量のホットデータを現在記憶しているダイを第1のダイとして選択することができる。場合により、現在記憶されているホットデータの量が第1の閾値未満である複数のダイがあることが問い合わせにより分かった場合、コントローラ100はまた、上述の基準1および2、または後述する基準4から6のいずれか1つ以上をさらに参照することによって、複数のダイから第1のダイを選択できる。
【０１１２】
場合により、コントローラ100が、ステップ401を行う前に、ソリッドステートディスクに書き込む目標データを判定していない場合、このステップでは、コントローラ100は、上述の分割および／または結合動作を行って取得された各16KBデータブロックのホスト論理ブロックアドレスに基づいて、アクセス論理テーブルにまず別々に問い合わせて、各16KBのデータブロックのアクセス頻度を確認し、問い合わせ結果から、各16KBデータブロックがホットデータであるかコールドデータであるかを識別できる。次いで、コントローラ100は、コールドおよびホットデータ分布テーブルに問い合わせし、各ダイに現在記憶され、かつコールドおよびホットデータ分布テーブルに記録された、ホットデータの量を第1の閾値と比較し、ホットデータの量が第1の閾値未満であるダイからのダイを第1のダイとして選択し、第1のダイは、ホットデータとして識別される16KBデータブロックのうちに1つ以上を記憶するために使用され得る。場合により、現在記憶されているホットデータの量が第1の閾値未満である複数のダイがあることが問い合わせにより分かった場合、コントローラ100は、複数のダイから、最も少ない量のホットデータを現在記憶しているダイを第1のダイとして選択することができる。場合により、現在記憶されているホットデータの量が第1の閾値未満である複数のダイがあることが問い合わせにより分かった場合、コントローラ100はまた、上述の基準1および2、または後述する基準4から6のいずれか1つ以上をさらに参照することによって、複数のダイから第1のダイを選択できる。場合により、複数の第1のダイを選択することができ、各第1のダイは、ホットデータである複数の16KBデータブロックの一部を運ぶために使用される。極端な場合は、Lの16KBデータブロックがホットデータである場合、Lの第1のダイが選択され、各第1のダイは1つの16KBデータブロックを記憶することができる。コールドデータである識別された1つ以上の16KBデータブロックに対して、場合により、コントローラ100は、コールドおよびホットデータ分布テーブルに問い合わせることによって、現在記憶されているホットデータの量が第1の閾値よりも大きいダイからダイを第1のダイとして選択する。場合により、現在記憶されているホット
データの量が第1の閾値よりも大きい複数のダイがあることが問い合わせにより分かった場合、コントローラ100は、複数のダイから、最も多い量のホットデータを現在記憶しているダイを第1のダイとして選択することができる。場合により、現在記憶されているホットデータの量が第1の閾値よりも大きい複数のダイがあることが問い合わせにより分かった場合、コントローラ100はまた、上述の基準1および2、または後述する基準4から6のいずれか1つ以上をさらに参照することによって、複数のダイから第1のダイを選択できる。場合により、複数の第1のダイも選択することができ、各第1のダイは、コールドデータである複数の16KBデータブロックの一部を記憶するために使用される。極端な場合は、Lの16KBデータブロックがコールドデータである場合、Lの第1のダイが選択され、各第1のダイは1つの16KBデータブロックを記憶することができる。場合により、コールドデータである16KBデータブロックでは、コントローラ100はまた、コールドおよびホットデータテーブルに問い合わせることによってダイを選択しないが、上述の基準1および2、または後述する基準4から6のいずれか1つ以上をさらに参照することによって、複数のダイから第1のダイを直接選択し得る。
【０１１３】
上述したように、ダイはソリッドステートディスクの最小同時処理単位であるため、ホットデータの場合、第1のダイ内のホットデータの量が第1の閾値未満である場合、ホットデータである1つ以上の16KBデータブロックデータが第1のダイに書き込まれ、第1のダイが属するソリッドステートディスクの処理のリアルタイム品質が比較的良好であり、第1のダイに含まれるブロックに1つ以上の16KBデータブロックを書き込む処理時間が比較的短いことが予想され得る。これは、記憶システムの全体的な処理効率の向上を促進するので、コントローラ100は、ソリッドステートディスクの記憶空間をより効果的に使用することができる。
【０１１４】
さらに、ソリッドステートディスクの各ダイの性能をより洗練された方法で識別するために、各ダイの性能に基づいて適切な選択を行うことができる。本発明の本実施形態では、ユーザのデータは、アクセス頻度テーブルにおいて複数のコールドまたはホットレベルに分割され得る。これに対応して、各ダイのコールドおよびホットデータの分布に関する統計が収集されるときに、複数の閾値を設定することができる。このようにして、データに対応するコールドまたはホットレベルを参照することによって、適切な第1のダイを選択することができる。
【０１１５】
基準4：有効データ量バランス原則
【０１１６】
コントローラ100は、各ダイに記憶された有効データ量を記録することができる。この場合、コントローラ100は、有効データ量が第2の閾値未満であるダイを第1のダイとして選択する。有効データ量が第2の閾値未満である複数のダイがある場合、コントローラ100は、複数の処理方式を有する：有効データ量が最も少ないダイを第1のダイとして選択する、または上述の基準1から3、または後述する基準5から6のいずれか1つ以上をさらに参照することによって、有効データ量が第2の閾値未満の複数のダイから第1のダイを選択する。
【０１１７】
第1のダイは、この基準に従って選択される。このようにして、各ダイに記憶された有効データ量は、比較的バランスがとれている。従って、コントローラ100は、ソリッドステートディスクの記憶空間をより効果的に使用することができる。
【０１１８】
基準5：疲弊度分散原理
【０１１９】
コントローラ100は、各ダイの疲弊度を記録してもよい。コントローラ100は、第1の疲弊度閾値未満の疲弊度のダイを第1のダイとして選択する。疲弊度が第1の疲弊度閾値未満である複数のダイがある場合、コントローラ100は、複数の処理方式を有する：疲弊度が最も少ないダイを第1のダイとして選択する、または上述の基準1から4、または後述する基準6のいずれか1つ以上をさらに参照することによって、疲弊度が第1の疲弊度閾値未満の複数のダイから第1のダイを選択する。
【０１２０】
コントローラ100は、疲弊度分散原理に基づいて第1のダイを選択し、それに応じて、ダイの粒度における疲弊度分散を実現することができるので、ソリッドステートディスクの寿命を延ばすことができ、コントローラ100は、ソリッドステートディスクの記憶空間をより効果的かつ適切に使用できる。
【０１２１】
基準6：読み出し要求レイテンシ原則
【０１２２】
コントローラ100は、メッセージキューを維持することができる。メッセージキューは、読み出し要求や書き込み要求など、ソリッドステートディスクに送信できるメッセージを記録する、または1つのこのようなメッセージキューが各ダイについて維持され得る。第1のダイを選択する場合、コントローラ100は、メッセージキューに問い合わせを行い、ダイに処理すべき要求が現在ないことが判明した場合には、ダイを第1のダイとして選択する、または現在処理すべき読み出し要求が第3の閾値未満であるダイを第1のダイとして選択する。複数のダイで処理すべき読み出し要求がない場合、コントローラ100は、上述の基準1から5のいずれか1つ以上をさらに参照して、処理すべき読み出し要求がない複数のダイから、第1のダイを選択し得る。現在処理すべき読み出し要求の数が第3の閾値未満である複数のダイがある場合、コントローラ100は、複数の処理方式を有する：現在処理すべき読み出し要求の数が最も少ないダイを第1のダイとして選択する、または上述の基準1から5いずれか1つ以上をさらに参照することによって、第1のダイを選択する。
【０１２３】
基準6の使用は、キー読み出し要求が現在処理される必要がある可能性のあるダイに目標データを書き込むことによって引き起こされる読み出しレイテンシを回避することができる。これは、記憶システムの全体的な性能を向上させることができるので、コントローラ100は、ソリッドステートディスクの記憶空間をより効果的に使用することができる。
【０１２４】
さらに、本発明の本実施形態では、実際の適用において、上述の基準1から6のそれぞれを別々に使用してもよく、または基準のいずれか1つ以上を組み合わせて使用してもよい。
【０１２５】
ステップ402：コントローラは、第1のセグメントを選択し、使用可能なオフセットを判定する。
【０１２６】
上述のように、コントローラ100は、予め複数のセグメントを作成する。この場合、コントローラ100は、第1のセグメントを選択し、第1のセグメントの使用可能なオフセットを判定する必要がさらにある。
【０１２７】
場合により、コントローラ100は、各ダイに割り当てられたセグメントを記録でき、例えば、各ダイについて割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストを維持し得る。割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストの各ノードは、既にダイに割り当てられているセグメントに関する基本情報を記録するために使用される。最初は、割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストはnullである。従って、コントローラ100は、第1のセグメントを選択するとき、ステップ401で選択された第1のダイに従って、第1のダイに対応する割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストをまず問い合わせ、第1のダイに割り当てられた特定のセグメントが存在する場合、特定のセグメントに使用可能な記憶空間があるか否かをさらに判定する、例えば、特定のセグメントの基本情報に記録されている使用可能なオフセットの値が最大値（上述の例に示すように、最大値は1023である）であるか否かを判定し得る。もし存在するならば、それは、特定のセグメントに使用可能な記憶空間が現在あり、特定のセグメントが第1のセグメントとして選択されていることを示し、使用可能なオフセットを判定することは、後続の手続きで処理するために第1のセグメントの基本情報に現在記録されている使用可能なオフセットを読み出すことである。コントローラ100が第1のダイにセグメントを割り当てなかったこと、または第1のダイに割り当てられた各セグメントに使用可能な記憶空間がないことが問い合わせによって検出された場合、例えば、第1のダイに割り当てられたすべてのセグメントの使用可能なオフセットの値が最大値に達した場合、新しいセグメントを第1のダイに割り当てる必要があることを示す。例えば、コントローラ100は、上述のブランクセグメントキューから任意のブランクセグメントを第1のセグメントとして選択してもよい。この場合、第1のセグメントの使用可能なオフセットは、第1のセグメントの開始アドレスである、すなわち、使用可能なオフセットは0であり得る。当業者であれば、セグメントのオフセットが1から開始して記録される場合、この場合、使用可能なオフセットは1であることを理解されよう。次いで、選択された第1のセグメントに関する基本情報がブランクセグメントキューから除去され、第1のダイに対応する割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストに記録される。
【０１２８】
一般に、セグメントがダイに割り当てられた後、そのセグメントに対応する整数量のブロックがすべてダイから来るはずである。しかしながら、実際の適用では、記憶システムによって記憶空間をより柔軟に管理および割り当てする目的を達成するために、別のオプションの実装は、セグメントを複数のダイに割り当てることができることである。この場合、セグメントに対応する整数量のブロックは、異なるダイから来ることができる。上述のように、柔軟な管理の目的を達成するために、パーシャルロードセグメントキューを作成することができる。コントローラ100は、各ダイについて維持されている割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストに記録された各割り当てられたセグメントの使用可能なオフセットを、リアルタイムまたは周期的に検出することができる。各割り当てられたセグメントの記憶空間の使用は、使用可能なオフセットに基づいて計算され、例えば、式「（使用可能なオフセット＋1）／各ブロックに含まれるページ数」を使用して計算することができる。計算結果が正の整数である場合、整数量のブロックの記憶空間がセグメント内に現在既に使用されていることを示す。この場合、セグメントに関する基本情報は、割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストから除去され、セグメントに関する基本情報がパーシャルロードセグメントキューに記録され得る。この場合、第1のセグメントを選択し、使用可能なオフセットを確認することは、以下のステップに従って行うことができる。
【０１２９】
コントローラ100は、第1のダイに対応する割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストをまず問い合わせし、第1のダイに割り当てられたセグメントが存在し、セグメントに使用可能な記憶空間がある場合、セグメントを第1のセグメントとして選択する。コントローラ100が第1のダイにセグメントを割り当てなかったこと、または第1のダイに割り当てられた各セグメントに使用可能な記憶空間がないことが問い合わせによって検出された場合、コントローラ100は、パーシャルロードセグメントキューに問い合わせし、セグメントがパーシャルロードセグメントキューに存在する場合、セグメントを第1のセグメントとして選択する。さらに、選択された第1のセグメントに関する基本情報がパーシャルロードセグメントキューから除去され、第1のダイに対応する割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストに記録され得る。さらに、パーシャルロードセグメントキューがnullである場合、上述のブランクセグメントキューから任意のブランクセグメントが第1のセグメントとして選択され、次いで、選択された第1のセグメントに関する基本情報がブランクセグメントキューから除去され、第1のダイに対応する割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストに記録される。
【０１３０】
場合により、コントローラ100は、第1のダイに割り当てられたセグメント内に使用可能な空間があるか否か最初に問い合わせることはしないが、ブランクセグメントキューから任意のブランクセグメントを第1のセグメントとしてまず直接選択でき、次いで、選択された第1のセグメントに関する基本情報をブランクセグメントキューから除去し、第1のダイに対応する割り当てられたセグメントのアレイまたは割り当てられたセグメントのリンクされたリストに基本情報を記録する。当業者であれば以下の場合が生じ得ることを理解されよう：記憶システムのすべてのブランクセグメントがまもなく割り当てられる。この場合、ブランクセグメントを割り当てできない場合、コントローラ100は、ガベージコレクションメカニズムを開始でき、その結果、各ダイの有効データがいくつかのセグメントに記憶され、いくつかのセグメントが後続の割り当てのためにブランクセグメントとして解放される。別の可能な実装は、この段落で説明したセグメント選択方法および上述の割り当て方法を組み合わせて使用することである。
【０１３１】
当業者であれば、本明細書ではアレイまたはリンクされたリストは一実施形態にすぎないことを理解されよう。しかしながら、実際の適用では、ツリーなどの他の可能な様々なデータ構造が、各ダイに割り当てられたセグメントに関する基本情報を記録するために柔軟に使用されてもよい。本発明の本実施形態では、データ構造は具体的に限定されるものではない。
【０１３２】
ステップ403：コントローラは、書き込み要求を生成する。
【０１３３】
書き込み要求は、ソリッドステートディスクにデータを書き込むために使用される。コントローラ100は、第1のダイおよび第1のセグメントを選択し、使用可能なオフセットを判定した後に、書き込み要求を生成することができる。書き込み要求には、書き込みアドレスと、目標データと、データ長と、が含まれる。
【０１３４】
書き込みアドレスに含まれる内容については、次の2つのシナリオが存在し得る。
【０１３５】
（1）書き込みアドレスは、第1のダイに接続されたチャネルの識別子、第1のダイの識別子、第1のセグメントの識別子、および使用可能なオフセットを含む。
【０１３６】
（2）書き込みアドレスは、第1のダイの識別子、第1のセグメントの識別子、および使用可能なオフセットを含む。上述した実施形態で説明したコントローラ100によって割り当てられたダイ識別子に関する説明を参照すると、チャネル識別子がダイ識別子の一部としてダイ識別子に既に含まれている場合、書き込みアドレスはシナリオ（2）に適用され得る。
【０１３７】
目標データは、ソリッドステートディスクに書き込まれるデータであり、データ長は、目標データのデータ長である。上述したように、可能な実装は次のとおりである：ステップ402の後、コントローラ100は、第1のセグメントの使用可能なオフセットの値に基づいて、目標データおよびデータ長を判定する。具体的には、使用可能なオフセットの値に基づいて、第1のセグメントにおける現在の残りの使用可能な記憶空間を判定することができる。この場合、書き込み要求におけるデータ長は残りの使用可能な記憶空間を超えることはできず、判定されたデータ長に基づいて目標データが選択される。例えば、使用可能なオフセットの値が1023である場合、これは、1つのオフセットに対応する記憶空間が第1のセグメントで使用可能であることを示す。上述のように、1つのオフセットは1ページの容量、すなわち16KBに対応する。従って、データ長は16KBである。この場合、目標データは、16KBのデータ長の上述の1つのデータブロックでなければならない。同様に、使用可能なオフセットの値が1022である場合、データ長は32KBでなければならず、目標データは上述の2つの16KBデータブロックでなければならない。残りは類推によって推測することができる。極端な場合は、使用可能なオフセットの値が0である場合、データ長は最大16KBに1024を乗じたものになり得る。この場合、目標データは、最大1024×16KBデータブロックであり得る。当業者であればセグメント内に十分な使用可能な空間がある場合、すなわち、使用可能なオフセットの値が依然として比較的小さい場合には、コントローラ100は、十分な使用可能な空間の範囲においてデータ長を柔軟に設定できることを理解されよう。このことは、本実施形態においてここでは限定されるものではない。コントローラ100は、分割および／または結合を行って取得された上述の複数の16KBデータブロックから、対応するデータブロック数を目標データとして選択し得る。ここで、ステップ401において基準3に基づいて第1のダイが選択された場合、このステップで目標データが選択された場合、目標データは、ホットデータとして識別される1つ以上の16KBデータブロックから選択されるべきであることに留意されたい。
【０１３８】
場合により、上述したように、目標データおよび目標データのデータ長はまた、上述のステップ401の前にコントローラ100によって判定されてもよい。この場合、コントローラ100は、ステップ403の前に、目標データの判定されたデータ長と、第1のセグメントの使用可能なオフセットに基づいて判定される第1のセグメントの使用可能な記憶空間と、をまず比較してもよい。目標データのデータ長が第1のセグメントの使用可能な記憶空間未満である場合、目標データおよび目標データのデータ長は直接書き込み要求に含められる。目標データのデータ長が第1のセグメントの使用可能な記憶空間よりも大きい場合、コントローラ100は、第1のセグメントの使用可能な記憶空間に従って、目標データを2つのサブブロックに分割する必要があり、第1のサブブロックのデータ長は、第1のセグメントの使用可能な記憶空間以下であり、第2のサブブロックは、目標データにおける第1のサブブロック以外の残りの部分である。この場合、このステップでは、コントローラ100は、分割により取得された第1のサブブロックおよび第1のサブブロックの対応するデータ長を、それぞれ、目標データおよび目標データのデータ長として、書き込み要求に含め、後続の手続きを行う。第2のサブブロックについて、ステップ402および403を繰り返し実行してもよいし、場合により、ステップ401、402、および403を繰り返し実行してもよい。例えば、ステップ401の前にコントローラ100によって確認された目標データのデータ長が64KBであるが、ステップ402で選択された第1のセグメントの使用可能なオフセットが1022である場合、第1のセグメントにおける残りの使用可能な空間は32KBのデータしか記憶できないことを示している。この場合、本発明の本実施形態では、コントローラ100は、64KBの目標データを32KBのデータ長の第1のサブブロックと第2のサブブロックとに分割し、第1のサブブロックを書き込み要求に追加し、後続の手続きを行うことができる。第2のサブブロックについて、ステップ402および403が繰り返し実行され、場合により、第2のサブブロックについて、ステップ401、402、および403を繰り返し実行してもよい。
【０１３９】
場合により、コントローラ100は、目標データを判定した後、目標データに基づいて第1のセグメントに関する基本情報を更新することができ、具体的には、第1のセグメントに関する基本情報におけるホスト論理ブロックアドレスフィールドが、目標データのホスト論理ブロックアドレスを含むか否かを問い合わせるステップと、含まない場合、目標データのホスト論理ブロックアドレスを第1のセグメントに関する基本情報におけるホスト論理ブロックアドレスフィールドに記録するステップ、または含む場合、これは、ホスト書き込み要求が履歴的に記憶されたデータを修正することを意図することを示し、第1のセグメントに関する基本情報における無効データの量の値に1を加えるステップと、第1のセグメントの状態を「書き込み状態」に更新するステップと、目標データのデータ長に基づいて、第1のセグメントに関する基本情報に記録されている使用可能なオフセットの値を更新するステップと、を含む。例えば、データ長をソリッドステートディスク200のページの容量で割って計算結果を求めることができ、その計算結果を第1のセグメントに関する基本情報の現在の使用可能なオフセットの値に加算し、使用可能なオフセットの更新された値が得られ、使用可能なオフセットの更新された値は、別の新しい書き込み要求を処理するために使用される。場合により、基本情報におけるソリッドステートディスク識別子は、第1のダイが属するソリッドステートディスクの識別子として記録されてもよく、チャネル識別子は、第1のダイが接続するチャネルの識別子として記録されてもよく、ダイ識別子は、第1のダイの識別子として記録されてもよい。さらに、コントローラ100はまた、目標データのホスト論理ブロックアドレスを使用して、第1のセグメント以外であり、各ダイに既に割り当てられているセグメントを問い合わせする。セグメントが他の割り当てられたセグメントに存在し、セグメントに関する基本情報に記録されているホスト論理アドレスが、記憶するデータのホスト論理アドレスを含む場合には、目標データのホスト論理アドレスは、セグメントに関する基本情報から削除され、セグメントに関する基本情報における無効データ量の値に1が加算される。第1のセグメントに関する基本情報をリフレッシュする動作は、ステップ403の後に行われてもよい。
【０１４０】
ステップ404：コントローラは、書き込み要求を送信する。
【０１４１】
書き込み要求を生成した後、コントローラ100は、ソリッドステートディスクにデータを書き込むために、第1のダイが属するソリッドステートディスクに書き込み要求を送信する。
【０１４２】
さらに、本発明の本実施形態では、コントローラ100は、予めシステムマッピングテーブルを生成することができる。以下の表1に示すように、システムマッピングテーブルの各行は、「ホスト論理ブロックアドレス」と「ソリッドステートディスクの書き込みアドレス」との間のマッピング関係を記録するために使用されるマッピング関係を表すことができ、ソリッドステートディスクの書き込みアドレスは、「ソリッドステートディスク識別子＋チャネル識別子＋ダイ識別子＋セグメント識別子＋使用可能なオフセット」によって示され得る。初期状態のシステムマッピングテーブルは、nullであり得る。以下の表1に示すように、表1はシステムマッピングテーブルの一例である。
【０１４３】
【表１】
2019508765.tif 000003
【０１４４】
場合により、上述のマッピング関係の本質が満たされる場合、具体的には、各行の記録形式は、例えば、複数の変数実装を含む。
【０１４５】
変数実装1：ホスト論理ブロックアドレスの最後のビットまたは複数のビットがソリッドステートディスク識別子に対応する。この場合、ソリッドステートディスク識別子に関する情報は、上記表1の右列に再び記録されない場合がある。
【０１４６】
変数実装2：上述のダイ識別子割り当て規則を参照すると、ダイ識別子がダイ識別子の一部としてチャネル識別子を既に使用している場合、チャネル識別子に関する情報は、上記表1の右列に再び記録されない場合がある。さらに、ダイ識別子がソリッドステートディスク識別子およびチャネル識別子をダイ識別子の一部として既に使用している場合、ソリッドステートディスク識別子およびチャネル識別子に関する情報は、上記表1の右列に再び記録されない場合がある。
【０１４７】
他の変数実装は、本実施形態では1つ1つこれ以上示さない。上述のマッピング関係の本質を満たす様々な変数実装はすべて、本発明の実施形態の保護範囲内に含まれる。
【０１４８】
上述のステップ402、ステップ403、またはステップ404を行った後、コントローラ100は、書き込み動作のための新しいマッピング関係を生成し、システムマッピングテーブルに新しいマッピング関係を記憶することができる。新しいマッピング関係では、ホスト論理ブロックアドレスは、書き込み要求で運ばれる目標データのホスト論理ブロックアドレスであり、ソリッドステートディスク識別子は、選択された第1のダイが属するソリッドステートディスクの識別子であり、チャネル識別子は、選択された第1のダイに接続されたチャネルの識別子であり、ダイ識別子は、選択された第1のダイの識別子であり、使用可能なオフセットは、選択された第1のセグメントの記録された使用可能なオフセットである。
【０１４９】
さらに、本発明の本実施形態では、コントローラ100は、新しいマッピング関係を生成する前または後に、書き込み要求で運ばれた目標データのホスト論理ブロックアドレスに基づいて、システムマッピングテーブルに問い合わせることができる。コントローラ100が、目標データのホスト論理ブロックアドレスに関連付けられたマッピング関係が、システムマッピングテーブルに既に存在することを発見した場合、書き込み要求が履歴的に書き込まれたデータを変更することを意図していることを示す。この場合、システムマッピングテーブル内の既存のマッピング関係は、無効状態でマークされる。当業者であれば、新しいマッピング関係が生成された後に問い合わせ動作が行われる場合、新しいマッピング関係が問い合わせ範囲内に入るべきではないことを理解されよう。上述の無効化動作は、既存の履歴マッピング関係を主に対象としている。
【０１５０】
上記表1は、マッピング関係を記憶するための一形態にすぎないことを留意されたい。実際の適用では、アレイまたはリンクされたリストなどの複数の形式を使用してマッピング関係を記憶できる。このことは、本実施形態において限定されるものではない。
【０１５１】
本発明の本実施形態では、ソリッドステートディスクに書き込むデータがある場合、コントローラ100は、第1のダイを選択する必要があり、書き込む目標データが第1のダイに含まれるブロックに記憶されるべきであることを示し、その後、ソリッドステートディスクは、目標データを記憶するために第1のダイの範囲内に物理的な記憶リソースを割り当てる必要がある。これにより、ソリッドステートディスクが、内部ポリシーだけに基づいて、物理的記憶リソースを書き込み要求に自律的に割り当てるために生じる不均衡なデータ分布やいくつかのダイの輻輳などにより、ソリッドステートディスクの記憶リソースを有効に使用できないという従来の問題が回避される。さらに、第1のダイを選択する際に、コントローラ100は、ソリッドステートディスクに書き込むデータのための最適なダイを選択するために、上述の選択基準、例えば、ダイの状態、データアクセス頻度、ダイの有効データ量、ダイの疲弊度、およびダイで処理される読み出し要求などの要因のうちの1つ以上を柔軟に使用でき、その結果、コントローラ100は、ソリッドステートディスクの記憶空間を有効に使用できる。
【０１５２】
図5に示すように、図5は、ソリッドステートディスク200が書き込み要求を受信した後の処理の流れ図である。図2に示すソリッドステートディスク200の概略的な構成図を参照すると、通信インターフェース2001は、コントローラ100から書き込み要求を受信し、プロセッサ2002は、具体的には以下のような、後続の処理を行う。
【０１５３】
ステップ500：ソリッドステートディスクは、ローカルマッピングテーブルに問い合わせし、ローカルマッピングテーブルは、「セグメント」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピング関係を記録するために使用される。
【０１５４】
ソリッドステートディスク200は、予めローカルマッピングテーブルを生成する。例えば、プロセッサ2002は、プログラム命令を実行して、ローカルマッピングテーブルを作成することができる。ローカルマッピングテーブルは、メモリ2003に記憶されてもよいし、記憶媒体に記憶されてもよく、使う必要に応じてメモリ2003に読み込まれてもよい。ローカルマッピングテーブルに記録されたマッピング関係は、「セグメント」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピング関係を示すために使用される。ローカルマッピングテーブルは、最初はnullであり得る。ソリッドステートディスク200によってチャネル識別子、ダイ識別子、およびブロック識別子を割り当てるための異なる規則に基づいて、ローカルマッピングテーブルは複数の実装を有することができる。
【０１５５】
実装1：以下の表2に示すように、ローカルマッピングテーブル内のソリッドステートディスクの物理ブロックアドレスは、ブロック識別子によって示され得る。
【０１５６】
【表２】
2019508765.tif 000004
【０１５７】
実装2：ソリッドステートディスクの物理ブロックアドレスは、「ダイ識別子＋ブロック識別子」によって示される、または「チャネル識別子＋ダイ識別子＋ブロック識別子」によって示される。具体的には、どの方法が使用されるかは、以下の表3に示すように、ダイ識別子がチャネル識別子を含むか否かによって決まる。
【０１５８】
【表３】
2019508765.tif 000005
【０１５９】
さらに、ローカルマッピングテーブルでは、使用可能なオフセットおよびページに関する情報を上述のマッピング関係に追加して、「セグメント＋使用可能なオフセット」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピングを形成することもできる。ソリッドステートディスクの物理ブロックアドレスは、ページの識別子をさらに含む。表4に示すように、上述の実装1では、使用可能なオフセットおよびページの識別子がマッピング関係に追加される。
【０１６０】
【表４】
2019508765.tif 000006
【０１６１】
以下の表5に示すように、使用可能なオフセットおよびページの識別子も、上述の実装2のマッピング関係に追加することができる。
【０１６２】
【表５】
2019508765.tif 000007
【０１６３】
ソリッドステートディスク200の通信インターフェース2001がコントローラ100から書き込み要求を受信した後、プロセッサ2002は、書き込み要求を解析し、書き込み要求で運ばれる書き込みアドレスに含まれる第1のセグメントの識別子および使用可能なオフセットに基づいて、ローカルマッピングテーブルに問い合わせる。
【０１６４】
実際の適用では、各セグメントの容量が2以上のブロックの容量に相当する場合、ブロックの容量が8MBであり、セグメントの容量が16MBである上述の例に示すように、各ブロックに512ページが含まれているが、16MBの容量を有するセグメントのオフセットは1024であり、それぞれ1204ページに対応し、この場合、ローカルマッピング関係は、次の表6に示す多次元アレイのローカルマッピングテーブルなどの多次元アレイの方式で記憶され得る。表中、各行はセグメントのすべてのマッピング関係を記録するために使用される。表中、ソリッドステートディスクの物理ブロックアドレス1、ソリッドステートディスクの物理ブロックアドレス2、・・・、ソリッドステートディスクの物理ブロックアドレスXは、セグメントに対応する複数のブロックのそれぞれの具体的な物理ブロックアドレスをそれぞれ表し、セグメントの容量に基づいてXの値が判定される。セグメントの容量がブロックの容量の2倍の場合、Xの値は2に設定され、セグメントの容量がブロックの容量の5倍の場合、Xの値は5に設定され、残りは類推によって推論することができる。テーブルが問い合わせされると、プロセッサ2002は、書き込み要求の書き込みアドレスに含まれる第1のセグメントの識別子に基づいて、問い合わせをまず行う。ローカルマッピングテーブルの行に記録されたセグメント識別子のいずれも、第1のセグメントの識別子と同じでないことが判明した場合、書き込み要求を受信する前にソリッドステートディスクが第1のセグメントにブロックを割り当てなかったことを示す。さらに、ローカルマッピングテーブルのマッピング関係の行に記録されたセグメント識別子が、第1のセグメントの識別子と同じであることが判明した場合、プロセッサ2002は、書き込み要求の書き込みアドレスに含まれる使用可能なオフセットに基づいて、ソリッドステートディスクの物理ブロックアドレスのどの列に問い合わせを行うべきかを計算する。例えば、計算は、式「X＝（使用可能なオフセット＋1）／各ブロックに含まれるページの数」従って行われてもよく、Xは切り上げされる。つまり、0＜X≦1の場合、Xの値は1であり、1＜X≦2の場合、Xの値は2、残りは類推によって推論することができる。上述の例に示すように、各ブロックに含まれるページ数は512である。この
場合、使用可能なオフセットが0から511でる場合、ソリッドステートディスクの物理ブロックアドレス1の列を照会しなければならず、使用可能なオフセットが512から1023である場合、ソリッドステートディスクの物理ブロックアドレス2の列を照会しなければならず、残りは類推によって推論することができる。多次元アレイのローカルマッピングテーブルに問い合わせるステップは、第1のセグメントの識別子に対応する行が、使用可能なオフセットに基づいて計算されるソリッドステートディスクの物理ブロックアドレスXの列と交差するセルに、ブロックの識別子が記録されているか否かを判定するステップである。記録されていれば、それは、ソリッドステートディスク200のプロセッサ2002が、使用可能なオフセットに対応するブロックを第1のセグメントに割り当てたことを示す。問い合わせ結果がnullである場合、これは、ソリッドステートディスク200のプロセッサ2002が、使用可能なオフセットに対応するブロックを第1のセグメントに割り当てなかったことを示す。
【０１６５】
【表６】
2019508765.tif 000008
【０１６６】
場合により、ソリッドステートディスク200のすべてのローカルマッピング関係は、複数レベルのローカルマッピングテーブルを使用することによって管理することができる。各レベルのローカルマッピングテーブルは、セグメントの使用可能なオフセットが1つのブロックに対応するローカルマッピング関係を管理するために使用される。例えば、第1のレベルのローカルマッピングテーブルは、セグメントの使用可能なオフセットが0から511であるローカルマッピング関係を記憶するために使用され、第2レベルのローカルマッピングテーブルは、セグメントの使用可能なオフセットが512から1023であるローカルマッピング関係を記憶するために使用される。セグメントの容量が大きい場合には、より多くのレベルのローカルマッピングテーブルが対応して作成される。ソリッドステートディスク200のプロセッサ2002がローカルマッピングテーブルに問い合わせることは、具体的には、次のとおりであり得る：書き込み要求内の書き込みアドレスに含まれる使用可能なオフセットに基づいて、例えば、次の式を用いて、第Xのレベルのローカルマッピングテーブルをまず判定するステップ。
X＝（使用可能なオフセット＋1）／各ブロックに含まれるページの数。
【０１６７】
Xは切り上げされる。つまり、0＜X≦1の場合、Xの値は1であり、1＜X≦2の場合、Xの値は2、残りは類推によって推論することができる。上述の例に示すように、各ブロックに含まれるページ数は512である。この場合、使用可能なオフセットが0から511である場合、使用可能なオフセットは第1のレベルのローカルマッピングテーブルに対応し、使用可能なオフセットが512から1023である場合、使用可能なオフセットは第2のレベルのローカルマッピングテーブルに対応し、残りは類推によって推論することができる。次いで、対応するレベルのローカルマッピングテーブルは、書き込み要求の書き込みアドレスに含まれる第1のセグメントの識別子に基づいて、問い合わせされる。マッピング関係が対応するレベル上のローカルマッピングテーブル内で見つけることができる場合、それは、ソリッドステートディスク200のプロセッサ2002が、使用可能なオフセットに対応するブロックを第1のセグメントに割り当てたことを示す。マッピング関係が見つからない場合、これは、ソリッドステートディスク200のプロセッサ2002が、使用可能なオフセットに対応するブロックを第1のセグメントに割り当てなかったことを示す。
【０１６８】
ステップ501：ソリッドステートディスクは、割り当てられたブロックが存在するか否かを確認する。
【０１６９】
上述のステップ500の問い合わせ結果に従って、使用可能なオフセットに対応するブロックが既に第1のセグメントに割り当てられていることが確認された場合、ステップ502が行われる、または、使用可能なオフセットに対応するブロックが第1のセグメントに割り当てられていない場合、ステップ503が行われる。
【０１７０】
ステップ502：ソリッドステートディスクは、割り当てられたブロックにデータを書き込む。
【０１７１】
ソリッドステートディスク200のプロセッサ2002が、割り当てられたブロックに書き込み要求で運ばれた目標データを書き込むことは、具体的には、以下のとおりであり得る：使用可能なオフセットを使用して対応するページ識別子をまず計算するステップ。例えば、次の式を計算に使用できる。
ページ識別子＝使用可能なオフセット％各ブロックに含まれるページの数、
ここで、「％」はモジュロ演算を示す。
【０１７２】
ソリッドステートディスク200のプロセッサ2002は、ページ識別子に対応するページから開始して、割り当てられたブロックに書き込み要求で運ばれた目標データを書き込む。
【０１７３】
ステップ503：ソリッドステートディスクは、ブランクブロックを選択する。
【０１７４】
ステップ402の上述の説明を参照すると、書き込みアドレスが、第1のダイに接続されたチャネルの識別子および第1のダイの識別子を含む場合、このステップにおけるソリッドステートディスク200のプロセッサ2002は、第1のダイに接続されたチャネルの識別子および第1のダイの識別子に従って、第1のダイに含まれる複数のブロックからブランクブロックを選択する、または書き込みアドレスが、第1のダイの識別子を含む場合、ソリッドステートディスク200のプロセッサ2002は、第1のダイの識別子に従って、第1のダイに含まれる複数のブロックからブランクブロックを選択する。さらに、本実施形態では、ここで、第1のダイの識別子と第1のダイに接続されたチャネルの識別子とが、ソリッドステートディスク200によってコントローラ100に報告された場合、コントローラ100は、第1のダイの識別子に従って、もしくは第1のダイに接続されたチャネルの識別子および第1のダイの識別子に従って、第1のダイを直接識別できる、または上述のように、第1のダイに接続されたチャネルの識別子および第1のダイの識別子がコントローラ100自身によって割り当てられている場合、ソリッドステートディスク200のプロセッサ2002は、コントローラ100が先に送信した識別子割り当て規則に従って、第2の書き込み要求で運ばれた第1のダイに接続されたチャネルの識別子と第1のダイの識別子とを、チャネルとダイについてソリッドステートディスク200によって使用される識別子に変換し、変換によって取得された識別子に基づいて、第1のダイに含まれる複数のブロックからブランクブロックを選択する。
【０１７５】
ステップ504：ソリッドステートディスクは、ブランクブロックにデータを書き込む。
【０１７６】
ソリッドステートディスク200のプロセッサ2002が、ブランクブロックに書き込み要求で運ばれた目標データを書き込むことはまた、具体的には、以下のとおりであり得る：使用可能なオフセットを使用して対応するページをまず計算するステップ。例えば、次の式を計算に使用できる。
ページ識別子＝使用可能なオフセット％各ブロックに含まれるページの数、
ここで、「％」はモジュロ演算を示す。
【０１７７】
ソリッドステートディスク200のプロセッサ2002は、ページ識別子に対応するページから開始して、ブランクブロックに書き込み要求で運ばれたデータを書き込む。
【０１７８】
さらに、ソリッドステートディスク200のプロセッサ2002は、新しいマッピング関係を生成する。上述したようにローカルマッピングテーブルが「セグメント」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピングを示す場合、ステップ503またはステップ504の後に、プロセッサ2002は、第1のセグメントの識別子および選択されたブランクブロックの識別子に基づいて、新しいマッピング関係を生成し、新しいマッピング関係をローカルマッピングテーブルに記憶し得る。上述のようにローカルマッピングテーブルが「セグメント＋使用可能なオフセット」と「ソリッドステートディスクの物理ブロックアドレス」との間のマッピングを示す場合、ステップ502の後、プロセッサ2002は、第1のセグメントの識別子、使用可能なオフセット、割り当てられたブロックの識別子、および使用可能なオフセットに対応するページ識別子に基づいて、新しいマッピング関係を生成し、新しいマッピング関係をローカルマッピングテーブルに記憶する、またはステップ503またはステップ504の後に、プロセッサ2002は、第1のセグメントの識別子、使用可能なオフセット、ブランクブロックの識別子、および使用可能なオフセットに対応するページ識別子に基づいて、新しいマッピング関係を生成し、新しいマッピング関係をローカルマッピングテーブルに記憶する。
【０１７９】
場合により、ソリッドステートディスク200の通信インターフェース2001がコントローラ100から書き込み要求を受信した後、プロセッサ2002は、書き込み要求で運ばれたデータをメモリ2003にまずキャッシュし、次いで、書き込み成功メッセージをコントローラ100に送信してもよいし、ステップ503またはステップ505の後に、書き込み成功メッセージ（図示せず）をコントローラ100に送信してもよい。
【０１８０】
本発明の本実施形態では、ソリッドステートディスクは、コントローラ100によって指定されたダイに含まれるブロックに書き込み要求における目標データを書き込む。これにより、ソリッドステートディスクが、内部ポリシーだけに基づいて、物理的記憶リソースを書き込み要求に自律的に割り当てるために生じる不均衡なデータ分布やいくつかのダイの輻輳などにより、ソリッドステートディスクの記憶リソースを有効に使用できないという従来の問題が回避される。
【０１８１】
図6に示すように、図6は、本発明の一実施形態による記憶システムにおける読み出し要求を処理するための方法の流れ図である。
【０１８２】
ステップ600：コントローラは、第1の読み出し要求を受信する。
【０１８３】
コントローラ100は、ホストから第1の読み出し要求を受信する。第1の読み出し要求は、ホスト論理ブロックアドレスおよびデータ長を運ぶ。ここで、ホスト論理ブロックアドレスは、読み出しするデータの開始アドレスを示し、データ長は、読み出しするデータの長さを示すために用いられる。
【０１８４】
ステップ601：コントローラは、システムマッピングテーブルに問い合わせる。
【０１８５】
コントローラ100は、第1の読み出し要求で運ばれたホスト論理ブロックアドレスに基づいて、システムマッピングテーブルに問い合わせる。ホスト論理ブロックアドレスに対応するマッピング関係が見つかり得る場合には、これは、読み出しするデータが記憶システムに既に記憶されていることを示し、その後の処理が継続され、そうでない場合には、これは、読み出しするデータが記憶システムに記憶されていないことを示し、コントローラ100は、ホストに読み出し失敗メッセージ（図示せず）を返すことができる。
【０１８６】
ステップ602：コントローラは、第2の読み出し要求を生成する。
【０１８７】
コントローラ100は、第2の読み出し要求を生成する。第2の読み出し要求には、読み出しアドレスとデータ長とが含まれる。データ長は、第1の読み出し要求で運ばれるデータ長であり、読み出しアドレスは、システムマッピングテーブルから見出されたマッピング関係に基づいて生成される。上述の実施形態で説明したように、マッピング関係は、「ホスト論理ブロックアドレス」と「ソリッドステートディスク識別子＋チャネル識別子＋ダイ識別子＋セグメント識別子＋使用可能なオフセット」との間のマッピングを記録するために使用される。この場合、コントローラ100が、第1の読み出し要求で運ばれたホスト論理ブロックアドレスに基づいて、ホスト論理ブロックアドレスに関連付けられたマッピング関係を見つけた後、コントローラ100は、マッピング関係に基づいて読み出しアドレスを生成する。場合により、読み出しアドレスは、ホストブロック論理アドレスに対応するマッピング関係に記録された、チャネル識別子、ダイ識別子、セグメント識別子、および使用可能なオフセットを含むことができる。場合により、上述の実施形態で説明したシステムマッピングテーブルの複数の可能な実装では、ダイ識別子が既にダイ識別子の一部としてチャネル識別子を使用している可能性があるので、読み出しアドレスもチャネル識別子を含まない場合がある。つまり、この場合、読み出しアドレスは、ホスト論理アドレスに対応するマッピング関係に記録された、ダイ識別子、セグメント識別子、および使用可能なオフセットを含むことができる。
【０１８８】
ステップ603：コントローラは、第2の読み出し要求をソリッドステートディスクに送信する。
【０１８９】
第2の読み出し要求を生成した後、コントローラ100は、見つかったマッピング関係に含まれる半導体ディスク識別子に基づいて、ソリッドステートディスク識別子に対応するソリッドステートディスク200に第2の読み出し要求を送信する。
【０１９０】
ステップ604：ソリッドステートディスクは、ローカルマッピングテーブルに問い合わせる。
【０１９１】
ソリッドステートディスク200の通信インターフェース2001が第2の読み出し要求を受信した後、ソリッドステートディスク200のプロセッサ2002は、第2の読み出し要求で運ばれた読み出しアドレスとデータ長とに基づいて、データを読み出す。ここで、ローカルマッピングテーブルは、読み出しアドレスで運ばれたセグメント識別子に従って、まず問い合わせされる。ローカルマッピングテーブルにマッピング関係が見つからない場合、ソリッドステートディスク200のプロセッサ2002は、通信インターフェース2001を使用して、コントローラ100に読み出し失敗メッセージ（図示せず）を返すことができ、処理を終了する。
【０１９２】
ステップ605：ソリッドステートディスクは、データを読み出す。
【０１９３】
ソリッドステートディスク200のプロセッサ2002は、第2の読み出し要求の読み出しアドレスで運ばれたダイ識別子と、ステップ604においてローカルマッピングテーブルから見つけたマッピング関係に含まれるソリッドステートディスクの物理アドレスと、に基づいてデータを読み出す、または第2の読み出し要求の読み出しアドレスで運ばれたチャネル識別子およびダイ識別子と、ステップ604においてローカルマッピングテーブルから見つけたマッピング関係に含まれるソリッドステートディスクの物理アドレスと、に基づいてデータを読み出す。
【０１９４】
場合により、実際の適用では、このステップでは、ソリッドステートディスクのいくつかのブロックまたはページの損傷などのために、データを読み出すことができない場合がある。このことが生じた場合、ソリッドステートディスク200のプロセッサ2002は、通信インターフェース2001を使用して、コントローラ100に読み出し失敗メッセージ（図示せず）を返すことができ、処理を終了する。
【０１９５】
ステップ606：ソリッドステートディスクは、読み出されたデータをコントローラに送信する。
【０１９６】
データを読み出した後、ソリッドステートディスクのプロセッサ2002は、通信インターフェース2001を使用して、読み出されたデータをコントローラ100に送信する。
【０１９７】
ステップ607：コントローラは、読み出されたデータをホストに送信する。
【０１９８】
コントローラ100は、ソリッドステートディスク200が送信した読み出されたデータを受信した後、読み出されたデータをホストに送信する。ここまでで、読み出し要求の処理が完了している。
【０１９９】
上述の実施形態では、コントローラ100がセグメントを作成した場合、新たに作成されたセグメントと、ソリッドステートディスク、チャネル、およびダイと、の間に関係はない。第1のダイと第1のセグメントとの間の関連関係は、第1のダイが選択され、第1のセグメントが選択された後にのみ確立される。本発明の本実施形態によって提供される別のオプションの実装では、コントローラ100は、セグメントを作成するとき、セグメントに割り当てられたセグメント識別子を使用して、セグメントと、ソリッドステートディスク、チャネル、およびダイと、の関連関係を確立する。例えば、セグメント識別子を各セグメントに割り当てる場合、コントローラ100は、セグメントとダイとの間の関連関係を確立することができる。具体的には、複数の実装が存在し得る。場合により、例えば、セグメント識別子は、チャネル識別子＋ダイ識別子＋セグメント識別子の3つの部分を含んで、チャネル識別子およびダイ識別子に対応するダイ内のブロックからセグメントの記憶空間が来るべきであること示すことができる。場合により、セグメント識別子とチャネル識別子とダイ識別子との間のマッピング関係は、アルゴリズム、例えばハッシュ（Hash）アルゴリズム：チャネル識別子＝セグメント識別子％チャネルの数を使用することによって確立されてもよい。上述の例に示すように、チャネルの数は16であってもよく、ダイ識別子＝（セグメント識別子％チャネルの数）％各チャネルのダイの数である。上述の例に示すように、各チャネルのダイの数は8であってもよく、この場合、コントローラ100は、上述のハッシュアルゴリズムに基づいて各セグメントの識別子を判定することができる。セグメントを作成した後、コントローラ100は、上述の規則に基づいて、セグメントに関する基本情報にセグメント識別子を構成する。セグメントに関する基本情報の他の項目の構成については、上述の実施形態の説明を参照されたい。ここでは細部をこれ以上説明しない。本実施形態では、各セグメントが作成され、セグメント識別子が割り当てられた後、セグメントとダイとの間の関連関係が確立される。この場合、セグメントは、セグメントに関連付けられたダイのアレイまたはリンクされたリストに直接記録されてもよく、アレイまたはリンクされたリストの各ノードは、ダイに関連付けられたセグメントに関する基本情報を記録するために使用される。
【０２００】
上述のセグメントに基づいて、本発明の一実施形態は、記憶システムにおける書き込み要求を処理するための別の方法を提供する。本方法では、コントローラ100によって第1のダイを選択するステップは、上述の実施形態のステップ400と同じであり、ここではこれ以上説明しない。コントローラ100は、第1のセグメントを選択し、使用可能なオフセットを判定する。ここで、コントローラ100は、選択された第1のダイの識別子に基づいて、第1のダイに関連付けられた複数のセグメントから第1のセグメントを選択する。選択規則については、図4および上述の実施形態のステップ401の説明を参照されたい。ここでは細部をこれ以上説明しない。次いで、コントローラ100は、書き込み要求を生成し、書き込み要求には、書き込みアドレスと、目標データと、目標データのデータ長と、が含まれる。場合により、図4およびステップ403の説明を参照すると、ここでの書き込みアドレスの設定は、ステップ403における設定と同じであり得る。このようにして、後続の処理ステップは、図4、ステップ403、および図5および対応する実施形態のものと全く同じである。ここでは細部をこれ以上説明しない。場合により、本実施形態では、セグメント識別子がチャネル識別子およびダイ識別子に関する情報を既に含んでいるので、書き込みアドレスは、セグメント識別子および使用可能なオフセットのみを含む必要があり、チャネル識別子およびダイ識別子に関する情報を再度含む必要はない。次いで、コントローラ100は、書き込み要求をソリッドステートディスク200に送信する。本実施形態では、コントローラ100は、システムマッピングテーブルを維持および更新する。場合により、システムマッピングテーブルの設定は、図4の実施形態で説明した設定と同じであってもよい。場合により、セグメント識別子はチャネル識別子およびダイ識別子に関する情報を既に含んでいるので、セグメント識別子および使用可能なオフセットのみを、システムマッピングテーブルの各マッピング関係においてソリッドステートディスクの書き込みアドレスの列に記録することができる。
【０２０１】
ソリッドステートディスク200が書き込み要求を受信した後の処理は、図5と対応する実施形態の説明と基本的には同じである。相違点は、ステップ503を行ってブランクブロックを選択する場合、ソリッドステートディスク200は、書き込み要求内の書き込みアドレスに含まれるセグメント識別子を解析して、チャネル識別子およびダイ識別子を取得し、解析により取得されたチャネル識別子およびダイ識別子に従って、対応する第1のダイに含まれる複数のブロックからブランクブロックを選択する必要があることにある。
【０２０２】
さらに、本発明の一実施形態は、記憶システムにおける読み出し要求を処理するための別の方法をさらに提供する。本方法は、図6と対応する実施形態の説明と基本的には同じである。相違点は、ステップ602において第2の読み出し要求が生成された場合に、第2の読み出し要求の読み出しアドレスは、セグメント識別子および使用可能なオフセットのみを含む必要があり得ることにある。
【０２０３】
本発明の本実施形態では、ソリッドステートディスクに書き込むデータがある場合、コントローラ100は、第1のダイを選択し、第1のダイに基づいて、第1のダイに関連付けられたセグメントを選択し、セグメントのセグメント識別子は、ダイ識別子およびチャネル識別子を黙示的に運び、書き込まれるべき目標データが第1のダイに含まれるブロックに記憶されるべきであることを示す。これにより、ソリッドステートディスクが、内部ポリシーだけに基づいて、物理的記憶リソースを書き込み要求に自律的に割り当てるために生じる不均衡なデータ分布やいくつかのダイの輻輳などにより、ソリッドステートディスクの記憶リソースを有効に使用できないという従来の問題が回避される。さらに、第1のダイを選択する際に、コントローラ100は、ソリッドステートディスクに書き込むデータのための最適なダイを選択するために、選択ポリシー、例えば、ダイの状態、データアクセス頻度、ダイの有効データ量、ダイの疲弊度、およびダイで処理される読み出し要求などの要因のうちの1つ以上を柔軟に使用でき、その結果、コントローラ100は、ソリッドステートディスクの記憶空間を有効に使用できる。
【０２０４】
図7は、コントローラ100の構成例を示す図である。コントローラ100は、第1の通信インターフェース7001と、プロセッサ7002と、メモリ7003と、第2の通信インターフェース7004と、を備える。
【０２０５】
第1の通信インターフェース7001は、ホストと通信するように構成される。コントローラ100は、第1の通信インターフェース7001を用いて、ホストの読み出し要求またはホストの書き込み要求などのホストの動作命令を受信し、処理命令をプロセッサ7002に渡して処理するようにしてもよい。第1の通信インターフェース7001は、書き込み成功メッセージ、書き込み失敗メッセージ、読み出し失敗メッセージ、または読み出されたデータなどのメッセージをホストに送信するようにさらに構成される。第1の通信インターフェース7001は、ホストバスアダプタ（Host Bus Adapter、HBA）カードであってもよい。
【０２０６】
プロセッサ7002は、中央処理装置（central processing unit、CPU）または特定用途向け集積回路ASIC（Application−Specific Integrated Circuit）であってもよいし、本発明の本実施形態を実装するための1つ以上の集積回路として構成されてもよい。
【０２０７】
メモリ7003は、ホストから第1の通信インターフェース7001が受信したホスト書き込み要求で運ばれたデータをキャッシュする、またはソリッドステートディスク200から読み出されたデータをキャッシュするように構成されてもよい。メモリ7003は、揮発性メモリ、不揮発性メモリ、またはそれらの組み合わせであってもよい。揮発性メモリは、例えば、ランダムアクセスメモリ（random−access memory、RAM）であってもよい。不揮発性メモリは、フロッピーディスク、ハードディスク、ソリッドステートディスク（solid state disk、SSD）、または光ディスクなどのプログラムコードまたはデータを記憶することができる機械可読媒体であってもよい。メモリ7003は、停電保護機能を有していてもよい。停電保護機能とは、システムに停電が発生して再度電源が投入されてもメモリ7003に記憶されたデータが失われないことを意味する。
【０２０８】
メモリ7003は、プログラム命令をさらに記憶することができる。プロセッサ7002は、コントローラ100の様々な処理動作を完了するためにプログラム命令を実行するように構成される。詳細については、図3〜図6の上述のすべての処理動作および対応する実施形態を参照されたい。本装置実施形態では細部をこれ以上説明しない。場合により、システムマッピングテーブルを生成した後、プロセッサ7002は、システムマッピングテーブルをメモリ7003に記憶することもできる。
【０２０９】
第2の通信インターフェース7004は、ソリッドステートディスク200と通信するように構成される。第2の通信インターフェース7004を使用することによって、コントローラ100のプロセッサ7002は、書き込み要求または読み出し要求などの動作命令をソリッドステートディスク200に送信し、ソリッドステートディスク200から様々なメッセージを受信することができる。
【０２１０】
図8に示すように、図8は、本発明の一実施形態によるコントローラ100の概略的な論理構造図である。コントローラ100は、第1の通信モジュール8001と、記憶モジュール8002と、処理モジュール8003と、ダイ選択モジュール8004と、セグメント選択モジュール8005と、第2の通信モジュール8006と、を備える。
【０２１１】
第1の通信モジュール8001は、ホストと通信し、ホストの読み出し要求またはホスト書き込み要求などのホストの動作命令を受信するように構成され、書き込み成功メッセージ、書き込み失敗メッセージ、読み出し失敗メッセージ、または読み出されたデータなどのメッセージをホストに送信するようにさらに構成される。
【０２１２】
記憶モジュール8002は、ホストから第1の通信モジュール8001によって受信されたホスト書き込み要求で運ばれるデータをキャッシュするように構成されてもよい。
【０２１３】
処理モジュール8003は、キャッシュされたデータに対して分割および／または結合動作を行って、単位長（例えば16KBなど）のデータブロックおよび各データブロックのホスト論理ブロックアドレスを生成するように構成されてもよく、ソリッドステートディスクに書き込まれる目標データおよび目標データのデータ長を判定するように構成されてもよく、複数のセグメントを作成し、複数の作成されたセグメントに関する基本情報を記憶モジュール8002に記憶するようにさらに構成されてもよい。具体的な記憶方式の具体的な実装については、図4およびその実施形態の説明を参照されたい。
【０２１４】
ダイ選択モジュール8004は、第1のダイを選択するように構成される。具体的な実装については、図4およびステップ400の詳細な説明を参照されたい。
【０２１５】
セグメント選択モジュール8005は、第1のセグメントを選択し、使用可能なオフセットを判定するように構成される。具体的な実装については、図4およびステップ401の詳細な説明、または記憶システムにおいて書き込み要求を処理するための別の方法の上述の説明を参照されたい。
【０２１６】
処理モジュール8003は、ダイ選択モジュール8004によって選択された第1のダイ、ならびにセグメント選択モジュール8005によって選択された第1のセグメントおよび判定された使用可能なオフセットに従って、書き込み要求を生成するようにさらに構成される。場合により、処理モジュール8003は、第1のセグメントの使用可能なオフセットの値に従って、目標データおよび目標データのデータ長を判定し、目標データおよび目標データのデータ長に基づいて、書き込み要求を生成するようにさらに構成され、システムマッピングテーブルを生成し、リアルタイムでシステムマッピングテーブルを更新するようにさらに構成される。具体的な実装については、図4およびステップ402の詳細な説明、または記憶システムにおいて書き込み要求を処理するための別の方法の上述の説明を参照されたい。
【０２１７】
記憶モジュール8002は、システムマッピングテーブルを記憶するようにさらに構成され得る。
【０２１８】
第2の通信モジュール8006は、ソリッドステートディスクと通信するように構成される。第2の通信モジュール8006を使用することによって、処理モジュール8003は、書き込み要求および読み出し要求などの様々な動作コマンドをソリッドステートディスクに送信し、ソリッドステートディスクから様々なメッセージを受信することができる。記憶モジュール8002は、ソリッドステートディスクから第2の通信モジュール8006によって受信された様々なメッセージで運ばれたデータをキャッシュするようにさらに構成されてもよい。
【０２１９】
処理モジュール8003は、ホストから第1の通信モジュール8001が受信した読み出し要求に従って、システムマッピングテーブルに問い合わせ、第2の読み出し要求を生成し、第2の通信モジュール8006を使用して第2の読み出し要求をソリッドステートディスクに送信するようにさらに構成される。第2の通信モジュール8006は、ソリッドステートディスクから返された読み出されたデータを受信する。記憶モジュール8002は、読み出されたデータをキャッシュするようにさらに構成される。処理モジュール8003は、具体的には図6および実施形態で説明したように、または記憶システムにおいて読み出し要求を処理するための別の方法の上述の実施形態で説明したように、第1の通信モジュール8001を使用することによって、ホストに読み出されたデータを送信するようにさらに構成される。
【０２２０】
図9に示すように、図9は、本発明の一実施形態によるソリッドステートディスクの概略的な論理構造図である。ソリッドステートディスクは、通信モジュール9001と、キャッシュモジュール9002と、処理モジュール9003と、記憶モジュール9004と、を備える。
【０２２１】
通信モジュール9001は、コントローラ100と通信し、コントローラ100からの書き込み要求、読み出し要求、または別の命令などのメッセージを受信するように構成され、書き込み成功メッセージ、書き込み失敗メッセージ、読み出し成功メッセージ、または読み出し失敗メッセージなどのメッセージをコントローラ100に送信するようにさらに構成される。
【０２２２】
キャッシュモジュール9002は、コントローラ100から通信モジュール9001が受信したメッセージで運ばれたデータをキャッシュするように構成される。
【０２２３】
処理モジュール9003は、具体的には図5および実施形態のステップ500で説明したように、ローカルマッピングテーブルを生成するように構成され、ローカルマッピングテーブルは、キャッシュモジュール9002に記憶されてもよいし、記憶モジュール9004に記憶されてもよく、使用のために必要な場合には、処理モジュール9003によって読み出され、キャッシュモジュール9002にキャッシュされ、通信モジュール9001によって受信された書き込み要求を処理し、ローカルマッピングテーブルに問い合わせし、ブロックが割り当てられていることが問い合わせによって分かった場合、具体的には図5および実施形態のステップ500から502で説明したように、記憶モジュール9004の対応するブロックに書き込み要求で運ばれたデータを書き込み、ブロックが割り当てられていないと問い合わせによって分かった場合、具体的には図5および実施形態のステップ500、501、503、および504で説明したように、または記憶システムにおける書き込み要求を処理するための別の方法の上述の実施形態で説明したように、記憶モジュール9004内のブランクブロックを選択し、記憶モジュール9004のブランクブロックに書き込み要求で運ばれたデータを書き込むようにさらに構成される。
【０２２４】
処理モジュール9003は、具体的には図5および実施形態で説明したように、新しいマッピング関係を生成し、新しいマッピング関係をローカルマッピングテーブルに記憶するようにさらに構成される。
【０２２５】
処理モジュール9003は、具体的には図6および実施形態で説明したように、通信モジュール9001が受信した読み出し要求に従って、ローカルマッピングテーブルに問い合わせ、問い合わせ結果に基づいて記憶モジュール9004からデータを読み出し、通信モジュール9001を使用して読み出されたデータをホストに送信するようにさらに構成される。
【０２２６】
当業者であれば、本発明の実施形態の各実施態様または各実施態様の可能な実装が、システム、方法、またはコンピュータプログラム製品として具体的に実装され得ることを理解されよう。従って、本発明の各実施態様または各実施態様の可能な実装は、ハードウェアのみの実施形態、ソフトウェアのみの実施形態（ファームウェア、常駐ソフトウェアなどを含む）、またはソフトウェアとハードウェアの組み合わせを備えた実施形態を使用することができ、本明細書では「回路」、「モジュール」、または「システム」と一律に呼ばれる。加えて、本発明の実施形態の各実施態様または各実施態様の可能な実装は、コンピュータプログラム製品の形態をとることができる。コンピュータプログラム製品は、コンピュータ可読媒体に記憶されたコンピュータ可読プログラムコードである。
【０２２７】
コンピュータ可読記憶媒体としては、限定するものではないが、ランダムアクセスメモリ（RAM）、読み出し専用メモリ（ROM）、消去可能プログラマブル読み出し専用メモリ（EPROM）、および光ディスクなどの、電子、磁気、光学、電磁気、赤外線、もしくは半導体のシステム、デバイス、もしくは装置、またはそれらの任意の適切な組み合わせが挙げられる。
【０２２８】
コンピュータ内のプロセッサは、コンピュータ可読媒体に記憶されたコンピュータ可読プログラムコードを読み出し、その結果、プロセッサは、流れ図の各ステップまたはステップの組み合わせで指定された機能アクションを実行することができる。
【０２２９】
すべてのコンピュータ可読プログラムコードは、ユーザコンピュータ上で実行されてもよいし、いくつかは、スタンドアローンソフトウェアパッケージとしてユーザコンピュータ上で実行されてもよいし、いくつかは、リモートコンピュータ上で実行されている間にユーザのコンピュータ上で実行されてもよいし、すべてのコードは、リモートコンピュータまたはサーバ上で実行されてもよい。一部の代替的な実装解決策では、流れ図またはブロック図の各ブロックに指定された機能の各ステップが図示の順序で行われないことがあることにも留意されたい。例えば、関連する機能に依存する図示の2つの連続するステップまたは2つのブロックは、実際には実質的に同時に実行されてもよいし、これらのブロックが時々逆の順序で実行されるのであってもよい。
【０２３０】
当業者であれば、本明細書で開示した各実施形態において説明した例と組み合わせて、電子的ハードウェアまたはコンピュータソフトウェアと電子的ハードウェアとの組み合わせによって、ユニットおよびアルゴリズムステップを実施してよいことを承知しているはずである。機能をハードウェアで行うかソフトウェアで行うかは、技術的解決策の具体的なアプリケーションと設計制約条件とによって決まる。当業者は、異なる方法を使用して、それぞれの具体的なアプリケーションに対して、説明された機能を実施できるが、こうした実施が、本発明の範囲を超えるものであるとみなすべきではない。
【０２３１】
上記の説明は、単に本発明の具体的な実施にすぎず、本発明の保護範囲を限定することを意図するものではない。本発明において開示された技術的範囲内にあり、当業者によって容易に想到される、あらゆる変形や置き換えは、本発明の保護範囲内に含まれるものとする。従って、本発明の保護範囲は、特許請求の範囲の保護範囲に属する。
【符号の説明】
【０２３２】
100  コントローラ
200  ソリッドステートディスク
2001  通信インターフェース
2002  プロセッサ
2003  メモリ
7001  第1の通信インターフェース
7002  プロセッサ
7003  メモリ
7004  第2の通信インターフェース
8001  第1の通信モジュール
8002  記憶モジュール
8003  処理モジュール
8004  ダイ選択モジュール
8005  セグメント選択モジュール
8006  第2の通信モジュール
9001  通信モジュール
9002  キャッシュモジュール
9003  処理モジュール
9004  記憶モジュール
【図１】
2019508765.tif 000009
【図２】
2019508765.tif 000010
【図３】
2019508765.tif 000011
【図４】
2019508765.tif 000012
【図５】
2019508765.tif 000013
【図６】
2019508765.tif 000014
【図７】
2019508765.tif 000015
【図８】
2019508765.tif 000016
【図９】
2019508765.tif 000017
【手続補正書】
【提出日】平成30年6月13日(2018.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶システムであって、前記記憶システムはコントローラとソリッドステートディスクとを備え、前記コントローラは前記ソリッドステートディスクと通信することができ、前記ソリッドステートディスクは複数のチャネルを含み、前記複数のチャネルのそれぞれは複数のダイに接続され、
前記コントローラは、複数のセグメントを作成し、前記複数のダイから第1のダイを選択し、前記複数のセグメントから第1のセグメントを選択し、前記第1のセグメントの使用可能なオフセットを判定し、書き込み要求を生成し、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、前記第1のダイに接続されたチャネルの識別子、前記第1のダイの識別子、前記第1のセグメントの識別子、および前記使用可能なオフセットを含み、前記ソリッドステートディスクに前記書き込み要求を送信するように構成され、
前記ソリッドステートディスクは、前記書き込み要求を受信し、前記書き込みアドレスおよび前記目標データの前記データ長に従って、前記目標データを記憶するように構成される、
記憶システム。
【請求項２】
前記ソリッドステートディスクは、
前記書き込みアドレスに含まれた前記第1のセグメントの前記識別子および前記使用可能なオフセットに従って、ローカルマッピングテーブルに問い合わせし、前記ローカルマッピングテーブルは、前記ソリッドステートディスクのセグメントと物理ブロックアドレスとの間のマッピング関係を記憶するように構成され、前記ローカルマッピングテーブルに前記第1のセグメントに対応するブロックが記録されている場合、前記書き込みアドレスに含まれた前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブロックに書き込む
ように特に構成される、さもなければ
前記第1のダイに接続された前記チャネルの前記識別子と前記第1のダイの前記識別子とに基づいて、前記第1のダイの複数のブロックからブランクブロックを選択し、前記書き込みアドレスに含まれる前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブランクブロックに書き込む
ように構成される、請求項1に記載の記憶システム。
【請求項３】
前記コントローラは、前記目標データのホスト論理ブロックアドレスに基づいて前記目標データのアクセス頻度を判定するようにさらに構成され、
前記目標データの前記アクセス頻度がアクセス頻度閾値よりも大きい場合、前記コントローラは、前記アクセス頻度閾値よりもアクセス頻度が大きい、記憶されるデータ量が第1の閾値未満であるダイを前記第1のダイとして選択するように構成される、
請求項1に記載の記憶システム。
【請求項４】
前記コントローラは、前記複数のダイのそれぞれに記憶された有効データ量を記録するようにさらに構成され、
前記コントローラは、有効データ量が第2の閾値未満であるダイを前記第1のダイとして選択するように構成される、
請求項1に記載の記憶システム。
【請求項５】
前記コントローラは、前記複数のダイのそれぞれの疲弊度を記録するようにさらに構成され、
前記コントローラは、疲弊度が疲弊度閾値未満であるダイを前記第1のダイとして選択するように構成される、
請求項1に記載の記憶システム。
【請求項６】
前記コントローラは、前記複数のダイのそれぞれで処理される読み出し要求の量を記録するようにさらに構成され、
前記コントローラは、処理される読み出し要求がないダイを前記第1のダイとして選択する、または処理される読み出し要求の量が第3の閾値未満であるダイを前記第1のダイとして選択するように構成される、
請求項1に記載の記憶システム。
【請求項７】
前記コントローラは、前記複数のダイの状態を記録するようにさらに構成され、
前記コントローラは、前記複数のダイからステートレスダイを前記第1のダイとして選択するように構成される、
請求項1に記載の記憶システム。
【請求項８】
前記コントローラは、特定のセグメントが前記第1のダイに既に割り当てられ、使用可能な記憶空間を有する場合、前記特定のセグメントを前記第1のセグメントとして選択する、または前記複数のセグメントからブランクセグメントを前記第1のセグメントとして選択するように構成される、請求項1から7のいずれか一項に記載の記憶システム。
【請求項９】
前記コントローラは、マッピング関係を生成し、前記マッピング関係は、前記目標データの前記ホスト論理ブロックアドレスと、前記第1のダイに接続された前記チャネル、前記第1のダイ、前記第1のセグメント、および前記使用可能なオフセットと、の間のマッピングを記録するように構成され、前記マッピング関係をシステムマッピングテーブルに記憶するようにさらに構成される、請求項1から8のいずれか一項に記載の記憶システム。
【請求項１０】
前記ソリッドステートディスクは、新しいマッピング関係を生成し、前記新しいマッピング関係は、前記第1のセグメントと前記ブランクブロックとの間のマッピングを記録するように構成され、前記新しいマッピング関係を前記ローカルマッピングテーブルに記憶するようにさらに構成される、請求項2に記載の記憶システム。
【請求項１１】
ソリッドステートディスクであって、前記ソリッドステートディスクは、プロセッサ、メモリ、通信インターフェース、および複数のチャネルを含み、前記プロセッサおよび前記メモリは、前記複数のチャネルのそれぞれを介して、複数のダイにそれぞれ接続され、前記複数のダイのそれぞれが複数のブロックを含み、前記プロセッサ、前記メモリ、および前記通信インターフェースが互いに通信することができ、
前記通信インターフェースは、書き込み要求を受信するように構成され、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、第1のダイの識別子、前記第1のダイに接続されたチャネルの識別子、第1のセグメントの識別子、および使用可能なオフセットを含み、
前記メモリは、ローカルマッピングテーブルを記憶するように構成され、前記ローカルマッピングテーブルは、セグメントと前記ソリッドステートディスクの物理ブロックアドレスとの間のマッピング関係を記録するように構成され、
前記プロセッサは、前記書き込みアドレスに含まれた前記第1のセグメントの前記識別子および前記使用可能なオフセットに従って、前記ローカルマッピングテーブルに問い合わせし、前記ローカルマッピングテーブルに前記第1のセグメントに対応するブロックが記録されている場合、前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブロックに書き込むように構成される、さもなければ、前記第1のダイに接続された前記チャネルの前記識別子と前記第1のダイの前記識別子とに基づいて、前記第1のダイの複数のブロックからブランクブロックを選択し、前記書き込みアドレスに含まれる前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブランクブロックに書き込むように構成される、
ソリッドステートディスク。
【請求項１２】
前記プロセッサは、新しいマッピング関係を生成し、前記新しいマッピング関係は、前記第1のセグメントと前記ブランクブロックとの間のマッピングを記録するように構成され、前記新しいマッピング関係を前記ローカルマッピングテーブルに記憶するようにさらに構成される、請求項11に記載のソリッドステートディスク。
【請求項１３】
ソリッドステートディスクであって、前記ソリッドステートディスクは、プロセッサ、メモリ、通信インターフェース、および複数のチャネルを含み、前記プロセッサおよび前記メモリは、前記複数のチャネルのそれぞれを介して、複数のダイにそれぞれ接続され、前記複数のダイのそれぞれが複数のブロックを含み、前記プロセッサ、前記メモリ、および前記通信インターフェースが互いに通信することができ、
前記通信インターフェースは、書き込み要求を受信するように構成され、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、第1のセグメントの識別子および使用可能なオフセットを含み、前記第1のセグメントの前記識別子は、第1のダイの識別子および前記第1のダイに接続されたチャネルの識別子を運び、
前記メモリは、ローカルマッピングテーブルを記憶するように構成され、前記ローカルマッピングテーブルは、セグメントと前記ソリッドステートディスクの物理ブロックアドレスとの間のマッピング関係を記録するように構成され、
前記プロセッサは、前記書き込みアドレスに含まれた前記第1のセグメントの前記識別子および前記使用可能なオフセットに従って、前記ローカルマッピングテーブルに問い合わせし、前記ローカルマッピングテーブルに前記第1のセグメントに対応するブロックが記録されている場合、前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブロックに書き込むように構成される、さもなければ
前記第1のセグメントの前記識別子を解析して、前記第1のダイの前記識別子および前記第1のダイに接続された前記チャネルの前記識別子を取得し、前記第1のダイに接続された前記チャネルの前記識別子と前記第1のダイの前記識別子とに基づいて、前記第1のダイの複数のブロックからブランクブロックを選択し、前記書き込みアドレスに含まれる前記使用可能なオフセットに従って、ページ識別子を判定し、前記目標データの前記データ長に基づいて、かつ前記ページ識別子に対応するページから開始して、前記目標データを前記ブランクブロックに書き込むように構成される、
ソリッドステートディスク。
【請求項１４】
前記プロセッサは、新しいマッピング関係を生成し、前記新しいマッピング関係は、前記第1のセグメントと前記ブランクブロックとの間のマッピングを記録するように構成され、前記新しいマッピング関係を前記ローカルマッピングテーブルに記憶するようにさらに構成される、請求項13に記載のソリッドステートディスク。
【請求項１５】
ソリッドステートディスクにデータを書き込むための方法であって、前記方法は、記憶システムに適用可能であり、前記記憶システムはコントローラと前記ソリッドステートディスクとを備え、前記コントローラは前記ソリッドステートディスクと通信することができ、前記ソリッドステートディスクは複数のチャネルを含み、前記複数のチャネルのそれぞれは複数のダイに接続され、前記コントローラは、予め複数のセグメントを作成し、前記方法は、
前記コントローラによって、前記複数のダイから第1のダイを選択するステップと、
前記コントローラによって、前記複数のセグメントから第1のセグメントを選択し、前記第1のセグメントの使用可能なオフセットを判定するステップと、
前記コントローラによって、書き込み要求を生成するステップであって、前記書き込み要求は、書き込みアドレス、目標データ、および前記目標データのデータ長を含み、前記書き込みアドレスは、前記第1のダイに接続されたチャネルの識別子、前記第1のダイの識別子、前記第1のセグメントの識別子、および前記使用可能なオフセットを含む、ステップと、
前記コントローラによって、前記ソリッドステートディスクに前記書き込み要求を送信するステップと、
を含む、方法。
【請求項１６】
前記第1のダイがステートレスダイである、請求項15に記載の方法。
【請求項１７】
前記コントローラは、前記目標データのホスト論理ブロックアドレスに基づいて前記目標データのアクセス頻度を判定し、
前記目標データの前記アクセス頻度がアクセス頻度閾値よりも大きい場合、前記第1のダイに記憶され、かつ前記アクセス頻度閾値よりもアクセス頻度が大きい、データ量が第1の閾値未満である、
請求項15に記載の方法。
【請求項１８】
前記第1のダイに記憶された有効データの量が第2の閾値未満である、請求項15に記載の方法。
【請求項１９】
前記第1のダイの疲弊度が疲弊度閾値未満である、請求項15に記載の方法。
【請求項２０】
前記第1のダイには処理される読み出し要求がない、または前記第1のダイにおける処理される読み出し要求の量が第3の閾値未満である、請求項15に記載の方法。
【請求項２１】
前記第1のセグメントがブランクセグメントである、請求項15に記載の方法。
【請求項２２】
前記第1のセグメントは既に前記第1のダイに割り当てられ、前記第1のセグメントには使用可能な空間がある、請求項15に記載の方法。
【請求項２３】
前記方法は、
前記コントローラによって、マッピング関係を生成するステップであって、前記マッピング関係は、前記目標データのホスト論理ブロックアドレスと、前記第1のダイに接続された前記チャネル、前記第1のダイ、前記第1のセグメント、および前記使用可能なオフセットと、の間のマッピングを記録するように構成される、ステップと、
前記マッピング関係をシステムマッピングテーブルに記憶するステップと、
をさらに含む、請求項15に記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００６６
【補正方法】変更
【補正の内容】
【００６６】
第9の実施態様によれば、本発明の一実施形態は、記憶媒体を提供し、記憶媒体はプログラムを記憶する。コンピューティングデバイスがプログラムを実行すると、コンピューティングデバイスは、第1の実施態様または第1の実施態様の各実装のいずれか1つに記載の記憶システムにおけるコントローラの処理動作を行う、または第2の実施態様または第2の実施態様の各実装のいずれか1つに記載の記憶システムにおけるコントローラの処理動作を行う、または第5の実施態様または第5の実施態様の各実装のいずれか1つに記載のソリッドステートディスクにデータを書き込むための方法を行う、または第6の実施態様または第6の実施態様の各実装のいずれか1つに記載のコントローラの動作を行う、または第7の実施態様または第7の実施態様の各実装のいずれか1つに記載のコントローラの動作を行う。記憶媒体は、フラッシュメモリ、ハードディスクドライブ（HDD）、またはソリッドステートドライブ（SSD）を含むが、これに限定されるものではない。
【国際調査報告】
2019508765.tif 000018
2019508765.tif 000019
2019508765.tif 000020
2019508765.tif 000021