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