
子类__内存管理篇
文章平均质量分 86
RK3399平台入门到精通系列之内存管理篇
内核笔记
一直从业于半导体行业,曾为Linux内核开源文档社区提交过若干文档。
主要从事Linux、Android相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统。
展开
-
RK3399平台开发系列讲解(内存篇)Linux缓存系统
📢缓存是指将经常访问或新写入的数据从称作缓存的更快的小存储器提取或写入其中的过程。原创 2022-10-31 23:15:57 · 1769 阅读 · 4 评论 -
RK3399平台开发系列讲解(内存篇)15.34、 Linux 进程内存布局
我们一起来看下进程内部的虚拟内存布局,或者说单一进程是如何安排自己的各种数据的。原创 2022-07-27 22:22:58 · 1589 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.33、为什么可用内存会远超物理内存?
CPU 为程序员虚拟化了一层内存,我们只需要与虚拟内存打交道就可以了。原创 2022-07-21 22:06:05 · 1699 阅读 · 9 评论 -
RK3399平台开发系列讲解(内存篇)15.32、进程地址空间
📢 用户进程通常会多次调用malloc()或使用mmap()映射文件到用户空间进行读写等操作,这些操作都会要求在虚拟地址空间中分配内块,这些内存块基本上都是离散的。malloc()是用户态下常用于分配内存的接口函数,mmap()是用户态下常用于建立文件映射或匿名映射的函数。这些进程地址空间在内核中使用vm_area_s.原创 2022-05-12 00:34:38 · 2059 阅读 · 9 评论 -
RK3399平台开发系列讲解(内存篇)15.32、什么是内存管理?
什么是内存管理?原创 2022-05-06 22:17:25 · 2166 阅读 · 7 评论 -
RK3399平台开发系列讲解(内存篇)15.31、内存调优参数
🚀返回专栏总目录文章目录一、内存管理调优参数1.1、影响内存管理区水位的调优参数 min_free_kbytes1.2、影响页面分配的参数 lowmem_reserve_ratio二、影响页面回收的参数2.1、sappiness2.2、zone_reclaim_mode2.3、watermark_boost_factor2.4、watermark_scale_factor三、影响脏页回写的参数沉淀、分享、成长,让自己和他人都能有所收获!😄📢 对嵌入式产品做性能调优的过程中,避免不了需要深入了解和.原创 2022-05-02 21:29:51 · 2574 阅读 · 6 评论 -
RK3399平台开发系列讲解(内存篇)15.30、伙伴系统分配算法
伙伴系统分配算法原创 2022-02-27 00:50:00 · 1892 阅读 · 8 评论 -
RK3399平台开发系列讲解(内存篇)15.29、物理内存管理
Linux的内存管理可分为物理内存管理和虚拟内存管理。原创 2022-02-26 00:04:42 · 2696 阅读 · 8 评论 -
RK3399平台开发系列讲解(内存篇)15.28、Linux mmap完全剖析
mmap() 系统调用能够将文件映射到内存空间,然后可以通过读写内存来读写文件。原创 2022-02-03 02:30:30 · 1838 阅读 · 12 评论 -
RK3399平台开发系列讲解(内存篇)1.27、Linux IOMMU
IOMMU用于32位虚拟地址和物理地址的转换,它带有读写控制位,能产生缺页异常以及总线异常中断。原创 2021-11-06 13:51:06 · 2556 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.26、Linux内存是怎么工作的?
Linux 是怎么管理内存,今天我们一探究竟。原创 2022-01-16 16:01:46 · 1806 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.25、Page Cache是怎样产生和释放的?
Page Cache 存在的意义:减少 I/O,提升应用的 I/O 速度。原创 2022-01-05 23:04:10 · 1947 阅读 · 8 评论 -
RK3399平台开发系列讲解(内存篇)15.24、用户态进程的地址空间介绍
Linux将地址空间中的区域称为Virtual Memory Area, 简称VMA,使用struct vm_area_struct来描述。原创 2021-12-27 00:39:21 · 1966 阅读 · 7 评论 -
RK3399平台开发系列讲解(内存篇)15.23、Linux内存性能诊断:Buffer和Cache
我们可以通过free -m命令查看内存占用情况原创 2021-12-19 20:47:58 · 2127 阅读 · 11 评论 -
RK3399平台开发系列讲解(内存篇)15.21、Swapping解决的问题
很多人认为当系统内存不足时应该立即触发内存不足(`Out of memory、OOM`)并杀掉进程,但是 `Swapping` 其实为系统管理员提供了另外一种选择,利用磁盘的交换空间避免程序被直接退出,以降低服务质量的代价换取服务的部分可用性。原创 2018-08-23 19:24:26 · 1346 阅读 · 11 评论 -
RK3399平台开发系列讲解(内存篇)15.20、默认页大小是4KB的原因
我们都知道 Linux 会以页为单位管理内存,无论是将磁盘中的数据加载到内存中,还是将内存中的数据写回磁盘,操作系统都会以页面为单位进行操作,哪怕我们只向磁盘中写入一个字节的数据,我们也需要将整个页面中的全部数据刷入磁盘中。Linux 同时支持正常大小的内存页和大内存页(Huge Page),绝大多数处理器上的内存页的默认大小都是 4KB。原创 2018-01-30 20:58:32 · 1365 阅读 · 13 评论 -
RK3399平台开发系列讲解(内存篇)15.19、Linux 虚拟内存
虚拟内存是操作系统物理内存和进程之间的中间层,它为进程隐藏了物理内存这一概念,为进程提供了更加简洁和易用的接口以及更加复杂的功能。原创 2018-08-17 18:56:45 · 3470 阅读 · 12 评论 -
RK3399平台开发系列讲解(内存篇)15.18、Linux swap的实现
swap并不是一种优化机制,而是一种不得已而为之的手段,防止在内存紧张的时刻,操作系统性能骤降以至瞬间崩溃。swap的价值主要体现在可以把这个崩溃的时间提升至几小时到几十个小时不等。...原创 2017-11-18 20:54:52 · 2530 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.17、物理内存的组织形式
Linux内核将物理内存简单的分为两部分: 用户物理内存空间和内核物理内存空间当用户进程需要访问物理内存时,通过虚拟地址映射到用户物理内存空间这篇博客简单的介绍物理内存组织的相关概念和数据结构。原创 2021-07-02 18:11:19 · 2488 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.16、应用程序的内存布局
在未出现“分页虚拟内存”管理机制之前,操作系统对内存空间采用“分段”的方式进行管理:即将相似的数据放在一起,例如文本段、初始化数据段、未初始化数据段。时至今日,此类内存布局仍在使用,并结合分页虚拟内存共同实现对物理内存的管理。原创 2017-12-17 19:50:41 · 3123 阅读 · 9 评论 -
RK3399平台开发系列讲解(内存篇)15.15、MMU页表存储管理部分
CPU首先在MMU的页表缓存中查找需要获取的数据,如果没有,继续到caches中查找,caches中没有,到memory中查找。理论上MMU越大,命中率越高,性能越好,同时要考虑到面积和成本。原创 2017-12-17 19:35:53 · 1188 阅读 · 9 评论 -
RK3399平台开发系列讲解(内存篇)15.14、内存被覆盖导致启动死机问题
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录一、问题出现二、问题定位三、问题的具体原因一、问题出现随着应用程序不断增加、应用程序功能不断完善,高概率出现设备在启动过程中死机的情况。查看死机时的串口日志,从日志来看,内存被覆盖。二、问题定位应用发现注释掉使用共享内存的代码,不会出现死机。发现自己驱动中共享内存是用kmalloc分配的,隐隐感觉到这与死机时的日志存在某种联系。把kmalloc改用__get_free_pages来分配,...原创 2021-06-06 23:23:31 · 3050 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.13、图解kmem_cache结构体
每个超市(kmem_cache)有两个场所,一个是内部仓库(kmem_cache_node),一个是外面展柜(kmem_cache_cpu)。 展柜里只保留一个slab,只有在展柜(kmem_cache_cpu)中货物被买完后(没有空闲内存的情况下)才会从仓库中换出其他的slab。原创 2021-05-30 18:04:14 · 2441 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.12、内存泄漏时,我们该如何一步步找到根因?
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录设计理念分类管理预取slub分配器对一个内核开发者来讲是既熟悉又陌生的。熟悉是因为在开发的过程中大家总会使用到它,什么kmem_cache_alloc(), kmalloc()都是slub分配器的接口。而陌生是因为大部分开发者都不了解slub分配器的工作机制。像页分配器大家至少还听说过伙伴系统,而slub分配器好像真的一点绯闻都没有。那今天我就尝试用我这粗陋的认知给大家揭开一点点盖头来。设计...原创 2021-05-15 00:48:54 · 2331 阅读 · 8 评论 -
RK3399平台开发系列讲解(内存篇)15.11、如何对内核内存泄漏做些基础的分析?
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录(1)SlobSlob主要为小型的嵌入式系统设计,数据结构相对于Slab来说比较简单,不会占用太多内存。(2)SlubSlub可以说是Slab的升级版,Slab有很多优点,但是同样存在不足之处:①在 Slab 分配器中存在众多的队列,例如针对处理器的本地对象缓存队列,Slab中空闲对象队列,每个 Slab处于一个特定状态的队列中,甚至缓冲区控制结构也处于一个队列之中。有效地管理这些不同的队...原创 2021-05-15 00:30:41 · 2544 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.10、内存管理的基本命令
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比”free”等命令要丰富得多cat /proc/meminfoMemTotal: 152476 kBMemFree: 6000 kBMemAvailable: 20860 kBBuffers: 3656 kB...原创 2021-05-14 00:37:34 · 3102 阅读 · 14 评论 -
RK3399平台开发系列讲解(内存篇)15.9、内存泄漏排查方法
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录step1、判断是否存在内存泄漏或者内存一直申请没有释放的情况step2、内核层的内存泄漏还是应用程序的内存泄漏step3、内核里有内存泄漏排查分析方法step4、应用层程序内存泄漏排查分析方法step1、判断是否存在内存泄漏或者内存一直申请没有释放的情况cat /proc/meminfo可以查询系统内存使用的情况。/proc/meminfo是了解Linux系统内存使用状况的主要接口 ,/pr...原创 2021-05-11 23:14:42 · 2920 阅读 · 11 评论 -
RK3399平台开发系列讲解(内存篇)15.8、free -m命令查看内存占用情况介绍
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录我们可以通过free -m命令查看内存占用情况字段解释total全部内存used已经使用内存free可以使用的内存shared进程间交换空间,可以不关注buffersflash和内存之间用于降低内存碎片和读写频率cache存在cpu内部用于cpu和内存之间快速读写,一级缓存,二级缓存,三级缓存swapflash中的交换分区,...原创 2021-05-11 01:05:46 · 2830 阅读 · 9 评论 -
RK3399平台开发系列讲解(内存篇)15.7、读取进程内存利用率
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录步骤程序步骤①系统进程相关文件路径/proc②获取系统的物理总内存/proc/meminfo③获取进程使用的物理内存/proc/[pid]/status④进程使用的物理内存/系统的物理总内存* 100程序float get_pmem(pid_t p){ int phy = get_phy_mem(p); int total = get_total_mem(); ...原创 2021-05-11 00:49:08 · 2638 阅读 · 11 评论 -
RK3399平台开发系列讲解(内存篇)15.6、OOM触发机制
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录1.OOM触发机制2.防止进程被OOM杀死3.lowmem_reserve_ratio与OOM1.OOM触发机制内核使用low memory来跟踪所有的内存分配,这样的话一个16GB内存的系统比一个4GB内存的系统需要消耗更多的low memory,当low memory耗尽,即便系统仍然有剩余内存,仍然会触发oom-killer。Linux使用min_free_kbytes来控制内存回收阀...原创 2021-05-07 10:36:18 · 2701 阅读 · 10 评论 -
RK3399平台开发系列讲解(内存篇)15.5、如何预防内存泄漏导致的系统假死?
为什么需要Slab平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录为什么需要Slab内存碎片问题数据缓存Slab的优点内存碎片问题首先内核会频繁的分配和释放内存,由于每次分配和释放的数据结构不同,所以不可避免的产生内存碎片,也就是内存中存在很多无法使用的小内存段,这时候如果去申请一段比较大的连续内存,即使系统显示可用内存够用也会导致内存分配失败。数据缓存为了提高模块的性能,很多程序员会新建很多空闲链表,也就是说提前在系统中建好特定数据结原创 2021-05-05 00:05:48 · 2520 阅读 · 11 评论 -
RK3399平台开发系列讲解(内存篇)15.4、进程的哪些内存类型容易引起内存泄漏?
???? 为什么应用程序正在运行时忽然被 OOM kill 掉了????? 为什么进程的后台持续地运行,系统中可用内存越来越少?原创 2021-05-03 22:51:17 · 2697 阅读 · 9 评论 -
RK3399平台开发系列讲解(内存篇)15.3、内核内存泄漏是什么?
在进行具体的分析之前,我们需要先对内核内存泄漏有个初步的概念,究竟内核内存泄漏是指什么呢?这得从内核空间内存分配的基本方法说起。原创 2021-05-02 23:42:05 · 2550 阅读 · 8 评论 -
RK3399平台开发系列讲解(内存篇)15.2、 Page Cache是怎样产生和释放的?
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录全局__arm_ioremap_caller函数指针变量__arm_ioremap_pfn_callerarch/arm/include/asm/io.h/* * ioremap and friends. * * ioremap takes a PCI memory address, as specified in * Documentation/io-mapping.txt. *...原创 2021-04-11 18:04:04 · 2644 阅读 · 8 评论 -
RK3399平台开发系列讲解(内存篇)15.1、Linux 的 Page Cache
一、Page Cache 是什么?二、如何查看系统的 Page Cache?三、 page 与 Page Cache四、Swap 与缺页中断原创 2021-03-25 22:31:34 · 2757 阅读 · 12 评论