11 2020 档案
摘要:Mali-T800系列GPU采用Midgard架构,如上图所示,其中Shader Core负责执行所有的类型的计算操作,在T800的系类中最高可以拓展的16个SC。RK3399芯片包括4个SC因此简写T864。所有的计算请求被放入到请求队列中,按类型分为Vertex Queue和Fragment Q
阅读全文
摘要:本文基于linux-3.10的内核 申请内存时需要先确定两个值,分别是high_zoneidx和migratetype。这两个值从哪里获取到呢?都是利用上面传递过来的GFP flag。对于high_zoneidx是通过gfp_zone函数获取的,而migratetype是通过gfpflags_to_
阅读全文
摘要:在 Linux 内核空间申请内存涉及的函数主要包括 kmalloc()、_ _get_free_pages()和vmalloc()等 1 2 1、kmalloc()和_ _get_free_pages()(及其类似函数)申请的内存位于物理内存映射区域而且在物理上也是连续的,它们与真实的物理地址只有一
阅读全文
摘要:我们知道buddy容易产生内存碎片,内核中可以通过给页面设置迁移类型以及compaction机制来预防和处理内存碎片。 内存页主要有下面三种类型: 1.可移动的(movable)。用户态申请。 2.可回收的(reclaimable)。文件系统的cache。 3.不可移动(unmovable)。内核申
阅读全文
摘要:对于用户空间的应用程序,我们通常根本不关心page的物理存放位置,因为我们用的是虚拟地址。所以,只要虚拟地址不变,哪怕这个页在物理上从DDR的这里飞到DDR的那里,用户都基本不感知。那么,为什么要写一篇论述页迁移的文章呢? 我认为有2种场景下,你会关注这个Page迁移的问题:一个是在Linux里面写
阅读全文
摘要:这两天研究memory zone的水位问题涉及到两个参数分别是/proc/sys/vm/extra_free_kbytes以及min_free_kbytes(在kernel-4.4)。 而通过代码发现min_free_kbytes这个值由normal zone下的managed pages决定。 先
阅读全文
摘要: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
阅读全文
摘要:主要做项目时候,需要分配一块连续的大的物理内存。 1.kmalloc 不能分配那么大。 2.alloc_pages MAX_ORDER为11,也就是最大分配2的11次方的页。 reserverd memory在最开始时候分配好,这块内存不会再分配给kernel用。主要更改devicetree。 me
阅读全文
摘要:what does anon-rss and total-vm mean 最近,我的Linux机器上的tomcat进程突然被杀死。 经过调查,我在/ var / log / messages文件中发现以下错误消息: 12 kernel: [1799319.246494] Out of memory:
阅读全文
摘要:After examining the virtual address layout of a process, we turn to the kernel and its mechanisms for managing user memory. Here is gonzo again: Linux
阅读全文
摘要:shrink_page_list(struct list_head *page_list, struct pglist_data *pgdat, struct scan_control *sc, enum ttu_flags ttu_flags, struct reclaim_stat *stat,
阅读全文
摘要:1 内存访问 (1)内存通过CPU的地址总线来寻址定位,然后通过CPU数据总线来读写。 (2)CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是一定的,而内存是需要占用CPU的寻址空间的。 (3)内存与CPU的这种总线式连接方式是一种直接连接,优点是效率高访问快,缺点是资源有
阅读全文
摘要:__virt_to_phys与__phys_to_virt unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) { struct page *page; /* * __get_free_pages() returns
阅读全文
摘要:内存管理子系统的架构如图1.1所示,分为用户空间、内核空间和硬件3个层面。 图1.1 内存管理架构 1.用户空间 应用程序使用malloc()申请内存,使用free()释放内存。 malloc()和free()是glibc库的内存分配器ptmalloc提供的接口,ptmalloc使用系统调用brk或
阅读全文
摘要:相关背景: 文章开始前,先聊聊相关的背景知识,我们知道64位处理器的虚拟地址已经支持到了64bit,但是64位处理器的物理地址总线实际位宽并没有达到64bit,常用的地址线宽有39bit和48bit,最新的ARMv8.2架构也已经可以支持到52bit了。那为什么没有支持到64bit呢?以常用的48b
阅读全文