38.3. 在引导时配置 HugeTLB
HugeTLB 子系统支持的页大小取决于具体架构。x86_64 架构支持 2 MB
巨页和 1 GB
gigantic 节页。
这个步骤描述了如何在引导时保留 1 GB
页面。
流程
要为
1 GB
页创建一个 HugeTLB 池,请启用default_hugepagesz=1G
和hugepagesz=1G
内核选项:# grubby --update-kernel=ALL --args="default_hugepagesz=1G hugepagesz=1G"
在
/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
在
/usr/lib/systemd/
目录中创建一个名为hugetlb-reserve-pages.sh
的新文件,并添加以下内容:在添加以下内容时,使用您要保留的 1GB 页面数替换 number_of_pages,并使用您要保留的节点的名称替换 node。
#!/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
例如,要在 node0 上保留两个
1 GB
页面,在 node1 上保留 1GB 页面,将 number_of_pages 替换 2(对于 node0)和 1(对于 node1):reserve_pages 2 node0 reserve_pages 1 node1
创建可执行脚本:
# chmod +x /usr/lib/systemd/hugetlb-reserve-pages.sh
启用早期引导保留:
# systemctl enable hugetlb-gigantic-pages
注意
-
您可以通过在任何时候写入
nr_hugepages
,来尝试在运行时保留更多1 GB
页。但是,为了避免因为内存碎片而导致的失败,在引导过程中的早期保留1 GB
页。 - 保留静态巨页可有效地减少系统可用的内存量,并阻止它正确利用内存容量。虽然正确大小的保留巨页池可能会对使用它的应用程序有用,但保留巨页的过度或未使用的池最终会降低整体系统性能。当设置保留的巨页池时,请确定系统可以正确地利用其完整的内存容量。
其他资源
-
您系统上的
systemd.service (5)
手册页 -
/usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt
文件