---
title: 配置内存大页
description: "使用内存大页，以提高内存访问效率，从而提升Gazelle的性能。"
url: https://www.hikunpeng.com/document/detail/zh/boostdb/systemcollaborativeoptimization/gazellenof/kunpengdbsmysqlgazelle_20_0012.html
sourcePath: /source/zh/boostdb/systemcollaborativeoptimization/gazellenof/kunpengdbsmysqlgazelle_20_0012.html
indexId: 1e5c889738f4a844a38e0bf5a13005d175777060285c579bccb1ca26b0837a6197
---
# 配置内存大页

使用内存大页，以提高内存访问效率，从而提升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. 可选：如果使用当前默认内存大页大小，请跳过此步骤；如果需要修改默认内存大页大小，请执行此步骤。

  a. 打开文件“/boot/efi/EFI/openEuler/grub.cfg”。
    1 vi /boot/efi/EFI/openEuler/grub.cfg

  b. 按“i”进入编辑模式，找到开机第92行的启动项“menuentry”，在第104行末尾添加以下内容，设置默认的HugePages大小为2MB，设置系统支持的HugePages大小为2MB。
    1 default_hugepagesz=2M hugepagesz=2M

  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
  d. 重启服务器，使配置生效。
    1 reboot

  e. 查看系统默认的内存大页大小。

```
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相乘的大小。
