在VMware的ESXi Server等虚拟机监视器中,如何实现影子页面表?

我的理解是,VMware的ESXi Server等VMM维护影子页表,将客户操作系统的虚拟页面地址直接映射到机器(硬件)地址。我被告知,影子页表然后由处理器的分页硬件直接使用,以允许VM中的内存访问在没有转换开销的情况下执行。 我想更多地了解阴影页表机制在VMM中的工作原理。我的高层理解是否正确?如果是这样, 在影子页表的实现中使用了哪种数据结构? 从客户操作系统到硬件的控制流程是什么? 如果没有直接阅读开源VMM的源代码,我可以查看哪些资源来了解有关硬件虚拟化的更多信息?     
已邀请:
这是我能说的。如果我错了,请纠正我。 影子页面表由Hypervisor / VMM创建和维护。它是包含来宾虚拟地址和机器物理地址的表。想象一下,如果没有影子页面表,要进入机器物理地址我们必须先获取虚拟地址然后遍历OS(来宾)页面表来获取来宾物理地址,然后我们需要将来宾物理地址转换为机器物理地址。所以这是发生的事情,看看如何将一个访客虚拟地址转换为影子页面表的senario下的机器物理地址: 第一个物理处理器将看到虚拟地址,其目的地是获取机器物理地址。第一件事 它确实试图看看TLB(翻译旁观缓冲区) 在TLB中输入我们现在获取机器地址。这是最多的 我们称之为TLB命中案例的简单案例。没有表现 问题。它将以所谓的原生速度运行。   如果TLB中没有条目(TLB未命中)会发生什么? 如果TLB中没有条目,则处理器将在影子页表中执行页表遍历。假设有一个 相应的映射(Guest VA to Machine Physical address),. 处理器将在TLB中插入值,然后重新开始执行 我们很高兴看到这个案子。这是另一个好例子。有可能 大约需要10个周期来查看影子页面表,所以 表现明智,我们不必担心。   如果影子页面表中没有条目会发生什么? 处理器正在影子页面表中查找,但找不到该条目。那么在这种情况下,因为查找是特权,所以会出现错误。 VMM(虚拟机监视器)将查找访客页面表以解决该问题。这种情况有点复杂。任何方式当VMM遍历访客页面表时,将有两种可能性。 在查找的情况下找到了条目: 当查找找到条目时,我们最终只能在访客页表中走 得到客人的实际地址。嘿,我们的目标是获取物理机器地址。怎么样 我们到那儿。监视器将获取访客的物理地址并进行查看 进入他们的PMap表(或结构)。如果找到该条目,则会插入该值 (基本上是guest虚拟机地址,机器物理地址)到阴影页面表中。 现在我们在影子页面表中有条目,我们很高兴当处理器 重启指令,它可以从影子页面表中获取映射。 。 啊!忘了提这种情况,显示器正在做一个隐藏的页面错误来解决 通过使用PMap或PhysMap获取相应的计算机物理地址的问题。 在查找的情况下找不到条目 监视器(VMM)将注入虚拟客户页面错误。现在在客人里面看到了 有页面错误。操作系统将来解决问题。这可能需要数千 在页面被交换到磁盘的情况下,到十万个周期或更多 客人。现在假设操作系统(客户操作系统)解决了问题。我们可以重启3.1步骤。 那么整个流程有点复杂。我希望你能理解这个过程。 。 注意: 影子页表在以下软件中实现:VMware,Microsof。它仅用于二进制翻译模式(BT)。使用嵌套页表我们根本不需要阴影页表。 影子页面表存在一些问题。 我们依靠客人来使TLB无效。 问题是我们希望保持客户页面表和之间的一致性 影子页表。想象一下,如果访客更新页面表会发生什么,会发生什么 如果客人正在切换过程。它必须切换页表。在这种情况下 必须通知硬件嘿我更新页表中的条目,我使它无效。 积极的影子页面表缓存是必要的: 我们需要缓存影子页面表。看看客户做上下文切换会发生什么 我们有很多客人流程。它必须通知硬件它必须改变 它影子页表指针。每个开关都会闪烁TLB。传统上我们有一个 每个正在运行的进程的影子页表,但我们没有影子页表那么多 比较它有表的进程。 写保护到访客页面表(另一个词是跟踪),看看会发生什么 例如,由于某种原因页面被操作系统锁定,我们必须得到通知。     
50多个意见,什么都没有? 我在freenode.net上的## linux上通过IRC与Vidar Holen进行了交谈。他建议我看看这份AMD技术报告。它已被证明是一种很好的资源。还有其他人有其他建议吗?     
基本上,客户操作系统会尝试将虚拟地址转换为物理地址,但这个看似物理的地址实际上并不是真正的物理地址,因为它们来自VMM /管理程序,因此这些地址不是连续的地址,因为普通操作系统没有VM。 因此,还需要一个转换来将这些客户物理地址映射到真实的机器地址。为了实现此目的,VMM / hypervisor保留阴影页表以将这些客户物理地址映射到机器物理地址。 此外,硬件提供了一种通过提供TLB来避免页表行走的机制,但是如果你可以想象,guest虚拟机中的这些TLB必须不是真正的硬件TLB,而VMM / hypervisor也必须以某种方式模拟它们。同时,影子页表可以用作来宾的TLB。 这是影子页面表的基本思想,但它可能是硬件虚拟化技术中最复杂的技术。我遗漏了许多细节和捕获物,我也不完全理解。 以下是一个链接,讨论了简化影子页表的一些问题,以及kvm如何试图避免它们。 http://lwn.net/Articles/216794/ 还有一件事是,这种机制也有硬件支持,它们被称为EPT和NPT,由intel和amd支持。 HTH。     

要回复问题请先登录注册