04_15页表缓存(TLB)和巨型页

前言

linux里面每个物理内存(RAM)页的一般大小都是4kb(32位就是4kb),为了使管理虚拟地址数变少

加快从虚拟地址到物理地址的映射 建议配值并使用HugePage巨型页特性

cpu和mmu和页表缓存(TLB)和cache和ram的关系

CPU看到的都是虚拟地址,需要经过MMU的转化,才能变成物理地址,然后访问cache或者主存中的物理地址。

从下图看得出来 cpu内置了mmu模块

MMU模块包含了TLB和TWU两个子模块。TLB是一个高速缓存,用于缓存虚拟地址到物理地址的转换结果。

页表的查询过程是由TWU硬件自动完成的,但是页表的维护是需要操作系统实现的,页表存放在主存RAM中。

页表查询(为了获取物理地址):

页表的查询是一个耗时的过程,理想情况下,TLB命中,可以从中直接得到虚拟地址对应的物理地址。

当TLB未命中的时候,MMU才会通过TWU查询页表,从而翻译虚拟地址得到物理地址。

获取物理地址(为了获取物理内容):

得到物理地址后,首先要查询该物理地址的内容是否存在于cache中,若cache命中,则直接取出物理地址对应的内容返回给处理器。

若cache没有命中,会进一步访问主存获取相应的内容,然后回写到cache,并返回给处理器。如果没能在页表中查询到虚拟地址对应的物理地址,则会触发一个与MMU相关的缺页异常,在异常处理的过程中,会将EMMC中相关的数据加载到主存,然后建立相应的页表,然后将物理地址对应的内容返回给cache及处理器。

上面说了这么多 就是因为tlb这个页表缓存空间小 CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系放在tlb中

一个页4k的话 太多虚拟地址和物理地址的映射 其实命中率就不高 所以引入了巨型页

操作系统对ram的管理

对于内存的管理(物理内存+虚拟内存),大多数操作系统采用了分段或分页的方式进行管理。

分段是粗粒度的管理方式,而分页则是细粒度管理方式,分页方式可以避免内存空间的浪费。

相应地,也就存在内存的物理地址与虚拟地址的概念。

通过前面这两种方式,CPU必须把虚拟地址转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。

linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会按照LRU算法在适当的时候将物理内存中不经常使用的内存页自动交换到虚拟内存中,而将经常使用的信息保留到物理内存(ram)。(真的要用到不常用的虚拟内存地址参考上面的去emmc里寻找内容)

通常情况下,Linux默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。因此Hugepage便因此而来。

linux系统中如何看当前巨型页的使用剩余等

上面的普及就差不多了 主要是还没发现需要对tlb和hugepage的编写地方

用的时候再完善

巨型页的信息

cat /proc/memoryinfo

Total 巨型页池总数

Free 没有分配的

Supr 临时的巨型页

巨型页池中的巨型页可分为两种:

永久巨型页:是保留的,不能有其他用途,被预先分配到巨型页池,当进程释放永久巨型页的时候,

永久巨型页被归还到巨型页池。

临时巨型页:也称为多余的(surplus)巨型页,当永久巨型页用完的时候,可以从页分配器分配临时巨型页;

进程释放临时巨型页的时候,直接释放到页分配器。当设备长时间运行后,内存可能碎片化,分配临时巨型页可能

会失败。

相关推荐
酷炫的水壶22 分钟前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
夜影风2 小时前
Redis集群创建时出现“Node xxx.xxx is not empty”问题处理
数据库·redis·缓存
utf8mb4安全女神2 小时前
【Redis数据库】哨兵集群/redis集群/安装配置/主从复制/数据持久化操作/数据结构/安全限制/PHP redis/
linux·服务器·数据结构·数据库·redis·缓存
xto_coo4 小时前
锡膏存储方法有哪些?
缓存
犹豫的大炮6 小时前
jQuery最核心的基础设施之一——数据缓存模块进化史
前端·缓存·jquery
宠友信息7 小时前
资源权限与钱包流水在即时通讯源码后端架构中的设计
java·spring boot·redis·websocket·缓存
rebibabo8 小时前
Java高并发底层原理(六)—— 多核 CPU 如何保持缓存一致
java·缓存·cas·缓存一致性·cache line·longadder·mesi协议
nVisual8 小时前
nVisual:AI驱动的智能排障,平均响应时间缩短40%
android·人工智能·缓存
阿拉斯攀登9 小时前
RAG 性能优化:缓存、批量与并发
人工智能·缓存·性能优化·embedding·agent·loop·rag
XLYcmy1 天前
核内调度问题的分层优化:缓存管理与性能均衡策略 模型评价 模型缺点与改进方向
缓存·ai·启发式算法·图神经网络·遗传算法·数模·模拟退火