AMD页表扩展中的ASID什么时候不再有效?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为答案是“不直接” - 查看 AMD 系统编程 规范,VM 控制块中的 ASID 字段只是一个(最多)32 位 ID,虚拟机管理程序为每个 VM 实例设置唯一值,并用作TLB 查找。
由于您无法直接控制 x86 上的 TLB 内容,因此您无法控制 TLB 中最终包含哪些条目 - 如果处理器决定向 TLB 添加条目,则该条目将使用当前 ASID 进行标记,定义在添加后才有效。
前面提到的系统编程规范的 15.15.1 部分以某种迂回的方式对此进行了描述:
这意味着处理器没有有效或无效 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:
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.