跳至内容

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

2 分钟阅读
0

我想在我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例上配置 HugePages。

解决方法

**注意:**在将 HugePages 部署到生产环境之前,最佳做法是在测试环境中配置 HugePages 并对性能进行基准测试。在 x86_64 系统上,HugePage 的大小只能为 2MB 或 1GB。有关 HugePages 的更多信息,请参阅 Oracle 网站上的 Configuring HugePages on Linux(在 Linux 上配置 HugePages)。

**先决条件:**要验证您的应用程序或数据库是否支持 HugePages,请咨询您的供应商。此外,要确定可用内存量,请运行以下命令来验证 EC2 实例的总内存:

free -m

要在 Linux 实例上配置 HugePages,请完成以下步骤:

  1. 运行以下命令,验证您的内核是否未启用 HugePages:

    sudo cat /proc/sys/vm/nr_hugepages

    如果命令输出为 0,则表示未启用 HugePages。

  2. 要计算所需的 HugePages 数量,请使用以下公式:<br id=hardline_break/> HugePages 数量 = 所需内存 / HugePage 大小<br id=hardline_break/> **注意:**请将结果四舍五入取整,确保创建足够的内存页。

  3. 运行以下命令,启用 HugePages 并设置内核参数值:

    sudo sysctl -w vm.nr_hugepages=2048

    **注意:**请将 2048 替换为您计算出的 HugePages 数量。<br id=hardline_break/> 输出示例:

    vm.nr_hugepages = 2048
  4. 要验证系统在重启后是否会分配 HugePages,请将以下条目添加到 /etc/sysctl.conf 文件中:

    sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf

    **注意:**请将 2048 替换为您计算出的 HugePages 数量。

  5. 要验证您的更改,请运行以下命令:

    sudo cat /etc/sysctl.conf

    在命令输出中,验证是否存在 vm.nr_hugepages 的值。<br id=hardline_break/> 输出示例:

    # 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
  6. 重启实例

  7. 重新运行以下命令,验证 HugePages 的值和配置:

    sudo cat /proc/sys/vm/nr_hugepages

    如果输出是您计算出的 HugePages 数量,则已启用 HugePages。<br id=hardline_break/> 输出示例:

    # sudo cat /proc/sys/vm/nr_hugepages
    2048
  8. 要检查 /proc/meminfo 中可用的 HugePages,请运行以下命令:

    sudo grep Huge /proc/meminfo

    输出示例:

    # sudo grep Huge /proc/meminfo
    HugePages_Total:    2048
    HugePages_Free:     2048
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB

    有关每个 HugePages 值的定义,请参阅 kernel.org 上的 HugePages

要停用 HugePages,请完成以下步骤:

  1. 运行以下命令将 nr_hugepages 重置为 0

    sudo sysctl -w vm.nr_hugepages=0
  2. sysctl.conf 中移除以下条目:

    sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf
  3. 重启实例

AWS 官方已更新 6 个月前