Fork me on GitHub

随笔分类 -  Memory Management

摘要:1. 页表转换寄存器描述符 1.1,页表/页目录结构 基于前言中的内核配置,内核采用39位虚拟地址,因此可寻址范围为2^39 = 512G,采用(linux 默认为五级页表,另外还有PUD,P4D,由于本文只配置三级,其他两项不予罗列)3级页表结构,分别为: PGD (Page Global Dir 阅读全文
posted @ 2024-05-25 20:25 yooooooo 阅读(31) 评论(0) 推荐(0) 编辑
摘要:1. 简介 Android的ION子系统的目的主要是通过在硬件设备和用户空间之间分配和共享内存,实现设备之间零拷贝共享内存。说来简单,其实不易。在Soc硬件中,许多设备可以进行DMA,这些设备可能有不同的能力,以及不同的内存访问机制。 ION是Google在Android 4.0 ICS中引入,用于 阅读全文
posted @ 2024-03-21 10:55 yooooooo 阅读(35) 评论(0) 推荐(0) 编辑
摘要:使能KSM KSM只会处理通过madvise系统调用显式指定的用户进程地址空间,因此用户程序想使用这个功能就必须在分配地址空间时显式地调用madvise(addr,length,MADV_MERGEA BLE)。如果用户想在KSM中取消某一个用户进程地址空间的合并功能,也需要显式地调用madvise 阅读全文
posted @ 2024-03-20 14:56 yooooooo 阅读(5) 评论(0) 推荐(0) 编辑
摘要:一、配置内核 首先配置内核,使其支持导出内核页表到debugfs下面: Kernel hacking > > [*] Export kernel pagetable layout to userspace via debugfs 配置完后,重新编译内核,并用新内核启动,就会在/sys/kernel/ 阅读全文
posted @ 2024-03-03 14:43 yooooooo 阅读(27) 评论(0) 推荐(0) 编辑
摘要:背景介绍 在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低。但在晚上高峰时期,在CPU刚刚超过50%之后却出现了指数上升,服务在几分钟之内不可用。最终定位到是tcmalloc在内存分配的时候使用自旋 阅读全文
posted @ 2024-02-22 20:55 yooooooo 阅读(56) 评论(0) 推荐(1) 编辑
摘要:一、前言 C语言提供了动态内存管理功能, 在C语言中, 程序员可以使用 malloc() 和 free() 函数显式的分配和释放内存. 关于 malloc() 和free() 函数, C语言标准只是规定了它们需要实现的功能, 而没有对实现方式有什么限制, 这多少让那些追根究底的人感到有些许迷茫, 比 阅读全文
posted @ 2024-02-22 20:01 yooooooo 阅读(80) 评论(0) 推荐(0) 编辑
摘要:在Linux中,透明巨页(Transparent HugePage)和巨页(HugePage)是两种不同的内存管理技术。 透明巨页是Linux内核中的一项特性,旨在提高内存的利用率和性能。它通过将内存分配为更大的巨页(通常为2MB或1GB),减少了对内存页表的访问次数,从而提高了内存访问的效率。透明 阅读全文
posted @ 2023-11-23 11:38 yooooooo 阅读(61) 评论(0) 推荐(0) 编辑
摘要:## Page migration 页迁移技术是内核中内存管理的一种比较重要的技术,最早该技术诞生于NUMA系统中(Page migration [LWN.net]),后续由于内存规整以及CMA和COW技术的出现,也需要用到页迁移技术,逐渐称为内核内存子系统中占有比较重要地位。 ## 页迁移在NUM 阅读全文
posted @ 2023-08-21 23:40 yooooooo 阅读(261) 评论(0) 推荐(0) 编辑
摘要:所谓反向映射是相对于从虚拟地址到物理地址的映射,反向映射是从物理页面到虚拟地址空间VMA的反向映射。 RMAP能否实现的基础是通过struct anon_vma、struct anon_vma_chain和sturct vm_area_struct建立了联系,通过物理页面反向查找到VMA。 用户在使 阅读全文
posted @ 2023-08-13 18:21 yooooooo 阅读(111) 评论(0) 推荐(0) 编辑
摘要:文件映射缺页中断和匿名页面缺页中断主要区别在于缺页时的处理方式和触发原因。 对于文件映射缺页中断,当程序需要访问文件映射的某个页面但该页面尚未调入内存时,就会触发文件映射缺页中断。这时,操作系统会根据文件映射的约定从磁盘加载相应的文件内容到内存中,然后更新页表,使得程序可以继续执行。 而对于匿名页面 阅读全文
posted @ 2023-08-12 17:03 yooooooo 阅读(32) 评论(0) 推荐(0) 编辑
摘要:今天我们就来讨论下这种缺页异常,让大家彻底理解它。注:本文使用linux-5.0内核源代码。文章分为以下几节内容: 1. 匿名映射缺页异常的触发情况 2. 0页是什么?为什么使用0页? 3. 源代码分析 3.1 触发条件 3.2 第一次读匿名页 3.3 第一次写匿名页 3.4 读之后写匿名页 4. 阅读全文
posted @ 2023-08-12 16:58 yooooooo 阅读(158) 评论(0) 推荐(0) 编辑
摘要:文件映射和匿名映射都是操作系统中对于内存映射的两种类型,主要应用于进程间的通信或者大量数据的处理。 - 文件映射,也就是内存映射文件,是把一个文件或者文件的一部分映射到进程的地址空间,它允许对文件进行随机访问。当进程对这块内存区域进行读写还操作时,系统会自动把更改写回磁盘文件。这样做的好处是可以像访 阅读全文
posted @ 2023-08-10 23:28 yooooooo 阅读(132) 评论(0) 推荐(0) 编辑
摘要:# Linux:/proc/meminfo参数详细解释 ## 一、Linux内存总览图 ![](https://img-blog.csdnimg.cn/20200412131343205.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVp 阅读全文
posted @ 2023-07-21 14:49 yooooooo 阅读(1274) 评论(0) 推荐(0) 编辑
摘要:在使用slab分配器进行内存分配时,可能会出现以下缺点: 1. 内存碎片化。由于slab分配器需要将内存分成大小相同的块,如果分配不均衡或者对象大小不同,就容易导致内存碎片化。 2. 性能下降。Slab分配器将内存分成不同的缓存区,每个缓存区都有自己的对象池。因此,当需要分配内存时,需要先找到合适的 阅读全文
posted @ 2023-06-02 10:44 yooooooo 阅读(88) 评论(0) 推荐(0) 编辑
摘要:在linux内核中,所有的物理内存都用struct page结构来描述,这些对象以数组形式存放,而这个数组的地址就是mem_map。内核以节点node为单位,每个node下的物理内存统一管理,也就是说在表示内存node的描述类型struct pglist_data中,有node_mem_map这个成 阅读全文
posted @ 2023-04-19 17:00 yooooooo 阅读(251) 评论(0) 推荐(0) 编辑
摘要:1.ARMv8-A架构 基于ARMv8-A架构的处理器最大可以支持到48根地址线,也就是寻址2的48次方的虚拟地址空间,即虚拟地址空间范围为0x0000_0000_0000_0000~0x0000_FFFF_FFFF_FFFF,共256TB。 一个是从0x0000_0000_0000_0000到0x 阅读全文
posted @ 2023-04-13 09:11 yooooooo 阅读(503) 评论(0) 推荐(0) 编辑
摘要:页面置换算法 进程运行过程中,如果发生缺页中断,而此时内存中有没有空闲的物理块时,为了能够把所缺的页面装入内存,系统必须从内存中选择一页调出到磁盘的对换区。但此时应该把哪个页面换出,则需要根据一定的页面置换算法(Page Replacement Algorithm)来确定。 2.OPT( 最佳⻚⾯置 阅读全文
posted @ 2023-04-05 20:28 yooooooo 阅读(155) 评论(0) 推荐(0) 编辑
摘要:THP机制 使用huge page,可以在TLB容量固定的情况下,提高TLB的命中率,即便TLB miss,因为减少了页表级数,也可以减少查找页表的时间。在内存虚拟化中,由于地址转换需要的级数更多,huge page能发挥的作用就显得更为重要。 针对64位的x86-64系统,huge page的大小 阅读全文
posted @ 2022-11-28 10:19 yooooooo 阅读(208) 评论(0) 推荐(0) 编辑
摘要:大页内存 大页内存(HugePages),有时也叫“大内存页”、“内存大页”、“标准大页”。操作系统以内存页为单位管理内存,内存页的大小对系统性能有影响。内存页设得太小,内存页会很多,管理内存页的数组会比较大,耗内存,同时TLB(Translation Lookaside Buffer,页表寄存缓冲 阅读全文
posted @ 2022-11-28 10:19 yooooooo 阅读(368) 评论(0) 推荐(0) 编辑
摘要:本文目的 本文补充校正一些Linux内核开发者关于GFP_ATOMIC的认知不完整的地方,阐述GFP_ATOMIC与free内存watermark的关系,并明确什么时候应该用GFP_ATOMIC申请内存。目录: GFP_ATOMIC vs. GFP_KERNEL 内存水位,PF_MEMALLOC和G 阅读全文
posted @ 2022-11-13 23:24 yooooooo 阅读(92) 评论(0) 推荐(0) 编辑