(57)【要約】【課題】重複除去アプリケーションを直ちに処理する仮想バケットによる複数のハッシュテーブルを提供する。【解決手段】重複メモリ除去方法は、ハッシュテーブルアレイを識別する段階、複数の仮想バケットを識別する段階、ハッシュ値を生成するためにデータラインをハッシングする段階、物理的なハッシュバケットの中の意図された物理的なハッシュバケットがデータブロックのための使用可能な空間を有するかを決定する段階、及び物理的なハッシュバケットの隣接位置の物理的なハッシュバケットは、意図された物理的なハッシュバケットとして仮想バケットの中の１つと同一であり、隣接位置の物理的なハッシュバケットの中の１つが意図された物理的なハッシュバケットが使用可能な空間を有さない場合、データブロックのための使用可能な空間を有するかを決定する段階を含む。【選択図】図１
2017188094.tif 000002
【特許請求の範囲】
【請求項１】
複数のハッシュテーブル（Ｈａｓｈ  ｔａｂｌｅ）の各々は、ハッシュ関数に対応し、物理的なハッシュバケット（Ｈａｓｈ  ｂｕｃｋｅｔ）を含み、各物理的なハッシュバケットはウェイ（Ｗａｙｓ）を含み、前記複数のハッシュテーブルの各々は、データを格納するように構成された前記複数のハッシュテーブルから構成されるハッシュテーブルアレイを識別する段階と、
複数の仮想バケット（Ｖｉｒｔｕａｌ  ｂｕｃｋｅｔ）の各々は、いくつかの前記物理的なハッシュバケットを含み、前記複数の仮想バケットの中の他の仮想バケットと少なくとも１つの前記物理的なハッシュバケットを共有し、前記複数の仮想バケットを識別する段階と、
ハッシュ値（Ｈａｓｈ  ｖａｌｕｅ）を生成するためにハッシュ関数の中の該当ハッシュ関数にしたがってデータライン（Ｄａｔａ  ｌｉｎｅ）をハッシング（Ｈａｓｈｉｎｇ）する段階と、
前記物理的なハッシュバケットの中の意図された物理的なハッシュバケットが前記ハッシュ値にしたがってデータブロックのための使用可能な空間を有するかを決定する段階と、
前記物理的なハッシュバケットの隣接位置の物理的なハッシュバケットは、前記意図された物理的なハッシュバケットとして前記仮想バケットの中の１つと同一であり、前記意図された物理的なハッシュバケットが使用可能な空間を有さない場合、前記隣接位置の物理的なハッシュバケットの中の１つが前記データブロックのための使用可能な空間を有するかを決定する段階と、を含むことを特徴とするメモリモジュールの重複メモリ除去方法。
【請求項２】
前記意図された物理的なハッシュバケットが使用可能な空間を有する場合、前記意図された物理的なハッシュバケットに前記データブロックを格納する段階をさらに含むことを特徴とする請求項１に記載のメモリモジュールの重複メモリ除去方法。
【請求項３】
前記隣接位置の物理的なハッシュバケットの中の１つが使用可能な空間を有し、前記意図された物理的なハッシュバケットが使用可能な空間を有さない場合、前記隣接位置の物理的なハッシュバケットの中の前記１つに前記データブロックを格納する段階をさらに含むことを特徴とする請求項１に記載のメモリモジュールの重複メモリ除去方法。
【請求項４】
前記ハッシュ関数の中の該当ハッシュ関数と連関される前記複数のハッシュテーブルの前記物理的なハッシュバケットがいっぱいに満たされている場合、ハッシュテーブルアレイの前記複数のハッシュテーブルの他のハッシュテーブルに対応するハッシュ関数の中の他のハッシュ関数にしたがって前記データブロックをハッシングする段階と、
前記複数のハッシュテーブルの中の他のハッシュテーブルに前記データブロックを格納する段階と、をさらに含むことを特徴とする請求項１に記載のメモリモジュールの重複メモリ除去方法。
【請求項５】
前記ハッシュテーブルの前記物理的なハッシュバケットの全部がいっぱいに満たされている場合、バッファメモリに前記データブロックを格納する段階をさらに含むことを特徴とする請求項１に記載のメモリモジュールの重複メモリ除去方法。
【請求項６】
仮想バケットインデックス（ｉｎｄｅｘ）により構成される物理的なラインＩＤ（Ｐｈｙｓｉｃａｌ  ｌｉｎｅ  ＩＤ）を利用して前記物理的なハッシュバケットの該当グループに前記複数の仮想バケットの各々を連関させる段階をさらに含むことを特徴とする請求項１に記載のメモリモジュールの重複メモリ除去方法。
【請求項７】
前記データブロックに対応する書込み要請を受信する段階と、
前記データブロックが前記意図された物理的なハッシュバケットを有する前記仮想バケットの中の１つに格納される時、前記書込み要請を捨てる段階と、
前記ハッシュテーブルの参照カウントラインをアップデートする段階と、をさらに含むことを特徴とする請求項１に記載のメモリモジュールの重複メモリ除去方法。
【請求項８】
ハッシュテーブルアレイ内の複数のハッシュテーブルと、
プロセッサと、
メモリと、を含み、
前記複数のハッシュテーブルの各々は、物理的なハッシュバケット及び複数の仮想バケットを含み、前記物理的なハッシュバケットの各々は、データを格納するためにウェイを含み、前記複数の仮想バケットの各々は、いくつかの前記物理的なハッシュバケットを含み、前記メモリは、前記格納されたデータを検索するためのメモリインターフェイスとインターフェイスし、前記メモリインターフェイスに前記検索されたデータを伝送することを特徴とする重複メモリ除去のためのメモリモジュール。
【請求項９】
重複メモリ除去のためのメモリモジュールであって、ＤＲＡＭ（Ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）を含むことを特徴とする請求項８に記載の重複メモリ除去のためのメモリモジュール。
【請求項１０】
前記ハッシュテーブルアレイにデータブロックを格納するために前記メモリインターフェイスから書込み要請を受信し、
前記物理的なハッシュバケットの意図された物理的なハッシュバケットを決定するために前記データブロックにハッシュ関数を遂行し、
前記意図された物理的なハッシュバケット、又は前記意図された物理的なハッシュバケットが属する前記仮想バケットの中の任意の仮想バケットに位置する前記物理的なハッシュバケットの隣接位置の物理的なハッシュバケットの中のいずれか１つに前記データブロックが事前に格納されたかを決定し、
前記データブロックが事前に格納されない時、そして前記意図された物理的なハッシュバケット又は前記隣接位置の物理的なハッシュバケットの中のいずれか１つが使用可能な空間を有する時、前記データブロックを前記意図された物理的なハッシュバケット又は前記隣接位置の物理的なハッシュバケットの中のいずれか１つに格納することを特徴とする請求項８に記載の重複メモリ除去のためのメモリモジュール。
【請求項１１】
隣接位置の物理的なハッシュバケット及び前記意図された物理的なハッシュバケットが全ていっぱいに満たされている場合にデータを格納するためのバッファメモリをさらに含むことを特徴とする請求項１０に記載の重複メモリ除去のためのメモリモジュール。
【請求項１２】
前記隣接位置の物理的なハッシュバケット及び前記意図された物理的なハッシュバケットがいっぱいに満たされているかを決定し、
前記隣接位置の物理的なハッシュバケット及び前記意図された物理的なハッシュバケットがいっぱいに満たされている場合に、前記意図された物理的なハッシュバケットではない前記複数のハッシュテーブルの中の他の１つの物理的なハッシュバケットを意図された物理的なハッシュバケットと決定するために前記データブロックに他のハッシュ関数を遂行することを特徴とする請求項１０に記載の重複メモリ除去のためのメモリモジュール。
【請求項１３】
前記ハッシュテーブルアレイの前記複数のハッシュテーブルの全部の前記物理的なハッシュバケットがいっぱいに満たされている場合にデータを格納するためのバッファメモリをさらに含むことを特徴とする請求項１２に記載の重複メモリ除去のためのメモリモジュール。
【請求項１４】
複数のハッシュテーブルの各々は、複数の物理的なハッシュバケットを含み、前記複数の物理的なハッシュバケットの各々は、複数のウェイを含み、前記複数の物理的なハッシュバケットの各々は、いくつかの前記複数の物理的なハッシュバケットを含む複数の仮想バケットと連関され、前記複数のハッシュテーブルにより構成されるハッシュテーブルアレイにデータブロックを格納するための前記データブロックに対応する書込み要請を受信する段階と、
ハッシュ値を生成するために該当ハッシュ関数にしたがって前記データブロックをハッシングする段階と、
前記ハッシュ値に基づいて前記複数の物理的なハッシュバケットの中の意図された物理的なハッシュバケットを決定する段階と、
前記意図された物理的なハッシュバケット内に同一のデータブロックが格納されているかを決定する段階と、
前記同一のデータブロックが前記意図された物理的なハッシュバケットに格納されていない場合、前記意図された物理的なハッシュバケットとして前記複数の仮想バケットの中の同一の仮想バケットの他の物理的なハッシュバケットの中の１つに前記同一のデータブロックが格納されるかを決定する段階と、を含むことを特徴とするメモリモジュールの重複メモリ除去方法。
【請求項１５】
前記意図された物理的なハッシュバケットとして前記複数の仮想バケットの中の前記同一の仮想バケットの他の物理的なハッシュバケットの中の任意の物理的なハッシュバケットに前記同一のデータブロックが格納されない場合、前記意図された物理的なハッシュバケットがいっぱいに満たされているかを決定する段階と、
前記意図された物理的なハッシュバケットがいっぱいに満たされていない場合、前記意図された物理的なハッシュバケットに前記データブロックを格納する段階と、をさらに含むことを特徴とする請求項１４に記載のメモリモジュールの重複メモリ除去方法。
【請求項１６】
前記意図された物理的なハッシュバケットがいっぱいに満たされている場合、前記意図された物理的なハッシュバケットとして前記複数の仮想バケットの中の前記同一の仮想バケットの他の物理的なハッシュバケットの全部がいっぱいに満たされているかを決定する段階と、
前記他の物理的なハッシュバケットの中の１つがいっぱいに満たされていない場合、前記物理的なハッシュバケットの中の１つに前記データブロックを格納する段階と、をさらに含むことを特徴とする請求項１５に記載のメモリモジュールの重複メモリ除去方法。
【請求項１７】
前記意図された物理的なハッシュバケットとして前記仮想バケットの中の同一の仮想バケットの前記他の物理的なハッシュバケットがいっぱいに満たされている場合、前記データブロックをバッファメモリに格納する段階をさらに含むことを特徴とする請求項１６に記載のメモリモジュールの重複メモリ除去方法。
【請求項１８】
前記他の物理的なハッシュバケットの全部がいっぱいに満たされている場合、前記複数のハッシュテーブルの中の他のハッシュテーブルの他の物理的なハッシュバケットの全部がいっぱいに満たされているかを決定する段階と、
前記複数のハッシュテーブルの中の前記他のハッシュテーブルの前記他の物理的なハッシュバケットの全部がいっぱいに満たされている場合、前記ハッシュテーブルアレイの前記複数のハッシュテーブルの中の前記他のハッシュテーブルが使用可能な空間を有するかを決定する段階と、
前記複数のハッシュテーブルの中の前記他のハッシュテーブルが使用可能な空間を有する場合、前記複数のハッシュテーブルの中の前記他のハッシュテーブルに対応する他のハッシュ関数にしたがってデータブロックをハッシングする段階と、
前記複数のハッシュテーブルの中の前記他のハッシュテーブルに前記データブロックを格納する段階と、をさらに含むことを特徴とする請求項１６に記載のメモリモジュールの重複メモリ除去方法。
【請求項１９】
前記ハッシュテーブルアレイの前記複数のハッシュテーブルの中に使用可能な空間を有する他のハッシュテーブルが無い場合、前記データブロックをバッファメモリに格納する段階をさらに含むことを特徴とする請求項１８に記載のメモリモジュールの重複メモリ除去方法。
【請求項２０】
前記同一のデータブロックが格納されない場合、前記意図された物理的なハッシュバケットを含む前記仮想バケットの中の１つの物理的なハッシュバケットの中の１つに前記データブロックを格納する段階と、
前記データブロックが格納される前記物理的なハッシュバケットの中の１つに対応する物理的なラインＩＤ（ＰＬＩＤ）を生成する段階と、
アドレス検索テーブルに前記ＰＬＩＤを格納する段階と、をさらに含むことを特徴とする請求項１４に記載のメモリモジュールの重複メモリ除去方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリモジュールの重複メモリ除去方法、及びそのためのメモリモジュールに係り、より詳しくは、重複除去アプリケーションを直ちに処理する効率的なメモリモジュールの重複メモリ除去方法、及びそのためのメモリモジュールに関する。
【背景技術】
【０００２】
データ重複除去はメモリ装置の容量費用を減らすために、メモリ装置において不必要なデータを減らすことを意味する。データ重複除去において、データ対象／項目（例えば、データファイル）は１つ又はそれ以上のデータライン／チャンク／ブロックに分けられる。同一のデータにより構成された複数のデータブロックを１つの格納されたデータブロックに連関させることによって、データブロックの重複コピーはコンピュータメモリにおいて減少されるか、或いは除去され、メモリ装置のデータ重複ブロックの全体量は減少する。データの不必要なコピーの減少は読出し速度及びメモリ帯域幅を増加させ、潛在的に電力節減をもたらす。
【０００３】
したがって、仮に重複したデータコピーが１つに減少されれば、物理的な資源の量は同様であっても、メモリ装置の全体使用可能な容量は増加する。その結果としてメモリ装置の経済的な使用はデータの再書込み（Ｒｅｗｒｉｔｅ）回数の減少を可能にし、メモリに既に格納された重複したデータブロックに対する書込み要請はなくなるので、データ重複除去が適用されたメモリ装置の寿命は、効果的に書込み耐久性を増加させて長くなる。
【０００４】
一般的なデータ重複除去方法はＣＰＵ中心のアプローチとして重複除去エンジンがＣＰＵ又はメモリコントローラ（Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ、ＭＣ）に集積されるメモリ内の重複除去（ｉｎ−ｍｅｍｏｒｙ  ｄｅｄｕｐｌｉｃａｔｉｏｎ）技術を使用する。このような方法は重複をＣＰＵプロセッサが認識でき、そしてメモリコントローラの制御にしたがって重複除去メモリ動作（例えば、コンテンツ検索（Ｃｏｎｔｅｎｔ  ｌｏｏｋｕｐｓ）、参照カウントアップデート（Ｒｅｆｅｒｅｎｃｅ  Ｃｏｕｎｔ  Ｕｐｄａｔｅｓ）、等）を提供するようにメモリコントローラと動作する重複除去キャッシュ（Ｄｅｄｕｐｌｉｃａｔｅｄ  Ｃａｃｈｅ、ＤＤＣ）を具現する。重複除去の方法はまた、重要な経路から変換パッチ（Ｐａｔｃｈ）を除去してデータ読出しを増加させるために変換ラインをキャッシング（Ｃａｃｈｉｎｇ）するキャッシュであり、索引バッファ（Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）と類似である直接変換バッファ（Ｄｉｒｅｃｔ  Ｔｒａｎｓｌａｔｉｏｎ  Ｂｕｆｆｅｒ、ＤＴＢ）を具現する。
【０００５】
重複除去は普通ハードドライブのために使用される。しかし、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような揮発性メモリの領域において、微細な重複除去を提供するのに関心が持たれている。
【０００６】
このような背景技術として前述した情報は単なる発明の理解を助けるためであり、従来の技術を構成しない情報を含む。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は上述した技術的課題を解決するためになされたものであって、その目的とするところは重複除去アプリケーションを直ちに処理する効率的なメモリのための仮想バケットによる複数のハッシュテーブルを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の実施形態の側面はＤＲＡＭ（Ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）システムにおけるメモリ重複除去に係る。
【０００９】
本発明の実施形態に係るメモリモジュールの重複除去メモリの方法が提供され、この方法において、複数のハッシュテーブルの各々はハッシュ関数に対応し、物理的なハッシュバケットを含み、各物理的なハッシュバケットはウェイ（Ｗａｙｓ）を含み、複数のハッシュテーブルの各々は、データを格納するように構成された複数のハッシュテーブルから構成されるハッシュテーブルアレイを識別する段階、複数の仮想バケットの各々はいくつかの前記物理的なハッシュバケットを含み、前記複数の仮想バケットの中の他の仮想バケットと少なくとも１つの前記物理的なハッシュバケットを共有し、複数の仮想バケットを識別する段階、ハッシュ値を生成するためにハッシュ関数の中の該当ハッシュ関数にしたがってデータラインをハッシングする段階、前記物理的なハッシュバケットの中の意図された物理的なハッシュバケットが前記ハッシュ値にしたがって前記データブロックのための使用可能な空間を有するかを決定する段階、及び前記物理的なハッシュバケットの隣接位置の物理的なハッシュバケットは、前記意図された物理的なハッシュバケットとして前記仮想バケットの中の１つと同一であり、前記意図された物理的なハッシュバケットが使用可能な空間を有さない場合、前記隣接位置の物理的なハッシュバケットの中の１つが前記データブロックのための使用可能な空間を有するかを決定する段階を含む。
【００１０】
本発明の方法は、前記意図された物理的なハッシュバケットが使用可能な空間を有する場合、前記意図された物理的なハッシュバケットに前記データブロックを格納する段階をさらに含む。
【００１１】
本発明の方法は、前記隣接位置の物理的なハッシュバケットの中の１つが使用可能な空間を有し、そして前記意図された物理的なハッシュバケットが使用可能な空間を有さない場合、前記隣接位置の物理的なハッシュバケットの中の前記１つにデータブロックを格納する段階をさらに含む。
【００１２】
本発明の方法は、前記ハッシュ関数の中の該当ハッシュ関数と連関される前記複数のハッシュテーブルの前記物理的なハッシュバケットがいっぱいに満たされている場合、前記ハッシュテーブルアレイの前記複数のハッシュテーブルの他のハッシュテーブルに対応するハッシュ関数の中の他のハッシュ関数にしたがって前記データブロックをハッシングする段階、及び前記複数のハッシュテーブルの中の他のハッシュテーブルに前記データブロックを格納する段階をさらに含む。
【００１３】
本発明の方法は、前記ハッシュテーブルの前記物理的なハッシュバケットの全部がいっぱいに満たされている場合、バッファメモリに前記データブロックを格納する段階をさらに含む。
【００１４】
本発明の方法は、仮想バケットインデックスにより構成される物理的なラインＩＤ（Ｐｈｙｓｉｃａｌ  ｌｉｎｅ  ＩＤ）を利用して前記物理的なハッシュバケットの該当グループに前記複数の仮想バケットの各々を連関させる段階をさらに含む。
【００１５】
本発明の方法は、前記データブロックに対応する書込み要請を受信する段階、前記データブロックが前記意図された物理的なハッシュバケットを有する前記仮想バケットの中の１つに格納される時、前記書込み要請を捨てる段階、及び前記ハッシュテーブルの参照カウントラインをアップデートする段階をさらに含む。
【００１６】
本発明の実施形態に係るメモリの重複除去のためのメモリモジュールが提供され、メモリモジュールはハッシュテーブルアレイ内の複数のハッシュテーブル、プロセッサ、及びメモリを含み、前記複数のハッシュテーブルの各々は物理的なハッシュバケット及び複数の仮想バケットを含み、前記物理的なハッシュバケットの各々はデータを格納するためにウェイを含み、前記複数の仮想バケットの各々はいくつかの前記物理的なハッシュバケットを含み、前記メモリは、前記格納されたデータを検索するためのメモリインターフェイスとインターフェイスし、前記メモリインターフェイスに前記検索されたデータを伝送する。
【００１７】
メモリモジュールはＤＲＡＭ（Ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）を含む。
【００１８】
メモリモジュールは、前記ハッシュテーブルアレイにデータブロックを格納するために前記メモリインターフェイスから書込み要請を受信し、前記物理的なハッシュバケットの意図された物理的なハッシュバケットを決定するために前記データブロックにハッシュ関数を遂行し、前記意図された物理的なハッシュバケット、又は前記意図された物理的なハッシュバケットが属する前記仮想バケットの中の任意の仮想バケットに位置する前記物理的なハッシュバケットの隣接位置の物理的なハッシュバケットの中のいずれか１つに前記データブロックが事前に格納されたかを決定し、そして前記データブロックが事前に格納されない時、そして前記意図された物理的なハッシュバケット又は前記隣接位置の物理的なハッシュバケットの中のいずれか１つが使用可能な空間を有する時、前記データブロックを前記意図された物理的なハッシュバケット又は前記隣接位置の物理的なハッシュバケットの中のいずれか１つに格納する。
【００１９】
メモリモジュールは、隣接位置の物理的なハッシュバケット及び前記意図された物理的なハッシュバケットが全ていっぱいに満たされている場合にデータを格納するためのバッファメモリをさらに含む。
【００２０】
メモリモジュールは、前記隣接位置の物理的なハッシュバケット及び前記意図された物理的なハッシュバケットがいっぱいに満たされているかを決定し、そして前記隣接位置の物理的なハッシュバケット及び前記意図された物理的なハッシュバケットがいっぱいに満たされている場合に、前記意図された物理的なハッシュバケットではない前記複数のハッシュテーブルの中の他の１つの意図された物理的なハッシュバケットを決定するために前記データブロックに他のハッシュ関数を遂行する。
【００２１】
メモリモジュールは、前記ハッシュテーブルアレイの前記複数のハッシュテーブルの全部の前記物理的なハッシュバケットがいっぱいに満たされている場合にデータを格納するためのバッファメモリをさらに含む。
【００２２】
本発明の実施形態に係るメモリモジュールのメモリ重複除去方法は、複数のハッシュテーブルの各々は複数の物理的なハッシュバケットを含み、前記複数の物理的なハッシュバケットの各々は複数のウェイを含み、前記複数の物理的なハッシュバケットの各々はいくつかの前記複数の物理的なハッシュバケットを含む仮想バケットと連関され、前記複数のハッシュテーブルにより構成されるハッシュテーブルアレイにデータブロックを格納するための前記データブロックに対応する書込み要請を受信する段階、ハッシュ値を生成するために該当ハッシュ関数にしたがって前記データブロックをハッシングする段階、前記ハッシュ値に基づいて前記複数の物理的なハッシュバケットの中の意図された物理的なハッシュバケットを決定する段階、前記意図された物理的なハッシュバケット内に同一のデータブロックが格納されているかを決定する段階、及び前記同一のデータブロックが前記意図された物理的なハッシュバケットに格納されていない場合、前記意図された物理的なハッシュバケットとして前記複数の仮想バケットの中の同一の仮想バケットの他の物理的なハッシュバケットの中の１つに前記同一のデータブロックが格納されるかを決定する段階を含む。
【００２３】
本発明の方法は、前記意図された物理的なハッシュバケットとして前記複数の仮想バケットの中の前記同一の仮想バケットの他の物理的なハッシュバケットの中の任意の物理的なハッシュバケットに前記同一のデータブロックが格納されない場合、前記意図された物理的ハッシュバケットがいっぱいに満たされているかを決定する段階、及び前記意図された物理的なハッシュバケットがいっぱいに満たされていない場合、前記意図された物理的なハッシュバケットに前記データブロックを格納する段階をさらに含む。
【００２４】
本発明の方法は、前記意図された物理的なハッシュバケットがいっぱいに満たされている場合、前記意図された物理的なハッシュバケットとして前記複数の仮想バケットの中の前記同一の仮想バケットの他の物理的なハッシュバケットの全部がいっぱいに満たされているかを決定する段階、前記他の物理的なハッシュバケットの中の１つがいっぱいに満たされていなない場合、前記物理的なハッシュバケットの中の１つに前記データブロックを格納する段階をさらに含む。
【００２５】
本発明の方法は、前記意図された物理的なハッシュバケットとして前記仮想バケットの中の同一の仮想バケットの前記他の物理的なハッシュバケットがいっぱいに満たされている場合、前記データブロックをバッファメモリに格納する段階をさらに含む。
【００２６】
本発明の方法は、前記他の物理的なハッシュバケットの全部がいっぱいに満たされている場合、前記複数のハッシュテーブルの中の他のハッシュテーブルの他の物理的なハッシュバケットの全部がいっぱいに満たされているかを決定する段階、前記複数のハッシュテーブルの中の前記他のハッシュテーブルの前記他の物理的なハッシュバケットの全部がいっぱいに満たされている場合、前記ハッシュテーブルアレイの前記複数のハッシュテーブルの中の他のハッシュテーブルが使用可能な空間を有するかを決定する段階、前記複数のハッシュテーブルの中の前記他のハッシュテーブルが使用可能な空間を有する場合、前記複数のハッシュテーブルの中の前記他のハッシュテーブルに対応する他のハッシュ関数にしたがってデータブロックをハッシングする段階、及び前記複数のハッシュテーブルの中の前記他のハッシュテーブルに前記データブロックを格納する段階をさらに含む。
【００２７】
本発明の方法は、前記ハッシュテーブルアレイの前記複数のハッシュテーブルの中に使用可能な空間を有する他のハッシュテーブルが無い場合、前記データブロックをバッファメモリに格納する段階をさらに含む。
【００２８】
本発明の方法は前記同一のデータブロックが格納されない場合、前記意図された物理的なハッシュバケットを含む前記仮想バケットの中の１つの物理的なハッシュバケットの中の１つに前記データブロックを格納する段階、前記データブロックが格納される前記物理的なハッシュバケットの中の１つに対応する物理的なラインＩＤ（ＰＬＩＤ）を生成する段階、及びアドレス検索テーブルに前記ＰＬＩＤを格納する段階をさらに含む。
【発明の効果】
【００２９】
本発明の実施形態による重複除去ＤＲＡＭメモリモジュールによれば、メモリアクセスは減少でき、ＤＲＡＭシステムの寿命を延長できる。
【図面の簡単な説明】
【００３０】
本発明のこれら及び他の側面は明細書、請求の範囲、そして添付した図面を参照して理解できる。
【図１】本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャのブロック図である。
【図２】図１の実施形態の重複除去メモリモジュール内メモリ形態のブロック図である。
【図３】図２の実施形態のハッシュテーブルメモリのハッシュテーブルのブロック図である。
【図４】本発明の実施形態による複数のハッシュテーブルアレイのブロック図である。
【図５】本発明の実施形態に係る仮想バケットと特定物理的なハッシュバケットを連関させるためのホップワード（Ｈｏｐｗｏｒｄｓ）を生成するための２次元のアレイを示す図である。
【図６】本発明の実施形態によるハッシュテーブルメモリのデータブロックのアドレッシングのための物理的なラインＩＤ（ＰＬＩＤ）のブロック図である。
【図７】本発明の実施形態による、ホップスコッチ方法を使用するメモリモジュールの複数のハッシュテーブルアレイにデータを書き込む過程を示す順序図である。
【図８】本発明の実施形態による、メモリモジュールの複数のハッシュテーブルアレイからデータを読み出す過程を示す順序図である。
【発明を実施するための形態】
【００３１】
本発明の特徴、及びそれを達成する方法は実施形態の詳細な説明及び添付した図面を参照すれば、明確になる。以下、例示的な実施形態を類似な参照番号は類似な構成要素を指称する添付図面を参照して詳細に説明する。しかし、本発明は様々な多様な形態に具現でき、本明細書において単に例示した実施形態に限定されない。むしろ、このような実施形態はこの開示が徹底して、完全になるための例として提供され、当業者に本発明の特徴及び機能を完全に伝達する。したがって、本発明の技術分野における通常の知識を有する者が本発明の特徴及び機能を完璧に理解するために必要としないプロセス、要素、及び技術は説明しない。特別に言及しない限り、類似な参照番号は添付した図面及び記述した説明により類似な構成要素を示し、したがって、それに対する説明は反複しない。図面において、構成要素、層、及び領域の相対的な大きさは明確性のために誇張される。
【００３２】
ここで第１、第２、第３等の用語は多様な要素、成分、領域、層、及び／又はセクションを説明するために使用するが、このような要素、成分、領域、層、及び／又はセクションはこのような用語によって制限されないと理解されるべきである。このような用語は他の要素、成分、領域、層、又はセクションから１つの要素、構成、領域、層又はセクションを区別するために使用する。したがって、後述する第１構成要素、成分、領域、層、又はセクションは本発明の思想及び範囲を逸脱せずに、第２構成要素、成分、領域、層、又はセクションを指称できる。
【００３３】
１つの要素又は図面に示した他の構成要素又は特徴との特徴的な関係を説明するための説明を容易にするために「下の」、「下」、「低い」、「特定部分の下」、「上に」、「上部」などの空間的であり、相対的な用語をここで使用する。空間的に相対的な用語は図面に示した方向に加えて使用又は動作において装置の他の方向を含むように意図したと理解されるべきである。例えば、仮に図面の装置を裏返したら、他の構成要素又は特徴の「下」又は「下の」又は「特定部分の下」として説明した構成要素は他の構成要素又は特徴の「上に」合わせられるようになる。したがって、「下の」又は「特定部分の下」の例示的な用語は上又は下方向の全てを含む。これとは異なり装置は配置され（例えば、９０°は他の方向に回転され）、そして空間的に相対的な技術語はそれにしたがって解釈されなければならない。
【００３４】
要素、層、領域、又は成分が他の要素、層、領域又は成分「に」、「に結合された」、「に連結された」と言及する時、それは他の要素、層、領域、又は成分「に直接的に」、「に直接的に結合された」、「に直接的に連結された」であるか、或いは１つ又はそれ以上の間の要素、層、領域、又は成分が存在する。また、要素又は層が２つの要素又は層の間として言及される時、それは単なる要素又は層が２つの要素又は層間にあるか、又は１つ又はそれ以上の間の要素又は層がまた存在する。
【００３５】
次に、ｘ軸、ｙ軸、及びｚ軸は直角座標システムの３つの軸に限定されず、広い意味に解釈される。例えば、ｘ軸、ｙ軸、及びｚ軸は互いに直交するか、又は互いに直交しない他の方向を示す。
【００３６】
本明細書において使用する用語は単なる特定な実施形態を説明するためであり、本発明を制限しない。本明細書において、文脈上に特に明確に記述しない限り、単数形態の「１つ」は複数の形態も含む。「構成される」、「構成されている」、「含む」、及び「含んでいる」の用語を本明細書において使用する時、このような用語は定められた特徴、整数、段階、動作、要素、及び／又は成分が存在を明示するが、１つ又はそれ以上の他の特徴、整数、段階、動作、要素、成分、及び／又はそれらのグループの追加又は存在は不可能ではない。本明細書において使用する「及び／又は」の用語は１つ又はそれ以上の列挙された項目と連関した任意のそしてすべての組合を含む。「少なくとも１つ」のような表現は要素の全体リストを修正し、そしてリストの個別要素を修正しない。
【００３７】
本明細書において使用する「大体に」、「約」の用語及びこれと類似な用語は近似値の用語として使用し、程度の用語として使用せず、本発明の当業者によって識別される測定された又は計算された値の固有な変動を考慮するためである。また、本発明の実施形態を記述する時「することができる」の使用は「本発明の１つ以上の実施形態」を意味する。本明細書において使用されたように、「使用」、「使用される」、そして「使用された」の用語は「利用」、「利用される」、そして「利用された」の用語の同義語として各々看做される。また、「例示」の用語は例又は図面を意味する。
【００３８】
特定の実施形態が別に具現される場合、特定プロセス順序は説明する順序と異なって遂行できる。例えば、説明された連続的な２つのプロセッサは同時に概ね遂行されるか、或いは説明する順序と反対順序に遂行もできる。
【００３９】
本明細書において記述する本発明の実施形態による電子又は電気装置及び／又は他の任意の関連した装置又は要素は任意の適合なハードウェア、ファームウェア（例えば、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ、ＡＳＩＣ）、ソフトウェア、又はソフトウェア、ファームウェア、及びハードウェアの組合せを利用して具現される。例えば、このような装置の多様な要素は１つの集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ、ＩＣ）チップ又は分離されたＩＣチップにより形成される。また、このような装置の多様な要素は柔軟な印刷回路フィルム（Ｆｌｅｘｉｂｌｅ  Ｐｒｉｎｔｅｄ  Ｃｉｒｃｕｉｔ  Ｆｉｌｍ）、ＴＣＰ（Ｔａｐｅ  Ｃａｒｒｉｅｒ  Ｐａｃｋａｇｅ）、印刷回路基板（Ｐｒｉｎｔｅｄ  Ｃｉｒｃｕｉｔ  Ｂｏａｒｄ、ＰＣＢ）上に具現されるか、或いは１つの基板上に形成される。また、このような装置の多様な要素はコンピュータプログラム命令を実行し、本明細書において説明する多様な機能を遂行するための他のシステム要素と相互作用する１つ以上のコンピューティング装置により、又は１つ以上のプロセッサにより遂行されるプロセス又はスレッド（Ｔｈｒｅａｄ）である。
【００４０】
コンピュータプログラム命令は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような標準メモリ装置を利用するコンピューティング装置により具現されるメモリ内に格納される。コンピュータプログラム命令はまた、例えばＣＤ−ＲＯＭ、フラッシュドライブ（Ｆｌａｓｈ  Ｄｒｉｖｅ）、又はそのような他の一時的ではないコンピュータ読出し可能なメディア（Ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  Ｃｏｍｐｕｔｅｒ  Ｒｅａｄａｂｌｅ  Ｍｅｄｉａ）に格納されることもあり得る。また、本発明の当業者は本発明の例示的な実施形態の思想及び範囲を逸脱せずに、多様なコンピューティング装置の機能は単一コンピューティング装置に統合されるか、或いは集積され、特定コンピューティング装置の機能が１つ又はそれ以上の他のコンピューティング装置に分散されることを認識しなければならない。
【００４１】
特に定義しない限り、本明細書において使用するすべての用語（技術的そして科学的用語を含む）は本発明が属する技術分野における当業者によって一般的に理解される同一の意味を有する。一般的に使用される事前に定義されたこのような用語は本明細書及び／又は関連技術の文脈においてそれらの意味と一致する意味を有すると解釈されるべきであり、本明細書において明確に定義されない限り、理想化されるか、或いは過度に形式的なことと解釈されてはならない。
【００４２】
図１は本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャのブロック図である。
【００４３】
図１を参照すれば、コンピュータメモリとして機能するために、重複除去メモリは、原本データのコンテンツ及び重複除去された固有のメモリブロックのセット（Ｓｅｔ、集合）の間の関係を記録するための「変換（Ｔｒａｎｓｌａｔｉｏｎ）」として公知された機能を遂行し、記録された関係は圧縮された形態により記録される。例えば、原本データのアドレスは検索テーブル（Ｌｏｏｋｕｐ  Ｔａｂｌｅ）に格納される。
【００４４】
一般的に、ＣＰＵのプロセッサ（Ｐｒｏｃｅｓｓｏｒ）１１０は物理的なメモリ（例えば、重複除去ＤＲＡＭメモリモジュール１３０）に直接的なアクセスが難しく、上述したアクセスはメモリライン（Ｍｅｍｏｒｙ  Ｌｉｎｅｓ）のアレイ（Ａｒｒａｙ）としてのメモリコントローラ１２０によって代わりに管理される。ＣＰＵ中心の重複除去システムはデータがメモリシステムに到達する前にＣＰＵ内部のデータをキャッシュすることを探索（Ｓｅｅｋ）する。
【００４５】
本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャ（Ｄｅｄｕｐｌｉｃａｔｉｏｎ  ＤＲＡＭ  Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ）１００は従来のＣＰＵ中心の重複除去ではないメモリ中心の重複除去を使用し、重複除去ＤＲＡＭメモリモジュール１３０はプロセッサ１１０からの命令が無い場合においてもメモリ重複除去を遂行することを意味する。重複除去ＤＲＡＭシステムアーキテクチャ１００はまたメモリの容量利得を増加させ、高容量メモリソリューションを提供するために、重複除去ＤＲＡＭメモリモジュール１３０に格納された設定可能な重複除去アルゴリズムを使用する。即ち、ＣＰＵ中心の重複除去と異なり、本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャ１００はＲＡＭモジュール（例えば、重複除去ＤＲＡＭメモリモジュール１３０）内に含まれたすべての重複除去知能（Ｉｎｔｅｌｌｉｇｅｎｃｅ）を有する。したがって、重複除去はオペレーティングシステム１４０内カーネルモジュール（Ｋｅｒｎｅｌ  Ｍｏｄｕｌｅ）が分からない間に重複除去ＤＲＡＭメモリモジュール１３０内における遂行が可能であり、これによって重複除去ＤＲＡＭメモリモジュール１３０の容量が増加する。即ち、重複除去は微細なブロック単位（ｆｉｎｅ  ｇｒａｉｎ）に対して行われ、そして揮発性メモリ（例えば、重複除去ＤＲＡＭメモリモジュール１３０）内において動作するので、本発明の実施形態によるすべての重複除去情報は重複除去ＤＲＡＭメモリモジュール１３０の自体内において発生し、オペレーティングシステム１４０内カーネルモジュールは重複除去ＤＲＡＭメモリモジュール１３０内において遂行される重複除去動作の細部事項に気づかない（Ｕｎｗａｒｅ）。
【００４６】
本発明の実施形態は重複除去ＤＲＡＭメモリモジュール１３０としてＤＲＡＭを使用して説明したが、他の種類のメモリが本発明の他の実施形態に使用できることが理解されなければならない。また、本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャ１００は多様な種類のメモリとインターフェイシング（Ｉｎｔｅｒｆａｃｉｎｇ）のが可能である。即ち、本発明の実施形態による重複除去ＤＲＡＭメモリモジュール１３０はメモリコントローラ１２０を通じて多様な他の種類のメモリインターフェイスと連関される（例えば、ＤＤＲ４（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  Ｆｏｕｒｔｈ−Ｇｅｎｅｒａｔｉｏｎ  Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、コンピュータと１つ以上の周辺装置とを連結するための直列拡張バス標準であるＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）、ＤＤＲ−Ｔ、及びＫＴＩ）。したがって、重複除去ＤＲＡＭシステムアーキテクチャ１００に重複除去ＤＲＡＭメモリモジュール１３０を集積するために他のアーキテクチャが使用されることに注目しなければならない。
【００４７】
また、本発明の実施形態を具現するために、既存ＤＲＡＭメモリモジュールに若干の変化（例えば、ドライバーアップグレード（Ｄｒｉｖｅｒ  Ｕｐｇｒａｄｅ））が必要であるが、ソフトウェア具現はオペレーティングシステム１４０（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、ＯＳ）／ＣＰＵモジュール又はプロセッサ１１０の物理的な変化無しに本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャ１００を使用できる。
【００４８】
重複除去、コンテンツアドレス付与（Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｉｌｉｔｙ）、保安（Ｓｅｃｕｒｉｔｙ）、メモリ内処理（Ｐｒｏｃｅｓｓｏｒ−ｉｎ−ｍｅｍｏｒｙ、ＰＩＭ）、連関されたアドレスが列アドレスであり、ＤＲＡＭ内データビットが列アドレス及び行アドレスの交差点に位置するセルに格納される行アドレスであること等をＤＲＡＭに通知するためにＤＲＡＭに伝送される信号であるＲＡＳ（Ｒｏｗ  Ａｄｄｒｅｓｓ  Ｓｔｒｏｂｅ）のようなＤＲＡＭの知能的なプロトコルのために、本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャ１００は、重複除去ＤＲＡＭメモリモジュール１３０にＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）を具現する。
【００４９】
重複除去ＤＲＡＭシステムアーキテクチャ１００はまたプロセッサ１１０がメモリコントローラ１２０と関連された仮想密度管理（Ｖｉｒｔｕａｌ  Ｄｅｎｓｉｔｙ  Ｍａｎａｇｅｍｅｎｔ）、スマートデータ配置（Ｓｍａｒｔ  Ｄａｔａ  Ｐｌａｃｅｍｅｎｔ）、そしてＤＲＡＭに詳しいＡＰＩｓ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅｓ）、等を可能にするスマートシステムソフトウェア（Ｓｍａｒｔ  Ｓｙｓｔｅｍ  Ｓｏｆｔｗａｒｅ）を有する。
【００５０】
重複除去ＤＲＡＭメモリモジュール１３０は多様なフォームファクタ（ｆｏｒｍ  ｆａｃｔｏｒｓ、例えばＤＩＭＭ（Ｄｕａｌ  Ｉｎ−ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）、２．５Ｉｎ、ＦＨＨＬ（Ｆｕｌｌ  Ｈｅｉｇｈｔ  Ｈａｌｆ  Ｌｅｎｇｔｈ）、ＨＨＨＬ（Ｈａｌｆ  Ｈｅｉｇｈｔ  Ｈａｌｆ  Ｌｅｎｇｔｈ）、ＦＨＦＬ（Ｆｕｌｌ  Ｈｅｉｇｈｔ  Ｆｕｌｌ  Ｌｅｎｇｔｈ）、等）の高容量ＤＲＡＭメモリモジュールのような３ＤＳ  ＤＲＡＭ構成要素をさらに有する。
【００５１】
したがって、本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャ１００を使用するメモリ中心の重複除去システムの提供によって、重複除去書込みプロセス（Ｄｅｄｕｐｌｉｃａｔｅ  Ｗｒｉｔｅ  Ｐｒｏｃｅｓｓ）はメモリインターフェイスにより直接的に遂行され、重複除去ＤＲＡＭメモリモジュール１３０の容量が増加する。
【００５２】
図２は図１の実施形態の重複除去ＤＲＡＭメモリモジュール内メモリ形態のブロック図であり、図３は図２の実施形態のハッシュテーブルメモリのハッシュテーブルのブロック図である。
【００５３】
図２を参照すれば、本発明の実施形態による重複除去ＤＲＡＭメモリモジュール１３０は重複除去アルゴリズムアーキテクチャを有し、ここで重複除去メモリＤＲＡＭモジュール１３０の内部のメモリ領域は３つの領域に分類される。３つの領域は重複除去されたデータブロック（Ｂｌｏｃｋｓ  ｏｆ  ｄａｔａ）が格納される位置を示すためのアドレス検索テーブルメモリ（Ａｄｄｒｅｓｓ  Ｌｏｏｋｕｐ  Ｔａｂｌｅ  Ｍｅｍｏｒｙ、以下、ＡＬＵＴＭ）２１０、重複除去されたデータブロックを格納するためのハッシュテーブルメモリ（Ｈａｓｈ  Ｔａｂｌｅ  Ｍｅｍｏｒｙ）２２０、及びハッシュテーブルメモリのハッシュテーブルのハッシュウェイ（Ｈａｓｈ  ｗａｙｓ）がいっぱいに満たされている時にデータを格納するための超過／バッファメモリ（Ｏｖｅｒｆｌｏｗ／Ｂｕｆｆｅｒ  Ｍｅｍｏｒｙ）２３０を含む。
【００５４】
データブロックが重複除去ＤＲＡＭメモリモジュール１３０に入力される時、重複除去アルゴリズムはデータブロックが新しいものであるか、以前に格納されていないＡＬＵＴＭ２１０内に任意の対応するアドレスが無いデータブロックであるかを決定するために動作する。このような動作を遂行するために、重複除去アルゴリズムはＡＬＵＴＭ２１０にアクセスする。同一のデータブロックは１つの項目により格納されることを保障するために、ＡＬＵＴＭ２１０内ポインター（例えば、後述する図５において説明する物理的なラインＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  ＩＤ、ＰＬＩＤ））はハッシュテーブルメモリ２２０のデータブロック格納位置を示す。即ち、ＡＬＵＴＭ２１０はハッシュテーブル内において検索アドレスマッピングポインター（Ｌｏｏｋｕｐ  Ａｄｄｒｅｓｓ  Ｍａｐｐｉｎｇ  Ｐｏｉｎｔｅｒ、例えばＰＬＩＤ）と連関される位置（例えば、アドレス）のための格納装置である。したがって、データブロックがハッシュテーブルメモリ２２０に以前に格納されている場合、ＡＬＵＴＭ２１０内ポインターは同一のデータブロックが格納されたハッシュテーブルメモリ２２０のアドレスを示すことが可能であり、これによってデータブロックの重複コピーを格納する必要を除去し、重複除去ＤＲＡＭメモリモジュール１３０の容量は増加する。
【００５５】
図３を参照すれば、メモリ重複除去は高い水準の重複除去、そしてそれに対応する、重複除去ＤＲＡＭメモリモジュール１３０の大きなメモリ容量を保障するために、相対的に効率的であるが簡単な、多重ウェイハッシュテーブル／ハッシュアレイ（Ｍｕｌｔｉｐｌｅ−ｗａｙ  Ｈａｓｈ  Ｔａｂｌｅ／Ｈａｓｈ  Ａｒｒａｙ）３８０（以下ハッシュテーブル３８０という）を使用する。本発明の実施形態による重複除去ＤＲＡＭメモリモジュール１３０のハッシュテーブルメモリ２２０には１つ以上のハッシュテーブル３８０があり、データブロックが唯一であるか否かの決定において、使用される。ハッシュテーブル３８０はハッシュバケット（Ｈａｓｈ  Ｂｕｃｋｅｔｓ、行）３１０及びハッシュウェイ（Ｈａｓｈ  Ｗａｙｓ、列）３２０により構成される２次元アレイとして考慮される。即ち、本発明の実施形態によるハッシュテーブル３８０はハッシュバケット３１０のｍ個の行を含み、各ハッシュバケット３１０はハッシュバケット３１０の容量を示すデータライン／スロット／項目／ハッシュウェイ３２０のｎ個の列を含む（ｍ及びｎは整数）。
【００５６】
ハッシュテーブルメモリ２２０のハッシュウェイ３２０にデータブロックが格納され、ＡＬＵＴＭ２１０のアドレスポインターは特定データブロックと連関された特定のハッシュバケット３１０及び特定のハッシュウェイ３２０を示す値を格納する。したがって、アドレス（例えば、６４−ビットアドレス）はＡＬＵＴＭ２１０に索引され、それから、アドレスに対応するデータブロックを格納するハッシュテーブル３８０のハッシュバケット３１０の連関されたハッシュウェイ３２０が決定される。
【００５７】
したがって、書込みプロセス（例えば、６４−バイト（６４−ｂｙｔｅ）のデータ書込み）の間に、書込み要請（即ち、１つ以上のデータブロックにより構成されるインカミング（Ｉｎｃｏｍｉｎｇ）データを記録するための要請）を受信した後、ハッシュ値が該当ハッシュバケット３１０及びハッシュウェイ３２０の決定のためにハッシュ関数／ハッシュアルゴリズム（即ち、インカミングデータが「ハッシュされる」）を利用してインカミングデータに対して計算される。したがって、ハッシュ値はデータブロックが何処に配置されたかを示すか、又は、データブロック（例えば、６４バイトのデータブロック）が重複である場合、ハッシュ値はデータブロックがハッシュテーブルメモリ２２０に既に格納された位置を示す。メモリにデータコンテンツが追加されることによって、ｍ個のハッシュバケット３１０の中の一部は先ず飽和状態に到達する。したがって、重複除去ＤＲＡＭメモリモジュール１３０はハッシュテーブルメモリ２２０に入らないデータブロックを格納するためのバッファメモリ２３０を使用する超過予備（Ｏｖｅｒｆｌｏｗ  Ｐｒｏｖｉｓｉｏｎ）を含む。その後、原本検索アドレス（Ｏｒｉｇｉｎａｌ  Ｌｏｏｋｕｐ  Ａｄｄｒｅｓｓ）は検索され、ＡＬＵＴＭ２１０はインカミングデータのハッシング（Ｈａｓｈｉｎｇ）から計算された検索アドレスにしたがってアップデートされる。
【００５８】
書込みプロセスの間に、ハッシュウェイ３２０の全てがいっぱいに満たされていると判断される時、バッファメモリ２３０が使用される。即ち、ハッシュテーブル３８０がいっぱいに満たされておれば、データはバッファメモリ２３０の重複除去されない超過領域（ｎｏｎ−ｄｅｄｕｐｌｉｃａｔｅｄ  ｏｖｅｒｆｌｏｗ  ｒｅｇｉｏｎ）に配置され、これによって重複除去水準が減少する。したがって、バッファメモリ２３０は根本的に予約された、標準の、簡単な超過メモリ領域であり、仮想密度過剰予備管理超過（ｖｉｒｔｕａｌ  ｄｅｎｓｉｔｙ  ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎ  ｍａｎａｇｅｍｅｎｔ  ｏｖｅｒｆｌｏｗ）を具現するためのＳＯＣメモリバッファ／キャッシュとして提供される。データがバッファメモリ２３０に一旦配置されれば、それ以上ハッシュされず、そしてそれ以上重複除去されない。
【００５９】
コンピュータアプリケーションが数回に亘ってメモリに同一のシークェンスの値を格納するよう要求すると、ＡＬＵＴＭ２１０に格納された変換アレイの多重項目はハッシュテーブルメモリ２２０に格納されたデータブロックの同一のアドレスを参照し、ＡＬＵＴＭ２１０の項目は原本の固有なデータブロックより小さく、効率的な圧縮が達成される。
【００６０】
ｍ個のハッシュバケット３１０の各々はハッシュバケット３１０の該当ハッシュウェイ３２０を示すための固有な識別子を含む参照／頻度カウントライン３４０、及び署名ライン（Ｓｉｇｎａｔｕｒｅ  Ｌｉｎｅ）３３０をさらに含む。各ハッシュバケット３１０のための、該当署名ライン３３０は空いているライン（Ｆｒｅｅ  Ｌｉｎｅ）を示すための０、又はコンテンツ検索最適化のための０ではない２次的なハッシュ値の中のいずれか１つを含む。したがって、コンテンツ検索のために、一般的に署名ラインの０項目に基づき空いているラインが割当されるように要請する署名一致がないか、或いは、後続のデータライン読出し及びコンテンツ比較が重複の存在を確認するようにする１つの署名一致が存在する。ｍ個のハッシュバケット３１０の各々は後述の図５により説明するホップワードライン（Ｈｏｐｗｏｒｄ  Ｌｉｎｅ）をさらに含む。
【００６１】
物理的なラインＩＤ（ＰＬＩＤ）３５０はデータをハッシュテーブル３８０に索引するために使用される。ＰＬＩＤ３５０はＡＬＵＴＭ２１０、ハッシュテーブルメモリ２２０、又はバッファメモリ２３０の中のいずれか１つに区別されるメモリラインを職別するために使用される。各メモリラインはハッシュテーブル３８０に固有のコンテンツを格納するためのデータライン、又は各々のＰＬＩＤ３５０を格納し、プロセッサバスアドレス（Ｐｒｏｃｅｓｓｏｒ  Ｂｕｓ  Ａｄｄｒｅｓｓ）からハッシュテーブル３８０の重複除去されたデータブロックへのマッピングを提供するための変換ライン（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｉｎｅ）の中のいずれか１つに関連される。即ち、バスアドレスは変換ラインを識別し、順に特定データラインを指定する関連あるＰＬＩＤ３５０が含まれた変換ライン内項目をさらに識別する。したがって、ＰＬＩＤ３５０は超過タッグ（Ｏｖｅｒｆｌｏｗ  Ｔａｇ）を含むように具現され、特定該当ハッシュテーブル３８０、該当ハッシュバケットビット、及びＰＬＩＤ３５０に対応するデータブロックの位置を示す該当ウェイビット（Ｗａｙ  Ｂｉｔｓ）を示すためのデータを含む。
【００６２】
各ハッシュバケット３１０には、ハッシュバケット３１０にデータを索引するために使用されるｌｏｇ２（ｍ）−ビットハッシュを生成するアルゴリズムであるハッシュ関数／ハッシュアルゴリズム「ｈ（ｘ）」と連関される（例えば、ハッシュテーブル３８０が８個のハッシュバケット３１０を有すれば、ハッシュテーブル３８０のハッシュ関数は３ビットハッシュを生成する）。即ち、ハッシュ関数ｈ（ｘ）は相対的に大きな入力データ量（例えば、メモリに格納される入力データファイル）をハッシュ関数ｈ（ｘ）に入力することを可能にし、出力データ（例えば、ハッシュ値）の実質的に異なる小さな量がハッシュテーブル３８０に格納されるようハッシュ関数ｈ（ｘ）によって生成され、出力される。したがって、互いに異なるデータセットは時々同じハッシュ値にハッシュされるので、ハッシュ関数ｈ（ｘ）は圧縮を可能にする。
【００６３】
重複除去されたメモリへの書込みにおいて、データファイルに対応する書込み要請を受信した後、重複除去されたメモリは最初に同一／重複データブロックが既にハッシュテーブル３８０に格納されているか否かを決定するために重複検索を遂行する。そうすると、重複除去されたメモリはＡＬＵＴＭ２１０及びハッシュテーブルメモリ２２０の項目をアップデートする。例えば、参照／頻度カウントライン３４０はハッシュテーブルメモリ２２０内の原本検索アドレス（即ち、１ずつ減少される）の頻度カウントをアップデートし、参照カウントが０に到達すれば、該当データブロックは削除される。それだけでなく、新しいＰＬＩＤ３５０がＡＬＵＴＭ２１０により生成される。
【００６４】
コンテンツ検索と称される重複検索の間に、重複除去ＤＲＡＭメモリモジュール１３０は書き込まれるよう意図されるデータファイル又はその一部の既存のインスタンス（Ｐｒｅ−ｅｘｉｓｔｉｎｇ  ｉｎｓｔａｎｃｅｓ）を探す。ハッシュテーブルメモリ２２０に格納されたデータの既存のインスタンスがある場合、重複検索は該当データラインを示すＰＬＩＤ３５０を返す。データの既存のインスタンスが見つからない場合は、該当データブロックのための新しいデータラインをハッシュテーブル３８０の空間に割当し、そこにコンテンツを書き込み、そして新しいＰＬＩＤ３５０を返すことによって生成される。コンテンツはバスアドレスによって決定されたオフセットによりＡＬＵＴＭ２１０にＰＬＩＤ３５０を格納することによって記録される。
【００６５】
ハッシュテーブル３８０にデータライン「Ｃ」を挿入するために、Ｃの該当ハッシュ関数「ｈ（Ｃ）」は数学的演算により計算される。データラインＣのためにハッシュ関数が計算されれば、ハッシュテーブルＴ（ｈ（Ｃ））の行はデータラインＣの挿入を許容するために使用可能な充分な空間があるか否かを知るための（又はハッシュテーブル３８０に重複されるデータラインＣが既にあるか否かを知るための）コンテンツ検索動作によってチェックされる。
【００６６】
前述したように、ハッシュテーブル３８０の各ハッシュバケット３１０は追加的に署名ライン３３０及び参照／頻度カウントライン３４０をさらに含み、署名ライン３３０の署名３３２及び参照／頻度カウントライン３４０の参照カウント３４２が様々な数量を各ハッシュバケット３１０に満たすのに充分に小さく設計される事実によって署名ライン３３０及び参照／頻度カウントライン３４０の各々は１つのハッシュウェイ３２０を占有する。即ち、ハッシュテーブル３８０において、ハッシュテーブル３８０の１つの全体列は各々ハッシュバケット３１０に属する署名ライン３３０に割当され、１つの全体列は各々ハッシュバケット３１０に属する参照／頻度カウントライン３４０に割当される。
【００６７】
データライン「Ｃ」のような実際データブロックをハッシュテーブル３８０に加えながら、ハッシュテーブル３８０にはＡＬＵＴＭ２１０に格納された該当ＰＬＩＤ３５０を各個別的な重複除去されたデータラインのハッシュテーブル３８０内アドレスにマッチングすることによって後にアクセスされるデータが満たされる。ハッシュテーブル３８０内アドレスはデータが位置する特定ハッシュバケット３１０及び特定ハッシュウェイ３２０を識別すること（例えば、ハッシュテーブル３８０の行及び列を識別すること）によって識別される。したがって、ハッシュテーブル３８０に格納される各データブロックのために、データブロックの位置を示すＡＬＵＴＭ２１０に格納される該当ＰＬＩＤ３５０によって識別される１つ以上の該当アドレスがある。ハッシュテーブル３８０がデータによりいっぱいに満たされれば、新しく導入されるデータは重複除去されない超過領域／バッファメモリ２３０に配置され、これによって重複水準が減少する。
【００６８】
重複除去されたメモリからの読出しにおいて、重複除去されたメモリはハッシュテーブルメモリ２２０からのデータライン又はバッファメモリ２３０からの超過ラインの中のいずれか１つのコピーを返す。例えば、格納されたデータが読み出される時、読出し要請を受信した後、ハッシュテーブル３８０の該当アドレスがＡＬＵＴＭ２１０に格納されたＰＬＩＤ３５０を利用して検索される。そうすると、各アドレスに対応するブロックが検索され、再組立される。
【００６９】
図４は本発明の実施形態による複数のハッシュテーブルアレイのブロック図である。
【００７０】
図４を参照すれば、本発明の実施形態による重複除去ＤＲＡＭシステムアーキテクチャは複数のハッシュテーブル（Ｍｕｌｔｉｐｌｅ  Ｈａｓｈ  Ｔａｂｌｅｓ、ＭＨＴ）４８０により構成されるハッシュテーブルアレイ４００を使用し、各々の複数のハッシュテーブル４８０はｍ個のハッシュバケット４１０を含み、各ハッシュバケット４１０はｎ個のハッシュウェイ４２０を含む。本発明の実施形態においてはハッシュテーブル４８０及びハッシュバケット４１０をそれらの大きさが一定であると説明したが（例えば、ｍ及びｎの整数として説明した）、他の実施形態において、同一の複数のハッシュテーブルアレイ内における他のハッシュテーブルは異なる数のハッシュバケットを有し、そして同様に、複数のハッシュテーブルアレイ内に他のハッシュバケット、又は同一のハッシュテーブル内に異なる数のハッシュウェイを有する。それだけでなく、複数のハッシュテーブル４８０が集合的に利用され、互いに他のハッシュテーブル４８０は互いに独立である（例えば、互いに異なるハッシュテーブル４８０は各々の互いに異なるハッシュ関数を有するか、或いは共通のハッシュ関数を有する。）
【００７１】
ハッシュテーブルアレイ４００がｋ個の並列ハッシュテーブル（Ｔ１、Ｔ２、…、Ｔｋ、ｋは整数）を含み、各ハッシュテーブル４８０は分離され、独立的なハッシュ関数（ｈ１（ｘ）、ｈ２（ｘ）、…、ｈｋ（ｘ））を各々使用する場合、各々のハッシュテーブル（Ｔ１、Ｔ２、…、Ｔｋ）はｍ個のハッシュバケット４１０を含むので、ハッシュ関数（ｈ１（ｘ）、ｈ２（ｘ）、…、ｈｋ（ｘ））は相変わらず、ｌｏｇ２（ｍ）−ビットのハッシュを生成し、そして各ハッシュバケット４１０はｎ個のハッシュウェイ４２０を含むので、３次元（３Ｄ）のハッシュテーブルアレイ（例えば、複数のハッシュテーブルアレイ）の容量はｍｘｎｘｋである。
【００７２】
各ハッシュテーブル４８０はどのようにしてデータが索引されるかを決定する１つのハッシュ関数に対応する。書き込まれるためのインカミングデータをハッシングすることによって、結果計算（例えば、検索アドレス及びキーを含むハッシュ値）はキー及び値が比較され、そして値が一致する場合、該当ハッシュバケット４１０の参照／頻度カウントライン３４０は増加され、これによってＡＬＵＴＭ２１０の追加的なＰＬＩＤ３５０は特定ラインを示す。
【００７３】
従来のハッシュテーブルと異なり、本発明の実施形態による複数のハッシュテーブル４８０は複数の仮想バケット／仮想バケット（Ｖｉｒｔｕａｌ  Ｂｕｃｋｅｔ、ＶＢ）４６０を含み、仮想バケット４６０は複数の物理的なハッシュバケット／物理的なハッシュバケット４１０により構成される。以下において「物理的なハッシュバケット」は前述したハッシュバケット３１０を示し、仮想バケット４６０を前述したハッシュバケット３１０から区別するために使用される。
【００７４】
各仮想バケット４６０は該当ハッシュテーブル４８０のｍ個の物理的なハッシュバケット４１０のＨ個を含み、Ｈはｍより小さい整数である。しかし、同一のハッシュテーブル４８０において仮想バケット４６０の中の他の仮想バケットは１つ以上の物理的なハッシュバケット４１０を共有できることに注目しなければならない。後述するように、本発明の実施形態による仮想バケット４６０の使用によって、第４次元が３次元のハッシュテーブルアレイに加えられる。したがって、データを配置し、整列するにおいて大きな柔軟性が提供され、これによって重複除去ＤＲＡＭシステムアーキテクチャの効率及び圧縮比率が高くなる。
【００７５】
本発明の実施形態は、データ配置の柔軟性の水準を高くするために仮想バケット４６０を使用するが、他の仮想バケット４６０によって共有される他の物理的なハッシュバケット４１０を自由にするために、ハッシュテーブル４８０の中のいずれか１つに格納されたデータブロックは該当仮想バケット４６０内に、又は他の物理的なハッシュバケット４１０に移動される。ハッシュテーブル４８０内において空間を自由にすることによって、重複除去は、使い道がない／重複されたデータを除去することによって達成される。即ち、本発明の実施形態による仮想バケット４６０の使用によって、制限された該当位置へのハッシュ関数を利用してデータラインをハッシングすることによって生じる厳格な制限はなく、データは隣接／「近い位置」の物理的なハッシュバケット４１０への配置が可能であり、これは初期の意図された（しかし、占有された）物理的なハッシュバケット４１０を含む同一の仮想バケット４６０内に存在する物理的なハッシュバケット４１０を示す。
【００７６】
１つの例として、コンテンツ（例えば、データラインＣ）はｋ個のハッシュテーブル（Ｔ１（ｈ１（Ｃ））、Ｔ２（ｈ２（Ｃ））、…、Ｔｋ（ｈｋ（Ｃ）））の中のいずれか１つの物理的なハッシュバケット４１０のいずれか１つに配置される。仮にデータラインＣがＴ１（ｈ１（Ｃ））に配置されようとすれば、データラインＣがＴ１（ｈ１（Ｃ））により表示される物理的なハッシュバケット４１０に配置されるための要請をする代わりに、本発明の実施形態は１つの物理的なハッシュバケット４１０よりさらに大きく、そしてＴ１（ｈ１（Ｃ））により表示される物理的なハッシュバケット４１０のみならず、Ｈ個の物理的な仮想バケット４６０を含む仮想バケット４６０を許容する。即ち、仮想バケット４６０はＴ１（ｈ１（Ｃ））、Ｔ１（ｈ１（Ｃ）＋１）、Ｔ１（ｈ１（Ｃ）＋２）、…、Ｔ１（ｈ１（Ｃ）＋Ｈ−１）を含むハッシュテーブル４８０内において整列された近接しているか、或いは隣接するＨ個の物理的なハッシュバケット４１０を含む。
【００７７】
したがって、仮想バケット４６０はデータブロックがハッシュテーブル４８０内において移動されるか、或いは未来の書込み動作のために空間を自由にすることを可能にする。以前にハッシュテーブル４８０（ハッシュテーブル４８０の物理的なハッシュバケット４１０を含む仮想バケット４６０内）に入ったデータブロックの移動を可能にする本発明の実施形態の動作はホップスコッチ（Ｈｏｐｓｃｏｔｃｈ）により示される。メモリ重複除去のための複数のハッシュテーブル４８０を使用するホップスコッチ動作は後述するように改善できる。
【００７８】
最初に、重複除去ＤＲＡＭモジュール１３０はハッシュテーブル４８０のハッシュ関数の結果としてハッシュテーブル４８０にデータラインＣを挿入しようとする。しかし、しばしば他のデータラインが同一のハッシュ関数の結果として以前にハッシュテーブル４８０に入っていることもある。即ち、他のデータラインは、それが異なるにも拘らず、ハッシュ関数の結果としてハッシュテーブル４８０内の同一の位置に送られる。データラインＣが何処に挿入されるか決定するために、動作は先ずＴ（ｈ（Ｃ））として表現される物理的なハッシュバケット４１０の中において（又は後続の）最初に使用可能な物理的なハッシュバケット４１０を探す。
【００７９】
したがって、データラインＣを何処に書き込むかの決定において、Ｔ（ｈ（Ｃ））として表現される初期に意図された物理的なハッシュバケット４１０は占有される可能性があるので、最初に使用可能な物理的なバケット４１０（即ち、データラインが挿入される第１番目の空いた空間）はＴ（ｈ（Ｃ）＋ｆ）として表現され、ここで、ｆは０以上である。Ｔ（ｈ（Ｃ））として表現される物理的なハッシュバケット４１０が該当仮想バケット４６０のＨ個の物理的なハッシュバケット４１０の第１番目の物理的なハッシュバケット４１０であると仮定すれば、仮にｆがＨより小さければ（即ち、仮に同一仮想バケット４６０内に占有されない物理的なハッシュバケット４１０が存在すれば）、データラインＣは該当仮想バケット４６０に配置される。同様に、Ｔ（ｈ（Ｃ））として表現される物理的なハッシュバケット４１０が該当仮想バケット４６０の第２番目の物理的なハッシュバケットであり、ｆがＨ−１より小さければ、データラインＣは該当仮想バケット４６０に配置される。
【００８０】
しかし、該当仮想バケット４６０の第１番目の物理的なハッシュバケット４１０が意図された物理的なハッシュバケット４１０であると仮定し、仮にｆがＨより大きいか、或いは同一であれば（即ち、仮想バケット４６０の物理的なハッシュバケット４１０にデータラインＣが入る可能性がない場合）、たとえデータラインＣがその仮想バケット４６０に当てはまらなくても、動作は次のような方式により仮想バケット４６０内の空いた空間を作る。例えば、本発明の実施形態による重複除去ＤＲＡＭメモリモジュール１３０はＴ（ｈ（Ｃ）＋ｆ−１）により表現される物理的なハッシュバケット４１０がその内に含まれたデータを有するか否かを決定する時までＴ（ｈ（Ｃ）＋ｆ−Ｈ）により表現される物理的なハッシュバケット４１０において開始して物理的なハッシュバケット４１０を探し、その次にＴ（ｈ（Ｃ）＋ｆ−Ｈ＋１）により表現される物理的なハッシュバケット４１０、及びその他を探す（例えば、仮想バケット４６０の最初から最後までスキャンする）。その次に、重複除去ＤＲＡＭメモリモジュール１３０はＴ（ｈ（Ｃ）＋ｆ−Ｈ）からＴ（ｈ（Ｃ）＋ｆ−１）までの物理的なハッシュバケット４１０内に入っている任意のデータ対象が空いた空間Ｔ（ｈ（Ｃ）＋ｆ）に配置される可能性あるか否かを決定する。即ち、重複除去ＤＲＡＭメモリモジュール１３０はＴ（ｈ（Ｃ）＋ｆ−Ｈ）からＴ（ｈ（Ｃ）＋ｆ−１）までの物理的なハッシュバケットの中のどれが物理的なハッシュバケットＴ（ｈ（Ｃ）＋ｆ）を有する共通の仮想バケット４６０内にいるか否かを決定し、これによってその内に入っているデータを移動させる。その次に、重複除去ＤＲＡＭメモリモジュール１３０は発見された最も初期のそのようなデータ対象を空いた空間内に配置し、これによってＴ（ｈ（Ｃ）＋ｅ、ｅはｆより小さい整数）により表現される物理的なハッシュバケット４１０内の新しい空いた空間を作る。このような過程はｅがＨより小さくなる時まで反複され（例えば、データは連続的な方式（Ｃａｓｃａｄｉｎｇ  Ｆａｓｈｉｏｎ）によりハッシュテーブル内において移動される））、これによって該当仮想バケット４６０内にデータラインＣの配置をするために必要である空間を確保する。
【００８１】
例えば、図５（ｂ）を参照すれば、本発明の実施形態において、物理的なハッシュバケットＰＢ２を意図された物理的なハッシュバケット４１０に割当する。意図された物理的なハッシュバケットＰＢ２は仮想バケットＶＢ１と連関されて占有されたので、仮想バケットＶＢ２は最初から最後までスキャンされる（例えば、物理的なハッシュバケットＰＢ２から物理的なハッシュバケットＰＢ５まで）。物理的なハッシュバケットＰＢ３、ＰＢ４、及びＰＢ５もまた占有されたので、最初に使用可能な物理的なハッシュバケット４１０は物理的なハッシュバケットＰＢ６である（（即ち、ｆが４と同一であり、そしてｆがＨと同一であるか、或いはＨより大きく、そして最初に使用可能な物理的なハッシュバケット４１０は該当仮想バケットＶＢ２に存在しない）。したがって、物理的なハッシュバケットＰＢ５内データは物理的なハッシュバケットＰＢ６に移動され、これによって仮想バケットＶＢ２内空間を確保し、データラインＣは該当仮想バケットＶＢ２内（物理的なハッシュバケットＰＢ５内）に配置される。しかし、意図された物理的なハッシュバケットがＰＢ１であれば（即ち、該当仮想バケット４６０はＶＢ１）、処理過程は物理的なハッシュバケットＰＢ４内のデータが仮想バケットＶＢ１から隣接仮想バケットＶＢ２に、即ち、物理的なハッシュバケットＰＢ５の新しく確保された空間に移動されるように反複される。その後に、データラインＣは意図された物理的なハッシュバケットＰＢ１に該当する仮想バケットＶＢ１の物理的なハッシュバケットＰＢ４に書き込まれる。
【００８２】
したがって、他の仮想バケット４６０の重複と看做される他の仮想バケット４６０による特定物理的なハッシュバケット４１０の共通所有によって、データは１つの仮想バケット４６０において他の仮想バケット４６０に移動され、これによって初期ハッシュバケット４１０のための空間を作る。
【００８３】
他の実施形態において、書込み過程の間に、データブロックをハッシュテーブルアレイ４００に書き込む要請を受信した後、重複除去ＤＲＡＭメモリモジュール１３０は既存の項目が既にハッシュテーブル４８０の中の１つにあるか否かをチェックするために、各ハッシュテーブルのデータの価値の全体仮想バケット４６０を検索する。仮に最初に意図されたハッシュテーブル４８０がいっぱいに満たされている場合、そしてデータブロックが最初に意図されたハッシュテーブル４８０により探せない場合（即ち、各物理的なハッシュバケット４１０の各ハッシュウェイ４２０が他のデータブロックによって占有された場合）、重複除去ＤＲＡＭメモリモジュール１３０はバッファメモリ２３０にデータを入力することを追求するか、或いはハッシュテーブルアレイ４００の他のハッシュテーブル４８０にデータを入力するかのいずれか１つを追求する。しかし、複数のハッシュテーブルアレイ４００のハッシュテーブル４８０の全部がいっぱいに満たされている場合、データブロックはバッファメモリ２３０にこぼれる（Ｓｐｉｌｌ  ｏｖｅｒ）。このような実施形態において、ハッシュテーブルアレイ４００内におけるデータ移動は重複除去ＤＲＡＭメモリモジュール１３０によって許容されない。したがって、ハッシュテーブルアレイ４００内に事前に格納されたデータの移動を許容しないことによって、現在実施形態は（以前に説明した実施形態と異なり）書込み機能に関連したレイテンシ（Ｌａｔｅｎｃｙ）を増加させる。
【００８４】
即ち、書込み要請を受信した後、本発明の実施形態の重複除去ＤＲＡＭメモリモジュール１３０はデータブロックをハッシュし、意図された物理的なブロック（データブロックをハッシングすることによって生成されたハッシュ値によって決定される）、又は同一の仮想バケット４６０内の任意の他の隣接の物理的なハッシュバケット４１０が既に格納されたデータブロックを有するかを決定する。仮にデータブロックがそこに格納されていなければ、重複除去ＤＲＡＭメモリモジュール１３０はデータブロックを格納するために同一仮想バケット４６０内に任意の空間が存在するか否かを決定する。仮に空間がなければ、重複除去ＤＲＡＭメモリモジュール１３０は簡単にデータブロックをバッファメモリ２３０に格納するか、又はそうでなければ、バッファメモリ２３０にデータブロックを格納する前にハッシュテーブルアレイ４００の他のところに任意の空間が存在するかを決定する。意図された仮想バケット４６０に空間を確保するために仮想バケットの間において他のデータブロックの移動に対する動作が遂行されないので、現在実施形態の重複除去ＤＲＡＭメモリモジュール１３０と連関されたテールレイテンシ（Ｔａｉｌ  Ｌａｔｅｎｃｙ）は以前に説明した実施形態を超えて向上する。
【００８５】
図５（ａ）、図５（ｂ）、及び図５（ｃ）は本発明の実施形態に係る仮想バケットと特定物理的なハッシュバケットを連関させるためのホップワード（Ｈｏｐｗｏｒｄｓ）を生成するための２次元のアレイを示す図である。
【００８６】
図５（ａ）、図５（ｂ）、及び図５（ｃ）を参照すれば、本発明の実施形態に係る、多様な仮想バケット４６０はホップワード値５９１又はホップワードベクトル５９２の内のいずれか１つを利用し、データの移動を効果的に追跡するために仮想バケット利用値を利用してそれらの該当物理的なハッシュバケット４１０と連関される。各占有された物理的なハッシュバケット４１０は１つの仮想バケット４６０に該当するので、ホップワード値５９１又はホップワードベクトル５９２はどの仮想バケット４６０が占有された物理的なハッシュバケット４１０に該当するかを追跡するために使用される。
【００８７】
本発明の例において、４個の仮想バケットＶＢ０、ＶＢ１、ＶＢ２、及びＶＢ３の各々は物理的なハッシュバケットＰＢ０、ＰＢ１、ＰＢ２、ＰＢ３、ＰＢ４、ＰＢ５、及びＰＢ６のグループから４個の隣接する物理的なハッシュバケットの他のセットを有する（即ち、Ｈは４）。
【００８８】
例えば、図５（ａ）及び図５（ｂ）を参照すれば、物理的なハッシュバケット位置及び仮想バケット位置（例えば、類似アドレス（ｑｕａｓｉ−ａｄｄｒｅｓｓｅｓ））により構成される２次元アレイを作る。例として該当物理的なハッシュバケット４１０に該当する任意の例には１があることを示す各仮想バケット４６０のためのデータを含む各物理的なハッシュバケット４１０に１（例えば、２進表示子）を配置することによってホップワードベクトル５９２は、決定される。したがって、ホップワードベクトル５９２は各仮想バケット４６０のための物理的なハッシュバケット使用を追跡するために使用できる１又は０のアレイを含む。本発明の例において、物理的なハッシュバケットＰＢ０、ＰＢ１、及びＰＢ３は第１番目の仮想バケットＶＢ０のために占有され、物理的なハッシュバケットＰＢ２及びＰＢ４は第２番目の仮想バケットＶＢ１のために占有され、物理的なハッシュバケットＰＢ５は第３番目の仮想バケットＶＢ２のために占有され、そして第４番目の仮想バケットＶＢ３は占有されない。
【００８９】
同様に、図５（ｃ）を参照すれば、いずれかの仮想バケット４６０が占有される物理的なハッシュバケットに該当するかを知ることによって占有される物理的なハッシュバケット４１０に基づいてホップワード値５９１を作る。ホップワード値５９１はｌｏｇ２（Ｈ）長さのビットになる（Ｈは仮想バケット４６０毎に物理的なハッシュバケット４１０の数）。
【００９０】
ホップワードベクトル５９２又はホップワード値５９１の情報は各ハッシュバケット４１０のホップワードラインに格納され、物理的なハッシュバケット４１０及び仮想バケット４６０の間の関係はメモリに索引される。
【００９１】
図６は本発明の実施形態によるハッシュテーブルメモリのデータブロックのアドレッシングのための物理的なラインＩＤ（ＰＬＩＤ）６５０のブロック図である。
図６を参照すれば、本発明の実施形態に係る、修正されたＰＬＩＤ６５０が提供される。本発明の実施形態によるＰＬＩＤ６５０はアドレス、オフセット、テーブルの索引、ハッシュ、そしてスロット／ウェイ（Ｗａｙ）、及び仮想バケット４６０の間への移動する項目を追跡するための特定仮想バケット４６０と対をなすキー６５１の各々を示す複数のビットを含む。したがって、仮にキー６５１が特定仮想バケット４６０と一致すれば、その特定仮想バケット４６０はそこに書き込まれたデータ項目を含む。
【００９２】
しかし、他の実施形態において、ＰＬＩＤ６５０はキー６５１をｌｏｇ２（Ｈ）ビットにより構成される仮想バケット利用値フィールド６５２（例えば、仮想バケット索引）に代替する（例えば、１６個の物理的なハッシュバケットの高さを有する仮想バケットはＰＬＩＤ６５０の４ビット仮想バケット利用値フィールド６５２に対応される）。仮想バケット利用値フィールド６５２は各占有された物理的なハッシュバケット４１０にいずれかの仮想バケット４６０が対応するか否かを示す。したがって、データ項目を仮想バケット４６０に書き込む時、仮想バケット４６０に既に存在する項目の数は計算され、そして仮想バケットに既に存在するアイテムの数に１を加えたのと同一のＰ値が仮想バケット利用値フィールド６５２として書き込まれる。ＰＬＩＤ６５０の仮想バケット利用値フィールド６５２を利用することによって、ＰＬＩＤ６５０のストレージ（Ｓｔｏｒａｇｅ）過負荷は減少する。
【００９３】
図７は本発明の実施形態による、ホップスコッチ方法を使用するメモリモジュールの複数のハッシュテーブルアレイにデータを書き込む過程を示す順序図である。
【００９４】
図７を参照すれば、Ｓ７０１段階において、複数のハッシュテーブルは職別され、ハッシュテーブルの各々はハッシュ関数に対応され、そして各々は物理的なハッシュバケット４１０を含み、各物理的なハッシュバケット４１０はハッシュウェイを含み、データを格納するように構成される（例えば、重複除去ＤＲＡＭメモリモジュール１３０はｋ個のハッシュテーブル４８０を職別し、各々はハッシュ関数ｈ（ｘ）に対応され、各々はｍ個の物理的なハッシュバケット４１０を含み、各物理的なハッシュバケットはｎ個のハッシュウェイ４２０を含む）。
【００９５】
Ｓ７０２段階において、複数の仮想バケット４６０が職別され、仮想バケット４６０の各々はいくつかの物理的なハッシュバケット４１０を含み、そして各々は他の仮想バケットと少なくとも１つの物理的なハッシュバケット４１０を共有する（例えば、重複除去ＤＲＡＭメモリモジュール１３０は複数の仮想バケット４６０を職別し、仮想バケット４６０の各々はｍ個の物理的なハッシュバケット４１０のＨ個を含み、そして図４に図示したように、各仮想バケット４６０は他の仮想バケット４６０と少なくとも１つの物理的なハッシュバケット４１０を共有する）。Ｓ７０２ａ段階において、複数の仮想バケット４６０はｌｏｇ２（ｈ）ビットの仮想バケット利用値フィールド、そして仮想バケットの中の対応する１つの仮想バケットにおけるデータブロックの数と同一の値を含む物理的なラインＩＤ（ＰＬＩＤ）６５０にハッシュテーブルを索引し仮想バケットの中の対応する１つの仮想バケットに項目が書き込まれる時に仮想バケット利用値フィールドを１増加させることによって職別される（例えば、図６に示したように、仮想バケット４６０は仮想バケット利用値フィールド６５２、及び仮想バケット４６０の中の対応する１つの仮想バケット４６０におけるデータブロックの数と同一の値を含む物理的なラインＩＤ（ＰＬＩＤ）６５０にハッシュテーブル４８０を索引することによって職別され、仮想バケット利用値フィールド６５２は仮想バケット４６０の中の対応する１つの仮想バケットに項目又はデータブロックが書き込まれる時に１が増加される）。
【００９６】
Ｓ７０３段階において、物理的なハッシュバケット４１０に格納されたデータを有する物理的なハッシュバケット４１０の各々は仮想バケット４６０の中の対応する１つの仮想バケット４６０に割当されて職別される（例えば、重複除去ＤＲＡＭメモリモジュール１３０は図５（ｂ）及び図５（ｃ）に図示したようにＰＢ０、ＰＢ１、ＰＢ２、ＰＢ３、ＰＢ４、及びＰＢ５に格納されたデータを有する物理的なハッシュバケット４１０を仮想バケット４６０（ＶＢ０、ＶＢ１、及びＶＢ２）の中の対応する１つの仮想バケット４６０に割当して職別する）。Ｓ７０３ａ段階において、データを含む物理的なハッシュバケット４１０の中の何れかが仮想バケット４６０の中のいずれかに対応するかを示すためのホップワードベクトル５９２又はホップワード値５９１を生成することによって職別される（例えば、図５（ｂ）及び図５（ｃ）に図示したように、重複除去ＤＲＡＭメモリモジュール１３０はデータを含む物理的なハッシュバケット４１０の中のいずれかが仮想バケット４６０の中のいずれかに対応するかを示すためのホップワードベクトル５９２又はホップワード値５９１を生成する）。
【００９７】
Ｓ７０４段階において、データラインはハッシュ値を生成するためにハッシュ関数の中の対応する１つのハッシュ関数にしたがってハッシュされる（例えば、重複除去ＤＲＡＭメモリモジュール１３０はメモリコントローラ１２０からデータラインＣに該当する書込み要請を受信し、そしてハッシュ値を生成するためにハッシュ関数ｈ（ｘ）の中の対応する１つのハッシュ関数にしたがってインカミング（ｉｎｃｏｍｉｎｇ）データをハッシュする）。
【００９８】
Ｓ７０５段階において、該当ハッシュテーブルの仮想バケット４６０の中の対応する１つの仮想バケット４６０がハッシュ値にしたがうデータブロックのための使用可能な空間を有するか否かが決定される（例えば、図５（ｂ）及び図５（ｃ）に図示したように、重複除去ＤＲＡＭメモリモジュール１３０は仮想バケット４６０のＶＢ３がデータブロックのための物理的なバケットＰＢ６に空間を有するか決定する）。
【００９９】
Ｓ７０６段階において、データは仮想バケット４６０の中の対応する１つの仮想バケット４６０がデータブロックのための空間を有する時まで仮想バケット４６０の中の対応する１つの仮想バケット４６０が使用可能な空間を有さない場合、仮想バケット４６０の中の対応する１つの仮想バケット４６０から隣接する１つの仮想バケット４６０に順次的に移動させる）。（例えば、図５（ｂ）及び図５（ｃ）に図示したように、重複除去ＤＲＡＭメモリモジュール１３０は仮想バケットＶＢ２がデータブロックのための空間を有する時まで仮想バケットＶＢ２が任意の他の使用可能な物理的なハッシュバケットを有さない場合、仮想バケットＶＢ２の物理的なハッシュバケットＰＢ５から仮想バケットＶＢ３にデータを順次的に移動させ、上述した過程は仮に仮想バケットＶＢ１が仮想バケット４６０の中の対応する１つの仮想バケット４６０であれば、仮想バケットＶＢ１の物理的なバケットＰＢ４から仮想バケットＶＢ２の物理的なバケットＰＢ５にデータを移動させるために反複される）。Ｓ７０６ａ段階において、アドレス検索テーブルメモリは移動されたデータブロックに対応する１つ又はそれ以上の検索アドレスに変更するためにアップデートされる（例えば、重複除去ＤＲＡＭメモリモジュール１３０はハッシュテーブルメモリ２２０の移動されたデータブロックの新しいアドレスが検索されるように移動されたデータブロックに対応する１つ又はそれ以上のアドレスポインターを変更するためにＡＬＵＴＭ２１０をアップデートする）。
【０１００】
Ｓ７０７段階において、データブロックは仮想バケット４６０の中の対応する１つの仮想バケットに格納される（例えば、図５（ｂ）及び図５（ｃ）に図示したように、重複除去ＤＲＡＭメモリモジュール１３０は仮に仮想バケットＶＢ１が意図された仮想バケット４６０であれば、データブロックを仮想バケットＶＢ１の物理的なバケットＰＢ４に格納する）。仮に、仮想バケットＶＢ１を含むハッシュテーブル４８０がいっぱいに満たされていると決定されれば、データブロックはバッファメモリ２３０に格納される。
【０１０１】
図８は本発明の実施形態による、メモリモジュールの複数のハッシュテーブルアレイからデータを読み出す過程を示す順序図である。
【０１０２】
Ｓ８０１段階において、ハッシュテーブルアレイに格納された複数のデータブロックに対応する読出し要請が受信される（例えば、重複除去ＤＲＡＭメモリモジュール１３０はメモリコントローラ１２０からデータラインＣにより構成される複数のデータブロックに該当する読出し要請を受信し、複数のデータブロックはハッシュテーブルメモリ２２０のハッシュテーブルアレイ４００に格納される）。
【０１０３】
Ｓ８０２段階において、複数のデータブロックに対応するポインターの中の該当するポインターはＡＬＵＴＭ２１０から検索される（例えば、重複除去ＤＲＡＭメモリモジュール１３０はＡＬＵＴＭ２１０からデータラインＣにより構成される複数のデータブロックに対応するアドレスポインターを検索する）。
【０１０４】
Ｓ８０３段階において、ポインターの中の該当するポインターに基づく複数のデータブロックはハッシュテーブルメモリ２２０によりアクセスされる（例えば、重複除去ＤＲＡＭメモリモジュール１３０はハッシュテーブルメモリ２２０のハッシュテーブルアレイ４００内の検索されたアドレスポインターに対応する異なるアドレスからデータブロックをアクセスし、検索する）。
【０１０５】
Ｓ８０４段階において、複数のデータブロックは再組立されたデータを生成するために再組立される（例えば、重複除去ＤＲＡＭメモリモジュール１３０は受信された読出し要請に対応するデータラインＣと同等である再組立されたデータを生成するためにハッシュテーブルメモリ２２０から検索されたデータブロックを再組立する）。
【０１０６】
Ｓ８０５段階において、再組立されたデータはメモリモジュールからメモリコントローラへ伝送される（例えば、重複除去ＤＲＡＭメモリモジュール１３０はデータラインＣをメモリコントローラ１２０に伝送する）。
【０１０７】
前述したように、データ重複除去は本発明の実施形態による重複除去ＤＲＡＭメモリモジュール１３０を使用して遂行される。したがって、メモリアクセスは減少され、ＤＲＡＭシステムの寿命は延長する。
【０１０８】
前述した内容は例示的な実施形態を示し、それによって限定されない。幾つかの例示的な実施形態を説明したが、当業者は例示的な実施形態により新規な教示及び例示的な実施形態の長所から逸脱せずに、多様な変形が可能なことを容易に理解できる。したがって、そのようなすべての変形は請求範囲に記載された例示的な実施形態の範囲内に含まれると意図される。請求範囲において、機能的な要素は引用した機能を遂行する構造及び構造的な均等物のみならず、同等な構造物も含むと意図される。したがって、前述した内容は開示した特定な実施形態に制限されず、開示した例示的な実施形態の変形のみならず、他の例示的な実施形態は添付した請求項の範囲内に含まれると理解されなければならない。本発明は請求項に含まれる請求項の均等内の範囲で、以下の請求範囲によって定義される。
【符号の説明】
【０１０９】
１００  重複除去ＤＲＡＭシステムアーキテクチャ
１１０  プロセッサ
１２０  メモリコントローラ
１３０  重複除去ＤＲＡＭメモリモジュール
１４０  オペレーティングシステム
２１０  アドレス検索テーブルメモリ（ＡＬＵＴＭ）
２２０  ハッシュテーブルメモリ
２３０  バッファメモリ
３１０、４１０  ハッシュバケット
３２０、４２０  ハッシュウェイ
３３０  署名ライン
３３２  署名
３４０  参照／頻度カウントライン
３４２  参照カウント
３５０、６５０  ラインＩＤ（ＰＬＩＤ）
３８０、４８０  ハッシュテーブル
４００  ハッシュテーブルアレイ
４６０  仮想バケット
５９１  ホップワード値
５９２  ホップワードベクトル
６５１  キー
６５２  仮想バケット利用値フィールド
【図１】
2017188094.tif 000003
【図２】
2017188094.tif 000004
【図３】
2017188094.tif 000005
【図４】
2017188094.tif 000006
【図５】
2017188094.tif 000007
【図６】
2017188094.tif 000008
【図７】
2017188094.tif 000009
【図８】
2017188094.tif 000010