01-内存管理
文章平均质量分 87
linux内存管理
frank_zyp
一切皆有可能
展开
-
内存管理十一 MIGRATE_HIGHATOMIC类型页面
一、内存管理 中migration type中MIGRATE_HIGHATOMIC介绍: 在系统运行一段时间后,会出现大量内存碎片,会导致高阶页块(high-order page)的分配失败。为了避免,减轻这种情况,创建了MIGRATE_HIGHATOMIC类型的页面。在此后的分配中,只有当相同的高阶,并拥有高级分配权限时,才会分配这样的页块。当分配单个页框失败时,这样的页块会被...原创 2019-04-15 15:44:54 · 2546 阅读 · 0 评论 -
内存管理十 MTK平台内存RAM大小拆解
一、拆解: 本文以MTK平台2G RAM的设备为例,对RAM进行详细的拆解,对于2G的手机在设置->存储中,会看到总内存的大小为2G,这里的2G也可以通过ADB命令来获取到:(1)获取meminfo: cat /proc/meminfo MemTotal: 1860024 kB (2)获取reserve的内存:cat /proc/mtk_memcfg...原创 2019-01-15 19:53:54 · 3354 阅读 · 0 评论 -
内存管理九 linux内存页面回收
一、概序: 内核中的页面可以分为两类,一类是使用完毕便无保存的价值,所以立即便可释放、回收,这种页面的周转很简单:空闲 -> (分配)-> 使用 -> (释放)-> 空闲,例如通过kmalloc/vmalloc/alloc_page()分配的内存。另外一类是使用完毕了,其内容仍有保存的价值,只要条件允许,把这些页面“养起来”可以提供后面的工作效率,这些页面...原创 2018-10-31 14:42:30 · 1541 阅读 · 0 评论 -
内存管理八 内存分配接口总结
一、简介: 内存分配的接口有很多,不同的申请函数有不同的功能,下面会做详细的介绍和对比。kmalloc:基于slab分配器,用于分配小内存,物理空间连续的内存块; vmalloc:用于分配大内存,虚拟地址连续的内存; malloc:为用户空间分配进程地址空间(即分配一块VMA); mmap:用户空间分配内存、读写大文件和加载静态库等; 可以用下图清晰的表明:二、详细...原创 2018-10-26 14:20:43 · 1195 阅读 · 0 评论 -
内存管理七 SLUB分配器管理内存
一、概序 linux内存管理的基础是:伙伴系统(buddy system),但伙伴系统是以页为单位(4kB)管理和分配内存。现实的需求是以字节为单位,这样基于Buddy系统分配最小的一个page会严重的浪费内存。slab分配器就是为了解决此问题而出现,专为小内存分配而生。slab分配器分配内存以Byte为单位。但是slab分配器是基于伙伴系统分配的大内存进一步细分成小内存分配,是...原创 2018-10-16 15:58:11 · 655 阅读 · 2 评论 -
内存管理一 prorank的使用及解释
一、procrank的生成及使用: linux内存的调试有很多命令和节点,如vmstat命令、/proc/meminfo、prorank命令、 /proc/vmallocinfo/sys/kernel/debug/ion/ion_mm_heap、slabtrace等,下面详细介绍procrank的命令: procrank是android system/xb...原创 2018-08-25 12:37:36 · 2609 阅读 · 0 评论 -
内存管理二 proc/meminfo 文件详解
一、meminfo中参数的解释:cat /proc/meminfoMemTotal: 1859640 kB //可用的总内存MemFree: 69836 kB //完全未用到的物理内存 LowFree+HighFreeMemAvailable: ...原创 2018-08-25 13:57:08 · 3713 阅读 · 0 评论 -
内存管理三 内核内存检测KASAN
一、简介: Kasan 是 Kernel Address Sanitizer 的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题。KASAN可以检测的内存异常包括:slab-out-of-bounds/user-after-free/stack-out-of-bounds/global-out-of-bounds等。(1)环境要求:...原创 2018-09-07 16:25:26 · 11887 阅读 · 3 评论 -
内存管理四 内存泄漏检测kmemleak
一、简介: Kmemleak工作于内核态,Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。当独立的对象没有被释放时,其报告记录在 /sys/kernel/debug/kmemleak中,Kmemcheck能够帮助定位大多数内存错误的上下文。二、使用方法:(1)打开方法: 在kernel的defconfig的文件中,使能如下宏控 CO...原创 2018-09-10 15:20:50 · 2572 阅读 · 0 评论 -
内存管理五 物理内存初始化
一、概序: linux内存管理包含内存初始化、页表映射过程、内核内存布局图、伙伴系统、SLAB分配器、vmalloc、malloc、mmap缺页中断等内容。按层分可以分为用户空间、内核空间和硬件层,下面的图可以详细的说明: ...原创 2018-09-28 14:21:24 · 1062 阅读 · 0 评论 -
内存管理六 伙伴系统管理内存
首先要做的就是找到指定的分配管理区,管理区的编号保存在high_zoneidx中然后就是尝试第一次分配,流程是从指定的管理区开始扫描管理区-->找到充足的管理区-->从指定的迁移类型链表中分配内存-->如果在指定迁移类型中找不到则到其他的迁移类型中去寻找如果第二步在各个区域都找不到可以满足分配的内存了,那么说明管理区的内存已经确实不够了,于是开始启用一条慢速的途径来分配,包括尝试去换出一些不经常使用的页等等,内核会在这原创 2018-09-30 16:32:36 · 1435 阅读 · 1 评论