CHI 开发备忘 08 记 -- CHI spec 08

第 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 所示的必要步骤是:

  1. RN-F0 使用适用于 DVMOp 类型的写语义,向 MN 发送 DVMOp(非同步)。

  2. MN 接受 DVMOp(非同步) 请求并提供 DBIDResp 响应。

  3. RN-F0 在数据通道上发送一个 8 字节的数据包。

  4. MN 将 SnpDVMOp 监听请求广播给系统中所有的 RN-F 和 RN-D 节点。SnpDVMOp 在监听通道上发送,需要两个监听请求。SnpDVMOp 的两个部分分别用后缀 _P1 和 _P2 标记。

    注意

    • 消息的两个部分必须携带相同的事务 ID (TxnID)。

    • RN 必须拥有可用的资源来接受 SnpDVMOp。参见第 8-261 页的 流量控制。

  5. 完成所需操作后,每个 SnpDVMOp 的接收者向 MN 发送一个 SnpResp 响应。

    注意

    发送 SnpResp 意味着目标 RN 已将 SnpDVMOp 转发给所需的 RN 结构,并已释放接受另一个 DVM 操作所需的资源。这并不意味着请求的 DVM 操作已完成。参见第 8-260 页的 同步类型 DVM 事务流。

  6. 在收到所有 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 所示的必要步骤是:

  1. RN-F0 向 MN 发送 DVMOp(同步)。

    注意

    在 RN 可以发送 DVMOp(同步) 之前,所有需要由该 DVMOp(同步) 保证完成的先前 DVMOp 请求必须已经收到 Comp 响应。

  2. MN 接受 DVMOp(同步) 请求并向请求者发送 DBIDResp 响应。

  3. RN-F0 在数据通道上发送一个数据包,数据大小为 8 字节。

  4. MN 向 RN-F1 发送 SnpDVMOp。SnpDVMOp 在监听通道上发送,需要两个监听请求。SnpDVMOp 的两个部分分别用后缀 _P1 和 _P2 标记。

  5. 完成 DVM 同步操作后,RN-F1 向 MN 发送一个 SnpResp 响应。

    注意

    发送 SnpResp 意味着所有 DVM 相关操作已在 RN 结构中完成,并且目标 RN 已释放接受另一个 SnpDVMOp 所需的资源。

  6. 收到 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 保留,设置为零
相关推荐
homelook1 小时前
Transformer与电池管理系统(BMS)的结合是当前 智能电池管理 的前沿研究方向
人工智能·深度学习·transformer
ZPC82101 小时前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82101 小时前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
ssshooter1 小时前
免费和付费 AI API 选择指南
人工智能·aigc·openai
掘金酱2 小时前
「寻找年味」 沸点活动|获奖名单公示🎊
前端·人工智能·后端
AI周红伟2 小时前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
Wishell20152 小时前
人工智能中卷积
人工智能
多恩Stone2 小时前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
生信大杂烩2 小时前
癌症中的“细胞邻域“:解码肿瘤微环境的空间密码 ——Nature Cancer 综述解读
人工智能·算法