1

IA-32 定义了 CPU 可能使整个 TLB 无效的各种情况。从 AMD 在 Opteron Rev-F 处理器(巴塞罗那?)中发布的 ASID 扩展开始,有些情况下只有某个 ASID 的 TLB 条目无效。

问题是,ASID 本身是否会停止有效?Hypervisor 在使用它之前是否必须检查 ASID 是否有效?

4

1 回答 1

1

认为答案是“不直接”——查看 AMD 系统编程规范,VM 控制块中的 ASID 字段只是一个(最多)32 位 ID,管理程序将其设置为每个 VM 实例的唯一值,并用作 TLB 查找中的附加标记。

由于您无法直接控制 x86 上的 TLB 内容,因此您无法控制最终在 TLB 中的条目 - 如果处理器决定将条目添加到 TLB,则该条目将使用当前 ASID 进行标记,通过添加时定义将有效。

这在前面提到的系统编程规范的第15.15.1节中以某种迂回的方式进行了描述:

在不提供选择性刷新单个指定 ASID 的所有转换的方法的实现中,软件可以通过为访客分配新 ASID 并且在至少刷新整个 TLB 之前不重用旧 ASID 来有效刷新访客的 TLB 条目一次。

这意味着处理器没有有效或无效 ASID 的概念 - 它只是一个数字,其当前值必须与 TLB 条目 ASID 匹配才能使 TLB 命中。因此,如果管理程序在重用它之前没有正确刷新 ASID,您将获得陈旧的 TLB 命中。

于 2009-07-08T22:57:56.510 回答