更新时间:2021-10-15 GMT+08:00
分享

虚拟机使用内存大页

使用内存大页的好处是能保证虚拟机的所有内存在Host上始终以大页形式存在,并且保证物理连续,可以有效的减少TLB Miss,显著提升内存访问密集型业务的性能。在虚拟机使用内存大页的场景下,通过关闭透明大页(参见关闭透明大页),可以减少Host侧的开销,使得虚拟机可以获得更稳定的性能。

不同OS对于内存大页的单位设置会不一样,UVP一般设置1G,而本文提及的CentOS 7.6则设置为512MB。虚拟化场景,配置内存大页时,至少要预留总内存的15%给Host。

  1. 在Host侧查看各个numa节点上的大页分配情况。

    1
    cat /sys/devices/system/node/node*/meminfo | grep Huge
    

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

  2. 配置虚拟机使用512MB内存大页。

    KVM虚拟化场景下,配置内存大页时,至少要预留总内存的15%给Host。

    以4U8G规格配置虚拟机为例,先在Host侧分配300个512MB内存大页。

    • CentOS
      1. 对于CentOS 7.6操作系统,编辑“/boot/efi/EFI/centos/grub.cfg”
        1
        vi /boot/efi/EFI/centos/grub.cfg
        
      2. 在Linux行输入以下配置。
        1
        default_hugepagesz=512M hugepagesz=512M  hugepages=300
        

        如下所示:

    • openEuler
      1. 对于openEuler-20.03-LTS-SP1操作系统,编辑“/etc/grub2-efi.cfg”
        1
        vi /etc/grub2-efi.cfg
        
      2. 在Linux行输入以下配置。
        1
        default_hugepagesz=512M hugepagesz=512M  hugepages=256 pci=realloc
        

        如下所示:

  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~node3)配置了75个512MB内存大页。

    如果需要查看某个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内存大页。

  6. 确定hugetlbfs是否已经挂载。

    1
    mount | grep hugetlbfs
    

    上述回显信息表示已经挂载上了。

  7. 虚拟机配置大页内存,xml配置参考如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <domain type = 'KVM'>
    ...
      <memory unit='KiB'>8388608</memory>
      <currentMemory unit='KiB'>83886088</currentMemory>
      <memoryBacking>
        <hugepages/>
      </memoryBacking>
      <vcpu placement = 'static' cpuset='12-15'>4</vcpu>
      <cputune>
        <vcpupin vcpu='0' cpuset='12'/>
        <vcpupin vcpu='1' cpuset='13'/>
        <vcpupin vcpu='2' cpuset='14'/>
        <vcpupin vcpu='3' cpuset='15'/>
        <emulatorpin cpuset='12-15'/>
      </cputune>
      <numatune>
        <memory mode='strict' nodeset='0'/>
      </numatune>
    ...
    </domain>
    

分享:

    相关文档

    相关产品

close