×

您可以使用巨页作为集群中虚拟机的后备内存。

先决条件

巨页的作用

内存以称为页的块进行管理。在大多数系统上,一个页为 4Ki。1Mi 内存等于 256 个页;1Gi 内存为 256,000 个页,依此类推。CPU 具有内置的内存管理单元,用于以硬件方式管理这些页的列表。转换旁路缓冲区 (TLB) 是虚拟到物理页映射的小型硬件缓存。如果在硬件指令中传递的虚拟地址可以在 TLB 中找到,则可以快速确定映射。如果不是,则会发生 TLB 未命中,系统将回退到较慢的基于软件的地址转换,从而导致性能问题。由于 TLB 的大小是固定的,因此减少 TLB 未命中几率的唯一方法是增加页大小。

巨页是大于 4Ki 的内存页。在 x86_64 架构上,有两种常见的巨页大小:2Mi 和 1Gi。其他架构的大小各不相同。要使用巨页,必须编写代码,以便应用程序能够识别它们。透明巨页 (THP) 尝试在无需应用程序了解的情况下自动管理巨页,但它们有局限性。特别是,它们仅限于 2Mi 页大小。由于 THP 的碎片整理工作可能会锁定内存页,因此 THP 可能会导致内存利用率高或内存碎片严重的节点的性能下降。因此,某些应用程序的设计可能(或建议)使用预先分配的巨页而不是 THP。

在 OpenShift Virtualization 中,可以将虚拟机配置为使用预先分配的巨页。

为虚拟机配置巨页

您可以通过在虚拟机配置中包含memory.hugepages.pageSizeresources.requests.memory 参数来配置虚拟机以使用预先分配的巨页。

内存请求必须可被页大小整除。例如,您不能使用 1Gi 的页大小请求 500Mi 内存。

宿主机和客户机操作系统的内存布局相互独立。虚拟机清单中请求的大页应用于 QEMU。客户机内部的大页只能根据虚拟机实例的可用内存量进行配置。

如果编辑正在运行的虚拟机,则必须重新启动虚拟机才能使更改生效。

先决条件
步骤
  1. 在您的虚拟机配置中,将resources.requests.memorymemory.hugepages.pageSize 参数添加到 spec.domain 中。以下配置片段适用于请求总共 4Gi 内存且页大小为 1Gi 的虚拟机。

    kind: VirtualMachine
    # ...
    spec:
      domain:
        resources:
          requests:
            memory: "4Gi" (1)
        memory:
          hugepages:
            pageSize: "1Gi" (2)
    # ...
    1 为虚拟机请求的总内存量。此值必须可被页大小整除。
    2 每个大页的大小。x86_64 架构的有效值为 1Gi2Mi。页大小必须小于请求的内存。
  2. 应用虚拟机配置

    $ oc apply -f <virtual_machine>.yaml