我想要提高 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例上托管的数据库或应用程序的性能。如何配置我的实例上的 HugePages 以提高性能?
简短描述
HugePages 是大小超过默认的 4 KB 页面大小的内存页面。在大型应用程序或数据库环境中的 Linux 实例内核中启用 HugePages,将有助于降低 TLB 上的压力。TLB 上的压力降低将可提升服务器和应用程序或数据库的性能,因为 TLB 只需存储较少尺寸更大的页面。
例如,如果 TLB 条目处于 512 且在实例上未配置 HugePages,则内存大小约等于以下值:
4096 B * 512 = 2 MB 内存大小
如果 TLB 条目处于 512 且在实例上配置了 HugePages,则内存大小约等于以下值:
2 MB * 512 = 1 GB 内存大小
**注意:**Linux 系统中的 HugePages 有效值为为 2 MB 和 1 GB。默认值为 2 MB。
有关 HugePages 的更多信息,请参阅 Oracle 帮助中心上的 HugePages。
在启用 HugePages 加密前,请牢记以下几点:
- 默认情况下,启动系统不会释放 HugePages。要启用在系统启动后释放的功能,修改可用页面数量或修改 HugePages 池大小。
- 如果在系统启动过程期间内存中没有充足的空间可用于分配,则 HugePages 分配失败。hugepagesize * HugePages 数量的值必须始终低于实例的总内存。为了确定必须可用的内存量,请通过运行 free -m 命令验证实例的内存。
**注意:**从应用程序或数据库供应商或系统管理员获取 hugepagesize 值。例如,要为 Oracle 数据库启用 HugePages,您可以从 Oracle 获取 SGA。有关更多信息,请参阅《数据库能优化指南》中的查看 SGA 内存分配。
- 在实例的内核中启用 Hugepages 要求该实例上的应用程序或数据库支持 HugePages。向供应商或系统管理员验证您的应用程序或数据库支持 HugePages。
解决方法
**注意:**这是在测试环境中配置 HugePages 并在部署到生产环境之前确定性能基准的最佳实践。
1. 要验证您的内核当前未启用 HugePages,请运行 cat 命令:
# sudo cat /proc/sys/vm/nr_hugepages
0
在前面的示例中,nr_hugepages 参数值为 0,表示 HugePages 未启用。
2. 要启用 HugePages,请运行以下命令以将该内核参数值设置为 2048:
# sudo sysctl -w vm.nr_hugepages=2048
vm.nr_hugepages = 2048
3. 要验证系统在重新启动后分配 HugePages,请将以下条目添加到 /etc/sysctl.conf:
# sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf
4. 运行 cat 命令以验证更改:
# sudo cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.zone_reclaim_mode=1
vm.nr_hugepages=2048
5. 重新启动实例。
6. 重新启动之后,再次运行 cat 命令以验证 HugePages 值和配置:
# sudo cat /proc/sys/vm/nr_hugepages
2048
7. 检查 /proc/meminfo 中的可用 HugePages:
# sudo grep Huge /proc/meminfo
HugePages_Total: 2048
HugePages_Free: 2048
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
关于先前示例中的每个变量的定义,请参阅 kernel.org 上的 HugePages。
现在,您的服务器上已启用了 HugePages。
8. 根据需要在其他应用程序上配置 HugePages。
**注意:**禁用 HugePages 的方法:
1. 将 nr_hugepages 改回 0。
2. 删除 sysctl.conf 中的条目。
3. 重新启动服务器以使其生效。