(57)【要約】【課題】データの重複排除を提供するためのシステムおよび方法を提供すること。【解決手段】一実施形態（１００）においては、入力／出力モジュール（１０１）が、データを書き込むための入力／出力オペレーションを生成するように機能することができる。ストレージ・デバイス（１０２）が、入力／出力モジュールに通信可能に結合されており、入力／出力オペレーションのデータをそのストレージ・デバイスの論理アドレスに書き込むように、およびそのデータに基づいて署名を生成するように機能することができる。入力／出力モジュールはさらに、その署名を処理して、そのデータが別の論理アドレスに存在しているかどうかを判定するように機能することができる。【選択図】図２
2014179094.tif 000002
【特許請求の範囲】
【請求項１】
データを書き込むための入力／出力オペレーションを生成するように機能することができる、入力／出力モジュール（１０１）と、
前記入力／出力モジュールに通信可能に結合されているストレージ・デバイス（１０２）であり、前記入力／出力オペレーションの前記データを前記ストレージ・デバイスの論理アドレスに書き込むように、および前記データに基づいて署名を生成するように機能することができる、ストレージ・デバイス（１０２）と、
を含むことを特徴とするシステム（１００）であって、
前記入力／出力モジュールがさらに、前記署名を処理して、前記データが他の論理アドレスに存在しているかどうかを判定するように機能することができる、システム。
【請求項２】
前記データが前記他の論理アドレスに存在していると判定すると、前記入力／出力モジュールがさらに、前記ストレージ・デバイスの前記論理アドレスにおけるストレージ・スペースを割り当て解除するよう、前記ストレージ・デバイスに指示するように機能することができる、
請求項１に記載のシステム。
【請求項３】
前記他の論理アドレスが、他のストレージ・デバイス内に位置している、
請求項１に記載のシステム。
【請求項４】
前記ストレージ・デバイスがさらに、ハッシュ・コードを使用して前記署名を生成するように機能することができる、
請求項１に記載のシステム。
【請求項５】
前記ストレージ・デバイスがさらに、前記入力／出力オペレーションの前記データを前記ストレージ・デバイスの不揮発性メモリに書き込むように、及び、前記入力／出力オペレーションのステータスを前記入力／出力モジュールへ返すように、機能することができる、
請求項１に記載のシステム。
【請求項６】
ストレージ・デバイスの論理アドレスにデータを書き込むための入力／出力オペレーションを生成するステップ（２０１）と、
前記データに従って前記ストレージ・デバイスによって生成された署名を受信するステップ（２０２）と、
前記入力／出力オペレーションの前記データが前記ストレージ・デバイスによって書き込まれた旨の肯定応答を受信するステップ（２０３）と、
前記署名を処理して、前記データが他の論理アドレスに存在しているかどうかを判定するステップ（２０４）と、
を含むことを特徴とする、方法（２００）。
【請求項７】
他のストレージ・デバイス内の前記他の論理アドレスを検知するステップ、
をさらに含む、請求項６に記載の方法。
【請求項８】
前記データが前記他の論理アドレスに存在していると判定すると、前記ストレージ・デバイスの前記論理アドレスにおける前記データを割り当て解除するよう、前記ストレージ・デバイスに指示するステップ、
をさらに含む、請求項６に記載の方法。
【請求項９】
ハッシュ・コードを使用して前記署名を生成するステップ、
をさらに含む、請求項６に記載の方法。
【請求項１０】
前記入力／出力オペレーションの前記データを前記ストレージ・デバイスの不揮発性メモリに書き込むステップ、および
前記ストレージ・デバイスからの前記書き込みのステータスを処理して、前記書き込みが成功したかどうかを判定するステップ、
をさらに含む、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本特許出願は、（２０１３年３月１４日に出願された）米国特許仮出願第６１／７８２，１２２号に対する優先権を、ひいてはその仮出願の早い出願日の利益を主張するものであり、その仮出願の全内容は、参照によって本明細書に組み込まれている。
【０００２】
本発明は、一般には、ストレージ・デバイスの入力／出力（Ｉ／Ｏ）オペレーションに関し、より具体的には、ストレージ・デバイス内の重複データを少なくすることに関する。
【背景技術】
【０００３】
重複排除は、着信データを、ストレージ・デバイス上に既に存在しているデータと比較して、その着信データが重複であるかどうかを判定するプロセスである。着信データが重複でない、即ち、一意である場合には、その着信データは、ストレージ・デバイス上に格納される。着信データが重複している場合には、その着信データは格納されない。代わりに、既に格納されているデータへの参照が作成される。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書において提示されているシステムおよび方法は、データの重複排除を提供する。一実施形態においては、Ｉ／Ｏモジュールが、データを書き込むためのＩ／Ｏオペレーションを生成するように機能することができる。ストレージ・デバイスが、Ｉ／Ｏモジュールに通信可能に結合されており、Ｉ／Ｏオペレーションのデータをそのストレージ・デバイスの論理アドレスに書き込むように、およびそのデータに基づいて署名を生成するように機能することができる。Ｉ／Ｏモジュールはさらに、その署名を処理して、そのデータが（たとえば、別のストレージ・デバイス、または書き込みが行われているストレージ・デバイス上の）別の論理アドレスに存在しているかどうかを判定するように機能することができる。
【０００５】
本明細書において開示されているさまざまな実施形態は、設計上の選択の問題としてさまざまな方法で実施されることが可能である。たとえば、本明細書のシステムおよび方法の実施形態は、コンピュータ・ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せの形態を取ることができる。その他の例示的な実施形態について、以降で説明する。
【０００６】
次いで、本発明のいくつかの実施形態について、単なる例として、添付の図面を参照しながら説明する。同じ参照番号は、すべての図面上で同じ要素または同じタイプの要素を表す。
【図面の簡単な説明】
【０００７】
【図１】重複データを少なくするための例示的なシステムのブロック図である。
【図２】図１のシステムとともに機能できる例示的なプロセスのフローチャートである。
【図３】図１のシステムとともに機能できる別の例示的なプロセスのフローチャートである。
【図４】例示的なＳＳＤならびにその関連付けられているデバイス・コントローラおよび（１つまたは複数の）ストレージ・デバイスのブロック図である。
【図５】ホスト・システムとのインターフェースを取るＳＳＤおよびそれらの関連付けられているコントローラ／ストレージ・デバイスを含むＩ／Ｏモジュールのブロック図である。
【発明を実施するための形態】
【０００８】
図および以降の説明は、本発明の特定の例示的な実施形態を示している。したがって、本明細書において明示的に説明または図示されていないが、本発明の原理を具体化し、本発明の範囲内に含まれるさまざまなアレンジを当業者なら考案できるであろうということがわかるであろう。さらに、本明細書に記載されているあらゆる例は、本発明の原理を理解する際の助けとなるよう意図されており、そのような具体的に挙げられている例および状況に対する限定を伴わないものとして解釈されるべきである。結果として、本発明は、以降で説明されている特定の実施形態または例に限定されるものではない。
【０００９】
図１は、重複データを少なくするための例示的なシステム１００のブロック図である。システム１００は、その基本的な形態において、Ｉ／Ｏモジュール１０１を含み、Ｉ／Ｏモジュール１０１は、ストレージ・デバイス１０２とのＩ／Ｏオペレーションを実行するように機能することができる。それを行う際に、Ｉ／Ｏモジュール１０１は、ストレージ・デバイス１０２上にデータを書き込んで格納するための書き込みＩ／Ｏを実行する。ストレージ・デバイス１０２は、署名ジェネレータ１０３を含み、署名ジェネレータ１０３は、書き込みＩ／Ｏのデータに基づいて署名を生成して返すように機能することができ、それによってＩ／Ｏモジュール１０１は、データ署名を処理して、そのデータが他のどこかに配置されているかどうかを判定することができる。すなわち、Ｉ／Ｏモジュール１０１は、データ署名を処理して、書き込みＩ／Ｏのデータが、同じまたは別のストレージ・デバイスの別の論理アドレスにおいて重複しているかどうかを判定することができる。
【００１０】
Ｉ／Ｏモジュール１０１は、ストレージ・デバイス１０２とのＩ／Ｏオペレーションを行ってそこからのデータ署名を処理するように機能することができる任意のシステム、デバイス、ソフトウェア、またはそれらの組合せである。この点に関連して、Ｉ／Ｏモジュール１０１は、任意のコンピューティング・システムとともに（たとえば、ホスト・システムのホスト・インターフェースとして）構成されることが可能である。第１の例においては、Ｉ／Ｏモジュール１０１は、ストレージ・デバイス１０２を含む１つまたは複数のストレージ・デバイスに結合されているホスト・バス・アダプタ（ＨＢＡ）またはＲＡＩＤオンチップ（ＲＯＣ）コントローラである。Ｉ／Ｏモジュール１０１は、いくつかの実施形態においては、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストレージ・システムとして１つまたは複数のストレージ・デバイスを管理することを可能にされる。第２の例においては、Ｉ／Ｏモジュール１０１は、（たとえば、ＰＣＩエクスプレス接続を介して、）ストレージ・デバイス１０２を含む１つまたは複数のストレージ・デバイスに結合されているホスト・コンピュータである。
【００１１】
ストレージ・デバイス１０２は、データを格納することができる任意のデバイス（たとえば、コンピュータ・ディスク・ドライブ、不揮発性ランダム・アクセス・メモリ（ＮＶＲＡＭ）、ソリッド・ステート・ドライブ（ＳＳＤ）など）である。いくつかの実施形態においては、ストレージ・デバイス１０２は、Ｉ／Ｏモジュール１０１のコントロールのもとでＩ／Ｏをキャッシュするように機能することができる、Ｉ／Ｏモジュール１０１のためのキャッシュ・メモリである。
【００１２】
署名ジェネレータ１０３は、書き込みＩ／Ｏオペレーションからデータを抽出してそのＩ／Ｏオペレーションのデータに基づいて署名を生成するように機能することができる任意のシステム、デバイス、ソフトウェア、またはそれらの組合せである。そのようなデータ署名の例としては、ハッシュ・コード・ジェネレータ、チェックサム・ジェネレータなどが含まれる。したがって、ストレージ・デバイス１０２は、そのストレージ・デバイス１０２に固有のデバイス・コントローラの処理能力など、何らかの種類の処理能力を有することができる。たとえばＳＳＤは、典型的には、Ｉ／Ｏオペレーションを処理すること、データをバッファすること、データをストレージ・デバイス内の論理アドレスに対応付けすること（マッピング）などを含む、そのＳＳＤに固有のさまざまな機能を実行するように機能することができるデバイス・コントローラを伴って構成されている。この点に関連して、ストレージ・デバイス１０２のデバイス・コントローラは、データ署名を生成してそのデータ署名をＩ／Ｏモジュール１０１による後続の処理のためにＩ／Ｏモジュール１０１へ返すために使用されることも可能である。次いで、システム１００のオペレーションに関するさらなる詳細について、図２および図３に関連して説明する。
【００１３】
図２は、図１のシステム１００とともに機能できる例示的なプロセス２００のフローチャートである。より具体的には、プロセス２００は、１つの例示的なオペレーションを開示しており、そのオペレーションにおいては、Ｉ／Ｏモジュール１０１は、書き込みＩ／Ｏオペレーションを実行して、そのＩ／Ｏオペレーションに関連しているストレージ・デバイス１０２からのデータ署名を処理することができる。この実施形態においては、Ｉ／Ｏモジュール１０１は、プロセス要素２０１において、ストレージ・デバイス１０２の論理アドレスにデータを書き込むためのＩ／Ｏコマンドを生成する。書き込みＩ／Ｏコマンドを処理している間に、ストレージ・デバイス１０２は、その書き込みＩ／Ｏコマンド内に含まれているデータに基づいて署名を生成して、次いでそのデータ署名をＩ／Ｏモジュール１０１へ転送することができる。
【００１４】
プロセス要素２０２において、Ｉ／Ｏモジュール１０１は、プロセス要素２０１において生成された書き込みＩ／Ｏコマンドのデータに従ってストレージ・デバイス１０２によって生成されたデータ署名を受信する。ストレージ・デバイス１０２は、書き込みオペレーションの成功またはその他のステータスを示す肯定応答をＩ／Ｏモジュール１０１へ転送することもできる。この点に関連して、Ｉ／Ｏモジュール１０１は、プロセス要素２０３において、データがストレージ・デバイス１０２に成功裏に書き込まれた旨のストレージ・デバイス１０２による肯定応答を受信する。その後、Ｉ／Ｏモジュール１０１は、プロセス要素２０４において、データ署名を処理して、そのデータが別のストレージ・ロケーションに（たとえば、ストレージ・デバイス１０２またはその他の何らかのストレージ・モジュールの別の論理アドレスに）既に存在するかどうかを判定する。したがって、データ重複判定は、データがストレージ・デバイス１０２に既に書き込まれた後に実行される。
【００１５】
書き込みＩ／Ｏのデータが別のストレージ・ロケーションに存在しない場合（すなわち、そのデータが重複せずに一意である場合）には、Ｉ／Ｏモジュール１０１は、プロセス要素２０６において、書き込みＩ／Ｏのデータを、そのデータが書き込まれたばかりの（成功裏に書き込まれていると想定して）ストレージ・デバイス１０２の論理アドレスに関連付ける。しかしながら、そのデータが別のストレージ・ロケーションに既に存在する場合（すなわち、そのデータが重複している場合）には、Ｉ／Ｏモジュール１０１は、プロセス要素２０５において、ストレージ・デバイス１０２に書き込まれたばかりの書き込みデータのロケーションを、既に存在しているデータに関連付ける。言い換えれば、Ｉ／Ｏモジュール１０１は、Ｉ／Ｏモジュール１０１のテーブル１０５（たとえば、データ構造）内のデータのロケーションを、以前に書き込まれたデータの論理アドレスで更新する。したがって、データが書き込まれたばかりのストレージ・デバイス１０２のストレージ・スペースは、そのデータを自由にするために割り当て解除またはトリムされることが可能であり、それによって、そのデータは上書きされることが可能になる。たとえば、もはや必要とされていないストレージ・スペースを割り当て解除するために、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）プロトコルは、ＵＮＭＡＰコマンドを有しており、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴ  Ａｔｔａｃｈｍｅｎｔ）プロトコルは、類似のＴＲＩＭコマンドを有している。いずれのケースにおいても、データ重複判定が実行されると、Ｉ／Ｏモジュール１０１は、プロセス要素２０７において、（たとえば、ホスト・システムによって）次なる書き込みＩ／Ｏが要求されるまで待つ。次なるＩ／Ｏ要求を受信すると、Ｉ／Ｏモジュール１０１は、プロセス要素２０１へ戻って、プロセス２００を繰り返す。
【００１６】
その他の実施形態においては、データが別のストレージ・ロケーションに既に存在することが検知された場合には、その別のストレージ・ロケーションが、割り当て解除されるロケーションであり、次いでその別のデータのロケーションが、ストレージ・デバイス１０２に書き込まれたばかりの書き込みデータに関連付けられる。
【００１７】
図３は、図１のシステムの別の例示的なプロセス３００のフローチャートである。より具体的には、プロセス３００は、Ｉ／Ｏモジュール１０１からの書き込みＩ／Ｏに応答したストレージ・デバイス１０２の１つの例示的なオペレーションを開示している。この実施形態においては、ストレージ・デバイス１０２は、プロセス要素３０１において、書き込みＩ／Ｏコマンドを処理する。たとえば、ストレージ・デバイス１０２は、書き込みＩ／Ｏコマンドからデータを抽出して、そのデータがストレージ・デバイス１０２内に格納されることになる論理アドレスを特定することができる。
【００１８】
書き込みＩ／Ｏコマンドから抽出されたデータを用いて、ストレージ・デバイス１０２は、プロセス要素３０２において、書き込みＩ／Ｏコマンドのデータに基づいて署名を計算することができる。たとえば、書き込みＩ／Ｏコマンドのデータは、特定の長さのトグル・ビットを有することができ、それらのトグル・ビットに対して、そのデータを一意に表すためのハッシュ・コードまたはその他の何らかのコードが生成されることが可能である。次いでストレージ・デバイス１０２は、プロセス要素３０３において、書き込みＩ／Ｏコマンドのデータを、その書き込みＩ／Ｏコマンドにおいて識別されたストレージ・デバイス１０２の論理アドレスに格納する。次いでストレージ・デバイス１０２は、プロセス要素３０４において、署名をＩ／Ｏモジュール１０１へ送信し、それによってＩ／Ｏモジュール１０１は、上述の重複判定を実行することができる。
【００１９】
本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェア要素およびソフトウェア要素の両方を含む実施形態という形態を取ることができる。図４および図５は、本明細書に記載されているシステムおよび方法を採用するように機能できることが可能であるハードウェア実施形態およびソフトウェア実施形態の組合せを示している。より具体的には、図４は、例示的なＳＳＤ４００ならびにその関連付けられているデバイス・コントローラ（ＳＳＤコントローラ４０１）およびストレージ・デバイス４９５のブロック図である。図５は、ホスト・システム５０２とのインターフェースを取るＳＳＤ４００およびそれらの関連付けられているコントローラ４０１／ストレージ・デバイス４９５を含むストレージ・モジュール５１６のブロック図である。
【００２０】
図４においては、ストレージ・コントローラ４０１は、ホスト・インターフェース４１１を含み、ホスト・インターフェース４１１は、ホスト・システムのＩ／Ｏオペレーションを通信するためにホスト・システムとインターフェースで接続するように機能することができる。ホスト・インターフェース４１１は、タグ・トラッキング・モジュール４１３を伴って構成されることが可能であり、タグ・トラッキング・モジュール４１３は、個々のＩ／Ｏコマンド（たとえば、ストレージ・デバイス４９５内の特定のアドレスに対する読み取りコマンドおよび書き込みコマンド）の進行を追跡把握するように機能することができる。タグ・トラッキング・モジュール４１３は、処理のステータスを識別するためのコマンドの処理中に、ホスト・システムから受信されたコマンドの外部フラグを、ＳＳＤコントローラ４０１がアクセスできる内部フラグに関連付けることができる。
【００２１】
ＳＳＤコントローラ１００はまた、データ処理モジュール４２１を含み、データ処理モジュール４２１は、署名ジェネレータ４２２および処理エンジン４２３を含む。一般に、処理エンジン４２３は、ホスト・インターフェース４１１から受信される、またはバッファ４３１内に存在しているデータ上で特定のタスク、たとえば、データをフォーマットすること、データを別のコードに変換する（トランスコード）ことなどを実行するように機能することができる。たとえば、処理エンジン４２３は、オペレーションを生成するホスト・システムのＩ／Ｏモジュール（たとえば、Ｉ／Ｏモジュール１０１）からのＩ／Ｏオペレーションを、そのＩ／Ｏオペレーションのデータがストレージ・デバイス４９５の論理アドレスに書き込まれることが可能になるように処理するように機能できることが可能である。すなわち、エンジン４２３は、書き込みＩ／Ｏコマンドのデータを抽出して、そのデータを、ストレージ・デバイス４９５内に格納するために整える（準備する、備える）ことができる。図１の署名ジェネレータ１０３は、この点に関連して、ホスト・システムへ返すための書き込みＩ／Ｏコマンドのデータに基づいて署名を生成するためのデータ処理モジュール４２１を伴って構成されることが可能であり、それによってホスト・システムは、Ｉ／Ｏオペレーションのデータが別の論理アドレスに配置されている（すなわち、他のどこかで重複している）かどうかを判定することができる。
【００２２】
バッファ４３１は、ホスト・システムとの間で転送されるデータを格納するように機能することができる。バッファ４３１は、たとえば、メモリ４３７内のさらに高いレベルのＲＡＩＤ機能を含む、個々のフラッシュ・デバイス４９２のうちのもう１つを管理するためのＳＳＤコントローラ４０１によって使用されるメモリ・テーブルなどのシステム・データを格納することもできる。その他のモジュールとしては、さらに高いレベルのエラー訂正および冗長性機能を提供するためのエラー訂正コード（ＥＣＣ−Ｘ）モジュール４３５、ならびにバッファ４３１との間でのデータの移動をコントロールするためのダイレクト・メモリ・アクセス（ＤＭＡ）モジュール４３３を含むことができる。
【００２３】
ＳＳＤコントローラ４０１はまた、さまざまなエラー訂正コード技法（たとえば、巡回冗長検査、ハミング・コード、ＢＣＨ（Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ）コード、低密度パリティー・チェック・コードなど）のうちの任意の技法を使用してバッファ４３１内のデータのさらに低いレベルのエラー訂正および冗長性処理を提供するように機能することができる、エラー訂正コード・モジュール４６１を含む。
【００２４】
デバイス・インターフェース・ロジック・モジュール４９１は、フラッシュ・デバイス４９２のプロトコルに従って個々のフラッシュ・デバイス４９２との間でデータを転送するように機能することができる。デバイス・インターフェース・ロジック・モジュール４９１は、スケジューリング・モジュール４９３を含み、スケジューリング・モジュール４９３は、フラッシュ・デバイス４９２に対するＩ／Ｏオペレーションをキューに入れるように機能することができる。
【００２５】
本明細書でのＳＳＤコントローラ４０１はまた、マップ・モジュール４４１を含み、マップ・モジュール４４１は、テーブル４４３に従ってストレージ・デバイス４９５内のロケーションへのデータ・アドレッシングを実行するように機能することができる。たとえば、マップ・モジュール４４１は、ホスト・システムからの論理ブロック・アドレス（ＬＢＡ）を、個々のフラッシュ・デバイス４９２のうちの１つまたは複数へ導かれるブロック／ページ・アドレスに変換するために、テーブル４４３を使用することができる。
【００２６】
リサイクラー４５１は、ストレージ・コントローラ４０１のためにガベージ・コレクションを実行する。たとえば、リサイクラー４５１は、マップ・モジュール４４１のテーブル４４３をスキャンすることによって、フラッシュ・デバイス４９２のうちでアクティブに使用中である部分を特定することができる。この点に関連して、リサイクラー４５１は、フラッシュ・デバイス４９２のうちで使用されていない部分または「割り当て解除された」部分を、それらの使用されていない部分を消去することによって、書き込みに利用できるようにすることができる。リサイクラー４５１は、フラッシュ・デバイス４９２内のデータを移動させて、フラッシュ・デバイス４９２のうちのさらに大きな連続した部分を、書き込みに利用できるようにすることもできる。この点に関連して、データが重複しているとＩ／Ｏモジュール１０１が判定すると、リサイクラー４５１は、ストレージ・デバイス４９５内のストレージ・スペースを消去または割り当て解除することができる。
【００２７】
ＳＳＤコントローラ４０１はまた、ＣＰＵ４７１を含み、ＣＰＵ４７１は、ＳＳＤコントローラ４０１のさまざまな側面をコントロールする。たとえば、ＣＰＵ４７１は、ホスト・システムから受信されたコマンドを追跡把握およびコントロールするコマンド・マネージメント４７３を実施するための命令またはファームウェアを処理することができる。このファームウェアは、バッファ４３１の割り当ておよび使用をコントロールするバッファ・マネージメント４７５、ならびにマップ・モジュール４４１をコントロールするための変換マネージメントすなわち４７７を実施することもできる。このファームウェアは、外部のデータのアクセスと、リサイクルされるデータのアクセスとの間において生じる可能性があるコンフリクトなどの競合を回避するために、データ・アドレッシングの一貫性をコントロールするためのコヒーレンス・マネージメント４７９を採用することもできる。このファームウェアは、デバイス・インターフェース・ロジック４９１をコントロールするためのデバイス・マネージメント４８１、ならびにＳＳＤコントローラ４０１内のコンポーネントのアイデンティティー情報の修正および通信をコントロールするためのアイデンティティー・マネージメント４８２を提供することもできる。
【００２８】
図５において、ホスト・システム５０２は、ソフトウェア命令を処理して、ＳＳＤ４００との間で読み取りおよび書き込みを行うためのストレージ・モジュール５１６とのＩ／Ｏオペレーションを実行するように機能することができる。この点に関連して、ホスト・システム５０２は、オペレーティング・システム５０５を含むことができ、オペレーティング・システム５０５は、ホスト・システム５０２のためのコンピューティング環境を提供する。ドライバ５０７は、ストレージ・モジュール５１６へのリンク５０６を通じて通信して、そのストレージ・モジュール５１６とともに構成されているさまざまなＳＳＤ４００とのＩ／Ｏオペレーションを実行するように機能することができる。
【００２９】
その他のコンピューティング・システムと同様に、オペレーティング・システム５０５は、マネージメント・ソフトウェア５１４（たとえば、Ｂｉｏｓソフトウェア）を介して始動されることが可能である。ホスト・システム５０２は、ホスト・システム５０２のためにさまざまなコンピューティング・プロセスを実行するためのアプリケーション・ソフトウェア５０９（たとえば、ワード・プロセッシング・アプリケーション、画像処理アプリケーションなど）を含むこともできる。ホスト・システム５０２は、通信ネットワーク５１９（たとえば、インターネット、ローカル・エリア・ネットワーク、ワイドエリア・ネットワークなど）を通じて１つまたは複数のサーバ５１８とのＩ／Ｏオペレーションを行うように機能することができるＩ／Ｏおよびストレージ機能５１７を含むこともできる。この点に関連して、ストレージ・モジュール５１６は、ホスト・システム５０２のためのＩ／Ｏオペレーションのキャッシュ・メモリとして動作することができる。
【００３０】
ストレージ・モジュール５１６は、ホスト・システム５０２のさまざまなＩ／ＯオペレーションをＳＳＤ４００のＬＢＡに切り替えるように機能することができる中間コントローラ５０３を伴って構成されることが可能である。この点に関連して、ストレージ・モジュール５１６は、メモリ５１２を含むことができ、メモリ５１２は、ＬＢＡに対するＩ／Ｏオペレーションを行うための中間コントローラ５０３用のマッピング情報を格納する。
【００３１】
例
ホスト・システム５０２のユーザは、アプリケーション・ソフトウェア５０９上で操作を行うこと、またはアプリケーション・ソフトウェア５０９を介して何らかのデータを生成することが可能である。オペレーティング・システム５０５によって提供されるオペレーティング・システム環境内で機能するアプリケーション・ソフトウェア５０９は、ネットワーク５１９（たとえば、インターネットなどのデータ・ネットワーク、ローカル・エリア・ネットワーク、ワイドエリア・ネットワークなど）を通じてサーバ５１８にデータを転送すること、またはサーバ５１８との間でその他の形でデータを格納することを必要とする場合がある。したがって、アプリケーション・ソフトウェア５０９は、サーバ５１８の論理アドレスに対する書き込みＩ／Ｏコマンドを生成するようＩ／Ｏおよびストレージ・モジュール５１７に指示することができる。代替として、または追加として、アプリケーション・ソフトウェア５０９は、ＳＳＤ４００のうちの１つの中にデータを格納するためのストレージ・モジュール５１６用の書き込みＩ／Ｏコマンドを生成するよう、ドライバ５０７に指示することができる。
【００３２】
中間コントローラ５０３は、書き込みＩ／Ｏコマンドをストレージ・モジュール５１６の中の適切なＳＳＤ４００に切り替え、それによって、その書き込みＩ／Ｏコマンドのデータは、そこに書き込まれることが可能になる。書き込みＩ／Ｏコマンドが適切なＳＳＤ４００によって受信されると、ＳＳＤコントローラ４０１は、データと、そのデータがストレージ・デバイス４９５内のどこに格納されることになるかを示す論理アドレスとを抽出する。
【００３３】
抽出されたデータを用いて、選択されたＳＳＤコントローラ４０１は、そのデータに基づいて署名を生成する。例示するために、「ｔｈｅ  ｑｕｉｃｋ  ｂｒｏｗｎ  ｆｏｘ  ｊｕｍｐｅｄ  ｏｖｅｒ  ｔｈｅ  ｌａｚｙ  ｄｏｇ’ｓ  ｂａｃｋ」というテキスト文字列は、ＳＨＡ−５１２ハッシュ・コード・ジェネレータを用いてエンコードされて、「１４５ｅｄｂａｂｆ６８ｆ３２ｄａ０４１６７ｅ６３ｆ９７９ｂ６０ｆ３７ｄ４９ａ９１８２ｅ５８５６４０４ｃ７７ｅｄ３ｃ９３０ｄ８８０５ｅ４２ｄ０ｅ４６２ｅ１９６８８８３４１１７ｂｂ１４ｂｄ８０ａｃｅ５５ｄｆ５２ｅ４４ｅ２ｅ８ｄ４８９３５ｃ７８７７ｅａ２ｄ９３１」という一意のコードを生み出すことが可能である。選択されたＳＳＤコントローラ４０１は、ストレージ・デバイス４９５の所望の論理アドレスにデータを書き込むためにマップ４４１を介してデータをストレージ・デバイス４９５にマップする。次いでＳＳＤコントローラ４０１は、一意のハッシュ・コードをホスト・システム５０２へ返し、それによって、ホスト・システム５０２のマネージメント・ソフトウェア５１４は、その返されたハッシュ・コードを処理して、そのコードが他のどこかに（たとえば、サーバ５１８、および別のＳＳＤ４００、またはその他の何らかのストレージ・デバイスに）格納されているかどうかを判定することができる。
【００３４】
ホスト・システム５０２は、さまざまなストレージ・デバイス内に（たとえば、ハッシュ・テーブル内に）格納されているデータを表すハッシュ・コードを格納することができる。ホスト・システム５０２は、ハッシュ・コードのこのリストをチェックして、受信されたハッシュ・コードが以前のハッシュ・コードと同じであるかどうかを判定することができる。受信されたハッシュ・コードが以前のハッシュ・コードと同じである場合には、ホスト・システム５０２は、以前に格納されたデータのアドレスで（たとえば、Ｉ／Ｏモジュール１０１を介して、）テーブル１０５を更新する。次いでホスト・システム５０２は、そのデータが書き込まれたばかりのストレージ・デバイス４９５の論理アドレスにおけるストレージ・スペースを割り当て解除するようＳＳＤ４００に指示することができ、それによって、そのストレージ・スペースは、オーバーライドまたはトリムされることが可能になる。加えて、ＳＳＤコントローラ４０１は、書き込まれたデータのステータス・メッセージを返して、そのデータが適切なＳＳＤ４００／ストレージ・デバイス４９５に成功裏に書き込まれたことをホスト・システム５０２に確信させることができる。やはり、ホスト・システム５０２が、受信されたコードが実際に一意であると判定した場合には、ホスト・システム５０２は、そのデータがテーブル１０５内に格納された状態で、（たとえば、マネージメント・ソフトウェア５１４を通じて、）そのデータのロケーションをストレージ・デバイス４９５の論理アドレスに関連付ける。
【００３５】
本明細書に記載されている実施形態によれば、署名生成は、有利なことに、より低いレベルに押し下げられ、そのレベルでは、署名生成は、より並列な分散された様式で行われることが可能である。データは、推論的に書き込まれ、それによって、その最終的な処置（ｄｉｓｐｏｓｉｔｉｏｎ）（たとえば、ＳＳＤ４００におけるデータのその後の上書き）にかかわらずに迅速に遂行（コミット）される。これはまた、データが高度に圧縮可能である場合には重複排除は無視されることが可能であるという点で、処理コストのトレードオフの比較（たとえば、重複排除コスト対圧縮性）を提供する。たとえば、ホスト・システム５０２は、署名を報告する場合に、および／または書き込みデータが一意であるかどうかを判定する場合に、書き込みデータの圧縮性を評価することができる。ストレージ・モジュール５１６は、この点に関連して、書き込み応答／署名とともに書き込みデータの圧縮率を返すことができ、それによって、ホスト・システム５０２は、その圧縮されているデータが十分に一意であるかどうかを判定することができる。言い換えれば、本明細書における実施形態は、サイズが既に低減されている重複データを追跡把握する処理コストを有利に低減するために、重複データが高度に圧縮されている場合にはその重複データを無視する能力をホスト・システム５０２に提供する。たとえば、オールゼロ・データは一般的であり、オールゼロ・データの重複を追跡把握することは、いくつかの場合においては、圧縮を信頼してオールゼロ・データを単に格納することと比べて、処理能力の点で費用効果が高くない。
【図１】
2014179094.tif 000003
【図２】
2014179094.tif 000004
【図３】
2014179094.tif 000005
【図４】
2014179094.tif 000006
【図５】
2014179094.tif 000007
【外国語明細書】
2014179094.tif 000008
2014179094.tif 000009
2014179094.tif 000010
2014179094.tif 000011
2014179094.tif 000012
2014179094.tif 000013
2014179094.tif 000014
2014179094.tif 000015
2014179094.tif 000016
2014179094.tif 000017
2014179094.tif 000018
2014179094.tif 000019
2014179094.tif 000020
2014179094.tif 000021
2014179094.tif 000022
2014179094.tif 000023
2014179094.tif 000024
2014179094.tif 000025