(57)【要約】【課題】  キャッシュ・ライン置換を改善することによって、コンピュータ・システムの性能を高める方法及び装置を提供する。【解決手段】  上位レベル・キャッシュに保持されたキャッシュ・ラインのアドレス指定を順番に行い、それらのアドレスを用いて下位レベル・キャッシュのスヌープ読み出しを行う巡回スヌープ・シーケンサを有するコンピュータ・システムである。上位レベル・キャッシュに保持された特定のキャッシュ・ラインが下位レベル・キャッシュに保持されていない場合には、新しいキャッシュ・ラインが上位レベル・キャッシュにロードされなければならないときに、特定のキャッシュ・ラインが上位レベル・キャッシュ内のエビクション候補として識別される。【選択図】  図５
2009524137.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュ・ライン置換のための方法であって、
下位レベル・キャッシュに存在しない上位レベル・キャッシュの第１のキャッシュ・ラインを識別するステップと、
前記下位レベル・キャッシュに存在する前記上位レベル・キャッシュの第２のキャッシュ・ラインの代わりに、前記上位レベル・キャッシュから前記第１のキャッシュ・ラインをエビクトするステップと、
を含む方法。
【請求項２】
前記下位レベル・キャッシュに存在しない前記上位レベル・キャッシュの前記第１のキャッシュ・ラインを識別する前記ステップは、
前記上位レベル・キャッシュのキャッシュ・ラインのアドレスを用いて前記下位レベル・キャッシュのスヌープ読み出しを行うステップと、
前記下位レベル・キャッシュの前記スヌープ読み出しが、前記下位レベル・キャッシュにおけるミスという結果になった場合には、前記キャッシュ・ラインをエビクション候補として識別するステップと、
前記下位レベル・キャッシュの前記スヌープ読み出しが、前記下位レベル・キャッシュにおけるミスという結果にならなかった場合には、前記キャッシュ・ラインをエビクション候補として識別しないステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記下位レベル・キャッシュのスヌープ読み出しを行う前記ステップは、
上位レベル・キャッシュ・ディレクトリがアイドル状態である第１の時間を決定するステップと、
前記上位レベル・キャッシュ・ディレクトリがアイドル状態であるときに、前記上位レベル・キャッシュ・ディレクトリからの１つ又は複数のキャッシュ・エントリを読み出すステップと、
前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリのタグ・フィールドを用いて、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを生成するステップと、
をさらに含む、請求項２に記載の方法。
【請求項４】
前記下位レベル・キャッシュのスヌープ読み出しを行う前記ステップは、
下位レベル・キャッシュ・ディレクトリがアイドル状態である第２の時間を決定するステップと、
前記第２の時間中に、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを用いて前記下位レベル・キャッシュ・ディレクトリにアクセスするステップと、
前記第２の時間中に、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを用いて前記下位レベル・キャッシュ・ディレクトリにアクセスする前記ステップが、前記下位レベル・キャッシュ・ディレクトリにおけるミスという結果になった場合には、前記下位レベル・キャッシュにおける前記ミスを返すステップと、
前記第２の時間中に、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを用いて前記下位レベル・キャッシュ・ディレクトリにアクセスする前記ステップが、前記下位レベル・キャッシュ・ディレクトリにおけるヒットという結果になった場合には、前記下位レベル・キャッシュにおける前記ヒットを返すステップと、
をさらに含む、請求項３に記載の方法。
【請求項５】
ａ）前記上位レベル・キャッシュの第２のエントリについて請求項４に記載のステップを繰り返すステップと、
ｂ）前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの状態情報を読み出し、
前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの特定のキャッシュ・エントリについての前記状態情報が、対応するキャッシュ・ラインが無効であることを示す場合には、前記特定のエントリについて請求項４に記載の前記ステップを行わないステップ、又は
ｃ）前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの状態情報を読み出し、
前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの特定のキャッシュ・エントリについての前記状態情報が、対応するキャッシュ・ラインが変更されたことを示す場合には、前記特定のエントリについて請求項４に記載の前記ステップを行わないステップと、
をさらに含む、請求項４に記載の方法。
【請求項６】
ａ）前記上位レベル・キャッシュによるデータについての要求を受け取り、
前記データを含む特定のキャッシュ・ラインが前記上位レベル・キャッシュに存在するかどうかをチェックし、
前記特定のキャッシュ・ラインが前記上位レベル・キャッシュに存在する場合に、
前記特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないものとして識別された場合には、前記下位レベル・キャッシュに存在しないものとした前記キャッシュ・ラインの識別を解除することを実行するステップ、又は、
ｂ）前記上位レベル・キャッシュが、各々が同じレベルにある複数の下位レベル・キャッシュに結合されている場合には、前記下位レベル・キャッシュに存在しない前記上位レベル・キャッシュの前記第１のキャッシュ・ラインを識別する前記ステップは、
前記第１のキャッシュ・ラインが前記複数の下位レベル・キャッシュのいずれにも存在しないことを保証することをさらに含むステップ、
をさらに含む、請求項１から請求項５のいずれか１項に記載の方法。
【請求項７】
前記上位レベル・キャッシュがＬ３キャッシュであり、前記下位レベル・キャッシュがＬ２キャッシュであるか、又は、前記上位レベル・キャッシュがＬ２キャッシュであり、前記下位レベル・キャッシュがＬ１キャッシュである、請求項１から請求項６のいずれか１項に記載の方法。
【請求項８】
上位レベル・キャッシュと、
巡回スヌープ・シーケンサと、
を含むメモリ・コントローラと、
前記メモリ・コントローラに結合された下位レベル・キャッシュと、
を備え、
前記巡回スヌープ・シーケンサは、前記下位レベル・キャッシュに存在しない前記上位レベル・キャッシュのキャッシュ・ラインを識別することができるように構成された、コンピュータ・システム。
【請求項９】
前記メモリ・コントローラ内に、前記下位レベル・キャッシュに存在する第２のキャッシュ・ラインの代わりに、前記下位レベル・キャッシュに存在しないものとして識別された第１のキャッシュ・ラインをエビクトするように構成された論理をさらに備える、請求項８に記載のコンピュータ・システム。
【請求項１０】
前記メモリ・コントローラは、前記巡回スヌープ・シーケンサに結合され、前記上位レベル・キャッシュのキャッシュ・ラインごとのエントリを保持する、上位レベル・キャッシュ・ディレクトリをさらに備え、
前記エントリの各々は、前記上位レベル・キャッシュのキャッシュ・ラインごとの状態フィールド及びタグ・フィールドをさらに含み、
前記上位レベル・キャッシュのキャッシュ・ラインごとの前記エントリは、前記上位レベル・キャッシュの特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないかどうかに関する情報を保持するフィールドをさらに含む、
請求項９に記載のコンピュータ・システム。
【請求項１１】
前記メモリ・コントローラに結合され、前記下位レベル・キャッシュのキャッシュ・ラインごとのエントリを有する、下位レベル・キャッシュ・ディレクトリをさらに備える、請求項９に記載のコンピュータ・システム。
【請求項１２】
前記巡回スヌープ・シーケンサは、
前記上位レベル・キャッシュ・ディレクトリを読み出し、
前記上位レベル・キャッシュ内のエントリを読み出し、
前記上位レベル・キャッシュ内のキャッシュ・ラインのアドレスを生成し、
下位レベル・キャッシュ・ディレクトリのスヌープ読み出しを行い、
前記スヌープ読み出しが、前記下位レベル・キャッシュ・ディレクトリにおけるキャッシュ・ミスという結果になった場合には、前記上位レベル・キャッシュの特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないかどうかに関する情報を保持する前記エントリについての前記フィールドに、前記エントリに対応するキャッシュ・ラインをエビクション候補として識別するように書き込み、
前記スヌープ読み出しが、前記下位レベル・キャッシュ・ディレクトリにおけるキャッシュ・ヒットという結果になった場合には、前記上位レベル・キャッシュの特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないかどうかに関する情報を保持する前記エントリについての前記フィールドに、前記エントリに対応するキャッシュ・ラインをエビクション候補として識別するようには書き込まない、
ように構成される、請求項１０に記載のコンピュータ・システム。
【請求項１３】
前記メモリ・コントローラに結合された第２の下位レベル・キャッシュをさらに備え、
前記巡回スヌープ・シーケンサは、前記第２の下位レベル・キャッシュに存在しない前記上位レベル・キャッシュのキャッシュ・ラインを識別することができるように構成され、
必要に応じて、前記メモリ・コントローラ内に、前記下位レベル・キャッシュ又は前記第２の下位レベル・キャッシュのいずれかに存在する第２のキャッシュ・ラインの代わりに、前記下位レベル・キャッシュにも前記第２の下位レベル・キャッシュにも存在しないものとして識別された第１のキャッシュ・ラインをエビクトするように構成された論理をさらに含む、請求項８から請求項１２のいずれか１項に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、マルチレベル・キャッシュに関する。より具体的には、本発明は、新しいキャッシュ・ラインが上位レベル・キャッシュにロードされなければならないときに、上位レベル・キャッシュにおけるエビクション候補である上位レベル・キャッシュ内のキャッシュ・ラインを識別することに関する。
【背景技術】
【０００２】
今日のコンピュータ・システムは、典型的には、マルチレベル・キャッシュを用いる。例えば、極めて高速であるが相対的に小容量の第１レベル・キャッシュが、典型的には、プロセッサと同じ半導体チップ上に実装され、１回又は２回のプロセッサ・サイクルでデータをプロセッサに与える。第１レベル・キャッシュ（Ｌ１キャッシュ）は、通常、極めて高速ではあるがより大容量で遅いメモリほどはコンパクトでないスタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）を用いて実装される。第１レベル・キャッシュはまた、制御、アドレス、及び信号の相互接続の長さを制限するために、相対的に小容量でなければならない。今日のコンピュータ・システムでは、プロセッサと同じ半導体チップ上に第２レベル・キャッシュ（Ｌ２キャッシュ）が実装されることも多い。第２レベル・キャッシュもまた、ＳＲＡＭメモリを用いて構築されることが多い。第２レベル・キャッシュは、典型的には、物理的領域と格納されるデータ量とのいずれも第１レベル・キャッシュより大容量である。第２レベル・キャッシュは、典型的には、第１レベル・キャッシュよりアクセス（読み出し又は書き込み）が遅い。今日のコンピュータ・システムは、第２レベル・キャッシュよりさらに多くのデータを保持し、アクセスするのにさらに時間がかかる、第３レベル・キャッシュ（Ｌ３キャッシュ）も含む。多くの場合、第３レベル・キャッシュは、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）を用いて実装されるが、ＳＲＡＭメモリが第３レベル・キャッシュの設計に用いられることもある。
【０００３】
キャッシュは、キャッシュ・ラインと呼ばれるブロックでデータを格納する。例えば、種々のコンピュータ・システムにおいて、キャッシュ・ラインは、６４バイト、１２８バイト、２５６バイト等とすることができる。キャッシュ・ラインは、キャッシュ・ラインのアドレス及び当該キャッシュに結合された置換論理に基づいて、キャッシュ内のキャッシュ・ライン位置に格納される。キャッシュに結合されたキャッシュ・ディレクトリは、キャッシュに格納されたキャッシュ・ラインごとに状態情報及びタグ情報を維持する。
【０００４】
プロセッサが特定のアドレスにおけるデータ片（a piece of data）を要求したときに、コンピュータ・システムは、そのデータが第１レベル・キャッシュに格納されているかどうかをチェックする。特定のアドレスは、データが第１レベル・キャッシュに格納されているかどうかを判断する第１レベル・キャッシュ・ディレクトリに提示される。データ片を含むキャッシュ・ラインが第１レベル・キャッシュに存在する場合には、データは、プロセッサによって用いられるように第１レベル・キャッシュからフェッチされ、これは、第１レベル・キャッシュにおけるキャッシュ・ヒットとして知られている。データ片を含むキャッシュ・ラインが第１レベル・キャッシュに保持されていない場合には、第１レベル・キャッシュによってキャッシュ・ミスが報告される。次に、第２レベル・キャッシュに要求が出される。第２レベル・キャッシュが特定のデータ片を保持する場合には、特定のデータ片を含むキャッシュ・ラインが、第２レベル・キャッシュからフェッチされ、第１レベル・キャッシュに格納される。多くの実装態様においては、特定のデータ片は、特定のデータ片を含むキャッシュ・ラインが第１レベル・キャッシュに書き込まれると同時にプロセッサが使用できるようになる。特定のデータ片が第２レベル・キャッシュに保持されていない場合には、第３レベル・キャッシュに要求が出される。特定のデータ片が第３レベル・キャッシュに保持されている場合には、特定のデータ片を含むキャッシュ・ラインが、第３レベル・キャッシュからフェッチされ、第２レベル・キャッシュ及び第１レベル・キャッシュに格納され、プロセッサが使用できるようになる。第３レベル・キャッシュにおいてキャッシュ・ミスが生じた場合には、さらなる要求が、第４レベル・キャッシュが存在すれば第４レベル・キャッシュに出されるか、又はメイン・メモリに出される。
【０００５】
下位レベル・キャッシュは、上位レベル・キャッシュより少ないデータを保持するため、上位レベル・キャッシュにおける多数のキャッシュ・ライン位置は、下位レベル・キャッシュのより少ないキャッシュ・ライン位置にマッピングされる。今日のコンピュータ・システムにおいて、キャッシュは、典型的には、連想性（associativity）を備えた設計になっている。連想性は、特定のキャッシュ・ラインがキャッシュ内の特定のセット（行）にマッピングされることを意味するが、キャッシュをサポートする置換論理は、そのセットにおける多数のクラス（キャッシュ・ライン位置）のいずれかに特定のキャッシュ・ラインを配置することができる。特定のセットにおける特定のクラスが、キャッシュ・ライン位置である。例えば、連想度４ウェイの第２レベル・キャッシュの場合には、置換論理が、特定のセットにマッピングされる特定のキャッシュ・ラインを４つのクラスのうちのいずれに格納するかを選択する。
【０００６】
キャッシュ・ラインが、上位レベル・キャッシュからキャッシュに書き込まれるときは、キャッシュ・ラインは、エビクトされなければならない（上位レベル・キャッシュに書き込まれるか、又は、キャッシュ・ライン内のデータが変更されていない場合には、単に上書きされる）。
【０００７】
連想性を備えたキャッシュにおいては、置換アルゴリズムが、セット内のどのキャッシュ・ラインが置換されるかを選択する。例えば、キャッシュが、連想度８ウェイである、すなわち１セット当たり８つのクラスを有する場合には、８つのうちの１つのキャッシュ・ラインをエビクトして、そのセットにマッピングされるアドレスを有する新しいキャッシュ・ラインのために場所を空けなければならない。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
多数の置換アルゴリズムが、種々のコンピュータ・システムに実装されてきた。より最近用いられたキャッシュ・ラインが最近用いられていないキャッシュ・ラインと比べて再び必要とされる可能性が高いという考え方による最長時間未使用（ＬＲＵ；Least Recently Used）アルゴリズムが、広く使用されてきた。ＬＲＵアルゴリズムの問題は、２つの理由のために、特定のキャッシュ・ラインが相対的に長い時間用いられていないように見える可能性があることである。第１の理由は、プロセッサが、特定のキャッシュ・ライン内のデータを必要としなくなり、別のキャッシュ・ラインをロードしてその特定のキャッシュ・ラインを上書きすることである。第２の理由は、プロセッサが、特定のキャッシュ・ライン内のデータを頻繁に用いて、上位レベル・キャッシュをしばらくの間更新しないことである。上位レベル・キャッシュにとって特定のキャッシュ・ラインがＬＲＵアルゴリズムに基づいてエビクション候補であるように見えるが、第２の理由として説明されたように特定のキャッシュ・ライン内のデータが頻繁に用いられている場合には、エビクションには下位レベル・キャッシュからのエビクションも含まれることになるため、上位レベル・キャッシュが特定のキャッシュ・ラインをエビクトするときに非効率となる。特定のキャッシュ・ライン内のデータが頻繁に用いられているため、プロセッサは、単に再度キャッシュ・ラインを要求し、キャッシュ・ラインが上位レベル・キャッシュより上位のレベルから取得されるまで待つことが必要になる。
【０００９】
上述されたＬＲＵの問題のため、マルチレベル・キャッシュを有する多くのコンピュータ・システムは、事実上、上位レベル・キャッシュが、上位レベル・キャッシュにおけるセットのうちのどのキャッシュ・ラインが好ましいエビクション候補であるかを知らず、エビクションのためのセットからランダムに１つのキャッシュ・ラインを選定するだけであることを許容する、上位レベル・キャッシュの擬似ランダム・エビクション・アルゴリズムを実装してきた。残念なことに、擬似ランダム・エビクション・アルゴリズムは、プロセッサによって頻繁に用いられているキャッシュ・ラインをエビクトして、エビクトされたキャッシュ・ラインが上位レベル・キャッシュより上位のレベルのメモリからフェッチされるまでプロセッサを待機させることも多い。
【００１０】
したがって、上位レベル・キャッシュにおける改善されたエビクション・スキームを提供する方法及び装置についての必要性が存在する。
【課題を解決するための手段】
【００１１】
本発明は、キャッシュ・ライン置換を改善することによって、コンピュータ・システムの性能を高める方法及び装置を提供する。
【００１２】
１つの実施形態においては、上位レベル・キャッシュ内のキャッシュ・ラインは、下位レベル・キャッシュに存在しないものとして識別される。下位レベル・キャッシュに存在しない上位レベル・キャッシュ内のキャッシュ・ラインは、上位レベル・キャッシュに格納される必要がないため、このようなキャッシュ・ラインは、エビクション候補としてマークされる。上位レベル・キャッシュが、多数のクラスを有するセットにおいてキャッシュ・ラインを置換しなければならないときには、エビクション候補としてマークされなかったキャッシュ・ラインの代わりに、エビクション候補としてマークされたキャッシュ・ラインが、優先的にエビクトされる。
【００１３】
本発明の１つの実施形態においては、上位レベル・キャッシュを有するメモリ・コントローラの巡回スヌープ・シーケンサは、上位レベル・キャッシュ・ディレクトリが使用されていないときに、上位レベル・キャッシュ・ディレクトリからディレクトリ・エントリを読み出す。巡回スヌープ・シーケンサは、上位レベル・キャッシュ・ディレクトリからの情報を用いて、プロセッサ・メモリ・バス及び下位レベル・キャッシュ・ディレクトリが使用されていないときに、下位レベル・キャッシュ・ディレクトリのスヌープ読み出しを行う。下位レベル・キャッシュ・ディレクトリが、特定のスヌープ読み出しについてキャッシュ・ミスを報告した場合には、巡回スヌープ・シーケンサは、上位レベル・キャッシュ・ディレクトリが使用されていないときに、対応するキャッシュ・ラインをエビクション候補として識別するために上位レベル・キャッシュ・ディレクトリ内の状態情報を更新する。スヌープ読み出しは、上位レベル・キャッシュに関連する巡回スヌープ・シーケンサから、上位レベル・キャッシュ内の特定のキャッシュ・ラインが下位レベル・キャッシュに存在するかどうかを判断することができる下位レベル・キャッシュ・ディレクトリに送信されるいずれかのコマンドであり、このコマンドは、下位レベル・キャッシュにおいてエビクションを起こさせるものではない。
【００１４】
メモリ・コントローラ内の巡回スヌープ・シーケンサは、上位レベル・キャッシュ・ディレクトリ、プロセッサ・メモリ・バス、及び下位レベル・キャッシュ・ディレクトリが使用されていない時間を利用して、上位レベル・キャッシュ・ディレクトリ内のエントリを循環し続け、キャッシュ・ラインのエビクション候補を探す。メモリ・コントローラ内の置換論理は、エビクション候補情報を用いて、幾つかの環境においては上位レベル・キャッシュにおいて依然として必要とされるキャッシュ・ラインの前に、上位レベル・キャッシュにおいては必要とされなくなったキャッシュ・ラインをエビクトする。
【発明を実施するための最良の形態】
【００１５】
好ましい実施形態の以下の詳細な説明においては、本出願の一部を形成し、本発明を実施することができる特定の実施形態が例示の目的で示される、添付図面を参照する。他の実施形態を利用することができ、本発明の範囲から逸脱することなく構造的な変更を加えることができることを理解すべきである。
【００１６】
本発明は、上位レベル・キャッシュにおけるエビクション候補を決定するための方法及び装置を提供する。階層キャッシュ・システム（すなわち、上位レベル・キャッシュと下位レベル・キャッシュとを有するキャッシュ・システム）においては、下位レベル・キャッシュ内のすべてのキャッシュ・ラインは、上位レベル・キャッシュにも存在する。しかしながら、上位レベル・キャッシュ内の特定のキャッシュ・ラインが、下位レベル・キャッシュには存在しない場合がある。例えば、プロセッサが、下位レベル・キャッシュにロードされなければならない第１のキャッシュ・ラインにおける第１のデータを要求することがある。プロセッサは、第１のデータを読み出す。その後、プロセッサは、下位レベル・キャッシュにロードされなければならない第２のキャッシュ・ラインにおける第２のデータを要求することがある。第１のキャッシュ・ラインが変更されなかったので、第２のキャッシュ・ラインは、単に第１のキャッシュ・ラインに上書きされる。従来の方法及び装置は、第１のキャッシュ・ラインが下位レベル・キャッシュに存在しなくなったことを上位レベル・キャッシュに通知するものではない。
【００１７】
本発明の実施形態は、キャッシュ・ディレクトリ及びバスが使用されていない時間中に、上位レベル・キャッシュが、上位レベル・キャッシュのキャッシュ・ディレクトリ・エントリを用いる「スヌープ読み出し」を下位レベル・キャッシュに対して行うことを可能にする。スヌープ読み出しは、上位レベル・キャッシュに関連する巡回スヌープ・シーケンサから、上位レベル・キャッシュの特定のキャッシュ・ラインが下位レベル・キャッシュに存在するかどうかを判断することができる、下位レベル・キャッシュ・ディレクトリに送信されるいずれかのコマンドであり、このコマンドは、下位レベル・キャッシュにおいてキャッシュ・ラインのエビクションを起こさせるものではない。スヌープ読み出しによって下位レベル・キャッシュにおけるキャッシュ・ヒットが生じた場合には、上位レベル・キャッシュからキャッシュ・ディレクトリ・エントリによってアドレス指定されたキャッシュ・ラインは、下位レベル・キャッシュに依然として存在する。スヌープ読み出しによって下位レベル・キャッシュにおけるキャッシュ・ミスが生じた場合には、上位レベル・キャッシュからキャッシュ・ディレクトリ・エントリによってアドレス指定されたキャッシュ・ラインは、下位レベル・キャッシュには存在せず、上位レベル・キャッシュにおいてキャッシュ・ディレクトリ・エントリによってアドレス指定されたキャッシュ・ラインが、エビクション候補としてマークされる。エビクション候補としてマークされた上位レベル・キャッシュ内のセットにおけるキャッシュ・ラインは、エビクション候補としてマークされていない上位レベル・キャッシュ内のセットにおけるキャッシュ・ラインより先にエビクションのために選択される。幾つかのキャッシュは、「無効」状態を含む状態情報を用いる。無効状態を有するキャッシュ・ラインは、典型的には、エビクトされる第１のキャッシュ・ラインである。
【００１８】
ここで、図１を参照すれば、コンピュータ・システム１００が、本発明の実施形態を説明するのに十分な詳細さで示されている。コンピュータ・システムは、ディスク・メモリ、ネットワーク・インタフェース、ユーザ・インタフェース等をさらに含むことが分かるであろう。
【００１９】
コンピュータ・システム１００は、プロセッサ１０５Ａ及び１０５Ｂとして示される１つ又は複数のプロセッサ１０５を含む。各々のプロセッサ１０５は、Ｌ２キャッシュ１１０と、関連するＬ２キャッシュ・ディレクトリと、置換論理１０９とをさらに含む。置換論理１０９は、新しいキャッシュ・ラインとの置換が要求されたときに、Ｌ２キャッシュ１１０のどのキャッシュ・ラインを置換する（エビクトする）かを選択する。プロセッサ１０５Ａは、Ｌ２キャッシュ１１０Ａと、Ｌ２キャッシュ・ディレクトリ１１１Ａと、置換論理１０９Ａとを含むように示されており、プロセッサ１０５Ｂは、Ｌ２キャッシュ１１０Ｂと、Ｌ２キャッシュ・ディレクトリ１１１Ｂと、置換論理１０９Ｂとを含むように示されている。多くのコンピュータ・システムにおいては、Ｌ２キャッシュが２つ以上のプロセッサによって共有されることが分かるであろう。プロセッサ１０５Ａ及び１０５Ｂは、プロセッサ・メモリ・バス１１５Ａ及びプロセッサ・メモリ・バス１１５Ｂによってメモリ・コントローラ１３０に結合されている。幾つかのプロセッサは、図示されるような別個のバス（１１５Ａ、１１５Ｂ）の代わりに、共通バスを用いてメモリ・コントローラに結合されることが分かるであろう。プロセッサ・メモリ・バスは、まとめてプロセッサ・メモリ・バス１１５と呼ばれる。
【００２０】
メモリ・コントローラ１３０は、既存のコンピュータ・システムに用いられるものと同様のＬ３キャッシュ１３２及びＬ３キャッシュ・ディレクトリ１３６を含む。メモリ・コントローラ１３０は、巡回スヌープ・シーケンサ１３４をさらに含む。メモリ・コントローラ１３０内の置換論理１３３が、巡回スヌープ・シーケンサ１３４によってＬ３キャッシュ・ディレクトリ１３６に格納される情報を用いるキャッシュ・ライン置換方法を実装する。より詳細に後述されるように、巡回スヌープ・シーケンサ１３４は、リソース（Ｌ３キャッシュ・ディレクトリ１３６、メモリ・プロセッサ・バス１１５、及びＬ２キャッシュ・ディレクトリ１１１）がアイドル状態である（すなわち、アクセスされていない）時間を利用する。巡回スヌープ・シーケンサ１３４は、それらのリソースのこのようなアイドル時間を利用して、Ｌ３キャッシュ・ディレクトリ１３６内のアドレスを用いるスヌープ読み出しを行う。巡回スヌープ・シーケンサは、（キャッシュ・ラインのアドレスを用いて）キャッシュ・ラインについてのＬ３キャッシュ・ディレクトリ・エントリを循環して、Ｌ３キャッシュ１３２のどのキャッシュ・ラインがＬ２キャッシュ１１０Ａ及び１１０Ｂに存在しないかを決定し、このようなキャッシュ・ラインのすべてをＬ３キャッシュ１３２におけるエビクション候補として記録する。
【００２１】
メモリ・コントローラ１３０は、バス１１６を介してメモリ１５０に結合される。コンピュータ・システム１００のメモリ１５０は、コンピュータ・システム１００のメイン・メモリである。コンピュータ・システム１００の別の実施形態においては、メモリ１５０は、レベル４（Ｌ４）キャッシュとすることができる。
【００２２】
図２は、プロセッサ・メモリ・バス１１５を示す。プロセッサ１０５とメモリ・コントローラ１３０との間で通信するように実装される多くの構成が存在することが分かるであろう。プロセッサ・メモリ・バス１１５は、コマンド／ステータス１１６と、アドレス１１７と、データ１１８とを含むように示されている。コマンド／ステータス１１６は、コマンド（例えば、読み出し、書き込み）及びステータス（キャッシュ・ミス、キャッシュ・ヒット、及び、幾つかの実施形態においてはスヌープ読み出し）を転送するために用いられる。アドレス１１７は、アドレスを転送するために用いられる。例えば、プロセッサ１０５が特定のアドレスのデータを必要とし、そのデータがＬ２キャッシュ１１０には存在しないときは、特定のアドレスが、アドレス１１７によってメモリ・コントローラ１３０に伝送される。データは、データ１１８によって転送される。例えば、変更されたキャッシュ・ラインは、Ｌ２キャッシュ１１０からＬ３キャッシュ１３２に書き込まれる。キャッシュ・ラインは、プロセッサ１０５からの要求に応答して、Ｌ３キャッシュ１３２からＬ２キャッシュ１１０に送られる。多くの実装形態においては、情報は特定のプロセッサ・メモリ・バス１１５上に多重化されることが分かるであろう。例えば、データ１１８は８バイト幅であるがキャッシュ・ラインは６４バイト幅である場合には、キャッシュ・ラインを転送するために８サイクルが必要である。同様に、幾つかのコンピュータ・システムにおいては、アドレス１１７は、データ１１８と同じ物理線を用いるが、多重化されている。
【００２３】
図３Ａは、Ｌ３キャッシュ１３２をより詳細に示す。説明のために、Ｌ３キャッシュ１３２は８ウェイ・セット連想である、すなわち、セット（行）の各々が、クラス０から７まで（クラス０、クラス３、及びクラス７が矢印で示されている）の８つのクラスを含む。Ｌ３キャッシュ１３２は、矢印で示されたセット０、セット２、及びセットＮ−１のＮ個のセット（セット０からＮ−１まで）を有するように示されている。特定のキャッシュ・ラインは、キャッシュ・ラインのアドレスの一部を用いて、Ｌ３キャッシュ１３２の特定のセットにマッピングされる。メモリ・コントローラ１３０の置換論理１３３は、特定のキャッシュ・ラインがどのクラスに配置されるかを決定する。特定のキャッシュ・ラインは、特定のキャッシュ・ラインがキャッシュ１３２にロードされるたびに、８つのクラスのいずれかに配置することができる。キャッシュ・ラインについての幾つかのキャッシュ・ライン位置が図３Ａに示されており、セット及び列によって参照される。例えば、キャッシュ・ライン位置１３２−００は、Ｌ３キャッシュ１３２のセット０、クラス０である。同様に、キャッシュ・ライン位置１３２−０３は、Ｌ３キャッシュ１３２のセット０、クラス３である。キャッシュ・ライン１３２−０７及び１３２−２３は、同様の命名規則で示されている。Ｌ３キャッシュ１３２のキャッシュ・ラインは、図３Ｂに示されるＬ２キャッシュ１１０にマッピングされなければならない。Ｌ２キャッシュ１１０は、Ｌ３キャッシュ１３２より小さく、典型的には、Ｌ３キャッシュ１３２より少ない連想（すなわち、少ないクラス）で設計されている。説明のために、（図３Ａにおいて矢印及び第１の網掛けパターンによって示される）Ｌ３キャッシュ１３２のサブセット１３２ＡはＬ２キャッシュ１１０のセット１にマッピングされ、（図３Ａにおいて矢印及び第２の網掛けパターンによって示される）サブセット１３２ＢはＬ２キャッシュ１１０のセット３にマッピングされる。
【００２４】
このマッピングは単なる例示であり、上位レベル・キャッシュの特定のキャッシュ・ライン位置を下位レベル・キャッシュにマッピングする多くの方法が存在することが分かるであろう。例えば、図３Ｃは、マッピングの１つの例を示す。プロセッサ１０５が用いる３２ビットのアドレスのようなアドレスは、キャッシュ・ラインのビットを識別するために用いられる部分を有する。キャッシュ・ラインが１２８バイトを含む場合には、図３Ｃにおける「キャッシュ・ライン内のバイト」という名称の部分は、７ビットを有することになる。「Ｌ２インデックス」という名称の部分は、キャッシュ・ラインがＬ２キャッシュ１１０のどのセットにマッピングされることになるかを決定するのに必要なだけのビットを含む。例えば、Ｌ２キャッシュ１１０が１０２４のセットを有する場合には、図３ＣにおけるＬ２インデックスは、１０ビットを必要とする。「Ｌ２タグ」という名称の部分は、図５Ａ−５Ｃを参照して説明されるように、Ｌ２キャッシュ・ディレクトリのタグ・フィールドに格納されなければならないアドレスのタグ部分である。Ｌ３キャッシュ１３２は、Ｌ２キャッシュ１１０より大きい、すなわち、より多くのキャッシュ・ラインを保持する。Ｌ２キャッシュ１１０内に保持されたキャッシュ・ラインは、Ｌ３キャッシュ１３２内に保持されたキャッシュ・ラインと同じバイト数であるので、アドレスの「キャッシュ・ライン内のバイト」部分は、Ｌ３キャッシュ１３２内のキャッシュ・ラインについてのアドレスの同じ部分である。図３Ｃに示される「Ｌ３インデックス」という名称のアドレス部分は、「Ｌ２インデックス」という名称のアドレス部分より多くのビットを有する。例えば、Ｌ３キャッシュ１３２が４０９６セットを有する場合には、図３Ｃに示されるＬ３インデックスは、１２ビットを必要とする。図３に示されるアドレス部分「Ｌ３タグ」は、後述されるように、Ｌ３キャッシュ・ディレクトリ内のタグ・エントリに格納されなければならない。他のマッピング技術が、アドレスの部分の「ハッシュ値を計算する（hash）」。あらゆるマッピングが考慮される。
【００２５】
図３Ｂにおいて、Ｌ２キャッシュ１１０は、Ｍ個のセット（０〜Ｍ−１）を有するように示されており、Ｌ２キャッシュ１１０は、４ウェイ・セット連想である、すなわちクラス０からクラス３まで４つのクラスを有するように示されている。サブセット１３２Ａ及び１３２Ｂは、上述のように示されている。キャッシュ・ライン位置１１０−００（Ｌ２キャッシュ１１０のセット０、クラス０）及びキャッシュ・ライン位置１１０−２３（Ｌ２キャッシュ１１０のセット２、クラス３）は、Ｌ３キャッシュ１３２について上述されたセット／クラス命名規則を表すように示される。
【００２６】
図４Ａ及び図４Ｂは、Ｌ３キャッシュ１３２及びＬ２キャッシュ１１０の特定のキャッシュ・ラインを示す。キャッシュ・ラインＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、及びＨは、図４Ａに示されるように、Ｌ３キャッシュ１３２のセット０に格納されている。キャッシュ・ラインＡは、（上記の命名規則を用いて）Ｌ２キャッシュ１１０の１１０−１０に格納され、キャッシュ・ラインＣは、Ｌ２キャッシュ１１０の１１０−１２に格納され、キャッシュ・ラインＦは、１１０−３１に格納されている。図４Ａ、図４Ｂの例においては、キャッシュ・ラインＢ、Ｄ、Ｅ、Ｇ、及びＨは、Ｌ２キャッシュ１１０に存在しない。キャッシュ・ラインＷ、Ｘ、Ｑ、Ｒ、及びＳは、Ｌ２キャッシュ１１０内に保持され、セット１（Ｗ及びＸ）又はセット３（Ｑ、Ｒ、及びＳ）にマッピングされているアドレスを有する位置（図示せず）においてＬ３キャッシュ１３２にも存在しなければならない。Ｌ２キャッシュ１１０に存在するすべてのキャッシュ・ラインがＬ３キャッシュ１３２にも存在することに留意されたい。しかしながら、Ｌ３キャッシュ１３２のすべてのキャッシュ・ラインがＬ２キャッシュ１１０に存在する必要はない。前述のように、第１のキャッシュ・ラインが変更されなかった場合には、Ｌ２キャッシュ１１０は、新たにフェッチされたキャッシュ・ラインで第１のキャッシュ・ラインを単純に上書きすることができる。Ｌ２キャッシュ１１０は、第１のキャッシュ・ラインが上書きされたことをＬ３キャッシュ１３２に通知しない。
【００２７】
図３Ａ、図３Ｂ、図４Ａ、図４Ｂ、及び上記のその説明は、Ｌ３キャッシュ１３２及びＬ２キャッシュ１１０のキャッシュ・ラインの物理的位置に焦点を当てたものである。（図１においてキャッシュ・ディレクトリ１１１Ａ及び１１１Ｂとして示される）キャッシュ・ディレクトリ１１１は、Ｌ２キャッシュ１１０に格納されたキャッシュ・ラインのアドレスと、Ｌ２キャッシュ１１０に格納されたキャッシュ・ラインの状態とを追跡するために用いられる。キャッシュ・ディレクトリ１３６（図１）は、Ｌ３キャッシュ１３２に格納されたキャッシュ・ラインのアドレスと、Ｌ３キャッシュ１３２に格納されたキャッシュ・ラインの状態とを追跡するために用いられる。
【００２８】
例示的なＬ２キャッシュ・ディレクトリ１１１が、図５Ａに示される。Ｌ２キャッシュ・ディレクトリ１１１は、４つのエントリ列を有するキャッシュ・ディレクトリ・アレイ１１２を含み、エントリ列７０の各々は、Ｌ２キャッシュ１１０のクラス（図３Ｂ）に対応する。Ｌ２キャッシュ・ディレクトリ・アレイ１１２は、Ｍ個の行１１３を有し、行１１３の各々は、Ｌ２キャッシュ１１０のＭ個のセットにおける１つのセット（図３Ｂ）に対応する。Ｌ２キャッシュ・ディレクトリ・エントリ７６（１つのＬ２キャッシュ・ディレクトリ・エントリが、網掛け、符号「７６」、及び矢印によって示される）が、行１１３とエントリ列７０との交点の各々に格納される。Ｌ２キャッシュ・ディレクトリ・エントリは、Ｌ２キャッシュ１１０に格納されたキャッシュ・ラインごとにキャッシュ・ディレクトリ・アレイ１１２に格納される。Ｌ３キャッシュ・ディレクトリ１３６も同様に構成されることが分かるであろう。
【００２９】
Ｌ２キャッシュ・ディレクトリ・エントリ７６の各々は、状態フィールド７３とタグ・フィールド７２とを含む。状態フィールド７３は、対応するキャッシュ・ラインに関する状態情報を保持する。多くのコンピュータ・システムにおいて、状態フィールドは、対応するキャッシュ・ラインが、（１）変更済み（modified）、（２）排他的（exclusive）、（３）共有（shared）、又は（４）無効（invalid）であることを意味する４つのビットを含む。このような状態情報は、ＭＥＳＩ状態情報と呼ばれる。例示的な状態フィールド７３が、図５Ｂに示される。しかしながら、本発明の実施形態について、図５Ｃにおいては、ＭＥＳＩ状態情報を有するが「Ｘ」ビットも有する例示的な状態フィールド７４が示される。状態フィールド７４内の「Ｘ」ビットは、後述されるように、エビクション候補として識別されたキャッシュ・ラインのフラグを立てるのに用いられる。タグ・フィールド７２は、キャッシュ・ラインのアドレスのタグ部分を保持する。キャッシュ・コヒーレンシを強化するために、ＭＥＳＩ状態の多くの変化形が用いられており、本発明は、ＭＥＳＩ又は他のいずれかのコヒーレンシ・プロトコルのいずれかの特定の実装形態に限定されないことを認識されたい。
【００３０】
キャッシュ・ディレクトリ１１１は、そのアドレスを有するキャッシュ・ラインがＬ２キャッシュ・ディレクトリ１１１にあるかどうかを確かめるためにアドレス１１７によってＬ２キャッシュ・ディレクトリ１１１に送られるアドレスを保持するアドレス・レジスタ９０をさらに含む。アドレス１１７によってＬ２キャッシュ・ディレクトリ１１１に送られるアドレスは、プロセッサ１０５から発生する場合も、メモリ・コントローラ１３０から発生する場合もある。最初のアドレス部分９２は、Ｌ２キャッシュ・ディレクトリ・アレイ１１２のＭ個の行のうちの１つを選択するために用いられる。アドレス・レジスタ９０のアドレスのタグ部分９１は、信号９３によって比較部８０に送られる。タグ７２は、信号８１Ａ、８１Ｂ、８１Ｃ、及び８１ＤによってＬ２キャッシュ・ディレクトリ・アレイ１１２の選択された行から読み出され、アドレスのタグ部分と比較される。信号８１Ａ、８１Ｂ、８１Ｃ、及び８１Ｄによって送られたタグの１つがアドレスのタグ部分と等しい場合には、キャッシュ・ヒットが信号８２によって報告される。信号８１Ａ、８１Ｂ、８１Ｃ、及び８１Ｄによって送られたタグのいずれもアドレスのタグ部分と等しくない場合には、キャッシュ・ミスが信号８２によって報告される。ディレクトリごとの状態情報は、典型的には、タグ７２と同時にＬ２キャッシュ・ディレクトリ・アレイ１１２から読み出される。
【００３１】
Ｌ３キャッシュ１３２、Ｌ３キャッシュ・ディレクトリ１３６、Ｌ２キャッシュ１１０、及びＬ２キャッシュ・ディレクトリ１１１の作用に関する上述の説明を念頭に置いて、図１に戻り、巡回スヌープ・シーケンサ１３４の動作を説明する。
【００３２】
巡回スヌープ・シーケンサ１３４は、Ｌ３キャッシュ・ディレクトリ１３６及びプロセッサ・メモリ・バス１１５の各々（図１に示されるプロセッサ・メモリ・バス１１５Ａ及び１１５Ｂ）に結合されている。巡回スヌープ・シーケンサ１３４は、ディレクトリ・インデックスを初期化して、Ｌ３キャッシュ・ディレクトリ１３６の第１の行をアドレス指定する。Ｌ３キャッシュ・ディレクトリ１３６は、Ｌ３キャッシュ・ディレクトリ１３６が用いられていないときに、そのインデックスで読み出される。Ｌ３キャッシュ・ディレクトリ１３６は、アクセスされたときに、図３ＡにおいてＬ３キャッシュ１３２内に示される８つのクラスに対応する８つのエントリを戻す。巡回スヌープ・シーケンサ１３４は、必要に応じて、Ｌ３キャッシュ１３２のキャッシュ・ラインのどれがＬ２キャッシュ１１０に存在しないかを判断するための処理を実行する。巡回スヌープ・シーケンサ１３４は、インデックスと共に、Ｌ３キャッシュ・ディレクトリのエントリごとに格納されるタグを用いて、巡回スヌープ・アドレスを生成する。巡回スヌープ・アドレスは、プロセッサ・メモリ・バス１１５がアイドル状態のときに、プロセッサ・メモリ・バス１１５によってＬ２キャッシュ・ディレクトリ１１１に送られる。Ｌ２キャッシュ・ディレクトリ１１１がアイドル状態のときに、Ｌ２キャッシュ・ディレクトリ１１１のスヌープ読み出しが行われる。Ｌ２キャッシュ・ディレクトリ１１１が、信号８２によってＬ２キャッシュ・ミスを報告した場合には、巡回スヌープ・アドレスに対応するキャッシュ・ラインは、Ｌ２キャッシュ１１１に存在しない。信号８２は、プロセッサ・メモリ・バス１１５のコマンド／ステータス１１６によって巡回スヌープ１３４に結合されている。巡回スヌープ・シーケンサ１３４は、状態フィールド７４内のビット「Ｘ」をアサートすることによってＬ３キャッシュ・ディレクトリ１３６の対応するエントリを更新し、それによりそのキャッシュ・ラインをエビクション候補として識別する。Ｌ２キャッシュ・ディレクトリ１１１が、信号８２によってＬ２キャッシュ・ヒットを報告した場合には、対応するキャッシュ・ラインは、Ｌ２キャッシュ１１１に依然として存在しており、巡回スヌープ・シーケンサ１３４は、そのキャッシュ・ラインをエビクション候補として識別するためにＬ３キャッシュ・ディレクトリ１３６の対応するエントリを更新することはない。巡回スヌープ・シーケンサ１３４は、Ｌ３キャッシュ・ディレクトリ１３６のインデックスが付けられた行のエントリごとにスヌープ読み出しを繰返し、次いで、インデックスの値を増加させて、Ｌ３キャッシュ・ディレクトリ１３６の次の行にアクセスする。Ｌ３キャッシュ・ディレクトリ１３６の最終行が完了したときに、インデックスは、第１の行に再度アクセスするためにリセットされる。本発明の実施形態においては、Ｌ３キャッシュ・ディレクトリがアイドル状態のときにのみ巡回スヌープ・シーケンサがＬ３キャッシュ・ディレクトリ１３６にアクセスし、プロセッサ・メモリ・バス１１５がアイドル状態のときにのみプロセッサ・メモリ・バス１１５によってスヌープ読み出しが送られ、Ｌ２キャッシュ・ディレクトリ１１１がアイドル状態のときにのみＬ２キャッシュ・ディレクトリ１１１へのアクセスが行われるため、エビクション候補を識別することについての性能上の不利益はない。
【００３３】
スヌープ読み出しによって、キャッシュ・ラインがＬ２キャッシュ１１０からエビクトされてはならない。Ｌ２キャッシュ１１０の多くのキャッシュ・ラインがプロセッサによって用いられているため、スヌープ読み出しによってキャッシュ・ラインがエビクトされた場合には、性能低下が生じる可能性がある。スヌープ読み出しによって望ましくないエビクションが生じないようにするために、プロセッサ１０５の置換論理１０９（図１）は、巡回スヌープ・シーケンサ１３４によってアサートされたスヌープ読み出しとしてコマンド／ステータス１１６上のコマンドを解釈し、スヌープ読み出しを認識し、スヌープ読み出しコマンドに応答して下位レベル・キャッシュのキャッシュ・ラインをエビクトしようとするあらゆる試みを抑制することによって、簡単にスヌープ読み出しを識別することができる。
【００３４】
１つの実施形態においては、巡回スヌープ・シーケンサ１３４は、Ｌ３キャッシュ・ディレクトリ１３６の現在考慮されているエントリからの状態７４の情報を用いて、現在考慮されているエントリについてスヌープ読み出しが行われるべきかどうかを判断する。現在のエントリに対応するキャッシュ・ラインが（例として、特定のＭＥＳＩ状態の実装形態を用いて）変更されたことを状態７４が示す場合には、対応するキャッシュ・ラインがＬ２キャッシュ１１０に存在するため、スヌープ読み出しは行われない。現在のエントリに対応するキャッシュ・ラインが共有されていることを状態７４が示す場合には、対応するキャッシュ・ラインがＬ２キャッシュ１１０に存在することも存在しないこともあるため、スヌープ読み出しが行われる。ＭＥＳＩを用いたキャッシュ・コヒーレンシの種々の実装形態は、異なった「排他的」状態を扱う。例えば、幾つかの実装形態は、１つのプロセッサのみがキャッシュ・ラインを有するが、そのキャッシュ・ラインを変更していない可能性があることを意味するものとして、「排他的」を定義する場合があり、別のプロセッサがキャッシュ・ラインを要求する場合には、「排他的」は「共有」に変更され、「共有」と同様に、このようなキャッシュ・ラインは、このような実装形態においては下位レベル・キャッシュに存在しない場合があり、スヌープ読み出しは、「排他的」状態を有するキャッシュ・エントリを含むものである。ＭＥＳＩの他の実装形態においては、「排他的」は、キャッシュ・ラインが用いられているためエビクション候補とすべきではないことを意味する場合がある。現在のエントリに対応するキャッシュ・ラインが無効であることを状態７４が示す場合には、スヌープ読み出しは行われない。典型的には、無効の状態は、コンピュータ・システムの立ち上げの際にのみ生じる。キャッシュ・ラインが無効の場合には、置換論理１３３が対応するキャッシュ・ラインを置換し、キャッシュ・ラインが無効であることを状態フィールドが示すときは、スヌープ読み出しは不要である。
【００３５】
エビクション候補としてマークされたキャッシュ・ラインが、エビクトされる前にプロセッサ１０５によってアクセスされた場合には、そのキャッシュ・ラインは、それがエビクション候補ではないように再びマークされる（すなわち、図５Ｃにおける状態７４に示されるビット「Ｘ」がディアサートされる）ことが分かるであろう。
【００３６】
図１は、Ｌ３キャッシュ１３２が、Ｌ２キャッシュ１１０Ａ、１１０Ｂをそれぞれ有する２つのプロセッサ１０５Ａ、１０５Ｂをサポートすることを示す。１つの実施形態においては、メモリ・コントローラ１３０は、特定のキャッシュ・ラインがどのＬ２キャッシュ１１０に送られたかを追跡し、そのキャッシュ・ラインが送られたＬ２キャッシュ１１０にその特定のキャッシュ・ラインが存在するかどうかを判断することのみが必要である。第２の実施形態においては、メモリ・コントローラ１３０は、特定のキャッシュ・ラインがどのＬ２キャッシュ１１０に送られたかを追跡せず、特定のキャッシュ・ラインがどのＬ２キャッシュ１１０に存在するかを確かめるためにＬ２キャッシュ１１０の各々を常にチェックしなければならない。
【００３７】
上位レベル・キャッシュ及び下位レベル・キャッシュを示すために、Ｌ３及びＬ２キャッシュ・システムが用いられたが、本発明はＬ３及びＬ２レベル・キャッシュに限定されるものではないことが分かるであろう。例えば、Ｌ２キャッシュ１１０及びＬ２キャッシュ・ディレクトリ１１１に関連する巡回スヌープ・シーケンサは、プロセッサ１０５のレベル１キャッシュ（レベル１キャッシュは図示されていない）に対して同じ機能を行うことができる。
【００３８】
本発明の実施形態は、方法として表現することもできる。図６は、方法３００のフローチャートを示す。方法３００は、ステップ３０２で開始する。ステップ３０４において、上位レベル・キャッシュ・ディレクトリの行のインデックスが、０に初期化される。ステップ３０６において、上位レベル・キャッシュ・ディレクトリが使用されているかどうかがチェックされる。上位レベル・キャッシュ・ディレクトリが使用されている場合には、制御は、単にステップ３０６に戻される。上位レベル・キャッシュ・ディレクトリが使用されていない場合には、制御はステップ３０８に移る。ステップ３０８において、上位レベル・キャッシュ・ディレクトリのエントリが読み出され、エントリのインデックス及びタグ情報を用いて巡回スヌープ・アドレスが生成される。典型的には、上位レベル・キャッシュ・ディレクトリの行の全エントリが、並行して読み出される。その場合には、巡回スヌープ・シーケンサは、並行して読み出されたエントリを格納し、次に行の各々のエントリを処理する。例えば、図５Ａは、１行に４つのエントリを有するＬ２キャッシュ・ディレクトリ・アレイ１１２を示す。Ｌ３キャッシュ１３２は、８つのクラス（図３Ａ）を有するように示されており、したがって、Ｌ３キャッシュ・ディレクトリ１３６は、１行に８つのエントリを有するＬ３キャッシュ・ディレクトリ・アレイを含む（Ｌ３キャッシュ・ディレクトリは示されていないが、Ｌ３キャッシュ・ディレクトリ１３６の設計は、Ｌ２キャッシュ・ディレクトリ１１１と同様に設計されるものとして記載されている）。
【００３９】
ステップ３１０において、下位レベル・キャッシュ・ディレクトリが使用されていないときに、ステップ３０８において生成された巡回スヌープ・アドレスを用いて下位レベル・キャッシュ・ディレクトリのスヌープ読み出しが行われる。ステップ３１２において、スヌープ読み出しが、下位レベル・キャッシュにおけるキャッシュ・ヒットを報告しない場合には、エビクション候補として対応するキャッシュ・ラインのフラグを立てるようにエントリがマークされる。ステップ３１６は、最後のスヌープ読み出しに用いられたエントリが上位レベル・キャッシュ・ディレクトリ内の最後のエントリであるかどうかを判断する。最後のエントリでない場合には、ステップ３１８においてインデックスの値が進められ、制御がステップ３０６に移る。最後のエントリである場合には、ステップ３２０においてインデックスの値が０にリセットされ、制御がステップ３０６に移る。
【００４０】
図７に示される方法３５０は、方法３００（図６）と同様であるが、ＭＥＳＩ状態規則を用いる例示的なキャッシュ設計についてより多くの細部を含む。
【００４１】
方法３５０は、ステップ３５２で開始する。ステップ３５４は、上位レベル・キャッシュ・ディレクトリの特定の行に対応するインデックスを初期化する。ステップ３５６は、上位レベル・キャッシュ・ディレクトリが使用されているかどうかをチェックする。使用されている場合には、ステップ３５６は、分岐して単にステップ３５６に戻り、上位レベル・キャッシュ・ディレクトリが使用されていない時間を待つ。
【００４２】
ステップ３５６が、上位レベル・キャッシュ・ディレクトリが使用されていないと判断すると、制御はステップ３８１に移る。ステップ３８１は、上位レベル・キャッシュ・ディレクトリ・アレイの１つ又は複数のエントリに関する状態情報について、上位レベル・キャッシュ・ディレクトリを読み出す。前の場合と同様に、キャッシュ・ディレクトリは、典型的には、インデックスによってアクセスされた特定の行についての全ディレクトリ情報を読み出す。ステップ３８１は、制御をステップ３８２に移す。ステップ３８２は、ステップ３８１におけるどのエントリ読み出しが無効状態を有するかをチェックする。無効状態は、希であり、一般には、コンピュータ・システムの立ち上げの際に現れるのみである。エントリについての無効状態は、対応するキャッシュ・ラインが、プロセッサ１０５によって必要とされるものを含まず、上書きされる可能性があり、スヌープ読み出しが行われる必要がないことを意味する。ステップ３８１において読み出されたキャッシュ・エントリが無効である場合には、ステップ３８２は、制御をステップ３６６に移す。ステップ３８１において読み出されたエントリが無効でない場合には、ステップ３８２は、制御をステップ３８４に移す。ステップ３８４は、いずれかの状態が共有であるかどうかをチェックする。共有でない場合には、対応するキャッシュ・ラインは下位レベル・キャッシュにおいて用いられており、対応する上位レベル・キャッシュ・ラインはエビクション候補としてマークされず、制御はステップ３６６に移る。エントリが共有状態を有する場合には、ステップ３８４は、ステップ３８１において読み出されたディレクトリ・エントリからのインデックス及びタグ情報を用いてアドレスを生成するステップ３５８に制御を移す。ステップ３６０は、プロセッサ・メモリ・バス１１５が未使用であるとき、及び、下位レベル・キャッシュ・ディレクトリが未使用であるときに、下位レベル・キャッシュのスヌープ読み出しを行う。スヌープ応答がヒットである場合には、対応するキャッシュ・ラインは、下位レベル・キャッシュに存在し、エビクション候補ではない。スヌープ応答がヒットではない（すなわち、ミスである）場合には、制御はステップ３６４に移り、スヌープ読み出しを生成するのに用いられたディレクトリ・エントリに状態情報を設定することによって、エビクション候補としてキャッシュ・ラインにフラグを立てる。前述のように、エントリの状態ビット「Ｘ」を用いて、エビクション候補としてキャッシュ・ラインにフラグを立てることができる。次に、ステップ３６４は制御をステップ３８６に移し、ステップ３８１において読み出された共有状態を有するエントリの現在の行にさらにエントリが存在するかどうかをチェックする。存在する場合には制御はステップ３５８に移り、存在しない場合には制御はステップ３６６に移る。
【００４３】
ステップ３６６は、上位レベル・キャッシュ・ディレクトリの全エントリが考慮されたかどうかをチェックする、すなわち、インデックスは、上位レベル・キャッシュ・ディレクトリ・アレイの行数を超えて扱うことになる。全エントリが考慮されていない場合には、ステップ３６８においてインデックスの値が増加され、全エントリが考慮された場合には、ステップ３７０においてインデックスが０に再初期化される。ステップ３６８及び３７０は、制御をステップ３５６に戻し、上位レベル・キャッシュ・ディレクトリの未使用時間を利用してエントリを読み出し、共有状態を有するエントリを見つけ出し、リソース（上位レベル・キャッシュ・ディレクトリ、メモリ・プロセッサ・バス、及び下位レベル・キャッシュ・ディレクトリ）がアイドル状態であるときに、スヌープ読み出し要求を下位レベル・キャッシュ・ディレクトリに送り、共有キャッシュ・ラインが下位レベル・キャッシュに存在するかどうかを下位レベル・キャッシュ・ディレクトリからのヒット又はミス応答によって判断する方法が、続けられる。共有キャッシュ・ラインが下位レベル・キャッシュに存在しない場合には、上位レベル・キャッシュのキャッシュ・ラインが、エビクション候補としてマークされる。
【００４４】
図８に示される方法４００は、方法及び装置として前述された本発明のスヌープ読み出しの実施形態によって識別されるエビクション候補によって、例えばＬＲＵ置換アルゴリズム及び擬似ランダム置換アルゴリズムであるがこれらに限定されない既知の置換アルゴリズムの置換選択がどのように改善されるかを示す。
【００４５】
方法４００は、ステップ４０２で開始する。ステップ４０４において、上位レベル・キャッシュが、上位レベル・キャッシュのキャッシュ・ラインのエビクションを要求する、新しいキャッシュ・ラインのデータについての要求を受け取る。ステップ４０６において、上位レベル・キャッシュは、新しいキャッシュ・ラインが配置されるクラスについての状態及びタグ情報を含むエントリを含む、キャッシュ・ディレクトリ・アレイの行を決定する。ステップ４０８において、ステップ４０６において決定された行が、キャッシュ・ディレクトリ・アレイから読み出される。
【００４６】
ステップ４１０において、要求されたキャッシュ・ラインが上位レベル・キャッシュに存在するかどうかがチェックされる。存在する場合には、ステップ４１２において、要求されたキャッシュ・ラインがエビクション候補としてマークされているかどうかがチェックされる。要求されたキャッシュ・ラインがエビクション候補としてマークされている場合には、制御は、要求されたキャッシュ・ラインをエビクション候補からマーク解除するステップ４１４に移る。ステップ４１４は、制御をステップ４１６に移す。要求されたキャッシュ・ラインがエビクション候補としてマークされていないとステップ４１２が判断した場合には、制御はステップ４１６に移る。ステップ４１６は、要求されたキャッシュ・ラインを下位レベル・キャッシュにコピーする。制御は、ステップ４１６からステップ４２６に移り、方法は終了する。要求されたキャッシュ・ラインが上位レベル・キャッシュに存在しないとステップ４１０が判断した場合には、制御はステップ４２０に移る。
【００４７】
ステップ４２０において、ステップ４０８において読み出された行のいずれかのエントリが無効状態を有する場合には、制御はステップ４２１に移り、要求されたキャッシュ・ラインは、ステップ４２０による無効状態エントリに対応する上位レベル・キャッシュのクラスに書き込まれ、これにより無効キャッシュ・ラインをエビクトする（実際には上書きする）。次に、ステップ４２１は制御をステップ４２６に移し、プロセス４００は終了する。エントリが無効キャッシュ・ラインを示す状態を有していないことをステップ４２０が検出した場合には、制御はステップ４２２に移る。
【００４８】
ステップ４２２において、ステップ４０８において読み出された上位レベル・キャッシュ・ディレクトリ・アレイにおける行のエントリの状態をチェックして、いずれかのエントリがエビクション候補としてマークされているかどうかを確かめる。このステップは、第１のエビクション候補が発見されるまで、各々のエントリを順番に調べるのみである。エビクション候補が発見された場合には、制御はステップ４２３に移り、要求されたキャッシュ・ラインが、エビクション候補であることが判明したキャッシュ・ラインに書き込まれる。ステップ４２３は制御をステップ４２６に移し、プロセスが終了する。ステップ４２２が、エビクション候補としてマークされたエントリを発見しない場合には、制御はステップ４２４に移る。ステップ４２４は、ＬＲＵアルゴリズム又は擬似ランダム置換アルゴリズムといった、多くの既知の置換アルゴリズムのいずれかを実行する。
【図面の簡単な説明】
【００４９】
【図１】１つ又は複数のプロセッサとメモリ・コントローラとメモリとを含むコンピュータ・システムのブロック図である。
【図２】図１に示されるプロセッサ・メモリ・バスをさらに詳細に示す。
【図３】（Ａ）上位レベル・キャッシュのブロック図を示す。（Ｂ）下位レベル・キャッシュのブロック図を示す。（Ｃ）Ｌ２及びＬ３タグ部分と、Ｌ２及びＬ３インデックス部分と、キャッシュ・ライン内のバイトを決定するのに用いられる部分とを有する例示的なアドレスを示す。
【図４】（Ａ）セットに格納された例示的なキャッシュ・ラインを有する上位レベル・キャッシュを示す。（Ｂ）セットに格納された例示的なキャッシュ・ラインを有する下位レベル・キャッシュを示す。
【図５】（Ａ）例示的なキャッシュ・ディレクトリを示す。（Ｂ）キャッシュ・ディレクトリのエントリの例示的な状態フィールドを示す。（Ｃ）エビクション候補を示すビットを有する、キャッシュ・ディレクトリのエントリの例示的な状態フィールドを示す。
【図６】上位レベル・キャッシュにおけるエビクション候補を決定するための第１の方法のフローチャートである。
【図７】上位レベル・キャッシュにおけるエビクション候補を決定するための第２の方法のフローチャートである。
【図８】エビクション候補情報を用いてキャッシュ置換アルゴリズムを補う方法のフローチャートである。
【図１】
2009524137.tif 000003
【図２】
2009524137.tif 000004
【図３】
2009524137.tif 000005
【図４】
2009524137.tif 000006
【図５】
2009524137.tif 000007
【図６】
2009524137.tif 000008
【図７】
2009524137.tif 000009
【図８】
2009524137.tif 000010
【手続補正書】
【提出日】平成21年3月13日(2009.3.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
キャッシュ・ライン置換のための方法であって、
下位レベル・キャッシュに存在しない上位レベル・キャッシュの第１のキャッシュ・ラインを識別するステップと、
前記下位レベル・キャッシュに存在する前記上位レベル・キャッシュの第２のキャッシュ・ラインの代わりに、前記上位レベル・キャッシュから前記第１のキャッシュ・ラインをエビクトするステップと、
を含み、
前記下位レベル・キャッシュに存在しない前記上位レベル・キャッシュの前記第１のキャッシュ・ラインを識別する前記ステップは、
前記上位レベル・キャッシュのキャッシュ・ラインのアドレスを用いて前記下位レベル・キャッシュのスヌープ読み出しを行うステップと、
前記下位レベル・キャッシュの前記スヌープ読み出しが、前記下位レベル・キャッシュにおけるミスという結果になった場合には、前記キャッシュ・ラインをエビクション候補として識別するステップと、
前記下位レベル・キャッシュの前記スヌープ読み出しが、前記下位レベル・キャッシュにおけるミスという結果にならなかった場合には、前記キャッシュ・ラインをエビクション候補として識別しないステップと、
を含むことを特徴とする方法。
【請求項２】
前記下位レベル・キャッシュのスヌープ読み出しを行う前記ステップは、
上位レベル・キャッシュ・ディレクトリがアイドル状態である第１の時間を決定するステップと、
前記上位レベル・キャッシュ・ディレクトリがアイドル状態であるときに、前記上位レベル・キャッシュ・ディレクトリからの１つ又は複数のキャッシュ・エントリを読み出すステップと、
前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリのタグ・フィールドを用いて、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを生成するステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記下位レベル・キャッシュのスヌープ読み出しを行う前記ステップは、
下位レベル・キャッシュ・ディレクトリがアイドル状態である第２の時間を決定するステップと、
前記第２の時間中に、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを用いて前記下位レベル・キャッシュ・ディレクトリにアクセスするステップと、
前記第２の時間中に、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを用いて前記下位レベル・キャッシュ・ディレクトリにアクセスする前記ステップが、前記下位レベル・キャッシュ・ディレクトリにおけるミスという結果になった場合には、前記下位レベル・キャッシュにおける前記ミスを返すステップと、
前記第２の時間中に、前記上位レベル・キャッシュの前記キャッシュ・ラインの前記アドレスを用いて前記下位レベル・キャッシュ・ディレクトリにアクセスする前記ステップが、前記下位レベル・キャッシュ・ディレクトリにおけるヒットという結果になった場合には、前記下位レベル・キャッシュにおける前記ヒットを返すステップと、
をさらに含む、請求項２に記載の方法。
【請求項４】
ａ）前記上位レベル・キャッシュの第２のエントリについて請求項４に記載のステップを繰り返すステップ、
ｂ）前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの状態情報を読み出し、前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの特定のキャッシュ・エントリについての前記状態情報が、対応するキャッシュ・ラインが無効であることを示す場合には、前記特定のエントリについて請求項４に記載の前記ステップを行わないステップ、又は
ｃ）前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの状態情報を読み出し、前記上位レベル・キャッシュ・ディレクトリからの前記１つ又は複数のキャッシュ・エントリの特定のキャッシュ・エントリについての前記状態情報が、対応するキャッシュ・ラインが変更されたことを示す場合には、前記特定のエントリについて請求項４に記載の前記ステップを行わないステップ、
をさらに含む、請求項３に記載の方法。
【請求項５】
ａ）前記上位レベル・キャッシュによるデータについての要求を受け取り、
前記データを含む特定のキャッシュ・ラインが前記上位レベル・キャッシュに存在するかどうかをチェックし、
前記特定のキャッシュ・ラインが前記上位レベル・キャッシュに存在する場合に、前記特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないものとして識別された場合には、前記下位レベル・キャッシュに存在しないものとした前記キャッシュ・ラインの識別を解除することを実行するステップ、又は、
ｂ）前記上位レベル・キャッシュが、各々が同じレベルにある複数の下位レベル・キャッシュに結合されている場合には、前記下位レベル・キャッシュに存在しない前記上位レベル・キャッシュの前記第１のキャッシュ・ラインを識別する前記ステップが、前記第１のキャッシュ・ラインが前記複数の下位レベル・キャッシュのいずれにも存在しないことを保証することをさらに含むステップ、
をさらに含む、請求項１から請求項４のいずれか１項に記載の方法。
【請求項６】
前記上位レベル・キャッシュがＬ３キャッシュであり、前記下位レベル・キャッシュがＬ２キャッシュであるか、又は、前記上位レベル・キャッシュがＬ２キャッシュであり、前記下位レベル・キャッシュがＬ１キャッシュである、請求項１から請求項５のいずれか１項に記載の方法。
【請求項７】
上位レベル・キャッシュと、
巡回スヌープ・シーケンサと、
を含むメモリ・コントローラを備えたコンピュータ・システムであって、
前記メモリ・コントローラに結合された下位レベル・キャッシュと、
前記メモリ・コントローラ内に、前記下位レベル・キャッシュに存在する第２のキャッシュ・ラインの代わりに、前記下位レベル・キャッシュに存在しないものとして識別された第１のキャッシュ・ラインをエビクトするように構成された論理と
をさらに備え、
前記メモリ・コントローラは、前記巡回スヌープ・シーケンサに結合され、前記上位レベル・キャッシュのキャッシュ・ラインごとのエントリを保持する、上位レベル・キャッシュ・ディレクトリをさらに備え、
前記エントリの各々は、前記上位レベル・キャッシュのキャッシュ・ラインごとの状態フィールド及びタグ・フィールドを含み、
前記上位レベル・キャッシュのキャッシュ・ラインごとの前記エントリは、前記上位レベル・キャッシュの特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないかどうかに関する情報を保持するフィールドをさらに含み、
前記巡回スヌープ・シーケンサは、前記下位レベル・キャッシュに存在しない前記上位レベル・キャッシュのキャッシュ・ラインを識別することができるように構成され、
前記巡回スヌープ・シーケンサは、
前記上位レベル・キャッシュ・ディレクトリを読み出し、
前記上位レベル・キャッシュ内のエントリを読み出し、
前記上位レベル・キャッシュ内のキャッシュ・ラインのアドレスを生成し、
下位レベル・キャッシュ・ディレクトリのスヌープ読み出しを行い、
前記スヌープ読み出しが、前記下位レベル・キャッシュ・ディレクトリにおけるキャッシュ・ミスという結果になった場合には、前記上位レベル・キャッシュの特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないかどうかに関する情報を保持する前記エントリについての前記フィールドに、前記エントリに対応するキャッシュ・ラインをエビクション候補として識別するように書き込み、
前記スヌープ読み出しが、前記下位レベル・キャッシュ・ディレクトリにおけるキャッシュ・ヒットという結果になった場合には、前記上位レベル・キャッシュの特定のキャッシュ・ラインが前記下位レベル・キャッシュに存在しないかどうかに関する情報を保持する前記エントリについての前記フィールドに、前記エントリに対応するキャッシュ・ラインをエビクション候補として識別するようには書き込まない、
ように構成された、
コンピュータ・システム。
【請求項８】
前記メモリ・コントローラに結合され、前記下位レベル・キャッシュのキャッシュ・ラインごとのエントリを有する、下位レベル・キャッシュ・ディレクトリをさらに備える、請求項７に記載のコンピュータ・システム。
【請求項９】
前記メモリ・コントローラに結合された第２の下位レベル・キャッシュをさらに備え、
前記巡回スヌープ・シーケンサは、前記第２の下位レベル・キャッシュに存在しない前記上位レベル・キャッシュのキャッシュ・ラインを識別することができるように構成され、
必要に応じて、前記メモリ・コントローラ内に、前記下位レベル・キャッシュ又は前記第２の下位レベル・キャッシュのいずれかに存在する第２のキャッシュ・ラインの代わりに、前記下位レベル・キャッシュにも前記第２の下位レベル・キャッシュにも存在しないものとして識別された第１のキャッシュ・ラインをエビクトするように構成された論理をさらに含む、請求項８又は請求項９に記載のコンピュータ・システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
上述されたＬＲＵの問題のため、マルチレベル・キャッシュを有する多くのコンピュータ・システムは、事実上、上位レベル・キャッシュが、上位レベル・キャッシュにおけるセットのうちのどのキャッシュ・ラインが好ましいエビクション候補であるかを知らず、エビクションのためのセットからランダムに１つのキャッシュ・ラインを選定するだけであることを許容する、上位レベル・キャッシュの擬似ランダム・エビクション・アルゴリズムを実装してきた。残念なことに、擬似ランダム・エビクション・アルゴリズムは、プロセッサによって頻繁に用いられているキャッシュ・ラインをエビクトして、エビクトされたキャッシュ・ラインが上位レベル・キャッシュより上位のレベルのメモリからフェッチされるまでプロセッサを待機させることも多い。
IBM Technical Disclosure Bulletin, IBM
Corp. New York, US, vol.34, no.6 1 November 1991 pages 59-60, XP600228351 ISSN:
0018-8689 は、マルチレベル・キャッシュのためのＭＲＵ更新制御を開示する。この文献においては、MRU更新要求を上位レベル・キャッシュに送るのは、下位レベル・キャッシュに対してスヌープ読み出しを行う上位レベル・キャッシュではなく、下位レベル・キャッシュである。
【国際調査報告】
2009524137.tif 000011
2009524137.tif 000012
2009524137.tif 000013