JP4218997B2 - システム性能を改善するためのハシュテーブルのハシュバケットにおけるコリジョンの再編成 - Google Patents
システム性能を改善するためのハシュテーブルのハシュバケットにおけるコリジョンの再編成 Download PDFInfo
- Publication number
- JP4218997B2 JP4218997B2 JP37021897A JP37021897A JP4218997B2 JP 4218997 B2 JP4218997 B2 JP 4218997B2 JP 37021897 A JP37021897 A JP 37021897A JP 37021897 A JP37021897 A JP 37021897A JP 4218997 B2 JP4218997 B2 JP 4218997B2
- Authority
- JP
- Japan
- Prior art keywords
- bucket
- entry
- data
- chain
- buckets
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000008521 reorganization Effects 0.000 title description 5
- 238000000034 method Methods 0.000 claims description 43
- 230000006870 function Effects 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 7
- 230000007246 mechanism Effects 0.000 description 17
- 238000012545 processing Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000007423 decrease Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000013479 data entry Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000008707 rearrangement Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
【発明の属する技術分野】
本発明は、広くはデータ処理システムに関し、特に、ハッシュテーブルのハッシュバケットにおける衝突(コリジョン)の再編成に関する。
【0002】
【従来の技術】
プロセッサが高速化するにつれて、メインメモリへのアクセスが、全体的な性能(パフォーマンス)の向上におけるボトルネックになっている。従って、性能を改善するために、メモリキャッシュスキームが、メインメモリに関するボトルネックの影響を低下させるために採用されてきている。PENTIUMプロセッサでは、非常に高速な1次キャッシュと高速な2次キャッシュとが用いられているそのようなメモリキャッシュスキームを採用している。プロセッサがメモリからデータを読み出す必要があるときには、プロセッサは最初に1次キャッシュをチェックしてデータを探し出す。リクエストされたデータが1次キャッシュには見つからないときには、次に、2次キャッシュがチェックされる。2次キャッシュは、1次キャッシュと比較すればアクセス時間は遅いのであるが、依然としてメインメモリよりは高速である。データが2次キャッシュで見つかれば、データはプロセッサに戻され、データを記憶していた2次キャッシュのライン(「キャッシュライン」)が、1次キャッシュにコピーされる。データは、32バイトキャッシュラインに関して、1次キャッシュと2次キャッシュとの双方に記憶される。1次キャッシュは、サイズが8KBであるので、256個のキャッシュラインを記憶できる。2次キャッシュは、典型的には256KB〜512KBであり、8192個から16384個のキャッシュラインを記憶できる。
【0003】
2次キャッシュをチェックした後でもデータが依然として見つからないならば、2次キャッシュより著しく遅いアクセス時間を有するメインメモリが、アクセスされる。メインメモリがアクセスされると、リクエストされたデータだけでなく、32バイトのメモリライン全体が戻される。プロセッサはリクエストされたデータを受け取り、1次及び2次キャッシュの双方が32バイトのメモリライン全体を受け取る。32バイトのメモリラインは、次回にプロセッサがメモリからデータを読み出すことが必要なときにこのキャッシュラインの中でデータが見つかることを希望して、これらのキャッシュに記憶される。コストを視野に入れると、1次キャッシュへのアクセスには1プロセッササイクルを要し、2次キャッシュへのアクセスには4〜12プロセッササイクルを要し、メインメモリへのアクセスには50プロセッササイクルを要するのが通常である。従って、メインメモリに1回だけアクセスするのに要する間に、1次キャッシュを約50回サーチすることが可能である。PENTIUMプロセッサのキャッシュスキームは、Anderson及びShanley著、「PentiumProcessor System Architecture」、第2版、35〜60頁、Addison−Wesley(1995年)において、より詳細に説明されており、この書籍の内容はこの出願において援用する。
【0004】
ハッシュ機構は、多くのコンピュータシステムにおいて重要な役割を演じる。従来のハッシュ機構は、ハッシュテーブルとして知られているデータ構造を用いて、記憶されたデータへの直接的なアクセスを提供する。従来のハッシュ機構100のそのような一例が図1に示されている。ハッシュ機構100は、キー102、ハッシュ関数104、ハッシュインデックス106及びハッシュテーブル108を含む。ハッシュテーブル108は、多数のハッシュバケット110〜130を含んでおり、それぞれのハッシュバケットは、レコードなどのデータを含み、レコードのフィールドの中の1つがキー102として機能する。ハッシュテーブル108にアクセスするためにキー102がハッシュ関数104に入力されると、ハッシュ関数104は、特定のハッシュバケット(例えば114)を参照するインデックス106(又はハッシュアドレス)を生じる。ハッシュバケット114の中には、キーと一致(match)するデータが存在する。ハッシュテーブルが有用であるのは、キー値の大きな範囲をインデックスのそれよりも小さな範囲内にマップすることによってデータへの直接アクセスを提供するからである。このようにして、例えば0から99999999までのキー値の範囲を有する8桁のキーが用いられ10個よりも少ない値が用いられる場合には、ハッシュ機構を用いると、10個のバケットを含むハッシュテーブルを参照する1桁のインデックスにそのキーをハッシュすることができる。従って、1億個のハッシュバケットを有しているが非常に限られた数のバケットだけしか用いられないようなハッシュテーブルを用いるのではなく、バケットが10個だけのハッシュテーブルを用いながら、システムリソースをより有効に用いることにより、依然としてデータへの直接的なアクセスを提供することができる。
【0005】
関数「h」104はそれぞれのキー値を正確に1個のインデックスにマップするので、同じキー値が複数回用いられるときは常に、ハッシュテーブル108への同じインデックス106が生成される。しかし、データをハッシュテーブル108に記憶しようとするときに、複数個のキー値が同じインデックス106にハッシュされる場合もある。この状況を、「衝突(コリジョン)」が発生していると称する。衝突が生じると、データはインデックスによって示されたハッシュバケットに記憶されなければならないから、複数のレコードがこのハッシュバケットに記憶されることになる。ハッシュバケット118は、衝突が生じ複数個のレコードがハッシュバケットに記憶された後のハッシュバケットの状態を示している。ハッシュバケット118では、「データ3」というデータの1レコードが、「データ4」というレコードの第2のレコードにリンクされている。衝突が更に生じるにつれて、ハッシュバケットはより混雑した状態(more populated)になるので、ハッシュテーブルの効用は低下し始める。その理由は、ハッシュバケットの中にあるそれぞれのレコードへの直接的なアクセスがもはや不可能であるからである。その代わりに、キー値をインデックスの中にハッシュした後、インデックスは互いにリンクした多数のレコードを包むハッシュバケットを参照し、次に、正しいレコードを決定するためにハッシュバケットをサーチしなければならないが、これには、多くの処理時間を要する。以上のような理由から、従来のハッシュシステムは衝突を回避するように設計されているのである。ハッシュテーブルは、それ自体が記憶しているデータへの直接アクセスを提供するから、多くの既存のコンピュータシステムの重要な部分である。従って、ハッシュ機構の性能を改善することが望まれている。しかし、従来のハッシュ機構は、今日のプロセッサのキャッシュアーキテクチャを利用できていない。
【0006】
【課題を解決するための手段】
性能を改善するために今日の多くのプロセッサのキャッシュアーキテクチャの利点を得る改善されたハッシュシステムを提供する。PENTIUMプロセッサのような今日の最新のプロセッサの幾らかは、1次キャッシュと2次キャッシュとを利用する2レベルキャッシュスキームを有し、1次キャッシュに含まれているデータには、メインメモリのデータの場合より50〜150倍も速くアクセスすることができる。改善されたハッシュシステムは、バケットが多くのエントリを含むように衝突が起こることを保証し、ランタイムにおいてバケットの中のエントリの順序を変更することでプロセッサの1次キャッシュが用いられる回数を増加させメインメモリが用いられる回数を減少させることで、ハッシュシステムの性能を改善する。
【0007】
本発明の第1の態様では、コンピュータシステムにおいて、エントリを含むバケットを有するハッシュテーブルのデータにアクセスする方法が提供される。複数のエントリが、データを含む占領されたエントリとして存在している。この方法では、データをハッシュテーブルに入力するリクエストを受け取り、複数の占領されたエントリがそれぞれのバケットに含まれるように衝突を生成するハッシュ機構を生成する。この方法は、また、ハッシュ機構がハッシュテーブルにアクセスする複数のリクエストを受け取る。ハッシュ機構がハッシュテーブルにアクセスするためのこれらの複数のリクエストを処理する間に、この方法は、少なくとも1つのバケットの少なくとも1つの占領されたエントリの中のデータの配置を少なくとも1つのバケットの中の占領された複数のエントリの間で新しい位置に変更して、ハッシュ機構の性能を改善する。
【0008】
本発明の第2の態様では、メモリとプロセッサとあるサイズを有するキャッシュラインとを有するコンピュータシステムが提供される。メモリは、ハッシュマネージャとバケットのチェーンを有するハッシュテーブルとを含む。それぞれのバケットは、データを記憶するエントリを含んでいて、キャッシュラインサイズである。ハッシュマネージャは、ハッシュテーブルの中のデータにアクセスするリクエストを受け取り、ハッシュテーブルの中のデータへアクセスし、MRUデータをそれぞれのチェーンの最初のバケットの中に当該チェーンがアクセスされた後で配置する。プロセッサは、ハッシュマネージャを動作させる。本発明の第3の態様では、データにアクセスするページを有するメモリを備えたコンピュータシステムにおいて、ある方法が提供される。この方法は、バケットのチェーンを有するハッシュテーブルを作成し、それぞれのバケットはデータを記憶する複数のエントリを有している。それぞれのチェーンのバケットは、最初のバケットから最後のバケットまでのシーケンスを形成する。それぞれのバケットは、このシーケンスとの関係においてある位置を有している。この方法は、更に、シーケンスの中において同じの相対的位置を有するチェーンのバケットを、メモリの1つのページの中に記憶する。
【0009】
【発明の実施の形態】
本発明の好適実施例では、今日の多くのプロセッサのキャッシュアーキテクチャを利用する改善されたハッシュシステムが提供され、性能が改善される。PENTIUMプロセッサなどの今日の最新のプロセッサのいくつかは、1次キャッシュと2次キャッシュとを用いる2レベルキャッシュスキームを有しており、1次キャッシュに含まれるデータには、メインメモリにおけるデータより50〜150倍も高速にアクセス可能である。改善されたハッシュシステムでは、バケットが多くのレコードを含むように衝突が生じることが保証され、ランタイムにおいてバケットの中のレコードの順序が並び替えられることによって、プロセッサの1次キャッシュが使用される回数が増加し、メインメモリが使用される回数が減少する。こうして、ハッシュシステムの性能が改善される。
【0010】
概観
改善されたハッシュシステムは、多数のハッシュバケットを備えたハッシュテーブルを維持する。それぞれのハッシュバケットは、実際には、それぞれの長さが32バイトである「バケット」のチェーン(メモリの全体ラインすなわちキャッシュライン)である。それぞれのバケットは多数のエントリを有し、それぞれのエントリは1つのレコードを記憶する。改善されたハッシュシステムは、以下の原理を利用することにより、性能が改善される。バケットのチェーンにおけるエントリはリクエストされたレコードを見つけるために直線状に(linearly)サーチされるので、リクエストされたレコードがチェーンの中に見つかる度に、その前にあるそれぞれのバケットの中のそれぞれのエントリにアクセスし、そのエントリがリクエストされたレコードを記憶しているかどうかを判断しなければならない。それぞれのバケットにおけるそれぞれのエントリがアクセスされるので、それに対応するメモリラインは、もともと配置されていた場所とは関係なく、1次キャッシュの中に移動される。従って、リクエストされたレコードが見つけられると、実質的にすべての先行するバケット(すなわち、対応するキャッシュライン)が1次キャッシュにロードされることが保証される。このようにして、処理時間をほとんど要することなく、レコードを最適に再度並び替えることが可能になる。処理時間をほとんど要しないのであるが、1次キャッシュのヒット数を増加させてメインメモリへのアクセス回数を減少させることにより、チェーンへの以後のアクセスに関して実質的な性能上の効果を生じる。
【0011】
リクエストされたレコードがあるチェーンで見つかると、エントリの中のレコードの順序を変更することにより、リクエストされたレコードがそのチェーンの中の第1のバケットの第1のエントリに存在するようにする。すべての他のレコードは1つのエントリ分だけ後方に移動される。この技術は、最も最近に用いられたレコードはすぐにまたアクセスされることを想定している。この技術は、第1のバケットのキャッシュラインに最も頻繁に用いられると想定されるレコードを配置し、それにより、第1のバケットのためのキャッシュラインが1次キャッシュの中に留まることと、1次キャッシュの使用が増加し他方でメインメモリの使用が減少することとが保証される。この技術は、レコードを第1のバケット内に挿入する「最も最近に用いられた」(MRU)アルゴリズムに従い、また、レコードを第1のバケットから取り出す「使われてから最も長く時間が経過している」(LRU)アルゴリズムにも従う。チェーンの中で最も最近に用いられたレコードを第1のバケットに配置することにより、第1のバケットは1次キャッシュに留まることになり、このチェーンへのほとんどのアクセスは、アクセス時間の短縮を享受することになる。MRUアルゴリズム及びLRUアルゴリズムの他にも多くのアルゴリズムがあり、そのいくつかについては後述する。
【0012】
上述したように、改善されたハッシュシステムは、衝突を奨励し、衝突の順序を並び替えて高速化を図る。これに対し、従来のハッシュシステムでは、衝突を回避することを試みていた。このような従来のハッシュシステムでは、ハッシュテーブルが大きくなり過ぎることを回避する場合にだけ衝突が許容される。すなわち、衝突が少なすぎるハッシュテーブルが疎らに存在し、未使用のバケットを有することになる。本発明の別の態様では、ハッシュテーブルの中のバケットをメモリの個々のページに編成することで、ページフォールトの発生数を減少させる。たとえば、最も頻繁に用いられるレコードは第1のバケットに含まれているので、バケットのチェーンにおけるすべての第1のバケットは同じページに配置され、従って、このページはメインメモリの外にほとんどまったくスワップされないことが保証される。それぞれのチェーンにおける第2のバケットは、同じように同一のページに記憶される。それ以降も同様である。このスキームを用いると、最も頻繁に使用されるバケットがメモリの外にスワップされること希であるから、ページフォールトの数は減少する。これとは別に、チェーンの中の最後のバケットを単一のページにおける最初の2つ又は3つのバケットの後に記憶する方法がある。この場合には、最初の2つ又は3つのバケットを超えてあるエントリへのアクセスがなされると、以後のそれぞれのバケットをサーチすることによって多くのページフォールトが生じる場合とは異なり、高々1つのページフォールトが生じるだけである。
【0013】
実施形態の詳細な説明
図2は、本発明の好適実施例を実施するのに適したコンピュータシステム200を示す。コンピュータシステム200は、メモリ202と、2次記憶装置204と、米国カリフォルニア州サンタクララ所在のインテルコーポレーションから入手可能なPENTIUMプロセッサのような中央処理装置(CPU)と、入力デバイス208と、ビデオディスプレイ210とを含む。メモリ202は、2次記憶装置204におけるハッシュテーブル214を操作するハッシュマネージャ212を含む。ハッシュテーブル214は、図面では2次記憶装置204に存在するように示されているが、ランタイムにおいてメモリ202にロードされてメモリの中に存在する間に処理されることは、当業者に明らかである。CPU206は、メモリキャッシュ216を有する。
【0014】
図3は、ハッシュテーブル214をより詳細に示している。ハッシュテーブル214は、バケット302〜312のチェーンを含む。チェーン302〜312はそれぞれが互いにリンクした多くの個別的なバケット(例えば、バケット314〜324)である。それぞれのバケットは多くのエントリを有し、それぞれのエントリはデータ又はレコードを含む。図4Aは、各バケットチェーン302〜312における第1のバケット(例えば314)のより詳細なダイアグラムである。バケット314は、1つのキャッシュラインの中に適合する32バイトの長さを有し、次の5つのフィールドを含む。すなわち、4バイトであってバケットのチェーン全体の中の多数のエントリの含む多数のエントリのフィールド402と、それぞれが8バイトであってハッシュテーブルに記憶されているレコードを実際に含む3つのエントリフィールドと、4バイトであってバケットのチェーンにおいて次のバケットを参照するポインタ410とである。エントリ404、406及び408は、図4Cに示されているフォーマットを有する。エントリ(例えば、404)は、キー及びデータを含む。しかし、キー部分は当該キーへのポインタを含みデータ部分は当該データへのポインタを含む場合があることは、当業者には明らかである。より多くのエントリを1つのバケットの中に適合させることでより良い性能が達成されることを理解すべきである。よって、データが大きい場合には、データ自身を記憶する代わりに、当該データへのポインタを用いることが望ましいことがある。最初のバケットの後にある後続のバケット(例えば、316〜314)は、それぞれが、図4Bに示されているようなフォーマットを有する。バケット412は、全体で32バイトの長さを有していてキャッシュラインサイズに対応しており、3つの8バイトデータエントリ420、422及び424と、8バイトであってバケットのチェーンにおける次のバケットへのポインタ426(ポインタの4バイトが用いられるのが典型的)とを含む。
【0015】
図5は、本発明の好適実施例によるハッシュシステムを作成する際に実行されるステップのフローチャートを示す。好適実施例によるハッシュ機構を作成する際に実行される第1のステップは、制限された数のインデックスが衝突を促進するように生成されるようにハッシュ関数を選択し、この数のチェーンを有するハッシュテーブルを作成することである(ステップ502)。改善されたハッシュシステムにおいて用いられるように選ばれたハッシュ関数は、衝突を生じるのに十分なほど少数のインデックスを生成するように選択される。ハッシュテーブル214は、ハッシュ関数によって生成されたインデックスを収容するための十分なチェーンを有するように構成される。例えば、ハッシュ関数のために用いられるキーが8桁の数であり、任意の時点で用いられるキーの値が約3000個あって、キー値の最後の2桁がハッシュインデックスとして選択されるようなハッシュ関数である場合には、3000個のキーがバケットの100個のチェーンにだけマップされ、従って、平均では、バケットのそれぞれのチェーンは30個のエントリを含む。このように、改善されたハッシュ機構は、衝突を促進するように構成されている。従って、このステップでは、広範囲のキー値がハッシュ関数に入力されるようにハッシュ関数が選択される。しかし、ハッシュ関数は、ハッシュテーブルの中への非常に限られた範囲のインデックスを生成する。次に、ハッシュテーブルが、この限られた数のチェーンを用いて実現される。ハッシュ関数を選択してハッシュテーブルを作成した後で、ハッシュテーブルの中にものが配置される(populated)(ステップ504)。このステップでは、ランタイムの前にテーブルに追加される必要があるデータが存在することがありうる(例えば、初期データ)。このステップでは、それぞれのレコードに対するインデックスがハッシュされバケットのどのチェーンにレコードが属するのかが判断される。そして、このレコードは、バケットのチェーンの中の第1のバケットにおける第1のエントリに追加される。このチェーンの中のそれ以後のエントリにおけるすべての以後のレコードは、1エントリ又は1位置だけ後方に移動される。レコードをハッシュテーブルに追加するこの技術はレコードが加えられる必要があるランタイムにおいても用いられることは明らかである。レコードをバケットチェーンに挿入する他の方法を用いることもできることを、当業者であれば理解するはずである。
【0016】
図6は、データにアクセスするリクエストを受けたときに、ランタイムにおいてハッシュマネージャに実行されるステップのフローチャートを示している。ハッシュマネージャが実行する第1のステップは、データアクセスリクエストを受けることである(ステップ602)。データアクセスリクエストはデータのキーを含む。次に、ハッシュマネージャは、キーをインデックスの中にハッシュする(ステップ604)。このステップで、ハッシュマネージャは、ハッシュ関数を用いてインデックスを決定する。インデックスを決定すると、ハッシュマネージャは、インデックスによって参照されたバケットのチェーンにアクセスし、キーと一致するリクエストされたレコードを見つけるまでそれぞれのバケットの中のそれぞれのエントリを直線状にサーチすることによって、リクエストされているレコードをハッシュテーブルの中で探し当てる(ステップ606)。上述したように、チェーンの中のそれぞれのバケットがアクセスされると、それに対応するキャッシュラインがプロセッサによって1次キャッシュに運ばれる。ハッシュマネージャは、リクエストされたレコードを探し当てた後で、リクエストされたレコードをコーラに戻す(ステップ608)。レコードをコーラに戻した後で、ハッシュマネージャは、第1のバケットにおける第1のエントリとリクエストされたレコードが存在するエントリとの間のチェーンの中のレコードの順序を並び替え、このチェーンへの以後のアクセスに関するシステムの性能を改善する。この時点で、順序を並び替えられるレコードは、1次キャッシュに現に記憶されているキャッシュラインを有するバケットに記憶される。このように、順序の並び替えは名目の処理時間を用いる。この順序並び替えは、ステップ610及び612で実行される。
【0017】
レコードの順序を変更する際に実行される第1のステップは、リクエストされたレコードを第1のバケットの第1のエントリの中にハッシュマネージャが挿入することである(ステップ610)。次いで、ハッシュマネージャは、そのエントリに以前に含まれていたレコードとそのエントリ以後のすべてのエントリに含まれているレコードとを、返却されたレコードがそこから検索されるエントリに到達するまで、1エントリだけ後方に移動させる(ステップ612)。図7は、ステップ610及び612に従って順序が変更されたバケットチェーン700を示している。バケットチェーン700は5つのバケット702〜710を含んでいて、返却されたレコードはバケット708の第2のエントリから検索される。レコードがバケット708から検索されると、バケット702の第1のエントリに挿入される。そして、第1のバケット702の第1のエントリに以前に記憶されていたレコードとバケット708の第1のエントリに至るまでのそれ以降のエントリにおけるすべてのレコードとは、1つの位置だけ戻され、次のエントリに記憶される。このようにして、図7に示されているように、ハッシュマネージャは、データを第1のバケットに挿入するMRUアルゴリズムと第1のバケットからデータを取り出すLRUアルゴリズムとの両方を実行したことになる。
【0018】
図8は、リクエストされたレコードをコーラに返却した後で、バケットチェーン800におけるデータを再編成する第1の別の実施例を示している。このシステムでは、限られた数(n)のバケットが予め決定されていて(例えば、n=2)、データリクエストが満足された後で、この数のバケットだけが再編成される。例えば、チェーン800は5つのバケット802〜810を有する。バケット808の第2のエントリに含まれているレコードを検索する際に、返却されたレコードは第1のバケット802の第1のエントリに挿入される。次に、それぞれのレコードを1エントリだけ後方に移動させることによってバケット802、804及び808が再編成され(ただし、バケット806は再編成されない)、バケット804の最後のエントリに記憶されたレコードはバケット808の第1のエントリ内に挿入される。このようにしてバケットのチェーンを再編成することで、データリクエストを満足させることに応じて実行されなければならない処理の量が減少する。しかし、依然としてMRUデータを第1のバケットの中に配置することにより、1次キャッシュのヒットの数が最大になり、1次キャッシュのミスの数が最小になる。
【0019】
図9は、バケットチェーン900の再編成について位置指向的(position-oriented)なアプローチを採用している第2の実施例を示している。この実施例では、レコードは、あるバケットの中で、もともとそのレコードが存在したエントリと同じ相対位置を有するエントリに再配置される。バケットチェーン900には、5つのバケット902〜910が存在する。この例では、コーラに戻されたレコードは、バケット908の第2のエントリにおいて見出される。レコードをコーラに戻した後で、戻されたレコードは第1のバケット902の第2のエントリ(「第2の位置」)内に挿入され、次に、それ以降のそれぞれのバケットの第2の位置に含まれているレコードは、戻されたデータがもともと存在していたエントリに到達するまで次のバケットの第2の位置に戻される。この位置指向的なアプローチを用いると、再編成プロセスは、データリクエストが満足された後に最小にされるが、MRUデータは依然として、第1のバケット内に挿入される。他のエントリ再編成スキームも使用できることは当業者には明らかである。例えば、MRUデータをバケットチェーンの中で数バケットだけ前方に移動することも可能であり、その場合でもやはり性能が改善される。
【0020】
ページフォールトの減少
本発明の1つの側面は、ハッシュテーブルが利用されている間のランタイムで生じるページフォールトの数を減らすことに関する。図10は、図3のハッシュテーブルのバケットを複数のページ1002〜1012に記憶しハッシュテーブルにアクセスするときに生じるページフォールトの数を減らす技術を示している。バケット1002〜1012のそれぞれのグループはメモリの単一ブロック(すなわち、1つのページ)に記憶され、そのページの中のすべてのバケットはメモリの中に及びメモリの外へ相互にスワップされる。典型的なページサイズは4K〜16Kであるのが通常である。特定のオペレーティングシステムサービスを用いて、ページが割り当てられる。改善されたハッシュシステムは、MRUレコードがそれぞれのチェーンの最初のバケットを含むページ1002に記憶されることを保証するので、このページは常にメモリの中に存在するのが典型的であって、このページに関するページフォールトはほとんど生じない。同様に、改善されたハッシュシステムは、LRUデータがチェーンの終端部に近くのバケットに見つけられることを保証する。このように、ページ1008の中の使用頻度がより低いデータエントリは単一のページには記憶されないため、この技術によりこのページがメモリの中にスワップされる回数が最小化される。当業者であれば、バケットのグループ(例えば、1002)が単一のページの中に適合しない場合であっても追加的な1又は複数のページに記憶され得ることを理解するはずである。
【0021】
上述したような個々のページの中へのバケットのグループ化とは別の実施例が、図11に示されている。図11では、各チェーンの中の最初の所定数(例えば2個)のバケットだけが、同じページ(例えば、ページ1102及び1104)に記憶されている。これらの所定数のバケットが個々のページに記憶された後で、チェーンの中の残りのバケット(例えば、318、320、322、324)はすべてが単一のページ(例えば、1106)に記憶される。この技術によれば、ハッシュ機構がある特定のレコードを求めてバケットのチェーンのエントリをスキャンする際にページフォールトが複数回ではなく1回だけ生ずることが保証される。例えば、チェーン302がスキャンされる場合には、ハッシュ機構がバケット318のエントリのスキャンするとき、バケットのチェーンの残りについてエントリのスキャンを終了するまでに、最悪の場合でも1回のページフォールトだけしか生じない。このようにして、ページフォールトの数が最小化される。
【0022】
バケットをページの中にグループ化する別の実施形態では、1つのページの中に複数のバケットを記憶することができる。例えば、それぞれのチェーンの中1番目及び2番目のバケットを1つのページに記憶することができる。当業者であれば、これ以外のバケット編成を本発明において使用可能であることを理解するはずである。以上では、本発明を好適実施例を用いて説明した。しかし、当業者は、特許請求の範囲において定義されている本発明の精神及び範囲から逸脱せずに形式や詳細に関する様々な変更が可能であることを理解するはずである。
【図面の簡単な説明】
【図1】在来のハッシュ機構を示す。
【図2】本発明の好ましい実施形態を実施するために適当なコンピュータシステムを示す。
【図3】図2に示したハッシュテーブルのより詳細なダイアグラムを示す。
【図4A】図3に示した、バケットチェーンの第1のバケットのより詳細なダイアグラムを示す。
【図4B】図3のバケットチェーンにおける第1のバケットに続く、バケットのより詳細なダイアグラムを示す。
【図4C】図4Aのエントリのより詳細なダイアグラムを示す。
【図5】本発明の好ましい実施形態によるハッシュ機構を生成する際に実行されるステップのフローチャートを示す。
【図6】データアクセス要求を受けたとき、ハッシュマネージャによって実行されるステップのフローチャートを示す。
【図7】本発明の好ましい実施形態によるリオーダーされたバケットチェーンを示す。
【図8】本発明の第1変形実施形態によるリオーダーされたバケットチェーンを示す。
【図9】本発明の第2変形実施形態によるリオーダーされたバケットチェーンを示す。
【図10】メモリの個々のページ内に適合するように編成された図3のバケットを示す。
【図11】図3のバケットをメモリの個々のページ内に編成するための変形実施形態を示す。
【符号の説明】
102 キー
104 キー関数
106 インデックス
108 ハッシュテーブル
202 メモリ
212 ハッシュマネージャ
214 ハッシュテーブル
404−408 エントリ
410 ポインタ
Claims (23)
- キャッシュを有するプロセッサとバケットのチェーンを有するハッシュテーブルを記憶するメインメモリとを備えたコンピュータシステムにおいて、キーを有するレコードにアクセスする方法であって、それぞれのバケットはレコードを含むエントリを複数個有し、それぞれのチェーンの中のバケットは最初のバケットから最後のバケットに至るシーケンスを形成する、方法において、
キー値によって識別されるリクエストされたレコードにアクセスするリクエストをコーラから受け取るステップと、
ハッシュ関数を用いて、前記チェーンの中の1つを参照するインデックスの中に前記キー値をハッシュするステップと、
前記最初のバケットから開始するインデックス付きの前記チェーンの中のそれぞれのバケットにシーケンスとしてアクセスし、それぞれのアクセスされたバケットを前記キャッシュの中にロードして、アクセスされたそれぞれのバケットにおけるそれぞれのレコードのキー値を調べて前記レコードがリクエストされたレコードであるかどうかを判断することによって、前記リクエストされたレコードをサーチするステップと、
前記リクエストされたレコードを前記コーラに戻すステップと、
前記ロードされたバケットが前記キャッシュの中に存在する間に、前記キャッシュにロードされた前記バケットの中の前記レコードを再構成し、前記インデックス付きのチェーンへの以後のアクセスのパフォーマンスを改善するステップと、
を含むことを特徴とする方法。 - 請求項1記載の方法において、それぞれのバケットはエントリを有し、それぞれのバケットにおける複数のエントリはデータを記憶している占領されたエントリであり、前記レコードへのアクセスは、
前記バケットの中の1つのバケットにおける前記占領されたエントリの中の1つのエントリにおけるデータにアクセスするリクエストを受け取るステップと、
キャッシュラインの中に記憶される前記1つのバケットにアクセスするステップと、
前記1つのバケットの占領されたエントリに記憶されたデータを再構成して、前記1つのバケットへのアクセスに応答する前記1つのバケットへの以後のアクセスのパフォーマンスを改善するステップであって、前記再構成は、前記占領されたエントリの中の最初のエントリにおけるデータが前記占領されたエントリの中の2番目のエントリに移動されるように実行される、ステップと、
を更に含むことを特徴とする方法。 - 請求項2記載の方法において、前記バケットはキャッシュラインサイズであり、前記1つのバケットにアクセスするステップは前記1つのバケットが前記キャッシュラインの中の1つに正確に適合するように記憶されるステップを含むことを特徴とする方法。
- 請求項1記載の方法において、前記ハッシュテーブルはバケットのチェーンを有し、それぞれのバケットはデータを記憶する複数のエントリを有し、1つのチェーンの中の前記バケットの中の前記エントリは最初のバケットの最初のエントリから最後のバケットの最後のエントリに至るシーケンスを形成し、前記レコードへのアクセスは、
選択されたエントリに記憶されているリクエストされたデータにアクセスするリクエストを受け取るステップと、
前記選択されたエントリを含むチェーンにおけるバケットにアクセスするステップであって、前記バケットはキャッシュラインの1つに正確に適合するように記憶されているステップと、
前記リクエストされたデータを前記選択されたエントリから戻すステップと、
前記最初のバケットの前記最初のエントリに含まれるデータと前記最初のバケットの前記最初のエントリに続くエントリに含まれるデータとを、前記受け取るステップと前記アクセスするステップと前記戻すステップとに応答して前記シーケンスの中の次のエントリに移動させるステップと、
前記リクエストされたデータを前記チェーンの前記最初のバケットの前記最初のエントリに移動させるステップと、
を更に含むことを特徴とする方法。 - 請求項1記載の方法において、前記ハッシュテーブルはバケットのチェーンを有し、それぞれのバケットはデータを記憶する複数のエントリを有し、1つのチェーンの中の前記バケットは最初のバケットから最後のバケットに至るシーケンスを形成し、前記コンピュータシステムはキャッシュラインサイズを有するキャッシュラインを備えたキャッシュを有し、前記バケットは前記キャッシュラインサイズであり、前記レコードへのアクセスは、
前記ハッシュテーブルにアクセスする複数のリクエストを受け取るステップであって、それぞれのリクエストは前記チェーンの中の1つにおける前記バケットの中の1つにおける前記エントリの中の1つにおけるデータを示す、ステップと、
前記受け取られた複数のリクエストのそれぞれに対して、前記1つのチェーンにおける前記1つのバケットにおける前記1つのエントリにおける前記示されたデータにアクセスして、前記1つのバケットが前記キャッシュラインの中の1つに正確に適合するように記憶されるようにし、前記示されたデータにアクセスした後で、前記示されたデータを前記1つのチェーンにおける前記最初のバケットに移動させるステップと、
を更に含むことを特徴とする方法。 - 請求項5記載の方法において、前記示されたデータを移動させるステップは、前記示されたデータを前記1つのチェーンにおける前記最初のバケットにおける最初のエントリに移動させるステップを含むことを特徴とする方法。
- 請求項6記載の方法において、前記最初のバケットはLRUデータを有し、前記示されたデータの移動はLRUデータを前記最初のバケットの外へ移動させることを含むことを特徴とする方法。
- 請求項7記載の方法において、前記LRUデータの移動は前記LRUデータを前記シーケンスの中の前記最初のバケットに続くバケットの中に移動させることを含むことを特徴とする方法。
- 請求項1記載の方法において、前記ハッシュテーブルはバケットのチェーンを有し、それぞれのバケットはデータを記憶する複数のエントリを有し、それぞれのチェーンの中のバケットの中のエントリは最初のバケットの最初のエントリから最後のバケットの最後のエントリに至るシーケンスを形成し、前記レコードへのアクセスは、
前記チェーンの中の1つにおける前記バケットの中の1つにおける前記エントリの中の1つの中のデータを示すハッシュテーブルにアクセスするリクエストを受け取るステップと、
前記1つのチェーンの中の前記1つのバケットの中の前記1つのエントリの中にある前記示されているデータにアクセスするステップと、
前記1つのチェーンにおける前記1つのバケットにおける前記最初のエントリに含まれるデータと前記最初のバケットの前記最初のエントリに続くエントリに含まれるデータとを、所定の数のバケットだけ、前記示されたデータにアクセスするステップに応答して前記シーケンスの中の次のエントリに移動させるステップと、
前記示されたデータを前記1つのチェーンの前記最初のバケットの前記最初のエントリに移動させるステップと、
を更に含むことを特徴とする方法。 - 請求項9記載の方法において、前記所定の数のバケットは最後のエントリを有する終端部のバケットを有し、
前記所定の数のバケットの前記終端部のバケットの最後のエントリにおけるデータを前記1つのバケットの最初のエントリに移動させるステップと、
前記1つのエントリの前の前記1つのバケットのエントリにおけるデータを前記1つのバケットの次のエントリに移動させるステップと、
を更に含むことを特徴とする方法。 - 請求項1記載の方法において、前記ハッシュテーブルはバケットのチェーンを有し、それぞれのバケットはデータを記憶する複数のエントリを有し、1つのチェーンの中のバケットの中のエントリは最初のバケットの最初のエントリから最後のバケットの最後のエントリに至るシーケンスを形成し、前記レコードへのアクセスは、
前記チェーンの中の1つにおける前記バケットの中の1つにおける前記エントリの中の1つの中のデータを示すハッシュテーブルにアクセスするリクエストを受け取るステップと、
前記チェーンの中の1つにおける前記バケットの中の1つにおける前記1つのエントリの中にある前記示されているデータにアクセスするステップと、
前記最初のバケットと前記最初のバケットに続くが前記1つのバケットの前にあるバケットとの相対位置におけるエントリに含まれるデータを、前記示されたデータにアクセスするステップに応答して、次のバケットの中の前記相対位置にあるエントリの中に移動させるステップと、
前記示されたデータを前記1つのチェーンの前記最初のバケットの中の前記相対位置にあるエントリに移動させるステップと、
を更に含むことを特徴とする方法。 - 請求項1記載の方法において、前記コンピュータシステムはページを備えたメモリを有しており、
それぞれのチェーンの最初のバケットを最初のページに記憶するステップと、
それぞれのチェーンの2番目のバケットを2番目のページに記憶するステップと、
を更に含むことを特徴とする方法。 - 請求項12記載の方法において、
それぞれのチェーンについて、前記2番目のバケットに続くバケットを同じページに記憶するステップを更に含むことを特徴とする方法。 - 請求項1記載の方法において、前記コンピュータシステムはデータにアクセスするページを備えたメモリを有しており、前記ハッシュテーブルの作成は、
バケットのチェーンを有するハッシュテーブルを作成するステップであって、それぞれのバケットは前記データを記憶する複数のエントリを有し、それぞれのチェーンにおける前記バケットは最初のバケットから最後のバケットに至るシーケンスを形成し、それぞれのバケットは前記シーケンスについて相対位置を有する、ステップと、
前記シーケンスにおいて同じ相対位置を有する前記チェーンのバケットを前記メモリの1つのページの中に記憶するステップと、
を更に含むことを特徴とする方法。 - 請求項14記載の方法において、
それぞれのチェーンについて、所定の数のバケットよりも後方にあるバケットを前記メモリの中の1つのページに記憶するステップを更に含むことを特徴とする方法。 - コンピュータシステムであって、
キャッシュラインサイズを有するキャッシュラインを備えたキャッシュと、
ハッシュマネージャとバケットから構成される複数のチェーンを有するハッシュテーブルとを含むメモリであって、それぞれのバケットはデータを記憶するエントリを含み前記キャッシュラインサイズであり、前記ハッシュマネージャは、前記ハッシュテーブルのチェーンの中のバケットにおけるデータにアクセスするリクエストを受け取り、前記チェーンの中のバケットにアクセスしてデータにアクセスし、MRUデータをそれぞれのチェーンの中の最初のバケットの中に前記チェーンがアクセスされた後で配置するためのものである、メモリと、
前記ハッシュマネージャを動作させ、バケットがアクセスされた後でそれぞれのバケットを正確に適合するように前記キャッシュラインの中の1つに記憶するプロセッサであって、前記キャッシュを含むプロセッサと、
を含んでおり、キーを有するレコードにアクセスし、それぞれのバケットはレコードを含むエントリを複数個有し、それぞれのチェーンの中のバケットは最初のバケットから最後のバケットに至るシーケンスを形成する、コンピュータシステムにおいて、前記バケットへのアクセスは、
キー値によって識別されるリクエストされたレコードにアクセスするリクエストをコーラから受け取るステップと、
ハッシュ関数を用いて、前記チェーンの中の1つを参照するインデックスの中に前記キー値をハッシュするステップと、
前記最初のバケットから開始するインデックス付きの前記チェーンの中のそれぞれのバケットにシーケンスとしてアクセスし、それぞれのアクセスされたバケットを前記キャッシュの中にロードして、アクセスされたそれぞれのバケットにおけるそれぞれのレコードのキー値を調べて前記レコードがリクエストされたレコードであるかどうかを判断することによって、前記リクエストされたレコードをサーチするステップと、
前記リクエストされたレコードを前記コーラに戻すステップと、
前記ロードされたバケットが前記キャッシュの中に存在する間に、前記キャッシュにロードされた前記バケットの中の前記レコードを再構成し、前記インデックス付きのチェーンへの以後のアクセスのパフォーマンスを改善するステップと、
を含むことを特徴とするコンピュータシステム。 - 請求項16記載のコンピュータシステムにおいて、それぞれのバケットはエントリを有し、それぞれのバケットにおける複数のエントリはデータを記憶している占領されたエントリであり、前記レコードへのアクセスは、
前記バケットの中の1つのバケットにおける前記占領されたエントリの中の1つのエントリにおけるデータにアクセスするリクエストを受け取るステップと、
キャッシュラインの中に記憶される前記1つのバケットにアクセスするステップと、
前記1つのバケットの占領されたエントリに記憶されたデータを再構成して、前記1つのバケットへのアクセスに応答する前記1つのバケットへの以後のアクセスのパフォーマンスを改善するステップであって、前記再構成は、前記占領されたエントリの中の最初のエントリにおけるデータが前記占領されたエントリの中の2番目のエントリに移動されるように実行される、ステップと、
を更に含むことを特徴とするコンピュータシステム。 - 請求項17記載のコンピュータシステムにおいて、前記バケットは前記キャッシュラインサイズであり、前記1つのバケットにアクセスするステップは前記1つのバケットが前記キャッシュラインの中の1つに正確に適合するように記憶されるステップを含むことを特徴とするコンピュータシステム。
- 請求項16記載のコンピュータシステムにおいて、前記ハッシュテーブルはバケットのチェーンを有し、それぞれのバケットはデータを記憶する複数のエントリを有し、1つのチェーンの中の前記バケットの中の前記エントリは最初のバケットの最初のエントリから最後のバケットの最後のエントリに至るシーケンスを形成し、前記レコードへのアクセスは、
選択されたエントリに記憶されているリクエストされたデータにアクセスするリクエストを受け取るステップと、
前記選択されたエントリを含むチェーンにおけるバケットにアクセスするステップであって、前記バケットは前記キャッシュラインの1つに正確に適合するように記憶されているステップと、
前記リクエストされたデータを前記選択されたエントリから戻すステップと、
前記最初のバケットの前記最初のエントリに含まれるデータと前記最初のバケットの前記最初のエントリに続くエントリに含まれるデータとを、前記受け取るステップと前記アクセスするステップと前記戻すステップとに応答して前記シーケンスの中の次のエントリに移動させるステップと、
前記リクエストされたデータを前記チェーンの前記最初のバケットの前記最初のエントリに移動させるステップと、
を更に含むことを特徴とするコンピュータシステム。 - 請求項16記載のコンピュータシステムにおいて、前記ハッシュテーブルはバケットのチェーンを有し、それぞれのバケットはデータを記憶する複数のエントリを有し、1つのチェーンの中の前記バケットは最初のバケットから最後のバケットに至るシーケンスを形成し、前記コンピュータシステムはキャッシュラインサイズを有するキャッシュラインを備えたキャッシュを有し、前記バケットは前記キャッシュラインサイズであり、前記レコードへのアクセスは、
前記ハッシュテーブルにアクセスする複数のリクエストを受け取るステップであって、それぞれのリクエストは前記チェーンの中の1つにおける前記バケットの中の1つにおける前記エントリの中の1つにおけるデータを示す、ステップと、
前記受け取られた複数のリクエストのそれぞれに対して、前記1つのチェーンにおける前記1つのバケットにおける前記1つのエントリにおける前記示されたデータにアクセスして、前記1つのバケットが前記キャッシュラインの中の1つに正確に適合するように記憶されるようにし、前記示されたデータにアクセスした後で、前記示されたデータを前記1つのチェーンにおける前記最初のバケットに移動させるステップと、
を更に含むことを特徴とするコンピュータシステム。 - 請求項20記載のコンピュータシステムにおいて、前記示されたデータを移動させるステップは、前記示されたデータを前記1つのチェーンにおける前記最初のバケットにおける最初のエントリに移動させるステップを含むことを特徴とするコンピュータシステム。
- 請求項21記載のコンピュータシステムにおいて、前記最初のバケットはLRUデータを有し、前記示されたデータの移動はLRUデータを前記最初のバケットの外へ移動させることを含むことを特徴とするコンピュータシステム。
- 請求項22記載のコンピュータシステムにおいて、前記LRUデータの移動は前記LRUデータを前記シーケンスの中の前記最初のバケットに続くバケットの中に移動させることを含むことを特徴とするコンピュータシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/772334 | 1996-12-23 | ||
US08/772,334 US6052697A (en) | 1996-12-23 | 1996-12-23 | Reorganization of collisions in a hash bucket of a hash table to improve system performance |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10269142A JPH10269142A (ja) | 1998-10-09 |
JP4218997B2 true JP4218997B2 (ja) | 2009-02-04 |
Family
ID=25094724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP37021897A Expired - Fee Related JP4218997B2 (ja) | 1996-12-23 | 1997-12-24 | システム性能を改善するためのハシュテーブルのハシュバケットにおけるコリジョンの再編成 |
Country Status (4)
Country | Link |
---|---|
US (2) | US6052697A (ja) |
EP (1) | EP0851354B1 (ja) |
JP (1) | JP4218997B2 (ja) |
DE (1) | DE69739743D1 (ja) |
Families Citing this family (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3251138B2 (ja) * | 1994-10-31 | 2002-01-28 | 富士通株式会社 | ハッシュ方式 |
US6920454B1 (en) | 2000-01-28 | 2005-07-19 | Oracle International Corporation | Techniques for DLM optimization with transferring lock information |
US7246120B2 (en) | 2000-01-28 | 2007-07-17 | Oracle International Corporation | Techniques for achieving higher availability of resources during reconfiguration of a cluster |
US6529906B1 (en) | 2000-01-28 | 2003-03-04 | Oracle Corporation | Techniques for DLM optimization with re-mastering events |
US6751616B1 (en) * | 2000-01-28 | 2004-06-15 | Oracle International Corp. | Techniques for DLM optimization with re-mapping responsibility for lock management |
US7454516B1 (en) * | 2000-08-03 | 2008-11-18 | Microsoft Corporation | Scalable virtual partitioning of resources |
US6567817B1 (en) * | 2000-09-08 | 2003-05-20 | Hewlett-Packard Development Company, L.P. | Cache management system using hashing |
US7702800B2 (en) | 2000-12-18 | 2010-04-20 | International Business Machines Corporation | Detecting and handling affinity breaks in web applications |
US6877025B2 (en) * | 2000-12-18 | 2005-04-05 | International Business Machines Corp. | Integrated JSP and command cache for web applications with dynamic content |
US6807606B2 (en) | 2000-12-18 | 2004-10-19 | International Business Machines Corp. | Distributed execution coordination for web caching with dynamic content |
US20020111992A1 (en) * | 2000-12-18 | 2002-08-15 | Copeland George P. | JSP composition in a cache for web applications with dynamic content |
US6823360B2 (en) * | 2000-12-18 | 2004-11-23 | International Business Machines Corp. | Cofetching in a command cache |
US7299243B2 (en) | 2001-09-19 | 2007-11-20 | Bmc Software, Inc. | System and method for controlling free space distribution by key range within a database |
US7039764B1 (en) | 2002-01-17 | 2006-05-02 | Nokia Corporation | Near-perfect, fixed-time searching algorithm using hashing, LRU and cam-based caching |
CA2384185A1 (en) * | 2002-04-29 | 2003-10-29 | Ibm Canada Limited-Ibm Canada Limitee | Resizable cache sensitive hash table |
US6968428B2 (en) | 2002-06-26 | 2005-11-22 | Hewlett-Packard Development Company, L.P. | Microprocessor cache design initialization |
US7447786B2 (en) * | 2003-05-09 | 2008-11-04 | Oracle International Corporation | Efficient locking of shared data that is accessed for reads in a cluster database |
US7318219B2 (en) * | 2003-11-28 | 2008-01-08 | International Business Machines Corporation | System and method for performance monitoring |
US7379952B2 (en) * | 2004-01-30 | 2008-05-27 | Oracle International Corporation | Techniques for multiple window resource remastering among nodes of a cluster |
US7349926B2 (en) * | 2004-03-30 | 2008-03-25 | International Business Machines Corporation | Atomic renaming and moving of data files while permitting lock-free look-ups |
US7809888B1 (en) * | 2004-09-29 | 2010-10-05 | Emc Corporation | Content-aware caching techniques |
US7752181B2 (en) * | 2004-11-08 | 2010-07-06 | Oracle International Corporation | System and method for performing a data uniqueness check in a sorted data set |
US7624446B1 (en) * | 2005-01-25 | 2009-11-24 | Symantec Corporation | Efficient signature packing for an intrusion detection system |
US20060200469A1 (en) * | 2005-03-02 | 2006-09-07 | Lakshminarayanan Chidambaran | Global session identifiers in a multi-node system |
US7209990B2 (en) * | 2005-04-05 | 2007-04-24 | Oracle International Corporation | Maintain fairness of resource allocation in a multi-node environment |
US20080052488A1 (en) * | 2006-05-10 | 2008-02-28 | International Business Machines Corporation | Method for a Hash Table Lookup and Processor Cache |
US8266116B2 (en) * | 2007-03-12 | 2012-09-11 | Broadcom Corporation | Method and apparatus for dual-hashing tables |
US7890814B2 (en) * | 2007-06-27 | 2011-02-15 | Microsoft Corporation | Software error report analysis |
US8086860B2 (en) * | 2007-10-01 | 2011-12-27 | Tata Consultancy Services Limited | Method for preventing and detecting hash collisions of data during the data transmission |
US8949578B2 (en) | 2009-04-27 | 2015-02-03 | Lsi Corporation | Sharing of internal pipeline resources of a network processor with external devices |
US8874878B2 (en) | 2010-05-18 | 2014-10-28 | Lsi Corporation | Thread synchronization in a multi-thread, multi-flow network communications processor architecture |
US8949582B2 (en) | 2009-04-27 | 2015-02-03 | Lsi Corporation | Changing a flow identifier of a packet in a multi-thread, multi-flow network processor |
US8873550B2 (en) | 2010-05-18 | 2014-10-28 | Lsi Corporation | Task queuing in a multi-flow network processor architecture |
US8910168B2 (en) | 2009-04-27 | 2014-12-09 | Lsi Corporation | Task backpressure and deletion in a multi-flow network processor architecture |
US9727508B2 (en) | 2009-04-27 | 2017-08-08 | Intel Corporation | Address learning and aging for network bridging in a network processor |
US9152564B2 (en) | 2010-05-18 | 2015-10-06 | Intel Corporation | Early cache eviction in a multi-flow network processor architecture |
US8949838B2 (en) | 2009-04-27 | 2015-02-03 | Lsi Corporation | Multi-threaded processing with hardware accelerators |
US9461930B2 (en) | 2009-04-27 | 2016-10-04 | Intel Corporation | Modifying data streams without reordering in a multi-thread, multi-flow network processor |
US8539199B2 (en) * | 2010-03-12 | 2013-09-17 | Lsi Corporation | Hash processing in a network communications processor architecture |
US8515965B2 (en) | 2010-05-18 | 2013-08-20 | Lsi Corporation | Concurrent linked-list traversal for real-time hash processing in multi-core, multi-thread network processors |
US20100299362A1 (en) * | 2009-05-24 | 2010-11-25 | Roger Frederick Osmond | Method for controlling access to data containers in a computer system |
US8793257B2 (en) * | 2009-05-24 | 2014-07-29 | Roger Frederick Osmond | Method for improving the effectiveness of hash-based data structures |
US9015198B2 (en) * | 2009-05-26 | 2015-04-21 | Pi-Coral, Inc. | Method and apparatus for large scale data storage |
TWI412929B (zh) * | 2009-07-23 | 2013-10-21 | Ipanel Tv Inc | 散列表動態適應資料之方法及其裝置 |
JP2011188029A (ja) * | 2010-03-04 | 2011-09-22 | Fujitsu Ltd | 電子署名装置、電子署名方法及びコンピュータプログラム |
US8788543B2 (en) * | 2010-05-13 | 2014-07-22 | International Business Machines Corporation | Scalable, concurrent resizing of hash tables |
US8909781B2 (en) | 2010-05-24 | 2014-12-09 | Pi-Coral, Inc. | Virtual access to network services |
US10558705B2 (en) * | 2010-10-20 | 2020-02-11 | Microsoft Technology Licensing, Llc | Low RAM space, high-throughput persistent key-value store using secondary memory |
CN102736986A (zh) * | 2011-03-31 | 2012-10-17 | 国际商业机器公司 | 一种内容可寻址存储器及其检索数据的方法 |
US9230548B2 (en) * | 2012-06-06 | 2016-01-05 | Cypress Semiconductor Corporation | Hybrid hashing scheme for active HMMS |
US9311359B2 (en) | 2013-01-30 | 2016-04-12 | International Business Machines Corporation | Join operation partitioning |
US9317548B2 (en) * | 2013-01-30 | 2016-04-19 | International Business Machines Corporation | Reducing collisions within a hash table |
US9367556B2 (en) | 2013-06-14 | 2016-06-14 | International Business Machines Corporation | Hashing scheme using compact array tables |
US9672248B2 (en) | 2014-10-08 | 2017-06-06 | International Business Machines Corporation | Embracing and exploiting data skew during a join or groupby |
US10303791B2 (en) | 2015-03-20 | 2019-05-28 | International Business Machines Corporation | Efficient join on dynamically compressed inner for improved fit into cache hierarchy |
US9922064B2 (en) | 2015-03-20 | 2018-03-20 | International Business Machines Corporation | Parallel build of non-partitioned join hash tables and non-enforced N:1 join hash tables |
US10650011B2 (en) | 2015-03-20 | 2020-05-12 | International Business Machines Corporation | Efficient performance of insert and point query operations in a column store |
US10108653B2 (en) | 2015-03-27 | 2018-10-23 | International Business Machines Corporation | Concurrent reads and inserts into a data structure without latching or waiting by readers |
US10831736B2 (en) | 2015-03-27 | 2020-11-10 | International Business Machines Corporation | Fast multi-tier indexing supporting dynamic update |
KR20170065374A (ko) * | 2015-12-03 | 2017-06-13 | 영남대학교 산학협력단 | 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법 |
CN108984431B (zh) * | 2017-06-01 | 2021-04-30 | 北京京东尚科信息技术有限公司 | 用于清空过期缓存的方法和装置 |
US10459810B2 (en) | 2017-07-06 | 2019-10-29 | Oracle International Corporation | Technique for higher availability in a multi-node system using replicated lock information to determine a set of data blocks for recovery |
CN107766258B (zh) * | 2017-09-27 | 2021-11-16 | 恩亿科(北京)数据科技有限公司 | 内存存储方法与装置、内存查询方法与装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0658646B2 (ja) * | 1982-12-30 | 1994-08-03 | インタ−ナショナル・ビジネス・マシ−ンズ・コ−ポレ−ション | デ−タ持続性が制御される仮想記憶アドレス変換機構 |
US5339398A (en) * | 1989-07-31 | 1994-08-16 | North American Philips Corporation | Memory architecture and method of data organization optimized for hashing |
US5197002A (en) * | 1989-12-22 | 1993-03-23 | Bell Communications Research, Inc. | Methods and apparatus for dynamic hashing |
US5493660A (en) * | 1992-10-06 | 1996-02-20 | Hewlett-Packard Company | Software assisted hardware TLB miss handler |
GB2273798A (en) * | 1992-12-22 | 1994-06-29 | Ibm | Cache system for disk array. |
US5778430A (en) * | 1996-04-19 | 1998-07-07 | Eccs, Inc. | Method and apparatus for computer disk cache management |
-
1996
- 1996-12-23 US US08/772,334 patent/US6052697A/en not_active Expired - Lifetime
-
1997
- 1997-12-19 DE DE69739743T patent/DE69739743D1/de not_active Expired - Lifetime
- 1997-12-19 EP EP97122555A patent/EP0851354B1/en not_active Expired - Lifetime
- 1997-12-24 JP JP37021897A patent/JP4218997B2/ja not_active Expired - Fee Related
-
1999
- 1999-03-15 US US09/270,902 patent/US6052698A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
DE69739743D1 (de) | 2010-03-11 |
EP0851354B1 (en) | 2010-01-20 |
EP0851354A3 (en) | 1999-01-20 |
EP0851354A2 (en) | 1998-07-01 |
US6052697A (en) | 2000-04-18 |
US6052698A (en) | 2000-04-18 |
JPH10269142A (ja) | 1998-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4218997B2 (ja) | システム性能を改善するためのハシュテーブルのハシュバケットにおけるコリジョンの再編成 | |
KR100297454B1 (ko) | 컴퓨터장치 | |
US7085911B2 (en) | Resizable cache sensitive hash table | |
US5983324A (en) | Data prefetch control method for main storage cache for protecting prefetched data from replacement before utilization thereof | |
JP4242905B2 (ja) | キャッシュ効率的なオブジェクトローダ | |
US4611272A (en) | Key-accessed file organization | |
US6145064A (en) | Method of efficiently updating hashed page tables | |
US6507847B1 (en) | History database structure for Usenet | |
US7373514B2 (en) | High-performance hashing system | |
US5956756A (en) | Virtual address to physical address translation of pages with unknown and variable sizes | |
KR100343027B1 (ko) | 다중페이지크기를지원하는가상메모리컴퓨터시스템의주소변환기구 | |
US7444389B2 (en) | Methods and apparatus for generating a content address to indicate data units written to a storage system proximate in time | |
US6754800B2 (en) | Methods and apparatus for implementing host-based object storage schemes | |
US7162571B2 (en) | Methods and apparatus for parsing a content address to facilitate selection of a physical storage location in a data storage system | |
US7263576B2 (en) | Methods and apparatus for facilitating access to content in a data storage system | |
JP3880581B2 (ja) | キャッシュのロックを使用するストリーミング・データ | |
JP3096414B2 (ja) | ディレクトリ内にアドレス・タグを記憶するためのコンピュータ | |
JP2002540502A (ja) | データベースシステムにおけるバーチャルメモリマッピングとトランザクションマネージメントのポインターリロケーションオプチミゼーションの方法及び装置 | |
WO1994003856A1 (en) | Column-associative cache | |
US20020138648A1 (en) | Hash compensation architecture and method for network address lookup | |
US7493464B2 (en) | Sparse matrix | |
US20050125627A1 (en) | Methods and apparatus for caching a location index in a data storage system | |
US20030018855A1 (en) | Method and apparatus for caching with variable size locking regions | |
US7234021B1 (en) | Methods and apparatus for accessing data elements using improved hashing techniques | |
US6674441B1 (en) | Method and apparatus for improving performance of an accelerated graphics port (AGP) device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041213 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20061121 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20061121 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20071205 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071220 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080321 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080326 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080421 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080424 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080520 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080523 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080620 |
|
A524 | Written submission of copy of amendment under article 19 pct |
Free format text: JAPANESE INTERMEDIATE CODE: A524 Effective date: 20080620 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080708 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081008 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20081020 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20081111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111121 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111121 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121121 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131121 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |