AMD页表扩展中的ASID什么时候不再有效?

发布于 2024-07-26 22:21:24 字数 183 浏览 11 评论 0原文

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

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

IA-32 defines various cases in which the CPU may invalidate the entire TLB. Starting with the ASID extensions that AMD released in Opteron Rev-F processors (Barcelona?) there are cases in which only the TLB entries of a certain ASID are invalidated.

The question is, does the ASID itself ever stop being valid? Does the Hypervisor have to check that an ASID is valid before using it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆蝶 2024-08-02 22:21:24

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

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

前面提到的系统编程规范的 15.15.1 部分以某种迂回的方式对此进行了描述:

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

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

I think the answer is 'not directly' - looking at the AMD system programming specification, the ASID field in the VM control block is simply a (up to) 32bit ID which the hypervisor sets to a unique value for each instance of a VM, and is used as an additional tag in the TLB lookup.

As you have no direct control over the TLB contents on x86, you can't control what entries end up in the TLB - if the processor decides to add an entry to the TLB, the entry will be tagged with the current ASID, which by definition will be valid when added.

This is described in a somewhat roundabout way in section 15.15.1 of the previously mentioned system programming spec:

In implementations that do not provide a way to selectively flush all translations of a single specified ASID, software may effectively flush the guest's TLB entries by allocating a new ASID for the guest and not reusing the old ASID until the entire TLB has been flushed at least once.

This implies that the processor has no concept of valid or invalid ASIDs - it's just a number whose current value must match a TLB entries ASID for the TLB to hit. Hence if the hypervisor doesn't correctly flush an ASID before it reuses it, you'll get stale TLB hits.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文