JP4006436B2 - 種々のキャッシュ・レベルにおける連想セットの重畳一致グループを有するマルチレベル・キャッシュ - Google Patents

種々のキャッシュ・レベルにおける連想セットの重畳一致グループを有するマルチレベル・キャッシュ Download PDF

Info

Publication number
JP4006436B2
JP4006436B2 JP2004356031A JP2004356031A JP4006436B2 JP 4006436 B2 JP4006436 B2 JP 4006436B2 JP 2004356031 A JP2004356031 A JP 2004356031A JP 2004356031 A JP2004356031 A JP 2004356031A JP 4006436 B2 JP4006436 B2 JP 4006436B2
Authority
JP
Japan
Prior art keywords
cache
associative
sets
association
address
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
Application number
JP2004356031A
Other languages
English (en)
Other versions
JP2005174341A (ja
Inventor
アーロン・クリストフ・ソーディ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2005174341A publication Critical patent/JP2005174341A/ja
Application granted granted Critical
Publication of JP4006436B2 publication Critical patent/JP4006436B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • G06F12/127Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning using additional replacement algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、ディジタル・データ処理ハードウェアに関し、特に、ディジタル・データ処理装置の処理ユニットのためのキャッシュ・メモリおよび支援ハードウェアの設計および操作に関するものである。
二十世紀の後半に、情報革命として知られている現象が始まった。情報革命はいずれの事象またはマシンよりも範囲の広範な歴史的開発であるけれども、ディジタル電子式コンピュータ以上に情報革命を代表する単一の装置は現れていない。コンピュータ・システムの開発は、確かに1つの革命であった。毎年、コンピュータ・システムは、より高速になり、より多くのデータを記憶し、そして、より多くのアプリケーションをユーザに提供している。
近代のコンピュータ・システムは、一般に、中央演算処理装置(CPU)、並びに、通信情報を記憶し、検索し、および転送するために必要なバスおよびメモリのような支援ハードウェアを含む。更に、それは、入出力コントローラ又はストレージ・コントローラ、並びに、それらに接続され、キーボード、モニタ、テープ・ドライブ、ディスク・ドライブ、ネットワークに結合された通信回線、等のような外界と通信するに必要なハードウェアを含む。CPUは、システムの心臓である。それは、コンピュータ・プログラムを含む命令を実行し、他のシステム・コンポーネントのオペレーションを指示する。
コンピュータのハードウェアの立場からいえば、ほとんどのシステムが機能的に同じ態様で動作する。プロセッサは、演算、論理比較、および一方ロケーションから他方のロケーションへのデータの移動のような限定されたセットの非常に単純なオペレーションを遂行することができる。しかし、各オペレーションは非常に素早く実行される。膨大な数のこれらの単純なオペレーションを遂行するようにコンピュータに指示するプログラムは、コンピュータが何か複雑なことを行っているという幻想を与える。実質的に同じセットの非常に単純なオペレーションを遂行することおよびそれを非常に高速に行うことによって、コンピュータ・システムの新たなまたは改良された機能をとしてユーザが認めているものが可能になる。従って、コンピュータ・システムに対する改良を継続することは、これらのシステムを絶えずより高速にすることを必要とする。
コンピュータ・システムの全体的な速度(「スループット」とも呼ばれる)は、大雑把にいえば、単位時間あたりに実行されるオペレーションの数として測定することが可能である。概念的には、システム速度に対するすべての可能な改良のうちの最も簡単なものは、種々のコンポーネントのクロック速度、特に、プロセッサのクロック速度を高めることである。例えば、すべてのものが2倍の速さで動作するが、全く同じ態様で働く場合、システムは所与のタスクを半分の時間で遂行するであろう。数多くの個別のコンポーネントから構成された初期のコンピュータ・プロセッサは、コンポーネントを減らすこと、コンポーネントを結合すること、および、最終的にはプロセッサ全体を単一のチップ上に集積回路としてパッケージ化することによって、かなりのクロック速度の改善を得やすかったし、更なるサイズの縮小およびその他の改良によるクロック速度の増加が最終目的であることが続いた。クロック速度の増加に加えて、クロック・サイクル当たりに実行されるオペレーションの平均数を増加させることによって個々のCPUのスループットを高めることが可能である。
一般的なコンピュータ・システムは大量のデータを記憶することができ、プロセッサはこのデータの任意の部分を使用することを要求される。大量のデータを記憶するための一般的に使用される装置(例えば、回転磁気ハードディスク・ドライブ記憶装置)は、記憶されたデータをアクセスするために比較的長い待ち時間を必要とする。プロセッサが1つのオペレーションを実行する度にそのような大容量記憶装置から直接にデータをアクセスすべきであるとすれば、その記憶装置がデータを戻すのを待つことでその時間のほとんどすべてを費やすことになり、実際に、そのスループットが非常に低くなっていることであろう。その結果、コンピュータ・システムは、メモリまたは記憶装置の階層において各次段のレベルがより速いアクセスを行うのに、より少ないデータしか記憶し得ずにデータを記憶する。大容量記憶装置は最低のレベルにあり、その比較的低速の装置上にすべてのデータを記憶する。階層を上げると、メイン・メモリがあり、一般には、メイン・メモリは半導体メモリである。メイン・メモリは、大容量記憶装置よりも遥かに小さいデータ容量しか持たないが、遥かに早いアクセスを行う。更に高いアクセス速度のものがキャッシュであり、これは、単一レベルまたは複数レベルの階層(レベル1が最も高い)におけるものである。キャッシュも半導体メモリであるが、メイン・メモリよりも高速であり、より小さいデータ容量を有する。ネットワーク接続によってアクセス可能なデータ、のような外部記憶されたデータを、コンピュータ・システム自身の大容量記憶装置よりも低い階層の更なるレベルのものであると見なすこともある。これは、ネットワーク接続(例えば、インターネット)から潜在的に得られるデータの量が更に大きいが、アクセス・タイムが更に遅いためである。
プロセッサがメモリ参照アドレスを生成するとき、プロセッサは、先ず、キャッシュにおいて必要なデータを探す(それは、複数のキャッシュ・レベルにおける探索を必要とすることがある)。そのデータがそこにない(「キャッシュ・ミス」と呼ばれる)場合、プロセッサはそのデータをメモリから得るか、または、必要な場合、記憶装置から得る。メモリ・アクセスは比較的大きな数のプロセッサ・サイクルを必要とする。なお、そのプロセッサ・サイクルの間、プロセッサは一般にアイドル状態にある。プロセッサがメモリ参照を生成するとき、比較的長い待ち時間のデータ・アクセスが完了するのをプロセッサが待つ必要がないように、プロセッサが現在必要としているデータを、そのプロセッサに最も近いレベルのキャッシュが記憶していることが理想的である。しかし、いずれのキャッシュ・レベルの容量もメイン・メモリの容量のわずか数分の一であり、メイン・メモリ自身の容量が大容量記憶装置の容量のわずか数分の一であるので、データをすべてキャッシュに単純にロードすることは不可能である。プロセッサが特定のデータ項目を必要とするとき、それがキャッシュ内にあるよう、キャッシュに記憶されるべきデータを選択するための何らかの手法が存在しなければならない。
キャッシュは、一般に、ラインと呼ばれるデータの単位に分割される。なお、ラインは、キャッシュに独立してロードすることまたはキャッシュから除去することが可能な最小単位のデータである。種々の選択的キャッシュ手法のいずれかを支援するためにも、キャッシュとは、一般に、キャッシュ・ラインの連想セットを使用してアドレスされる。連想セットは、1セットのキャッシュ・ラインであり、すべてのキャッシュ・ラインが共通のキャッシュ・インデックス番号を共用する。キャッシュ・インデックス番号は、他のビットも同様に含めることもできるが、一般には、参照アドレスの上位桁ビットから得られる。キャッシュはメイン・メモリよりも遥かに小さく、連想セットは、キャッシュ・インデックス番号に対応したメイン・メモリ・アドレスの小さな一部分しか保持しない。各連想セットは、一般に、複数のキャッシュ・ラインを含むので、連想セットの内容は、種々の手法のいずれによってもメイン・メモリから選択的に選出することが可能である。
一般に、キャッシュ・ミスの発生時にデータが高レベル・キャッシュにロードされる。キャッシュに記憶されるべきデータを選択するための一般的な手法は、種々のプリフェッチ手法を含み、そのプリフェッチ手法は、特定のキャッシュ・ラインにおけるデータが必要とされることを、そのキャッシュ・ラインに対する実際のメモリ参照に先立って予測し、従って将来の必要性を予想して、キャッシュにデータをロードしようとするものである。キャッシュは限られた容量しか持たないので、キャッシュ・ミス時、またはプリフェッチによってデータをロードするということは、現在キャッシュ内にある幾つかのデータがキャッシュから除去されるかまたは追放されることを意味する。再び、そのような場合にどのデータが追放されるかを決定するための種々の一般的な手法が存在する。
キャッシュの内容を選択するための一般的な手法は限られた成功は得たが、多くの環境では、プロセッサがキャッシュ・ミス時に大量の遊休時間を費やすことがわかっている。この問題に対する一般的な解決方法は、キャッシュのサイズおよび/または連想性を増加させることであった。それらのいずれもかなりの追加ハードウェアを伴う。従って、キャッシュの設計およびオペレーションに対する改良された手法を求めるニーズが存在する。本発明は、このようなニーズに応えるものである。
コンピュータ・システムは、メイン・メモリ、少なくとも1つのプロセッサ、および少なくとも2つのレベルを有するキャッシュ・メモリを含む。高レベルのキャッシュは、複数の連想セットを含み、各連想セットは、それぞれの合同(congruence)グループに含まれ、各一致グループは高レベル・キャッシュの複数の連想セットを有する。低レベルのキャッシュも同様に複数の連想セットを含み、各連想セットは、それぞれの一致グループに含まれ、各一致グループは低レベル・キャッシュの複数の連想セットを有する。高レベル・キャッシュにおける連想セットのキャッシュ・ライン・アドレスは、同じ一致グループ内の低レベル・キャッシュにおける複数の連想セットの間に分散される。
好適な実施例の1つの局面では、低レベル・キャッシュは高レベル・キャッシュのビクティム・キャッシュである。即ち、データは、高レベル・キャッシュから追放されるとき、低レベル・キャッシュにロードされる。データは、高レベル・キャッシュおよび低レベル・キャッシュにおいて重複しないことが望ましい。キャッシュ・ラインは、キャッシュ・ミスのとき、低レベル・キャッシュから、または他のソースから低レベル・キャッシュをバイパスして、高レベル・キャッシュにロードされる。1つのキャッシュ・ラインが高レベル・キャッシュからの追放のために選択されるとき、それは、低レベル・キャッシュにおける1つのラインを追放のために選択させて、自動的に低レベル・キャッシュにロードされる。
好適な実施例では、一致グループは、高レベル・キャッシュ内に1対の連想セットを含み、低レベル・キャッシュ内に3つの連想セットを含む。それらは、インデックス・アドレス・ビットを共用する。モジュロ3のようなアドレス・ハッシュ関数が高レベル・キャッシュにおける連想セット内の幾つかの非共用アドレス・ビットを、低レベル・キャッシュにおける連想セットを選択するインデックスに変換する。
本願では「高レベル・キャッシュ」および「低レベル・キャッシュ」という用語が使用されるけれども、これらは、相対的なキャッシュ・レベル関係を指定するように意図するだけであり、システムが2レベルのキャッシュしか含まないと意味することを意図するものではない。本願において使用されるように、「高レベル」は、プロセッサ・コアに相対的に近いレベルのことをいう。好適な実施例では、「高レベル・キャッシュ」の上に少なくとも1つのレベルのキャッシュが存在し、そのキャッシュは種々の一般的な原理のいずれにおいても動作するものである。
一般に、キャッシュにおける連想セットをインデックスするために使用されるアドレス・ハッシュ手法は連想セットに対するメモリ参照の無作為な分散を生じるものと仮定されているが、これは、データが比較的長いキャッシュ・ライフを有する第2、第3、あるいは更に低いレベルのキャッシュに対しては当てはまらないことが多いと本発明者は考えた。ある連想セットは他の連想セットよりもかなり「ホット」になることが多い。本発明の好適な実施例によれば、高レベル・キャッシュにおける複数の連想セットの中で、次の最低レベル・キャッシュにおける連想セットを効果的に共用することによって、高レベル・キャッシュにおける「ホットな」連想セットからの追放のために低レベル・キャッシュの使用可能な連想セットを増加させることが可能である。その結果、高レベル・キャッシュにおけるキャッシュ・ミスが低レベル・キャッシュから満たされる可能性は、プロセッサがキャッシュ・ミス時にアイドル待ちしている平均時間の必然的な減少と共に増加する。
本発明の構成およびオペレーションに関する詳細は、添付図面を参照することで最もよく理解することが可能である。なお、これらの図面において、同じ参照番号は同様の部分を指す。
図面を参照すると、幾つもの図を通して、同じ参照番号は同じ部分を示し、図1は、本発明の好適な実施例に従って、種々のキャッシュ・レベルにおける重畳した連想セットの一致グループを利用するコンピュータ・システム100の主要なハードウェア・コンポーネントの高レベル表示である。コンピュータ・システム100の主要なコンポーネントは、1つまたは複数の中央演算処理装置(CPU)101A−101D、メイン・メモリ102、キャッシュ・メモリ106、端末インターフェース111、記憶装置インターフェース112、入出力(I/O)装置インターフェース113、および通信/ネットワーク・インターフェース114を含み、これらはすべてバス103、104およびバス・インターフェース105を介してコンポーネント間通信のために結合される。
コンピュータ・システム100は、1つまたは複数の汎用プログラマブル中央演算処理装置(CPU)101A−101Dを含む。好適な実施例では、システム100は、比較的大型のシステムを代表する複数プロセッサを含み、それらは、本願では、フィーチャ101と一般的に呼ばれる。しかし、システム100は、それとは別に、単一CPUシステムであってもよい。各プロセッサ101は、メモリ102に記憶された命令を実行する。命令およびデータは、処理のためにメイン・メモリ102からキャッシュ・メモリ106にロードされる。メイン・メモリ102は、データおよびプログラムを記憶するためのランダム・アクセス半導体メモリである。メイン・メモリ102およびキャッシュ・メモリ106は、図1では、単一の構成要素として概念的に示されるが、実際には、これらが更に複雑であること、特に、本願において更に詳細に記述されるように、キャッシュ・メモリが複数の異なるレベルで存在することがわかるであろう。
メモリ・バス103は、CPU101およびキャッシュ・メモリ106と、メイン・メモリ102およびI/Oバス・インターフェース・ユニット(I/F)105との間でデータを転送するためのデータ・通信・パスを提供する。I/Oバス・インターフェース・ユニット105は、更に、種々のI/O装置に及び種々のI/Oからデータを転送するためのシステムI/Oバス104に接続される。I/Oバス・インターフェース・ユニット105は、システムI/Oバス104を介して、I/Oプロセッサ(IOP)またはI/Oアダプタ(IOA)としても知られている複数のI/Oインターフェース・ユニット111−114と通信を行う。システムI/Oバス104は、例えば、業界標準のPCIバスまたは他の任意の適正なバス・テクノロジであってもよい。I/O・バス・インターフェース・ユニット105は、種々の記憶装置およびI/O装置との通信をサポートする。例えば、端末インターフェース・ユニット111は、1つまたは複数のユーザ端末121−124の接続をサポートする。記憶装置インターフェース・ユニット112は、1つまたは複数のダイレクト・アクセス記憶装置(DASD)125−127の接続をサポートする(なお、それらのDASDは、一般に、回転磁気ディスク・ドライブ記憶装置であるが、代わりに、ホストにとっては単一の大型記憶装置として見えるように構成されたディスク・ドライブのアレイを含む他の装置であってもよい)。I/Oおよび他の装置インターフェース113は、他のタイプの他の任意の入出力装置に対するインターフェースを提供する。2つのそのような入出力装置としてプリンタ128およびファクシミリ機器129が図1の実施例に示されるが、他の多くのそのような装置が存在し得るし、それは種々のタイプのものであってよい。ネットワーク・インターフェース114は、システム100から他のディジタル装置およびコンピュータ・システムへの1つまたは複数の通信パスを提供する。そのような通信パスには、例えば、インターネット、ローカル・エリア・ネットワークまたは他のネットワークのように1つまたは複数のネットワーク130を含めることができるし、或いは、遠隔装置通信回線、無線接続等を含めることができる。
図1は、システム100の代表的な主要コンポーネントを示すことを意図するものである。個々のコンポーネントは図1に示されたものよりも更に複雑であってもよく、図1に示されたもの以外のコンポーネントまたはそれに付加されたコンポーネントが存在してもよく、そのようなコンポーネントの数、タイプ、および構成が変わっていてもよいことは当然である。本願では、そのような更なる複雑性および更なる変更に関する幾つもの特定の例が開示され、これらが単に例としたものあること、および、必ずしもそのような変更が唯一のものではないことは当然である。
図1では、メイン・メモリ102が単一の一体構造の構成要素として示されるけれども、メモリは更に分散されることが可能であり、種々の、いわゆる、いずれの非均一メモリ・アクセス(NUMA)・コンピュータ・アーキテクチャにおいても知られているように、種々のCPUまたはCPUのセットと関連付けることが可能である。図1では、メモリ・バス103が、キャッシュ・メモリ106、メイン・メモリ102、およびI/Oバス・インターフェース・ユニット105の間の直接通信パスを提供する比較的簡単な単一バス構造体として示されるが、実際には、メモリ・バス103は、階層構成、スター型構成、またはウェブ構成における2地点間リンクや、複数階層のバスや、並列および冗長パス、等といった種々の形式のいずれにも配列可能な複数の異なるバスまたは通信パスを含むことができる。更に、I/Oバス・インターフェース105およびI/Oバス104が単一の個別のユニットとして示されているが、実際には、システム100は複数のI/Oバス・インターフェース・ユニット105および/または複数のI/Oバス104を含むことができる。システムI/Oバス104を種々のI/O装置に結合する種々の通信パスから分離する複数のI/Oインターフェース・ユニットが示されているが、それとは別に、幾つかのまたはすべてのI/O装置を1つまたは複数のシステムI/Oバスに直接に接続することも可能である。
図1に示されたコンピュータ・システム100は、マルチユーザ・「メインフレーム」・コンピュータ・システムによくあるような複数の付加端末121〜124を有する。一般に、そのような場合、付加装置の実際の数は図1に示されたものよりも大きいが、本発明はいかなる特定の大きさのシステムにも限定されない。それとは別に、コンピュータ・システム100は、一般には単一のユーザ・ディスプレイおよびキーボード入力しか含まない単一ユーザ・システムであってもよく、或いは、直接ユーザ・インターフェースをほとんど持たないか、またはまったく持たないが、他のコンピュータ・システム(クライアント)からリクエストを受けるサーバまたは同様の装置であってもよい。
種々のシステム・コンポーネントを説明し、それを高いレベルで示したが、代表的なコンピュータ・システムが、本発明の理解にとって本質的ではない他の多くの図示されてないコンポーネントを含むことは当然である。
図2は、好適な実施例に従った、連想キャッシュ構造体を含むCPU101の主要コンポーネントの高レベル図であり、図1に示されたCPUよりも更に詳細にCPU101を示す。この実施例では、2つのCPU101が、所定のキャッシュ構造体と共に、単一の半導体チップ内にパッケージされる。このために、CPU101は、一対のCPUを含むチップとそれとを区別するために、「プロセッサ・コア」または「CPUコア」とも呼ばれることがある。CPU101は、命令ユニット部分201、実行ユニット部分211、レベル1命令キャッシュ(L1 I-キャッシュ)205、レベル1データ・キャッシュ(L1 D-キャッシュ)206、およびアドレス変換ハードウェア(ADDR XLATE)207を含む。図2に示されたレベル2キャッシュ(L2キャッシュ)208は、実際には、単一のチップ内の両方のCPUコアによって共用され、従って、CPU101の一部分とは見なされない。一般に、命令ユニット201は、L1I-キャッシュ205から命令を得て、遂行すべきオペレーションを決定するために命令をデコードし、プログラム・フローを制御するためにブランチ条件を決定する。実行ユニット211は、レジスタにおけるデータに関して演算および論理的オペレーションを遂行し、L1D-キャッシュからデータをロードまたはそのキャッシュに記憶する。L2キャッシュ208はレベル2キャッシュであり、一般には、L1 I-キャッシュまたはL1 D-キャッシュよりも大きく、L1I-キャッシュ205およびL1 D-キャッシュ206にデータを供給する。L2キャッシュ208は、更に低いレベルのキャッシュまたはメイン・メモリから外部インターフェースを介してデータを得る。
命令ユニット201は、ブランチ・ユニット202、命令デコード/ディスパッチ・ユニット203、および命令レジスタ/バッファ204を含む。L1 I-キャッシュ205からの命令は、実行前にバッファ204にロードされる。CPUの設計次第で、複数のバッファ(例えば、命令の順次系列のためのものおよびブランチ・トゥー・ロケーションのための別のもの)が存在してもよく、それらのバッファの各々は複数の命令を含むことが可能である。デコード/ディスパッチ・ユニット203は、実行されるべき現命令をバッファの1つから受け取り、その命令をデコードして遂行されるべきオペレーションまたはブランチ条件を決定する。ブランチ・ユニット202は、ブランチ条件を評価することによってプログラム・フローを制御し、L1I-キャッシュ205からバッファを再補充する。
実行ユニット211は、データを記憶するための一組の汎用レジスタ212と、命令ユニット201によってデコードされた命令に応答して汎用レジスタ212におけるデータに関して演算および論理的オペレーションを遂行する整数演算論理ユニット(ALU)213とを含む。更に、実行ユニット211は、浮動小数点演算のような数学的集中オペレーションを遂行するための複合オペレーション・サブユニット214を含む。サブユニット214は、それ自身の特殊レジスタ(図示されてない)を含むことが可能である。整数ALU213および複合オペレーション・サブユニット214は、一般に、マルチステージ・パイプラインとして実現される。図2に示されたコンポーネントのほかに、実行ユニット211は、更なる特殊目的レジスタおよびカウンタ、データをキャッシュ・メモリまたはメイン・メモリからフェッチまたはそれらに記憶するためのロードおよびストア・ハードウェア、コントロール・ハードウェア、等を含むことが可能である。特に、実行ユニット211は、整数ALU213および複合オペレーション・サブユニット214のほかにパイプライン(図示されてない)を含むことができる。命令フェッチおよびデコード・パイプラインのような更なるパイプラインはプロセッサ101内に存在してもよい。
アドレス変換ハードウェア207は、命令ユニット201または実行ユニット211によって生成された有効アドレスをメモリにおける対応する実アドレスに変換する。好適な実施例では、プロセッサが、それぞれの実行プロセスに対応した有効アドレス空間における「有効アドレス」を生成する。有効アドレスは、更に大きいユニバーサル仮想アドレス空間における「仮想アドレス」に変換される。なお、ユニバーサル仮想アドレス空間には、すべてのプロセスによって共用される1つの仮想アドレス空間が存在する。更に、仮想アドレスは、データが置かれる実際のアドレス・ロケーションに対応する「実アドレス」に変換される。しかし、種々のコンピュータ・アーキテクチャが種々のアドレス構造を使用していること、および本発明がいかなる特定のアドレシング形式にも限定されないことは明らかであろう。
キャッシュ・メモリは、実アドレスを使用してアドレスされることが望ましく、従って、キャッシュ・メモリにおけるデータをアクセスするためには、プロセッサによって生成された有効アドレスが、先ず、アドレス変換ハードウェア207によって実アドレスに変換される。アドレス変換ハードウェア207は、図2において単一概念の構成要素として示され、変換ルックアサイド・バッファ、セグメント・ルックアサイド・バッファ、有効・実アドレス変換テーブル、またはその他の機構といった、この分野で知られている各種の変換機構のいずれをも、これらの構成のいずれのものにもおけるデータのアクセスおよび変換に関連するハードウェアと共に含むことができる。それとは別に、あるコンピュータ・システム設計において知られているように、プロセッサによって生成された有効アドレスを使用して、幾つかのまたはすべてのキャッシュ・レベルをアクセスすることが可能であろう。
L1 I-キャッシュ205およびL1 D-キャッシュ206は、データを命令ユニット201および実行ユニット211に提供する別々の命令キャッシュおよびデータ・キャッシュである。L2キャッシュは、命令および非命令データの両方を含む非判別キャッシュである。一般に、データは、命令ユニットまたは実行ユニットによってL1キャッシュから取り出されるかまたはL1キャッシュに記憶され、そしてデータがL1キャッシュにおいて得られない場合、それはL2キャッシュ208からL1キャッシュにロードされる。なお、L2キャッシュは、そのデータを外部ロケーションから得る。その後、そのデータは、L1キャッシュから対応するユニット201または211に転送される。プロセッサの設計次第で、L1キャッシュをバイパスし、L2キャッシュ208から実行レジスタまたは命令レジスタにデータをロードすることも可能であろう。
好適な実施例では、CPU101が複数の(望ましくは、2つの)スレッドの同時実行をサポートする。GPレジスタ212の別セット(図示されてない)および所定の他の構成体が各スレッドに対して存在する。しかし、サポートされるスレッドの数は変わることがあるし、本発明は、単一スレッドの実行のみをサポートするプロセッサにおいて使用することが可能である。
種々のCPUコンポーネントを説明し、高レベルで図示したが、好適な実施例のCPUが、本発明の理解にとっては本質的でない多くの他のコンポーネント(図示されてない)を含むことは当然である。例えば、一般的な設計では、種々の更なる特殊目的のレジスタが必要であろう。更に、図2のCPUがCPUアーキテクチャの単なる一例であること、およびCPU101内のコンポーネントの数、タイプ、および構成には多くの種々の変更が存在し得ること、図示されたコンポーネントに加えて、図示されてないコンポーネントが存在し得ること、および、図示されたコンポーネントすべてがCPU設計に存在するわけではないことは明らかであろう。例えば、バッファおよびキャッシュの数および構成が変わってもよく、実行ユニットのパイプラインの数および機能も変わってもよく、レジスタは種々のアレイおよびセットとして構成されてもよく、専用の浮動小数点ハードウェアが存在しても存在しなくてもよい。更に、CPU101は、各プロセッサ・サイクルによって単一のオペレーションまたは複数のオペレーションのディスパッチをサポートする単純なまたは複雑な命令を有することが可能である。
L1キャッシュ205および206は、各CPUがそれ自身のそれぞれのL1キャッシュを有するので、図2ではCPU101の一部として示される。体系的には、キャッシュは、メモリ102の一部として見なすことが可能であり、或いは、全体的に別個の構成要素として見なすことも可能である。図2の表示は、典型的なものであることを意図するもので、本発明を任意の特定の物理的なキャッシュ具現化に限定することを意図するものではない。プロセッサ・チップは、図2に表示されたものよりも多くのキャッシュまたは少ないキャッシュを含むことができる。
図3は、好適な実施例に従って、データを記憶およびアドレスするための種々のキャッシュおよび関連構造の階層を更に詳細に示す。この実施例には、メイン・メモリのほかに3つのレベルのキャッシュ・メモリが存在する。プロセッサ101は、集積回路プロセッサ・チップ301A、301B(本願では、全体的に、フィーチャ301と呼ばれる)の上にパッケージされる。各プロセッサ・チップは、一対のプロセッサ101(プロセッサ・コア)、チップ上の両プロセッサによって共用される単一のL2キャッシュ208A、208B(本願では、全体的に、フィーチャ208と呼ばれる)、チップ上の両プロセッサによって共用される単一のL3キャッシュ・ディレクトリ302A、302B(本願では、全体的に、フィーチャ302と呼ばれる)、および外部データ・インターフェース304A、304B(本願では、全体的に、フィーチャ304と呼ばれる)を含む。各L3キャッシュ・ディレクトリ302と関連したL3キャッシュ303A、303B(本願では、全体的に、フィーチャ303と呼ばれる)が、メイン・メモリ102よりもプロセッサに物理的に近い位置のプロセッサ・チップの外に設置される。例えば、L3キャッシュ303は、対応するプロセッサ・チップ301と共に共通のプリント回路基板上に装着された別の集積回路チップとしてパッケージされてもよい。外部データ・インターフェース304は、プロセッサ・チップ境界を横切って、更にプロセッサ・チップとメイン・メモリ102との間またはプロセッサ・チップとL3キャッシュ303との間にある、マラは他の構成体へ向かうメモリ・バス103を介して、データの転送を処理する。
レベル3キャッシュは、レベル2キャッシュのビクティム・キャッシュとして作用する。メイン・メモリからのデータは、先ず、L3キャッシュ303をバイパスすることによってL2キャッシュ208にロードされる。データがL2キャッシュ208から追放されるとき、そのデータはL3キャッシュ303にロードされる。それは、L3キャッシュからL2キャッシュに再ロードされるか、または最終的にメイン・メモリに追放される。データは、L2キャッシュ208からL1 I-キャッシュ205またはL1 D-キャッシュ206にロードされる。設計次第で、データをロードするとき、例えば、データをL3キャッシュからL1キャッシュに直接にロードするよう、他のキャッシュ・レベルをバイパスすることも可能である。
L2キャッシュおよびL3キャッシュにおいてデータが重複してないことが望ましい。即ち、データのキャッシュ・ラインが任意の所与の時間にそれらのキャッシュのいずれか1つにはあってもよいが、両方にはあってはならない。
好適な実施例では、L2キャッシュおよびL3キャッシュの間に1対1の対応が存在するが、これは必ずしも必要ではなく、各L3キャッシュに対して複数のL2キャッシュが存在することも可能である。L2/L3のキャッシュ対が単一チップ301上の一対のプロセッサ(プロセッサ・コア)によって共用されることが望ましい。
キャッシュは高速になり、より高いレベルでは(プロセッサにより近いレベルでは)漸進的に少ないデータを記憶する。本願において開示された大型コンピュータ・システムを代表する実施例では、各L2キャッシュ208は128バイトのキャッシュ・ライン・サイズおよび16Mバイトの合計記憶容量を有する。各L3キャッシュは128バイトのキャッシュ・ライン・サイズおよび48Mバイトの合計記憶容量を有する。L2キャッシュは8ウェイ連想のものであり、16Kの連想セットに分割される(即ち、各連想セットは8キャッシュ・ラインのデータ、即ち、1Kバイトのデータを含む)。L3キャッシュは16ウェイ連想のものであり、24Kの連想セットに分割される(即ち、各々が16キャッシュ・ラインのデータ、即ち、2Kバイトのデータを含む)。L2キャッシュに対するアクセス・タイムは約20プロセッサ・サイクルであり、L3キャッシュに対するアクセス・タイムは約100プロセッサ・サイクルである。同様の目的で、メイン・メモリに対するアクセス・タイムは1000プロセッサ・サイクルのオーダーであり、従って、メイン・メモリのアクセスとは反対に、L2または高レベルにおけるキャッシュ・ミスがL3キャッシュにおけるデータによって満たされる場合、大きなパフォーマンス利得が実現可能である。一般に、L1キャッシュは小型で、高速のアクセス・タイムを有する。しかし、これらのパラメータは、単に、現在のテクノロジを使用する大型システムにおける典型的なキャッシュを表す。これらの典型的なパラメータは、テクノロジが進歩するに従って変わり得る。小型のコンピュータ・システムは、一般に、それに対応して小型のキャッシュを有するであろうし、それのキャッシュ・レベルは少ないであろう。本発明は、いかなる特定のキャッシュ・サイズ、アクセス・タイム、キャッシュ・ライン・サイズ、キャッシュ・レベルの数にも限定されないし、特定なレベルにおけるキャッシュが複数のプロセッサによって共用されるかどうか、あるいは単一のプロセッサ専用であるかどうか、または同様の設計パラメータにも限定されない。
その分野では知られているように、キャッシュは、選択的アドレス・ビット(または、ある場合には、スレッド識別子ビットのような付加ビット)から連想セットの識別をデコードすること、および連想セットにおけるキャッシュ・ラインのアドレスと所望のデータ・アドレスとを比較することによってアクセスされる。例えば、キャッシュに1Kの連想セットが存在する場合、その1Kの中から特定の連想セットを指定するために10ビットが必要である。理論的に云えば、これらの10ビットは、各連想セットが、同等の確率でアクセスされるように決定される。
一般的に云えば、コンピュータ・システムの設計者は、典型的には、相対的下位実アドレス・ビットを使用して、これらの下位ビットがメモリ・アクセスの無作為割り振りに対応するという仮定のもとに、連想セットを決定する。その結果、各連想セットが同じ頻度でアクセスされる。しかし、必ずしも十分には理解されていない種々の理由のために、多くの環境では、メモリ・アクセスは、典型的なL2またはL3キャッシュのレベルにおける下位アドレス・スライスにおいてランダムには分散されない。この現象は、多くのデータベースおよび他のソフトウェア・データ構造の設計によって少なくとも部分的に生じるように見えるが、他の要素が貢献しているかもしれない。これらのデータ構造は、所定のアドレス境界上に揃えられることが多く、ある低レベル・アドレス・ビットにおけるデータをより頻繁にアクセスさせる。この現象は、一般に、数が少ない連想セットおよび平均存続期間が短いデータを有するL1キャッシュのレベルでは取るに足りないことである。しかし、L2またはL3キャッシュのレベルでは、種々の連想セット間におけるアクセス頻度の大きな偏差を検出して、アクセス頻度が低い他の連想セットの間に「ホットな」セットを作成することが可能である。
本発明の好適な実施例によれば、連想セットの一致グループはL2およびL3キャッシュ・レベルで確立される。各一致グループは、L2レベルにおける複数の連想セットおよびL3レベルにおける複数の連想セットを含む。具体的にいうと、好適な実施例では、各グループは、L2レベルにおける2つの連想セットおよびL3レベルにおける3つの連想セットを含む。単一の一致グループ内のL2レベルにおける連想セットの各々は、同じ一致グループ内のL3レベルにおける連想セットをすべて共用する。従って、L2レベルにおける連想セットの1つがホットであるが他の連想セットはホットでない場合、L3キャッシュの同じ一致グループにおける連想セットは、L2キャッシュのホット連想セットに対応したデータを記憶するためにその大部分が使用され、L2キャッシュにおけるホット連想セットの観点からL3キャッシュの連想性を効果的に増加させる。
図4は、好適な実施例に従って、L2およびL3キャッシュにおける連想セットの一致グループを概念的に表示したものである。図4に示されるように、一致グループ401は、L2キャッシュ208内の2つの連想セット402、403およびL3キャッシュ303内の3つの連想セット404−406を含む。一致グループ401における各L2連想セット(即ち、セット402および403)は、その一致グループにおける3つのL3連想セットに対応する。即ち、セット402のようなL2連想セットにマップされるデータ・アドレスが分散態様で3つのL3連想セット404−406にマップされる。理想的には、これらのアドレスは、3つのL3連想セットすべてに対するデータ・アクセスの頻度が等しくなるように、それら3つのL3連想セットに分散している。
L2キャッシュには16Kの連想セットが存在して各一致グループがそのようなセットを2つ含み、L3キャッシュには24Kの連想セットが存在して各一致グループがそのようなセットを3つ含むので、L2/L3キャッシュの対に対して合計8Kの一致グループが存在することになる。システムは2つ以上のL2/L3キャッシュの対を有することがあり、その場合、そのような対の各々は8Kの一致グループを有する。
図4に示されるように、アクセスされるべきデータの実アドレス411が、L2およびL3キャッシュの連想セットを選択するために使用される。この図では、実アドレス411は、12乃至63の番号を付された52ビットを含み、ビット63は最下位ビットである。7個の下位アドレス・ビット、即ち、ビット57〜63はアドレスのオフセット部分を構成し、中間範囲のビット(ビット43〜56)はインデックス部分であり、そして上位アドレス・ビット(ビット12〜43)はタグと呼ばれることがある。オフセット・ビットは、128ビットのキャッシュ・ライン内のデータのアドレスを決定する。L2キャッシュ208には16Kの連想セットが存在するので、そのL2キャッシュにおける16Kのセットの中から単一の連想セットを指定するためには14ビットが必要である。好適な実施例では、オフセットのすぐ上の下位実アドレス・ビットであるインデックス・ビット(実アドレス・ビット43〜56)がL2キャッシュにおける連想セットを選択するために使用される。これらの実アドレス・ビットは、上位キャッシュにおける連想セットを選択するために変更なしに使用される。この実施例では、一致グループ401におけるL2連想セット402、403の両方とも同じビット43〜55(13ビット)を共用するので、実質的には、ビット43〜55が一致グループを決定し、一方、ビット56がその一致グループにおける2つの連想セットの1つを選択する。
L3キャッシュにおける連想セットは、変更されない実アドレス・ビットとハッシュ関数とを結合したものを使用して選択される。詳しく云えば、実アドレス・インデックス・ビット43〜55(13ビット)が一致グループを指定するために使用される。それは、L2キャッシュにおける一致グループを指定するために使用されたビットと同じビットである。その一致グループにおける3つの連想セット404〜406の1つを選択するためにハッシュ関数が使用される。
ハッシュ関数とは、任意の所与のデータ・アドレスに対して反復可能であり、かつ一致グループの3つの連想セットにおけるデータ・アクセスのほぼ均等な分散を生じる任意の関数である。好適な実施例では、ハッシュ関数は、実アドレスのある部分のモジュロ3関数である。実アドレスのすべてのタグ・ビット(即ち、7ビットのオフセットおよび14ビットのインデックスの上にある実アドレス・ビット12〜42)のモジュロ3関数を導出することは可能であろうが、付加ビットが更なる遅れおよび/または回路要件を課し、しかも、上位のビットでは、益々恩恵を少なくするので、これらのビットのうちのあるものだけを使用することが望ましい。例えば、モジュロ3関数は、実アドレス・ビット35〜42から導出されてもよい。しかし、他の実アドレス・ビットを使用することもできる他のビットの組み合わせや他のハッシュ関数を使用することも可能であろう。3つの連想セットに対するデータ・アドレスの完全に均等な割り振りを、2の累乗である範囲から得ることは不可能であることがわかるであろうが、ハッシュ関数において十分に大きい数のアドレス・ビットが使用される場合、この矛盾は取るに足りないことである。
ハッシュ関数は、低レベル・キャッシュにおけるアドレスの割り振りを散在させることが望ましい。即ち、インデックス・ビットの上のアドレス・ビット(実アドレス・ビット12〜42)を考える場合、この範囲における順次アドレスは、一般に、低レベル・キャッシュでは種々の連想セットに割り振られる。モジュロ3の場合、この範囲におけるアドレスは、ラウンド・ロビンに基づき割り振られる。しかし、ハッシュ関数は、一般にはおおむね均等にアドレスを分散すべきであるが、厳密にはラウンド・ロビンでない割り振りを小さな単位(望ましくは、単一キャッシュ・ラインの単位)でもって実行することもある。
図5は、好適な実施例に従って、関連あるアクセス機構を含むL2キャッシュ208の構造を示したものである。図5を参照すると、L2キャッシュは、キャッシュ・データ・テーブル505およびインデックス504を含む。データ・テーブル505は、連想セット402においてグループ化された複数のキャッシュ・ラインを含む。好適な実施例では、各キャッシュ・ライン501が128バイトを含み、各連想セット402が8個のキャッシュ・ラインを含む。インデックス504はインデックス・エントリ502の行503を含む。各行503は、連想セット402に対応し、8個のインデックス・エントリを含む。各インデックス・エントリ502は、対応するキャッシュ・ライン501の実アドレスの少なくとも一部分および制御ビットを含む。制御ビットは、その分野では知られているように、ダーティ・ビットや、最低使用頻度(LRU)ビットといった追放されるべきキャッシュ・ラインを選択するための1つまたは複数のビットや、キャッシュ・コヒーレンシ(首尾一貫性)を維持するためのセマフォー、ロック、または同様の機構、として使用される1つまたは複数のビットや、その他を含むことができるが必ずしもそれに限定されない。
セレクタ・ロジック506を使用して、所望のデータの実アドレス411の所定部分に対応するインデックス504の行503を選択することによって、1つのキャッシュ・ラインが参照される。好適な実施例では、実アドレスのビット43乃至56における14ビットがセレクタ・ロジック506に入力される。しかる後、その選択された行503の個別の各インデックス・エントリ502における実アドレス511が、比較ロジック508によって、その参照されたデータの実アドレス411と比較される。実際には、実アドレスの上位桁ビット部分(即ち、ビット12乃至42)を比較することが必要なだけである。それは、ビット43〜56が、本来は、行選択によって比較し、オフセット・ビット57〜63はキャッシュ・ラインを決定する必要がないためである。比較一致が得られる場合、比較ロジック508は、8個のインデックス・エントリの一致したものに対応する選択信号を出力する。セレクタ・ロジック507が、セレクタ506によって使用される同じ実アドレス・ビットを使って、キャッシュ・ライン501の連想セット402を選択し、比較ロジック508の出力がその選択された連想セットにおける8個のキャッシュ・ライン501の1つを選択する。
図5にはセレクタ・ロジック506および507が別々の構成要素として示されるが、それらが同様の機能を遂行することは明らかであろう。チップの設計にも依存するが、これらは実際、インデックス504におけるインデック行503およびキャッシュ・データ・テーブル505における連想セット402の両方を同時に選択する出力を持った単一のセレクタであってもよい。
L3キャッシュも同じであるが、キャッシュ・ラインの連想セットを選択するために変更されない実アドレス・ビットのほかにハッシュ関数が使用される。図6は、本発明の好適な実施例に従って、図3におけるL3キャッシュ303、L3キャッシュ・ディレクトリ302、および関連のアクセス機構の構造を示したものである。
図6を参照すると、L3キャッシュは、キャッシュ・データ・テーブル605およびインデックス604を含む。キャッシュ・データ・テーブル605は、連想セット404におけるグループ化された複数キャッシュ・ラインのデータ601を含む。好適な実施例では、各キャッシュ・ライン601は128バイトを含み、各連想セット404は16個のキャッシュ・ラインを含む。インデックス604はインデックス・エントリ602の行を含み、各行は連想セット404に対応し、16個のインデックス・エントリを含む。各インデックス・エントリは、対応するキャッシュ・ライン601の実アドレス611の少なくとも一部分及び制御ビット612を含む。制御ビットは、その分野では知られているように、ダーティ・ビットや、最低使用頻度(LRU)ビットといった追放されるべきキャッシュ・ラインを選択するための1つまたは複数のビットや、キャッシュ・コヒーレンシを維持するためのセマフォー、ロック、または同様の機構、として使用される1つまたは複数のビットや、その他を含むことができるが、必ずしもそれに限定されない
セレクタ・ロジック606を使用して、所望のデータの実アドレス411のある部分に対応するインデックス604の3つの行603のグループを選択することによって、1つのキャッシュ・ラインが参照される。この3行のグループは一致グループ401に対応する。好適な実施例では、その一致グループを選択するために、実アドレスのビット43乃至55における13ビットがセレクタ・ロジック606に入力される。ハッシュ関数ジェネレータ609の出力を使用して、セレクタ606により選択された3行のグループから、行603の1つが選択される。前に説明したように、ハッシュ関数は実アドレスのある部分のモジュロ3関数であることが望ましいが、代わりに、他のハッシュ関数が使用されてもよい。次に、選択されたデータの各インデックス・エントリのそれぞれにおける実アドレス部分611が、参照されたデータの実アドレス411の対応する部分と比較ロジック608によって比較される。比較一致がある場合、比較ロジック608が、16個のインデックス・エントリの比較一致したものに対応する選択信号を出力する。セレクタ606によって使用された同じ実アドレス・ビットを使用して、セレクタ・ロジック607がキャッシュ・ライン601の3つの連想セットのグループ(即ち、一致グループ)を選択する。ハッシュ関数ジェネレータ609の出力を使用して、一致グループにおける単一の連想セット404がその3つの連想セットから選択される。比較ロジック608の出力が、その選択された連想セット404における16個のキャッシュ・ライン601の1つを選択する。
図6に示された構造全体が、ときにはL3キャッシュと呼ばれ、あるいはまた、キャッシュ・データ・テーブル605および関連の構造体がL3キャッシュと呼ばれる。好適な実施例では、一般に、インデックス・テーブル604、セレクタ・ロジック606、ハッシュ関数ジェネレータ609、および比較ロジック608を含むL3キャッシュ・ディレクトリ302が物理的にプロセッサ・チップ301内に実現され、一方、キャッシュ・データ・テーブル605およびセレクタ・ロジック607が物理的にそのチップの外において実現される。ハッシュ関数ジェネレータ609は、図3においてフィーチャ303として総体的に表されたL3キャッシュのオフ・チップ部分において重複してもよい。
動作時には、可能であれば、L1キャッシュからのメモリ参照が満足される。L1キャッシュがミスする場合、L2およびL3キャッシュ・インデックス(ディレクトリ)が、選択的実アドレス・ビットを使用して同時にアクセスされ、必要なデータがどちらかのキャッシュにあるかどうかを決定する。そのデータがL2キャッシュにある場合、一般に、それはL2キャッシュからL1キャッシュにロードされるが、変更されないままL2キャッシュに残る。(なぜなら、L2キャッシュが共用され、そのデータが他のプロセッサのL1キャッシュ内にあって、一時的に利用し得ないという状況が起こり得るためである)。
データがL3キャッシュにある(即ち、L2キャッシュにない)場合、それは、L3キャッシュからL2およびL1キャッシュに同時にロードされる。この場合、最低使用頻度のような種々の一般的な選択手法のいずれかを使用して、L2キャッシュの1つのデータ・ラインが、L3キャッシュへの追放のために選択される。L3キャッシュはL2キャッシュにそのラインの1つをロードしようとするので、そのラインがL2キャッシュにロードされることはL2キャッシュからの追放ラインのための空きを作るであろうし、L3キャッシュからラインを追放する必要はない。L1キャッシュに空きを作るために、既存のラインの1つが追放のために選択されるであろう。しかし、L1キャッシュ・エントリがL2キャッシュにおいても重複しているので、この追放ラインは、既にL2キャッシュに必ず存在し、それのための空きを作る必要はない。
データがL2キャッシュおよびL3キャッシュのいずれにもない場合、それはメイン・メモリからL2キャッシュおよびL1キャッシュにフェッチされる。この場合、任意の一般的な手法を用いて、L2キャッシュの1つのキャッシュ・ラインがL3キャッシュに追放するために選択される。L3キャッシュに空きを作るためには、再び任意の一般的な手法を用いて、L3キャッシュにおけるキャッシュ・ラインがメイン・メモリへの追放のために選択されなければならない。
上記のような好適な実施例では、L2キャッシュは要求時において(即ち、データ参照が行われるときのキャッシュ・ミスの場合に)のみロードされ、L3キャッシュはL2キャッシュのビクティム・キャッシュであり、データはL2およびL3キャッシュにおいて重複しない。しかし、現在知られている、または今後開発される種々の選択方法のうちのいずれかを使用して、これらのキャッシュの1つまたは両方を操作することは可能であろう。例えば、実際のデータ参照およびキャッシュ・ミスに先立って、データをL2キャッシュまたはL3キャッシュに将来を見越してロードするために、何らかのプリフェッチ手法を使用することも可能である。
好適な実施例では、一致グループが、高レベルのキャッシュにおいて2つの連想セットを含み、低レベルのキャッシュにおいて3つの連想セットを含む。しかし、これらの数が1つの実施例を表すだけであること、および一致グループが異なる数の連想セットを有し得ることは明らかであろう。一致グループにおける連想セットの数とアクセスの複雑さとの間には何らかの設計トレード・オフが存在するであろう。一般に、各一致グループにおけるより多くの数の連想セットが概して無作為化を改善するが、実装の複雑性を増大させるであろう。
低レベルの連想セットの1つにおける不測のホット・アクティビティを回避するために、同じ2の累乗の境界内におけるアドレスが低レベル・キャッシュにおける種々の連想セット内に分散するよう、一致グループにおける連想セットの数およびハッシュ関数が選択されることが望ましい。このためには、好適な実施例におけるように、2または3のような公約数を持たない数の対を使用することに幾つかの利点がある。例えば、低レベル・キャッシュが各一致グループにおいて3つの連想セットを含む場合、モジュロ3ハッシュ関数が2の累乗の境界内にアドレスを分散させる。しかし、適切なハッシュ関数だけを使用して同様の効果を得ることも可能である。例えば、アドレスの配置を分散させるキャッシュ関数を使用して一致グループ内の低レベル・キャッシュの連想セットが選択される場合、高レベル・キャッシュには2つの連想セットが存在することがあり、低レベル・キャッシュには4つの連想セットが存在することがある。
上述のように、低レベル・キャッシュにおける2の累乗の境界内でアドレスの配置を分散させることが望ましいが、それは厳密には必要とされず、別の方法で、あるいはアドレス配置を分散させることなく、本発明の利点で実現可能である。例えば、他には、(例えば、各一致グループにおける3つの高レベルの連想セットを使用して)高レベル・キャッシュにおいてアドレスの配置を分散させることが可能であろう。
好適な実施例では、高レベル・キャッシュの連想セットにおけるアドレスを低レベル・キャッシュにおける3つの連想セットに分散するために、実アドレスの上位桁ビットを使用するモジュロ3ハッシュ関数が使用される。高レベル・キャッシュの連想セットにおけるアドレスを低レベル・キャッシュにおける複数のセットに分散するために、種々のハッシュ関数または他の関数を使用することも可能である。高レベル・キャッシュのアドレスは小さい単位または1の単位でもって分散されることが望ましく、それは、高レベル・キャッシュにおける連想セットを決定するために用いられる実アドレス・インデックスの上の各順次実アドレス部分について、一般に、異なる連想セットが低レベル・キャッシュにおいては、異なる連想セットが一般に選択されるということを意味する。しかし、これとは別に、実アドレス・インデックスの上に実アドレス部分の連続ブロックを割り振ることも可能であろう。
好適な実施例では、キャッシュまたはメモリをアクセスするとき、有効アドレスが仮想アドレスに変換され、その仮想アドレスが順次実アドレスに変換されるという3レベル・アドレシング方式をコンピュータ・システムが使用する。しかし、本発明は、いずれの特定のアドレシング方式にも限定されないし、3レベルよりも少ないレベルのアドレシング、または3レベルよりも多いレベルのアドレシングを有するシステムに適用することも可能であろう。
本発明の特定の実施例を、代替方法と共に開示したが、「特許請求の範囲」の範囲内で形式および詳細に関する更なる変更を行い得ることは当業者には明らかであろう。
本発明の好適な実施例に従って、種々のキャッシュ・レベルにおける連想セットを重畳する一致グループを利用したコンピュータ・システムの主要ハードウェア・コンポーネントの高レベル・ブロック図である。 好適な実施例のコンピュータ・システムにおけるCPUコアの主要コンポーネントの高レベル・ブロック図である。 好適な実施例に従って、データを記憶し、アドレスするための種々のキャッシュおよび関連構造の階層を更に詳細に示す図である。 好適な実施例に従って、高レベル・キャッシュおよび低レベル・キャッシュにおける連想セットの一致グループの概念的表示を示す図である。 好適な実施例に従って、関連あるアクセス機構を含むL2キャッシュの構成を示す図である。 好適な実施例に従って、関連あるアクセス機構を含むL3キャッシュの構成を示す図である。

Claims (30)

  1. 少なくとも1つのプロセッサと、
    メモリと、
    前記メモリの一部分を一時的に保持し、複数のアドレス可能な連想セットを有する第1キャッシュであって、各連想セットがそれぞれの1つまたは複数のキャッシュ・ラインを含む、第1キャッシュと、
    前記メモリの一部分を一時的に保持し、複数のアドレス可能な連想セットを有する第2キャッシュであって、各連想セットがそれぞれの1つまたは複数のキャッシュ・ラインを含む、第2キャッシュと、
    を含み、
    前記第1キャッシュの前記連想セットおよび前記第2キャッシュの前記連想セットが複数の一致グループに対応し、各一致グループがそれぞれ、前記第1キャッシュの複数の連想セットおよび前記第2キャッシュの複数の連想セットを含み、
    前記第1キャッシュの各連想セットにそれぞれ対応するアドレスが、同じ一致グループ内の前記第2キャッシュにおける前記複数の連想セットの間で割り振られる
    ディジタル・データ処理装置。
  2. 前記第1キャッシュの各連想セットのそれぞれに対応するアドレスが、同じ一致グループ内の第2キャッシュにおける前記複数の連想セットの間で、前記それぞれの連想セットを決定するために使用されたアドレス・ビット以外の少なくとも幾つかのアドレス・ビットのハッシュ関数を用いて、割り振られる、請求項1に記載のディジタル・データ処理装置。
  3. 前記ハッシュ関数がモジュロN関数であり、Nは前記一致グループにおける前記第2キャッシュの連想セットの数である、請求項2に記載のディジタル・データ処理装置。
  4. 前記一致グループの各々が、前記第1キャッシュのM個の連想セットおよび前記第2キャッシュのN個の連想セットを含み、MおよびNの最大公約数が1である、請求項1に記載のディジタル・データ処理装置。
  5. 前記第1キャッシュおよび前記第2キャッシュにおいてデータが重複しない、請求項1に記載のディジタル・データ処理装置。
  6. 前記第1キャッシュが前記第2キャッシュよりも高いレベルにある、請求項1に記載のディジタル・データ処理装置。
  7. 前記第2キャッシュが前記第1キャッシュのビクティム・キャッシュである、請求項6に記載のディジタル・データ処理装置。
  8. 第3キャッシュを含み、前記第3キャッシュが前記第1キャッシュおよび前記第2キャッシュよりも高いレベルにある、請求項6に記載のディジタル・データ処理装置。
  9. 前記第1キャッシュおよび前記第2キャッシュが実メモリ・アドレスを使ってアドレス可能である、請求項1に記載のディジタル・データ処理装置。
  10. 前記第1キャッシュにおける前記連想セットの各々が複数のキャッシュ・ラインをそれぞれ含み、前記第2キャッシュにおける前記連想セットの各々が複数のキャッシュ・ラインをそれぞれ含む、請求項1に記載のディジタル・データ処理装置。
  11. 少なくとも1つのプロセッサ・コアと、
    第1キャッシュをアクセスするための第1キャッシュ・アクセス・ロジックであって、前記第1キャッシュがメモリの一部分を一時的に保持し、前記第1キャッシュ・アクセス・ロジックが前記第1キャッシュの複数の連想セットの中から前記プロセッサ・コアによって生成された入力アドレスに対応した前記第1キャッシュの連想セットを決定し、各連想セットがそれぞれの1つまたは複数のキャッシュ・ラインを含む、第1キャッシュ・アクセス・ロジックと、
    第2キャッシュをアクセスするための第2キャッシュ・アクセス・ロジックであって、前記第2キャッシュが前記メモリの一部分を一時的に保持し、前記第2キャッシュ・アクセス・ロジックが前記第2キャッシュの複数の連想セットの中から前記プロセッサ・コアによって生成された前記入力アドレスに対応した前記第2キャッシュの連想セットを決定し、各連想セットがそれぞれの1つまたは複数のキャッシュ・ラインを含む、第2キャッシュ・アクセス・ロジックと、
    を含み、
    前記第1キャッシュの前記連想セットおよび前記第2キャッシュの前記連想セットが複数の一致グループに対応し、各一致グループがそれぞれ、前記第1キャッシュの複数の連想セットおよび前記第2キャッシュの複数の連想セットを含み、
    前記第1キャッシュの各連想セットにそれぞれ対応するアドレスが、同じ一致グループ内の前記第2キャッシュにおける前記複数の連想セットの間で割り振られる
    ディジタル・データ処理のための集積回路チップ。
  12. 前記第1キャッシュの各連想セットのそれぞれに対応するアドレスが、同じ一致グループ内の第2キャッシュにおける前記複数の連想セットの間で、前記それぞれの連想セットを決定するために使用されたアドレス・ビット以外の少なくとも幾つかのアドレス・ビットのハッシュ関数を用いて割り振られる、請求項11に記載の集積回路チップ。
  13. 前記ハッシュ関数がモジュロN関数であり、Nは前記一致グループにおける前記第2キャッシュの連想セットの数である、請求項12に記載の集積回路チップ。
  14. 前記一致グループの各々が、前記第1キャッシュのM個の連想セットおよび前記第2キャッシュのN個の連想セットを含み、MおよびNの最大公約数が1である、請求項11に記載の集積回路チップ。
  15. 前記第1キャッシュおよび前記第2キャッシュにおいてデータが重複しない、請求項11に記載の集積回路チップ。
  16. 前記第1キャッシュが前記第2キャッシュよりも高いレベルにある、請求項11に記載の集積回路チップ。
  17. 前記第2キャッシュが前記第1キャッシュのビクティム・キャッシュである、請求項16に記載の集積回路チップ。
  18. 前記第1キャッシュおよび前記第2キャッシュが実メモリ・アドレスを使ってアドレス可能である、請求項11に記載の集積回路チップ。
  19. 前記第1キャッシュにおける前記連想セットの各々が複数のキャッシュ・ラインをそれぞれ含み、前記第2キャッシュにおける前記連想セットの各々が複数のキャッシュ・ラインをそれぞれ含む、請求項11に記載の集積回路チップ。
  20. 前記第1キャッシュおよび前記第2キャッシュの少なくとも1つを含む、請求項11に記載の集積回路チップ。
  21. 複数のプロセッサ・コアを含み、前記複数のプロセッサ・コアが前記第1キャッシュおよび前記第2キャッシュを共用する、請求項11に記載の集積回路チップ。
  22. 入力アドレスに応答して、前記入力アドレスに対応した第1キャッシュの連想セットを前記第1キャッシュの複数の連想セットの中から決定するステップであって、各連想セットがそれぞれの1つまたは複数のキャッシュ・ラインを含む、ステップと、
    第1キャッシュの連想セットを決定する前記ステップに応答して、第1キャッシュの連想セットを決定する前記ステップにより決定された連想セットが前記入力アドレスに対応するデータを含むかどうかを決定するステップと、
    前記入力アドレスに応答して、前記入力アドレスに対応した第2キャッシュの連想セットを前記第2キャッシュの複数の連想セットの中から決定するステップであって、各連想セットがそれぞれの1つまたは複数のキャッシュ・ラインを含む、ステップと、
    第2キャッシュの連想セットを決定する前記ステップに応答して、第2キャッシュの連想セットを決定する前記ステップにより決定された連想セットが前記入力アドレスに対応するデータを含むかどうかを決定するステップと、
    を含み、
    前記第1キャッシュの前記連想セットおよび前記第2キャッシュの前記連想セットが複数の一致グループに対応し、各一致グループがそれぞれ、前記第1キャッシュの複数の連想セットおよび前記第2キャッシュの複数の連想セットを含み、
    前記第1キャッシュの各連想セットにそれぞれ対応するアドレスが、同じ一致グループ内の前記第2キャッシュにおける前記複数の連想セットの間で割り振られる
    ディジタル・データ処理装置においてキャッシュ・メモリを操作する方法。
  23. 前記第1キャッシュの各連想セットのそれぞれに対応するアドレスが、同じ一致グループ内の第2キャッシュにおける前記複数の連想セットの間で、前記それぞれの連想セットを決定するために使用されたアドレス・ビット以外の少なくとも幾つかのアドレス・ビットのハッシュ関数を用いて割り振られる、請求項22に記載の方法。
  24. 前記ハッシュ関数がモジュロN関数であり、Nは前記一致グループにおける前記第2キャッシュの連想セットの数である、請求項23に記載の方法。
  25. 前記一致グループの各々が、前記第1キャッシュのM個の連想セットおよび前記第2キャッシュのN個の連想セットを含み、MおよびNの最大公約数が1である、請求項22に記載の方法。
  26. 前記第1キャッシュおよび前記第2キャッシュにおいてデータが重複しない、請求項22に記載の方法。
  27. 前記第1キャッシュが前記第2キャッシュよりも高いレベルにある、請求項22に記載の方法。
  28. 前記第2キャッシュが前記第1キャッシュのビクティム・キャッシュである、請求項27に記載の方法。
  29. 前記第1キャッシュおよび前記第2キャッシュが実メモリ・アドレスを使ってアドレス可能である、請求項22に記載の方法。
  30. 前記第1キャッシュにおける前記連想セットの各々が複数のキャッシュ・ラインをそれぞれ含み、前記第2キャッシュにおける前記連想セットの各々が複数のキャッシュ・ラインをそれぞれ含む、請求項22に記載の方法。
JP2004356031A 2003-12-09 2004-12-08 種々のキャッシュ・レベルにおける連想セットの重畳一致グループを有するマルチレベル・キャッシュ Expired - Fee Related JP4006436B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/731,065 US7136967B2 (en) 2003-12-09 2003-12-09 Multi-level cache having overlapping congruence groups of associativity sets in different cache levels

Publications (2)

Publication Number Publication Date
JP2005174341A JP2005174341A (ja) 2005-06-30
JP4006436B2 true JP4006436B2 (ja) 2007-11-14

Family

ID=34634288

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004356031A Expired - Fee Related JP4006436B2 (ja) 2003-12-09 2004-12-08 種々のキャッシュ・レベルにおける連想セットの重畳一致グループを有するマルチレベル・キャッシュ

Country Status (4)

Country Link
US (1) US7136967B2 (ja)
JP (1) JP4006436B2 (ja)
CN (1) CN1307561C (ja)
TW (1) TWI329803B (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7124249B1 (en) * 2003-06-26 2006-10-17 Emc Corporation Method and apparatus for implementing a software cache
US20060112226A1 (en) 2004-11-19 2006-05-25 Hady Frank T Heterogeneous processors sharing a common cache
US20070118695A1 (en) * 2005-11-18 2007-05-24 International Business Machines Corporation Decoupling storage controller cache read replacement from write retirement
CN100419715C (zh) * 2005-11-25 2008-09-17 华为技术有限公司 嵌入式处理器系统及其数据操作方法
US9430745B2 (en) * 2005-12-21 2016-08-30 International Business Machines Corporation Pre-executing workflow preparation activities based on activity probabilities and system load and capacity threshold requirements
US7549022B2 (en) * 2006-07-21 2009-06-16 Microsoft Corporation Avoiding cache line sharing in virtual machines
JP5295958B2 (ja) * 2006-08-01 2013-09-18 マサチューセッツ インステチュート オブテクノロジー エクストリーム仮想メモリ
US7711678B2 (en) * 2006-11-17 2010-05-04 Microsoft Corporation Software transaction commit order and conflict management
JP4920378B2 (ja) * 2006-11-17 2012-04-18 株式会社東芝 情報処理装置およびデータ検索方法
US7856529B2 (en) * 2007-04-12 2010-12-21 Massachusetts Institute Of Technology Customizable memory indexing functions
JP5411530B2 (ja) * 2009-03-04 2014-02-12 キヤノン株式会社 並列処理プロセッサシステム
CN102103549A (zh) * 2009-12-18 2011-06-22 上海华虹集成电路有限责任公司 一种缓存替换方法
US9465745B2 (en) 2010-04-09 2016-10-11 Seagate Technology, Llc Managing access commands by multiple level caching
US8688914B2 (en) * 2011-11-01 2014-04-01 International Business Machines Corporation Promotion of partial data segments in flash cache
US9141609B2 (en) 2011-12-01 2015-09-22 Oracle International Corporation Reducing sequence cache latch contention in a database system
US9189295B2 (en) * 2011-12-01 2015-11-17 Oracle International Corporation Generating an ordered sequence in a database system using multiple interleaved caches
US9910893B2 (en) 2011-12-01 2018-03-06 Oracle International Corporation Failover and resume when using ordered sequences in a multi-instance database environment
KR20150019788A (ko) * 2013-08-16 2015-02-25 에스케이하이닉스 주식회사 캐시 장치 및 그 제어 방법
US10055350B2 (en) * 2014-05-06 2018-08-21 Google Llc Controlled cache injection of incoming data
WO2016009247A1 (en) * 2014-07-14 2016-01-21 Via Alliance Semiconductor Co., Ltd. Cache system with primary cache and overflow cache that use different indexing schemes
US20160259728A1 (en) * 2014-10-08 2016-09-08 Via Alliance Semiconductor Co., Ltd. Cache system with a primary cache and an overflow fifo cache
US9996350B2 (en) 2014-12-27 2018-06-12 Intel Corporation Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array
US9690710B2 (en) * 2015-01-15 2017-06-27 Qualcomm Incorporated System and method for improving a victim cache mode in a portable computing device
US9767041B2 (en) * 2015-05-26 2017-09-19 Intel Corporation Managing sectored cache
US20170091117A1 (en) * 2015-09-25 2017-03-30 Qualcomm Incorporated Method and apparatus for cache line deduplication via data matching
US20180052778A1 (en) * 2016-08-22 2018-02-22 Advanced Micro Devices, Inc. Increase cache associativity using hot set detection
CN109992413B (zh) * 2019-03-01 2021-09-24 中国科学院计算技术研究所 一种面向宽度优先搜索算法的加速装置、方法及存储介质
US11188475B1 (en) * 2020-10-02 2021-11-30 Arm Limited Apparatus and method for managing caches in a cache hierarchy
CN112433961B (zh) * 2020-12-02 2022-07-08 海光信息技术股份有限公司 复合缓存目录系统及其管理方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5133061A (en) * 1987-10-29 1992-07-21 International Business Machines Corporation Mechanism for improving the randomization of cache accesses utilizing abit-matrix multiplication permutation of cache addresses
US5623627A (en) * 1993-12-09 1997-04-22 Advanced Micro Devices, Inc. Computer memory architecture including a replacement cache
US6260114B1 (en) * 1997-12-30 2001-07-10 Mcmz Technology Innovations, Llc Computer cache memory windowing
US6192451B1 (en) * 1998-02-17 2001-02-20 International Business Machines Corporation Cache coherency protocol for a data processing system including a multi-level memory hierarchy
CN1168025C (zh) * 1999-03-10 2004-09-22 国际商业机器公司 用于多线程处理机的指令高速缓存器
US6311253B1 (en) * 1999-06-21 2001-10-30 International Business Machines Corporation Methods for caching cache tags
US6425058B1 (en) * 1999-09-07 2002-07-23 International Business Machines Corporation Cache management mechanism to enable information-type dependent cache policies
US7051184B2 (en) * 2003-05-06 2006-05-23 Sun Microsystems, Inc. Method and apparatus for mapping memory addresses to corresponding cache entries

Also Published As

Publication number Publication date
CN1652092A (zh) 2005-08-10
JP2005174341A (ja) 2005-06-30
US20050125592A1 (en) 2005-06-09
US7136967B2 (en) 2006-11-14
TWI329803B (en) 2010-09-01
CN1307561C (zh) 2007-03-28
TW200532443A (en) 2005-10-01

Similar Documents

Publication Publication Date Title
JP4006436B2 (ja) 種々のキャッシュ・レベルにおける連想セットの重畳一致グループを有するマルチレベル・キャッシュ
US6161166A (en) Instruction cache for multithreaded processor
US7089370B2 (en) Apparatus and method for pre-fetching page data using segment table data
US7099999B2 (en) Apparatus and method for pre-fetching data to cached memory using persistent historical page table data
US6470422B2 (en) Buffer memory management in a system having multiple execution entities
US8140764B2 (en) System for reconfiguring cache memory having an access bit associated with a sector of a lower-level cache memory and a granularity bit associated with a sector of a higher-level cache memory
US6606686B1 (en) Unified memory system architecture including cache and directly addressable static random access memory
US5091851A (en) Fast multiple-word accesses from a multi-way set-associative cache memory
US6173369B1 (en) Computer system for processing multiple requests and out of order returns using a request queue
JP2554449B2 (ja) キャッシュ・メモリを有するデータ処理システム
US5561814A (en) Methods and apparatus for determining memory operating characteristics for given memory locations via assigned address ranges
US5317738A (en) Process affinity scheduling method and apparatus
JP3197866B2 (ja) キャッシュの操作を改良する方法及びコンピュータ・システム
US20070094450A1 (en) Multi-level cache architecture having a selective victim cache
JP4065660B2 (ja) 機能が並列に分散された変換索引バッファ
JP3683739B2 (ja) オーバラップしたl1およびl2メモリ・アクセス方法および装置
US20090006718A1 (en) System and method for programmable bank selection for banked memory subsystems
US8595443B2 (en) Varying a data prefetch size based upon data usage
JPH10232839A (ja) キャッシュシステムおよびキャッシュメモリの作動方法
JP2019096309A (ja) メンテナンス動作の実行
JP2009528612A (ja) データ処理システム並びにデータ及び/又は命令のプリフェッチ方法
US6038642A (en) Method and system for assigning cache memory utilization within a symmetric multiprocessor data-processing system
US6751700B2 (en) Date processor and storage system including a set associative cache with memory aliasing
JPH11288386A (ja) コンピュータシステム
US6311253B1 (en) Methods for caching cache tags

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070508

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070516

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20070605

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20070605

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070807

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: 20070821

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20070821

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070827

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: 20100831

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100831

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110831

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120831

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130831

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees