如何在我的 Amazon EC2 Linux 实例上配置 HugePages?

上次更新时间:2020 年 6 月 15 日

我想要提高 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.    重新启动服务器以使其生效。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?