当前位置: 首页 > Linux

什么是Linux中的“大页面”

时间:2023-04-06 23:28:41 Linux

本文将为大家详细介绍一下大页面,以便您回答:什么是Linux中的“大页面”?如何在RHEL6、RHEL7、Ubuntu等Linux中启用/禁用“大页面”?如何查看“HugePages”的当前值?首先让我们从“大页面”的基础知识开始。什么是Linux中的“大页面”?“大页面”帮助Linux系统进行虚拟内存管理。顾名思义,除了标准的4KB大小的页面外,它们还有助于管理内存中的大页面。使用大页面,您可以定义最大1GB的页面大小。在系统启动时,可以使用“大页面”为应用程序预留一部分内存。这部分内存,“大页”占用的内存永远不会换出内存。除非您修改配置,否则它将保留在那里。这可以极大地提高Oracle数据库等内存消耗型应用程序的性能。为什么要使用“大页面”?在虚拟内存管理中,内核维护了一张表,将虚拟内存地址映射到物理地址,对于每一次页面操作,内核都需要加载相关的映射。如果你的内存页很小,那么你需要加载很多页,导致内核加载更多的映射表。这会降低性能。使用“大页面”意味着需要更少的页面。从而大大减少了内核加载的映射表的数量。这提高了内核级别的性能,最终有利于应用程序性能。简而言之,通过启用“大页面”,系统工具只??需要处理更少的页面映射表,从而减少访问/维护它们的开销!如何配置“大页面”?运行以下命令查看当前“大页面”的详细内容。root@kerneltalks#grepHuge/proc/meminfoAnonHugePages:0kBHugePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048kB从上面的输出可以看出,每个页面的大小为2MB(Hugepagesize),目前有0“大页面”(HugePages_Total)。这里“大页面”的大小可以从2MB增加到1GB。运行以下脚本可了解系统当前需要多少大页面。此脚本取自Oracle。#!/bin/bashhugepages_settings.shLinuxbash脚本,用于计算推荐的HugePages/HugeTLB配置的值注意:此脚本会计算脚本运行时可用的所有共享内存段,无论是否为OracleRDBMS共享内存段。检查内核版本KERN=uname-r|awk-F。'{printf("%d.%d\n",$1,$2);}'找出HugePagesizeHPG_SZ=grepHugepagesize/proc/meminfo|awk{'print$2'}为了保险起见,从1页开始,保证1个空闲HugePageNUM_PG=1处理正在运行的共享内存段所需的累计页数forSEG_BYTESinipcs-m|awk{'打印$5'}|grep"[0-9][0-9]*"doMIN_PG=echo"$SEG_BYTES/($HPG_SZ*1024)"|bc-qif[$MIN_PG-gt0];然后NUM_PG=`echo"$NUM_PG+$MIN_PG+1"|bc-q`fidoneFinishwithresultcase$KERNin'2.4')HUGETLB_POOL=echo"$NUM_PG*$HPG_SZ/1024"|公元前-q;echo"推荐nded设置:vm.hugetlb_pool=$HUGETLB_POOL";;'2.6'|'3.8'|'3.10'|'4.1')echo"推荐设置:vm.nr_hugepages=$NUM_PG";;*)echo"无法识别的内核版本$克恩。Exiting.";;esacEnd将它保存在/tmp中作为hugepages_settings.sh,然后运行它:root@kerneltalks#sh/tmp/hugepages_settings.sh推荐设置:vm.nr_hugepages=124你的输出将类似于上面的结果,但是数量会略有不同。这意味着你的系统需要124个“大页面”,每个大小为2MB!如果你将页面大小设置为4MB,结果将变为62。你明白吗?配置内核本文的最后一部分是配置上面提到的内核参数,然后重新加载。在/etc/sysctl.conf中添加如下内容,然后输入sysctl-p命令重新加载配置。vm.nr_hugepages=126注意我们多加了两个页面这里,因为除了实际需要的页数之外,我们还想有一些额外的空闲页。现在,内核已经配置好了,但是应用程序需要使用这些“大内存页”,你还需要增加内存使用阈值。新的内存阈值应为126页x每页2MB=252MB,即258048KB。您需要在/etc/security/limits.conf中编辑以下配置:softmemlock258048hardmemlock258048在某些情况下,这些设置是在指定的应用程序文件中配置的,例如OracleDB是在/etc/security/limits中配置的.d/99-grid-oracle-limits.conf。这就是它!您可能还需要重新启动应用程序才能使应用程序使用这些新的大页面。(LCTT译注:另外,原文有误,“transparenthugepages”和“hugepages”是不一样的,而且,在Redhat系统中,默认不开启“hugepages”,而“transparenthugepages”是enabled.Sothisparagraphwasdeleted.)参考链接:UnderstandinghugepagesinLinux