当前位置: 首页 > Linux

标准大页面和透明大页面

时间:2023-04-06 23:49:20 Linux

Linux中的大页面(StandardHugePages)和透明大页面(TransparentHugePages)分为大页面(StandardHugePages)和透明大页面(transparenthugepages)两种。内存以块或页的形式进行管理。目前,一些系统用于大数据训练的默认页面大小为4096字节,即4K。1MB内存等于256页;1GB内存等于256,000页。CPU有一个内置的内存管理单元,其中包含这些页面的列表,每个页面都由一个页表条目引用。当内存越来越大时,CPU需要管理这些内存页的成本就越高,这会对操作系统的性能产生影响。HugePagesHugepages是在LinuxKernel2.6之后引入的。目的是用大页内存代替传统的4kb内存页,以适应越来越大的系统内存,使操作系统能够支持现代硬件架构的大页容量功能。大页面有两种格式:2MB和1GB。2MB页块大小适合GB级内存,1GB页块大小适合TB级内存;2MB是默认页面大小。TransparentHugePagesTransparentHugePages缩写为THP,这是RHEL6中引入的功能,Linux6默认开启透明大页面。由于Hugepages难以手动管理,通常需要对代码进行较大的改动才能有效使用,RHEL6开始引入TransparentHugePages,THP是一个抽象层,可以自动创建、管理和使用传统的大页面。THP为系统管理员和开发人员消除了使用传统大页面的许多复杂性,并且由于THP的目标是提高性能,其他开发人员(来自社区和RedHat)已经在各种系统、配置、应用程序和工作负载中实现了它。THP在.这允许THP的默认设置提高大多数系统配置的性能。但是,不建议将THP用于数据库工作负载。两者最大的区别在于:标准大页面管理是一种预分配方式,而透明大页面管理是一种动态分配方式。标准大页面的页面大小[root@localhost~]#grepHugepagesize/proc/meminfoHugepagesize:2048kB注意:THP目前只能映射异步内存区域,例如堆和栈空间。使用Hugepages的好处是Oracle官方是推荐我们使用Hugepages的,它有以下好处:更大的PageSize和更少的#ofPages:Defaultpagesize是4K而HugeTLBsize是2048K。这意味着系统需要处理的页面减少512倍。减少页表遍历:由于HugePage比常规页面覆盖更大的连续虚拟地址范围,因此使用HugePages的每个TLB条目获得TLB命中的概率高于常规页面.这减少了遍历页表以从虚拟地址获取物理地址的次数。更少的开销:在虚拟内存系统(任何现代操作系统)上,每个内存操作实际上是两个抽象内存操作。使用HugePages,由于需要处理的页面数量较少,因此显然避免了页表访问可能出现的瓶颈。更少的内存使用:来自Oracle数据库perspe主动地,使用HugePages,与常规大小的页面相比,Linux内核将使用更少的内存来创建页表来维护SGA地址范围的虚拟到物理映射。这使得更多内存可用于进程私有计算或PGA使用。禁止交换:我们必须避免在Linux操作系统上发生交换,文档1295478.1。HugePages是不可交换的(而普通页面是)。因此没有页面替换机制开销。HugePages被普遍认为是固定的。一个非常大的分页区域(即50GB内存的1300万个页表条目)并且将使用大量的CPU资源。当使用HugePages时,kswapd不参与管理它们。SeealsoDocument361670.1UseHugepagesDadvantage当然使用Huge也有一些缺点:首先需要额外的设置才能开启这个功能,其次Hugepages和Oracle11g新特性AMM(AutomaticMemoryManagement)有冲突,但是ASMM(自动共享内存管理器agement)仍然可以继续使用TransparentHugepages的问题。Oracle官方虽然推荐我们使用Hugepages,但是建议我们关闭TransparentHugepages,因为transparenthugepages存在一些问题:RAC环境下的TransparentHugePages(TransparentHugePages)会导致节点异常重启,以及性能问题;在单机环境下,透明大页面(TransparentHugePages)也会造成一些异常的性能问题;注意:32位RHEL6不支持透明大页面。如何关闭透明大页面?#环境:CentOSLinuxrelease7.8.2003(Core)[root@localhost~]#grepHuge/proc/meminfoAnonHugePages:7956480kB----->>返回值不为0,表示THPHugePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048kB查看当前transparent_hugepage状态(以下为启用状态)cat/sys/kernel/mm/transparent_hugepage/enabled[always]madvisenevercat/sys/kernel/mm/transparent_hugepage/defrag[always]madvisenevertransparent关闭hugepage有两种方法,一种是通过命令关闭,另一种是通过修改grub引导文件来关闭:方法1手动临时关闭echonever>/sys/kernel/mm/transparent_hugepage/enabledechonever>/sys/kernel/mm/transparent_hugepage/defrag参数说明neverclose,不使用透明内存always尽量使用透明内存,扫描内存,有512个4k页面可以整合,整合成一个2M页面madvise避免改变内存使用并自动关闭vim/etc/rc.d/rc.localiftest-f/sys/kernel/mm/transparent_hugepage/enabled;thenechonever>/sys/kernel/mm/transparent_hugepage/enabledfiiftest-f/sys/kernel/mm/transparent_hugepage/defrag;thenechonever>/sys/kernel/mm/transparent_hugepage/defragfi授予执行权限chmod+x/etc/rc.d/rc.local方法二备份配置文件cp/etc/default/grub/etc/default/grub.date+%F.bak备份grub配置文件cp/boot/grub2/grub.cfg/boot/grub2/grub.cfg.date+%F.bak编辑/etc/default/grub文件,在GRUB_CMDLINE_LINUX后添加transparent_hugepage=never或者编辑/etc/sysconfig/grub,其实/etc/sysconfig/grub就是/etc/default/grub的软链接但是我遇到过不是软链接的关系,所以编辑/etc/sysconfig/grub没有用户;执行grub2-mkconfig不会将关闭THP的选项写入gurb.cfg。cat/etc/sysconfig/grubGRUB_TIMEOUT=5GRUB_DISTRIBUTOR="$(sed's,release.*$,,g'/etc/system-release)"GRUB_DEFAULT=savedGRUB_DISABLE_SUBMENU=trueGRUB_TERMINAL_OUTPUT="console"GRUB_CMDLINE_LINUX=vreretpolinerd.lvm。lv=centos/rootrd.lvm.lv=centos/swaprd.lvm.lv=centos/usrrhgbquiettransparent_hugepage=never"GRUB_DISABLE_RECOVERY="true"然后使用grub2-mkconfig生成grub.cfg配置文件。grub2-mkconfig-o/boot/grub2/grub.cfginit6------>>>>restart重启后生效cat/proc/cmdlineBOOT_IMAGE=/vmlinuz-3.10.0-1127.el7.x86_64root=/dev/mapper/rhel-rootrocrashkernel=autord.lvm.lv=rhel/rootrd.lvm.lv=rhel/swaprd.lvm.lv=rhel/usrrhgbquiettransparent_hugepage=nevercat/sys/kernel/mm/transparent_hugepage/enabledalwaysmadvise[never]---->>>[never]表示成功禁用THPcat/sys/kernel/mm/transparent_hugepage/defrag------>>>这个应该是内存碎片整理[always]madvisenevergrepHug/proc/meminfoAnonHugePages:0kB---------->>>如果返回值为零,则表示成功禁用THPHUgePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048kBExtendedcontentusage监控可以查看/sys/kernel/mm/transparent_hugepage/khugepaged下的信息一个扫描周期扫描的内存页数pages_to_scan(default4096=16MB)howoftentoscanscan_sleep_millisecs(default10000=10sec)howoftentodefragmentalloc_sleep_millisecs(Default60000=60sec)原作者:郭·如来