关于linux:Linux-中的大内存页hugepage是个什么

6次阅读

共计 2593 个字符,预计需要花费 7 分钟才能阅读完成。

本文中咱们会具体介绍大内存页 huge page,让你可能答复:Linux 中的“大内存页”是什么?在 RHEL6、RHEL7、Ubuntu 等 Linux 中,如何启用 / 禁用“大内存页”?如何查看“大内存页”的以后值?首先让咱们从“大内存页”的基础知识开始讲起。Linux 中的“大内存页”是个什么玩意?“大内存页”有助于 Linux 零碎进行虚拟内存治理。顾名思义,除了规范的 4KB 大小的页面外,它们还能帮忙治理内存中的微小的页面。应用“大内存页”,你最大能够定义 1GB 的页面大小。在系统启动期间,你能用“大内存页”为应用程序预留一部分内存。这部分内存,即被“大内存页”占用的这些存储器永远不会被替换出内存。它会始终保留其中,除非你批改了配置。这会极大地提高像 Oracle 数据库这样的须要海量内存的应用程序的性能。为什么应用“大内存页”?在虚拟内存治理中,内核保护一个将虚拟内存地址映射到物理地址的表,对于每个页面操作,内核都须要加载相干的映射。如果你的内存页很小,那么你须要加载的页就会很多,导致内核会加载更多的映射表。而这会升高性能。应用“大内存页”,意味着所须要的页变少了。从而大大减少由内核加载的映射表的数量。这进步了内核级别的性能最终有利于应用程序的性能。简而言之,通过启用“大内存页”,零碎具只须要解决较少的页面映射表,从而缩小拜访 / 保护它们的开销!如何配置“大内存页”?运行上面命令来查看以后“大内存页”的具体内容。root@kerneltalks # grep Huge /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB 从下面输入能够看到,每个页的大小为 2MB(Hugepagesize),并且零碎中目前有 0 个“大内存页”(HugePages_Total)。这里“大内存页”的大小能够从 2MB 减少到 1GB。运行上面的脚本能够晓得零碎以后须要多少个微小页。该脚本取之于 Oracle。#!/bin/bash

hugepages_settings.sh

Linux bash script to compute values for the

recommended HugePages/HugeTLB configuration

Note: This script does calculation for all shared memory

segments available when the script is run, no matter it

is an Oracle RDBMS shared memory segment or not.

Check for the kernel version

KERN=uname -r | awk -F. '{printf("%d.%d\n",$1,$2); }'

Find out the HugePage size

HPG_SZ=grep Hugepagesize /proc/meminfo | awk {'print $2'}

Start from 1 pages to be on the safe side and guarantee 1 free HugePage

NUM_PG=1

Cumulative number of pages required to handle the running shared memory segments

for SEG_BYTES in ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"
do
MIN_PG=echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q
if [$MIN_PG -gt 0]; then

  NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`

fi
done

Finish with results

case $KERN in
‘2.4’) HUGETLB_POOL=echo "$NUM_PG*$HPG_SZ/1024" | bc -q;

      echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;

‘2.6’ | ‘3.8’ | ‘3.10’ | ‘4.1’ ) echo “Recommended setting: vm.nr_hugepages = $NUM_PG” ;;

*) echo "Unrecognized kernel version $KERN. Exiting." ;;

esac

End

将它以 hugepages_settings.sh 为名保留到 /tmp 中,而后运行之:root@kerneltalks # sh /tmp/hugepages_settings.sh
Recommended setting: vm.nr_hugepages = 124 你的输入相似如上后果,只是数字会有一些出入。这意味着,你零碎须要 124 个每个 2MB 的“大内存页”!若你设置页面大小为 4MB,则后果就变成了 62。你明确了吧?配置内核中的“大内存页”本文最初一部分内容是配置下面提到的 内核参数,而后从新加载。将上面内容增加到 /etc/sysctl.conf 中,而后输出 sysctl -p 命令从新加载配置。vm.nr_hugepages=126 留神咱们这里多加了两个额定的页,因为咱们心愿在理论须要的页面数量之外多一些额定的闲暇页。当初,内核曾经配置好了,然而要让利用可能应用这些“大内存页”还须要进步内存的应用阀值。新的内存阀值应该为 126 个页 x 每个页 2 MB = 252 MB,也就是 258048 KB。你须要编辑 /etc/security/limits.conf 中的如下配置:soft memlock 258048hard memlock 258048 某些状况下,这些设置是在指定利用的文件中配置的,比方 Oracle DB 就是在 /etc/security/limits.d/99-grid-oracle-limits.conf 中配置的。这就实现了!你可能还须要重启利用来让利用来应用这些新的微小页。(LCTT 译注:此外原文有误,“通明大内存页”和“大内存页”不同,而且,在 Redhat 零碎中,“大内存页”不是默认启用的,而“通明大内存页”是启用的。因而这个段落删除了。)
参考链接:
Understanding hugepages in Linux

正文完
 0