
Linux 内存管理
文章平均质量分 83
分析理解Linux 内存管理的机制、原理,以及可帮助我们系统调优的的参数。
Adrian503
中国科学院大学计算机硕士,研究领域Linux内核、嵌入式软件、BSP等。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux 内核铁三角 CPU 内存 和 IO的关系
当我们谈起Linux 铁三角的时候,我们指的是 CPU 内存 和 I/OCPU 这边呢,主要关注调度器,调度算法,这一块相对来说呢,学起来比较容易,I/O 这一块比较独立,不过一般不能孤立的去看IO,一般要透过 cpu 和内存去看,内存在 CPU 和 IO之间肩负这一个中间的角色,内存和IO 直接可以进行交换,一般来说 CPU 或者程序员都不会直接读写I/O(除非是direct io),只会读写内存。虽然内存管理是铁三角里最难的, 但是我们还是要搞明白内存管理的细节的,如果掌握不了,...原创 2021-03-26 16:12:00 · 1376 阅读 · 2 评论 -
彻底理解 linux 的内存回收
本文试图用最浅显的语言说明以下问题:1、free 命令中的buffer/cache 是什么意思?2、内存回收的机制是什么?3、内存回收的门限是什么?也就是什么时候进行回收?4、如何手动清除cache?原创 2023-06-19 17:31:06 · 2112 阅读 · 0 评论 -
linux 内存管理 (五) 实际工程问题以及调优
● DMA和cache一致性● 内存的cgroup● 性能方面的调优:page in/out, swapin/out● Dirty 页面的写回,Dirty ratio的一些设置● 内存的回收-水位的设置● swappiness为什么内存的大小 会严重影响你系统的性能?因为 CPU 操作IO 都是通过 内存来实现的,内存大小直接关系到 IO的速度。内存大 page cache 大,程序切换时,页表切换就不用挤出匿名页来做交换。程序切换就很流畅。dirty ...原创 2021-04-14 18:04:52 · 960 阅读 · 0 评论 -
linux 内存管理 (四) 内存与IO的交互
● 内存与I/O的交换● page cache● free命令的详细解释● read、write和mmap● file-backed的页面和匿名页● swap以及zRAM● 页面回收和LRU1、page cache 的概念CPU 读取 IO , MEM 在功能上其实是充当了一个 cache的角色,会很快。read write 一个文件的交互过程如下:第一次读,内存中没有内容,内核会给其申请一页,然后从disk中,读取1页内容到内存中的这...原创 2021-04-13 17:10:43 · 939 阅读 · 0 评论 -
linux 内存管理 (三) 进程的内存消耗- 内存泄漏
进程的内存消耗和泄漏● 进程的VMA。● 进程内存消耗的4个概念:vss、rss、pss和uss● page fault的几种可能性,major和minor● 应用内存泄漏的界定方法● 应用内存泄漏的检测方法:valgrind和addresssanitizer1、进程的内存消耗当我们谈到进程消耗的内存,这时候只看 user space 的,是不看内核空间的内存的。32位的处理器下,每个进程都有一个0-3G的用户空间,但是它们的内核空间是共享的,只有一个。一...原创 2021-04-13 11:43:46 · 2719 阅读 · 1 评论 -
linux 内存管理 (二) 内存的动态申请和释放
上一章我们了解到,我们所有的内存都是通过 buddy 算法来的,因为 buddy 是直面最底层的内存,它底下会拆分为 1页 2页 4页 8页 .....等等的内存组合。申请内存,最底层的API ,都是buddy 级别的API ,get_free_pages page_alloc 都是 buddy级别的API ,但是 buddy 级别的申请都很大,最小都是1页,我们在应用程序或者内核中,经常会用到 申请 16/32个字节,但是这样你底层给它申请1页,不就浪费了吗基于这样的原理,l...原创 2021-03-29 16:12:52 · 3244 阅读 · 0 评论 -
linux 内存管理 (一) 基本的一些概念
本文将从 从硬件原理 到内核实现 配置内存的参数(内存什么时候回收,脏数据什么时候收回?) 从应用程序上的内存泄漏还有工程中一些常遇见的问题 ,比如 DMA 的内存从哪里来?连续内存分配器?来理解内存管理。1、硬件原理和分页管理几个概念:内存空间和内存的区别CPU 访问外面的资源,有两种方法,第一种是通过 指针地址的方式去访问内存空间,另外一种是通过 IN/OUT 的方式去访问 IO空间(有一些寄存器),这一种方式是X86所特有的,在RISC中没有。内存空...原创 2021-03-26 16:15:11 · 879 阅读 · 3 评论 -
DMA内存大小、连续性、cache一致性、如何配置CMA的总结
1、DMA ZONE的大小只能是16M ?这个答案在32位X86计算机的条件下是成立的,但是在其他的绝大多数情况下都不成立。首先我们要理解DMA ZONE产生的历史原因是什么。DMA可以直接在内存和外设之间进行数据搬移,对于内存的存取来讲,它和CPU一样,是一个访问master,可以直接访问内存。DMA ZONE产生的本质原因是:不一定所有的DMA都可以访问到所有的内存,这本质上是硬件的设计限制。牛B的DMA引擎是访问内存范围是没有限制的,就可以不用DMA ZONE的内存,可以不使用GPF...原创 2021-04-09 17:15:21 · 5124 阅读 · 0 评论 -
dma 和 cache的一致性
在介绍 cache 一致性之前,先明确一些概念~1、之前谈到内存空间的时候,我们知道内存空间包括 内存 和 寄存器空间。2、CPU 、cache、内存、外设 之间的关系。以及cache 一致性 是如何导致的CPU写内存的时候有两种方式:1. write through: CPU直接写内存,不经过cache。2. write back: CPU只写到cache中。cache的硬件使用LRU算法将cache里面的内容替换到内存。通常是这种方式。我们假设MEM里面有一块红色的区域...原创 2021-04-09 14:18:36 · 5641 阅读 · 2 评论 -
谈起内存时,常见的三个词 contiguous consistent coherent
谈起内存,经常谈到了三个词 contiguous /consistent / coherent,这里想区别一下。1、contiguous contiguous memory allocator 连续内存分配器 CMAcontiguous 更多的来指内存的连续性,而 consistent 和coherent 更多指是操作内存时,发生的一些状况。2、consistent比如,在多核处理器上,一个进程的多个线程可能并发地运行在多个物理PE上,这个时候,对于共享的内存区域就...原创 2021-04-08 14:23:28 · 990 阅读 · 0 评论 -
Linux性能剖析的模型和方法
CPU、内存和IO关系USE模型 USE模型 吞吐率和延迟的特点 什么东西影响了吞吐率和延迟 各种各样的Linux剖析工具 火焰图 All-in-one和阅码场开源项目LEP(Linux Easy Profiling) Linux 做性能优化是一个 full stack 的工作,需要你非常了解 CPU MEM IO ,因为你不知道系统的瓶颈在哪里,你都不知道内存和IO交换的复杂的细节,不理解什么时候会引入延迟,CPU 和 c...原创 2021-03-30 17:03:03 · 361 阅读 · 0 评论 -
Linux 内存管理 前言--UMA和NUMA两种存储器模型
共享存储型多处理机的两种模型UMA : ( Uniform Memory Access ) 均匀存储器存取 模型NUMA : ( Nonuniform Memory Access ) 非均匀存储器存取 模型1、UMA 的一个例子: SMP传统的多核运算是使用SMP来设计的,SMP (Symmetric mullti-processor)对称多处理器,指的是多个CPU对称工作,无主次或从属关系。各个CPU 共享相同的物理内存,每个CPU访问内存中的任何地址,所需要的时间是相同的,因此...转载 2021-01-07 11:17:23 · 2328 阅读 · 0 评论 -
linux 内存管理回答的问题,你都能解释清楚吗?
一切的学习都是为了解决问题,而不是为了学习而学习。为了学习而学习,这种行为实在是太傻了,因为最终也学不好。所以我们要弄清楚内存管理究竟能解决什么样的问题。首先站在 Linux 的角度,有以下几个问题:1、MMU 是什么?被设计出来是解决什么问题的?2、CPU是如何访问到内存的? https://mp.weixin.qq.com/s/SdsT6Is0VG84WlzcAkNCJA?3、进程的 4G 虚拟地址空间是如何产生的?设计虚拟地址空间的目的?4G空间是如何划分的?...原创 2020-12-31 14:47:00 · 330 阅读 · 0 评论