当前位置:首页 > 文章列表 > 文章 > linux > 一文读懂Linux内核内存映射与页表

一文读懂Linux内核内存映射与页表

来源:良许Linux教程网 2025-01-18 11:10:18 0浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《一文读懂Linux内核内存映射与页表》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

一、内存映射与页表

1. 内存映射

一般情况下,我们所指的内存容量指的是物理内存,只有内核才有权限直接访问物理内存,而进程不能直接进行访问。

嵌入式进阶教程对内容进行了分类整理,使得阅读更加方便。由于内容较为繁多,这里只展示其中的一部分图。

一文读懂Linux内核内存映射与页表

需要的朋友私信【内核】即可领取。

Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。

虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(单个 CPU 指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。比如最常见的 32 位和64 位系统:

一文读懂Linux内核内存映射与页表

既然每个进程都有一个这么大的地址空间,那么所有进程的虚拟内存加起来,自然要比实际的物理内存大得多。所以,并不是所有的虚拟内存都会分配物理内存,只有那些实际使用的虚拟内存才会分配物理内存,并且分配后的物理内存,是通过内存映射来管理的。内存映射,其实就是将虚拟内存地址映射到物理内存地址。

2. 页表

为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系,如下图所示:

一文读懂Linux内核内存映射与页表

页的大小只有 4 KB ,导致的另一个问题就是,当物理内存很大时,页表会变得非常大,占用大量物理内存。

3. 页表的简单工作原理

下图是比较简单情况下的示意图,用于描述在32位系统下,页大小为4K时,操作系统如何为进程的虚拟地址和实际物理地址进行转换:

一文读懂Linux内核内存映射与页表
  1. 目录表,是用于索引页表的数据结构,其中存储着目录项(共1024个、每个4B,因此目录表共4B*1024=4K ),每个目录项指向一个页表,即可以存储1024个页表。
  2. 页表,用来存放物理地址页的起始地址,即页表项(也是共1024个、每个4B,因此一个页表的大小也是4K),由于目录表最多可存1024个页表,因此页表的最大大小是1024*4K=4M。
  3. 页表项,每个页表项指向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
一文读懂Linux内核内存映射与页表
  • 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

到这里,我们也就讲完了《一文读懂Linux内核内存映射与页表》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于Linux,Linux系统,Shell脚本,Linux命令,linux入门,linux教程,linux学习,嵌入式Linux的知识点!

版本声明
本文转载于:良许Linux教程网 如有侵犯,请联系study_golang@163.com删除
豆包说要「普惠」,于是大模型处理图片按「厘」计价了豆包说要「普惠」,于是大模型处理图片按「厘」计价了
上一篇
豆包说要「普惠」,于是大模型处理图片按「厘」计价了
国内首次:国产大型甲醇双燃料船甲醇加注成功
下一篇
国内首次:国产大型甲醇双燃料船甲醇加注成功
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • SEO标题协启动:AI驱动的智能对话与内容生成平台 - 提升创作效率
    协启动
    SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
    7次使用
  • Brev AI:零注册门槛的全功能免费AI音乐创作平台
    Brev AI
    探索Brev AI,一个无需注册即可免费使用的AI音乐创作平台,提供多功能工具如音乐生成、去人声、歌词创作等,适用于内容创作、商业配乐和个人创作,满足您的音乐需求。
    7次使用
  • AI音乐实验室:一站式AI音乐创作平台,助力音乐创作
    AI音乐实验室
    AI音乐实验室(https://www.aimusiclab.cn/)是一款专注于AI音乐创作的平台,提供从作曲到分轨的全流程工具,降低音乐创作门槛。免费与付费结合,适用于音乐爱好者、独立音乐人及内容创作者,助力提升创作效率。
    6次使用
  • SEO标题PixPro:AI驱动网页端图像处理平台,提升效率的终极解决方案
    PixPro
    SEO摘要PixPro是一款专注于网页端AI图像处理的平台,提供高效、多功能的图像处理解决方案。通过AI擦除、扩图、抠图、裁切和压缩等功能,PixPro帮助开发者和企业实现“上传即处理”的智能化升级,适用于电商、社交媒体等高频图像处理场景。了解更多PixPro的核心功能和应用案例,提升您的图像处理效率。
    6次使用
  • EasyMusic.ai:零门槛AI音乐生成平台,专业级输出助力全场景创作
    EasyMusic
    EasyMusic.ai是一款面向全场景音乐创作需求的AI音乐生成平台,提供“零门槛创作 专业级输出”的服务。无论你是内容创作者、音乐人、游戏开发者还是教育工作者,都能通过EasyMusic.ai快速生成高品质音乐,满足短视频、游戏、广告、教育等多元需求。平台支持一键生成与深度定制,积累了超10万创作者,生成超100万首音乐作品,用户满意度达99%。
    9次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码