Fork me on GitHub
侧边栏

随笔分类 -  Memory Management

摘要:iCache是指指令缓存,DCache是指数据缓存。iCache是专门用于存储指令的高速缓存,DCache是用于存储数据的高速缓存。iCache用于存储指令,在CPU执行时将指令从iCache中读取,以提高指令执行的速度;DCache则用于存储数据,如变量、数组等,以避免频繁从内存中读取数据,提高程 阅读全文
posted @ 2023-06-08 16:18 yooooooo 阅读(1288) 评论(0) 推荐(0)
摘要:在使用slab分配器进行内存分配时,可能会出现以下缺点: 1. 内存碎片化。由于slab分配器需要将内存分成大小相同的块,如果分配不均衡或者对象大小不同,就容易导致内存碎片化。 2. 性能下降。Slab分配器将内存分成不同的缓存区,每个缓存区都有自己的对象池。因此,当需要分配内存时,需要先找到合适的 阅读全文
posted @ 2023-06-02 10:44 yooooooo 阅读(198) 评论(0) 推荐(0)
摘要:在linux内核中,所有的物理内存都用struct page结构来描述,这些对象以数组形式存放,而这个数组的地址就是mem_map。内核以节点node为单位,每个node下的物理内存统一管理,也就是说在表示内存node的描述类型struct pglist_data中,有node_mem_map这个成 阅读全文
posted @ 2023-04-19 17:00 yooooooo 阅读(668) 评论(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 阅读(1380) 评论(0) 推荐(0)
摘要:页面置换算法 进程运行过程中,如果发生缺页中断,而此时内存中有没有空闲的物理块时,为了能够把所缺的页面装入内存,系统必须从内存中选择一页调出到磁盘的对换区。但此时应该把哪个页面换出,则需要根据一定的页面置换算法(Page Replacement Algorithm)来确定。 2.OPT( 最佳⻚⾯置 阅读全文
posted @ 2023-04-05 20:28 yooooooo 阅读(342) 评论(0) 推荐(0)
摘要:THP机制 使用huge page,可以在TLB容量固定的情况下,提高TLB的命中率,即便TLB miss,因为减少了页表级数,也可以减少查找页表的时间。在内存虚拟化中,由于地址转换需要的级数更多,huge page能发挥的作用就显得更为重要。 针对64位的x86-64系统,huge page的大小 阅读全文
posted @ 2022-11-28 10:19 yooooooo 阅读(318) 评论(0) 推荐(0)
摘要:大页内存 大页内存(HugePages),有时也叫“大内存页”、“内存大页”、“标准大页”。操作系统以内存页为单位管理内存,内存页的大小对系统性能有影响。内存页设得太小,内存页会很多,管理内存页的数组会比较大,耗内存,同时TLB(Translation Lookaside Buffer,页表寄存缓冲 阅读全文
posted @ 2022-11-28 10:19 yooooooo 阅读(627) 评论(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 阅读(176) 评论(0) 推荐(0)
摘要:在《一文读懂 HugePages的原理》一文中介绍了 HugePages(大内存页)的原理和使用,现在我们来分析一下 Linux 内核是怎么实现 HugePages 分配的。 本文使用 Linux 内核 2.6.23 版本 HugePages分配器初始化 在内核初始化时,会调用 hugetlb_in 阅读全文
posted @ 2022-10-13 17:56 yooooooo 阅读(536) 评论(0) 推荐(1)
摘要:在介绍 HugePages 之前,我们先来回顾一下 Linux 下 虚拟内存 与 物理内存 之间的关系。 物理内存:也就是安装在计算机中的内存条,比如安装了 2GB 大小的内存条,那么物理内存地址的范围就是 0 ~ 2GB。 虚拟内存:虚拟的内存地址。由于 CPU 只能使用物理内存地址,所以需要将虚 阅读全文
posted @ 2022-10-13 17:55 yooooooo 阅读(312) 评论(0) 推荐(0)
摘要:网上很多人提问为什么一定要copy_from_user,也有人解答。比如百度一下: 这个问题,我认为需要从2个层面回答 第一个层次是为什么要拷贝,可不可以不拷贝? 第二个层次是为什么要用copy_from_user而不是直接memcpy 为什么要拷贝 拷贝这个事情是必须的,这个事情甚至都跟Linux 阅读全文
posted @ 2022-01-22 17:32 yooooooo 阅读(402) 评论(0) 推荐(3)
摘要:1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.10.50 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope Linux内核由于存在page cache, 一般修改的文件数据并不会马上同步到磁盘,会缓存在内存的page cache中,我们把这种和 阅读全文
posted @ 2021-12-12 10:20 yooooooo 阅读(1166) 评论(0) 推荐(0)
摘要:Linux 5.12引入一个新的内存错误检测工具:KFENCE(Kernel Electric-Fence,内核电子栅栏)。KFENCE是一个低开销的、基于采样的内存错误检测工具。KFENCE检测越界访问、释放后使用和非法释放(包括重复释放和释放的起始地址不是分配的起始地址)这3种错误。 KFENC 阅读全文
posted @ 2021-12-01 15:34 yooooooo 阅读(683) 评论(0) 推荐(0)
摘要:自旋锁:如果内核配置为SMP系统,自旋锁就按SMP系统上的要求来实现真正的自旋等待,但是对于UP系统,自旋锁仅做抢占和中断操作,没有实现真正的“自旋”。如果配置了CONFIG_DEBUG_SPINLOCK,那么自旋锁按照SMP系统来编译。 但是为什么在UP系统中不需要真正的“带有自旋的”自旋锁呢?其 阅读全文
posted @ 2021-10-20 18:23 yooooooo 阅读(431) 评论(0) 推荐(0)
摘要:1.实例代码 首先以一个简单的示例代码来说明: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/mman.h> #define MAP_SIZE (100 * 1 阅读全文
posted @ 2021-09-29 14:47 yooooooo 阅读(160) 评论(0) 推荐(0)
摘要:很多基础的概念,将跨越软件的层次而存在。比如slab,对于内核人员,我们都知道slab是buddy之上的一层。 因为buddy作为Linux内核最底层的内存管理器,它分配1页,2页,4页,2n页,但是作为内核的堆用户本身,经常只是调用kmalloc()申请一个小内存,或者调用kmem_cache_a 阅读全文
posted @ 2021-08-11 11:04 yooooooo 阅读(211) 评论(0) 推荐(0)
摘要:记得在大学的刚开始学习C/C++的时候,对于内存问题一点也没有关心过,其实也是关心比较少,知道后来才慢慢注意起来,当时排查是否有内存泄漏全靠手,去看看malloc和free或者new和delete是否对应起来,这也是一种比较简单的查询是否有内存泄漏的办法,后来老师提供了一种用程序来检测是否有内存泄漏 阅读全文
posted @ 2021-07-29 11:56 yooooooo 阅读(589) 评论(0) 推荐(0)
摘要:命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好。 缓存是现在所有高并发系统必需的核心模块,主要作用就是把经常访问的数据(也就是热点数据),提前读入到内存中。这样,下次访问时就可以直接从内存读取数据,而不需要经过硬盘,从而加快应用程序的响应速度。 这些独立的缓存模块通常会提供查询接口, 阅读全文
posted @ 2021-07-23 16:21 yooooooo 阅读(1128) 评论(0) 推荐(1)
摘要:青囊,喜欢运动T恤加皮裤的非典型程序猿。此时,他正目不转睛注视着屏幕上一行行的代码,内存泄漏这个问题已经让他茶饭不思两三天了,任凭偌大的雨滴捶打着窗户也无动于衷。就这么静悄悄地过了一会儿,突然间,他哼着熟悉的小曲,仿佛一切来的又那么轻松又惬意。 是谁,在撩动我琴弦,那一段被遗忘的时光...... 初 阅读全文
posted @ 2021-06-03 11:38 yooooooo 阅读(455) 评论(0) 推荐(0)
摘要:原文:Active memory defragmentation (https://lwn.net/Articles/105021/) 原创:By corbet @ Oct. 5, 2004 翻译:By Tacinight (https://github.com/tacinight) 校对:By B 阅读全文
posted @ 2021-06-03 09:41 yooooooo 阅读(152) 评论(0) 推荐(0)