DVMオペレーション
ACEと同様に、CHIはDVM(Distributed Virtual Memory)オペレーションをサポートする。 DVM Requestは、仮想メモリシステムのメンテナンスをサポートするためのオペレーションを渡すものである。
DVMオペレーション・トランザクション
CHIはDVMオペレーションを使用して仮想メモリを管理する。
DVMオペレーションは以下のトランザクションを実行する:
- トランザクション・ルックアサイド・バッファ(TLB)の無効化
- 命令キャッシュの無効化
- 分岐予測無効化
- DVMの同期
CHIでは、ACEとは異なり、すべてのDVMオペレーションは2つのパートに分けてMN(Memory Node)に送信される。
- OpcodeフィールドがDVMOpに設定されたRequestとしてMNに送られる。Request・フリットはアドレス・フィールドを使用して操作の属性をエンコードする。
- Request・ノードがMNからDBID応答を受信した後にのみ、 データ・フリットとして送られる。DVMオペレーションの対象となるアドレスを伝送する。
MNがDVMオペレーションの両方のパートを受信すると、MNはコヒーレンシ・ドメインに参加しているRequest・ノードに対してDVMスヌープを生成する。
MNはDVM Snoopをノード・スヌープ・チャネルで2つのパートに分けて送信する。同じTxnIDとオペコードSnpDVMOpを使用し、以下のパラメータを使用する必要がある:
- 最初のオペレーションは、Addressフィールドを使用して、操作属性とターゲットアドレスの上位アドレスビットをエンコードする。
- 2番目のオペレーションは、Addressフィールドを使ってアドレスの残りのビットを送信する。
2つのパートを区別するために、CHIはアドレスフィールドのビット[3]を、第1パートを示す0と第2パートを示す1に設定する必要がある。
DVMスヌープの第2オペレーションは、第1オペレーションよりも前にRNに到着することができる。
DVMオペレーションのタイプ
CHIでは、2種類のDVMオペレーションを定義している: 非同期DVM(DVM Non-Sync)と同期DVM(DVM Sync)である。 DVMオペレーションの属性によって、RNがDVMスヌープに応答する前に操作が完了するまで待機しなければならないかどうかが決まる。
同期DVMは同期のみを実行し、他のオペレーションは実行しない。
非同期DVMは、TLB、命令キャッシュ、分岐予測器の無効化操作である。 非同期DVMでは、さらにDVMオペレーションを発行する前に、DVMオペレーションの実行を終了する必要はない。 このため、複数の非同期DVMを発行することができる。
次の例では、RN-Fは複数のブランチ予測または命令キャッシュ無効を発行でき、受信側のRN-FまたはRN-Dは操作を直ちに実行する必要はない:
- RN-FまたはRN-Dは、DVM非同期を示すDVMスヌープを受信する。
- RN-FまたはRN-DはMNにスヌープ応答を発行する。 Snoop応答はDVMメッセージの受信を認めるが、Request NodeがDVMオペレーションを実行したことは示さない。
- MNは、DVMオペレーションが受け入れられたことを示すために、開始したRN-Fに完了 メッセージを送信する。
未完了のDVM Requestsがすべて実行されたことを確認するために、以下の手順が行われる:
- RN-Fは、DVM Syncとも呼ばれる同期DVMオペレーションをMNに発行する。 DVM同期によって完了する必要のあるDVM Requestは、DVM同期を発行する前に完了応答を受信する必要がある。
- MNはスヌープチャネル上のすべてのRN-FとRN-DにDVM Syncを発行する。
- 各ターゲットRNは、未処理のDVMオペレーションがすべて実行されたことを確認する。
- 各RNはMNにスヌープ応答を1回発行し、すべてのオペレーションが実行されたことを示す。
- MNは、同期DVMオペレーションを最初に発行したRN-Fに、DVM同期の完了応答を送信する。
CHI DVM SyncはACEのものと似ている。 どちらも、以前に発行されたDVMオペレーションが完了したかどうかをチェックする。 違いは、CHIがDVM完了メッセージを必要としないことである。
DVMオペレーションフロー
このセクションでは、TLB無効化DVM Requestに続く同期DVMオペレーションについて説明し、以下のイベントを示す:
- DVM Requestの様々な設定
- MNが生成するスヌープ
- DVM同期が、前のDVMオペレーションが実行されたことを保証する方法
イベントの順序は以下のとおりである:
- Request Node0はTLB無効化DVM RequestをMNに発行する。
- MNはDVM Requestの第2部を受け入れることができることを示すDBIDRespメッセー ジで応答する。
- Request Node 0はMNにWrite Dataメッセージを発行する。 これはDVMメッセージの2番目のリクエストである。
- MNは両方のDVM RequestをRequest Node 1に発行する。
- Request Node 1はMNにSnoop Responseを送信することでDVM Requestを確認する。
- MNはSnoop Responseを受信する。
- MNは完了メッセージをRequest Node 0に発行する。
- Request Node 0はMNに対してDVM Sync操作を発行する。
- MNはDBIDRespメッセージでRequest Node 0に応答する。
- Request Node 0 は MN に Write Data メッセージを送信する。 これはDVM同期メッセージの2番目のメッセージである。
- MNはRequest Node1にDVM Sync Snoopsを発行する。
- Request Node1は未処理のDVMオペレーションをすべて完了する。
- Request Node 1はMNにSnoop Responseを送信し、すべての操作を完了したことを示す。
- MNはRequest Node0に完了メッセージを発行する。 これはDVM同期要求に対する応答である。