鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

配置内存大页

使用内存大页,以提高内存访问效率,从而提升Gazelle的性能。

  1. 禁用透明大页。
    1
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    
  2. 查看系统支持的内存大页大小。
    1
    ls /sys/kernel/mm/hugepages
    

    系统支持的每种size的hugepage类型在“/sys/kernel/mm/hugepages”目录下都对应一个子目录。

  3. 查看系统默认的内存大页大小。
    1
    cat /proc/meminfo | grep Hugepagesize
    

  4. 可选:如果使用当前默认内存大页大小,请跳过此步骤;如果需要修改默认内存大页大小,请执行此步骤。
    1. 打开文件“/boot/efi/EFI/openEuler/grub.cfg”
      1
      vi /boot/efi/EFI/openEuler/grub.cfg
      
    2. 按“i”进入编辑模式,找到开机第92行的启动项“menuentry”,在第104行末尾添加以下内容,设置默认的HugePages大小为2MB,设置系统支持的HugePages大小为2MB。
      1
      default_hugepagesz=2M hugepagesz=2M
      

    3. 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    4. 重启服务器,使配置生效。
      1
      reboot
      
    5. 查看系统默认的内存大页大小。
      cat /proc/meminfo | grep Hugepagesize

      可以看到系统默认的内存大页大小已修改为2048kB,即2MB。

  5. 创建大页目录。本例中以512MB大小的内存大页为例,请根据实际情况设置内存大页的大小。
    1
    mkdir /data/hugepages
    
  6. 挂载内存大页。

    请勿重复执行此命令,否则内存大页将被持续占用而无法释放。可通过mount |grep hugepages命令确认是否已执行该命令,从命令返回中看到内存大页已挂载到“/data/hugepages”目录下,表明已执行过该命令。

    1
    mount -t hugetlbfs nodev /data/hugepages
    
  7. 执行以下命令分配内存大页。在本例中,由于网卡亲和NUMA Node1,将4个HugePages分配给系统中的NUMA Node1,每个HugePage的大小为524288kB,即512MB。
    1
    echo 4 > /sys/devices/system/node/node1/hugepages/hugepages-524288kB/nr_hugepages
    
    • 分配的内存大页数量不能超过NUMA节点所拥有内存。NUMA节点内存可通过以下命令查看。
      1
      numactl --hardware | grep -i size
      
    • 在生产环境中,需要考虑为其他应用预留内存。
    • 此处为TPC-C测试场景,根据压测过程中内存的使用情况,为NUMA Node1分配2GB;2GB除以内存大页的大小512MB,即得出需要分配4个内存大页。操作过程中请根据实际情况分配内存大页大小。
    • 使用如下命令可以查看网卡亲和的NUMA Node,其中enp3s0为业务网卡名称,请根据实际情况修改。
      1
      cat /sys/class/net/enp3s0/device/numa_node
      
  8. 查看大页是否配置成功。
    1
    cat /proc/meminfo | grep Huge
    

    命令返回内存大页的分配情况,表示已配置成功。

    • HugePages_Total为内存大页的个数。
    • HugePages Free为当前未被程序使用的内存大页个数。
    • Hugepagesize为内存大页的默认大小。
    • Hugetlb为大页面池的总容量,即Hugepagesize与HugePages_Total相乘的大小。