HV可以避免SLAT吗?

时间:2018-09-24 11:25:36

标签: virtualization hypervisor ept

这个问题可能很有趣(我也是hypervisor的新手)。我对SLAT感到困惑(为什么需要它?)。如果我没有记错的话,SLAT(二级地址翻译) )用于将来宾虚拟地址到实际物理地址的地址转换(来宾虚拟地址到主机物理地址(如果输入错误,请更正我,即: guest virt addr-> host virt addr-> host物理地址 )。如果硬件不支持SLAT,则我们必须使用影子页表来执行相同操作(这对于CPU进行SW中的附加转换会增加CPU的开销)。

但是我的问题是, 我们不能通过将实际的物理内存传递给来宾OS并让来宾os处理相同的操作(而不是代替)来跳过此页表处理 吗?使用SLAT或影子分页)? 像UNMAP一样,从Hypervisor的几个存储库(物理RAM地址范围)将它们分配给来宾,并在mmu关闭的情况下恰好在开始执行来宾代码之前启动该特定CPU。在guest虚拟机中运行的代码(可能是内核启动代码)是否允许它创建自己的页表并启用MMU而不是使用SLAT? 当我们需要停止VM(最终guest opt应当再次停止mmu)时,我们可以将HV分页恢复回该特定CPU内核并启用MMU,对吗?

这种方法是否存在漏洞/问题(这有意义吗?)?我们不能在虚拟化中跳过SLAT吗?

如果我的问题没有任何意义,请原谅我,因为我对虚拟化非常陌生:(

1 个答案:

答案 0 :(得分:0)

出于以下三个原因,需要第二级地址转换:允许客户机的内存视图与物理地址映射不同;保护虚拟机监控程序内存和其他来宾的内存免受来宾的影响;并允许管理程序拦截某些内存和MMIO访问,以虚拟化平台和设备。

如果在禁用分页的情况下启动来宾,它将完全不受限制地访问所有内存(和MMIO空间)。

当运行多个来宾时,这尤其重要。每个来宾都可能期望其内存从地址0开始。二级地址转换可以将每个来宾的地址0转换为不同的物理内存地址。