---
title: 虚拟机使用内存大页
description: "使用内存大页能保证虚拟机的所有内存在Host上始终以大页形式存在，并且保证物理连续，可以有效地减少TLB Miss，显著提升内存访问密集型业务的性能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/systuningguide/tngg/kunpengdbs_tuningguide_05_0021.html
sourcePath: /source/zh/kunpengdbs/systuningguide/tngg/kunpengdbs_tuningguide_05_0021.html
indexId: e82410d6b7e9aba4b1601065715b73c4132a31171e5bb362b6896c508d9f97cd77
---
# 虚拟机使用内存大页

#### 目的

使用内存大页能保证虚拟机的所有内存在Host上始终以大页形式存在，并且保证物理连续，可以有效地减少TLB Miss，显著提升内存访问密集型业务的性能。


#### 方法

1. 在Host侧查看各个NUMA节点上的大页分配情况。
  1 cat /sys/devices/system/node/node*/meminfo | grep Huge

  如果HugePages显示信息为0，说明此时系统没有配置内存大页。

2. 配置虚拟机使用512MB内存大页。
KVM虚拟化场景下，配置内存大页时，至少要预留总内存的15%给Host。


以在openEuler 20.03 LTS SP1下配置4U8G规格的虚拟机为例，先在Host侧分配300个512MB内存大页。

  a. 打开“/etc/grub2-efi.cfg”文件。
    1 vi /etc/grub2-efi.cfg

  b. 在Linux字段一行的最后输入以下配置。
    1 default_hugepagesz=512M hugepagesz=512M hugepages=256 pci=realloc

    如下图所示：

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
3. 重启服务器。
  1 reboot

4. 重新进入操作系统后，确定内存大页配置情况。
  1 cat /proc/sys/vm/nr_hugepages

5. 在Host侧查看各个NUMA节点上的大页分配情况。
  1 cat /sys/devices/system/node/node*/meminfo | grep Huge

  此时各个NUMA节点的HugePages显示信息为75，说明此时系统已为各个NUMA节点（numa0～numa3）配置了75个512MB内存大页。

6. 如果需要查看某个NUMA节点上的大页配置情况，可以执行如下命令。这里以node0为例：
  1 2 cat /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages cat /sys/devices/system/node/node0/hugepages/hugepages-524288kB/free_hugepages

  nr_hugepages显示信息为75，说明此时系统为该NUMA节点配置了75个512MB内存大页。 free_hugepages显示信息为75，说明此时系统剩余75个512MB内存大页。

7. 确定hugetlbfs是否已经挂载。
  1 mount | grep hugetlbfs

  如下回显信息表示hugetlbfs已经挂载。

8. 虚拟机配置大页内存。虚拟机xml文件的配置参考如下。
  1 2 3 4 5 6 7 8 9 <domain type = 'KVM'> ... <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>83886088</currentMemory> <memoryBacking> <hugepages/> </memoryBacking> ... </domain>
