Linux如何设置huge page大页
HugePages(中文名叫大页)是什么,为什么要设置它?
大页的产生:大多数操作系统采用了分段或分页的方式进行管理。分段是粗粒度的管理方式,而分页则是细粒度管理方式,分页方式可以避免内存空间的浪费。相应地,也就存在内存的物理地址与虚拟地址的概念。
通过前面这两种方式,CPU 必须把虚拟地址转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU 会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由 CPU 维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。
Linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会按照 LRU 算法在适当的时候将物理内存中不经常使用的内存页自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。通常情况下,Linux 默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响 CPU 的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。
因此 Hugepage 便因此而来。也就是打破传统的小页面的内存管理方式,使用大页面2M,4M等。如此一来映射条目则明显减少。TLB缓存命中率将大大提高。
HugePages 是从 Linux Kernel 2.6 后被引入的。目的是使用更大的内存页面(memory page size) 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。在 Linux 下,page size 默认是4K,如果使用 HugePages ,默认是2M;
Linux 下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages)。
配置 HugePages 优点:
A)不需要内存页交换;
B)减轻快表压力;
C)减轻换页表的负载;
D)提高内存的性能,降低 CPU 负载;
如果未调整 HugePages ,可能会引发下面的问题:
A)数据库性能低下;
B)出现内存不足或者过度使用交换空间;
C)数据库实例不能被启动;
D)关键性系统服务故障;
HugePages 使用建议
A)如果您的系统经常碰到因为 swap 引发的性能问题,系统毫无疑问需要启用HugePage。
B)OS内存非常大的系统也需要启用HugePage
言归正传,如何设置大页HugePage呢?
设置步骤:
step 1:
A)用计算器计算:
vm.nr_hugepages设置成物理内存*0.8*1024*1024*1024/(2048*1024)
B)在sqlplus中执行以下语句,计算参数合理值(输入物理内存数的80%)
查询参数设置值应该设置多少:
sqlplus / as sysdba
column "kernel.shmmax" format 99999999999999999999
请输入服务器物理内存大小:
select
round(&InputPhysicalMemorySize*0.8*1024*1024*1024/(2048*1024)) as "vm.nr_hugepages",
round(&InputPhysicalMemorySize*0.8*1024*1024*1024) as "kernel.shmmax",
round(&InputPhysicalMemorySize*1024*1024*1024/4096) as "kernel.shmall"
from dual;
vi /etc/sysctl.conf ,把上面查询结果对应值加到文件中
vm.nr_hugepages = 上面查询值
kernel.shmmax = 上面查询值
kernel.shmall = 上面查询值 或kernel.shmall = 1073741824
fs.file-max=6815744
fs.aio-max-nr=1048576
step 2:
vim /etc/security/limits.conf ,添加:
* hard memlock unlimited
* soft memlock unlimited
step 3:
安排重启操作数据库及操作系统,使大页生效
怎么知道当前有没有配置?
A) 命令1查看
cat /proc/sys/vm/nr_hugepages
nr_hugepages 参数值为 0,表示 HugePages 未启用。
B) 命令2查看
cat /proc/meminfo | grep -i huge
AnonHugePages: 43008 kB
HugePages_Total: 2588
HugePages_Free: 2168
HugePages_Rsvd: 2105
HugePages_Surp: 0
Hugepagesize: 2048 kB
free比total小,证明已经设置并且生效,否则没生效 ,用户程序在申请Hugepages的时候,其实是reserve了一块内存,并未真正使用,此时/proc/meminfo中的 HugePages_Rsvd 会增加,而 HugePages_Free 不会减少。
如果是像下面这样显示:
cat /proc/meminfo | grep -i huge
AnonHugePages: 75776 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
可以看到,HugePages_Total,HugePages_Free均为零,证明没有使用,但可以配置。
C)如果不配置锁定内存,在数据库告警日志alert_sid名.log中数据库实例启动时会有类似如下的建议:
RECOMMENDATION:
Total System Global Area size is 5 GB. For optimal performance,
prior to the next instance restart:
1. Large pages are automatically locked into physical memory.
Increase the per process memlock (soft) limit to at least 5 GB to lock
100% System Global Area's large pages into physical memory
说明,hugepage并没有真正使用起来!
Linux如何设置huge page大页
本文2024-09-22 20:22:53发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-113264.html