
内存管理
hbcbgcx
这个作者很懒,什么都没留下…
展开
-
Linux中匿名页的反向映射
vma, anon_vma和anon_vma_chain的联系本文主要参考了vma, anon_vma和anon_vma_chain的联系这篇文章,结合相关资料,对该文进行了一些改进。Linux提供了内存映射这一特性,它实现了把物理内存页映射(map)到进程的地址空间中, 以实现高效的数据操作或传输。内核在处理这一特性时, 使用了struct vm_area_struct, struct an...转载 2020-02-04 20:20:25 · 1129 阅读 · 0 评论 -
非线性映射
版权声明:本文为优快云博主「CQ062364」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/CQ062364/article/details/38499937mmap是将一个文件中的连续部分映射到虚拟内存中的一块连续的区域,它做的映射是线性映射,如果需要将一个文件中的不同部分以不同的顺序映射到虚拟内存...转载 2020-02-04 20:11:04 · 2883 阅读 · 0 评论 -
(十五)Linux内存管理之RMAP
http://www.coder55.com/article/33206背景Read the fucking source code! --By 鲁迅A picture is worth a thousand words. --By 高尔基说明:Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio概述...转载 2020-02-04 20:05:40 · 1459 阅读 · 0 评论 -
Linux内存管理 (17)KSM
https://www.cnblogs.com/arnoldlu/p/8335541.html专题:Linux内存管理专题关键词:KSM、匿名页面、COW、madvise 、MERGEABLE、UNMERGEABLE。KSM是Kernel Samepage Merging的意思,用于合并内容相同的页面。在虚拟化环境中,同一台主机上存在许多相同OS和应用程序,很多页面内容可能是完全相同的,因...转载 2019-03-21 11:09:12 · 549 阅读 · 0 评论 -
Linux内存管理 (19)总结内存管理数据结构和API
https://www.cnblogs.com/arnoldlu/p/8335568.html专题:Linux内存管理专题关键词:mm、vaddr、VMA、page、pfn、pte、paddr、pg_data、zone、mem_map[]。1. 内存管理数据结构的关系图在大部分Linux系统中,内存设备的初始化一般是在BIOS或bootloader中,然后把DDR的大小传递给Linux内核...转载 2019-03-21 11:09:30 · 321 阅读 · 0 评论 -
Linux内存管理 (20)最新更新和展望
https://www.cnblogs.com/arnoldlu/p/8335587.html专题:Linux内存管理专题关键词:OOM、swap、HMM、LRU。本系列没有提到的内容由THP(Transparent Huge Page)、memory cgroup、slub、CMA、zram、swap、zswap、memory hotplug等。下面列举从Linux 4.0到Linux ...转载 2019-03-21 11:09:39 · 118 阅读 · 0 评论 -
Linux内存管理 (21)OOM
https://www.cnblogs.com/arnoldlu/p/8567559.html专题:Linux内存管理专题关键词:OOM、oom_adj、oom_score、badness。Linux内核为了提高内存的使用效率采用过度分配内存(over-commit memory)的办法,造成物理内存过度紧张进而触发OOM机制来杀死一些进程回收内存。该机制会监控那些占用内存过大,尤其是瞬间...转载 2019-03-21 11:09:49 · 459 阅读 · 0 评论 -
Linux地址映射--地址转换(mmap,vma)
https://blog.youkuaiyun.com/yiyeguzhou100/article/details/728751222017年06月06日 10:00:34 yiyeguzhou100 阅读数:3535一,线性映射与非线性映射1. 内存管理物理内存管理:Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构,操作物...转载 2019-03-21 11:11:31 · 934 阅读 · 0 评论 -
Linux内存管理 (16)内存规整
https://www.cnblogs.com/arnoldlu/p/8335532.html专题:Linux内存管理专题关键词:内存规整、页面迁移、pageblock、MIGRATE_TYPES。内存碎片的产生:伙伴系统以页为单位进行管理,经过大量申请释放,造成大量离散且不连续的页面。这时就产生了很多碎片。内存规整也即内存碎片整理,内存碎片也是以页面为单位的。实现基础是内存页面按照可移动...转载 2019-03-21 11:09:02 · 416 阅读 · 0 评论 -
Linux内存管理 (15)页面迁移
https://www.cnblogs.com/arnoldlu/p/8335524.html专题:Linux内存管理专题关键词:RMAP、页面迁移。相关章节:反向映射RMAP、内存规整。页面迁移的初衷是为NUMA系统提供一种将进程迁移到任意内存节点的能力,后来内存规整和内存热插拔场景都使用了此功能。页面迁移将就页面内容,迁移到新的页面。需要分配新页面,将旧页面内容拷贝到新页面;然后利...转载 2019-03-21 11:08:51 · 906 阅读 · 0 评论 -
Linux内存管理 (14)匿名页面生命周期
https://www.cnblogs.com/arnoldlu/p/8335508.html专题:Linux内存管理专题关键词:匿名页面、换入、换出。如果要将匿名页面的生命周期进行划分,大概就是诞生、使用、换出、换入和销毁。内核中使用匿名页面的地方有很多,产生缺页中断之后匿名页面就诞生了;用户进程访问虚拟地址即可访问到匿名页面内容;在内存紧张的时候,需要回收一些页面来释放内存,匿名页...转载 2019-03-21 11:08:43 · 341 阅读 · 0 评论 -
Linux内存管理 (13)回收页面
https://www.cnblogs.com/arnoldlu/p/8335487.html专题:Linux内存管理专题关键词:LRU、活跃/不活跃-文件缓存/匿名页面、Refault Distance。页面回收、或者回收页面也即page reclaim,依赖于LRU链表对页面进行分类:不活跃匿名页面、活跃匿名页面、不活跃文件缓存页面、活跃文件缓存页面和不可回收页面。内存紧张时优先换出文...转载 2019-03-21 11:08:32 · 881 阅读 · 0 评论 -
Linux内存管理 (12)反向映射RMAP
https://www.cnblogs.com/arnoldlu/p/8335483.html专题:Linux内存管理专题关键词:RMAP、VMA、AV、AVC。所谓反向映射是相对于从虚拟地址到物理地址的映射,反向映射是从物理页面到虚拟地址空间VMA的反向映射。RMAP能否实现的基础是通过struct anon_vma、struct anon_vma_chain和sturct vm_are...转载 2019-03-21 11:08:22 · 363 阅读 · 0 评论 -
Linux内存管理 (11)page引用计数
https://www.cnblogs.com/arnoldlu/p/8335481.html专题:Linux内存管理专题关键词:struct page、_count、_mapcount、PG_locked/PG_referenced/PG_active/PG_dirty等。Linux的内存管理是以页展开的,struct page非常重要,同时其维护成本也非常高。这里主要介绍struct ...转载 2019-03-21 11:08:07 · 1136 阅读 · 0 评论 -
Linux内存管理 (10)缺页中断处理
https://www.cnblogs.com/arnoldlu/p/8335475.html专题:Linux内存管理专题关键词:数据异常、缺页中断、匿名页面、文件映射页面、写时复制页面、swap页面。malloc()和mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常。...转载 2019-03-21 11:07:58 · 625 阅读 · 0 评论 -
Linux内存管理 (22)内存检测技术(slub_debug/kmemleak/kasan)
https://www.cnblogs.com/arnoldlu/p/8568090.html专题:Linux内存管理专题关键词:slub_debug、kmemleak、kasan、oob、Redzone、Padding。Linux常见的内存访问错误有:越界访问(out of bounds)访问已经释放的内存(use after free)重复释放内存泄露(memory leak)...转载 2019-03-21 11:10:03 · 1852 阅读 · 0 评论 -
Linux内存管理 (23)一个内存Oops解析
https://www.cnblogs.com/arnoldlu/p/8672139.html专题:Linux内存管理专题关键词:DataAbort、fsr、pte、backtrace、stack。在内存相关实际应用中,内存异常访问是一种常见的问题。本文结合异常T32栈回溯、Oops打印以及代码,分析打印log,加深对Oops的理解,有助于快速定位问题解决问题。1. 不同类型异常处理当...转载 2019-03-21 11:10:15 · 2698 阅读 · 0 评论 -
Linux内存管理 (25)内存sysfs节点解读
https://www.cnblogs.com/arnoldlu/p/8568330.html1. General1.1 /proc/meminfo/proc/meminfo是了解Linux系统内存使用状况主要接口,也是free等命令的数据来源。下面是cat /proc/meminfo的一个实例。复制代码MemTotal: 8054880 kB--------------...转载 2019-03-21 11:10:32 · 654 阅读 · 0 评论 -
深入浅出内存管理--kmalloc支持的最大内存分配
所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85766256首先我们来看下kmalloc的实现,本文基于kernel 4.0版本:static __always_inline void *kmalloc(size_t size, gfp_t flags){ ...转载 2019-03-07 19:53:22 · 976 阅读 · 0 评论 -
内存管理杂记
linux内核 address_space 结构https://blog.youkuaiyun.com/ryder001/article/details/7912408Linux内存管理中address_space疑惑及解答https://blog.youkuaiyun.com/tugouxp/article/details/62215083Linux内核分析笔记----Page Cache和Page Write...转载 2019-06-14 12:00:18 · 142 阅读 · 0 评论 -
内存管理API之page_address
https://blog.youkuaiyun.com/tiantao2012/article/details/79135396void *page_address(const struct page *page) 这个函数用于得到页的虚拟地址,这里的页可以是高端页或者低端页其源码分析如下:void *page_address(const struct page *page){ unsigned l...转载 2019-06-14 11:54:28 · 247 阅读 · 0 评论 -
page_address()函数分析--如何通过page取得虚拟地址
https://blog.youkuaiyun.com/fivedoumi/article/details/7057628由于X86平台上面,内存是划分为低端内存和高端内存的,所以在两个区域内的page查找对应的虚拟地址是不一样的。一. x86上关于page_address()函数的定义在include/linux/mm.h里面,有对page_address()函数的三种宏定义,主要依赖于不同的平台:...转载 2019-06-14 11:54:15 · 1007 阅读 · 0 评论 -
Linux内核mmap机制
https://blog.youkuaiyun.com/ptonlix/article/details/792985751. 问:如何将物理地址映射到用户空间的虚拟地址上?2.linux内核mmap机制2.1.回顾LED驱动数据流的操作过程通过分析LED驱动,得出以下结论:如果利用read,write,ioctl三个系统调用函数实现对LED硬件进行操作,这三个系统调用函数操作数据最终要经过两次数据...转载 2019-03-21 11:11:48 · 670 阅读 · 0 评论 -
mmap映射物理内存到用户空间的方法
https://blog.youkuaiyun.com/u014792216/article/details/79020326在内核申请一片物理内存,映射到用户空间使用的方法。环境:Linux ubuntu 4.10.0-42-generic。#include <linux/init.h> #include <linux/kernel.h> #include <lin...转载 2019-03-21 11:11:39 · 404 阅读 · 1 评论 -
Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS
https://www.cnblogs.com/arnoldlu/p/9375377.html关键词:VSS、RSS、PSS、USS、_mapcount、pte_present、mem_size_stats。在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/USS四种形式,这四种形式首字母分别是Virtual/Resident/Proportional/Uniqu...转载 2019-03-21 11:10:56 · 808 阅读 · 0 评论 -
Linux内存管理 (9)mmap(补充)
https://www.cnblogs.com/arnoldlu/p/9367253.html之前写过一篇简单的介绍mmap()/munmap()的文章《Linux内存管理 (9)mmap》,比较单薄,这里详细的梳理一下。从常用的使用者角度介绍两个函数的使用;然后重点是分析内核的实现流程;最后对mmap()/munmap()进行一些验证测试。mmap系统调用并不完全是为了共享内存而设计的,它...转载 2019-03-21 11:10:47 · 386 阅读 · 0 评论 -
Linux内存管理 (9)mmap
https://www.cnblogs.com/arnoldlu/p/8330785.html专题:Linux内存管理专题关键词:文件映射、匿名映射、私有映射、共享映射mmap/munmap是常用的一个系统调用,使用场景是:分配内存、读写大文件、连接动态库文件、多进程间共享内存。更详细解读参考《Linux内存管理 (9)mmap(补充)》。1. mmap/munmap介绍mmap/mu...转载 2019-03-21 11:07:44 · 225 阅读 · 0 评论 -
Linux内存管理 (8)malloc
https://www.cnblogs.com/arnoldlu/p/8329283.html专题:Linux内存管理专题关键词:malloc、brk、VMA、VM_LOCK、normal page、special page。每章问答:malloc()函数是C函数库封装的一个核心函数,对应的系统调用是brk()。1. brk实现要了解brk的实现首先需要知道进程用户空间的划分,以及st...转载 2019-03-21 11:07:35 · 342 阅读 · 0 评论 -
Linux内存管理 (7)VMA操作
https://www.cnblogs.com/arnoldlu/p/8329279.html专题:Linux内存管理专题关键词:VMA、vm_area_struct、查找/插入/合并VMA、红黑树。用户进程可以拥有3GB大小的空间,远大于物理内存,那么这些用户进程的虚拟地址空间是如何管理的呢?malloc()或mmap()操作都会要求在虚拟地址空间中分配内存块,但这些内存在物理上往往都是...转载 2019-03-21 11:07:26 · 631 阅读 · 0 评论 -
深入浅出内存管理--内存管理概述
所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/84976442内存管理我的理解是分为两个部分,一个是物理内存的管理,另一个部分是物理内存地址到虚拟地址的转换。物理内存管理内核中实现了很多机制和算法来进行物理内存的管理,比如大名鼎鼎的伙伴系统,以及slab分配器等...转载 2019-03-07 19:52:09 · 206 阅读 · 0 评论 -
深入浅出内存管理--高速缓存(cache memory)和转换后援缓冲(TLB)
所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85041830高速缓存(Cache memory)CPU的运行速度时非常快的,当今的CPU主频都是GHZ级别的,而对于内存DDR来说,每次存取操作都会耗用很多的时钟周期,这意味着,CPU需要等待很长时间来完成一次读或...转载 2019-03-07 19:52:17 · 270 阅读 · 0 评论 -
深入浅出内存管理--内存管理区(Zone)
2018年12月14日 17:50:17 rikeyone 阅读数:54更多所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85007552本文以Linux内核4.9来做介绍。内存管理区(ZONE)结构体每个Node节点中的内存又划分为多个ZONE来进行管理,内...转载 2019-03-07 19:52:25 · 207 阅读 · 0 评论 -
深入浅出内存管理--对于watermark的理解
所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85037249经过前面文章的介绍,每个内存管理区都有一个数组watermark,内核中定义了三个watermark来表示当前系统剩余的空闲内存。WMARK_MIN,WMARK_LOW,WMARK_HIGH,w...转载 2019-03-07 19:52:33 · 1776 阅读 · 0 评论 -
深入浅出内存管理--对于lowmem_reserve的理解
2018年12月16日 15:12:35 rikeyone 阅读数:80更多所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85037297每个内存管理区(zone)都有一个lowmem_reserve字段,它代表本管理区预留的物理内存大小。所谓预留,那就是说肯定还...转载 2019-03-07 19:52:40 · 255 阅读 · 0 评论 -
深入浅出内存管理--高端内存映射之fixmap(固定映射)
2018年12月23日 16:32:23 rikeyone 阅读数:110更多所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85223796我们知道系统中的高端内存是不能作为直接映射区映射到内核空间的,那么我们想要使用它怎么办呢?前面的文章我们已经有过相关的介绍,...转载 2019-03-07 19:52:56 · 245 阅读 · 0 评论 -
深入浅出内存管理--alloc_pages与free_page分析(框图)
2018年12月30日 20:54:22 rikeyone 阅读数:48更多所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85409092alloc_pages从前面文章的介绍来看,alloc_pages用于连续物理内存的分配,它的实现如下图所示:从这个流程...转载 2019-03-07 19:53:04 · 486 阅读 · 0 评论 -
深入浅出内存管理--slab分配器
所属专栏: 深入浅出内存管理版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/rikeyone/article/details/85490149存在的意义页分配器只能按页为单位进行内存分配,但对于不足一页的申请,如果依然按一页来分配,就会造成内存的浪费,slab分配器就是为了完成小内存的分配和管理的。slab分配器建立在页分配器之上,它最终也是...转载 2019-03-07 19:53:12 · 217 阅读 · 0 评论 -
伙伴系统分析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/kris_fei/article/details/8768783chipset: MSM8X25QCodebase: Android4.1Kernel: 3.4.0基本概念:关于伙伴系统算法的原理还是比较好理解的,这里不作复数。直接看下关键数据结构。struct zone {~~snip...转载 2019-03-07 19:51:34 · 179 阅读 · 0 评论 -
Linux内核最新的连续内存分配器(CMA)——避免预留大块内存
https://blog.youkuaiyun.com/21cnbao/article/details/7309757Linux内核最新的连续内存分配器(CMA)——避免预留大块内存2012年03月01日 16:17:59 21cnbao 阅读数:33968by 宋宝华在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不...转载 2019-03-07 19:51:24 · 253 阅读 · 0 评论 -
CMA (连续的内存分配器)
简介CMA的全称是contiguous memory allocator, 其工作原理是:预留一段的内存给驱动使用,但当驱动不用的时候,memory allocator(buddy system)可以分配给用户进程用作匿名内存或者页缓存。而当驱动需要使用时,就将进程占用的内存通过回收或者迁移的方式将之前占用的预留内存腾出来, 供驱动使用。本文对CMA的初始化,分配和释放做一下源码分析(源码版本v...转载 2019-03-07 19:51:14 · 1530 阅读 · 0 评论