(57)【要約】【課題】重複除去の対象となるメモリの部分を増加させるためのシステム及び方法を提供する。【解決手段】本発明のメモリシステムは、データを格納するメモリと、メモリに格納され、所定数のバケット及び第１の数のウェイを含み、２の１乗である第１数のバイトを含むメモリの第１部分を含む大きいハッシュテーブルと、メモリに格納され、所定数のバケット及び第２の数のウェイを含み、２の２乗である第２数のバイトを含むメモリの第２部分を含む小さいハッシュテーブルと、メモリに格納され、メモリの第３部分を含むオーバーフロー領域と、論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする変換テーブルと、を備える。【選択図】図１
2018120594.tif 000002
【特許請求の範囲】
【請求項１】
データを格納するメモリと、
前記メモリに格納され、所定数のバケット及び第１の数のウェイを含み、２の１乗である第１数のバイトを含む前記メモリの第１部分を含む大きいハッシュテーブルと、
前記メモリに格納され、所定数のバケット及び第２の数のウェイを含み、２の２乗である第２数のバイトを含む前記メモリの第２部分を含む小さいハッシュテーブルと、
前記メモリに格納され、前記メモリの第３部分を含むオーバーフロー領域と、
論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする変換テーブルと、を備えることを特徴とするメモリシステム。
【請求項２】
前記領域識別子は、前記ＰＬＩＤが前記大きいハッシュテーブルのデータを識別することを示す第１ビットを含むことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記物理アドレスは、ローインデックス及びカラムインデックスを含むことを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記第１ビットは、前記ＰＬＩＤが前記大きいハッシュテーブルのデータを識別しないことを示し、
前記領域識別子は、前記ＰＬＩＤが前記小さいハッシュテーブル内にあるか又は前記オーバーフロー領域内にあるかを示す第２ビットを含むことを特徴とする請求項２に記載のメモリシステム。
【請求項５】
前記小さいハッシュテーブルは、動的に大きくなることを特徴とする請求項１に記載のメモリシステム。
【請求項６】
前記メモリシステムに対する第１の効果的な最小の重複除去比率は、前記小さいハッシュテーブル無しで前記大きいハッシュテーブルに対する第２の効果的な最小の重複除去比率よりも小さいことを特徴とする請求項１に記載のメモリシステム。
【請求項７】
前記メモリに格納され、前記大きいハッシュテーブル及び前記小さいハッシュテーブルに格納された複数のデータのシグネチャーを格納するシグネチャーテーブルをさらに含み、
前記シグネチャーテーブルは、共通シグネチャーがある多数のデータを前記大きいハッシュテーブル又は前記小さいハッシュテーブルのローに格納することを防止することを特徴とする請求項１に記載のメモリシステム。
【請求項８】
プロセッサから論理アドレスを受信する段階と、
変換テーブルを使用して、前記論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする段階と、
前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階と、
前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階と、を有することを特徴とする方法。
【請求項９】
前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されない場合、前記物理アドレスが前記大きいハッシュテーブルにあると判別する段階を含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されて前記領域識別子の第２ビットが設定されない場合、前記物理アドレスが前記小さいハッシュテーブルにあると判別する段階を含むことを特徴とする請求項８に記載の方法。
【請求項１１】
前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されて前記領域識別子の第２ビットが設定された場合、前記物理アドレスが前記オーバーフロー領域にあると判別する段階を含むことを特徴とする請求項８に記載の方法。
【請求項１２】
前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階は、
前記物理アドレスからローインデックス及びカラムインデックスを判別する段階と、
前記ローインデックス及び前記カラムインデックスを利用して前記大きいハッシュテーブル及び前記小さいハッシュテーブルの中の１つのデータにアクセスする段階と、を含むことを特徴とする請求項８に記載の方法。
【請求項１３】
前記ローインデックス及び前記カラムインデックスを利用して前記大きいハッシュテーブル及び前記小さいハッシュテーブルの中の１つのデータにアクセスする段階は、前記小さいハッシュテーブルの前記ローインデックス及び前記カラムインデックスで前記データが発見されない場合、前記小さいハッシュテーブルの近くのエントリを検索する段階を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記小さいハッシュテーブルが収容容量に近づいていることを判別する段階と、
オーバーフロー領域のサイズを減少させる一方、前記小さいハッシュテーブルのサイズを増加させる段階と、をさらに含むことを特徴とする請求項８に記載の方法。
【請求項１５】
前記小さいハッシュテーブルのサイズを増加させる段階は、前記小さいハッシュテーブルのカラムに相当するウェイの数を増加させる段階を含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
コンピュータに請求項８乃至１２のいずれか一項に記載の方法を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にメモリに関し、より詳しくは重複除去メモリを最大化するシステム及び方法に関する。
【背景技術】
【０００２】
重複除去された（又は重複除去）メモリは、データを格納するためのより効率的なメカニズムを提供する。従来のメモリソリューションでは、各々のデータオブジェクトはメモリ内の固有位置に書き込まれる。同一のデータオブジェクトはメモリ内の任意の数の位置に格納され、各々はそのデータオブジェクトの分離されたコピーである。メモリシステムは、このようなデータの繰り返し格納を識別又は防止する方法を有しない。大規模なデータオブジェクトに対して、データのこのような繰り返し格納は無駄である。任意のデータオブジェクトの１つのコピーのみを格納する重複除去メモリはこの問題を解決しようとする。
【０００３】
幾つかの重複除去メモリは、データオブジェクトを格納するためにハッシュテーブル（Ｈａｓｈ  Ｔａｂｌｅ）を使用する。しかし、ハッシュテーブルは、サイズを２倍にするメカニズムによってのみ増加される。このような大きい増加粒状度（ｇｒａｎｕｌａｒｉｔｙ）は、しばしば重複除去メモリとして使用できないメモリの大きな部分を残し、単にオーバーフロー領域として処理される。オーバーフロー領域のメモリは重複除去されないので、メモリの大きな部分が重複除去できない場合、全般的な重複除去比率は低下する。
【０００４】
そこで、重複除去の対象にされるメモリの比率を増加させるための方法が依然必要である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第９６３９２７４号明細書
【特許文献２】米国特許出願公開第２０１５／０３７０８３５号明細書
【特許文献３】米国特許出願公開第２０１７／０１６１３２９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、上記従来の問題点に鑑みてなされたものであって、本発明の目的は、重複除去の対象となるメモリの部分を増加させるためのシステム及び方法を提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するためになされた本発明の一態様によるメモリシステムは、データを格納するメモリと、前記メモリに格納され、所定数のバケット及び第１の数のウェイを含み、２の１乗である第１数のバイトを含む前記メモリの第１部分を含む大きいハッシュテーブルと、前記メモリに格納され、所定数のバケット及び第２の数のウェイを含み、２の２乗である第２数のバイトを含む前記メモリの第２部分を含む小さいハッシュテーブルと、前記メモリに格納され、前記メモリの第３部分を含むオーバーフロー領域と、論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする変換テーブルと、を備えることを特徴とする。
【０００８】
上記目的を達成するためになされた本発明の一態様によるメモリシステムの方法は、プロセッサから論理アドレスを受信する段階と、変換テーブルを使用して、前記論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする段階と、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階と、前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階と、を有することを特徴とする。
【０００９】
上記目的を達成するためになされた本発明の一態様によるコンピュータ読み取り可能な記録媒体は、コンピュータに下記方法を実行させるためのプログラムを記録し、前記方法は、プロセッサから論理アドレスを受信する段階と、変換テーブルを使用して、前記論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする段階と、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階と、前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階と、を有することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、重複除去された（又は重複除去）メモリは、データを格納するより効果的なメカニズムを提供する。また、メモリの使用を向上させて、重複除去が効果的になるために必要な重複除去比率を減少させる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態による重複除去メモリを使用するために動作するマシンを示す図である。
【図２】図１に示すマシンのさらなる詳細を示す図である。
【図３】図１のマシン内での重複除去メモリに対する従来のハッシュテーブルの使用を示す図である。
【図４】本発明の一実施形態による拡張可能なハッシュテーブルの使用を示す図である。
【図５】本発明の一実施形態による拡張可能なハッシュテーブルの使用を示す図である。
【図６】論理アドレスを多様なメモリ目的地にマッピングするために図４の変換テーブルの使用を示す図である。
【図７Ａ】本発明の一実施形態による重複除去メモリに図４の拡張可能なハッシュテーブルを使用する手順の一例を示すフローチャートである。
【図７Ｂ】本発明の一実施形態による重複除去メモリに図４の拡張可能なハッシュテーブルを使用する手順の一例を示すフローチャートである。
【図８】本発明の一実施形態によるメモリの読出し要請での論理アドレスに対するＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）を判別するための手順の一例を示すフローチャートである。
【図９Ａ】本発明の一実施形態によるメモリの書込み要請での論理アドレスに対するＰＬＩＤを判別するための手順の一例を示すフローチャートである。
【図９Ｂ】本発明の一実施形態によるメモリの書込み要請での論理アドレスに対するＰＬＩＤを判別するための手順の一例を示すフローチャートである。
【図９Ｃ】本発明の一実施形態によるメモリの書込み要請での論理アドレスに対するＰＬＩＤを判別するための手順の一例を示すフローチャートである。
【図１０】本発明の一実施形態による小さいハッシュテーブルのサイズを増加させるか否かを判別するための手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。後述する詳細な説明で、本発明の概念が完全に理解できるよう多数の具体的な事例が提示される。しかし、該当技術分野の通常の技術者はこのような具体的な事例無しに本発明を実施することができる。広く公知された方法、装置、構成要素、回路、及びネットワークは、本発明の態様を不必要に曖昧にしないために詳細に説明しない。
【００１３】
本明細書で多様な構成要素を説明するために第１、第２等の用語が使用されるが、これらの構成要素はこのような用語によって制限されない。例えば、本発明の技術的範囲から逸脱しない範囲で、第１モジュールは第２モジュールと称され、同様に第２モジュールは第１モジュールと称される。
【００１４】
本発明の説明に使用される用語は、特定の実施形態を説明する目的にのみ使用され、本発明の技術的思想を限定しない。文脈上で明確に指示しない限り、単数表現は複数表現を含む。「及び／又は」の用語は１つ又はそれより多い連関されたエントリの任意且つ可能な全ての組み合わせを含む。「含む」及び／又は「含んでいる」の用語は記載された特性、整数、段階、動作、元素、及び／又は構成要素の存在を明記し、１つ又はそれより多い他の特性、整数、段階、動作、元素、構成要素、及び／又はそれらのグループの存在又は追加を排除しない。図面に示された構成要素及び特性は実際の比率に必ずしも比例しない。
【００１５】
従来のハッシュテーブルでは、ハッシュテーブルのサイズをｍ×ｎで表し、ｍはハッシュバケット（又はロー）番号であり、ｎはウェイ（ｗａｙ）（又はカラム）番号である。例えば、ハッシュテーブルは、２ｍ＝２２６ハッシュバケット及び２ｎ＝２５ウェイを有する。
【００１６】
従来のハッシュテーブルが大きくなる時、ハッシュテーブルサイズの増加分は現在のサイズの２倍である（Ｎが指数を増加させるため、ハッシュテーブルの次元を２倍に増加させる）。ハッシュバケットの数は変わらず、ウェイの数のみが変わる。したがって、利用可能なメモリ容量及びハッシュテーブルのサイズに応じて、ハッシュテーブルのサイズを２倍に大きくすることが可能でないこともあり得る。この事実は、重複除去されないメモリの大きな部分を残し、この部分はオーバーフロー領域として使用される。
【００１７】
本明細書で、拡張可能な（ｓｃａｌａｂｌｅ）ハッシュテーブルは、従来のハッシュテーブルである大きいハッシュテーブル（Ｂｉｇ  Ｈａｓｈ  Ｔａｂｌｅ）、及び同じ数のハッシュバケットを含むが、より小さい数のウェイを有する小さいハッシュテーブル（Ｌｉｔｔｌｅ  Ｈａｓｈ  Ｔａｂｌｅ）を含む。したがって、例えば、大きいハッシュテーブルに対して２ｍ＝２２６及び２ｎ＝２５（また代わりに、ｍ＝２６及びｎ＝５）である場合、小さいハッシュテーブルのサイズは２ｍ＝２２６及び２ｎ’であり、ここで、ｎ’は１とｎ−１との間の任意の数である。拡張可能なハッシュテーブルは、重複除去メモリサイズを最大化するためにハッシュテーブルサイズをより細かい粒状度（ｇｒａｎｕｌａｒｉｔｙ）で調整して、高い重複除去比率を達成するように柔軟性（ｆｌｅｘｉｂｉｌｉｔｙ）を提供する。「大きいハッシュテーブル」及び「小さいハッシュテーブル」という名称は、単にいずれのハッシュテーブルが参照されるかを明確にするためのものである。ハッシュテーブルは何らの機能を失うことなく、ただ「第１ハッシュテーブル」及び「第２ハッシュテーブル」と容易に称される。
【００１８】
論理アドレスの物理メモリへのマッピング（ｍａｐｐｉｎｇ）（物理的ラインＩＤ、又はＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  ＩＤ）としても知られる）は、変換テーブル（Ｔｒａｎｓｌａｔｉｏｎ  Ｔａｂｌｅ）によって管理される。使用者データ（物理的ライン又はＰＬ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ）としても知られる）は、大きいハッシュテーブル、小さいハッシュテーブル、及びオーバーフロー領域の中の１つに格納される。
【００１９】
変換テーブルエントリは、使用者データが大きいハッシュテーブルの中、又は小さいハッシュテーブル若しくはオーバーフロー領域の中の１つに存在するか否かを示す領域を含む。したがって、例えば、この領域が値０を格納する場合、使用者データは大きいハッシュテーブルで発見される。そうでなければ、使用者データは小さいハッシュテーブル又はオーバーフロー領域で発見される。
【００２０】
使用者データが大きいハッシュテーブルに格納されない場合、変換テーブルエントリは小さいハッシュテーブルとオーバーフロー領域との中のいずれが使用者データを格納するかを示す下位領域も含む。したがって、例えば、下位領域が値０を格納する場合、使用者データは小さいハッシュテーブルで発見される。そうでなければ、使用者データはオーバーフロー領域で発見される。
【００２１】
図１は、本発明の一実施形態による重複除去メモリを使用するために動作するマシンを示す。図１に、マシン１０５が示されている。マシン１０５は、デスクトップコンピュータ、ラップトップコンピュータ、サーバー（スタンドアロンサーバー（ｓｔａｎｄａｌｏｎｅ  ｓｅｒｖｅｒ）又はラックサーバー（ｒａｃｋ  ｓｅｒｖｅｒ）の中の１つ）、又は本発明の実施形態から利益を得ることができる他の任意の装置を含む。但し、これらに制限されない。マシン１０５は、特殊な携帯用コンピューティング装置、タブレットコンピュータ、スマートフォン、及び他のコンピューティング装置を含む。マシン１０５は任意の所望の応用プログラムを実行する。データベースアプリケーションがよい例であるが、本発明の実施形態は任意の所望のアプリケーションに拡張される。
【００２２】
マシン１０５は、特定の形態には拘らず、プロセッサ１１０、メモリ１１５、及び格納装置１２０を備える。プロセッサ１１０は、任意の多様なプロセッサである。例えば、Ｉｎｔｅｌ（登録商標）  Ｘｅｏｎ（登録商標）、Ｃｅｌｅｒｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、又はＡｔｏｍ（登録商標）プロセッサ、ＡＭＤ（登録商標）  Ｏｐｔｅｒｏｎ（登録商標）プロセッサ、ＡＲＭ（登録商標）プロセッサ等である。図１には、１つのプロセッサを示しているが、マシン１０５は任意の数のプロセッサを含み、各々はシングルコア又はマルチコアプロセッサである。メモリ１１５は、フラッシュメモリ、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｅｒｓｉｓｔｅｎｔ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又はＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のようなＮＶＲＡＭ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの任意の多様なメモリである。メモリ１１５は、異なるメモリタイプの任意の所望の組み合わせであってもよい。メモリ１１５は、マシン１０５の一部であるメモリコントローラ１２５によって制御される。
【００２３】
格納装置１２０は、任意の多様な格納装置である。格納装置１２０は、メモリ１１５内に配置される装置ドライバー１３０によって制御される。
【００２４】
図２は、図１に示すマシン１０５のさらなる詳細を示す図である。図２を参照すると、一般的に、マシン１０５は、マシン１０５の構成要素の動作を調整するために使用されるメモリコントローラ１２５及びクロック２０５を含む１つ以上のプロセッサ１１０を備える。プロセッサ１１０は、例えば、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲＯＭ（ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、又は他の状態保持媒体を含むメモリ１１５に連結される。プロセッサ１１０は、格納装置１２０、及びイーサーネットコネクター又は無線コネクターなどのネットワークコネクター２１０と結合される。プロセッサ１１０は、他の構成要素の中で、使用者インターフェイス２２０及び入／出力エンジン２２５を使用して管理される入力／出力インターフェイスポートが接続されるバス２１５に連結される。
【００２５】
図１乃び図２で、メモリ１１５は重複除去メモリである。重複除去メモリの実装は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のようなメモリの従来の形態とは異なるが、これらの相異点は重複除去メモリの実装には関連しない。また、プロセッサ１１０のようなマシン１０５の他のハードウェア構成要素がメモリ１１５の特定の実装を認知するか否かは、これらの構成要素がメモリ１１５の物理構造を知る必要があるか否かに依存する。このメモリ１１５の特定の実装に対する「知識の不足」は、マシン１０５上で実行されるアプリケーションプログラムのような、ソフトウェア構成要素に拡張される。アプリケーションプログラムは、メモリ１１５がＤＲＡＭ、重複除去メモリ、又は任意の他の形態のメモリを含むか否かに対する知識無しに、読出し及び書込み要請をメモリ１１５に伝送する。
【００２６】
図３は、本明細書でのすべての目的に対する参照として引用される、２０１７年４月２６日に提出された米国特許出願第１５／４９８３７１明細書及び２０１７年１０月５日に公開された米国特許出願公開第２０１７／０２８６０１０明細書で説明されているように、図１のマシン１０５での重複除去メモリに対する従来のハッシュテーブルの使用を示す。図３に示すように、メモリ１１５はハッシュテーブル３０５、変換テーブル３１０、シグネチャーテーブル３１５、及びオーバーフロー領域３２０を含む。ハッシュテーブル３０５は、２ｍロー又はバケット、及び２ｎウェイ又はカラムを含むように構成される。ハッシュテーブル３０５は使用者データを格納するために使用され、各々の使用者データは特定のハッシュバケット内の特定のウェイに格納される。図３はハッシュテーブル３０５が全体メモリの約１／３であることを示しているが、実際にはハッシュテーブル３０５は任意のサイズであり、しばしば利用可能なメモリ内に合うよう、できる限り大きくなる（重複除去メモリを最大化するため）。オーバーフロー領域３２０は、重複除去メモリとして使用されないメモリ１１５の部分を示す（ハッシュテーブル３０５によって使用されるメモリよりも多くのメモリがあるが、ハッシュテーブル３０５のウェイの数を２倍にするのに十分な追加メモリがないためである）。
【００２７】
図４は、本発明の一実施形態による拡張可能なハッシュテーブルの使用を示す図である。図３とは対照的に、図４は大きいハッシュテーブル３０５、変換テーブル３１０、シグネチャーテーブル３１５、オーバーフロー領域３２０、及び小さいハッシュテーブル４０５を含む。小さいハッシュテーブル４０５は大きいハッシュテーブル３０５のように、２ｍ個のバケットを含む。しかし、小さいハッシュテーブル４０５は２ｎ’個のウェイを含み、ここで、ｎ’はｎより小さい。本発明の幾つかの実施形態で、ｎ’は変化し、小さいハッシュテーブル４０５が時間に応じて動的に大きくなる。したがって、例えば、ｎ’は（実装に応じて）０又は１から開始し、小さいハッシュテーブル４０５が十分に満たされて新しいエントリがバケットに配置されない時、ｎ’は１だけ増加する。例えば、メモリ１１５が比較的少ない重複除去を遂行する場合に、小さいハッシュテーブル４０５は動的に縮小する。本発明の他の実施形態で、小さいハッシュテーブル４０５は静的に（それはメモリ内にある可能性があるほどに大きい）設定される。
【００２８】
大きいハッシュテーブル３０５又は小さいハッシュテーブル４０５の中の１つに与えられたロー及びカラム値に対して、ハッシュテーブルは、エントリ４１０のようなエントリを含む。エントリ４１０は、データ４１５及び度数カウンター（ｆｒｅｑｕｅｎｃｙ  ｃｏｕｎｔｅｒ）４２０を含む。データ４１５は実際のデータを格納する。度数カウンター４２０はデータに対する異なる参照の数を追跡する。アプリケーションがデータ４１５の使用に関心を示すと、度数カウンター４２０は増加する。アプリケーションがそれ以上データ４１５に関心がない時、度数カウンター４２０は減少する。
【００２９】
ｎ’はｎより大きくてはならない。結局、メモリが、ｎ’がｎくらいの大きい数になるための充分な空間を含むならば、大きいハッシュテーブル３０５は最初から２倍に作成され、小さいハッシュテーブル４０５を使用する必要はない。
【００３０】
以上の説明は、小さいハッシュテーブル４０５が静的であるか、又は動的であるかに拘らず、大きいハッシュテーブル３０５が静的に設定されることを提案する。本発明の幾つかの実施形態で、大きいハッシュテーブル３０５は静的に設定されるが、本発明の他の実施形態で大きいハッシュテーブル３０５は（物理的メモリの範囲内でそれ以上大きくならないところまで）必要に応じて動的に大きくなる。さらに、大きいハッシュテーブル３０５と小さいハッシュテーブル４０５との間に、これらのどちらが静的又は動的であるかを要求される関係はない。即ち、テーブルの両方が静的であってもよく、一方が静的であり、他方は動的であってもよく、又は両方が動的であってもよい。
【００３１】
大きいハッシュテーブル３０５及び小さいハッシュテーブル４０５の両方を使用して、より多くのメモリ１１５が重複除去メモリに使用され、より少ないメモリ１１５がオーバーフロー領域３２０に割り当られる。これはメモリ１１５の使用を向上させて、重複除去が効果的になるために必要な重複除去比率を減少させる。
【００３２】
幾つかの例が参考になる。総メモリ容量が２７４，８７７，９０６，９４４バイト（約２５６ＧＢ）で、大きいハッシュテーブル３０５が３２（２５）ウェイを有し、小さいハッシュテーブル４０５が１６（２４）ウェイを有する状況を考察する。以下の表１は、ハッシュテーブル３０５のみを使用した場合とハッシュテーブル３０５及び小さいハッシュテーブル４０５を使用した場合とを比較した、ハッシュテーブルの使用に関する関連データを示す。表１から明らかなように、３．０の効果的な重複除去比率を達成するために、ハッシュテーブル３０５のみに対して要求される原始重複除去比率は５．４である。即ち、メモリ１１５に格納された約５．４％のデータが３．０の効果的な重複除去比率を達成するために重複除去されたデータを示さなければならない。一方、大きいハッシュテーブル３０５及び小さいハッシュテーブル４０５の両方が共に使用される場合、３．０の効果的な重複除去比率を達成するためには、ただ３．９の原始重複除去比率が必要である。これは相当に向上されている。
【００３３】
【表１】
2018120594.tif 000003
【００３４】
大きいハッシュテーブル３０５及び小さいハッシュテーブル４０５の両方を使用する場合、より低い原始重複除去比率が必要となる理由は、より多くのメモリ１１５が重複除去メモリとして使用されるためである。即ち、オーバーフロー領域３２０は、より小さい。より少ないメモリ１１５がオーバーフロー領域３２０に使用されるため、より低い原始重複除去比率が必要となり、メモリ１１５は全般的により効率的に使用される。
【００３５】
第２の例として、同じ物理メモリ内にある同一のハッシュテーブルを考察する。この例では、一定の原始重複除去比率を仮定する効果的な重複除去比率を考察する。表２はこのような状況を示している。表２に示すように、ハッシュテーブル３０５が単独で使用される時の効果的な重複除去比率は、大きいハッシュテーブル３０５と小さいハッシュテーブル４０５とが共に使用される時の効果的な重複除去比率よりも低い。
【００３６】
【表２】
2018120594.tif 000004
【００３７】
以上で説明した実施形態は、１つの大きいハッシュテーブル３０５及び１つの小さいハッシュテーブル４０５を示す。しかし、ただ１つの小さいハッシュテーブル４０５のみが使用される理由はない。図５は、本発明の他の実施形態による拡張可能なハッシュテーブルの使用を示す図である。本実施形態では、投資回収率を犠牲にして、多数の小さいハッシュテーブルを支援する。例えば、図５で、メモリ１１５は大きいハッシュテーブル３０５、小さいハッシュテーブル４０５、及び小さいハッシュテーブル５０５を含むことが示されている。小さいハッシュテーブル５０５は、このハッシュテーブル５０５がＮ”ウェイを含むことを除いて、形態及び機能において小さいハッシュテーブル４０５と同一であり、ここで、（Ｎ’がＮより少ない２の累乗であるように）Ｎ”は、Ｎ’より少ない２の累乗である。
【００３８】
変換テーブル３１０は、論理アドレスを所望の使用者データが格納されたアドレスにマッピングすることを担当する。具体的に、変換テーブル３１０は、ロー及びカラム（即ち、バケット及びウェイ）を、（使用者データがハッシュテーブルの中の１つに格納された場合）使用者データが格納されたハッシュテーブルに格納するか、又は（使用者データがハッシュテーブルの中の１つに格納されない場合）オーバーフロー領域３２０に物理アドレスを格納する。図６はこのプロセスを示している。即ち、図６は、論理アドレスを多様なメモリ目的地にマッピングするために図４の変換テーブルの使用を示す図である。
【００３９】
図６で、変換テーブル３１０は、ホストコンピュータから論理アドレス６０５を受信する（論理アドレス６０５は、アプリケーション、オペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）、又は図１のメモリ１１５からデータにアクセスが必要な任意の他のソフトウェア又はハードウェアから最終的に得られる）。論理アドレス６０５は、読出し要請又は書込み要請の中の１つであるデータ要請の部分である。論理アドレス６０５は、２つの構成要素、即ち、変換テーブルインデックス及び粒状度を含むものと考えられる。変換テーブルインデックスは、要請されたデータが発見される特定ページ（又はキャッシュライン）を示す。粒状度は検索されるデータの特定バイトを示す。具体的に、変換テーブルインデックスは、論理アドレス６０５から最下位ビットをマスクすることによって生成される。変換テーブルインデックスを生成するためにどのくらい多くのビットがマスクされるかは、変換テーブルインデックスのサイズに依存する（これは、図１のメモリ１１５のサイズ及びコンピュータシステムで使用されるキャッシュラインのサイズに依存する）。
【００４０】
その後、変換テーブルインデックスは、ＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）６１０が読み出される変換テーブル内でインデックスとして使用される。ＰＬＩＤ６１０は、使用者データが実際にどこに格納されるかに応じて異なる形態を取る。しかし、すべての場合において、ＰＬＩＤ６１０は、領域識別子６１５及び物理アドレス６２０を含む。
【００４１】
使用者データが図４の大きいハッシュテーブル３０５に格納される場合、ＰＬＩＤ６１０はエントリ６２５のように見える。エントリ６２５で、領域識別子は１ビットを含み、これは使用者データが図４の大きいハッシュテーブル３０５に格納されたことを示す。そして、物理アドレスは、ローインデックス（ハッシュバケットを識別する）に対するｍビット及びカラムインデックス（ウェイを識別する）に対するｎビットを含む。ｍビットは２ｍハッシュバケットの中から選択するのに十分であり、ｎビットは２ｎウェイの中から選択するのに十分であるので、固有の使用者データが大きいハッシュテーブル３０５内で識別される。
【００４２】
使用者データが図４の小さいハッシュテーブル４０５に格納される場合、ＰＬＩＤ６１０はエントリ６３０のように見える。エントリ６３０で、領域識別子は２ビットを含む。即ち、使用者データが図４の大きいハッシュテーブル３０５に格納されていないことを示す第１ビット、及び使用者データが図４の小さいハッシュテーブル４０５に格納されていることを示す第２ビットを含む。そして、物理アドレスは、ローインデックス（ハッシュバケットを識別する）に対するｍビット及びカラムインデックス（ウェイを識別する）に対するｎ’ビットを含む。ｎ’は常にｎより小さいので、２ビットが使用者データが格納された領域を識別するのに使用されるにも拘らず、エントリ６３０はエントリ６２５よりもさらに多くのビットを必要としない。
【００４３】
使用者データが図４のオーバーフロー領域３２０に格納される場合、ＰＬＩＤ６１０はエントリ６３５のように見える。エントリ６３５で、領域識別子は再び２ビットを含む。即ち、使用者データが図４の大きいハッシュテーブル３０５に格納されないことを示す第１ビット、及び使用者データが図４のオーバーフロー領域３２０に格納されていることを示す第２ビットを含む。物理アドレスは、ロー及びカラムインデックス（エントリ６２５、６３０のように）を含むか、又は任意の他の所望のフォーマットを使用して、任意の所望の方式にフォーマットされる。
【００４４】
エントリ６２５、６３０、及び６３５が、図４の大きいハッシュテーブル３０５、図４の小さいハッシュテーブル４０５、及び図４のオーバーフロー領域３２０のエントリの間をいかに区別するかを示したが、本発明の実施形態は使用される他の形態を支援する。例えば、図５に示す多数の小さいハッシュテーブル４０５及び５０５を含む実施形態で、領域識別子６１５は、図５の大きいハッシュテーブル３０５と他の領域との間を区別するための１ビットを含み、また、図５の小さいハッシュテーブル（４０５、５０５）、及び図５のオーバーフロー領域３２０の中から選択するための２ビットを使用する。又は、領域識別子６１５は常に最大４つの異なる領域まで選択するための２ビットを使用するか、又は常に異なる最大８個の領域まで選択するための３ビットを使用することなどができる。このアプローチは、領域を選択するために多様な数のビットを必要としない長所を有するが、全体ＰＬＩＤ６１０を格納するための多様な数のビットを必要とし、使用されない領域６１５に対するビットの幾つかの組み合わせが残る。
【００４５】
図６は、論理アドレスから多くのビットをキーオフされたエントリと共に、テーブルとして変換テーブル３１０を説明したが、変換テーブル３１０は他の技術、例えばハッシュ関数を利用して、具現される。ハッシュ関数を利用する場合、特定の論理アドレス（又は論理アドレスの関連上位ビット）はハッシュ関数の対象になる可能性がある。ハッシュ関数の結果は、使用者データの位置（図４の大きいハッシュテーブル３０５、図４の小さいハッシュテーブル４０５、又は図４のオーバーフロー領域３２０）、及び物理アドレスを判別するのに使用される。
【００４６】
図４に戻ると、重複除去メモリを使用する時の１つの問題は、使用者データが実際にメモリ１１５のどこかに格納されているのか否かを確認することである。例えば、異なるアプリケーションは同一のデータへのアクセスを要請するが、異なる論理アドレスを使用する（どちらのアプリケーションも、他のアプリケーション又は使用者データに対する他のアプリケーションの関心を認知できないので）。シグネチャーテーブル３１５は、与えられた使用者データがメモリ１１５に既に存在する幾つかの他の使用者データの複製であるか否かを判別し、使用者データの不必要なコピーが格納されることを防止するために使用される。
【００４７】
使用者データがメモリ１１５に新たに格納される時、ハッシュ関数はシグネチャーを生成するために使用者データに適用される。このハッシュ関数は、メモリに使用者データが実際に格納された場所を判別するのに使用されるハッシュ関数と同一であるか、又は、異なるハッシュ関数である。使用者データが格納された場所を判別するのに使用されるハッシュ関数とは異なり、シグネチャーを生成するのに使用されるハッシュ関数は使用者データの論理アドレスではなく、使用者データ自体のハッシュを遂行する。その後、シグネチャーテーブル３１５はシグネチャーが存在するか否かを確認するために検索される。
【００４８】
シグネチャーは、通常、使用者データ自体よりも長さが短い（即ち、より少ビット）。したがって、異なる使用者データが同一のシグネチャーを生成することが可能である。言い換えると、シグネチャーの一致がシグネチャーテーブル３１５で発見される場合、その一致は使用者データがメモリ１１５に既に格納されていることを自動的に意味するものではない。使用者データがメモリ１１５に実際に格納されたか否かを判別するために、使用者データはメモリ１１５の識別されたデータと比較される。完全な比較が一致を示す場合、使用者データはメモリ１１５に既に格納されている。その場合、変換テーブル３１０は、図６のＰＬＩＤ６１０が使用者データが格納された位置を示すように設定する。逆の命題が真であることに留意する。シグネチャーテーブル３１５でシグネチャーの一致が発見されなければ、使用者データはメモリ１１５に未だ格納されていない（同一データが同一のハッシュ関数を使用して異なるシグネチャーを生成しないため）。その場合、新しいエントリが、論理アドレスに再びマッピングされるシグネチャーテーブル３１５に追加される。
【００４９】
シグネチャーテーブル３１５は、一般的に大きいハッシュテーブル３０５及び小さいハッシュテーブル４０５に格納された使用者データに関してのみに使用される。即ち、シグネチャーテーブル３１５は、オーバーフロー領域３２０に格納されたデータのために使用されない。理由は単純である。オーバーフロー領域３２０は重複除去の対象ではないため、そこに重複データが格納される可能性がある。
【００５０】
図７Ａ及び図７Ｂは、本発明の一実施形態による重複除去メモリに図４の拡張可能なハッシュテーブルを使用する手順の一例を示すフローチャートである。図７Ａの、段階７０５で、図４のメモリ１１５は、データ要請の一部として、図１のマシン１０５から図６の論理アドレス６０５を受信する（マシン１０５、オペレーティングシステム、又は幾つかの他の構成要素で実行中の応用プログラムから）。段階７１０で、図４のメモリ１１５は図６の論理アドレス６０５に対応する図６のＰＬＩＤ６１０を判別する。この場合、異なるアプローチ（ａｐｐｒｏａｃｈ）が図６のＰＬＩＤ６１０を判別するのに使用されるので、図６のＰＬＩＤ６１０がいかに判別されるかは、データが読み出されるか、又は書き込まれるかによって異なる。図６のＰＬＩＤ６１０が読出し及び書込み要請に対していかに判別されるかに対するフローチャートが以下の図８、及び図９Ａ〜図９Ｃを各々参照して示される。
【００５１】
図６のＰＬＩＤ６１０が判別されると、段階７１５で図４のメモリ１１５は、データが格納された場所を判別するために図６のＰＬＩＤ６１０の領域識別子を使用する。データが図４のオーバーフロー領域３２０に格納されると、段階７２０で使用者データは（発行された要請のタイプに応じて、図４のオーバーフロー領域３２０からデータを読み出すか、又は図４のオーバーフロー領域にデータを書き込む）処理が終了された後、図６のＰＬＩＤ６１０から物理アドレスを使用してアクセスされる。そうでなければ、段階７２５で、図４のメモリ１１５はローインデックス及びカラムインデックス（即ち、ハッシュバケット及びウェイ）を図４の大きいハッシュテーブル３０５又は図４の小さいハッシュテーブル４０５の中の１つで判別する（ハッシュテーブルが図４のメモリ１１５に格納されるところを除外すれば、データのアクセスは同一である）。
【００５２】
段階７３０（図７Ｂ）で、図４のメモリ１１５は要請されたデータが特定のローインデックス及びカラムインデックスで「発見」されたか否かを判別する。例えば、データがハッシュテーブルの中の１つに書き込まれる時、ローインデックス及びカラムインデックスが、既にデータがある位置を識別することが発生する（可能性は低いが、発生可能である）。その場合、使用者データは付近の位置に書き込まれ（例えば、カラムインデックスの幾つかの予め決定されたデルタ内で、同じハッシュバケットの他のウェイ）、したがってデータは読み出される時の代わりにその位置で検索される必要がある。ハッシュテーブルで「近い」と看做されることは、図９Ａ〜図９Ｃを参照して、以下でさらに論議される。書込み要請の場合、「発見」されるデータは、データが書き込まれるハッシュテーブルに利用可能なエントリがあることを意味する。
【００５３】
図６の論理アドレス６０５が読出し要請の部分である状況で、図４のメモリ１１５は、特定のローインデックス及びカラムインデックスのデータが要請されたデータではないことを判別する方法がない。このような状況で、段階７３０は、データにアクセスするために、一般的に常に「はい（Ｙｅｓ）」の結果を返し、段階７３５へ自動的に進行する。
【００５４】
データが特定のローインデックス及びカラムインデックスで発見されるか、又は特定のローインデックス及びカラムインデックスが書込み要請に対するデータを格納可能な場合、段階７３５で図４のメモリ１１５はデータにアクセスし、その後に処理が完了される。そうでない場合、データが書き込まれる予定であるが、ローインデックス及びカラムインデックスがデータを既に格納している位置を識別する場合、段階７４０で図４のメモリ１１５は使用者データを書き込む位置のために近くのエントリを検索する。段階７４５で、使用者データが書き込まれる近くの位置が無い場合、段階７５０で図４のメモリ１１５はエラーを報告する。又は、特にデータがハッシュテーブルの中の１つに書き込まれる予定であるが、幾つかの理由によって書き込むことができない場合、図６のＰＬＩＤ６１０はハッシュテーブルの代わりに図４のオーバーフロー領域３２０を指すように変更される（この場合に処理が図７Ａの段階７２０へ進行される）。そうでない場合、データは付近で「発見」され、段階７３５で使用者データはハッシュテーブルからアクセスされ、処理は完了される。
【００５５】
図８は、本発明の一実施形態によるメモリの読出し要請での論理アドレスに対するＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）を判別するための手順の一例を示すフローチャートである。読出し要請の場合、プロセスは単純である。段階８０５で、論理アドレスは図４の変換テーブル３１０にアクセスするのに使用される。変換テーブル３１０は、図４のメモリ１１５内の適切な領域からデータにアクセスするのに使用される物理アドレス（ハッシュテーブルの中の１つにローインデックス及びカラムインデックスを含む）が決定される図６のＰＬＩＤ６１０を提供する。
【００５６】
図９Ａ〜図９Ｃは、本発明の一実施形態によるメモリの書込み要請での論理アドレスに対するＰＬＩＤを判別するための手順の一例を示すフローチャートである。図９Ａの段階９０５で、図４のメモリ１１５は書き込まれるデータのシグネチャーを生成する。段階９１０で、図４のシグネチャーテーブル３１５はシグネチャーが存在するか否かを確認する。シグネチャーの一致が発見されると、段階９１５で図４のメモリ１１５はデータがハッシュテーブル（図４の大きいハッシュテーブル３０５又は図４の小さいハッシュテーブルの中の１つである）に格納されたデータと一致するか否かを確認する。そうでない場合、段階９２０で、図４のメモリ１１５は図４のシグネチャーテーブル３１５が新しいエントリのための空間を有するか否かを確認する。
【００５７】
段階９１５でデータがハッシュテーブルに格納されたデータと一致すると、段階９２５（図９Ｂ）で、図４のメモリ１１５は、図４の度数カウンター４２０が増加する場合、図４の度数カウンター４２０がオーバーフローしているか否かを確認する（図４の度数カウンター４２０が既に最大値に到達する場合に発生する）。その場合、又はシグネチャーテーブルが図９Ａの段階９２０で、新しいエントリに対する空間を有しない場合、使用者データは図４のオーバーフロー領域３２０に書き込まれ、段階９３０でメモリ１１５は図４のオーバーフロー領域３２０に対する図６のＰＬＩＤ６１０を生成する。或は、シグネチャーが図４のシグネチャーテーブル３１５で発見されると、データはハッシュテーブルのエントリに一致し、図４の度数カウンター４２０はオーバーフローせず、段階９３５で図４のメモリ１１５は図４の度数カウンター４２０を増加させて、処理は終了する。図４の度数カウンター４２０がオーバーフローされずに、増加されると、データはそれ以上図４のメモリ１１５に書き込まれる必要がなく（既にハッシュテーブルに格納されている）、したがって図７Ａの処理も終了する。
【００５８】
シグネチャーが図４のシグネチャーテーブル３１５で発見されたが、データが段階９１５で一致しない場合、論理アドレスが通常マッピングするハッシュバケット及びウェイの特定の組み合わせは既に使用中である。この状況は「ハッシュ衝突（ｃｏｌｌｉｓｉｏｎ）」と称される。ハッシュ衝突が発生する時、対応する幾つかの方法がある。段階９４０に示すように、１つの可能性はハッシュテーブルの新しい利用可能な位置を探し、新しい位置を指すように図６のＰＬＩＤ６１０をアップデートする。第２の可能性は段階９３０に制御を進めて、ハッシュテーブルではなく図４のオーバーフロー領域３２０にデータを書き込み、これにより図６のＰＬＩＤを再びアップデートすることである。第３の可能性は、段階９４５に示すように、図６のＰＬＩＤ６１０を変更しないで残し、データが他のどこかに実際に格納されていることを把握するために図４のメモリ１１５に残すことである。例えば、開番地法（ｏｐｅｎ  ａｄｄｒｅｓｓｉｎｇ）のように、ハッシュ衝突に対する既存のソリューションがあり、ここで、データは識別された正確な位置に格納されないが、ハッシュ衝突が発生した後、空いている第１位置内のどこかに格納される。開番地法を使用する時、データは、図６のＰＬＩＤ６１０によって識別された位置の後の任意のアドレスに格納されるか、又はデータは固定された予め決定された数の位置内に格納される（固定された予め決定された数は任意の所望の値に設定される）。本発明の他の実施形態で、データは、図６のＰＬＩＤ６１０によって特定された位置の前に、再び幾つかの固定された予め決定された数の位置内に格納される。何れのアプローチが使用されても、図４のメモリ１１５は図６のＰＬＩＤ６１０を生成し、図６のＰＬＩＤ６１０によって特定された位置からデータにアクセスするためにこのアプローチを使用する。本発明の実施形態はハッシュ衝突に対する他のソリューションも支援する。
【００５９】
図４のシグネチャーテーブル３１５でシグネチャーが発見されず、図４のシグネチャーテーブル３１５が新しいエントリに対する空間を有する場合、以段階９５０（図９Ｃ）で、シグネチャーは図４のシグネチャーテーブル３１５に追加され、段階９５５でメモリ１１５は、利用可能なエントリがどこに発見されるかによって、図４の大きいハッシュテーブル３０５及び図４の小さいハッシュテーブル４０５の中の１つに対して図６のＰＬＩＤ６１０を生成する。
【００６０】
図１０は、本発明の一実施形態による小さいハッシュテーブルのサイズを増加させるか否かを判別するための手順の一例を示すフローチャートである。図１０の段階１００５で、図４の小さいハッシュテーブル４０５は収容容量に近づいているかを確認する。また、図４のメモリ１１５は、図４のオーバーフロー領域３２０が図４の小さいハッシュテーブル４０５に使用されるために用途変更される利用可能な十分な格納空間を有するかを確認する。図４の小さいハッシュテーブル４０５はサイズが２倍になるので、図４のオーバーフロー領域３２０は、少なくとも図４の小さいハッシュテーブルが既に使用しているくらいの空間を有する必要がある。幾つかのデータが図４のオーバーフロー領域３２０に既に格納されている可能性があり、図４のオーバーフロー領域３２０に残す必要があるので、できる限り多くの空間を要する。図４の小さいハッシュテーブル４０５が十分な空間を有するか、又は図４のオーバーフロー領域３２０が図４の増加する小さいハッシュテーブル４０５をサポートするための十分な格納空間を有しない場合、処理は終了する。そうでない場合（そして、図４の小さいハッシュテーブル４０５に対する値ｎ’が図４の大きいハッシュテーブル３０５に対する値ｎより少なくとも２小さいと仮定すると）、段階１０１０で、図４のオーバーフロー領域３２０のサイズを減少させる代償として、図４の小さいハッシュテーブル４０５はサイズが増加される。その後、段階１０１５で、図４の小さいハッシュテーブル４０５は新しく追加されたメモリを使用するために（値ｎ’を増加させることによって）ウェイの数を２倍に増加させて処理は終了する。
【００６１】
図７Ａ〜図１０で、本発明の幾つかの実施形態が開示されている。しかし、当該技術分野における通常の知識を有する者は、段階の順序を変更するか、段階を省略するか、又は図面に示されていない連結を含めることによって、本発明の他の実施形態も実施可能である。フローチャートのすべてのこのような変形は、明示的に記載されているか否かに拘らず、本発明の実施形態と考えられる。
【００６２】
以下の説明は、本発明の技術的思想の特定の側面が具現される適切なマシンの簡単且つ一般的な説明を提供する。マシンは、少なくとも部分的に、他のマシンから受信する指示、仮想現実（ｖｉｒｔｕａｌ  Ｒｅａｌｉｔｙ：ＶＲ）との相互作用、生体認証フィードバック、又は他の入力信号のみならず、キーボード、マウス等のような既存の入力装置からの入力によって、制御される。本明細書で使用される、「マシン」という用語は１つのマシン、仮想マシン、通信可能に結合されたマシンのシステム、又は共に動作する装置を幅広く含む。マシンの一例は、例えば、自動車、汽車、タクシー等の個人又は公共交通機関のような輸送機器のみならず、個人用コンピュータ、ワークステーション、サーバー、携帯用コンピュータ、ハンドヘルド（ｈａｎｄｈｅｌｄ）装置、電話機、タブレット等のようなコンピューティング装置を含む。
【００６３】
マシンは、プログラム可能な又は非プログラマブルな論理装置又はアレイ、特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ、ＡＳＩＣ）、組込みコンピュータ、スマトカード等のような組込みコントローラを含む。マシンは、例えばネットワークインターフェイス、モデム、又は他の通信結合器を通じて、１つ以上の遠隔マシンに対する１つ以上の接続を利用する。マシンは、イントラネット（登録商標）、インターネット、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）等のような物理的及び／又は論理的ネットワーク手段で相互連結される。当業者はネットワークコミニュケーションが、無線（ＲＦ）、衛星、マイクロ波、ＩＥＥＥ８０２．１１規格、ブルートゥース（登録商標）、光学的、赤外線、ケーブル、レーザー等を含む多様な有線及び／又は無線の短距離又は長距離のキャリヤー及びプロトコルを使用できることを理解する。
【００６４】
本発明の実施形態は、マシンによってアクセスされる時、マシンが業務を遂行するか、或いは抽象的なデータタイプ又は低いレベルのハードウェアコンテキストを定義する結果を行う、機能、手続、データ構造、アプリケーションプログラム等を含む関連データを参照するか、又は関連データと共に説明される。関連データは、例えば、揮発性及び／又は不揮発性メモリ（例えば、ＲＡＭ、ＲＯＭ等）、又は他の記憶装置、及びハードドライブ、フロッピーディスク、光学記憶装置、テープ、フラッシュメモリ、メモリスティック、デジタルビデオディスク、生物学的記憶装置等を含む関連記憶媒体に格納される。関連データは、物理及び／又は論理ネットワークを含む伝送環境を通じてパケット、シリアルデータ、並列データ、伝播信号等の形態で伝達され、圧縮又は暗号化されたフォーマットで使用される。関連データは、分散環境で使用され、マシンアクセスに対してローカル及び／又は遠隔に格納される。
【００６５】
本発明の実施形態は、１つ以上のプロセッサによって実行可能な命令を含むタイプの、非一時的なマシンで解読することができる媒体を含み、命令は本明細書で説明した発明の概念の構成要素を遂行するための命令を含む。
【００６６】
以上、図面を参照しながら本発明の実施形態を説明したが、本発明は、本発明の技術範囲から逸脱しない範囲で変形され、他の望ましい方式に結合される。また、本明細書の説明は特定の実施形態に集中したが、他の構成も考慮され得る。特に、「本発明の実施形態によれば」等の表現が本明細書で使用されるが、このような句は実施形態の可能性を一般的に参照することを意味し、特定の実施構成として本発明を制限するものではない。本明細書で使用した、これらの用語は他の実施形態と結合可能な同一又は異なる実施形態を参照する。
【００６７】
本発明は、上述の実施形態に限定されるものではなく、そのような実施形態に対して多様に変更実施が可能である。したがって、このようなすべての変形は本発明の技術範囲内に含まれる。
【００６８】
本発明の実施形態は以下の説明に制限無しで拡張される。
【００６９】
説明１．本発明の実施形態によるメモリシステムは、データを格納するメモリと、
前記メモリに格納され、所定数のバケット及び第１の数のウェイを含み、２の１乗である第１数のバイトを含む前記メモリの第１部分を含む大きいハッシュテーブルと、
前記メモリに格納され、所定数のバケット及び第２の数のウェイを含み、２の２乗である第２数のバイトを含む前記メモリの第２部分を含む小さいハッシュテーブルと、
前記メモリに格納され、前記メモリの第３部分を含むオーバーフロー領域と、
論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングするための変換テーブルを含むメモリシステムと、を備える。
【００７０】
説明２．本発明の実施形態は、説明１にしたがうメモリシステムを含み、前記領域識別子は、前記ＰＬＩＤが前記大きいハッシュテーブルのデータを識別することを示す第１ビットを含む。
【００７１】
説明３．本発明の実施形態は、説明２にしたがうメモリシステムを含み、前記物理アドレスは、ローインデックス及びカラムインデックスを含む。
【００７２】
説明４．本発明の実施形態は、説明２にしたがうメモリシステムを含み、
前記第１ビットは、前記ＰＬＩＤが前記大きいハッシュテーブルのデータを識別しないことを示し、
前記領域識別子は、前記ＰＬＩＤが前記小さいハッシュテーブル内にあるか又は前記オーバーフロー領域内にあるかを示す第２ビットを含む。
【００７３】
説明５．本発明の実施形態は、説明４にしたがうメモリシステムを含み、
前記第２ビットは、前記ＰＬＩＤが前記小さいハッシュテーブルのデータを職別することを示し、
前記物理アドレスは、ローインデックス及びカラムインデックスを含む。
【００７４】
説明６．本発明の実施形態は、説明２にしたがうメモリシステムを含み、前記小さいハッシュテーブルは、動的に大きくなる。
【００７５】
説明７．本発明の実施形態は、説明６にしたがうメモリシステムを含み、前記大きいハッシュテーブルは、動的に大きくなる。
【００７６】
説明８．本発明の実施形態は、説明１によるメモリシステムを含み、前記メモリシステムに対する第１の効果的な最小の重複除去比率は、前記小さいハッシュテーブル無しで前記大きいハッシュテーブルに対する第２の効果的な最小の重複除去比率よりも低い。
【００７７】
説明９．本発明の実施形態は、説明１にしたがうメモリシステムを含み、
前記メモリに格納され、前記大きいハッシュテーブル及び前記小さいハッシュテーブルに格納された複数のデータのシグネチャーを格納するシグネチャーテーブルをさらに含み、
前記シグネチャーテーブルは、共通シグネチャーがある多数のデータを前記大きいハッシュテーブル又は前記小さいハッシュテーブルのローに格納することを防止する。
【００７８】
説明１０．本発明の実施形態による方法は、
プロセッサから論理アドレスを受信する段階と、
変換テーブルを使用して、前記論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする段階と、
前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階と、
前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階と、を有する。
【００７９】
説明１１．本発明の実施形態は、説明１０にしたがう方法を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されない場合、前記物理アドレスが前記大きいハッシュテーブルにあると判別する段階を含む。
【００８０】
説明１２．本発明の実施形態は、説明１０にしたがう方法を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されて前記領域識別子の第２ビットが設定されない場合、前記物理アドレスが前記小さいハッシュテーブルにあると判別する段階を含む。
【００８１】
説明１３．本発明の実施形態は、説明１０にしたがう方法を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されて前記領域識別子の第２ビットが設定された場合、前記物理アドレスが前記オーバーフロー領域にあると判別する段階を含む。
【００８２】
説明１４．本発明の実施形態は、説明１０にしたがう方法を含み、前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階は、
前記物理アドレスからローインデックス及びカラムインデックスを判別する段階と、
前記ローインデックス及び前記カラムインデックスを利用して前記大きいハッシュテーブル及び前記小さいハッシュテーブルの中の１つのデータにアクセスする段階と、を含む。
【００８３】
説明１５．本発明の実施形態は、説明１４にしたがう方法を含み、前記ローインデックス及び前記カラムインデックスを利用して前記大きいハッシュテーブル及び前記小さいハッシュテーブルの中の１つのデータにアクセスする段階は、前記小さいハッシュテーブルの前記ローインデックス及び前記カラムインデックスで前記データが発見されない場合、前記小さいハッシュテーブルの近くのエントリを検索する段階を含む。
【００８４】
説明１６．本発明の実施形態は、説明１０にしたがう方法を含み、前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階は、前記物理アドレスを利用して前記オーバーフロー領域のデータにアクセスする段階を含む。
【００８５】
説明１７．本発明の実施形態は、説明１０にしたがう方法を含み、
前記小さいハッシュテーブルが収容容量に近づいていることを判別する段階と、
前記オーバーフロー領域のサイズを減少させる一方、前記小さいハッシュテーブルのサイズを増加させる段階と、をさらに含む。
【００８６】
説明１８．本発明の実施形態は、説明１７にしたがう方法を含み、
前記小さいハッシュテーブルのサイズを増加させる段階は、
前記小さいハッシュテーブルのサイズを２倍に増加させる段階と、
前記オーバーフロー領域のサイズを減少させる段階と、を含む。
【００８７】
説明１９．本発明の実施形態は、説明１７にしたがう方法を含み、前記小さいハッシュテーブルのサイズを増加させる段階は、前記小さいハッシュテーブルのカラムに相当するウェイの数を増加させる段階を含む。
【００８８】
説明２０．本発明の実施形態は、説明１０にしたがう方法を含み、
前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階は、前記メモリに前記データを書き込む段階を含み、
変換テーブルを使用して、前記論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤにマッピングする段階は、前記変換テーブルを使用して前記データを書込みために、前記大きいハッシュテーブル、前記小さいハッシュテーブル、及び前記オーバーフロー領域の中の１つを選択する段階を含む。
【００８９】
説明２１．本発明の実施形態は、説明２０にしたがう方法を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、
シグネチャーを生産するために前記データにハッシュ関数を適用する段階と、
前記シグネチャーに対するシグネチャーテーブルを確認する段階と、
前記シグネチャーが前記シグネチャーテーブルにある場合、前記データを前記オーバーフロー領域に書き込む段階と、を含む。
【００９０】
説明２２．本発明の実施形態は、説明２１にしたがう方法を含み、前記シグネチャーに対するシグネチャーテーブルを確認する段階は、前記物理アドレスのローでの前記シグネチャーに対するシグネチャーテーブルを確認する段階を含む。
【００９１】
説明２３．本発明の実施形態によるコンピュータ読み取り可能な記録媒体は、コンピュータに下記方法を実行させるためのプログラムを記録し、、
前記方法は、
プロセッサから論理アドレスを受信する段階と、
変換テーブルを使用して、前記論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）にマッピングする段階と、
前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階と、
前記物理アドレスを使用して前記メモリ内のデータにアクセスする段階と、を有する。
【００９２】
説明２４．本発明の実施形態は、説明２３にしたがう記録媒体を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されない場合、前記物理アドレスが前記大きいハッシュテーブルにあると判別する段階を含む。
【００９３】
説明２５．本発明の実施形態は、説明２３にしたがう記録媒体を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されて前記領域識別子の第２ビットが設定されない場合、前記物理アドレスが前記小さいハッシュテーブルにあると判別する段階を含む。
【００９４】
説明２６．本発明の実施形態は、説明２３にしたがう記録媒体を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、前記領域識別子の第１ビットが設定されて前記領域識別子の第２ビットが設定された場合、前記物理アドレスが前記オーバーフロー領域にあると判別する段階を含む。
【００９５】
説明２７．本発明の実施形態は、説明２３にしたがう記録媒体を含み、前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階は、
前記物理アドレスからローインデックス及びカラムインデックスを判別する段階と、
前記ローインデックス及び前記カラムインデックスを利用して前記大きいハッシュテーブル及び前記小さいハッシュテーブルの中の１つのデータにアクセスする段階と、を含む。
【００９６】
説明２８．本発明の実施形態は、説明２７にしたがう記録媒体を含み、前記ローインデックス及び前記カラムインデックスを利用して前記大きいハッシュテーブル及び前記小さいハッシュテーブルの中の１つのデータにアクセスする段階は、前記小さいハッシュテーブルの前記ローインデックス及び前記カラムインデックスで前記データが発見されない場合、前記小さいハッシュテーブルの付近のエントリを検索する段階を含む。
【００９７】
説明２９．本発明の実施形態は、説明２３にしたがう記録媒体を含み、前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階は、前記物理アドレスを利用して前記オーバーフロー領域のデータにアクセスする段階を含む。
【００９８】
説明３０．本発明の実施形態は、説明２３にしたがう記録媒体を含み、前記方法は、
前記小さいハッシュテーブルが収容容量に近づいていることを判別する段階と、
前記オーバーフロー領域のサイズを減少させる一方、前記小さいハッシュテーブルのサイズを増加させる段階と、をさらに含む。
【００９９】
説明３１．本発明の実施形態は、説明３０にしたがう記録媒体を含み、
前記小さいハッシュテーブルのサイズを増加させる段階は、
前記小さいハッシュテーブルのサイズを２倍に増加させる段階と、
前記オーバーフロー領域のサイズを減少させる段階と、を含む。
【０１００】
説明３２．本発明の実施形態は、説明３０にしたがう記録媒体を含み、前記小さいハッシュテーブルのサイズを増加させる段階は、前記小さいハッシュテーブルのカラムに相当するウェイの数を増加させる段階を含む。
【０１０１】
説明３３．本発明の実施形態は、説明２３にしたがう記録媒体を含み、
前記物理アドレスを利用して前記メモリ内のデータにアクセスする段階は、前記メモリに前記データを書き込む段階を含み、
変換テーブルを使用して、前記論理アドレスを領域識別子及び物理アドレスを含むＰＬＩＤにマッピングする段階は、前記変換テーブルを使用して前記データを書込みために、前記大きいハッシュテーブル、前記小さいハッシュテーブル、及び前記オーバーフロー領域の中の１つを選択する段階を含む。
【０１０２】
説明３４．本発明の実施形態は、説明３３にしたがう記録媒体を含み、前記領域識別子を利用して、メモリ内の大きいハッシュテーブル、小さいハッシュテーブル、又はオーバーフロー領域に前記物理アドレスがあるか否かを判別する段階は、
シグネチャーを生産するために前記データにハッシュ関数を適用する段階と、
前記シグネチャーに対するシグネチャーテーブルを確認する段階と、
前記シグネチャーが前記シグネチャーテーブルにある場合、前記データを前記オーバーフロー領域に書き込む段階と、を含む。
【０１０３】
説明３５．本発明の実施形態は、説明３４にしたがう記録媒体を含み、前記シグネチャーに対するシグネチャーテーブルを確認する段階は、前記物理アドレスのローでの前記シグネチャーに対するシグネチャーテーブルを確認する段階を含む。
【符号の説明】
【０１０４】
１０５    マシン
１１０    プロセッサ
１１５    メモリ
１２０    格納装置
１２５    メモリコントローラ
１３０    装置ドライバー
２０５    クロック
２１０    ネットワークコネクター
２１５    バス
２２０    使用者インターフェイス
２２５    入／出力エンジン
３０５    （大きい）ハッシュテーブル
３１０    変換テーブル
３１５    シグネチャーテーブル
３２０    オーバーフロー領域
４０５、５０５    小さいハッシュテーブル
４１０、６２５、６３０、６３５    エントリ
４１５    データ
４２０    度数カウンター
６０５    論理アドレス
６１０    ＰＬＩＤ（Ｐｈｙｓｉｃａｌ  Ｌｉｎｅ  Ｉｄｅｎｔｉｆｉｅｒ）
６１５    領域識別子
６２０    物理アドレス
【図１】
2018120594.tif 000005
【図２】
2018120594.tif 000006
【図３】
2018120594.tif 000007
【図４】
2018120594.tif 000008
【図５】
2018120594.tif 000009
【図６】
2018120594.tif 000010
【図７Ａ】
2018120594.tif 000011
【図７Ｂ】
2018120594.tif 000012
【図８】
2018120594.tif 000013
【図９Ａ】
2018120594.tif 000014
【図９Ｂ】
2018120594.tif 000015
【図９Ｃ】
2018120594.tif 000016
【図１０】
2018120594.tif 000017