当前位置: 首页 > 科技观察

什么是Linux中的“hugepage”?

时间:2023-03-20 10:40:52 科技观察

了解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/bash##hugepages_settings.sh##Linuxbash脚本为#recommendedHugePages/HugeTLBconfiguration##计算值##注意:这个脚本计算脚本运行时可用的所有共享内存#段,无论#是否是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_BYTESin`ipcs-m|awk{'打印$5'}|grep"[0-9][0-9]*"`doMIN_PG=`echo"$SEG_BYTES/($HPG_SZ*1024)"|bc-q`如果[$MIN_PG-gt0];然后NUM_PG=`echo"$NUM_PG+$MIN_PG+1"|bc-q`fidone#Finishwithresultcase$KERNin'2.4')HUGETLB_POOL=`echo"$NUM_PG*$HPG_SZ/1024"|bc-q`;echo"推荐设置:vm.hugetlb_pool=$HUGETLB_POOL";;'2.6'|'3.8'|'3.10'|'4.1')echo"推荐设置:vm.nr_hugepages=$NUM_PG";;*)echo"无法识别的内核版本$KERN。Exiting.";;esac#End将它作为hugepages_settings.sh保存到/tmp,然后运行它:root@kerneltalks#sh/tmp/hugepages_settings.shRecommendedsetting:vm.nr_hugepages=124你的输出类似于上面的结果,但是数量会略有不同。这意味着你的系统需要124个“大页面”,每个大小为2MB!如果你将页面大小设置为4MB,结果就变成了62。你明白吗?在内核,本文最后部分是配置上面提到的内核参数,然后reload,在/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中配置。就是这样!您可能还需要重新启动应用程序才能使应用程序使用这些新的大页面。如何禁用“大页面”?默认情况下启用“大页面”。使用以下命令查看HugePages的当前状态。root@kerneltalks#cat/sys/kernel/mm/transparent_hugepage/enabled[always]madvise输出中的[always]标志从不意味着系统启用了“大页面”。如果您使用的是基于RedHat的系统,您应该检查的文件路径是/sys/kernel/mm/redhat_transparent_hugepage/enabled。要禁用“大页面”,请在/etc/grub.conf中的内核行之后添加transparent_hugepage=never并重新启动系统。