配置内存大页
使用内存大页,以提高内存访问效率,从而提升Gazelle的性能。
- 禁用透明大页。
1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
- 查看系统支持的内存大页大小。
1
ls /sys/kernel/mm/hugepages
系统支持的每种size的hugepage类型在“/sys/kernel/mm/hugepages”目录下都对应一个子目录。
- 查看系统默认的内存大页大小。
1
cat /proc/meminfo | grep Hugepagesize
- 可选:如果使用当前默认内存大页大小,请跳过此步骤;如果需要修改默认内存大页大小,请执行此步骤。
- 打开文件“/boot/efi/EFI/openEuler/grub.cfg”。
1
vi /boot/efi/EFI/openEuler/grub.cfg
- 按“i”进入编辑模式,找到开机第92行的启动项“menuentry”,在第104行末尾添加以下内容,设置默认的HugePages大小为2MB,设置系统支持的HugePages大小为2MB。
1
default_hugepagesz=2M hugepagesz=2M
- 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
- 重启服务器,使配置生效。
1
reboot
- 查看系统默认的内存大页大小。
cat /proc/meminfo | grep Hugepagesize
可以看到系统默认的内存大页大小已修改为2048kB,即2MB。
- 打开文件“/boot/efi/EFI/openEuler/grub.cfg”。
- 创建大页目录。本例中以512MB大小的内存大页为例,请根据实际情况设置内存大页的大小。
1
mkdir /data/hugepages
- 挂载内存大页。
请勿重复执行此命令,否则内存大页将被持续占用而无法释放。可通过mount |grep hugepages命令确认是否已执行该命令,从命令返回中看到内存大页已挂载到“/data/hugepages”目录下,表明已执行过该命令。
1
mount -t hugetlbfs nodev /data/hugepages
- 执行以下命令分配内存大页。在本例中,由于网卡亲和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
- 分配的内存大页数量不能超过NUMA节点所拥有内存。NUMA节点内存可通过以下命令查看。
- 查看大页是否配置成功。
1
cat /proc/meminfo | grep Huge
命令返回内存大页的分配情况,表示已配置成功。
- HugePages_Total为内存大页的个数。
- HugePages Free为当前未被程序使用的内存大页个数。
- Hugepagesize为内存大页的默认大小。
- Hugetlb为大页面池的总容量,即Hugepagesize与HugePages_Total相乘的大小。
父主题: 手动配置