随笔分类 - Memory Management
摘要:kmalloc 使用 Slab Cache 的核心原因是 提升小内存分配效率 和 减少内存碎片。其设计依赖于 Linux 内核的 Slab 分配器机制,并通过 flags 参数控制分配行为。以下是具体分析: 1. 为什么 kmalloc 使用 Cache? (1) 性能优化:快速分配与释放 Slab
阅读全文
摘要:ioremap_np 和 ioremap 都是用于将物理地址映射到内核虚拟地址空间的函数,但它们有一些关键区别: 作用 ioremap: 用于将设备的物理地址映射到内核虚拟地址空间,使得驱动程序可以通过虚拟地址访问设备寄存器。它通常用于内存映射I/O(MMIO) [1] [2]. ioremap_n
阅读全文
摘要:ARMv8/v9 CPU Cache Size ARM架构通过一系列的系统寄存器来提供CPU和系统的详细信息,包括缓存的大小和配置。在ARMv8和ARMv9架构中,这些信息通常可以通过读取如下寄存器来获取: CTR_EL0 (Cache Type Register) : 提供L1缓存的线大小等信息。
阅读全文
摘要:1.1 Cache 概念简介 1.1.1 Cache Type Cache 通常按照层级分类,比如常见的 L1 Cache/L2 Cache/L3 Cache …: 通常 L1 Cache 又分为 ICache (instruction Cache) 和 DCache (data Cache)。 其
阅读全文
摘要:一、背景 page泄漏也是linux中常见的一种内存泄漏类型,本文将介绍page owner的定位方法,由于page owner存储的信息位于page_ext区域,这里也简单介绍一下page_ext的存储区域,page如何找到对应的page_ext信息,最后还是一个简单的测试驱动演示如何使用page
阅读全文
摘要:背景介绍: 内存对于OS来说就像我们生活中的水和电,这么重要的资源管理起来是很花心思的。我们知道Linux中的物理内存被按页框划分,每个页框都会对应一个struct page结构体存放元数据,也就是说每块页框大小的内存都要花费sizeof(struct page)个字节进行管理。 所以系统会有大量的
阅读全文
摘要:dmabuf是什么? 可以参考我之前写的一篇文章,在这篇文章中有介绍dma_buf:BufferManager_驱动的buffermanager-CSDN博客 dmabuf_dump工具介绍(基于Android 14) dmabuf_dump是一个可执行文件,接收参数调用libdmabufinfo.
阅读全文
摘要:dma_alloc_coherent 和 dma_map_single 的主要区别在于 内存分配方式、地址一致性 和 适用场景。 1. dma_alloc_coherent 特点: 分配并映射 一个 DMA 兼容的缓冲区。 返回的 CPU 地址和 DMA 地址 一致性(coherent),即 CPU
阅读全文
摘要:1. 概述 在linux启动过程中会打印出如下信息,这些信息为我们呈现出系统下的保留内存空间情况。 Reserved memory: created DMA memory pool at 0x4c000000, size 8 MiB OF: reserved mem: initialized nod
阅读全文
摘要:一、memblock简介 现实的物理内存是被截的一段一段的了,并不是一马平川的。伙伴系统要进行初始化,就需要知道哪些区域是可用的,哪些区域已经被占用了、被保留了,剩余的才可以用于伙伴系统的初始化。因此需要一个早期的内存管理机制,即 memblock 机制. 全局变量: struct memblock
阅读全文
摘要:“Writeback” is the process of writing dirty pages back to persistent storage, allowing those pages to be reclaimed for other uses. Making writeback wo
阅读全文
摘要:Android 低内存终止守护程序 (lmkd) 进程可监控运行中的 Android 系统的内存状态,并通过终止最不必要的进程来应对内存压力大的问题,使系统以可接受的性能水平运行。 内存压力简介 并行运行多个进程的 Android 系统可能会遇到系统内存耗尽,需要更多内存的进程出现明显延迟的情况。内
阅读全文
摘要:writeback 回写 buffer IO 通过 page cache 进行缓存,减少对底层存储设备的直接读写,同时能够提高整体性能 写入到 page cache 的数据不会立刻写入后端设备,而是标记为“脏”,并被加入到脏页链表,后续由内核中的回写进程周期性的将脏页写回到底层存储设备 下面主要分析
阅读全文
摘要:概述 lowmemorykiller的作用就是当内存比较紧张的时候去及时杀掉一些对用户来说不那么重要的进程,回收内存,保证手机的正常运行。 安卓平台lowmemorykiller机制演进可以描述为:从早期的Kernel space Lowmemorykiller 到 UserSpace Lowmem
阅读全文
摘要:一、DDR基础知识 1. 几个频率 (1) 核心频率:真实运行频率。 (2) 倍增系数:DDR通过数据预取技术放大速率,每代ddr倍率是固定的,ddr=2, ddr2=4, ddr3=8, ddr4=8, ddr5=16 (3) 有效频率;厂商标注的频率,可以理解为数据传输速率。厂商也想逐步淡化其它
阅读全文
摘要:一、前言 这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程。另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的。 二、从CPU角度看到的地址和从DMA控制器看到的地址有什么不同?
阅读全文
摘要:前言 最近朋友圈、微信群(ARM-Trustzone-TEE-AT)掀起一阵学习SMMU的热潮,作为一名安全领域的渣渣 ,势必要蹭一蹭这个“热点”,也学习一下吧,反正早晚都要学,因为它和安全的关系还是比较大的。学习是一件长期的过程,本文就先简单理一下概念吧。 1、SMMU总结 1.1、SMMU的ti
阅读全文
摘要:《ARM Architecture Reference Manual ARMv8-A》里面有Memory层级框架图,从中可以看出L1、L2、DRAM、Disk、MMU之间的关系,以及他们在整个存储系统中扮演的角色。 涉及到的相关文档有: 《ARM Architecture Reference Man
阅读全文
摘要:1. 前言 本文将从provider的角度,介绍怎样在linux kernel dmaengine的框架下,编写dma controller驱动。 2. dma controller驱动的软件框架 设备驱动的本质是描述并抽象硬件,然后为consumer提供操作硬件的友好接口。dma controll
阅读全文
摘要:1. 前言 从我们的直观感受来说,DMA并不是一个复杂的东西,要做的事情也很单纯直白。因此Linux kernel对它的抽象和实现,也应该简洁、易懂才是。不过现实却不甚乐观(个人感觉),Linux kernel dmaengine framework的实现,真有点晦涩的感觉。为什么会这样呢? 如果一
阅读全文


浙公网安备 33010602011771号