Menu Close
24.3. 在引导时配置 HugeTLB
HugeTLB 子系统支持的页大小取决于具体架构。x86_64 架构支持 2 MB
巨页和 1 GB
gigantic 节页。
这个步骤描述了如何在引导时保留 1 GB
页面。
流程
以 root 用户身份将以下行附加到
/etc/default/grub
文件中的内核命令行选项中,为1 GB
页面创建一个 HugeTLB 池:default_hugepagesz=1G hugepagesz=1G
使用编辑的默认文件重新生成
GRUB2
配置:如果您的系统使用 BIOS 固件,请执行以下命令:
# grub2-mkconfig -o /boot/grub2/grub.cfg
如果您的系统使用 UEFI 框架,请执行以下命令:
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
在
/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
注意
-
您可以在运行时尝试保留更多 1GB 页面,方法是写入
nr_hugepages
。但是,内存碎片可能会导致此类保留失败。保留1 GB
页面的最可靠方法是,使用hugetlb-reserve-pages.sh
脚本(在早期引导时运行)。 - 保留静态巨页可有效地减少系统可用的内存量,并阻止它正确利用内存容量。虽然正确大小的保留巨页池可能会对使用它的应用程序有用,但保留巨页的过度或未使用的池最终会降低整体系统性能。当设置保留的巨页池时,请确定系统可以正确地利用其完整的内存容量。
其他资源
-
systemd.service(5)
手册页 -
/usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt
file