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