3.2. 为实时虚拟化主机配置巨页
要进一步降低 RHEL 10 的虚拟机(VM)的延迟,请将主机设置为使用巨页。巨页可能会显著提高使用大量内存的应用程序的性能,通常是 RT 应用程序的情况。
有关巨页的更多信息,请参阅配置巨页。
先决条件
- 您的主机满足 实时虚拟化的系统要求。
- 您已为实时虚拟机主机配置了 TuneD。具体步骤请参阅 为实时虚拟化主机配置 TuneD。
流程
将默认巨页大小设置为 1 gibibyte。
grubby --args "default_hugepagesz=1G" --update-kernel ALL
$ grubby --args "default_hugepagesz=1G" --update-kernel ALL
Copy to Clipboard Copied! 在主机上保留巨页。
echo <X> > /sys/devices/system/node/node_<Y>_/hugepages/<hugepages-size_dir>/nr-hugepages
$ echo <X> > /sys/devices/system/node/node_<Y>_/hugepages/<hugepages-size_dir>/nr-hugepages
Copy to Clipboard Copied! 在这个命令中,按如下所示替换变量:
- < x>,带有要保留的巨页数。这个值取决于虚拟机数量及其具有的内存量。如果您正在运行单个虚拟机,请从两个 1GB 页面开始。
- <y> 带有固定实时 vCPU 的 NUMA 节点数量。
-
<hugepage-size_dir >,其巨页大小为 kB。例如,对于 2MB 巨页,这将是
hugepages-2048kB
。
重要此命令临时设置巨页。因此,在启动任何实时虚拟机前,您必须在每个主机重启后使用该命令。要避免这种情况,请执行以下可选步骤,使巨页持久。
可选:如果要使巨页配置持久,还要执行以下操作:
创建名为
/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=default_hugepagesz=1G [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/hugetlb-reserve-pages [Install] WantedBy=sysinit.target
[Unit] Description=HugeTLB Gigantic Pages Reservation DefaultDependencies=no Before=dev-hugepages.mount ConditionPathExists=/sys/devices/system/node ConditionKernelCommandLine=default_hugepagesz=1G [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/hugetlb-reserve-pages [Install] WantedBy=sysinit.target
Copy to Clipboard Copied! 创建名为
/usr/lib/systemd/hugetlb-reserve-pages'
的文件,其内容如下:This example reserves 2 1G pages on node0 and 1 1G page on node1. You can modify it to your needs or add more lines to reserve memory in other nodes. Don't forget to uncomment the lines, otherwise then won't be executed. reserve_pages 2 node0 reserve_pages 1 node1
#!/bin/bash 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 } # This example reserves 2 1G pages on node0 and 1 1G page on node1. You # can modify it to your needs or add more lines to reserve memory in # other nodes. Don't forget to uncomment the lines, otherwise then won't # be executed. # reserve_pages 2 node0 # reserve_pages 1 node1
Copy to Clipboard Copied! 使用以下命令启用早期引导保留:
chmod +x /usr/lib/systemd/hugetlb-reserve-pages sudo systemctl enable hugetlb-gigantic-pages sudo systemctl status hugetlb-gigantic-pages
$ chmod +x /usr/lib/systemd/hugetlb-reserve-pages $ sudo systemctl enable hugetlb-gigantic-pages $ sudo systemctl status hugetlb-gigantic-pages
Copy to Clipboard Copied! -
取消注释
/usr/lib/systemd/hugetlb-reserve-pages
底部两行,并根据您的巨页保留要求更新它们。
- 重启以应用所有配置更改。