一、 内存映射与页表 1. 内存映射
我们通常所说的内存容量,指的是物理内存,只有内核才可以直接访问物理内存,进程并不可以。
嵌入式进阶教程分门别类整理好了,看的时候十分方便,由于内容较多,这里就截取一部分图吧。
linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。
虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(单个 cpu 指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。比如最常见的 32 位和64 位系统:
既然每个进程都有一个这么大的地址空间,那么所有进程的虚拟内存加起来,自然要比实际的物理内存大得多。所以,并不是所有的虚拟内存都会分配物理内存,只有那些实际使用的虚拟内存才会分配物理内存,并且分配后的物理内存,是通过内存映射来管理的。内存映射,其实就是将虚拟内存地址映射到物理内存地址。
2. 页表
为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系,如下图所示:
页的大小只有 4 kb ,导致的另一个问题就是,当物理内存很大时,页表会变得非常大,占用大量物理内存。
3. 页表的简单工作原理
下图是比较简单情况下的示意图,用于描述在32位系统下,页大小为4k时,操作系统如何为进程的虚拟地址和实际物理地址进行转换:
目录表,是用于索引页表的数据结构,其中存储着目录项(共1024个、每个4b,因此目录表共4b*1024=4k ),每个目录项指向一个页表,即可以存储1024个页表。
页表,用来存放物理地址页的起始地址,即页表项(也是共1024个、每个4b,因此一个页表的大小也是4k),由于目录表最多可存1024个页表,因此页表的最大大小是1024*4k=4m。
页表项,每个页表项指向4k的物理内存页,因此页表一共可以指向的物理内存大小为:1024(页表数)*1024(每个页表的页表项数)*4k(一个页表项指向的物理内存大小)=4g
假如一个进程,访问的物理内存有1gb,即262144个内存页,在32位系统中,页表需要262144*4/1024/1024=1mb,而在64位系统下,页表占用的空间增加1倍,即2mb。
对于linux系统中运行的oracle数据库,假如数据库的sga大小12gb,如果一个oracle process访问到了所有的sga内存,其页表大小会是24mb,如果有300个左右的会话,那么这300个连接的页表会达到7200mb,只不过并不是每个进程都会访问到sga中所有的内存。
页表大小可以通过 /proc/meminfo 的 pagetables部分查看。
为了解决页表项过多的问题,linux 提供了两种机制,也就是多级页表和大页(hugepage),后面我们以大页为重点。
二、 大页 大页顾名思义,就是比较大的页,通常是2mb。由于页变大了,需要的页表项也就小了,占用物理内存也减少了。
1. 大页的优点
减少页表大小:默认页面大小为 4k,而大页为 2048k,意味着系统需要处理的页面减少了 512 倍。大页的页表在各进程之间可以共享,也降低了页表的大小。
减少页表遍历:大页覆盖更大的连续虚拟地址范围,使得cpu中的tlb(可理解为cpu对页表的cache)命中率大大提高,减少了遍历页表以从虚拟地址获取物理地址的次数。
减少页表查找开销:
避免swap:大页内存只能锁定在物理内存中,不可swap,因此没有page-in/page-out机制开销,避免了swap引起的性能影响。
减少了内存开销:由于要处理的页面数量较少,明显减少了页表访问可能出现的瓶颈。
2. 大页的缺点
要预先分配
需要重启主机生效
当服务器内存或sga调整时,需要对应调整大页设置
如果分配不当(过多、过少、os参数配置错误),反而可能引起严重问题
严重问题可能包括:
(绝)大部分大页内存未能使用,严重浪费内存
数据库性能差
系统内存不足或交换过多
数据库实例无法启动
关键系统服务失败
极高的sys cpu使用率
3. 大页的分配方法
检查/proc/meminfo,确认系统支持hugepage
hugepages total:系统中配置的大页数。
hugepages free:没有访问过的大页数。
hugepages rsvd:已经分配但是还未使用的页面数。
hugepagesize:大页size,这里为2mb,有的内核配置中可能为4mb。
设置memlock
设定oracle用户可以锁定内存的大小。这个参数在/etc/security/limits.conf文件,单位是kb。开启大页时,这个参数很重要,如果设置过小,可能导致大页无法被用到,白白浪费内存。
根据 what is memlock and how to calculate the values for memlock? (doc id 2511230.1) 文档建议:
未启用大页:至少为3g
启用为大页:至少设置为服务器内存的90%
建议大小:内存大小 > memlock大小 >= 大页总内存 > sga
例如:
oracle soft memlock 18878464oracle hard memlock 18878464 重新以oracle用户连接到数据库服务器,使用ulimit -a命令便可看到对应设置
改为auto方式管理sga
对于11g,由于hugepage只能用于共享内存,不能用于pga,所以不能使用amm,只能分别设置sga和pga。sga同样只能是auto方式管理,需要将sga_target_size设为大于0的合适值。
查看建议的大页数量
到目前为止,大页只能用于共享内存段等少量类型的内存。一旦将物理内存用作大页,那么这些物理内存就不能作其他用途,比如作为进程的私有内存。因此不能将过多的内存设置为大页,通常将大页用作oracle数据库的sga。
oracle linux: shell script to calculate values recommended linux hugepages / hugetlb configuration (doc id 401749.1) 提供了计算建议值的脚本。需要先设置好sga等参数、启动oracle、并以oracle用户执行该脚本
修改/etc/sysctl.conf文件,设置vm.nr_hugepages=建议值,执行sysctl –p命令
vm.nr_hugepages这个参数值为上步计算出的建议值。然后检查/proc/meminfo,如果hugepages_total小于设置的数量,表明没有足够的连续物理内存用于这些大内存页,需要重启服务器。
重启服务器和数据库,检查大页使用情况
大页是惰性分配的,用到才会分配。随着数据库的使用,可以在/proc/meminfo中查看hugepages_free是否已经减少。如果已经减少,表明已经使用到hugepage memory。
三、 透明大页 在一些linux系统中,transparent hugepage被默认开启,它允许大页做动态的分配,而不是系统启动后就分配好,根据oracle mos doc:1557478.1,transparent hugepage导致了很多的问题,建议将其关闭。
1. 查看是否启用
#未启用应该看到[never]cat /sys/kernel/mm/transparent_hugepage/enabled 如果这个文件不存在,则检查
#未启用应该看到[never]cat /sys/kernel/mm/redhat_transparent_hugepage/enabled 2. 关闭透明大页
redhat & centos
# 重启后失效echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag # 开机时设置never到以上文件中echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.localecho 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local suse linux(区别在于开机设置never需要配置到的文件不同)
# 重启后失效echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag# 开机时设置never到以上文件中echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/init.d/boot.localecho 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/init.d/boot.localchmod +x /etc/init.d/boot.local
3G用户已达1808万 TD用户769万户
直接数字频率合成器设计方法
佳能EOS R5s将支持“像素偏移功能”增加分辨率
苹果降低iPhone12 mini产量
白噪声电子催眠器的频谱图
Linux内存映射与页表详解
半导体IC测试解决方案测试的指标包含哪些?
美国促使生产商重新激活手机FM芯片,三星表示下代手机激活FM功能
环境温度对服务器芯片功耗的影响
安达发|工业软件APS排程系统简介
揭秘大脑植入芯片背后公司Neuralink的雄心与壮志
直线电机生产厂家谈中国车企在俄罗斯销量飙升
如何将任何视频刻录到 DVD
我国电视机制造业,抢占了世界显示技术变革的先机
魅蓝note2拆解 为了优化体验而生
亿图脑图模板社区3.0震撼来袭!交互体验惊喜升级
高电压大电流蓄电池放电测试仪的功能有哪些
三防漆高低温试验后,出现裂纹原因分析
「技术」太阳能抽水系统的应用
波音787梦想客机的供氧系统中有多达25%的部分可能存在故障