2

我的理解是,VMware 的 ESXi Server 等 VMM 维护影子页表,以将客户操作系统的虚拟页地址直接映射到机器(硬件)地址。有人告诉我,影子页表然后直接由处理器的分页硬件使用,以允许在 VM 中执行内存访问而无需转换开销。

我想更多地了解影子页表机制在 VMM 中的工作原理。我上面的高级理解正确吗?如果是这样,

  • 在影子页表的实现中使用了什么样的数据结构?

  • 从客户操作系统到硬件的控制流程是什么?

  • 如果没有直接阅读开源 VMM 的源代码,我可以查看哪些资源来了解有关硬件虚拟化的更多信息?

4

3 回答 3

4

这是我能说的。如果我错了,请纠正我。影子页表由 Hypervisor/VMM 创建和维护。它是包含客户虚拟地址和机器物理地址的表。想象一下没有影子页表,要进入机器物理地址,我们必须先获取虚拟地址,然后遍历 OS(guest) 页表获取客户物理地址,然后我们需要将客户物理地址转换为机器物理地址。所以这就是发生的事情,看看在影子页表的情景下,一个来宾虚拟地址是如何转换为机器物理地址的:

  1. 第一个物理处理器将看到虚拟地址,其目的是获取机器物理地址。如果条目在 TLB 中,它做的第一件事是尝试查看 TLB(Translation Look Aside buffer),我们现在得到机器地址。这是最简单的情况,我们称之为 TLB 命中情况。根本不存在性能问题。它将以所谓的本机速度运行。

    如果 TLB 中没有条目(TLB 未命中)会怎样?

  2. 如果 TLB 中没有条目,处理器将在影子页表中进行页表遍历。假设有一个对应的映射(Guest VA to Machine Physical address),处理器会在TLB中插入值,然后重新开始执行,我们可以继续这种情况。这是另一个很好的案例。在影子页表中查找可能需要大约 10 个周期,因此在性能方面我们不必太担心。

    如果影子页表中没有条目会怎样?

  3. 处理器正在查找影子页表,但找不到条目。那么在这种情况下,因为查找是特权,所以会有一个错误。VMM(虚拟机监视器)将查找来宾页表以解决问题。这个案子有点复杂。当 VMM 遍历访客页表时,任何方式都会有两种可能性。

    1. 在查找找到入口的情况下:当查找找到入口时,我们只能在访客页表中走动,最终得到访客物理地址。嘿嘿,我们的目标是获取物理机地址。我们怎么去那里。监视器将获取来宾物理地址并查找其 PMap 表(或结构)。如果找到该条目,它将将该值(基本上是客户虚拟地址,机器物理地址)插入到影子页表中。现在我们有了影子页表中的条目,我们可以开始了,因为当处理器重新启动指令时,它可以从影子页表中获取映射。. 啊! 忘记提及这种情况,监视器正在执行隐藏页面错误以通过使用 PMap 或 PhysMap 获取相应的机器物理地址来解决问题。

    2. 在查找未找到条目的情况下,监视器(VMM)将注入虚拟访客页面错误。现在在来宾内部,它看到存在页面错误。操作系统会来解决问题。如果页面被客户机换出到磁盘,这可能需要数千到十万或更长时间。现在假设操作系统(客户操作系统)解决了这个问题。我们可以重新开始3.1的步骤。

好吧,整个流程有点复杂。我希望你能理解这个过程。. 注意:影子页表是在如下软件中实现的:VMware、微软。它仅用于二进制翻译模式(BT)。使用嵌套页表,我们根本不需要影子页表。

影子页表存在一些问题。

  • 我们依靠客人来使 TLB 无效。问题是我们要保持访客页表和影子页表之间的一致性。想象一下如果客人正在更新页表会发生什么,如果客人正在切换进程会发生什么。它必须切换页表。在这种情况下,它必须通知硬件,嘿,我更新了页表中的条目并使其无效。

  • 积极的影子页表缓存是必要的:我们需要缓存影子页表。看看如果来宾进行上下文切换会发生什么,并且我们有很多来宾进程。它必须通知硬件它必须改变它的影子页表指针。每个开关都会闪烁 TLB。传统上,我们为每个正在运行的进程都有一个影子页表,但与拥有它的进程相比,我们没有那么多影子页表。

  • 将保护写入访客页表(另一个词是跟踪)以查看如果页面由于某种原因被操作系统锁定的情况下会发生什么,我们必须得到通知。

于 2012-04-26T17:21:58.440 回答
0

超过 50 次观看,什么都没有?

我在 freenode.net 上的##linux 上通过 IRC与Vidar Holen进行了交谈。他建议我看看这份AMD 技术报告。它已被证明是一个很好的资源。还有其他人有其他建议吗?

于 2010-05-05T05:22:56.650 回答
0

基本上,客户操作系统会尝试将虚拟地址转换为物理地址,但这个看似物理地址实际上并不是真正的物理地址,因为这些地址来自 VMM/管理程序,因此这些地址不是连续的地址,就像没有常规操作系统的情况一样虚拟机。因此,需要再进行一次转换才能将这些客户物理地址映射到真实机器地址。为了实现这一点,VMM/管理程序保留影子页表以将这些客户物理地址映射到机器物理地址。

此外,硬件提供了一种通过提供 TLB 来避免页表遍历的机制,但是如果您可以想象,来宾内部的这些 TLB 一定不是真正的硬件 TLB,VMM/hypervisor 也必须以某种方式模拟这些。同时,影子页表可以作为guest的TLB。

所以这是影子页表的一个基本概念,但它可能是硬件虚拟化技术中最复杂的技术。我遗漏了很多我也不完全理解的细节和问题。

以下链接讨论了简化影子页表的一些问题以及 kvm 如何尝试避免这些问题。

http://lwn.net/Articles/216794/

还有一件事是这种机制也有硬件支持,它们被称为 EPT 和 NPT,由 intel 和 amd 支持。

HTH。

于 2012-02-17T04:40:25.190 回答