摘要: 本文基于linux-3.10的内核 申请内存时需要先确定两个值,分别是high_zoneidx和migratetype。这两个值从哪里获取到呢?都是利用上面传递过来的GFP flag。对于high_zoneidx是通过gfp_zone函数获取的,而migratetype是通过gfpflags_to_ 阅读全文
posted @ 2020-11-15 23:29 aspirs 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 在 Linux 内核空间申请内存涉及的函数主要包括 kmalloc()、_ _get_free_pages()和vmalloc()等 1 2 1、kmalloc()和_ _get_free_pages()(及其类似函数)申请的内存位于物理内存映射区域而且在物理上也是连续的,它们与真实的物理地址只有一 阅读全文
posted @ 2020-11-15 21:53 aspirs 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 我们知道buddy容易产生内存碎片,内核中可以通过给页面设置迁移类型以及compaction机制来预防和处理内存碎片。 内存页主要有下面三种类型: 1.可移动的(movable)。用户态申请。 2.可回收的(reclaimable)。文件系统的cache。 3.不可移动(unmovable)。内核申 阅读全文
posted @ 2020-11-15 21:07 aspirs 阅读(710) 评论(0) 推荐(0) 编辑
摘要: 对于用户空间的应用程序,我们通常根本不关心page的物理存放位置,因为我们用的是虚拟地址。所以,只要虚拟地址不变,哪怕这个页在物理上从DDR的这里飞到DDR的那里,用户都基本不感知。那么,为什么要写一篇论述页迁移的文章呢? 我认为有2种场景下,你会关注这个Page迁移的问题:一个是在Linux里面写 阅读全文
posted @ 2020-11-15 20:43 aspirs 阅读(793) 评论(0) 推荐(0) 编辑
摘要: 这两天研究memory zone的水位问题涉及到两个参数分别是/proc/sys/vm/extra_free_kbytes以及min_free_kbytes(在kernel-4.4)。 而通过代码发现min_free_kbytes这个值由normal zone下的managed pages决定。 先 阅读全文
posted @ 2020-11-15 17:42 aspirs 阅读(352) 评论(0) 推荐(0) 编辑
摘要: sysrq mm log里Free swap、Total swap是什么含义? [22634.588075] Free swap = 0kB[22634.588076] Total swap = 204796kB get_nr_swap_pages函数返回swap file或者swap device 阅读全文
posted @ 2020-11-15 17:32 aspirs 阅读(1242) 评论(0) 推荐(0) 编辑
摘要: 主要做项目时候,需要分配一块连续的大的物理内存。 1.kmalloc 不能分配那么大。 2.alloc_pages MAX_ORDER为11,也就是最大分配2的11次方的页。 reserverd memory在最开始时候分配好,这块内存不会再分配给kernel用。主要更改devicetree。 me 阅读全文
posted @ 2020-11-15 14:37 aspirs 阅读(1580) 评论(0) 推荐(0) 编辑