
linux内存管理
文章平均质量分 89
wwwlyj123321
这个作者很懒,什么都没留下…
展开
-
slab分配器(3):slab内存申请和释放
ref:内存管理之slub原创 2025-03-11 22:02:10 · 328 阅读 · 0 评论 -
linux内存页块划分及位图存储机制
核心作用与背景是 Linux 内存管理中的一个关键数据结构,主要用于跟踪和管理 内存块(pageblock)的特性。通过,内核可以高效地记录每个内存块的属性,例如迁移类型、分配状态等,从而优化内存分配与回收策略。原创 2025-03-06 22:23:35 · 870 阅读 · 0 评论 -
伙伴系统的核心实现
下面我们来看下减半分裂过程的实现,expand 函数中的参数在本节示例中:low = 指定分配阶 order = 0,high = 最后遍历到的分配阶 order = 3。原创 2025-03-03 21:59:46 · 327 阅读 · 0 评论 -
物理内存分配快速路径
伙伴系统有一个特点就是它所分配的物理内存页全部都是物理上连续的,并且只能分配 2 的整数幂个页,这里的整数幂在内核中称之为分配阶。原创 2025-03-01 19:30:25 · 945 阅读 · 0 评论 -
slab分配器(3):slab内存初始化
那就只需要进行merge操作并返回,而无需进一步创建新的。函数中完成了这两个结构体的初始化之后,相当于就是创建了两个。中分配出来的对象,那么这个问题是怎么解决的呢?结构,并对该结构体进行初始化,最终添加到全局链表中。完成的功能比较简单,就是创建一个用于管理。中,有存在对象大小相近,且具有兼容标志的。函数,内核中定义了两个静态的全局变量。结构体初始化,包括了上文中分析到的。来分配的,因此不需要创建一个相关的。结构体对象的缓存池,一个用于分配。在创建的过程中,当发现已有的。结构体对象的缓存池。原创 2024-11-23 20:59:51 · 294 阅读 · 0 评论 -
slab分配器(2):组织结构
在上小节的内容中,笔者主要为大家介绍了 struct kmem_cache 结构中关于 slab 的一些基础信息,其中主要包括 slab cache 中所管理的 slabs 相关的容量控制,以及 slab 中对象的内存布局信息。上图中的 kmem_cache 结构就好比是超市,slab cache 的本地 cpu 缓存结构 kmem_cache_cpu 就好比超市的营业厅,营业厅内摆满了一排一排的货架,这些货架就是上图中的 slab,货架上的商品就是 slab 中划分出来的一个一个的内存块。转载 2024-11-23 14:47:29 · 86 阅读 · 0 评论 -
slab分配器(1):基础知识
ref;原创 2024-11-22 21:14:56 · 204 阅读 · 0 评论 -
memblock内存分配器
memblock 是 Linux 内核中的一个内存管理子系统,主要用于在系统启动早期阶段管理物理内存。它在内核初始化期间负责管理内存,直到更复杂的内存管理子系统(如伙伴系统)接管。原创 2024-11-17 22:47:51 · 353 阅读 · 0 评论 -
PCP(Per-CPU Pageset)
如果PCP列表为空,则从全局内存池中获取一批(batch个 pages),放入PCP列表,然后再从PCP列表中分配所需的page。每个CPU都有自己的PCP列表,这样在分配和释放内存时,可以避免多个CPU同时访问同一个全局内存池,从而提高性能。减少锁争用:由于每个CPU都有自己的PCP列表,内存分配和释放时不需要频繁地获取全局锁,从而减少了锁争用,提高了系统的并发性能。提高缓存命中率:PCP列表中的页面更有可能被同一个CPU再次使用,从而提高了缓存命中率,减少了内存访问延迟。高速缓存中的页框描述符链表。原创 2024-11-16 12:08:50 · 1115 阅读 · 0 评论 -
内存回收基本原理与内存水位
内核会为每个 NUMA 节点中的每个物理内存区域定制三条用于指示内存容量的水位线,分别是:WMARK_MIN(页最小阈值), WMARK_LOW (页低阈值),WMARK_HIGH(页高阈值)。这三条水位线定义在WMARK_MIN,WMARK_LOW,NR_WMARK这三条水位线对应的 watermark 数值存储在每个物理内存区域 struct zone 结构中的 _watermark[NR_WMARK] 数组中。// 物理内存区域中的水位线。原创 2024-11-10 17:53:27 · 1200 阅读 · 0 评论 -
linux物理内存管理:node,zone,page
对于物理内存内存,linux对内存的组织逻辑从上到下依次是:node,zone,page,这些page是根据buddy分配算法组织的,看下面两张图:上面的概念做下简单的介绍:内存节点结构体在linux内核include/linux/mmzone.h文件NUMA下每个node由一个pglist_data结构体描述UMA下只有一个node,即全局变量mmzone.h - include/linux/mmzone.h - Linux source code v5.4.285 - Bootlin Elixir Cr原创 2024-11-10 14:13:27 · 1057 阅读 · 0 评论 -
伙伴(buddy)系统基本原理
所谓“伙伴”,就是指在空闲块被分裂时,由同一个大块内存分裂出来的两个小块内存就互称“伙伴”。原创 2023-11-12 16:20:11 · 3160 阅读 · 2 评论 -
linux内核对进程虚拟地址空间管理
当内核线程没有运行时,active_mm为空,当内核线程运行时,借用上一个进程的内存描述符,在被借用进程的用户虚拟地址空间的上方运行,进程描述符的成员active_mm指向借用的内存描述符,假设被借用的内存描述符所属的进程不属于线程组,那么内存描述符的成员mm_users不变,仍然是1,成员mm_count加1变成2。如果两个进程属于同一个线程组,每个进程的进程描述符的成员mm和active_mm都指向同一个内存描述符,内存描述符的成员mm_users是2、成员mm_count是1。原创 2022-12-17 17:51:13 · 1631 阅读 · 0 评论 -
linux内存泄漏 debug
C/C++程序一般都由程序员自己来控制内存的申请和释放,因此稍有不慎就容易出现内存泄漏ref:Valgrind Homehttps://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README.md原创 2022-12-16 16:50:25 · 197 阅读 · 0 评论 -
linux内存管理基础知识-UMA/NUMA架构 与 FLATMEM/DISCONTIGMEM/SPARSEMEM模型
在我们理解了物理内存的 NUMA 架构,以及在 NUMA 架构下的内存分配策略之后,本小节笔者来为大家介绍下如何正确的利用 NUMA 提升我们应用程序的性能。前边我们介绍了这么多的理论知识,但是理论的东西总是很虚,正所谓眼见为实,大家一定想亲眼看一下 NUMA 架构在计算机中的具体表现形式,比如:在支持 NUMA 架构的机器上到底有多少个 NUMA 节点?每个 NUMA 节点包含哪些 CPU 核,具体是怎样的一个分布情况?前面也提到 CPU 在访问本地 NUMA 节点中的内存时,速度是最快的。原创 2022-12-09 20:06:27 · 1709 阅读 · 0 评论 -
linux内存管理
对于物理内存内存,linux对内存的组织逻辑从上到下依次是:node,zone,page,这些page是根据buddy分配算法组织的,看下面两张图:原创 2022-12-08 17:46:57 · 4054 阅读 · 0 评论