kind: VirtualMachine
# ...
spec:
domain:
resources:
requests:
memory: "4Gi" (1)
memory:
hugepages:
pageSize: "1Gi" (2)
# ...
节点必须具有预先配置的巨页。
内存以称为页的块进行管理。在大多数系统上,一个页为 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.pageSize
和 resources.requests.memory
参数来配置虚拟机以使用预先分配的巨页。
内存请求必须可被页大小整除。例如,您不能使用 1Gi
的页大小请求 500Mi
内存。
宿主机和客户机操作系统的内存布局相互独立。虚拟机清单中请求的大页应用于 QEMU。客户机内部的大页只能根据虚拟机实例的可用内存量进行配置。 |
如果编辑正在运行的虚拟机,则必须重新启动虚拟机才能使更改生效。
节点必须配置预分配的大页。有关说明,请参见 启动时配置大页。
在您的虚拟机配置中,将resources.requests.memory
和 memory.hugepages.pageSize
参数添加到 spec.domain
中。以下配置片段适用于请求总共 4Gi
内存且页大小为 1Gi
的虚拟机。
kind: VirtualMachine
# ...
spec:
domain:
resources:
requests:
memory: "4Gi" (1)
memory:
hugepages:
pageSize: "1Gi" (2)
# ...
1 | 为虚拟机请求的总内存量。此值必须可被页大小整除。 |
2 | 每个大页的大小。x86_64 架构的有效值为 1Gi 和 2Mi 。页大小必须小于请求的内存。 |
应用虚拟机配置
$ oc apply -f <virtual_machine>.yaml