(57)【要約】【課題】データの回収及び格納方法並びに重複除去モジュールを提供する。【解決手段】本発明の重複除去モジュールに関連するメモリに格納されたデータを回収する方法は、データの論理的アドレスを識別する段階と、変換テーブルの論理的アドレスの少なくとも一部を検索して論理的アドレスに従うデータのＰＬＩＤを識別する段階と、ＰＬＩＤに対応するそれぞれの物理的ラインの位置を特定する段階と、それぞれの物理的ラインからデータを回収する段階と、を有し、データを回収する段階は、それぞれのハッシュシリンダを読出しキャッシュにコピーする段階を含み、それぞれのハッシュシリンダは、それぞれの物理的ラインを含むそれぞれのハッシュバケットと、それぞれの物理的ラインに関連するそれぞれの参照カウンターを含むそれぞれの参照カウンターバケットと、を含む。【選択図】図４
2017208096.tif 000002
【特許請求の範囲】
【請求項１】
重複除去モジュールに関連するメモリに格納されたデータを回収する方法であって、
前記重複除去モジュールは、読出しキャッシュを含み、
前記メモリは、変換テーブル及び複合型データ構造を含み、
前記複合型データ構造は、ハッシュテーブル及び参照カウンターテーブルを含み、
前記ハッシュテーブル及び前記参照カウンターテーブルの各々は、前記複合型データ構造の複数のハッシュシリンダに格納され、
前記ハッシュテーブルは、各ハッシュバケットが各物理的ラインにデータを格納する複数の物理的ラインを含む複数のハッシュバケットを含み、
前記参照カウンターテーブルは、各参照カウンターバケットが複数の参照カウンターを含む複数の参照カウンターバケットを含み、
前記方法は、
前記データの論理的アドレスを識別する段階と、
前記変換テーブルの前記論理的アドレスの少なくとも一部を検索して前記論理的アドレスに従う前記データのＰＬＩＤ（物理的ラインＩＤ）を識別する段階と、
前記ＰＬＩＤに対応する、前記複数の物理的ラインのそれぞれの物理的ラインの位置を特定する段階と、
前記それぞれの物理的ラインから前記データを回収する段階と、を有し、
前記データを回収する段階は、前記複数のハッシュシリンダのそれぞれのハッシュシリンダを前記読出しキャッシュにコピーする段階を含み、
前記それぞれのハッシュシリンダは、
前記それぞれの物理的ラインを含む、前記複数のハッシュバケットのそれぞれのハッシュバケットと、
前記それぞれの物理的ラインに関連するそれぞれの参照カウンターを含む、前記複数の参照カウンターバケットのそれぞれの参照カウンターバケットと、を含むことを特徴とする方法。
【請求項２】
前記ＰＬＩＤに基づいて、前記データが前記ハッシュテーブルに格納されていると判断する段階を更に含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、
前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記ＰＬＩＤは、
前記データが前記ハッシュテーブルに格納されたか又はオーバーフローメモリ領域に格納されたかを示す第１識別子と、
前記データが格納された行を示す第２識別子と、
前記データが格納された列を示す第３識別子と、を含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記複合型データ構造は、各署名バケットが複数の署名を含む複数の署名バケットを含む署名テーブルを更に含み、
前記それぞれのハッシュシリンダは、前記複数の署名バケットのそれぞれの署名バケットを更に含み、
前記それぞれの署名バケットは、前記それぞれの物理的ラインに関連するそれぞれの署名を含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、
前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含み、
前記複数の署名は、前記第１ハッシュ関数よりも小さい第２ハッシュ関数を利用して生成されることを特徴とする請求項５に記載の方法。
【請求項７】
各参照カウンターは、前記ハッシュテーブルに格納された該当データに対する重複除去回数を追跡することを特徴とする請求項１に記載の方法。
【請求項８】
重複除去エンジンに関連するメモリにデータを格納する方法であって、
格納されるデータを識別する段階と、
第１ハッシュ関数を利用して前記データが前記メモリのハッシュテーブルに格納されなければならない位置に対応する第１ハッシュ値を決定する段階と、
前記第１ハッシュ値に対応する前記ハッシュテーブルの位置に前記データを格納する段階と、
前記第１ハッシュ関数よりも小さい第２ハッシュ関数を利用して前記データが格納されなければならない位置にもまた対応する第２ハッシュ値を決定する段階と、
前記メモリの変換テーブルに前記第１ハッシュ値を格納する段階と、
前記メモリの署名テーブルに前記第２ハッシュ値を格納する段階と、を有することを特徴とする方法。
【請求項９】
前記データに対応する、参照カウンターテーブルの参照カウンターを増加させる段階を更に含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記メモリは、
複数のデータを格納する前記ハッシュテーブルと、
前記第１ハッシュ関数を利用して生成される複数のＰＬＩＤ（物理的ラインＩＤ）を格納する前記変換テーブルと、
前記第２ハッシュ関数を利用して生成される複数の署名を格納する前記署名テーブルと、
各参照カウンターが前記ハッシュテーブルに格納された該当データに対する重複除去回数を追跡する複数の参照カウンターを格納する参照カウンターテーブルと、
オーバーフローメモリ領域と、を含むことを特徴とする請求項８に記載の方法。
【請求項１１】
前記複数のＰＬＩＤの各々は、
前記データが前記ハッシュテーブルに格納されたか又は前記オーバーフローメモリ領域に格納されたかを示す第１識別子と、
前記データが格納された行を示す第２識別子と、
前記データが格納された列を示す第３識別子と、を含むことを特徴とする請求項１０に
記載の方法。
【請求項１２】
前記ハッシュテーブル、前記署名テーブル、及び前記参照カウンターテーブルは、複合型データ構造に統合され、
前記複合型データ構造は、複数のハッシュシリンダを含み、
各ハッシュシリンダは、
複数の物理的ラインを含むハッシュバケットと、
前記複数の物理的ラインに対応するそれぞれの署名を含む署名バケットと、
前記複数の物理的ラインに対応するそれぞれの参照カウンターを含む参照カウンターバケットと、を含むことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記第１ハッシュ値に対応する前記ハッシュテーブルの位置に前記データを格納する段階は、前記第１ハッシュ値に対応する前記ハッシュバケットに前記データを格納する段階を含み、
前記メモリの署名テーブルに前記第２ハッシュ値を格納する段階は、前記データが格納された前記ハッシュバケットに対応する前記署名バケットに前記第２ハッシュ値を格納する段階を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
読出しキャッシュと、
ホストシステムからデータ回収要請を受信する重複除去エンジンと、
メモリと、を備え、
前記メモリは、変換テーブル及び複合型データ構造を含み、
前記複合型データ構造は、
各ハッシュバケットが各物理的ラインにデータを格納する複数の物理的ラインを含む複数のハッシュバケットを含むハッシュテーブルと、
各参照カウンターバケットが複数の参照カウンターを含む複数の参照カウンターバケットを含む参照カウンターテーブルと、
各ハッシュシリンダが前記ハッシュバケットの中の１つ及び前記参照カウンターバケットの中の１つを含む複数のハッシュシリンダと、を含み、
前記データ回収要請は、前記重複除去エンジンが、
前記データの論理的アドレスを識別し、
前記変換テーブルの前記論理的アドレスの少なくとも一部を検索して前記論理的アドレスに従う前記データのＰＬＩＤ（物理的ラインＩＤ）を識別し、
前記ＰＬＩＤに対応する、前記複数の物理的ラインのそれぞれの物理的ラインの位置を特定し、
前記それぞれの物理的ラインから前記データを回収することをもたらし、
前記データの回収は、前記複数のハッシュシリンダのそれぞれのハッシュシリンダを前記読出しキャッシュにコピーすることを含み、
前記それぞれのハッシュシリンダは、
前記それぞれの物理的ラインを含む、前記複数のハッシュバケットのそれぞれのハッシュバケットと、
前記それぞれの物理的ラインに関連するそれぞれの参照カウンターを含む、前記複数の参照カウンターバケットのそれぞれの参照カウンターバケットと、を含むことを特徴とする重複除去モジュール。
【請求項１５】
前記データ回収要請は、前記重複除去エンジンが、前記ＰＬＩＤに基づいて、前記データが前記ハッシュテーブルに格納されていると判断することを更にもたらすことを特徴とする請求項１４に記載の重複除去モジュール。
【請求項１６】
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、
前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含むことを特徴とする請求項１４に記載の重複除去モジュール。
【請求項１７】
前記ＰＬＩＤは、
前記データが前記ハッシュテーブルに格納されたか又はオーバーフローメモリ領域に格納されたかを示す第１識別子と、
前記データが格納された行を示す第２識別子と、
前記データが格納された列を示す第３識別子と、を含むことを特徴とする請求項１６に記載の重複除去モジュール。
【請求項１８】
前記複合型データ構造は、各署名バケットが複数の署名を含む複数の署名バケットを含む署名テーブルを更に含み、
前記それぞれのハッシュシリンダは、前記複数の署名バケットのそれぞれの署名バケットを更に含み、
前記それぞれの署名バケットは、前記それぞれの物理的ラインに関連するそれぞれの署名を含むことを特徴とする請求項１４に記載の重複除去モジュール。
【請求項１９】
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、
前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含み、
前記複数の署名は、前記第１ハッシュ関数よりも小さい第２ハッシュ関数を利用して生成されることを特徴とする請求項１８に記載の重複除去モジュール。
【請求項２０】
各参照カウンターは、前記ハッシュテーブルに格納された該当データに対する重複除去回数を追跡することを特徴とする請求項１４に記載の重複除去モジュール。
【請求項２１】
ホストインターフェイスと、
前記ホストインターフェイスを通じてホストシステムからデータ伝送要請を受信する伝送管理部と、
複数のパーティションと、を備え、
各パーティションは、
前記伝送管理部からパーティションデータ要請を受信する重複除去エンジンと、
複数のメモリコントローラと、
前記重複除去エンジンと前記メモリコントローラとの間に提供されるメモリ管理部と、
各メモリモジュールが前記複数のメモリコントローラの中の１つに連結される複数のメモリモジュールと、を含むことを特徴とする重複除去モジュール。
【請求項２２】
読出しキャッシュと、
メモリと、
複数のハッシュバケットの第１ハッシュバケットに対するＶ個の仮想バケットを識別する重複除去エンジンと、を備え、
前記メモリは、
変換テーブルと、
各ハッシュバケットが各物理的ラインにデータを格納する複数の物理的ラインを含む複数のハッシュバケットを含むハッシュテーブルと、
各参照カウンターバケットが複数の参照カウンターを含む複数の参照カウンターバケットを含む参照カウンターテーブルと、を含み、
前記仮想バケットは、前記第１ハッシュバケットに隣接する前記複数のハッシュバケットの中の他のものであり、
前記仮想バケットは、前記第１ハッシュバケットがフルに満たされた場合、前記第１ハッシュバケットのデータの一部を格納し、
Ｖは、第１ハッシュバケットの仮想バケットがフルに満たされた場合に動的に調節される整数であることを特徴とする重複除去モジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムメモリ及び格納装置に係り、より詳細には、高容量、低待機時間（ｈｉｇｈ  ｃａｐａｃｉｔｙ  ｌｏｗ  ｌａｔｅｎｃｙ）のメモリ及び格納装置を具現するデータの回収方法及び格納方法並びに重複除去モジュールに関する。
【背景技術】
【０００２】
データベース（ｄａｔａｂａｓｅｓ）、デスクトップコンピュータ仮想化（ｖｉｒｔｕａｌ  ｄｅｓｋｔｏｐ  ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）、及びデータ分析（ｄａｔａ  ａｎａｌｙｔｉｃｓ）のような代表的な最新コンピュータアプリケーション（ａｐｐｌｉｃａｔｉｏｎｓ）は大容量メインメモリ（ｍａｉｎ  ｍｅｍｏｒｙ）を必要とする。コンピュータシステムがより複雑なデータ及び格納集約型アプリケーションを遂行するように拡張することによって、より大きいメモリ容量に対する要求は比例して増加する。
【０００３】
代表的なＲＡＭ（ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ）はＲＡＭの物理的設計によって格納可能なデータの量が制限される。例えば、８ＧＢ  ＤＲＡＭは代表的に最大８ＧＢのデータを保持する。また、将来のデータセンター（ｄａｔａ  ｃｅｎｔｅｒ）のアプリケーションは、高容量、低待機時間（ｈｉｇｈ  ｃａｐａｃｉｔｙ  ｌｏｗ  ｌａｔｅｎｃｙ）のメモリを使用する。
【０００４】
このような背景技術で開示された上述した情報は本発明の背景の理解を助けるためのものであり、従って従来技術を構成しない情報を含む。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、上記従来技術に鑑みてなされたものであって、本発明の目的は、物理的メモリサイズよりも大きいメモリ容量を可能にするためのデータの回収方法及び格納方法並びに重複除去モジュールを提供することにある。
【課題を解決するための手段】
【０００６】
本明細書の実施形態の態様はＲＡＭの物理的メモリサイズよりも大きいＲＡＭ内のメモリ容量を可能にする方法及び関連する構造を示す。本発明の実施形態によると、重複除去アルゴリズム（ｄｅｄｕｐｌｉｃａｔｉｏｎ  ａｌｇｏｒｉｔｈｍｓ）はデータメモリの減少及びコンテキストアドレス指定（ｃｏｎｔｅｘｔ  ａｄｄｒｅｓｓｉｎｇ）を達成するために使用される。本発明の実施形態によると、ユーザーデータ（ｕｓｅｒ  ｄａｔａ）はユーザーデータのハッシュ値（ｈａｓｈ  ｖａｌｕｅ）によって索引付けされたハッシュテーブル（ｈａｓｈ  ｔａｂｌｅ）に格納される。
【０００７】
上記目的を達成するためになされた本発明の一態様による方法は、重複除去モジュール（ｄｅｄｕｐｅ  ｍｏｄｕｌｅ）に関連するメモリに格納されたデータを回収する方法であって、前記重複除去モジュールは、読出しキャッシュ（ｒｅａｄ  ｃａｃｈｅ）を含み、前記メモリは、変換テーブル（ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ）及び複合型データ構造を含み、前記複合型データ構造は、ハッシュテーブル（ｈａｓｈ  ｔａｂｌｅ）及び参照カウンターテーブル（ｒｅｆｅｒｅｎｃｅ  ｃｏｕｎｔｅｒ  ｔａｂｌｅ）を含み、前記ハッシュテーブル及び前記参照カウンターテーブルの各々は、前記複合型データ構造の複数のハッシュシリンダ（ｈａｓｈ  ｃｙｌｉｎｄｅｒ）に格納され、前記ハッシュテーブルは、各ハッシュバケットが各物理的ラインにデータを格納する複数の物理的ラインを含む複数のハッシュバケット（ｂｕｃｋｅｔ）を含み、前記参照カウンターテーブルは、各参照カウンターバケットが複数の参照カウンターを含む複数の参照カウンターバケットを含み、前記方法は、前記データの論理的アドレス（ｌｏｇｉｃａｌ  ａｄｄｒｅｓｓ）を識別する段階と、前記変換テーブルの前記論理的アドレスの少なくとも一部を検索して前記論理的アドレスに従う前記データのＰＬＩＤ（ｐｈｙｓｉｃａｌ  ｌｉｎｅ  ＩＤ：物理的ラインＩＤ）を識別する段階と、前記ＰＬＩＤに対応する、前記複数の物理的ラインのそれぞれの物理的ラインの位置を特定する段階と、前記それぞれの物理的ラインから前記データを回収する段階と、を有し、前記データを回収する段階は、前記複数のハッシュシリンダのそれぞれのハッシュシリンダを前記読出しキャッシュにコピーする段階を含み、前記それぞれのハッシュシリンダは、前記それぞれの物理的ラインを含む、前記複数のハッシュバケットのそれぞれのハッシュバケットと、前記それぞれの物理的ラインに関連するそれぞれの参照カウンターを含む、前記複数の参照カウンターバケットのそれぞれの参照カウンターバケットと、を含む。
【０００８】
前記方法は、前記ＰＬＩＤに基づいて、前記データが前記ハッシュテーブルに格納されていると判断する段階を更に含み得る。
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含み得る。
前記ＰＬＩＤは、前記データが前記ハッシュテーブルに格納されたか又はオーバーフローメモリ領域（ｏｖｅｒｆｌｏｗ  ｍｅｍｏｒｙ  ｒｅｇｉｏｎ）に格納されたかを示す第１識別子（ｉｄｅｎｔｉｆｉｅｒ）と、前記データが格納された行を示す第２識別子と、前記データが格納された列を示す第３識別子と、を含み得る。
前記複合型データ構造は、各署名バケットが複数の署名を含む複数の署名バケットを含む署名テーブルを更に含み、前記それぞれのハッシュシリンダは、前記複数の署名バケットのそれぞれの署名バケットを更に含み、前記それぞれの署名バケットは、前記それぞれの物理的ラインに関連するそれぞれの署名を含み得る。
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含み、前記複数の署名は、前記第１ハッシュ関数よりも小さい第２ハッシュ関数を利用して生成され得る。
各参照カウンターは、前記ハッシュテーブルに格納された該当データに対する重複除去回数を追跡し得る。
【０００９】
上記目的を達成するためになされた本発明の一態様による重複除去エンジン（ｄｅｄｕｐｅ  ｅｎｇｉｎｅ）に関連するメモリにデータを格納する方法は、格納されるデータを識別する段階と、第１ハッシュ関数（ｈａｓｈ  ｆｕｎｃｔｉｏｎ）を利用して前記データが前記メモリのハッシュテーブル（ｈａｓｈ  ｔａｂｌｅ）に格納されなければならない位置に対応する第１ハッシュ値（ｈａｓｈ  ｖａｌｕｅ）を決定する段階と、前記第１ハッシュ値に対応する前記ハッシュテーブルの位置に前記データを格納する段階と、前記第１ハッシュ関数よりも小さい第２ハッシュ関数を利用して前記データが格納されなければならない位置にもまた対応する第２ハッシュ値を決定する段階と、前記メモリの変換テーブル（ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ）に前記第１ハッシュ値を格納する段階と、前記メモリの署名テーブルに前記第２ハッシュ値を格納する段階と、を有する。
【００１０】
前記方法は、前記データに対応する、参照カウンターテーブル（ｒｅｆｅｒｅｎｃｅ  ｃｏｕｎｔｅｒ  ｔａｂｌｅ）の参照カウンターを増加させる段階を更に含み得る。
前記メモリは、複数のデータを格納する前記ハッシュテーブルと、前記第１ハッシュ関数を利用して生成される複数のＰＬＩＤ（ｐｈｙｓｉｃａｌ  ｌｉｎｅ  ＩＤ）を格納する前記変換テーブルと、前記第２ハッシュ関数を利用して生成される複数の署名を格納する前記署名テーブルと、各参照カウンターが前記ハッシュテーブルに格納された該当データに対する重複除去回数を追跡する複数の参照カウンターを格納する参照カウンターテーブルと、オーバーフローメモリ領域（ｏｖｅｒｆｌｏｗ  ｍｅｍｏｒｙ  ｒｅｇｉｏｎ）と、を含み得る。
前記複数のＰＬＩＤの各々は、前記データが前記ハッシュテーブルに格納されたか又は前記オーバーフローメモリ領域に格納されたかを示す第１識別子（ｉｄｅｎｔｉｆｉｅｒ）と、前記データが格納された行を示す第２識別子と、前記データが格納された列を示す第３識別子と、含み得る。
前記ハッシュテーブル、前記署名テーブル、及び前記参照カウンターテーブルは、複合型データ構造に統合され、前記複合型データ構造は、複数のハッシュシリンダ（ｃｙｌｉｎｄｅｒ）を含み、各ハッシュシリンダは、複数の物理的ラインを含むハッシュバケットと、前記複数の物理的ラインに対応するそれぞれの署名を含む署名バケットと、前記複数の物理的ラインに対応するそれぞれの参照カウンターを含む参照カウンターバケットと、を含み得る。
前記第１ハッシュ値に対応する前記ハッシュテーブルの位置に前記データを格納する段階は、前記第１ハッシュ値に対応する前記ハッシュバケットに前記データを格納する段階を含み、前記メモリの署名テーブルに前記第２ハッシュ値を格納する段階は、前記データが格納された前記ハッシュバケットに対応する前記署名バケットに前記第２ハッシュ値を格納する段階を含み得る。
【００１１】
上記目的を達成するためになされた本発明の一態様による重複除去モジュールは、読出しキャッシュ（ｒｅａｄ  ｃａｃｈｅ）と、ホストシステムからデータ回収要請を受信する重複除去エンジン（ｄｅｄｕｐｅ  ｅｎｇｉｎｅ）と、メモリと、を備え、前記メモリは、変換テーブル（ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ）及び複合型データ構造を含み、前記複合型データ構造は、各ハッシュバケットが各物理的ラインにデータを格納する複数の物理的ラインを含む複数のハッシュバケット（ｈａｓｈ  ｂｕｃｋｅｔ）を含むハッシュテーブル（ｈａｓｈ  ｔａｂｌｅ）と、各参照カウンターバケットが複数の参照カウンターを含む複数の参照カウンターバケット（ｒｅｆｅｒｅｎｃｅ  ｃｏｕｎｔｅｒ  ｂｕｃｋｅｔ）を含む参照カウンターテーブルと、各ハッシュシリンダが前記ハッシュバケットの中の１つ及び前記参照カウンターバケットの中の１つを含む複数のハッシュシリンダ（ｃｙｌｉｎｄｅｒ）と、を含み、前記データ回収要請は、前記重複除去エンジンが、前記データの論理的アドレスを識別し、前記変換テーブルの前記論理的アドレスの少なくとも一部を検索して前記論理的アドレスに従う前記データのＰＬＩＤ（ｐｈｙｓｉｃａｌ  ｌｉｎｅ  ＩＤ：物理的ラインＩＤ）を識別し、前記ＰＬＩＤに対応する、前記複数の物理的ラインのそれぞれの物理的ラインの位置を特定し、前記それぞれの物理的ラインから前記データを回収することをもたらし、前記データの回収は、前記複数のハッシュシリンダのそれぞれのハッシュシリンダを前記読出しキャッシュにコピーすることを含み、前記それぞれのハッシュシリンダは、前記それぞれの物理的ラインを含む、前記複数のハッシュバケットのそれぞれのハッシュバケットと、前記それぞれの物理的ラインに関連するそれぞれの参照カウンターを含む、前記複数の参照カウンターバケットのそれぞれの参照カウンターバケットと、を含む。
【００１２】
前記データ回収要請は、前記重複除去エンジンが、前記ＰＬＩＤに基づいて、前記データが前記ハッシュテーブルに格納されていると判断することを更にもたらし得る。
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含み得る。
前記ＰＬＩＤは、前記データが前記ハッシュテーブルに格納されたか又はオーバーフローメモリ領域（ｏｖｅｒｆｌｏｗ  ｍｅｍｏｒｙ  ｒｅｇｉｏｎ）に格納されたかを示す第１識別子（ｉｄｅｎｔｉｆｉｅｒ）と、前記データが格納された行を示す第２識別子と、前記データが格納された列を示す第３識別子と、を含み得る。
前記複合型データ構造は、各署名バケットが複数の署名を含む複数の署名バケットを含む署名テーブルを更に含み、前記それぞれのハッシュシリンダは、前記複数の署名バケットのそれぞれの署名バケットを更に含み、前記それぞれの署名バケットは、前記それぞれの物理的ラインに関連するそれぞれの署名を含み得る。
前記ＰＬＩＤは、前記データに適用された第１ハッシュ関数を利用して生成され、前記ＰＬＩＤは、前記ハッシュテーブルの位置を示すアドレスを含み、前記複数の署名は、前記第１ハッシュ関数よりも小さい第２ハッシュ関数を利用して生成され得る。
各参照カウンターは、前記ハッシュテーブルに格納された該当データに対する重複除去回数を追跡し得る。
【００１３】
上記目的を達成するためになされた本発明の他の態様による重複除去モジュールは、ホストインターフェイスと、前記ホストインターフェイスを通じてホストシステムからデータ伝送要請を受信する伝送管理部と、複数のパーティション（ｐａｒｔｉｔｉｏｎ）と、を備え、各パーティションは、前記伝送管理部からパーティションデータ要請を受信する重複除去エンジン（ｄｅｄｕｐｅ  ｅｎｇｉｎｅ）と、複数のメモリコントローラと、前記重複除去エンジンと前記メモリコントローラとの間に提供されるメモリ管理部と、各メモリモジュールが前記複数のメモリコントローラの中の１つに連結される複数のメモリモジュールと、を含む。
【００１４】
上記目的を達成するためになされた本発明の更に他の態様による重複除去モジュールは、読出しキャッシュ（ｒｅａｄ  ｃａｃｈｅ）と、メモリと、複数のハッシュバケットの第１ハッシュバケットに対するＶ個の仮想バケットを識別する重複除去エンジンと、を備え、前記メモリは、変換テーブル（ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ）と、各ハッシュバケットが各物理的ラインにデータを格納する複数の物理的ラインを含む複数のハッシュバケット（ｈａｓｈ  ｂｕｃｋｅｔ）を含むハッシュテーブルと、各参照カウンターバケットが複数の参照カウンターを含む複数の参照カウンターバケット（ｒｅｆｅｒｅｎｃｅ  ｃｏｕｎｔｅｒ  ｂｕｃｋｅｔ）を含む参照カウンターテーブルと、を含み、前記仮想バケットは、前記第１ハッシュバケットに隣接する前記複数のハッシュバケットの中の他のものであり、前記仮想バケットは、前記第１ハッシュバケットがフルに満たされた場合、前記第１ハッシュバケットのデータの一部を格納し、Ｖは、第１ハッシュバケットの仮想バケットがフルに満たされた場合に動的に調節される整数である。
【発明の効果】
【００１５】
本発明によれば、同一なデータで構成される複数のデータブロックを１つの格納されたデータブロックに関連させることで、データブロックの重複コピーはコンピュータメモリ（ｃｏｍｐｕｔｅｒ  ｍｅｍｏｒｙ）によって減少されるか又は除去され、このようにすることでメモリ装置内の不必要なデータコピーの全体量が減少する。不必要なデータコピー（ｒｅｄｕｎｄａｎｔ  ｃｏｐｉｅｓ  ｏｆ  ｄａｔａ）の減少は、読出し待機時間を減少させ、メモリ帯域幅（ｂａｎｄｗｉｄｔｈ）を増加させ、潛在的に電力を節減することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施形態による重複除去モジュールのブロック図である。
【図２】本発明の他の実施形態による重複除去モジュールのブロック図である。
【図３】本発明の一実施形態による重複除去エンジンの論理的観点のブロック図である。
【図４】本発明の一実施形態によるレベル−１変換テーブルを含む重複除去エンジンの論理的観点のブロック図である。
【図５】本発明の一実施形態によるレベル−２変換テーブルを含む重複除去エンジンの論理的観点のブロック図である。
【図６】本発明の一実施形態による動的Ｌ２マップテーブル及びオーバーフローメモリ領域を有するレベル−２変換テーブルを含む重複除去エンジンの論理的観点のブロック図である。
【図７】本発明の一実施形態によるハッシュシリンダの論理的観点のブロック図である。
【図８】本発明の一実施形態による複合型データ構造の論理的観点のブロック図である。
【図９】本発明の一実施形態による仮想バケットに関連するハッシュバケット及び該当参照カウンターバケットの論理的観点のブロック図である。
【図１０】本発明の一実施形態によるＲＡＭに格納されたデータを回収する方法を示すフローチャートである。
【図１１】本発明の一実施形態によるＲＡＭにデータを格納する方法を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。
【００１８】
本明細書の実施形態は物理的メモリサイズよりも大きいメモリ（例えば、ＲＡＭ（ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ））内のメモリ容量を可能にする方法及び関連する構造を示す。本発明の実施形態によると、重複除去アルゴリズム（ｄｅｄｕｐｌｉｃａｔｉｏｎ  ａｌｇｏｒｉｔｈｍｓ）はデータメモリの減少及びコンテキストアドレス指定（ｃｏｎｔｅｘｔ  ａｄｄｒｅｓｓｉｎｇ）を達成するために使用される。本発明の実施形態によると、ユーザーデータ（ｕｓｅｒ  ｄａｔａ）はユーザーデータのハッシュ値（ｈａｓｈ  ｖａｌｕｅ）によって索引付けされたハッシュテーブル（ｈａｓｈ  ｔａｂｌｅ）に格納される。
【００１９】
ＤＲＡＭ（ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）技術がメモリ容量に対するこのような増加する要求を充足させるために２０ｎｍプロセス技術を超えて積極的に拡張する間に、重複除去のような技法（ｔｅｃｈｎｉｑｕｅｓ）はシステムメモリの物理的メモリ容量よりも２、３倍程度以上のシステムメモリの仮想メモリ容量を増加させるために適用される。また、本発明の実施形態は他のタイプのメモリ（例えば、フラッシュメモリ（ｆｌａｓｈ  ｍｅｍｏｒｙ））を利用する。
【００２０】
補助圧縮（ａｕｘｉｌｉａｒｙ  ｃｏｍｐａｃｔｉｏｎ）方法を使用して、本発明の実施形態は、全てのメモリ資源を十分に利用して高い重複除去比率を持続的に達成するために高度に重複除去されたメモリ及びデータ構造を提供する。
【００２１】
高容量（ｈｉｇｈ  ｃａｐａｃｉｔｙ）及び低待機時間（ｌｏｗ  ｌａｔｅｎｃｙ）を有するメモリはデータセンターアプリケーション（ｄａｔａ  ｃｅｎｔｅｒ  ａｐｐｌｉｃａｔｉｏｎｓ）のために大きく要求される。このようなメモリ装置は、それらの物理的メモリサイズ（ｓｉｚｅ）よりも大きいメモリ容量を提供するためにデータ圧縮方式（ｓｃｈｅｍｅ）のみならず、重複除去方式も採用する。重複除去されたメモリ装置は、重複するユーザーデータを減らし、使用可能なメモリ資源を全て利用して高い重複除去比率を持続的に達成することができる。また、重複除去されたメモリ装置によって採用される重複除去方式は重複除去されたデータに対する効果的なアドレス指定を達成することができる。
【００２２】
データ重複排除又は除去（ｄａｔａ  ｄｅｄｕｐｌｉｃａｔｉｏｎ、ｏｒ  ｄａｔａ  ｄｕｐｌｉｃａｔｉｏｎ  ｅｌｉｍｉｎａｔｉｏｎ）はメモリ装置内の不必要なデータ（ｒｅｄｕｎｄａｎｔ  ｄａｔａ）の減少を示し、このようにすることによってメモリ装置の容量コストが減少する。データ重複除去で、データ客体／アイテム（ｏｂｊｅｃｔ／ｉｔｅｍ、例えば、データファイル）は１つ以上のデータライン／チャンク／ブロック（ｌｉｎｅｓ／ｃｈｕｎｋｓ／ｂｌｏｃｋｓ）に分割される。同一なデータに構成される複数のデータブロックを１つの格納されたデータブロックに関連させることで、データブロックの重複コピーは、コンピュータメモリ（ｃｏｍｐｕｔｅｒ  ｍｅｍｏｒｙ）によって減少されるか又は除去され、このようにすることによってメモリ装置内の不必要なデータコピーの全体量が減少する。不必要なデータコピー（ｒｅｄｕｎｄａｎｔ  ｃｏｐｉｅｓ  ｏｆ  ｄａｔａ）の減少は、読出し待機時間を減少させ、メモリ帯域幅（ｂａｎｄｗｉｄｔｈ）を増加させ、潛在的に電力節減を惹起する。
【００２３】
従って、重複されたデータコピーを１つのデータコピーに減少させることができる場合、物理的な資源の量を同様に使用しながらも、メモリ装置の全体使用可能な容量は増加する。その結果として、メモリ装置の経済的使用はデータの再書込み回数（ｄａｔａ  ｒｅ−ｗｒｉｔｅ  ｃｏｕｎｔ）を減少させ、そしてメモリに既に格納された重複されたデータブロックに対する書込み要請が捨てられるため、データ重複除去を実行するメモリ装置の寿命は、効果的に書込み耐久性を増加させることによって延長される。
【００２４】
データ重複除去の関連分野の方法はメモリ内（ｉｎ−ｍｅｍｏｒｙ）重複除去技術を使用し、ここで、重複除去エンジン（ｄｅｄｕｐｌｉｃａｔｉｏｎ  ｅｎｇｉｎｅ）はＣＰＵ中心接近方式（ＣＰＵ−ｃｅｎｔｒｉｃ  ａｐｐｒｏａｃｈ）でＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）又はメモリコントローラ（ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ；ＭＣ）に統合される。このような方法は、ＣＰＵプロセッサの重複の認識を可能にするために、そしてメモリコントローラの制御に従って重複除去されたメモリ動作（例えば、コンテンツ検索（ｃｏｎｔｅｎｔ  ｌｏｏｋｕｐｓ）、参照カウントアップデート（ｒｅｆｅｒｅｎｃｅ  ｃｏｕｎｔ  ｕｐｄａｔｅｓ）、等）の提供を試図するためにメモリコントローラと共に動作する重複除去されたキャッシュ（ｄｅｄｕｐｌｉｃａｔｅｄ  ｃａｃｈｅ：ＤＤＣ）を代表的に具現する。重複除去方法は、また重要経路（ｃｒｉｔｉｃａｌ  ｐａｔｈ）から変換フェッチ（ｔｒａｎｓｌａｔｉｏｎ  ｆｅｔｃｈ）を除去してデータ読出しを向上させる変換ラインをキャッシング（ｃａｃｈｉｎｇ）するためのキャッシュ（ｃａｃｈｅ）であり、索引バッファ（ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）に類似する直接変換バッファ（ｄｉｒｅｃｔ  ｔｒａｎｓｌａｔｉｏｎ  ｂｕｆｆｅｒ：ＤＴＢ）を具現する。
【００２５】
重複除去はハードドライブ（ｈａｒｄ  ｄｒｉｖｅｓ）のために最も普遍的に使用される。しかし、ＤＲＡＭのような揮発性メモリの領域では微細な（ｆｉｎｅ  ｇｒａｉｎ）重複除去を提供することに関係する。
【００２６】
図面に関連して以下で説明する詳細な説明は、本発明の実施形態によって提供されるＲＡＭ（又は他のメモリ格納装置）の物理的メモリサイズよりも大きいＲＡＭ（又は他のメモリ格納装置）内のメモリ容量を可能にするための方法及び関連する構造の例示的な実施形態の説明として意図したものであり、本発明が構成されるかまたは利用される唯一の形態を表現するために意図したものではない。説明は図示した実施形態に関連して本発明の特徴を明らかにする。しかし、同一であるか又は同等な機能及び構造が本発明の思想及び範囲内に含まれるように意図する他の実施形態によって達成されることは理解されるべきである。本明細書の他の部分で言及するように同一の要素番号は同一の要素又は特徴を示す。
【００２７】
図１は、本発明の一実施形態による重複除去モジュールのブロック図である。図１を参照すると、本実施形態による重複除去モジュール（ｄｅｄｕｐｅ  ｍｏｄｕｌｅ）１００は、ブリッジ（ｂｒｉｄｇｅ）１３０、メモリコントローラ（ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ）１４０、ホストインターフェイス（ｈｏｓｔ  ｉｎｔｅｒｆａｃｅ；ｈｏｓｔ  Ｉ／Ｆ）１６０、読出しキャッシュ（ｒｅａｄ  ｃａｃｈｅ）１７０、１つ以上のメモリモジュール（ｍｅｍｏｒｙ  ｍｏｄｕｌｅｓ）１８０、及び重複除去エンジン（ｄｅ
ｄｕｐｅ  ｅｎｇｉｎｅ）２００を含む。
【００２８】
ブリッジ１３０は重複除去エンジン２００及び読出しキャッシュ１７０がメモリコントローラ１４０と通信するようにするインターフェイスを提供する。メモリコントローラ１４０は通信するためにブリッジ１３０及びメモリモジュール１８０に対するインターフェイスを提供する。読出しキャッシュ１７０はメモリモジュール１８０の一部である。
【００２９】
一実施形態において、ブリッジ１８０は存在しない。この場合、メモリコントローラ１４０は重複除去エンジン２００及び読出しキャッシュ１７０と直接的に通信する。
【００３０】
重複除去エンジン２００はメモリモジュール１８０にデータを格納するか又はメモリモジュール１８０のデータにアクセスするためにホストインターフェイス１６０を通じてホストシステムと通信する。重複除去エンジン２００はホストインターフェイス１６０を通じてホストシステムの他の構成要素と更に通信する。
【００３１】
メモリモジュール１８０はＤＲＡＭに連結するためのＤＩＭＭ（ｄｕａｌ  ｉｎ−ｌｉｎｅ  ｍｅｍｏｒｙ  ｍｏｄｕｌｅ）スロット（ｓｌｏｔｓ）であるか、或いはフラッシュメモリ（ｆｌａｓｈ  ｍｅｍｏｒｙ）、他のタイプのメモリ等に連結するためのスロットである。
【００３２】
図２は、本発明の他の実施形態による重複除去モジュールのブロック図である。図２を参照すると、重複除去モジュール（ｄｅｄｕｐｅ  ｍｏｄｕｌｅ）１５０は、１つ以上のパーティション（ｐａｒｔｉｔｉｏｎｓ）２５０（例えば、パーティション０（２５０−０）、パーティション１（２５０−１）、等）、伝送管理部（ｔｒａｎｓｆｅｒ  ｍａｎａｇｅｒ）２３０、及びホストインターフェイス１６２を含む。各パーティション２５０は、重複除去エンジン２０２、メモリ管理部２１０、１つ以上のメモリコントローラ（例えば、メモリコントローラ０（１４２）、メモリコントローラ１（１４４）等）、及び１つ以上のメモリモジュール（例えば、ＤＩＭＭ／フラッシュ０（１８２）、ＤＩＭＭ／フラッシュ１８４等）を含む。
【００３３】
重複除去エンジン２０２の各々は伝送管理部２３０又はホストインターフェイス１６２を通じてホストシステムの中のいずれか１つと直接的に通信する。伝送管理部２３０はホストインターフェイス１６２を通じてホストシステムと通信する。
【００３４】
伝送管理部２３０はホストインターフェイス１６２を通じてホストシステムからデータ伝送要請を受信する。伝送管理部２３０は重複除去モジュール１５０の１つ以上のパーティション２５０へのデータ伝送及び重複除去モジュール１５０の１つ以上のパーティション２５０からのデータ伝送を更に管理する。一実施形態において、伝送管理部２３０は格納されなければならないデータ（例えば、ＲＡＭに格納）を格納するパーティション２５０を決定する。他の実施形態において、伝送管理部２３０はデータが格納されなければならないパーティション２５０に関してホストシステムから指示を受信する。一実施形態形態において、伝送管理部２３０は、ホストシステムから受信されたデータを分離し、それを２以上のパーティションに送る。
【００３５】
重複除去モジュール１５０はホストインターフェイス１６２を通じてホストシステムの構成要素と通信する。
【００３６】
重複除去エンジン２０２は伝送管理部２３０からそのそれぞれのパーティション２５０に対するパーティションデータ要請を受信する。重複除去エンジン２０２はメモリモジュール内のデータのアクセス及び格納を更に制御する。メモリ管理部２１０はデータが格納されるか又はデータが格納されなければならない１つ以上のメモリモジュールを決定する。１つ以上のメモリコントローラはそれらのそれぞれのメモリモジュール上のデータの格納又はアクセスを制御する。
【００３７】
一実施形態において、重複除去エンジン２０２及びメモリ管理部２１０はメモリ管理部２１０及び重複除去エンジン２０２の両方の機能を遂行可能な１つのメモリ管理部として具現される。
【００３８】
１つ以上のメモリコントローラ、メモリ管理部２１０、及び重複除去エンジン２０２の各々は任意の適切なハードウェア（例えば、ＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ））、ファームウェア（ｆｉｒｍｗａｒｅ、例えばＤＳＰ又はＦＰＧＡ）、ソフトウェア、又はソフトウェア、ファームウェア、及びハードウェアの適切な組合せを利用して具現される。また、重複除去エンジン２０２は、以下でより詳細に説明する。
【００３９】
一実施形態によると、メモリが高容量を有する場合、パーティションは変換テーブルサイズ（ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ  ｓｉｚｅ）を減らすために使用される。
【００４０】
図３は、本発明の一実施形態による重複除去エンジンの論理的観点のブロック図である。図３を参照すると、重複除去エンジン２００は複数のテーブルを含む。重複除去エンジン２００は、ハッシュテーブル（ｈａｓｈ  ｔａｂｌｅ）２２０、変換テーブル（ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ）２４０、署名及び参照カウンターテーブル（ｓｉｇｎａｔｕｒｅ  ａｎｄ  ｒｅｆｅｒｅｎｃｅ  ｃｏｕｎｔｅｒ  ｔａｂｌｅｓ）２６０、並びにオーバーフローメモリ領域（ｏｖｅｒｆｌｏｗ  ｍｅｍｏｒｙ  ｒｅｇｉｏｎ）２８０を含む。
【００４１】
ハッシュテーブル２２０は複数の物理的ライン（ｐｈｙｓｉｃａｌ  ｌｉｎｅｓ：ＰＬｓ）を含む。各物理的ラインはデータ（例えば、ユーザーデータ）を含む。ハッシュテーブル２２０内のデータは重複除去される（即ち、重複されたデータは格納装置の空間使用量を減らすために１つの位置に統合される）。
【００４２】
変換テーブル２４０はそれらの中に格納された複数の物理的ラインＩＤを含む。ハッシュテーブルの各物理的ラインは変換テーブル２４０に格納された関連する物理的ラインＩＤ（ＰＬＩＤ）を有する。変換テーブル２４０に格納されたＰＬＩＤは論理的アドレスから物理的アドレスへの変換である。例えば、重複除去エンジン２００が特定の論理的アドレスに関連するデータ位置を特定する必要がある場合、重複除去エンジン２００は、変換テーブル２４０を利用して論理的アドレスに格納されたデータを問い合わせ、データが格納されたハッシュテーブル２２０の物理的ラインに対応するデータのＰＬＩＤを受信する。その次に、重複除去エンジン２００はハッシュテーブル２２０内の該当物理的ラインに格納されたデータにアクセスする。
【００４３】
ＰＬＩＤは第１ハッシュ関数を使用して生成される。例えば、データがハッシュテーブル内に格納される必要がある場合、第１ハッシュ関数は、データが格納されなければならない物理的ラインに対応する第１ハッシュ値を決定するために、データに対して実行される。第１ハッシュ値はデータのＰＬＩＤとして格納される。
【００４４】
各ＰＬＩＤはターゲティング（ｔａｒｇｅｔｉｎｇ）データラインの物理的位置を示す。データラインはハッシュテーブル２２０又はオーバーフローメモリ領域２８０の中のいずれか１つにあるため、ＰＬＩＤはハッシュテーブル２２０又はオーバーフローメモリ領域２８０内に位置する。
【００４５】
ハッシュテーブル２２０は行（ｒｏｗ）−列（ｃｏｌｕｍｎ）構造のテーブルとして看做される。この場合、ＰＬＩＤは、領域ビット（ｒｅｇｉｏｎ  ｂｉｔ）、行ビット、及び列ビットで構成される（例えば、図４及びそれらに対する説明参照）。第１ハッシュ関数はデータを格納するために使用可能な物理的ラインを見つけるための開始点である行ビットを生成する。他のビットは使用可能な物理的ラインが見つかった時に決定される。
【００４６】
上述した段階でハッシュテーブル２２０内の使用可能な物理的ラインを発見しない場合、データはオーバーフローメモリ領域２８０に書き込まれる。この場合、ＰＬＩＤはオーバーフローメモリ領域エントリ（ｅｎｔｒｙ）の物理的位置である。
【００４７】
第２ハッシュ関数を使用して計算されるデータの第２ハッシュ値（例えば、署名）は署名テーブルに格納される。第２ハッシュ関数は第１ハッシュ関数よりも小さい。第１及び第２ハッシュ関数は、任意の適切なハッシュ関数であり、異なるハッシュ関数である。
【００４８】
署名は２つデータラインの間の高速比較のために使用される。新しいデータラインがハッシュテーブル２２０に書き込まれる場合、ハッシュテーブルに同一のデータラインが既に在るか否かを知るための検査が行われる。この検査を遂行することで同一のデータを複数回格納することが防止される。
【００４９】
検査が署名を使用せずに行われる場合、メモリの特定領域内の全てのデータ（全体バケット（ｂｕｃｋｅｔ）又は全体仮想バケット）が重複を感知するために読み出される。検査が署名を使用して行われる場合、特定領域に対するデータの署名のみがメモリから読み出されて帯域幅を節約する。
【００５０】
一致する署名が無い場合、新しいデータラインに一致するデータラインはない。そうでなく、一致する署名が発見された場合、署名比較が間違った肯定であるため、一致する署名を有するデータラインが追加比較を遂行するためにメモリから読み出される。
【００５１】
ハッシュテーブルの各データラインは署名テーブル内に該当署名を有し、そして各データラインは参照カウンターテーブル内に該当参照カウンターを有する。
【００５２】
参照カウンターテーブルはハッシュテーブル２２０の物理的ラインの各々に対する重複除去回数（例えば、データが複製された回数）を追跡する。重複除去されたデータのインスタンス（ｉｎｓｔａｎｃｅ）がハッシュテーブルに追加されると、前に格納されたユーザーデータと同一である新しいユーザーデータを追加するのではなく、参照カウンターテーブルの該当参照カウンターは増加し、そしてハッシュテーブルから重複除去されたデータのインスタンスが削除されると、参照カウンターテーブルの該当参照カウンターは１つ減少する。
【００５３】
また、（ハッシュテーブルとして公知された）重複除去されたメモリは固定されたビット幅を有するユーザーデータＣである物理的ライン（ｐｈｙｓｉｃａｌ  ｌｉｎｅｓ：ＰＬｓ）で構成される。基本（ｄｅｆａｕｌｔ）物理的ラインの長さは６４バイトであるが、本発明はこれに制限されない。ＰＬ長さは他のサイズに構成され、例えばＰＬサイズは６４バイトよりも大きいか又は小さい。例えば、ＰＬサイズは３２バイトである。
【００５４】
大きいＰＬサイズは、変換テーブルのサイズを減少させるが、また重複するデータの量を減少させる（即ち、更に大きいビットパターンに一致する必要があるため、重複除去の回数が減少する）。小さいＰＬサイズは、変換テーブルのサイズを増加させるが、また重複するデータの量を増加させる（即ち、重複除去の回数が増加する）。
【００５５】
変換テーブルは物理的ラインＩＤ（ＰＬＩＤ）と称される論理的アドレスから物理的アドレスへの変換を格納する。ＰＬＩＤはハッシュ関数ｈ１（Ｃ）によって生成される。また、各物理的ラインに対して、署名テーブルに格納された物理的ラインに関連する署名がある。署名はユーザーデータのはるかに小さいハッシュ結果であり、ハッシュ関数ｈ２（Ｃ）によって生成される。参照カウンターは、また物理的ラインに関連し、参照カウンターテーブルに格納される。参照カウンターは（重複除去比率として公知された）ユーザーデータがＰＬコンテンツと一致する回数をカウントする。
【００５６】
ハッシュテーブル、署名テーブル、及び参照カウンターテーブルは全て同一のデータ構造を有するが、異なる細分性（ｇｒａｎｕｌａｒｉｔｙ）を有する。
【００５７】
複数のテーブルは重複除去モジュールの一部として図示したが、本発明はこれに制限されない。本発明の一実施形態によると、複数のテーブルは重複除去モジュール内にあるメモリ（例えば、ＲＡＭ）に格納され、他の実施形態によると、複数のテーブルは重複除去モジュールの外部にあるメモリ（例えば、ＲＡＭ）に格納され、本明細書で説明する方式で重複除去モジュールによって制御される。
【００５８】
本発明の上述した特徴の追加的な説明は、米国特許出願（Ｎｏ．１５／４７３、３１１）で開示され、その全体内容は本明細書で参照文献として引用される。
【００５９】
図４は、本発明の一実施形態によるレベル−１変換テーブルを含む重複除去エンジンの論理的観点のブロック図である。変換テーブルは、そのサイズ及びそれを使用するのに掛かる時間によって、重複除去比率、システム容量、及び／又はシステム待機時間に影響を及ぼす主要メタデータ（ｍｅｔａｄａｔａ）テーブルである。図４を参照すると、論理的アドレス３１０はシステムメモリ（例えば、ＤＲＡＭ）に格納されたデータの位置としてコンピュータシステムによって使用される。
【００６０】
論理的アドレス３１０はｘビット長さであり、ここでｘは整数である。論理的アドレス３１０はｇビット長さである細分性（ｇｒａｎｕｌａｒｉｔｙ）３１４を含み、ここでｇは整数である。細分性３１４は論理的アドレス３１０の０からｇ−１までのビットに位置する。論理的アドレス３１０は変換テーブル索引（ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ  ｉｎｄｅｘ）３１２を更に含む。変換テーブル索引３１２は、ｘ−ｇビット長さであり、論理的アドレス３１０のｇからｘ−１までのビットに位置する。一実施形態において、物理的ラインが３２バイト長さである場合、ｇは５（２５＝３２）であり、物理的ラインが６４バイト長さである場合、ｇは６（２６＝６４）である。一実施形態において、１ＴＢ（ｔｅｒａｂｙｔｅ）の仮想容量が支援される場合、ｘは４０（２４０は１ＴＢ）である。
【００６１】
変換テーブル索引３１２は変換テーブル２４０内の物理的アドレス３２０に対応する。物理的アドレス３２０は領域ビット（ＲＧＮ）３２２、行索引（Ｒ＿ＩＮＤＸ）３２６、及び列索引（ＣＯＬ＿ＩＮＤＸ）３２８を含む。領域ビット（ＲＧＮ）３２２は１ビットであり、データがハッシュテーブル２２０に格納されたか又はオーバーフローメモリ領域２８０に格納されたかを示す。行索引（Ｒ＿ＩＮＤＸ）３２６はハッシュテーブル２２０内のＭ行（０からＭ−１又は０から２ｍ−１）に対応するｍビットである。列索引（ＣＯＬ＿ＩＮＤＸ）３２８はハッシュテーブル２２０内のＮ列（０からＮ−１又は０から２ｎ−１）に対応するｎビットである。Ｍ、Ｎ、ｍ、ｎは整数である。一実施形態によると、ハッシュテーブルが１２８ＧＢ（２３７）である場合、ｇ＝６、ｍ＝２６、ｎ＝５、Ｍ＝２２６、そしてＮ＝２５である。
【００６２】
また、オーバーフローメモリ領域２８０はハッシュテーブルに配置されないデータを格納する。
【００６３】
図５は、本発明の一実施形態によるレベル−２変換テーブルを含む重複除去エンジンの論理的観点のブロック図である。変換テーブルは、重複除去比率、システム容量、及びシステム待機時間に影響を及ぼす主要メタデータテーブルである。図５の重複除去エンジンで、変換テーブルは、レベル−２、ページ索引テーブル２４２、及びレベル２（Ｌ２）マップテーブル２４４を含む。
【００６４】
論理的アドレス３１０’はメモリ（例えば、ＲＡＭ）に格納されたデータの位置としてコンピュータシステムによって使用される。論理的アドレス３１０’の長さはｘビット長さであり、ここでｘは整数である。論理的アドレス３１０’はｇビット長さである細分性３１４’を含み、ここでｇは整数である。細分性３１４’は論理的アドレス３１０’の０からｇ−１までのビットに位置する。論理的アドレス３１０’はページエントリ３１８及びページ索引３１６を更に含む。ページエントリ３１８は１２−ｇビット長さであり論理的アドレス３１０’のｇから１１までのビットに位置する。ページ索引３１６はｘ−１２ビット長さであり、論理的アドレス３１０’の１２からｘ−１までのビットに位置する。一実施形態において、物理的ラインが３２バイト長さである場合、ｇは５（２５＝３２）であり、物理的ラインが６４バイト長さである場合、ｇは６（２６＝６４）である。一実施形態において、１ＴＢの仮想容量が支援される場合、ｘは４０（２４０は１ＴＢ）である。
【００６５】
ページ索引３１６はページ索引テーブル２４２内のページに対応する。ページ索引テーブル２４２内のページはＬ２マップテーブル２４４内のエントリ０の位置に対応する。ページエントリ３１８はエントリ０の後のどのエントリが論理的アドレス３１０’に対応する格納されたデータの物理的アドレス３２０’を格納するかを示す。
【００６６】
即ち、ページ索引３１６はＬ２マップエントリのセット及びそのセットのエントリに指定されたページエントリ３１８に関連する。ページ索引３１６はセット内の第１エントリに続き、そしてページエントリ３１８はエントリのそのセットのどの特定のエントリが物理的アドレス３２０’を含むかを示す。ページ索引テーブル２４２内の各ページは領域ビット（ＲＧＮ）を含む。領域ビット（ＲＧＮ）３２２’は１ビットであり、データがハッシュテーブル２２０’に格納されたか又はオーバーフローメモリ領域２８０’に格納されたかを示す。
【００６７】
物理的アドレス３２０’は行索引（Ｒ＿ＩＮＤＸ）３２６’及び列索引（ＣＯＬ＿ＩＮＤＸ）３２８’を含む。行索引（Ｒ＿ＩＮＤＸ）３２６’はハッシュテーブル２２０’内のＭ行（０からＭ−１又は０から２ｍ−１）に対応するｍビットである。列索引（ＣＯＬ＿ＩＮＤＸ）３２８’はハッシュテーブル２２０’内のＮ列（０からＮ−１又は０から２ｎ−１）に対応するｎビットである。Ｍ、Ｎ、ｍ、ｎは整数である。一実施形態によると、ハッシュテーブルが１２８ＧＢ（２３７）である場合、ｇ＝６、ｍ＝２６、ｎ＝５、Ｍ＝２２６、そしてＮ＝２５である。
【００６８】
また、オーバーフローメモリ領域２８０はハッシュテーブルに配置されないデータを格納する。
【００６９】
図６は、本発明の一実施形態による、動的Ｌ２マップテーブル及びオーバーフローメモリ領域を有するレベル−２変換テーブルを含む重複除去エンジンの論理的観点のブロック図である。図６を参照すると、レベル−２変換テーブルはオーバーフローメモリ領域に対する追加空間を生成する。
【００７０】
一実施形態によると、署名及び参照カウンターテーブル２６０’並びにページ索引テーブル２４２’のサイズは固定されるが、Ｌ２マップテーブル２４４’及びオーバーフローメモリ領域２８０”のサイズは動的である。
【００７１】
Ｌ２マップテーブル２４４’及びオーバーフローメモリ領域２８０”のサイズが増加することによって、これらは互いに向かって大きくなる。このような方式で、格納空間はＬ２マップテーブル２４４’又はオーバーフローメモリ領域２８０”の中のいずれか１つが使用されない空間に向かって大きくなるようにして効率的に使用される。
【００７２】
図７は、本発明の一実施形態によるハッシュシリンダ（ｈａｓｈ  ｃｙｌｉｎｄｅｒ）の論理的観点のブロック図である。図８は、本発明の一実施形態による複合型データ構造の論理的観点のブロック図である。図７及び図８を参照すると、署名テーブル、参照カウンターテーブル、及びハッシュテーブルは、複合型データ構造６００（例えば、複合型構造６００又は複合型テーブル６００）のハッシュシリンダ５００（例えば、ハッシュシリンダ５００−ｉ）内のバケット（ｂｕｃｋｅｔｓ）（例えば、ハッシュバケット（ｉ））内に分配され、整列される。各ハッシュシリンダ５００は、ハッシュテーブルのハッシュバケット５６０（例えば、ハッシュバケット５６０−ｉ）、署名テーブルの署名バケット５２０（例えば、署名バケット５２０−ｉ）、及び参照カウンターテーブルの参照カウンターバケット５４０（例えば、参照カウンターバケット（ｉ））を含む。
【００７３】
ハッシュバケット５６０は複数のエントリ（例えば、エントリ（０）〜エントリ（Ｎ−１））又は物理的ラインを含む。
【００７４】
署名バケット５２０は同一ハッシュシリンダ５００のハッシュバケット５６０内の物理的ラインに格納されたデータに対応する複数の署名を含む。
【００７５】
参照カウンターバケット５４０は同一ハッシュシリンダ５００のハッシュバケット５６０内の物理的ラインに格納されたデータが重複除去された回数に対応する複数の参照カウンターを含む。
【００７６】
即ち、ハッシュテーブルは複数のハッシュバケット５６０に分割され、各ハッシュバケット５６０は複数のエントリを含む。署名テーブルは複数の署名バケット５２０に分割され、各署名バケット５２０は複数の署名を含む。参照カウンターテーブルは複数の参照カウンターバケット５４０に分割され、各参照カウンターバケット５４０は複数の参照カウンターを含む。
【００７７】
複合型データ構造６００は、１つのハッシュバケット５６０、１つの署名バケット５２０、及び１つの参照カウンターバケット５４０が共にハッシュシリンダ５００に配置されるように構成される。本発明の一実施形態によると、バケットは、第１署名バケット５２０−０、第１参照カウンターバケット５４０−０、第１ハッシュバケット５６０−０、第２署名バケット５２０−１、第２参照カウンターバケット５４０−１、第２ハッシュバケット５６０−１等の順に配置される。
【００７８】
この配列で、第１署名バケット５２０−０は第１ハッシュバケット５６０−０に格納されたデータに関連する署名を含み、第１参照カウンターバケット５４０−０は第１ハッシュバケット５６０−０に格納されたデータに関連する参照カウンターを含む。また、第２署名バケット５２０−１は第２ハッシュバケット５６０−１に格納されたデータに関連する署名を含み、第２参照カウンターバケット５４０−１は第２ハッシュバケット５６０−１に格納されたデータに関連する参照カウンターを含む。また、第１シリンダ５００−０は、第１署名バケット５２０−０、第１参照カウンターバケット５４０−０、及び第１ハッシュバケット５６０−０を含み、第２シリンダ５００−１は、第２署名バケット５２０−１、第２参照カウンターバケット５４０−１、及び第２ハッシュバケット５６０−１を含む。
【００７９】
この方式で、各ハッシュシリンダ５００はデータ及び同一ハッシュバケット５００内に格納されたデータに関連する署名及び参照カウンターを含む。
【００８０】
複合型データ構造６００のハッシュシリンダ５００−ｉ内に格納されたデータに対する要請が行われると、全体ハッシュシリンダ５００−ｉは読出しキャッシュ１７０’にコピーされる。全体ハッシュシリンダ５００−ｉが読出しキャッシュ１７０’にコピーされるため、要請されたデータ、該当署名（又はそれぞれの署名）、及び該当参照カウンター（又はそれぞれの参照カウンター）の全てを回収するのに必要とする時間は減少する。
【００８１】
一実施形態によると、読出しデータキャッシュはハッシュシリンダと同一サイズである。
【００８２】
また、重複除去エンジンが（重複を防止するために）データが既にハッシュテーブル内に存在すると判断すると、全体ハッシュシリンダ５００は読出しキャッシュ１７０’にコピーされる。重複除去エンジンは、重複除去が可能であるか否かを決定してデータを格納する時に署名、参照カウンター、及びデータにアクセスするため、読出しキャッシュが全体ハッシュシリンダをコピーすることは、アクセス時間を減少させ、全体の計算速度を増加させる。
【００８３】
即ち、待機時間及び性能を向上させるために、ハッシュエントリ、署名、及び参照カウンターエントリの統合単位であるハッシュシリンダ５００が生成される。統合されたハッシュシリンダ５００はシステムメモリアクセス周期を減らしてシステム待機時間を向上させる。簡潔な（ｃｏｍｐａｃｔｅｄ）データ構造はメモリアクセス回数を減少させる。各ハッシュシリンダ５００は重複除去エンジンが計算を遂行するのに必要とする全ての情報を含む。複合型データ構造６００は、またキャッシング（ｃａｃｈｉｎｇ）を容易にする。
【００８４】
図９は、本発明の一実施形態による仮想バケットに関連するハッシュバケット及び該当参照カウンターバケットの論理的観点のブロック図である。図９を参照すると、各ハッシュバケット５６０’は１つ以上の仮想バケット（ＶＢｓ、例えば、ＶＢ（０）〜ＶＢ（Ｖ−１））に関連する。各ハッシュバケット５６０’はＮウェイ（ｗａｙｓ、例えば、ＷＡＹ（０）〜ＷＡＹ（Ｎ−１））を含む。
【００８５】
関連分野のハッシュテーブルと異なり、本実施形態のハッシュテーブルは各々複数の仮想ハッシュバケット又は仮想バケットを含み、仮想バケットは複数の物理的ハッシュバケット又は物理的バケットから作成される。以下、“物理的バケット”という用語は前に説明したハッシュバケットを示し、前に説明したハッシュバケットと仮想バケットとを区別するために使用される。
【００８６】
各仮想バケットはハッシュテーブルの物理的バケットの一部を含む。しかし、仮想バケットの他のものは１つ以上の物理的バケットを共有できることに留意しなければならない。以下で説明するように、本発明の実施形態による仮想バケットを利用して、余剰次元（ｅｘｔｒａ  ｄｉｍｅｎｓｉｏｎ）がハッシュテーブルに加えられる。従って、データを配列して配置するのにより大きい柔軟性が提供され、このようにすることによって重複除去ＤＲＡＭシステムの効率が増加して圧縮比率が増加する。
【００８７】
本実施形態は、他の仮想バケットによって共有される他の物理的バケットを確保するために、ハッシュバケットの中の１つに格納されたデータのブロックが対応する仮想バケット内又は他の物理的バケットに移動されるようにして、他のレベルのデータ配置の柔軟性を増加させるために仮想バケットを使用する。ハッシュテーブル内の空間を確保することにより、重複除去は役に立たない／重複されたデータを除去することによって達成される。即ち、本発明の実施形態による仮想バケットを使用することにより、ハッシュ関数を使用してデータのラインを制限された該当位置にハッシング（ｈａｓｈｉｎｇ）することによって起因する厳格な制限はなく、データは近隣の／“近接する”物理的バケットに配置することができ、この物理的バケットは初期に意図された（しかし、占有された）物理的ハッシュバケットを含む同一な仮想バケット内にある物理的バケットを示す。
【００８８】
一例として、コンテンツ（例えば、データライン）は物理的バケットの中の１つに配置される。データラインが第１物理的バケットに配置される場合、データラインが物理的バケット内に配置されることを要求する代わりに、本実施形態は、単一物理的バケットよりも大きく、単一物理的バケットのみならず他の物理的バケットも含む仮想バケットも許容される。即ち、仮想バケットはハッシュテーブル内で整列された接触するか又は隣接する物理的バケットの総合を含む。
【００８９】
従って、仮想バケットは将来の書込み動作のための空間を確保するためにハッシュテーブル内でデータブロックが動くことを許容する。
【００９０】
仮想バケットに対する追加説明については、２０１６年５月２３日付で出願した米国特許出願（Ｎｏ．１５／１６２、５１２）及び２０１６年５月２３日付で出願した米国特許出願（Ｎｏ．１５／１６２、５１７）に開示されており、その全体内容は本明細書で参照文献として引用される。
【００９１】
また、仮想バケットは動的高さ又はサイズを有する。動的仮想バケット高さ（ｖｉｒｔｕａｌ  ｂｕｃｋｅｔ  ｈｅｉｇｈｔ：ＶＢＨ）を有することは制限された待機時間の影響でメモリの利用を向上させる。
【００９２】
物理的バケットに関連する仮想バケットの数は仮想バケット（ｖｉｒｔｕａｌ  ｂｕｃｋｅｔ：ＶＢ）の高さ索引によって示される。仮想バケットの高さ情報はハッシュバケット５６０’に関連する参照カウンターバケット５４０’の最後の参照カウンターに格納される。参照カウンターのビットの一部分はＶＢ高さ索引として使用される（例えば、ＶＢＨ［１：０］）。
【００９３】
ハッシュバケット（ｉ）を一例として使用し、ＶＢ高さがＶである場合、ハッシュバケット（ｉ）の仮想バケットはハッシュバケット（ｉ＋１）からハッシュバケット（ｉ＋Ｖ）を示す。ハッシュバケット（ｉ）がフルに満たされると、重複除去エンジンは仮想バケットにユーザーデータを入れる。
【００９４】
フラッグ（ｆｌａｇ、１つの参照カウンタ（ＲＣ）ビットの一部分、例えばハッシュバケットＭの最後のＲＣカウンター）はどのぐらい多い仮想バケットが現在のハッシュバケット（ｉ）によって使用されているかを示す。この方式で、必要とすることよりも更に多い仮想バケットを検索する必要がないので、待機時間は減少する。関連分野の仮想バケットは固定されたＶＢ高さを使用する。固定された仮想バケット高さを使用することで、検索ロジックは、ハッシュバケット（ｉ）によって実際に使用される仮想バケットの数に関係なく、全ての仮想バケットを検索し、これは増加された待機時間を惹起する。
【００９５】
仮想バケットは追加メモリ空間を要求しない。これらはハッシュバケットの付近で使用されないエントリを使用する。例えば、ハッシュバケット（ｉ＋１）に対して、その仮想バケットはハッシュバケット（ｉ＋２）からハッシュバケット（ｉ＋Ｖ’＋１）を示す。
【００９６】
また、ハッシュバケット（ｉ）の仮想バケット（例えば、ハッシュバケット（ｉ＋１）からハッシュバケット（ｉ＋Ｖ））がフルに満たされると、本発明の実施形態による重複除去エンジンはハッシュバケット付近で利用可能な空間を使用するために仮想バケットの高さ（Ｖ）を増加させる。関連分野の仮想バケットの高さは（動的であることよりは）予め決定されたため、増加されない。このように、ハッシュバケット（ｉ）の仮想バケット（例えば、ハッシュバケット（ｉ＋１）からハッシュバケット（ｉ＋Ｖ）までのハッシュバケット）がフルに満たされると、関連分野の重複除去エンジンは高さ（Ｖ）を増加させることができない。
【００９７】
また、仮想バケットの高さを動的に調整することによって、重複除去エンジンが（重複を防止するために）データが既にハッシュテーブル内にあるかを確認する場合、重複除去エンジンは予め設定された数の仮想バケットの代わりに使用中である仮想バケットのみを確認すればよい。これはアクセス時間を減少させ、全体の演算速度を増加させる。
【００９８】
図１０は、本発明の一実施形態によるＲＡＭに格納されたデータを回収する方法を示すフローチャートである。図１０はＲＡＭを使用して示したが、本発明はこれに制限されず、任意の他の適切なメモリタイプが本方法と共に使用される。
【００９９】
図１０を参照すると、コンピュータシステムのＣＰＵはＲＡＭに格納されたデータを要請する。ＣＰＵはＲＡＭ内データの位置に対するアドレスを提供する。本発明はこれに制限されず、例えば他の構成要素がＲＡＭからデータを要請し、論理的アドレスを提供する。
【０１００】
本発明の実施形態によるＲＡＭ内に格納されたデータを回収する方法はＲＡＭに格納されたデータの論理的アドレスを識別する段階を含む（１０００段階）。論理的アドレスは変換テーブルの位置に対応する。
【０１０１】
方法は変換テーブル内の論理的アドレスを検索して論理的アドレスに従うデータのＰＬＩＤ（物理的ラインＩＤ）を識別する段階を更に含む（１０１０段階）。
【０１０２】
方法はＰＬＩＤに基づいて、データがＲＡＭのハッシュテーブルに格納されたか又はＲＡＭのオーバーフローメモリ領域に格納されたかを決定する段階を更に含む（１０２０段階）。
【０１０３】
データがハッシュテーブルに格納された場合、方法はＰＬＩＤに対応するハッシュテーブルの物理的ラインの位置を特定する段階（１０３０段階）及びハッシュテーブルの物理的ラインからデータを回収する段階（１０４０段階）を更に含む。データを回収する段階は署名テーブル及び参照カウンターテーブルから該当データを回収する段階を含む。
【０１０４】
データがオーバーフローメモリに格納された場合、方法はＰＬＩＤに対応するオーバーフローメモリ領域の物理的ラインの位置を特定する段階（１０５０段階）及びオーバーフローメモリ領域の物理的ラインからデータを回収する段階（１０６０段階）を更に含む。
【０１０５】
ＰＬＩＤはデータに適用された第１ハッシュ関数を使用して生成される。ＰＬＩＤはＲＡＭのハッシュテーブルの又はＲＡＭのオーバーフローメモリ領域の位置を示すアドレスを含む。
【０１０６】
ＰＬＩＤは、データがハッシュテーブルに格納されたか又はオーバーフローメモリ領域に格納されたかを示す第１識別子（ｉｄｅｎｔｉｆｉｅｒ、例えば、図４のＲＧＮ参照）と、データが格納された行を示す第２識別子（例えば、図４のＲ＿ＩＮＤＸ参照）と、データが格納された列を示す第３識別子（例えば、図４のＣＯＬ＿ＩＮＤＸ参照）と、を含む。
【０１０７】
方法は署名テーブルからデータに関連する署名を回収する段階を更に含む。
【０１０８】
ＲＡＭは、複数のデータを格納するハッシュテーブルと、第１ハッシュ関数を利用して生成された複数のＰＬＩＤを格納する変換テーブルと、第１ハッシュ関数よりも小さい第２ハッシュ関数を使用して生成された複数の署名を格納する署名テーブルと、各参照カウンターがハッシュテーブルに格納された該当データに対する重複除去回数を追跡する複数の参照カウンターを含む参照カウンターテーブルと、オーバーフローメモリ領域と、を含む。
【０１０９】
ハッシュテーブル、署名テーブル、及び参照カウンターテーブルは複合型データ構造に統合される。複合型データ構造は、各ハッシュシリンダが複数の物理的ラインを含む複数のハッシュシリンダを含むハッシュバケットと、複数の物理的ラインに対応するそれぞれの署名を含む署名バケットと、複数の物理的ラインに対応するそれぞれの参照カウンターを含む参照カウンターバケットと、を含む。
【０１１０】
物理的ライン又はオーバーフローメモリ領域からデータを回収する段階は、物理的ライン、該当署名、及び該当参照カウンターを含む全体ハッシュシリンダを読出しキャッシュにコピーする段階を含む。
【０１１１】
図１１は、本発明の一実施形態によるＲＡＭにデータを格納する方法を示すフローチャートである。図１１はＲＡＭを使用して示したが、本発明はこれに制限されず、任意の他の適切なメモリタイプが本方法と共に使用される。
【０１１２】
図１１を参照すると、コンピュータシステムのＣＰＵはＲＡＭにデータが格納されるように要請する。ＣＰＵはＲＡＭ内に格納されるデータを提供する。本発明はこれに制限されず、例えば他の構成要素がＲＡＭにデータが格納されるように要請し、データを提供する。
【０１１３】
本発明の実施形態によるＲＡＭ内にデータを格納する方法はＲＡＭに格納されるデータを識別する段階を含む（１１００段階）。
【０１１４】
方法は第１ハッシュ関数を利用してデータがＲＡＭのハッシュテーブルに格納されなければならない位置に対応する第１ハッシュ値を決定する段階を更に含む（１１１０段階）。
【０１１５】
方法は第１ハッシュ値に対応するハッシュテーブルの位置にデータを格納する段階を更に含む（１１２０段階）。
【０１１６】
方法は第２ハッシュ関数を利用してデータが格納されなければならない位置にもまた対応する第２ハッシュ値を決定する段階を更に含む（１１３０段階）。第２ハッシュ関数は第１ハッシュ関数よりも小さい。
【０１１７】
方法は第１ハッシュ値を変換テーブルに格納する段階を更に含む（１１４０段階）。
【０１１８】
方法は第２ハッシュ値を署名テーブルに格納する段階を更に含む（１１５０段階）。
【０１１９】
方法は参照カウンターテーブル内でデータに対応する参照カウンターを増加させる段階を更に含む。
【０１２０】
ＲＡＭは、複数のデータを格納するハッシュテーブルと、第１ハッシュ関数を使用して生成される複数のＰＬＩＤを格納する変換テーブルと、第２ハッシュ関数を使用して生成される複数の署名を格納する署名テーブルと、各参照カウンターがハッシュテーブルに格納された該当データに対する重複除去回数を追跡する複数の参照カウンターを格納する参照カウンターテーブルと、オーバーフローメモリ領域と、を含む。
【０１２１】
ＰＬＩＤの各々は、データがハッシュテーブルに格納されたか又はオーバーフローメモリ領域に格納されたかを示す第１識別子（例えば、図４のＲＧＮ参照）と、データが格納された行を示す第２識別子（例えば、図４のＲ＿ＩＮＤＸ参照）と、データが格納された列を示す第３識別子（例えば、図４のＣＯＬ＿ＩＮＤＸ参照）と、を含む。
【０１２２】
ハッシュテーブル、署名テーブル、及び参照カウンターテーブルは複合型データ構造に統合される。複合型データ構造は複数のハッシュシリンダを含む。各ハッシュシリンダは、複数の物理的ラインを含むハッシュバケットと、複数の物理的ラインに対応するそれぞれの署名を含む署名バケットと、複数の物理的ラインに対応するそれぞれの参照カウンターを含む参照カウンターバケットと、を含む。
【０１２３】
第１ハッシュ値に対応するハッシュテーブルの位置にデータを格納する段階は、第１ハッシュ値に対応するハッシュバケットにデータを格納する段階を含む。署名テーブルに第２ハッシュ値を格納する段階は、データが格納されるハッシュバケットに対応する署名バケットに第２ハッシュ値を格納する段階を含む。
【０１２４】
従って、本明細書の実施形態は、物理的メモリサイズよりも大きいメモリ（例えば、ＲＡＭ（ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ））内のメモリ容量を可能にする方法及び関連構造を示す。本発明の実施形態によると、重複除去はデータメモリ減少及びコンテキストアドレス指定を達成するために使用される。本発明の実施形態によると、ユーザーデータはユーザーデータのハッシュ値によって索引付けされたハッシュテーブルに格納される。
【０１２５】
ここで、第１、第２、第３等の用語を多様な要素、成分、領域、層、及び／又はセクションを説明するために使用したが、このような要素、成分、領域、層、及び／又はセクションはこのような用語によって制限されないことを理解すべきである。このような用語は他の要素、成分、領域、層、又はセクションから１つの要素、構成、領域、層又はセクションを区別するために使用される。従って、第１構成要素、成分、領域、層又はセクションは本発明の思想及び範囲を逸脱せずに、第２構成要素、成分、領域、層又はセクションを指称する。
【０１２６】
本明細書に記述した本発明の実施形態によると、関連装置又は構成要素（或いは複数の関連装置又は構成要素、例えば重複除去エンジン）は、任意の適切なハードウェア（例えば、ＡＳＩＣ）、ファームウェア（例えば、ＤＳＰ又はＦＰＧＡ）、ソフトウェア、又はソフトウェア、ファームウェア、及びハードウェアの適切な組合せを利用して具現される。例えば、このような装置の多様な要素は１つの集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＩＣ）チップ又は個別のＩＣチップで形成される。また、関連装置の多様な構成要素は、ＦＰＣＦ（ｆｌｅｘｉｂｌｅ  ｐｒｉｎｔｅｄ  ｃｉｒｃｕｉｔ  ｆｉｌｍ）、ＴＣＰ（ｔａｐｅ  ｃａｒｒｉｅｒ  ｐａｃｋａｇｅ）、ＰＣＢ（ｐｒｉｎｔｅｄ  ｃｉｒｃｕｉｔ  ｂｏａｒｄ）上に具現されるか、或いは１つ以上の回路及び／又は他の装置と同一な基板上に形成される。また、関連装置の多様な構成要素は、１つ以上のプロセッサ上で実行され、１つ以上のコンピューティング装置でコンピュータプログラム命令を実行し、ここで説明した多様な機能を遂行するために他のシステム構成要素と相互作用するプロセス又はスレッド（ｔｈｒｅａｄ）である。コンピュータプログラム命令は、例えばＲＡＭのような標準メモリ装置を使用してコンピューティング装置に具現されるメモリに格納される。また、コンピュータプログラム命令は、例えばＣＤ−ＲＯＭ、フラッシュドライブ等のような一時的ではない他のコンピュータ読み取り可能な記録媒体に格納される。また、当業者は、多様なコンピューティング装置の機能が１つのコンピューティング装置に結合されるか又は統合され、本発明の例示的な実施形態の思想及び範囲から逸脱せずに、特定コンピューティング装置の機能が１つ以上の他のコンピューティング装置に亘って分配されることを理解する。
【０１２７】
また、１つの要素、構成要素、領域、層、及び／又はセクションが２つの要素、構成要素、領域、層、及び／又はセクションの“間”にあると言及する場合、それは単なる２つの要素、構成要素、領域、層、及び／又はセクションの間の要素、構成要素、領域、層、及び／又はセクションであるか、或いは１つ以上の中間要素、構成要素、領域、層、及び／又はセクションが存在する。
【０１２８】
本明細書で使用した用語は、実施形態を説明するためのものであり、本発明を制限しようとするものではない。本明細書で使用した単数形態は、文脈に異なって明示しない限り、複数形態を含むものと意図する。“含む”、“含んでいる”の用語は、本明細書で使用した場合、明示した特徴、整数、段階、動作、要素、及び／又は構成要素を明示しないが、１つ以上の他の特徴、整数、段階、動作、要素及び／又は構成要素の存在又は追加を排除しないと更に理解されるべきである。
【０１２９】
本明細書で使用したように“及び／又は”という用語は１つ以上の関連して列挙した項目の任意及び全ての組合せを含む。“少なくとも１つ”、“１つ”、及び“から選択”のような表現は、要素目録を先行する場合、要素全体目録を修正し、目録の個別要素を修正しない。また、本発明の実施形態を記述した際に“することができる”の使用は“本発明の１つ以上の実施形態”を意味する。また、“例示的な”用語は例示又は説明を示すために意図される。
【０１３０】
本明細書で使用したように、“使用”、“使用する”、及び“使用された”は各々“利用”、“利用する”及び“利用された”と同意語として看做される。
【０１３１】
本発明の１つ以上の実施形態に関連して説明した特徴は本発明の他の実施形態の特徴と共に使用される。例えば、第１実施形態で説明した特徴は第３実施形態が本明細書で具体的に説明しなくても、第３実施形態を形成するために第２実施形態で説明した特徴と結合される。
【０１３２】
また、当業者は、プロセスがハードウェア、ファームウェア（例えば、ＡＳＩＣを通じて）、又はソフトウェア、ファームウェア、及び／又はハードウェアの任意の組合せを通じて実行することができることを認識する。また、プロセスの段階の順序は固定されているが、当業者によって認識される任意の所望の順序に変更される。変更された順序は全ての段階又は一部の段階を含む。
【０１３３】
本発明を特定の実施形態に関連して説明したが、当業者は説明した実施形態の変形を考案するのに困難がなく、これは本発明の範囲及び思想から逸脱しない。また、本明細書に記載した本発明自体は多様な技術分野の当業者に他のアプリケーションに対する他の課題及び適応に対する解決策を提案する。本発明の思想及び範囲から逸脱せずに、開示の目的で選択された本発明の実施形態を具現可能な本発明の全てのそのような使用及びそれらの変化及び修正を請求範囲に含むことが出願人の意図である。従って、本発明の実施形態は全ての側面で例示的なものであって、制限的ではないと看做され、本発明の範囲は請求の範囲及びその均等物によって示される
【符号の説明】
【０１３４】
１００    重複除去モジュール
１３０    ブリッジ
１４０    メモリコントローラ
１４２    メモリコントローラ０
１４４    メモリコントローラ１
１６０、１６２    ホストインターフェイス
１７０、１７０’    読出しキャッシュ
１８０    メモリモジュール（ＤＩＭＭ／フラッシュ）
１８２    ＤＩＭＭ／フラッシュ０
１８４    ＤＩＭＭ／フラッシュ１
２００、２０２    重複除去エンジン
２１０    メモリ管理部
２２０、２２０’    ハッシュテーブル
２３０    伝送管理部
２４０    変換テーブル
２４２、２４２’    ページ索引テーブル
２４４、２４４’    Ｌ２マップテーブル
２５０    パーティション
２５０−０    パーティション０
２５０−１    パーティション１
２６０、２６０’    署名及び参照カウンターテーブル
２８０、２８０’、２８０”    オーバーフローメモリ領域
３１０、３１０’    論理的アドレス
３１２    変換テーブル索引
３１４、３１４’    細分性
３１８    ページエントリ
３２０、３２０’    物理的アドレス
３２２    領域ビット（ＲＧＮ）
３２６、３２６’    行索引（Ｒ＿ＩＮＤＸ）
３２８、３２８’    列索引（ＣＯＬ＿ＩＮＤＸ）
４００、４００’    物理的ライン（ＰＬ）
５００    ハッシュシリンダ
５２０    署名バケット
５４０、５４０’    参照カウンターバケット
５６０’    ハッシュバケット
６００    複合型データ構造
【図１】
2017208096.tif 000003
【図２】
2017208096.tif 000004
【図３】
2017208096.tif 000005
【図４】
2017208096.tif 000006
【図５】
2017208096.tif 000007
【図６】
2017208096.tif 000008
【図７】
2017208096.tif 000009
【図８】
2017208096.tif 000010
【図９】
2017208096.tif 000011
【図１０】
2017208096.tif 000012
【図１１】
2017208096.tif 000013
【外国語明細書】
2017208096000001.pdf