【问题标题】:Do VMMs use Virtual Memory on the hosts?VMM 是否在主机上使用虚拟内存?
【发布时间】:2013-01-20 12:14:32
【问题描述】:

我试图了解过去如何使用影子页表执行虚拟化。 articles 我读过所有关于从客户虚拟内存到主机物理内存的转换的讨论。我了解影子页面表如何消除访客虚拟到访客物理转换的需要。我的问题是,Host Virtual to Host Physical 步骤发生了什么。 (HVA-> HPA)。

引用文章中的虚拟机管理器根本不使用主机中的虚拟内存吗?是否假定它们可以直接访问主机系统的物理内存?甚至可能吗?我认为 TLB 缓存转换是由 MMU 在硬件中实现的,并且每条指令的地址都由 MMU 本身从虚拟转换为物理。但是话又说回来,我不确定内核代码如何与 TLB 一起工作?内核指令不通过TLB吗?

【问题讨论】:

    标签: virtualization virtual-machine virtual-memory tlb mmu


    【解决方案1】:

    我不确定我是否准确地理解了你的观点,我正在尽力回答你的问题。

    不需要 HVA->HPA,因为客人需要的是 HPA 而不是 HVA。这意味着 HVA 对于访问其客户内存区域的客户来说是无用的。

    所以你预期的传输流程可能不考虑影子页表可能是:

    GVA -> GPA -> HVA -> HPA

    但是由于大多数hypervisor都是在内核模式下运行的,谁知道host和guest的内存是如何分配的,所以它可以直接将GPA映射到HPA,而无需HVA:

    GVA -> GPA -> HPA

    这个客户记忆翻译流程与hyperviosr的用户空间无关,其流程为HVA -> HPA

    不确定以上是否回答了您的问题。

    【讨论】:

      【解决方案2】:

      答案可以是。如果是,则管理程序将客户 RAM 映射到主机上的虚拟内存,因此主机可以将其换入和换出主机 RAM。如果不是,则管理程序将客户 RAM 映射到主机上锁定的物理内存。

      VirtualBox 属于 no 组。 VirtualBox 在主机内核中运行一个设备驱动程序,并使用该驱动程序为客户 RAM 分配锁定内存。客户 RAM 的每一页都驻留在固定的主机物理地址,因此主机永远无法换出该页。因此,客户 RAM 必须小于主机 RAM。 VirtualBox 的手册上写着spare at least 256 MB to 512 MB for the host

      MMU 只能将虚拟地址映射到物理地址。在 VirtualBox 中,来宾有一个模拟的 MMU 来将来宾虚拟地址映射到来宾物理地址。 VirtualBox 有自己的客户物理地址到主机物理地址的映射,并使用主机 MMU 将客户虚拟地址映射到主机物理地址。由于内存锁定,主机物理地址永远不会失效。

      Mac-on-Linux 属于 yes 组。我曾经用它在主机 PowerPC Linux 中运行来宾 Mac OS 9。我为 Mac OS 9 提供了 256 MB 的 RAM,但我真正的 Linux 机器只有 64 MB 的 RAM。这是因为 MOL 将客户 RAM 映射到主机虚拟内存中,an ordinary mmap() call 在用户进程中。然后 MOL 使用 Linux 内核模块来控制主机 MMU。

      但是主机 MMU 只能映射到主机物理地址,不能映射到虚拟地址。来宾有一个模拟的 MMU,它将来宾虚拟映射到来宾物理。 MOL adds a base address 将客户物理转换为虚拟主机。 MOL 的内核模块uses the host map 将主机虚拟转换为主机物理,然后使用主机MMU 将客户虚拟映射到主机物理。

      如果 Linux 换出客户 RAM 的一页,那么主机物理地址将变为无效,客户系统可能会覆盖其他人的内存并导致主机崩溃。必须有某种方式通知 MOL Linux 已换出该页面。 MOL 通过名为flush_map_pageflush_map_pagespatching an internal Linux kernel function 解决了这个问题。

      KVM 也在 yes 组中。 Linux 添加了一个名为memory management notifiers 的内核特性来支持KVM。当 QEMU 使用 KVM 进行虚拟化时,它allocates guest RAM in host virtual memory。当主机换出页面时,MMU 通知器会通知 KVM。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 2014-12-16
        • 2014-02-22
        • 1970-01-01
        • 2020-11-27
        • 1970-01-01
        相关资源
        最近更新 更多