我目前正在开发一个管理程序特性。
当EPT违规发生时,我对如何处理TLB失效感到困惑
我正在Linux上开发,使用的是i7处理器。我的实施:
每个EPT条目的写入访问被清除(读取和执行访问被设置),如果发生Enabled
。
根据英特尔手册,
“EPT违犯使所有将用于翻译导致EPT违规的来宾物理地址的来宾物理映射(与当前EP4TA相关联)无效,并且也使任何组合映射无效”。
我被这部分搞混了。
它是否确保EPT违规不仅在当前内核的TLB缓存中,而且在其他内核的TLB缓存中,都使相应的TLB条目无效?
如果是这样的话,是否可以只设置写访问和分配新的hpa而不需要tlb射击?
发布于 2022-06-28 05:24:43
我认为您需要担心清除其他核心的TLB缓存。
如果您阅读上面引用的Intel手册部分,您会发现这一段适用于一个单一的逻辑核心:
27.3.3使缓存的翻译信息无效
寻呼结构的软件修改(包括EPT寻呼结构和用于定位SPP向量的数据结构)可能导致这些结构与逻辑处理器缓存的映射之间的不一致。某些操作使逻辑处理器缓存的信息失效,并可用于消除这种不一致。
27.3.3.1使缓存映射无效的操作
下列操作使缓存的映射无效,如下所示:
在体系结构上使TLB或分页结构缓存中的条目无效的操作(例如,INVLPG和INVPCID指令)使线性映射和组合映射无效。1它们只需要针对当前的VPID (但是,对于组合映射,所有EP4TAs)。即使EPT正在使用,当前VPID的线性映射也是无效的。2当前VPID的组合映射无效,即使EPT不在使用。
EPT违规会使将用于翻译导致违反EPT的来宾物理地址的任何来宾-物理映射(与当前EP4TA关联)无效。如果该来宾物理地址是线性地址的转换,则EPT冲突还会使与当前PCID、当前VPID和当前EP4TA相关联的线性地址的任何组合映射无效。
如果“启用VPID”VM -执行控制为0,则VM条目和VM退出使与VPID 0000H关联的线性映射和组合映射无效(对于所有PCID)。对于所有EP4TAs,VPID 0000H的组合映射无效。
..。
我使用的SDM订单号为325384-075US,于2021年6月发布。
此外,我认为如果EPT违规为您处理TLB射击,这将是非常低效的,或者英特尔应该为传统的TLB射击提供硬件支持(即与虚拟机无关的TLB射击)。
https://stackoverflow.com/questions/70179745
复制相似问题