特許第6192858号(P6192858)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ヴィア アライアンス セミコンダクター カンパニー リミテッドの特許一覧

特許6192858ハングを検出するためのロジック・アナライザ
<>
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000002
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000003
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000004
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000005
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000006
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000007
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000008
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000009
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000010
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000011
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000012
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000013
  • 特許6192858-ハングを検出するためのロジック・アナライザ 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6192858
(24)【登録日】2017年8月18日
(45)【発行日】2017年9月6日
(54)【発明の名称】ハングを検出するためのロジック・アナライザ
(51)【国際特許分類】
   G06F 12/08 20160101AFI20170828BHJP
   G06F 9/52 20060101ALI20170828BHJP
【FI】
   G06F12/08 519E
   G06F12/08 507Z
   G06F9/46 472A
【請求項の数】20
【全頁数】16
(21)【出願番号】特願2016-563275(P2016-563275)
(86)(22)【出願日】2014年12月13日
(65)【公表番号】特表2017-502443(P2017-502443A)
(43)【公表日】2017年1月19日
(86)【国際出願番号】IB2014003174
(87)【国際公開番号】WO2016092345
(87)【国際公開日】20160616
【審査請求日】2016年1月13日
(73)【特許権者】
【識別番号】515324257
【氏名又は名称】ヴィア アライアンス セミコンダクター カンパニー リミテッド
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】フーカー,ロドニー,イー
(72)【発明者】
【氏名】リード,ダグラス,アール
【審査官】 塚田 肇
(56)【参考文献】
【文献】 米国特許出願公開第2013/0318530(US,A1)
【文献】 特開平11−328141(JP,A)
【文献】 米国特許出願公開第2010/0286952(US,A1)
【文献】 米国特許出願公開第2014/0052966(US,A1)
【文献】 米国特許出願公開第2006/0179289(US,A1)
【文献】 米国特許第07496918(US,B1)
【文献】 米国特許出願公開第2008/0301374(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/08
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
タグ・アレイを含むキャッシュと、
前記タグ・アレイに対するアクセスをアービトレートするタグパイプと、
スターベーション、ライブロック、又はデッドロックの状態を調査するためのロジック・アナライザとを備えるマイクロプロセッサであって、
前記ロジック・アナライザは、前記タグパイプに結合された読出しロジックを備え、
前記ロジック・アナライザは、前記タグ・アレイにアクセスするトランザクションであるタグパイプarbのスナップショットを記録するように構成されている、
マイクロプロセッサ。
【請求項2】
前記スナップショットは、前記タグパイプarbが、ロード、スヌープ、記憶、又は他のarbタイプであるかについての情報を含む、請求項1に記載のマイクロプロセッサ。
【請求項3】
前記スナップショットは、前記タグパイプarbが完了したか、又は再生されたかについての情報を含む、請求項1に記載のマイクロプロセッサ。
【請求項4】
前記スナップショットは、前記arbが割り当てられるセット及びウェイを識別する情報を含む、請求項1に記載のマイクロプロセッサ。
【請求項5】
前記タグパイプは、複数のステージを含み、前記ロジック・アナライザは、再生、完了、及び/又はあるarbが他のキュー・プッシュを要求しようとしているかを前記タグパイプが判定した後、前記パイプラインのステージのスナップショットを取り込む、請求項1に記載のマイクロプロセッサ。
【請求項6】
前記ロジック・アナライザは、ユーザが、どのスナップショットを前記ロジック・アナライザが記録するかを選択的に構成することを可能にする構成ロジックをさらに備える、請求項1に記載のマイクロプロセッサ。
【請求項7】
前記ロジック・アナライザは、ユーザが、タグパイプarbのスナップショットを、相互の間で記録する開始ポインタと終了ポインタとを選択的に構成することを可能にする構成ロジックをさらに備える、請求項1に記載のマイクロプロセッサ。
【請求項8】
前記ロジック・アナライザは、様々なタイプの再生状態を一緒に論理ORすることによって前記スナップショットを圧縮するように構成されている、請求項1に記載のマイクロプロセッサ。
【請求項9】
前記ロジック・アナライザは、前記スナップショットを当該マイクロプロセッサのプライベート・ランダム・アクセス・メモリ(PRAM)に記憶するように構成されている、請求項1に記載のマイクロプロセッサ。
【請求項10】
マイクロプロセッサにおけるスターベーション、ライブロック、又はデッドロックの状態を調査する際に使用するための情報を収集するための方法であって、
タグ・アレイにアクセスするトランザクションであるタグパイプarbを、タグパイプに結合されたロジック・アナライザの使用によって読み出すステップと、
前記スターベーション、ライブロック、又はデッドロックの状態を調査する際に使用するために、前記ロジック・アナライザの使用によって、前記タグパイプarbの少なくとも一部分をメモリ・ストレージに記録するステップと、
を含む方法。
【請求項11】
前記記録するステップは、前記タグパイプarbが、ロード、スヌープ、記憶、又は他のarbタイプであるかについての情報を記録するステップを含む、請求項10に記載の方法。
【請求項12】
前記記録するステップは、前記タグパイプarbが、完了したか、又は再生されたかについての情報を記録するステップを含む、請求項10に記載の方法。
【請求項13】
前記記録するステップは、前記arbが割り当てられるセット及びウェイを識別する情報を記録するステップを含む、請求項10に記載の方法。
【請求項14】
前記タグパイプは、複数のステージを備え、前記ロジック・アナライザは、生、完了、及び/又はあるarbが他のキュー・プッシュを要求しようとしているかを前記タグパイプが判定した後、前記タグパイプのステージに結合される、請求項10に記載の方法。
【請求項15】
どのスナップショットを前記ロジック・アナライザが記録するかを構成するステップをさらに含む、請求項10に記載の方法。
【請求項16】
特定のタグパイプarbを選択的に無視するように、前記ロジック・アナライザを構成するステップをさらに含む、請求項10に記載の方法。
【請求項17】
タグパイプarbのスナップショットを、相互の間で記録する開始ポインタと終了ポインタとを選択的に構成するステップをさらに含む、請求項10に記載の方法。
【請求項18】
様々なタイプの再生状態を一緒に論理ORすることによってスナップショットを圧縮するステップをさらに含む、請求項10に記載の方法。
【請求項19】
スナップショットを前記マイクロプロセッサのプライベート・ランダム・アクセス・メモリ(PRAM)に記憶するステップをさらに含む、請求項10に記載の方法。
【請求項20】
コンピュータ装置と共に使用するための少なくとも1つの非一時的コンピュータ可読媒体においてエンコードされるコンピュータ・プログラムにおいて、当該コンピュータ・プログラム製品は、マイクロプロセッサを指定するための、前記媒体において実装されるコンピュータ可読プログラム・コードを含んでおり、前記マイクロプロセッサは、
タグ・アレイを含むキャッシュと、
前記タグ・アレイに対するアクセスをアービトレートするタグパイプと、
スターベーション、ライブロック、又はデッドロックの状態を調査するためのロジック・アナライザと、を有しており、
前記ロジック・アナライザは、前記タグパイプに結合された読出しロジックを備え、
前記ロジック・アナライザは、前記タグ・アレイにアクセスするトランザクションであるタグパイプarbのスナップショットを記録するように構成されている、
コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ハング検出ロジックに関し、より詳細には、最終レベル・キャッシュのハング検出ロジックに関する。
【背景技術】
【0002】
ラストレベル・キャッシュ(Last−level cache:LLC)に対するタグ・パイプラインは、タグ・アレイ、MESIアレイ、及びLRUアレイにアクセスするウェイ(way)を提供する。タグ・パイプライン(本明細書では、タグパイプとも呼ばれる)は、リクエストに優先順位を付け、特定のリクエストにいかに応答すべきかについての決定を行う。例として、L1Dなどのより低いレベル・キャッシュからのロード・リクエストにより、キュー・エントリは、状態を追跡する目的のため、プッシュされることになる。次いで、データ・ロード・キュー・エントリは、タグ・パイプラインに対する所有権についてアービトレート(arbitrate)する。一旦、タグ・パイプランに所有権が認められると、キュー・エントリは、タグMESIアレイにアクセスして、そのアドレスがアレイ内にあるかどうかを調べる。アドレスがある場合には、パイプラインの終わりにおいて、アドレスがキャッシュ内にあるかどうか、及び他の何のキャッシュがラインを有するかに基づいて、キュー・エントリは、ヒットが存在することになるか、又はミスが存在することになるか、或いは他のキャッシュをスヌープすることが必要になるかどうかを決定する。
【0003】
LLCに対するアクセスをアービトレートするのに使用されるロジックは、結果として、コーディング・エラーの障害でもなく、プログラマが予測もできないハング(hang)をもたらす場合がある。例として、デッドロックは、単一のリクエスト又は1対のリクエストが完了しないときに生じる。リクエストは、繰り返しパイプラインへアービトレートし、再生する。デッドロックの一般的な原因は、いくつかの外部刺激におけるリクエスト待ちである。別の一般的な原因は、1対のリクエストのうちの各リクエストが、リクエストのうちの他方が完了するのを待っているという依存性チェーンの存在である。
【0004】
別の一般的な例は、マルチスレッドのプログラムにおいて、それぞれのスレッドが同じ共有リソースについて競合するときに生じる未解決のハング及びスターベーション(starvation)である。コードにおいては、所有権は、しばしば、リソースが利用可能である場合は0、リソースが利用不可能である(すなわち、スレッドのうちの1つによってすでに所有されている)場合は1である変数によって信号伝達される。スレッドは、ビットを読み出すと同時に、ビットを1に設定して、スレッドが所有権を得ることができるかどうかを調べる。スレッドが、0を読み出すが1を設定することができる場合に、このとき、そのスレッドは、所有権を得る。1つのスレッドが所有権を得たとき、他のスレッドは、第1のスレッドが共有リソースを解放するのを待ちながら、この場所に対する読出し/修正/書込みを絶えず行う。ハングは、スレッド0がリソースを所有し、そのタスクにより終了するが、リソースを獲得しようと試みるスレッド1及びスレッド2の繰り返される読出し/修正/書込みによってリソースを解放するように0に書き込むことが妨げられる場合に生じる。これらの種類のスターベーション状態は、ロードが他のロードに対してどのように優先順位を付けられるかを確定するアーキテクチャの意図しない特徴であり、予測することが困難である。
【発明の概要】
【発明が解決しようとする課題】
【0005】
実際には、一般的なデッドロック状態を検出し、そのデッドロック状態に応答するマイクロプロセッサを作り出すことは、そのような状態が決して又はほとんど生じないマクロプロセッサを作り出すことよりも、費用、処理速度、及び論理的複雑さの点で、より効率的である可能性がある。したがって、ハングを示すパターンを検出するヒューリスティックベースのタグパイプ・トラフィック監視ロジックの必要性が存在する。また、検出されたハングにこれらハングを解決しようとする試みで応答するロジックの必要性も存在する。
【課題を解決するための手段】
【0006】
本発明は、多くの形態で表すことができる。本発明を表すことができる1つの形態は、タグ・アレイを含むキャッシュと;タグ・アレイに対するアクセスをアービトレートするタグパイプと;スターベーション、ライブロック、又はデッドロックの状態を調査するためのロジック・アナライザと;を備えたマイクロプロセッサである。
【0007】
数多くのクロック、例えば千個のクロックにわたって、デッドロックは、あったとしてもほとんど完了しないトラフィック・パターン、多数の再生、及び1つだけ又は2つの異なる種類のarbとしてよく現れる。ロジック・アナライザは、そのようなトラフィック・パターンを識別するために提供される。
【0008】
ロジック・アナライザは、タグパイプに結合された読出しロジックを備える。このロジック・アナライザは、本明細書でタグパイプarbと呼ばれる、タグ・アレイにアクセスするトランザクションのスナップショットを記録するように構成されている。
【0009】
タグパイプは、複数のステージを備えることができ、ロジック・アナライザは、arbが他のキュー・プッシュを再生、完了、及び/又は要求しようとしているかをタグパイプが判定した後、パイプラインのステージに結合される。
【0010】
スナップショットは、以下の情報、すなわち、タグパイプarbが、ロード、スヌープ、記憶、又は他のarbタイプであるか、タグパイプarbは、完了したか、又は再生されたか、並びにarbが割り当てられるセット及びウェイを識別する情報、のうちの一部或いはすべてを含むことができる。
【0011】
ロジック・アナライザは、ロジックを備えて、様々なタイプの再生状態を一緒に論理ORすることによってスナップショットを圧縮し、スナップショットをマイクロプロセッサのプライベート・ランダム・アクセス・メモリ(private random access memory:PRAM)に記憶することができる。
【0012】
ロジック・アナライザはまた、ユーザが、どのスナップショットをロジック・アナライザが記録するかを選択的に構成すること、及びタグパイプarbのスナップショットを、相互の間で記録する開始ポインタと終了ポインタとを選択的に構成することを可能にする構成ロジックを備えることができる。
【0013】
本発明はまた、多くの他の形態でも表すことができ、そのいくつかは、上記に表された形態よりも広範であってよい。したがって、本発明を上記に表す形態は、特許請求の範囲において本発明を表す形態を映し出すものとみなすべきではない。
【図面の簡単な説明】
【0014】
図1】共有LLCを有するマルチコア・マイクロプロセッサの一実施形態のブロック図である。
図2図1のLLCのブロック図である。
図3図2のLLCについて、タグパイプ・ステージング・アーキテクチャの一実施形態のブロック図である。
図4】LLC及びハング検出アーキテクチャの一実施形態のトップレベルの図を示すブロック図である。
図5図4のロジック・アナライザを示すブロック図である。
図6図5のロジック・アナライザによって取り込まれたスナップショットの一実施形態の内容を示す図である。
図7図4のパターン検出器を示すブロック図である。
図8図7のパターン検出器に組み込まれた累積レジスタの一実施形態の内容を示す図である。
図9図7の条件付きパターン検出器の動作を示す機能ブロック図である。
図10図4の条件付きパターン検出器を示すブロック図である。
図11図10の構成可能なレジスタのうちの1つの一実施形態の内容を示す図である。
図12】1つ又は複数の起こり得るスターベーション、ライブロック、又はデッドロックの状態を検出するための分散型ハング・ロジック・アーキテクチャの一実施形態を示す図である。
図13】複数の回復ルーチンを示す機能ブロック図である。
【発明を実施するための形態】
【0015】
ここで、図1を参照すると、マルチコア・マイクロプロセッサ100を示すブロック図が示されている。マイクロプロセッサ100は、複数の処理コア102と、共有ラストレベル・キャッシュ(LLC)メモリ120と、バス・インターフェース・ユニット(bus interface unit:BIU)122とを含む。
【0016】
図1の例示的な実施形態では、まとめてコア102と呼ばれ、総称して個々にコア102と呼ばれるコア0の102−0、コア1の102−1、コア2の102−2、及びコア3の102−3と示された4つのコア102が存在する。まとめてインターフェース118と呼ばれ、総称して個々にインターフェース118と呼ばれる各インターフェース118−0、118−1、118−2、118−3を介して、コア102−0、102−1、102−2、102−3のそれぞれは、LLC120にアクセスする。バス・インターフェース・ユニット122も、インターフェース118−4を介してLLC120にアクセスする。マイクロプロセッサ100は、より大型のコンピュータ・システム(図示せず)の一部であり、このコンピュータ・システムは、LLC120が、システム・バス124を通じてバス・インターフェース・ユニット122を介して通信するシステム・メモリ及び周辺装置(これらも、図示せず)を含む。図1の実施形態は、4つのコア102を備えたプロセッサ100を示しているが、異なる数のコア102を備えた他の実施形態が企図される。すべてのコア102は、LLC106を共有する。
【0017】
それぞれの処理コア102は、命令キャッシュ104と、マイクロコード108を含む命令トランスレータ106と、実行ユニット110と、アーキテクチャ型レジスタ112と、メモリ・サブシステム114(例えばメモリ・オーダ・バッファ、データ・キャッシュ、及びテーブル・ウォーク・エンジン)とを備える。命令ユニット110には、整数ユニット、浮動小数点ユニット、媒体ユニット、分岐ユニット、ロード・ユニット、及び記憶ユニットを含めることができる。他の機能ユニット(図示せず)は、とりわけ、仮想から物理アドレスへの変換を生成する変換テーブル・ウォークを行うテーブル・ウォーク・エンジンと、分岐予測器と、リネーム・ユニットと、リオーダ・バッファと、予約ステーションと、命令フェッチ・ユニットと、命令デコーダと、命令スケジューラと、命令ディスパッチャと、データ・プリフェッチ・ユニットと、非アーキテクチャ型レジスタとを含むことができる。様々なマイクロアーキテクチャ型機能をコア102に含めることができる。例えば、コア102は、クロック・サイクル毎に複数の命令を実行ユニット110に発行して実行することができるスーパースカラであってよく、又はスカラであってもよい。別の例として、コア102は、命令をインオーダで(順番に)、又はアウトオブオーダで(順序に関係なく)実行することができ、アウトオブオーダは、発行すべき命令をプログラム順序から外れて実行することを可能にする。一実施形態では、コア102は、実質的にはx86命令セット・アーキテクチャに従うが、特定の命令セット・アーキテクチャに限定されず、グラフィック処理ユニット(graphic processing unit:GPU)、又はフィールド・プログラマブル・ゲート・アレイ(field programmable gate array:FPGA)などの他のメモリ・リクエスト・エージェントを含んでもよい。
【0018】
また、まとめてプライベート・キャッシュ・メモリ階層116と呼ばれ、総称して個々にプライベート・キャッシュ・メモリ階層116と呼ばれるそれぞれのプライベート・キャッシュ・メモリ階層116−0、116−1、116−2、116−3を、コア102−0、102−1、102−2、102−3のそれぞれは含む。好ましくは、プライベート・キャッシュ・メモリ階層116のキャッシュ・メモリは、LLC120より小さく、比較的小さいアクセス・レイテンシを有する。一実施形態では、プライベート・キャッシュ・メモリ階層116は、レベル1(L1)命令キャッシュ(L1I)及びL1データ・キャッシュ(L1D)を含む。
【0019】
図2は、マイクロプロセッサの最終レベル・キャッシュ(LLC)120の高レベルのブロック構造を示している。LLC120は、一時的なトランザクション状態を保持するキュー130を収容したコア・インターフェース126及びバス・インターフェース128と、タグ、MESI、LRU、及びデータ情報を保持するアレイ132〜136と、キューが適したタイミングで共有アレイにアクセスすることを可能にする1つ又は複数のタグ・パイプライン140(「タグパイプ」とも呼ばれる)及びデータ・パイプライン160(「データパイプ」とも呼ばれる)とを含んだいくつかのサブモジュールを含む。
【0020】
図2の実施形態では、2つのタグパイプ140、TagPipeAとTagPipeBとが、クアドコア・プロセッサのLLCをサポートするように示されている。複数のコアのうちの2つが、TagPipeAについてアービトレートし、他の2つのコアが、TagPipeBについてアービトレートする。別の実施形態では(図示せず)、単一のタグパイプ140が、LLC用に設けられる。さらに他の実施形態では(これも図示せず)、3つ以上のタグパイプ140が設けられる。
【0021】
タグパイプ140の独自の特徴は、タグパイプ140が、ほとんどすべてのLLCトラフィックがそれを通って移動するような中心点として動作することである。それぞれのタグパイプ140は、Least−Recently−Used(LRU;最長時間未使用の)アレイ及びTag/MESIアレイ132、134に対するアクセスを提供し、タグパイプ140にアービトレートするあらゆるキュー・エントリについてアクション決定を行う。この特徴により、タグパイプ140は、ハングを検出し、回避する際に有用になる。
【0022】
LLCのキュー130は、コア・インターフェース・キューと、外部インターフェース・キューとに分類可能である。コア・インターフェース・キューの例には、L1キャッシュ(又は中間キャッシュ)からLLCへのロードを扱うロード・キュー、L1キャッシュからLLCへの強制退去を扱う強制退去キュー、及びLLCからL1キャッシュへのスヌープを扱うスヌープ・キューが含まれる。一実施形態では、別個のロード、強制退去、及びスヌープのキューが、データ及びコード用に設けられる。別の実施形態では、そのようなコア・インターフェース・キューのグループが、プロセッサのコアごとに設けられる。
【0023】
外部インターフェース・キューには、LLCへの新規割当て及びLLCからの強制退去を扱う充填バッファ(Fill Buffer)、バスに由来するスヌープを扱うスヌープ・キュー、及び(とりわけ)コアからのバス書込みを扱う書込みキューが含まれる。
【0024】
LLCはまた、状態マシンと、検証機能と、Forthプログラムを働かせるPPU139とを含んだ他の小さいブロックを含む。
【0025】
外の世界からLLCに入るトランザクション(例えば、データ・ロード)、又はLLC内で実現するトランザクション(例えば、プリフェッチ)は、それらの対応するキュー130にエントリをプッシュする。次いで、キュー130は、タグ・パイプライン140又はデータ・パイプライン160のいずれかにアービトレートするか、外側ブロックと通信するか、或いはその両方のいずれかによって、トランザクションを完了するのに必要な状態の維持を担う。
【0026】
マイクロプロセッサは、いくつかのタイプのトランザクションに対して、いくつかの他のタイプのトランザクションより高い優先度を与える。一実施形態では、LLCにおける最高優先度のトランザクションは、L1dロードである。LLCが、新規のロード・リクエストを検出したとき、通常のキュー・プッシュに並行して、アービトレーション・ロジックに直接ロード・リクエスト信号をステージングし、それにより、ロードは、LLCがリクエストを検出し次第、アービトレートを開始することが可能になる。
【0027】
図3は、それぞれA、B、C、D、及びEに指定される複数の主要ステージ141〜145に分割されたタグパイプ140の一実施形態を示している。本明細書では「タグパイプarb」と呼ばれるキャッシュにアクセスするトランザクションは、タグパイプ140のステージを進む。Aステージ141中、トランザクションは、タグパイプ140にアービトレートする。Bステージ142中、タグは、アレイに送信される。Cステージ中、MESI情報と、タグがLLCにおいてヒットするか又はミスするかについての指示とがアレイから受信される。Dステージ中、アレイから受信した情報に照らして、どのようなアクションを取るべきかについての決定が行われる。Eステージ中、アクション決定(完了/再生、充填キューをプッシュするなど)は、リクエスト中のキューに戻ってステージングされる。
【0028】
一実施形態では、タグパイプ140はまた、それに続くステージを含むが、これらは、Dステージにおけるより古いリクエストからより新しいリクエストへのパスの転送を行う目的のためだけに存在する。したがって、図3の実施形態では、1つ又は複数のタイプの検出器150を使用してEステージ145を監視することは有用である。しかしながら、監視するために最適なステージ(複数可)は、例えば、より多いステージの場合の実施形態、又はより少ないステージの場合の実施形態において、タグパイプ設計によって異なることになる。したがって、図4では、「ステージN」149は、ハングの検出及び分析を可能にするために、arbについての十分な量の情報(特に、arbが他のキュー・プッシュを再生、完了、及び/又は要求しようとしているか)を収容したタグパイプ・ステージを象徴している。
【0029】
図4は、最終レベル・キャッシュ及びハング検出アーキテクチャ170の一実施形態のトップレベルの図を示すブロック図である。LLC及びハング検出アーキテクチャ170は、1つ又は複数のデータ・アレイ136と、1つ又は複数のタグ・アレイ132と、アービトレーション・ロジック172とを備える。リクエスト・キュー130及びデータパイプ160に結合されたアービトレーション・ロジック172は、データ・アレイ136へのアクセスをアービトレートする。タグパイプ140に結合されたアービトレーション・ロジック172は、Tag/MESIアレイ132に対するアクセスをアービトレートする。3つの異なるハング検出器、すなわち、ロジック・アナライザ200、パターン検出器300、及び条件付きパターン検出器400は、タグパイプ140のステージN149に結合されており、1つ又は複数のスターベーション、ライブロック、又はデッドロックの状態を検出する。リクエスト・キュー130に結合された分散型ハング検出器ロジック500は、ハングから回復するように複数の回復ルーチンを提供する。
【0030】
図5は、図4のロジック・アナライザ200の一実施形態を示している。ロジック・アナライザ200は、タグパイプ140のステージN149に接続されたarb読出しロジック202を備え、このarb読出しロジック202は、タグパイプarbのスナップショット220を読み出し、取り込む。構成ロジック208は、ユーザが、開始ポインタ212と終了ポインタ214との間の情報を読み出す及び/又は記憶するように、別法として、ローリング取込み216を実行すべきかどうかを示すように、及び特定のトランザクションを選択的に無視する218ように、ロジック・アナライザ200を選択的に構成することを可能にする。ロジック・アナライザ200の圧縮ロジック204は、arb読出しロジック202によって取り込まれたスナップショット220を取り出し、様々なタイプの再生状態を一緒に論理ORする。ストレージ・ロジック206は、圧縮されたスナップショットをマイクロプロセッサのプライベート・ランダム・アクセス・メモリ(PRAM)に記憶する。この統合された情報は、どのタグパイプarbがハングを含み、又はハングにつながるかを判定するために使用される。
【0031】
図6に示すように、それぞれのスナップショット220は、タグパイプarbについての関連情報を記憶する複数のビットを含む。トランザクション識別子222は、arbのキュー・インデックスを識別する。例えば、トランザクション識別子222は、0から15の間の数とすることができる。トランザクション・タイプ・フィールド224は、対応するタグパイプarbが、ロード、スヌープ、強制退去、又は他のarbタイプであるかを識別する。イベント・フィールド226は、タグパイプarbが完了したか、又は再生されたかを示す。割当てフィールド228は、arbについての他の有用な情報、例えば、対応するarbが割り当てられるセット及びウェイ、又はarbと関連しているレジスタ・バンクを識別する。これは、arbが割り当てられるセット及びウェイを判定する状態に起因し得るハングを識別するのに有用である。
【0032】
図7は、図4のパターン検出器300の一実施形態のブロック図である。パターン検出器300は、スナップショット取込みロジック301と、ストレージ・レジスタ316と、複数の構成可能な設定部322と、比較ロジック318とを備える。
【0033】
スナップショット取込みロジック301は、タグパイプ140のステージN149に接続されたarb読出しロジック302を備え、このarb読出しロジック302は、タグパイプarbのスナップショットを取り込む。スナップショット取込みロジック301はまた、ライン・デコーダ304を備え、このライン・デコーダ304は、タグパイプ140を進むarbのx桁トランザクション識別子222とトランザクション・タイプ224を、それらのトランザクション識別子とトランザクション・タイプの2ビットフィールド表示にデコードする。次いで、アキュムレータ306が、デコードされたトランザクション識別子とトランザクション・タイプを累積レジスタ314に累積する。
【0034】
例えば、トランザクション・タイプ224は、arb読出しロジック302によって回復されると、Xビット(例えば、4ビット)バイナリ・コードの形態で表示可能である。デコーダ342は、Xビット・トランザクション識別子をYビット(例えば、16ビット)フィールドにデコードし、ただし、2−1<Y≦2であり、それにより、Yビット・フィールドのそれぞれのビットは、異なる種類(又は類似した種類のカテゴリ)のタグパイプarbを表す。アキュムレータ306は、トランザクション識別子の直近に累積された値と共に、直近にデコードされたトランザクション識別子の論理ORのBoolean等価である関数によりトランザクション識別子を累積するので、ユーザが構成可能な期間中、タグパイプ140を進むあらゆる種類のタグパイプarbのビットマスクを累積レジスタ314に累積する。
【0035】
パターン検出器300はまた、特定のイベントをカウントする複数の演算アキュムレータ308を含む。例えば、1つの演算アキュムレータ308は、構成可能な期間中に完了するarbトランザクションの数をカウントする。別の演算アキュムレータ308は、その期間中に再生されるarbの数をカウントする。さらに別の演算アキュムレータ308は、その期間中に受けた再生タイプのビットマスクを累積する。
【0036】
図8は、累積レジスタ314の一実施形態の内容を示している。ビット0〜10を含んだフィールド341は、演算アキュムレータ310によってカウントされた再生の数を記録する。ビット11〜18を含んだフィールド343は、演算アキュムレータ308によってカウントされた完了の数を記録する。ビット19〜31を含んだフィールド345は、その期間中に検出された再生タイプを記録する。ビット32〜47を含んだフィールド347は、その期間中に受けたトランザクション識別子(例えば、キュー・インデックス)を記録する。ビット48〜63を含んだフィールド349は、アキュムレータ306から受信したデコード済みのarb状態を記録する。
【0037】
パターン検出器300は、パターン検出器300を動作させるために、ユーザが構成可能な設定部322を備える。これらの設定部は、例えば、クロック・サイクルの構成可能な数323、又はタグパイプ140を進む有効トランザクションの構成可能な数(図示せず)を含むことができる。これらの設定部はまた、カウントされた完了の数の閾値325、及びカウントされた再生の数の閾値327をそれぞれ含んで、ハングを信号伝達することができる。
【0038】
図9は、図6のパターン検出器300の動作を示している。ブロック350で、arb読出しロジック302が、ステージN149におけるarbのスナップショットを生成する。ブロック352で、パターン検出器300は、スナップショットをレジスタ314に累積する。ブロック354で、パターン検出器300は、ユーザが構成可能な期間が完了済みかどうかを確認する。未完了の場合、パターン検出器300は、スナップショットをレジスタ314に累積することを継続する。ユーザが構成可能な期間が完了した場合には、ブロック356で、パターン検出器300は、レジスタ314の累積されたビットを、記憶された履歴としてストレージ・レジスタ316のうちの1つに保存する。マイクロプロセッサはまた、レジスタ314をクリアし、その後に続く期間の新規ビットマスクを累積するようにレジスタ314を準備する。
【0039】
ブロック358、360、及び362で、パターン検出器300内の比較ロジック318は、1つ又は複数のあらかじめ定められた比較、及び/又は構成可能な比較を行う。例えば、パターン検出器300は、完了の数が、ユーザが構成可能な閾値225を下回るか(ブロック358)、再生の数が、ユーザが構成可能な設定部322において設定された再生閾値327に一致するか、又はこの再生閾値327を超えるか(ブロック360)を評価すること、及び/又は2つの直近に保存されたレジスタの再生データを比較して、2つのレジスタにおいて、カウントされた再生数が同じであるか、又はほとんど同じであるかを判定することができる(ブロック362)。パターン検出器300はまた、又は別法で、カウントされた再生数とカウントされた完了数との差異が閾値を超えるかどうかを評価することができる。ブロック364で、1つ又は複数のあらかじめ定められた状態及び/又は構成可能な状態が一致する場合には、ブロック366で、パターン検出器300は、ハングを信号伝達し、ひいては、1つ又は複数の回復又は取込みのルーチン320をトリガする(ブロック368)。
【0040】
図10は、図4の条件付きパターン検出器400の一実施形態のブロック図である。条件付きパターン検出器400は、図7のパターン検出器300より複雑で、構成可能な形態である。検出器400は、スナップショット取込みロジック401を備え、このスナップショット取込みロジック401は、図7のスナップショット取込みロジック301のように、arb読出しロジック402及びマスキング・ロジック404を有して、タグパイプarbのスナップショットを取り込む。検出器400は、複数の構成可能なトリガ・レジスタ・モジュール410を備える。それぞれのトリガ・レジスタ・モジュール410は、トランザクションを検出するために複数の構成可能なフィールドを有し、この構成可能なフィールドは、任意選択でトリガ状態にある別のトリガ・レジスタ・モジュール410に関して条件付けられた、指定の特性を有する。複数のトリガ・レジスタ・モジュール410は共に、arbのユーザ指定のパターンを検出するように、及びパターンが検出されたとき、L2取込み及び/又は回復応答432をトリガするように構成可能である。
【0041】
それぞれのトリガ・レジスタ・モジュール410は、3つの出力を有する。トリガ・レジスタ・モジュール410がトリガされたことを信号伝達する第1の出力422は、他のトリガ・レジスタ・モジュール410のそれぞれに供給される。第2の出力424は、L2取込みをトリガするように、つまり、タグパイプ140を通過するものすべての取込みを開始するように、下流ロジック420に信号伝達する。それぞれのトリガ・レジスタ・モジュール410のトリガL2取込み出力424は共に、ORブロック428によって示されるようにORされる。第3の出力426は、PPU割込みをトリガするように、下流ロジック430に信号伝達し、ひいては、それにより、1つ又は複数の回復ルーチン432が実行されるようになる。それぞれのトリガ・レジスタ・モジュール410のトリガPPU出力426もまた共に、ORブロック429によって示されるようにORされる。
【0042】
図11は、構成可能なトリガ・レジスタ・モジュール410の一実施形態の内容を示している。トリガ・レジスタ・モジュール410は、再生ベクトル413、arbタイプ414、トリガ依存ビットマップ416、及びタイムアウト値417を指定するためのフィールドを備える。レジスタ・モジュールが、指定されたタイムアウト期間を有する場合には、タイムアウト期間は、レジスタがトリガされた状態にあることをそのレジスタが示すとき、開始する。タイムアウト期間の期限切れ後、パターン検出器は、いずれの依存レジスタ・モジュールもディスエーブルにして、トリガされた状態に入らないようにする。
【0043】
トリガ・レジスタ・モジュール410はまた、下流ロジックをトリガしてPPU割込み又はL2取込みをトリガするようにトリガ・レジスタ・モジュール410をイネーブルにするために、それぞれ1ビットの長さのフィールド418及び419を備える。フィールド411は、トリガがイネーブルにされたかどうかを識別する。フィールド421は、レジスタは、一旦トリガすると、イネーブルの状態のままになるかどうかを指定する。構成可能なレジスタ・モジュール410は、より特殊化したフィールド、例えば、タグパイプ・セレクタ415をサポートすることができる。
【0044】
図12は、1つ又は複数の起こり得るスターベーション、ライブロック、又はデッドロックの状態を検出するための、マルチプロセッサ・マイクロプロセッサにおける分散型ハング・ロジック・アーキテクチャ500の一実施形態を示している。複数のキュー・エントリ512をそれぞれが収容した複数のキュー130(図2)は、キャッシュ・アクセシング・トランザクション、及びキャッシュをバイパスするトランザクション(例えば、キャッシュ不可能なロード)についての一時的トランザクション状態情報を収容する。複数の検出器520は、1つ又は複数の起こり得るスターベーション、ライブロック、又はデッドロックの状態について複数のクエリ・エントリ512を監視する。複数の回復ロジック・モジュール530は、マイクロプロセッサ内に分散される。検出器520は、起こり得るスターベーション、ライブロック、又はデッドロックの状態を検出したとき、その状態について、検出器520の最も近くの回復ロジック・モジュール530と通信する(例えば、「ImHung」信号)。一実施形態で有限状態マシンを構成するそれぞれの回復ロジック・モジュール530は、結合された検出器520が、起こり得るスターベーション、ライブロック、又はデッドロックの状態を識別したとき、1つ又は複数のローカル回復ルーチン535を実装するように構成されている。
【0045】
一実施形態では、ラストレベル・キャッシュ・タグパイプ140にアービトレーションをリクエストするそれぞれのキュー・エントリ512は、対応する検出器520と関連付けられる。また一実施形態では、検出器520は、飽和カウンタを備える。構成ロジック550が、カウントすべき1つ又は複数の状態555を指定するように設けられる。
【0046】
一実施形態では、分散型ハング・ロジック・アーキテクチャ500は、関連キュー・エントリ512が新規に割り当てられたとき、それぞれの飽和カウンタをリセットするように、及び関連キュー・エントリ512が再生されるときはいつでも、飽和カウンタをインクリメントするように構成されている。第2の実施形態では、それぞれの飽和カウンタは、関連キュー・エントリが、アービトレーションをリクエストするが、アービトレーションが認められないときはいつでも、インクリメントする。第3の実施形態では、それぞれの飽和カウンタは、関連キュー・エントリがアービトレーションをリクエストする前にいくつかの外部刺激を待っているときはいつでも、インクリメントする。第4の実施形態では、それぞれの飽和カウンタは、構成可能な閾値で飽和する。
【0047】
分散型ハング・ロジック・アーキテクチャ500は、一実施形態でやはり有限状態マシンである中央回復ロジック540をさらに備える。回復ロジック・モジュール530は、起こり得るスターベーション、ライブロック、又はデッドロックの状態について、検出器520によって通知されたとき、回復ロジック・モジュール530は、中央回復ロジック540と通信する。中央回復ロジック540は、複数の回復ロジック・モジュール530のそれぞれに、それら自体のローカル回復ルーチンのうちの1つ又は複数を行うように、応答可能なように命令する。
【0048】
回復ルーチン535は、検出されたハングを解決しようと試みるために、関連キュー・エントリからのアービトレーション・リクエストを操作するように構成されている。図13は、回復ロジック540に提供される回復ルーチン560のセットの一実施形態のブロック図である。
【0049】
回復ルーチン562のうちの1つは、アービトレーション・リクエストを系統的にブロックすることによって、タグ・パイプラインにバブルを挿入することを含む。第2の回復ルーチン564は、リクエスト中のキュー・エントリのあらかじめ定められたセットを、それらのリクエストを資格解除することによってブロックすることを含む。第3の回復ルーチン566は、関連するキュー・エントリにそれらのアービトレーション・リクエストを資格解除させることによって、起こり得るスターベーション、ライブロック、又はデッドロックの状態をアサートしていない検出器に関連するすべてのリクエスタをブロックすることを含む。第4の回復ルーチン568は、ラウンドロビン・リクエスト資格解除を含み、ここで、個々のキュー又はキュー・エントリからのアービトレーションのリクエストは、連続的に進行することのみ許容される。一実施形態では、回復ロジックは、1つの回復ルーチンを実行させ、ハング状態について再確認してから、次の回復ルーチンを実行させる。しかしながら、特許請求の範囲でそのように指定していない場合、本発明は、これらの回復ルーチン、回復ルーチンの何らかの特定のセット、又は回復ルーチンの何らかの特定の順序付けに限定されない。
【0050】
本発明の様々な実施形態について本明細書で説明してきたが、それら実施形態は、限定ではなく、例として提示されていることを理解されたい。形態及び細部の様々な変更が本発明の範囲から逸脱することなく行われ得ることは、関連コンピュータ技術の当業者には明らかになろう。ソフトウェアによって、例えば、本明細書に記載の装置並びに方法の機能、製作、モデリング、シミュレーション、記述、及び/又は検査をイネーブルにすることができる。これは、汎用プログラミング言語(例えば、C、C++)、VerilogのHDL、及びVHDLなどを含むハードウェア記述言語(HDL)、又は他の利用可能なプログラムの使用を通じて達成可能である。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、又は光ディスク(例えば、CD−ROM、DVD−ROMなど)、ネットワーク、有線、無線、又は他の通信媒体などの任意の既知のコンピュータが使用可能な媒体に配置可能である。本明細書に記載の装置及び方法の諸実施形態は、(例えば、HDLで実現され、又は指定される)マイクロプロセッサ・コアなど、半導体知的財産コアに含めることができ、集積回路の生産におけるハードウェアに変換することができる。加えて、本明細書に記載の装置及び方法は、ハードウェアとソフトウェアとの組合せとして実現可能である。したがって、本発明は、本明細書に記載の例示的な諸実施形態のいずれによっても限定すべきではなく、添付の特許請求の範囲、及びそれらの均等物に従ってのみ定義すべきである。具体的には、本発明は、汎用コンピュータにおいて使用可能なマイクロプロセッサ・デバイス内で実装可能である。最後に、当業者は、自分らが、本発明の同一の目的を遂行するように他の構造を設計し、又は修正するための礎として、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく、本開示の概念及び具体的な諸実施形態を容易に使用することができることを理解すべきである。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13