第 8 章 DVM 操作
本章描述了协议用于管理虚拟内存的分布式虚拟内存 (DVM) 操作。它包含以下部分:
• 第 8-258 页的 8.1 DVM 事务流。
• 第 8-268 页的 8.2 DVM 操作类型。
• 第 8-271 页的 8.3 DVM 操作。
8.1 DVM 事务流
所有 DVM 事务都有类似的要求,并映射到一个单一流程。以下部分展示了非同步和同步类型的 DVM 事务要求:
• 非同步类型 DVM 事务流。
• 第 8-260 页的 同步类型 DVM 事务流。
• 第 8-261 页的 流量控制。
• 第 8-263 页的 DVMOp 字段值限制。
• 第 8-267 页的 字段值要求。
8.1.1 非同步类型 DVM 事务流
图 8-1 展示了非同步类型 DVM 事务中的步骤。

图 8-1 非同步类型 DVM 事务流
图 8-1 描述: RN-F0, RN-F1, RN-F2 和 MN 之间的交互流程。 1. RN-F0 发送 DVMOp(Non-sync) 给 MN。 2. MN 回复 DBIDResp。 3. RN-F0 发送 NCBWrData (非回写数据)。 4. MN 广播 SnpDVMOp_P1 和 SnpDVMOp_P2 给 RN-F1 和 RN-F2。 5. RN-F1 和 RN-F2 完成核内监听后,分别回复 SnpResp_I 给 MN。 6. MN 在收到所有 SnpResp 后,发送 Comp 给 RN-F0。 注释: * NCBWrData = NonCopyBackWrData * 只有在所有之前的 DVMOp 事务都收到 Comp 响应后,才能发送 DVMOp(Sync)。
图 8-1 所示的必要步骤是:
-
RN-F0 使用适用于 DVMOp 类型的写语义,向 MN 发送 DVMOp(非同步)。
-
MN 接受 DVMOp(非同步) 请求并提供 DBIDResp 响应。
-
RN-F0 在数据通道上发送一个 8 字节的数据包。
-
MN 将 SnpDVMOp 监听请求广播给系统中所有的 RN-F 和 RN-D 节点。SnpDVMOp 在监听通道上发送,需要两个监听请求。SnpDVMOp 的两个部分分别用后缀 _P1 和 _P2 标记。
注意
• 消息的两个部分必须携带相同的事务 ID (TxnID)。
• RN 必须拥有可用的资源来接受 SnpDVMOp。参见第 8-261 页的 流量控制。
-
完成所需操作后,每个 SnpDVMOp 的接收者向 MN 发送一个 SnpResp 响应。
注意
发送 SnpResp 意味着目标 RN 已将 SnpDVMOp 转发给所需的 RN 结构,并已释放接受另一个 DVM 操作所需的资源。这并不意味着请求的 DVM 操作已完成。参见第 8-260 页的 同步类型 DVM 事务流。
-
在收到所有 SnpResp 响应后,MN 向请求节点发送 Comp 响应。
非同步 DVMOp 的 DVM 早期完成
本规范允许互连中的杂项节点 (MN) 无需等待完成对 RN 的所需监听,即可为非同步 DVMOp 发送 Comp。这样的 MN 必须负责将此非同步 DVMOp 与稍后从同一源接收到的任何同步 DVMOp 进行排序。如果 MN 无法提供这样的排序保证,则它必须等待监听完成后再为非同步 DVMOp 发送 Comp 响应。
允许发送非同步 DVMOp 早期完成的 MN,可以有机会将 Comp 和 DBIDResp 响应合并为一个 CompDBIDResp 响应。
注意
• 在 CHI D 版之前,MN 不允许在完成该请求生成的所有监听之前,为非同步 DVMOp 发送 Comp。
• 为非同步 DVMOp 提早发送 Comp 响应减少了 DVMOp 完成的往返延迟。这使得能够从单个源流水线处理更多的 DVMOp 事务。
• 这种早期完成还使得同步 DVMOp 能够等待来自同一 RN 的所有先前发送的相关 DVMOp 事务完成。
• MN 在向请求者发送针对同步 DVMOp 的 Comp 之前,仍然必须等待接收到该同步 DVMOp 的监听响应。
8.1.2 同步类型 DVM 事务流
图 8-2 展示了同步类型 DVM 事务中的流程。

图 8-2 同步类型 DVM 事务流
图 8-2 描述: RN-F0, RN-F1 和 MN 之间的交互流程。 1. RN-F0 发送 DVMOp(Sync) 给 MN。 2. MN 回复 DBIDResp。 3. RN-F0 发送 NCBWrData。 4. MN 发送 SnpDVMOp_P1 和 SnpDVMOp_P2 给 RN-F1。 5. RN-F1 完成核内所有 DVM 相关操作后,发送 SnpResp_I 给 MN。 6. MN 发送 Comp 给 RN-F0。 注释: * NCBWrData = NonCopyBackWrData * 只有在核内所有 DVM 相关操作完成后,才发送 SnpResp。
图 8-2 所示的必要步骤是:
-
RN-F0 向 MN 发送 DVMOp(同步)。
注意
在 RN 可以发送 DVMOp(同步) 之前,所有需要由该 DVMOp(同步) 保证完成的先前 DVMOp 请求必须已经收到 Comp 响应。
-
MN 接受 DVMOp(同步) 请求并向请求者发送 DBIDResp 响应。
-
RN-F0 在数据通道上发送一个数据包,数据大小为 8 字节。
-
MN 向 RN-F1 发送 SnpDVMOp。SnpDVMOp 在监听通道上发送,需要两个监听请求。SnpDVMOp 的两个部分分别用后缀 _P1 和 _P2 标记。
-
完成 DVM 同步操作后,RN-F1 向 MN 发送一个 SnpResp 响应。
注意
发送 SnpResp 意味着所有 DVM 相关操作已在 RN 结构中完成,并且目标 RN 已释放接受另一个 SnpDVMOp 所需的资源。
-
收到 SnpResp 后,MN 向 RN-F0 发送 Comp 响应。
8.1.3 流量控制
DVMOp 请求流量控制:
• DVMOp 可能会从 MN 收到 RetryAck 响应。
• 收到 RetryAck 响应的 DVMOp 必须等待从 MN 收到具有适当 PCrdType 的 PCrdGrant 响应。
• 在 RN 可以发送 DVMOp(同步) 之前,所有需要由该 DVMOp(同步) 保证完成的先前 DVMOp 请求必须已经收到 Comp 响应。
• 互连必须保证 DVMOp(非同步) 的前进,这意味着 MN 中应至少保留一个用于 DVMOp(非同步) 的跟踪条目。
• 如果 DVMOp(同步) 不需要保证 DMVOp(非同步) 的完成,则允许来自同一 RN 的 DVMOp(非同步) 和 DVMOp(同步) 重叠。
SnpDVMOp 流量控制:
• 每个 SnpDVMOp 事务需要两个 SnpDVMOp 请求包。
• 对应于单个事务的两个 SnpDVMOp 请求包必须使用相同的 TxnID。
• 对应于单个事务的两个 SnpDVMOp 请求包可以按任意顺序发送或接收。
• 多个 SnpDVMOp(非同步) 事务可以从一个 MN 发出。
• 从一个 MN 到一个 RN 只能有一个未完成的 SnpDVMOp(同步) 事务。
• 为防止由于使用监听通道的两部分 SnpDVMOp 请求而导致的死锁,只有在接收 RN 已预先分配资源以接受 SnpDVMOp 事务的两个部分时,才能发送 SnpDVMOp 事务。
• RN 只有在收到对应于该 SnpDVMOp 事务的两个 SnpDVMOp 请求包后,才能对该事务提供响应。
• RN 只有在能够从 MN 接受另一个 SnpDVMOp 时,才能对当前的 SnpDVMOp 提供响应。
• 系统中的每个 RN-F 和 RN-D 指定它可以同时接受的 SnpDVMOp 事务数量。
• 系统中的每个 RN-F 和 RN-D 必须能够至少接受一个 SnpDVMOp(非同步) 事务以及一个 SnpDVMOp(同步) 事务。
• 必须同时接受的最小 SnpDVMOp 事务数为 2。对于未指定数量的 RN,这是默认数量。
8.1.4 DVMOp 字段值限制
表 8-1 显示了 DVMOp 事务期间请求、数据、监听和响应消息的字段值限制。
表 8-1 DVMOp 事务字段值限制
| 消息类型 | 字段 | 限制 |
|---|---|---|
| 请求 | QoS | 无。可以是任何值。 |
| TgtID | 预期为 MN 的节点 ID。可由互连重新映射到正确的 TgtID。 | |
| SrcID | 发起 DVM 消息的请求者的源 ID。 | |
| TxnID | 由请求者生成的 ID。必须遵循与任何其他事务相同的规则。 | |
| ReturnNID | 必须为 0b0000000... | |
| StashNID | ||
| StashNIDValid | 必须为零。 | |
| Endian | ||
| Deep | ||
| ReturnTxnID | 必须为 0b0000000000。 | |
| StashLPIDValid | ||
| StashLPID | ||
| Opcode | 必须为 DVMOp。 | |
| Size | 必须为 8 字节。 | |
| Addr | 参见第 8-271 页的 DVM 操作。 | |
| NS | 必须为零。 | |
| LikelyShared | 必须为零。 | |
| AllowRetry | 可以是任何值,因为 DVMOp 可以被给予 Retry。 | |
| Order | 必须为 0b00。 | |
| PCrdType | 如果 AllowRetry 有效,必须为 0b0000,否则为信用类型值。 | |
| Allocate | 必须为零。 | |
| Cacheable | 必须为零。 | |
| Device | 必须为零。 | |
| EWA | 必须为零。 | |
| SnpAttr | 必须为零。 | |
| LPID | 无。不关心。 | |
| PGroupID | ||
| RequestExcl | 必须为零。 | |
| SnoopMe | ||
| ExpCompAck | 必须为零。 | |
| TraceTag | 无。 | |
| MPAM | 必须为 0b00000000000。 | |
| RSVDC | 无。不关心。 | |
| 数据 | QoS | 无。可以是任何值。 |
| TgtID | 必须与 DBIDResp 响应中返回的 SrcID 相同。 | |
| SrcID | 必须是原始请求者的 ID。 | |
| TxnID | 必须与 DBIDResp 响应的 DBID 相同。 | |
| HomeNID | 必须为 0b0000000... | |
| Opcode | 必须为 NonCopyBackWriteData。 | |
| RespErr | 必须为 0b00 或 0b10。 | |
| Resp | 必须为 0b000。 | |
| FwdState | 必须为 0b0000。 | |
| DataPull | ||
| DataSource | ||
| CBusy | 必须为 0b000。 | |
| DBID | 无。不关心。 | |
| CCID | 必须为 0b00。 | |
| DataID | 必须为 0b00。 | |
| TraceTag | 无。 | |
| BE | 只能有效 BE[7:0]。 | |
| Data | 对于 Data[63:0],未使用的位必须为零,Data[n:64] = 不关心。 | |
| DataCheck | 必须与数据字段的值相匹配。 | |
| Poison | 无。可以取任何值。 | |
| SnpDVMOp | QoS | 无。可以是任何值。 |
| SrcID | 必须是 MN 的节点 ID。 | |
| TxnID | 由 MN 生成的 ID。 | |
| FwdNID | 必须为 0b0000000... | |
| VMIDExt | 必须用于 VMID 扩展。 | |
| Opcode | 必须为 SnpDVMOp。 | |
| Addr | 参见第 8-271 页的 DVM 操作。 | |
| NS | 必须为零。 | |
| DoNotGoToSD | 必须为零。 | |
| DoNotDataPull | ||
| RetToSrc | 必须为零。 | |
| TraceTag | 无。 | |
| MPAM | 必须为 0b00000000000。 | |
| 响应 RetryAck | QoS | 无。可以是任何值。 |
| TgtID | 必须是原始请求者的 ID。 | |
| SrcID | 必须是处理 DVM 的 MN 的 ID。 | |
| TxnID | 必须与原始请求的 TxnID 匹配。 | |
| Opcode | 必须为 RetryAck。 | |
| RespErr | 必须为 0b00。 | |
| Resp | 必须为 0b000。 | |
| FwdState | 必须为 0b000。 | |
| DataPull | ||
| CBusy | 应由完成者填充。 | |
| DBID | 无。不关心。 | |
| PCrdType | 无。可以是任何值。 | |
| TraceTag | 无。 | |
| 响应 DBIDResp | QoS | 无。可以是任何值。 |
| TgtID | 必须是原始请求者的 ID。 | |
| SrcID | 必须是处理 DVM 的 MN 的 ID。 | |
| TxnID | 必须与原始请求的 TxnID 匹配。 | |
| Opcode | 必须为 DBIDResp。 | |
| RespErr | 必须为 0b00。 | |
| Resp | 必须为 0b000。 | |
| FwdState | 必须为 0b000。 | |
| DataPull | ||
| CBusy | 应由完成者填充。 | |
| DBID | 由处理 DVMOp 的 MN 生成。 | |
| PCrdType | 必须为 0b0000。 | |
| TraceTag | 无。 | |
| 响应 SnpResp | QoS | 无。可以是任何值。 |
| TgtID | 必须是处理 DVMOp 的 MN 的 ID。 | |
| SrcID | 必须是响应监听的节点的 ID。 | |
| TxnID | 必须与 SnpDVMOp 监听请求的 TxnID 匹配。 | |
| Opcode | 必须为 SnpResp。 | |
| RespErr | 必须为 0b00 或 0b11。 | |
| Resp | 必须为 0b000。 | |
| FwdState | 必须为 0b000。 | |
| DataPull | ||
| CBusy | 应由完成者填充。 | |
| DBID | 无。不关心。 | |
| TraceTag | 无。 | |
| PCrdType | 必须为 0b0000。 | |
| 响应 Comp | QoS | 无。可以是任何值。 |
| TgtID | 必须是原始请求者的 ID。 | |
| SrcID | 必须是处理 DVM 的 MN 的 ID。 | |
| TxnID | 必须与原始请求的 TxnID 匹配。 | |
| Opcode | 必须为 Comp。 | |
| RespErr | 必须为 0b00、0b10 或 0b11。 | |
| Resp | 必须为 0b000。 | |
| FwdState | 必须为 0b000。 | |
| DataPull | ||
| CBusy | 应由完成者填充。 | |
| DBID | 由处理 DVM 的 MN 生成。 | |
| PCrdType | 必须为 0b0000。 | |
| TraceTag | 无。 |
8.1.5 字段值要求
对应于单个 DVMOp 的两个 SnpDVMOp 请求包必须在以下字段中具有相同的值:
• TxnID
• Opcode
• SrcID
• TgtID
8.2 DVM 操作类型
支持以下 DVM 操作:
• TLB 无效化。
• 分支预测器无效化。
• 指令缓存无效化:
--- 物理地址无效化。
--- 虚拟地址无效化。
• 同步。
8.2.1 DVMOp 有效载荷
从 RN 到 MN 的 DVM 操作的有效载荷分布在:
• RN 发出的 DVM 请求中的地址字段。
• NonCopyBackWrData 数据包中的低 8 字节写数据。
从 MN 到 RN 的 DVM 操作的有效载荷通过地址字段分布在两个 SnpDVMOp 请求包中。
有效载荷中的各个字段及其编码如表 8-2 所示。
表 8-2 DVMOp 字段和编码
| 字段 | 位数 | 功能 |
|---|---|---|
| VA Valid | 1 | 0b1 表示指定的地址有效 |
| VMID Valid | 1 | 0b1 表示虚拟机标识符 (VMID) 或虚拟索引 (VI) 有效 |
| ASID Valid | 1 | 0b1 表示地址空间标识符 (ASID) 或 VI 有效 |
| Security | 2 | 指示事务应用于: 0b00 安全和非安全; 0b01 保留; 0b10 安全; 0b11 非安全 |
| Exception Level | 2 | 指示事务应用于: 0b00 虚拟机监视器和所有客户机操作系统; 0b01 EL3; 0b10 客户机操作系统; 0b11 虚拟机监视器 |
| DVMOp type | 3 | 指示 DVM 操作类型为: 0b000 TLB 无效化; 0b001 分支预测器无效化; 0b010 物理指令缓存无效化; 0b011 虚拟指令缓存无效化; 0b100 同步; 0b101-0b111 保留 |
| VMID | 8 | 虚拟机 ID VMID[7:0] 或虚拟索引 VA[27:20] |
| ASID | 16 | 地址空间 ID 或虚拟索引 VA[19:12] a, b |
| S2-S1 Staged Invalidation | 2 | 指示阶段 2 或阶段 1 无效化: 0b00 • DVMv7: 任何事务。 • DVMv8: 阶段 1 和阶段 2 无效化。 0b01 仅阶段 1 无效化。 0b10 仅阶段 2 无效化。 0b11 保留。 |
| Leaf Entry Invalidation | 1 | 0b1 表示仅需要叶级转换无效化 |
| VA 或 PA | 49 到 53 | 虚拟地址 |
| 44 到 52 | 物理地址 | |
| VMIDExt c | 8 | 虚拟机 ID VMID[15:8] |
| a. DVMv8 仅。 | ||
| b. 当用作虚拟索引时,ASID 的高 8 位为不关心。 | ||
| c. DVMv8 仅。 |
8.2.2 DVMOp 和 SnpDVMOp 数据包
表 8-3 展示了使用 8 字节写语义从 RN 发出的 DVMOp 请求中有效载荷的分布,以及从 MN 发出的 SnpDVMOp 请求中有效载荷的分布。
在 DVMOp 中,请求中的地址字段和 8 字节写数据的组合传输完整的有效载荷。Addr[3] 在请求中不使用,必须设置为零。
在两个 SnpDVMOp 请求中,两个地址字段的组合传输完整的有效载荷。Addr[3] 在 SnpDVMOp 请求中用于指示正在传输有效载荷的哪一部分。
最大 PA (MPA) 和最大 VA (MVA) 地址位的有效组合为:
• MPA = 44 : MVA = 49。
• MPA = 45 : MVA = 51。
• MPA = 46 到 52 : MVA = 53。
注意
在表 8-3 中,给出的数字显示了哪个地址或数据位被 DVMOp 字段替换。例如,VA Valid 字段被放置在 Addr[4] 通常占据的相同位置。在请求包中,这将是 Addr 字段的第 5 位位置,但在监听包中,它将是第 2 位位置,因为监听包不包含三个最低有效地址位。
此外,PA[6] 被放置在写数据包中 Data[4] 通常占据的相同位置,以及监听包中 Addr[4] 通常占据的相同位置。PA[6] 在第 2 部分监听包中提供,而 VA Valid 在第 1 部分监听包中提供。
表 8-3 使用 49 位 VA 和 44 位 PA 的 DVMOp 和 SnpDVMOp 请求有效载荷
| 字段 | 位数 | 请求 | 数据 | 监听 | 注释 |
|--------------------------------|---------|-----------|---------------|-----------|---------------|---------------------------------------------|
| | | Addr | Data | Addr | |
| | | | | 第 1 部分 | 第 2 部分 |
| Part Num | 1 | [3] | - | [3] | [3] | 对于请求和监听第 1 部分必须为 0b0。对于监听第 2 部分必须为 0b1。 |
| VA Valid | 1 | [4] | - | [4] | - | - |
| VMID Valid | 1 | [5] | - | [5] | - | - |
| ASID Valid | 1 | [6] | - | [6] | - | - |
| Security | 2 | [8:7] | - | [8:7] | - | - |
| Exception Level | 2 | [10:9] | - | [10:9] | - | - |
| DVMOp type | 3 | [13:11] | - | [13:11] | - | - |
| VMID[7:0] | 8 | [21:14] | - | [21:14] | - | 对于 VMID[15:8],见下文。 |
| ASID | 16 | [37:22] | - | [37:22] | - | - |
| S2-S1 Staged Invalidation | 2 | [39:38] | - | [39:38] | - | - |
| Leaf Entry Invalidation | 1 | [40] | - | [40] | - | - |
| PA[(MPA-1):6] | (MPA-6) | - | [(MPA-3):4] | - | [(MPA-3):4] | - |
| VA 位,当 REQ Addr 宽度 = 44 位 | | | | | | 使用 VA 或 PA,不能同时使用。 |
| VA[45:6] | 40 | [43:4] | - | [43:4] | - | |
| VA[48:46] | 3 | [46:44] | - | [46:44] | - | |
| 附加 VA 位,当 REQ Addr = 45 位 | | | | | | 使用 VA 或 PA,不能同时使用。 |
| VA[49] | 1 | [47] | - | [44] | - | |
| VA[50] | 1 | [48] | - | [44] | - | |
| 附加 VA 位,当 REQ Addr = 46 到 52 位 | | | | | | 使用 VA 或 PA,不能同时使用。 |
| VA[51] | 1 | [49] | - | [45] | - | |
| VA[52] | 1 | [50] | - | [45] | - | |
| VMID[15:8] | 8 | - | [63:56] | VMIDExt | - | VMIDExt 是 Addr 字段之外的单独字段。参见第 8-268 页的表 8-2。 |
8.3 DVM 操作
本节描述支持的 DVM 操作:
• 第 8-272 页的 TLB 无效化。
• 第 8-274 页的 分支预测器无效化。
• 第 8-275 页的 物理指令缓存无效化。
• 第 8-276 页的 虚拟指令缓存无效化。
• 第 8-277 页的 同步。
表 8-4 显示了所有支持的 DVM 操作中 Part Num 字段的值。
表 8-4 Part Num 字段值
| 地址位 | 字段 | 请求 | 监听 | 状态 |
|-------|----------|-----|--------|--------|---------|
| | | | 第 1 部分 | 第 2 部分 |
| [3] | Part Num | 0b0 | 0b0 | 0b1 | 在请求中不使用 |
8.3.1 TLB 无效化
表 8-5 显示了支持的 TLB 无效化操作。
表 8-5 TLB 无效化操作
| Addr | 操作 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| [13:11] DVMOp 类型 | [10:9] 异常级别 | [8:7] 安全 | [6] ASID 有效 | [5] VMID 有效 | [40] LEAF | [39:38] S2-S1 | [4] VA 有效 | ||
| 0b000 TLBI | 0b10 所有 Guest OS | 0b10 安全 | 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b0 忽略 | 安全 TLB 全部无效化 | |
| 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b1 匹配 | 安全 TLB 按 VA 无效化 | ||||
| 0b0 忽略 | 0b0 忽略 | 0b1 Leaf | 0b00 a | 0b1 匹配 | 安全 TLB 按 VA 无效化 (仅叶条目) | ||||
| 0b1 匹配 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b0 忽略 | 安全 TLB 按 ASID 无效化 | ||||
| 0b1 匹配 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b1 匹配 | 安全 TLB 按 ASID 和 VA 无效化 | ||||
| 0b1 匹配 | 0b0 忽略 | 0b1 Leaf | 0b00 a | 0b1 匹配 | 安全 TLB 按 ASID 和 VA 无效化 (仅叶条目) | ||||
| 0b10 所有 Guest OS | 0b11 非安全 | 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b0 忽略 | 所有 Guest OS TLB 全部无效化 | ||
| 0b0 忽略 | 0b1 匹配 | 0b0 忽略 | 0b01 S1 | 0b0 忽略 | Guest OS TLB 全部无效化 (仅阶段 1 无效化) | ||||
| 0b0 忽略 | 0b1 匹配 | 0b0 忽略 | 0b00 a | 0b0 忽略 | Guest OS TLB 全部无效化 (ARMv7 必须执行阶段 1 和 2 无效化) | ||||
| 0b0 忽略 | 0b1 匹配 | 0b0 忽略 | 0b00 a | 0b1 匹配 | Guest OS TLB 按 VA 无效化 | ||||
| 0b0 忽略 | 0b1 匹配 | 0b1 Leaf | 0b00 a | 0b1 匹配 | Guest OS TLB 按 VA 无效化 (仅叶条目) | ||||
| 0b1 匹配 | 0b1 匹配 | 0b0 忽略 | 0b00 a | 0b0 忽略 | Guest OS TLB 按 ASID 无效化 | ||||
| 0b1 匹配 | 0b1 匹配 | 0b0 忽略 | 0b00 a | 0b1 匹配 | Guest OS TLB 按 ASID 和 VA 无效化 | ||||
| 0b1 匹配 | 0b1 匹配 | 0b1 Leaf | 0b00 a | 0b1 匹配 | Guest OS TLB 按 ASID 和 VA 无效化 (仅叶条目) | ||||
| 0b0 忽略 | 0b1 匹配 | 0b0 忽略 | 0b10 S2 | 0b1 IPA b | Guest OS TLB 按 IPA 无效化 | ||||
| 0b0 忽略 | 0b1 匹配 | 0b1 Leaf | 0b10 S2 | 0b1 IPA b | Guest OS TLB 按 IPA 无效化 (仅叶条目) | ||||
| 0b11 虚拟机监视器 | 0b11 非安全 | 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b0 忽略 | 虚拟机监视器 TLB 全部无效化 | ||
| 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b1 匹配 | 虚拟机监视器 TLB 按 VA 无效化 | ||||
| 0b0 忽略 | 0b0 忽略 | 0b1 Leaf | 0b00 a | 0b1 匹配 | 虚拟机监视器 TLB 按 VA 无效化 (仅叶条目) | ||||
| 0b1 匹配 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b0 忽略 | 虚拟机监视器 TLB 按 ASID 无效化 | ||||
| 0b1 匹配 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b1 匹配 | 虚拟机监视器 TLB 按 ASID 和 VA 无效化 | ||||
| 0b1 匹配 | 0b0 忽略 | 0b1 Leaf | 0b00 a | 0b1 匹配 | 虚拟机监视器 TLB 按 ASID 和 VA 无效化 (仅叶条目) | ||||
| 0b01 EL3 | 0b10 安全 | 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b1 匹配 | EL3 TLB 按 VA 无效化 | ||
| 0b0 忽略 | 0b0 忽略 | 0b1 Leaf | 0b00 a | 0b1 匹配 | EL3 TLB 按 VA 无效化 (仅叶条目) | ||||
| 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 0b00 a | 0b0 忽略 | EL3 TLB 全部无效化 | ||||
| a. 所有 DVMv7 事务必须使用 0b00。 | |||||||||
| b. IPA 是中间物理地址。IPA 使用与虚拟地址 (VA) 相同的格式发送。 |
8.3.2 分支预测器无效化
本节展示分支预测器无效化操作。
表 8-6 显示了分支预测器无效化操作中的固定值字段。
注意
不支持使用 16 位 ASID 的分支预测器无效化。
表 8-7 显示了分支预测器无效化支持的操作。
表 8-6 分支预测器无效化操作固定值
| 地址位 | 字段 | 值 | 状态 |
|---|---|---|---|
| [3] | Part Num | - | 参见第 8-271 页的表 8-4 |
| [5] | VMID Valid | 0b0 | VMID 字段无效 |
| [6] | ASID Valid | 0b0 | ASID 字段无效 |
| [8:7] | Secure | 0b00 | 适用于安全和非安全 |
| [10:9] | Exception Level | 0b00 | 适用于所有 Guest OS 和虚拟机监视器 |
| [21:14] | VMID | 0xXX | 未指定 VMID |
| VMIDExt | |||
| [37:22] | ASID | 0xXXXX | 未指定 ASID |
| [39:38] | S2, S1 Staged Invalidation | 0b00 | 保留,设置为零 |
| [40] | Leaf Entry Invalidation | 0b0 | 保留,设置为零 |
表 8-7 分支预测器无效化操作
| Addr | 操作 | |
|---|---|---|
| [13:11] DVMOp 类型 | [4] VA 有效 | |
| 0b001 | 0b0 忽略 | 分支预测器全部无效化 |
| 0b1 匹配 | 分支预测器按 VA 无效化 |
8.3.3 物理指令缓存无效化
本节展示物理指令缓存无效化操作。
表 8-8 显示了物理指令缓存无效化操作中的固定值字段。
表 8-9 显示了物理指令缓存无效化支持的操作。
注意
当 Virtual Index 为 0b11 时,VA[19:12] 和 VA[27:20](分别位于 Addr[29:22] 和 Addr[21:14])被用作物理地址的一部分。Addr[37:30] 未被使用,为不关心值。
表 8-8 物理指令缓存无效化操作固定值
| 地址位 | 字段 | 值 | 状态 |
|---|---|---|---|
| [3] | Part Num | - | 参见第 8-271 页的表 8-4 |
| [10:9] | Exception Level | 0b00 | 适用于所有 Guest OS 和虚拟机监视器 |
| [39:38] | S2, S1 Staged Invalidation | 0b00 | 保留,设置为零 |
| [40] | Leaf Entry Invalidation | 0b0 | 保留,设置为零 |
表 8-9 物理指令缓存无效化操作
| [13:11] DVMOp 类型 | [8:7] 安全 | [6:5] 虚拟索引 | [4] VA | 操作 |
|---|---|---|---|---|
| 0b010 PICI | 0b10 安全 | 0b00 | 0b0 忽略 | 安全物理地址缓存全部无效化 |
| 0b00 | 0b1 匹配 | 安全物理地址缓存按 PA 无效化 (无虚拟索引) | ||
| 0b11 | 0b1 匹配 | 安全物理地址缓存按 PA 无效化 (带虚拟索引) | ||
| 0b11 非安全 | 0b00 | 0b0 忽略 | 非安全物理地址缓存全部无效化 | |
| 0b00 | 0b1 匹配 | 非安全物理地址缓存按 PA 无效化 (无虚拟索引) | ||
| 0b11 | 0b1 匹配 | 非安全物理地址缓存按 PA 无效化 (带虚拟索引) |
8.3.4 虚拟指令缓存无效化
本节展示虚拟指令缓存无效化操作。
表 8-10 显示了虚拟指令缓存无效化操作中的固定值字段。
表 8-11 显示了虚拟指令缓存无效化支持的操作。
表 8-10 虚拟指令缓存无效化操作固定值
| 地址位 | 字段 | 值 | 状态 |
|---|---|---|---|
| [3] | Part Num | - | 参见第 8-271 页的表 8-4 |
| [39:38] | S2, S1 Staged Invalidation | 0b00 | 保留,设置为零 |
| [40] | Leaf Entry Invalidation | 0b0 | 保留,设置为零 |
表 8-11 虚拟指令缓存无效化操作
| Addr | 操作 | |||||
|---|---|---|---|---|---|---|
| [13:11] DVMOp 类型 | [10:9] 异常级别 | [8:7] 安全 | [6] ASID 有效 | [5] VMID 有效 | [4] VA 有效 | |
| 0b011 VICI | 0b00 虚拟机监视器和所有 Guest OS | 0b00 安全和非安全 | 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 全部无效化。适用于安全和非安全。适用于虚拟机监视器和所有 Guest OS。 |
| 0b11 非安全 | 0b0 忽略 | 0b0 忽略 | 0b0 忽略 | 全部无效化。适用于非安全。适用于虚拟机监视器和所有 Guest OS。 | ||
| 0b10 Guest OS | 0b10 安全 | 0b1 匹配 | 0b0 忽略 | 0b1 匹配 | 安全按 ASID 和 VA 无效化。 | |
| 0b11 非安全 | 0b0 忽略 | 0b1 匹配 | 0b0 忽略 | Guest OS,全部无效化。 | ||
| 0b1 匹配 | 0b1 匹配 | 0b1 匹配 | Guest OS,按 ASID 和 VA 无效化。 | |||
| 0b11 虚拟机监视器 | 0b11 非安全 | 0b0 忽略 | 0b0 忽略 | 0b1 匹配 | 虚拟机监视器,按 VA 无效化。 | |
| 0b1 匹配 | 0b0 忽略 | 0b1 匹配 | 虚拟机监视器,按 ASID 和 VA 无效化。 |
8.3.5 同步
本节展示 DVMSync 同步操作。
表 8-12 显示了同步操作中的固定值字段。
表 8-12 同步操作固定值
| 地址位 | 字段 | 值 | 状态 |
|---|---|---|---|
| [3] | Part Num | - | 参见第 8-271 页的表 8-4 |
| [4] | VA Valid | 0b0 | 不适用 |
| [5] | VMID Valid | 0b0 | 忽略 VMID |
| [6] | ASID Valid | 0b0 | 忽略 ASID |
| [8:7] | Secure | 0b00 | 适用于安全和非安全 |
| [10:9] | Exception Level | 0b00 | 适用于所有 Guest OS 和虚拟机监视器 |
| [13:11] | DVMOp type | 0b100 | 同步消息 |
| [21:14] | VMID | 0xXX | 未指定 VMID |
| VMIDExt | |||
| [37:22] | ASID | 0xXXXX | 未指定 ASID |
| [39:38] | S2, S1 Staged Invalidation | 0b00 | 设置为零 |
| [40] | Leaf Entry Invalidation | 0b0 | 保留,设置为零 |