12.3.2. 使用 systemd 服务单元配置 HugeTLB


要在用户空间引导过程中配置 Huge Translation Lookaside Buffer (HugeTLB)页面,请使用 systemd 服务单元。这会在内核初始化后保留内存,但在大多数服务启动后,请确保应用程序可以访问所需的页面。

先决条件

  • 在您的系统中必须具有 root 权限。

流程

  1. /usr/lib/systemd/system/ 目录中创建一个名为 hugetlb-gigantic-pages.service 的新文件,并添加以下内容:

    [Unit]
    Description=HugeTLB Gigantic Pages Reservation
    DefaultDependencies=no
    Before=dev-hugepages.mount
    ConditionPathExists=/sys/devices/system/node
    ConditionKernelCommandLine=hugepagesz=1G
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/lib/systemd/hugetlb-reserve-pages.sh
    
    [Install]
    WantedBy=sysinit.target
  2. /usr/lib/systemd/ 目录中创建一个名为 hugetlb-reserve-pages.sh 的新文件,并添加以下内容:

    #!/bin/sh
    
    nodes_path=/sys/devices/system/node/
    if [ ! -d $nodes_path ]; then
        echo "ERROR: $nodes_path does not exist"
        exit 1
    fi
    
    reserve_pages()
    {
        echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
    }
    
    reserve_pages <number_of_pages> <node>

    <number_of_pages > 替换为您要保留的 1GB 页面数,将 & lt;node> 替换为您要保留的节点名称。例如:要在 node0 上保留两个 1 GB 页面,在 node1 上保留 1GB 页面,将 &lt ;number_of_pages& gt ; 替换为 node01 代表 node1

  3. 创建可执行脚本:

    # chmod +x /usr/lib/systemd/hugetlb-reserve-pages.sh
  4. 启用早期引导保留:

    # systemctl enable hugetlb-gigantic-pages.service
    注意
    • 您可以在运行时尝试保留更多 1 GB 页面,方法是写入 nr_hugepages 属性。但是,为了避免因为内存碎片导致失败,在引导过程中在早期保留 1 GB 页面。
    • 保留静态巨页可以有效地减少系统可用的内存量,并阻止它使用内存容量。虽然正确大小的保留巨页池对使用它的应用程序有用,但保留巨页的过度或未使用的池最终会降低整体系统性能。当设置保留的巨页池时,请确定系统可以正确地使用其完整的内存容量。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部