【誤訳訂正書】
【提出日】平成20年6月20日(2008.6.20)
【誤訳訂正１】
【訂正対象書類名】明細書
【訂正対象項目名】発明の詳細な説明
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、広くはデータ処理システムに関し、特に、ハッシュテーブルのハッシュバケットにおける衝突（コリジョン）の再編成に関する。
【０００２】
【従来の技術】
プロセッサが高速化するにつれて、メインメモリへのアクセスが、全体的な性能（パフォーマンス）の向上におけるボトルネックになっている。従って、性能を改善するために、メモリキャッシュスキームが、メインメモリに関するボトルネックの影響を低下させるために採用されてきている。ＰＥＮＴＩＵＭプロセッサでは、非常に高速な１次キャッシュと高速な２次キャッシュとが用いられているそのようなメモリキャッシュスキームを採用している。プロセッサがメモリからデータを読み出す必要があるときには、プロセッサは最初に１次キャッシュをチェックしてデータを探し出す。リクエストされたデータが１次キャッシュには見つからないときには、次に、２次キャッシュがチェックされる。２次キャッシュは、１次キャッシュと比較すればアクセス時間は遅いのであるが、依然としてメインメモリよりは高速である。データが２次キャッシュで見つかれば、データはプロセッサに戻され、データを記憶していた２次キャッシュのライン（「キャッシュライン」）が、１次キャッシュにコピーされる。データは、３２バイトキャッシュラインに関して、１次キャッシュと２次キャッシュとの双方に記憶される。１次キャッシュは、サイズが８ＫＢであるので、２５６個のキャッシュラインを記憶できる。２次キャッシュは、典型的には２５６ＫＢ〜５１２ＫＢであり、８１９２個から１６３８４個のキャッシュラインを記憶できる。
【０００３】
２次キャッシュをチェックした後でもデータが依然として見つからないならば、２次キャッシュより著しく遅いアクセス時間を有するメインメモリが、アクセスされる。メインメモリがアクセスされると、リクエストされたデータだけでなく、３２バイトのメモリライン全体が戻される。プロセッサはリクエストされたデータを受け取り、１次及び２次キャッシュの双方が３２バイトのメモリライン全体を受け取る。３２バイトのメモリラインは、次回にプロセッサがメモリからデータを読み出すことが必要なときにこのキャッシュラインの中でデータが見つかることを希望して、これらのキャッシュに記憶される。コストを視野に入れると、１次キャッシュへのアクセスには１プロセッササイクルを要し、２次キャッシュへのアクセスには４〜１２プロセッササイクルを要し、メインメモリへのアクセスには５０プロセッササイクルを要するのが通常である。従って、メインメモリに１回だけアクセスするのに要する間に、１次キャッシュを約５０回サーチすることが可能である。ＰＥＮＴＩＵＭプロセッサのキャッシュスキームは、Ａｎｄｅｒｓｏｎ及びＳｈａｎｌｅｙ著、「ＰｅｎｔｉｕｍＰｒｏｃｅｓｓｏｒ Ｓｙｓｔｅｍ Ａｒｃｈｉｔｅｃｔｕｒｅ」、第２版、３５〜６０頁、Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ（１９９５年)において、より詳細に説明されており、この書籍の内容はこの出願において援用する。
【０００４】
ハッシュ機構は、多くのコンピュータシステムにおいて重要な役割を演じる。従来のハッシュ機構は、ハッシュテーブルとして知られているデータ構造を用いて、記憶されたデータへの直接的なアクセスを提供する。従来のハッシュ機構１００のそのような一例が図１に示されている。ハッシュ機構１００は、キー１０２、ハッシュ関数１０４、ハッシュインデックス１０６及びハッシュテーブル１０８を含む。ハッシュテーブル１０８は、多数のハッシュバケット１１０〜１３０を含んでおり、それぞれのハッシュバケットは、レコードなどのデータを含み、レコードのフィールドの中の１つがキー１０２として機能する。ハッシュテーブル１０８にアクセスするためにキー１０２がハッシュ関数１０４に入力されると、ハッシュ関数１０４は、特定のハッシュバケット（例えば１１４）を参照するインデックス１０６（又はハッシュアドレス）を生じる。ハッシュバケット１１４の中には、キーと一致（match）するデータが存在する。ハッシュテーブルが有用であるのは、キー値の大きな範囲をインデックスのそれよりも小さな範囲内にマップすることによってデータへの直接アクセスを提供するからである。このようにして、例えば０から９９９９９９９９までのキー値の範囲を有する８桁のキーが用いられ１０個よりも少ない値が用いられる場合には、ハッシュ機構を用いると、１０個のバケットを含むハッシュテーブルを参照する１桁のインデックスにそのキーをハッシュすることができる。従って、１億個のハッシュバケットを有しているが非常に限られた数のバケットだけしか用いられないようなハッシュテーブルを用いるのではなく、バケットが１０個だけのハッシュテーブルを用いながら、システムリソースをより有効に用いることにより、依然としてデータへの直接的なアクセスを提供することができる。
【０００５】
関数「ｈ」１０４はそれぞれのキー値を正確に１個のインデックスにマップするので、同じキー値が複数回用いられるときは常に、ハッシュテーブル１０８への同じインデックス１０６が生成される。しかし、データをハッシュテーブル１０８に記憶しようとするときに、複数個のキー値が同じインデックス１０６にハッシュされる場合もある。この状況を、「衝突（コリジョン）」が発生していると称する。衝突が生じると、データはインデックスによって示されたハッシュバケットに記憶されなければならないから、複数のレコードがこのハッシュバケットに記憶されることになる。ハッシュバケット１１８は、衝突が生じ複数個のレコードがハッシュバケットに記憶された後のハッシュバケットの状態を示している。ハッシュバケット１１８では、「データ３」というデータの１レコードが、「データ４」というレコードの第２のレコードにリンクされている。衝突が更に生じるにつれて、ハッシュバケットはより混雑した状態（more populated）になるので、ハッシュテーブルの効用は低下し始める。その理由は、ハッシュバケットの中にあるそれぞれのレコードへの直接的なアクセスがもはや不可能であるからである。その代わりに、キー値をインデックスの中にハッシュした後、インデックスは互いにリンクした多数のレコードを包むハッシュバケットを参照し、次に、正しいレコードを決定するためにハッシュバケットをサーチしなければならないが、これには、多くの処理時間を要する。以上のような理由から、従来のハッシュシステムは衝突を回避するように設計されているのである。ハッシュテーブルは、それ自体が記憶しているデータへの直接アクセスを提供するから、多くの既存のコンピュータシステムの重要な部分である。従って、ハッシュ機構の性能を改善することが望まれている。しかし、従来のハッシュ機構は、今日のプロセッサのキャッシュアーキテクチャを利用できていない。
【０００６】
【課題を解決するための手段】
性能を改善するために今日の多くのプロセッサのキャッシュアーキテクチャの利点を得る改善されたハッシュシステムを提供する。ＰＥＮＴＩＵＭプロセッサのような今日の最新のプロセッサの幾らかは、１次キャッシュと２次キャッシュとを利用する２レベルキャッシュスキームを有し、１次キャッシュに含まれているデータには、メインメモリのデータの場合より５０〜１５０倍も速くアクセスすることができる。改善されたハッシュシステムは、バケットが多くのエントリを含むように衝突が起こることを保証し、ランタイムにおいてバケットの中のエントリの順序を変更することでプロセッサの１次キャッシュが用いられる回数を増加させメインメモリが用いられる回数を減少させることで、ハッシュシステムの性能を改善する。
【０００７】
本発明の第１の態様では、コンピュータシステムにおいて、エントリを含むバケットを有するハッシュテーブルのデータにアクセスする方法が提供される。複数のエントリが、データを含む占領されたエントリとして存在している。この方法では、データをハッシュテーブルに入力するリクエストを受け取り、複数の占領されたエントリがそれぞれのバケットに含まれるように衝突を生成するハッシュ機構を生成する。この方法は、また、ハッシュ機構がハッシュテーブルにアクセスする複数のリクエストを受け取る。ハッシュ機構がハッシュテーブルにアクセスするためのこれらの複数のリクエストを処理する間に、この方法は、少なくとも１つのバケットの少なくとも１つの占領されたエントリの中のデータの配置を少なくとも１つのバケットの中の占領された複数のエントリの間で新しい位置に変更して、ハッシュ機構の性能を改善する。
【０００８】
本発明の第２の態様では、メモリとプロセッサとあるサイズを有するキャッシュラインとを有するコンピュータシステムが提供される。メモリは、ハッシュマネージャとバケットのチェーンを有するハッシュテーブルとを含む。それぞれのバケットは、データを記憶するエントリを含んでいて、キャッシュラインサイズである。ハッシュマネージャは、ハッシュテーブルの中のデータにアクセスするリクエストを受け取り、ハッシュテーブルの中のデータへアクセスし、ＭＲＵデータをそれぞれのチェーンの最初のバケットの中に当該チェーンがアクセスされた後で配置する。プロセッサは、ハッシュマネージャを動作させる。本発明の第３の態様では、データにアクセスするページを有するメモリを備えたコンピュータシステムにおいて、ある方法が提供される。この方法は、バケットのチェーンを有するハッシュテーブルを作成し、それぞれのバケットはデータを記憶する複数のエントリを有している。それぞれのチェーンのバケットは、最初のバケットから最後のバケットまでのシーケンスを形成する。それぞれのバケットは、このシーケンスとの関係においてある位置を有している。この方法は、更に、シーケンスの中において同じの相対的位置を有するチェーンのバケットを、メモリの１つのページの中に記憶する。
【０００９】
【発明の実施の形態】
本発明の好適実施例では、今日の多くのプロセッサのキャッシュアーキテクチャを利用する改善されたハッシュシステムが提供され、性能が改善される。ＰＥＮＴＩＵＭプロセッサなどの今日の最新のプロセッサのいくつかは、１次キャッシュと２次キャッシュとを用いる２レベルキャッシュスキームを有しており、１次キャッシュに含まれるデータには、メインメモリにおけるデータより５０〜１５０倍も高速にアクセス可能である。改善されたハッシュシステムでは、バケットが多くのレコードを含むように衝突が生じることが保証され、ランタイムにおいてバケットの中のレコードの順序が並び替えられることによって、プロセッサの１次キャッシュが使用される回数が増加し、メインメモリが使用される回数が減少する。こうして、ハッシュシステムの性能が改善される。
【００１０】
概観
改善されたハッシュシステムは、多数のハッシュバケットを備えたハッシュテーブルを維持する。それぞれのハッシュバケットは、実際には、それぞれの長さが３２バイトである「バケット」のチェーン（メモリの全体ラインすなわちキャッシュライン）である。それぞれのバケットは多数のエントリを有し、それぞれのエントリは１つのレコードを記憶する。改善されたハッシュシステムは、以下の原理を利用することにより、性能が改善される。バケットのチェーンにおけるエントリはリクエストされたレコードを見つけるために直線状に（linearly）サーチされるので、リクエストされたレコードがチェーンの中に見つかる度に、その前にあるそれぞれのバケットの中のそれぞれのエントリにアクセスし、そのエントリがリクエストされたレコードを記憶しているかどうかを判断しなければならない。それぞれのバケットにおけるそれぞれのエントリがアクセスされるので、それに対応するメモリラインは、もともと配置されていた場所とは関係なく、１次キャッシュの中に移動される。従って、リクエストされたレコードが見つけられると、実質的にすべての先行するバケット（すなわち、対応するキャッシュライン）が１次キャッシュにロードされることが保証される。このようにして、処理時間をほとんど要することなく、レコードを最適に再度並び替えることが可能になる。処理時間をほとんど要しないのであるが、１次キャッシュのヒット数を増加させてメインメモリへのアクセス回数を減少させることにより、チェーンへの以後のアクセスに関して実質的な性能上の効果を生じる。
【００１１】
リクエストされたレコードがあるチェーンで見つかると、エントリの中のレコードの順序を変更することにより、リクエストされたレコードがそのチェーンの中の第１のバケットの第１のエントリに存在するようにする。すべての他のレコードは１つのエントリ分だけ後方に移動される。この技術は、最も最近に用いられたレコードはすぐにまたアクセスされることを想定している。この技術は、第１のバケットのキャッシュラインに最も頻繁に用いられると想定されるレコードを配置し、それにより、第１のバケットのためのキャッシュラインが１次キャッシュの中に留まることと、１次キャッシュの使用が増加し他方でメインメモリの使用が減少することとが保証される。この技術は、レコードを第１のバケット内に挿入する「最も最近に用いられた」（ＭＲＵ）アルゴリズムに従い、また、レコードを第１のバケットから取り出す「使われてから最も長く時間が経過している」（ＬＲＵ）アルゴリズムにも従う。チェーンの中で最も最近に用いられたレコードを第１のバケットに配置することにより、第１のバケットは１次キャッシュに留まることになり、このチェーンへのほとんどのアクセスは、アクセス時間の短縮を享受することになる。ＭＲＵアルゴリズム及びＬＲＵアルゴリズムの他にも多くのアルゴリズムがあり、そのいくつかについては後述する。
【００１２】
上述したように、改善されたハッシュシステムは、衝突を奨励し、衝突の順序を並び替えて高速化を図る。これに対し、従来のハッシュシステムでは、衝突を回避することを試みていた。このような従来のハッシュシステムでは、ハッシュテーブルが大きくなり過ぎることを回避する場合にだけ衝突が許容される。すなわち、衝突が少なすぎるハッシュテーブルが疎らに存在し、未使用のバケットを有することになる。本発明の別の態様では、ハッシュテーブルの中のバケットをメモリの個々のページに編成することで、ページフォールトの発生数を減少させる。たとえば、最も頻繁に用いられるレコードは第１のバケットに含まれているので、バケットのチェーンにおけるすべての第１のバケットは同じページに配置され、従って、このページはメインメモリの外にほとんどまったくスワップされないことが保証される。それぞれのチェーンにおける第２のバケットは、同じように同一のページに記憶される。それ以降も同様である。このスキームを用いると、最も頻繁に使用されるバケットがメモリの外にスワップされること希であるから、ページフォールトの数は減少する。これとは別に、チェーンの中の最後のバケットを単一のページにおける最初の２つ又は３つのバケットの後に記憶する方法がある。この場合には、最初の２つ又は３つのバケットを超えてあるエントリへのアクセスがなされると、以後のそれぞれのバケットをサーチすることによって多くのページフォールトが生じる場合とは異なり、高々１つのページフォールトが生じるだけである。
【００１３】
実施形態の詳細な説明
図２は、本発明の好適実施例を実施するのに適したコンピュータシステム２００を示す。コンピュータシステム２００は、メモリ２０２と、２次記憶装置２０４と、米国カリフォルニア州サンタクララ所在のインテルコーポレーションから入手可能なＰＥＮＴＩＵＭプロセッサのような中央処理装置（ＣＰＵ）と、入力デバイス２０８と、ビデオディスプレイ２１０とを含む。メモリ２０２は、２次記憶装置２０４におけるハッシュテーブル２１４を操作するハッシュマネージャ２１２を含む。ハッシュテーブル２１４は、図面では２次記憶装置２０４に存在するように示されているが、ランタイムにおいてメモリ２０２にロードされてメモリの中に存在する間に処理されることは、当業者に明らかである。ＣＰＵ２０６は、メモリキャッシュ２１６を有する。
【００１４】
図３は、ハッシュテーブル２１４をより詳細に示している。ハッシュテーブル２１４は、バケット３０２〜３１２のチェーンを含む。チェーン３０２〜３１２はそれぞれが互いにリンクした多くの個別的なバケット（例えば、バケット３１４〜３２４）である。それぞれのバケットは多くのエントリを有し、それぞれのエントリはデータ又はレコードを含む。図４Ａは、各バケットチェーン３０２〜３１２における第１のバケット（例えば３１４）のより詳細なダイアグラムである。バケット３１４は、１つのキャッシュラインの中に適合する３２バイトの長さを有し、次の５つのフィールドを含む。すなわち、４バイトであってバケットのチェーン全体の中の多数のエントリの含む多数のエントリのフィールド４０２と、それぞれが８バイトであってハッシュテーブルに記憶されているレコードを実際に含む３つのエントリフィールドと、４バイトであってバケットのチェーンにおいて次のバケットを参照するポインタ４１０とである。エントリ４０４、４０６及び４０８は、図４Ｃに示されているフォーマットを有する。エントリ（例えば、４０４）は、キー及びデータを含む。しかし、キー部分は当該キーへのポインタを含みデータ部分は当該データへのポインタを含む場合があることは、当業者には明らかである。より多くのエントリを１つのバケットの中に適合させることでより良い性能が達成されることを理解すべきである。よって、データが大きい場合には、データ自身を記憶する代わりに、当該データへのポインタを用いることが望ましいことがある。最初のバケットの後にある後続のバケット（例えば、３１６〜３１４）は、それぞれが、図４Ｂに示されているようなフォーマットを有する。バケット４１２は、全体で３２バイトの長さを有していてキャッシュラインサイズに対応しており、３つの８バイトデータエントリ４２０、４２２及び４２４と、８バイトであってバケットのチェーンにおける次のバケットへのポインタ４２６（ポインタの４バイトが用いられるのが典型的）とを含む。
【００１５】
図５は、本発明の好適実施例によるハッシュシステムを作成する際に実行されるステップのフローチャートを示す。好適実施例によるハッシュ機構を作成する際に実行される第１のステップは、制限された数のインデックスが衝突を促進するように生成されるようにハッシュ関数を選択し、この数のチェーンを有するハッシュテーブルを作成することである（ステップ５０２）。改善されたハッシュシステムにおいて用いられるように選ばれたハッシュ関数は、衝突を生じるのに十分なほど少数のインデックスを生成するように選択される。ハッシュテーブル２１４は、ハッシュ関数によって生成されたインデックスを収容するための十分なチェーンを有するように構成される。例えば、ハッシュ関数のために用いられるキーが８桁の数であり、任意の時点で用いられるキーの値が約３０００個あって、キー値の最後の２桁がハッシュインデックスとして選択されるようなハッシュ関数である場合には、３０００個のキーがバケットの１００個のチェーンにだけマップされ、従って、平均では、バケットのそれぞれのチェーンは３０個のエントリを含む。このように、改善されたハッシュ機構は、衝突を促進するように構成されている。従って、このステップでは、広範囲のキー値がハッシュ関数に入力されるようにハッシュ関数が選択される。しかし、ハッシュ関数は、ハッシュテーブルの中への非常に限られた範囲のインデックスを生成する。次に、ハッシュテーブルが、この限られた数のチェーンを用いて実現される。ハッシュ関数を選択してハッシュテーブルを作成した後で、ハッシュテーブルの中にものが配置される（populated）（ステップ５０４）。このステップでは、ランタイムの前にテーブルに追加される必要があるデータが存在することがありうる（例えば、初期データ）。このステップでは、それぞれのレコードに対するインデックスがハッシュされバケットのどのチェーンにレコードが属するのかが判断される。そして、このレコードは、バケットのチェーンの中の第１のバケットにおける第１のエントリに追加される。このチェーンの中のそれ以後のエントリにおけるすべての以後のレコードは、１エントリ又は１位置だけ後方に移動される。レコードをハッシュテーブルに追加するこの技術はレコードが加えられる必要があるランタイムにおいても用いられることは明らかである。レコードをバケットチェーンに挿入する他の方法を用いることもできることを、当業者であれば理解するはずである。
【００１６】
図６は、データにアクセスするリクエストを受けたときに、ランタイムにおいてハッシュマネージャに実行されるステップのフローチャートを示している。ハッシュマネージャが実行する第１のステップは、データアクセスリクエストを受けることである（ステップ６０２）。データアクセスリクエストはデータのキーを含む。次に、ハッシュマネージャは、キーをインデックスの中にハッシュする（ステップ６０４）。このステップで、ハッシュマネージャは、ハッシュ関数を用いてインデックスを決定する。インデックスを決定すると、ハッシュマネージャは、インデックスによって参照されたバケットのチェーンにアクセスし、キーと一致するリクエストされたレコードを見つけるまでそれぞれのバケットの中のそれぞれのエントリを直線状にサーチすることによって、リクエストされているレコードをハッシュテーブルの中で探し当てる（ステップ６０６）。上述したように、チェーンの中のそれぞれのバケットがアクセスされると、それに対応するキャッシュラインがプロセッサによって１次キャッシュに運ばれる。ハッシュマネージャは、リクエストされたレコードを探し当てた後で、リクエストされたレコードをコーラに戻す（ステップ６０８）。レコードをコーラに戻した後で、ハッシュマネージャは、第１のバケットにおける第１のエントリとリクエストされたレコードが存在するエントリとの間のチェーンの中のレコードの順序を並び替え、このチェーンへの以後のアクセスに関するシステムの性能を改善する。この時点で、順序を並び替えられるレコードは、１次キャッシュに現に記憶されているキャッシュラインを有するバケットに記憶される。このように、順序の並び替えは名目の処理時間を用いる。この順序並び替えは、ステップ６１０及び６１２で実行される。
【００１７】
レコードの順序を変更する際に実行される第１のステップは、リクエストされたレコードを第１のバケットの第１のエントリの中にハッシュマネージャが挿入することである（ステップ６１０）。次いで、ハッシュマネージャは、そのエントリに以前に含まれていたレコードとそのエントリ以後のすべてのエントリに含まれているレコードとを、返却されたレコードがそこから検索されるエントリに到達するまで、１エントリだけ後方に移動させる（ステップ６１２）。図７は、ステップ６１０及び６１２に従って順序が変更されたバケットチェーン７００を示している。バケットチェーン７００は５つのバケット７０２〜７１０を含んでいて、返却されたレコードはバケット７０８の第２のエントリから検索される。レコードがバケット７０８から検索されると、バケット７０２の第１のエントリに挿入される。そして、第１のバケット７０２の第１のエントリに以前に記憶されていたレコードとバケット７０８の第１のエントリに至るまでのそれ以降のエントリにおけるすべてのレコードとは、１つの位置だけ戻され、次のエントリに記憶される。このようにして、図７に示されているように、ハッシュマネージャは、データを第１のバケットに挿入するＭＲＵアルゴリズムと第１のバケットからデータを取り出すＬＲＵアルゴリズムとの両方を実行したことになる。
【００１８】
図８は、リクエストされたレコードをコーラに返却した後で、バケットチェーン８００におけるデータを再編成する第１の別の実施例を示している。このシステムでは、限られた数（ｎ）のバケットが予め決定されていて（例えば、ｎ＝２）、データリクエストが満足された後で、この数のバケットだけが再編成される。例えば、チェーン８００は５つのバケット８０２〜８１０を有する。バケット８０８の第２のエントリに含まれているレコードを検索する際に、返却されたレコードは第１のバケット８０２の第１のエントリに挿入される。次に、それぞれのレコードを１エントリだけ後方に移動させることによってバケット８０２、８０４及び８０８が再編成され（ただし、バケット８０６は再編成されない）、バケット８０４の最後のエントリに記憶されたレコードはバケット８０８の第１のエントリ内に挿入される。このようにしてバケットのチェーンを再編成することで、データリクエストを満足させることに応じて実行されなければならない処理の量が減少する。しかし、依然としてＭＲＵデータを第１のバケットの中に配置することにより、１次キャッシュのヒットの数が最大になり、１次キャッシュのミスの数が最小になる。
【００１９】
図９は、バケットチェーン９００の再編成について位置指向的（position-oriented）なアプローチを採用している第２の実施例を示している。この実施例では、レコードは、あるバケットの中で、もともとそのレコードが存在したエントリと同じ相対位置を有するエントリに再配置される。バケットチェーン９００には、５つのバケット９０２〜９１０が存在する。この例では、コーラに戻されたレコードは、バケット９０８の第２のエントリにおいて見出される。レコードをコーラに戻した後で、戻されたレコードは第１のバケット９０２の第２のエントリ（「第２の位置」）内に挿入され、次に、それ以降のそれぞれのバケットの第２の位置に含まれているレコードは、戻されたデータがもともと存在していたエントリに到達するまで次のバケットの第２の位置に戻される。この位置指向的なアプローチを用いると、再編成プロセスは、データリクエストが満足された後に最小にされるが、ＭＲＵデータは依然として、第１のバケット内に挿入される。他のエントリ再編成スキームも使用できることは当業者には明らかである。例えば、ＭＲＵデータをバケットチェーンの中で数バケットだけ前方に移動することも可能であり、その場合でもやはり性能が改善される。
【００２０】
ページフォールトの減少
本発明の１つの側面は、ハッシュテーブルが利用されている間のランタイムで生じるページフォールトの数を減らすことに関する。図１０は、図３のハッシュテーブルのバケットを複数のページ１００２〜１０１２に記憶しハッシュテーブルにアクセスするときに生じるページフォールトの数を減らす技術を示している。バケット１００２〜１０１２のそれぞれのグループはメモリの単一ブロック（すなわち、１つのページ）に記憶され、そのページの中のすべてのバケットはメモリの中に及びメモリの外へ相互にスワップされる。典型的なページサイズは４Ｋ〜１６Ｋであるのが通常である。特定のオペレーティングシステムサービスを用いて、ページが割り当てられる。改善されたハッシュシステムは、ＭＲＵレコードがそれぞれのチェーンの最初のバケットを含むページ１００２に記憶されることを保証するので、このページは常にメモリの中に存在するのが典型的であって、このページに関するページフォールトはほとんど生じない。同様に、改善されたハッシュシステムは、ＬＲＵデータがチェーンの終端部に近くのバケットに見つけられることを保証する。このように、ページ１００８の中の使用頻度がより低いデータエントリは単一のページには記憶されないため、この技術によりこのページがメモリの中にスワップされる回数が最小化される。当業者であれば、バケットのグループ（例えば、１００２）が単一のページの中に適合しない場合であっても追加的な１又は複数のページに記憶され得ることを理解するはずである。
【００２１】
上述したような個々のページの中へのバケットのグループ化とは別の実施例が、図１１に示されている。図１１では、各チェーンの中の最初の所定数（例えば２個）のバケットだけが、同じページ（例えば、ページ１１０２及び１１０４）に記憶されている。これらの所定数のバケットが個々のページに記憶された後で、チェーンの中の残りのバケット（例えば、３１８、３２０、３２２、３２４）はすべてが単一のページ（例えば、１１０６）に記憶される。この技術によれば、ハッシュ機構がある特定のレコードを求めてバケットのチェーンのエントリをスキャンする際にページフォールトが複数回ではなく１回だけ生ずることが保証される。例えば、チェーン３０２がスキャンされる場合には、ハッシュ機構がバケット３１８のエントリのスキャンするとき、バケットのチェーンの残りについてエントリのスキャンを終了するまでに、最悪の場合でも１回のページフォールトだけしか生じない。このようにして、ページフォールトの数が最小化される。
【００２２】
バケットをページの中にグループ化する別の実施形態では、１つのページの中に複数のバケットを記憶することができる。例えば、それぞれのチェーンの中１番目及び２番目のバケットを１つのページに記憶することができる。当業者であれば、これ以外のバケット編成を本発明において使用可能であることを理解するはずである。以上では、本発明を好適実施例を用いて説明した。しかし、当業者は、特許請求の範囲において定義されている本発明の精神及び範囲から逸脱せずに形式や詳細に関する様々な変更が可能であることを理解するはずである。