在RHEL/CentOS 7/8中配置大页面的3个简单步骤
在本文中,我将分享配置大页面的步骤,并创建大页面池以根据Red Hat和CentOS 7 Linux的请求将页面分配给应用程序。
我们将使用hugeadm工具配置大型页面
在Red Hat/CentOS 7/8中配置大页面
我们可以使用内核可调参数vm.nr_hugepages来配置大页面。
第1步:检查大页面状态
检查vm.nr_hugepages的现有值
[root@centos8 ~]# sysctl -a | grep vm.nr_hugepages vm.nr_hugepages = 0
因此,看来在我的CentOS 8服务器中禁用了vm.nr_hugepages。
我们知道AnonHugePages和vm.nr_hugepages之间的区别吗?
其中" AnonHugePages"被称为"透明HugePages",而" vm.nr_hugepages"被称为"显式透明HugePages"。
无论如何,这些主题不其中我们知道我们的大页面已禁用,因此我们将启用和配置2048个大页面,因此我们将在内核中保留2MB的大页面内存
:更新/etc/sysctl.conf中的vm.nr_hugepages
编辑/etc/sysctl.conf
文件以配置大页面并在vm.nr_hugepages中指定大页面的数量:
vm.nr_hugepages = 2048
:刷新内核参数
接下来,我们必须使用sysctl -p刷新内核参数,以激活新的hugepages值
[root@centos8 ~]# sysctl -p
验证新的大页预订
[root@centos8 ~]# sysctl -a | grep vm.nr_hugepages vm.nr_hugepages = 2048
:重新启动
用一种方式,我们可以说"重新引导不是强制性的,但强烈建议"。
因为我们知道vm.nr_hugepages现在正在向我们显示新的保留。但是由于提供的内存量必须由内核保留,因此我们必须确保"有足够的连续内存可用于保留"
我们可以在以下位置阅读更多内容:Linux中的Linux内存管理入门指南
只有在早期启动阶段,当应用程序或者系统进程都不会使用系统内存,并且内核可以轻松地为大型页面分配所提供的值时,才可能这样做
因此,强烈建议在生产环境中配置大页面后重新启动
[root@centos8 ~]# systemctl reboot
在Red Hat/CentOS 7中配置大页面池
hugeadm实用程序由软件包" libhugetlbfs-utils"提供,可用于显示和配置系统大页面池。
池的大小设置为"最小"和"最大"阈值。
"最小值"是由内核预先分配的,并保证将其保留为大页,直到池缩小为止。
如果设置为" maximum",则当应用程序请求的大页面超出池的最小大小时,系统将动态分配页面。
无法保证不能分配超出此最小池大小的页面。
:安装libhugetlbfs-utils
" hugeadm"实用程序由软件包" libhugetlbfs-utils"提供,可用于显示和配置系统巨大的页面池。
池的大小设置为最小和最大阈值。
执行以下命令安装" libhugetlbfs-utils"软件包。
说明:
在RHEL系统上,我们必须具有RHN的有效订阅,或者我们可以配置本地脱机存储库,通过该本地脱机存储库,yum
软件包管理器可以安装提供的rpm及其依赖项。
# yum -y install libhugetlbfs libhugetlbfs-utils
:检查支援的HugePage大小
在配置大页面池之前,请列出系统支持的所有页面大小,即使没有可用的池也是如此
# hugeadm --page-sizes-all 2097152 1073741824
因此,当前我们的Red Hat和CentOS 7服务器支持2MB和1GB的大页面大小
此命令显示系统支持的每个页面大小,并配置了一个池
# hugeadm --page-sizes 2097152
因此,当前我们的服务器配置为使用2MB的大页面大小。
我们也可以从/proc/cpuinfo
获取此信息。
我们还应该知道如何检查CPU是否支持大页面
# grep Hugepagesize /proc/meminfo Hugepagesize: 2048 kB
以下命令显示hugetlbfs
的所有活动安装点
# hugeadm --list-all-mounts Mount Point Options /dev/hugepages rw,relatime
对于系统支持的每个页面大小,这将显示池中巨大页面的最小,当前和最大数目。
最小值由内核预先分配,并确保在缩小池之前一直保持为大页面。
如果设置了最大值,则当应用程序请求的大页面超出池的最小大小时,系统将动态分配页面。
无法保证可以分配的页面数超过此最小池大小。
由于我们的大页面大小为2MB,我们可以看到2097152的大页面池,而对于其他大页面大小,则没有配置池
# hugeadm --pool-list Size Minimum Current Maximum Default 2097152 12850 12850 12850 * 1073741824 0 0 0
其中
Minimum - This is the size of the static pool and there will always be at least this number of hugepages in use by the system, either by applications or kept by the kernel in a reserved pool. Current - This value is the number of hugepages currently in use, either by applications or stored on the kernels free list. Maximum - This value is the largest number of hugepages that can be in use at any given time.
第2步:使用hugeadm配置HugePages
(--pool-pages-min
)选项设置或者调整页面大小的池中的最小大页面数。
大小可以分别通过添加K,M或者G来以字节或者千字节,兆字节或者千兆字节指定,也可以以DEFAULT的形式指定,DEFAULT使用系统默认的大页面大小作为大小。
其中我们将4096设置为2MB HugePage的最小页面数。
# hugeadm --pool-pages-min 2MB:4096
(--pool-pages-max
)选项设置或者调整最大页面数。
注意:虽然可以保证应用程序可以使用最小页面数,但是当应用程序请求的大页面数在最小和最大池大小之间时,不能保证系统可以按需分配页面。
# hugeadm --pool-pages-max 2MB:12850
:验证新的大页面池
再次验证池列表
# hugeadm --pool-list Size Minimum Current Maximum Default 2097152 4096 4096 12850 * 1073741824 0 0 0