linux内存从0到1学习笔记(6.3,物理内存初始化之内存基本数据结构初始化)(代码片段)

高桐@BILL 高桐@BILL     2022-12-03     360

关键词:

写在前面

这部分主要介绍,bootmem_init()内存基本数据结构初始化,如内存节点,内存域。

linux_mainline-5.17.0/arch/arm64/mm/init.c

321  void __init bootmem_init(void)
322  
323  	unsigned long min, max;
324     //获取最大最小页号;
325  	min = PFN_UP(memblock_start_of_DRAM());
326  	max = PFN_DOWN(memblock_end_of_DRAM());
327     //若使能CONFIG_MEMTEST,并且传递的commandline中保护memtest关键字的话,内核会对没有使用的free memory做memtest,通过相关算法检测出存在问题的dram,并讲这些dram通过reserve_bad_mem保留起来不适用,从而保证系统能正常boot。
328  	early_memtest(min << PAGE_SHIFT, max << PAGE_SHIFT);
329  
330  	max_pfn = max_low_pfn = max;
331  	min_low_pfn = min;
332     //这部分不常用,主要是num

linux内存从0到1学习笔记(二,arm64物理内存)

写在前面我们先通过一张图来里哦啊接下ARM处理器的内存管理架构;2.1ARM处理器的内存管理架构ARM处理器内核:是指ARM架构的CPU中间的核心芯片,由单晶硅制成,用来完成所有的计算、接受/存储命令、处理数据等... 查看详情

linux内存从0到1学习笔记(四,tlb)

...、TLB简介        Kernel初始化的时候,会在初始化内存中创建页表;而处理器读取指令和数据的时候需要首先通过MMU查表得到物理地址,然后在访问物理地址读取指令或数据。MMU查表过程汇中需要4次访问内存,... 查看详情

linux内存从0到1学习笔记(九,内存优化调试之三-内存拆解)---持续更新(代码片段)

写在前面我们在日常的工作当中需要各种手段来调试内存,尤其是在内存泄漏的情况下,我们需要一种手段来统计内存的使用去向,以确定内存使用不合理的方向。或者物理内存有限的情况下,需要对内存进行优... 查看详情

linux内存从0到1学习笔记(七,用户空间虚拟内存之三-内存映射)(代码片段)

...通常C标准库只提供了一个函数,由应用程序用来创建内存映射,接下来该函数调用在内部转换为适合于体系结构的系统调用mmap和mmap2。可使用munmap系统调用删除映射。一、内存映射简介        mmap完成的是将物理内... 查看详情

linux内存从0到1学习笔记(五,内存分类)

一、内存类型ARMv8架构处理器定义了两种类型的内存类型,分别是普通内存(NormalMemory)和设备内存(DeviceMemory)。二、普通内存        普通内存对应MT_NORMAL属性;        普通内存由于其弱一致... 查看详情

linux内存从0到1学习笔记(七,用户空间虚拟内存之二-内存空间的建立)(代码片段)

在使用load_elf_binary装在一个ELF二进制文件时,将创建进程的地址空间。Linux下的exec系统调用该函数来加载ELF文件。linux_mainline-5.17.0/fs/binfmt_elf.c823staticintload_elf_binary(structlinux_binprm*bprm)824825 structfile*interpreter= 查看详情

linux内存从0到1学习笔记(8.13dma内存调试一)

...常使用过程中常常会遇到哪些问题呢?当然,dma-buf也是内存使用大法的一部分,那就免不了遇到这几大件:1.dma不足(合理使用),这部分的优化慎之又慎,要么从系统内存的大锅里多盛一点,要么自己节衣缩食;2.dma-buf泄漏(... 查看详情

linux内存从0到1学习笔记(8.13dma内存调试一)

...常使用过程中常常会遇到哪些问题呢?当然,dma-buf也是内存使用大法的一部分,那就免不了遇到这几大件:1.dma不足(合理使用),这部分的优化慎之又慎,要么从系统内存的大锅里多盛一点,要么自己节衣缩食;2.dma-buf泄漏(... 查看详情

linux内存从0到1学习笔记(8.8无限dmafence)

在不同时间,结构体dma_fence具有无限期的时间,直到dma_fence_wait()执行完成。例如:FutureFence(未来围栏),在HWC1中使用的,用于在显示器不再使用缓冲区时发出信号,并在屏幕更新时创建,以使得缓冲区可见。此围栏完成的时... 查看详情

linux内存从0到1学习笔记(8.8无限dmafence)

在不同时间,结构体dma_fence具有无限期的时间,直到dma_fence_wait()执行完成。例如:FutureFence(未来围栏),在HWC1中使用的,用于在显示器不再使用缓冲区时发出信号,并在屏幕更新时创建,以使得缓冲区可见。此围栏完成的时... 查看详情

linux内存从0到1学习笔记(8.9可恢复硬件页面错误的含义)

...起的页面错误显然会阻碍加速器上运行的任务,通常需要内存分配来解决错误。但是,不允许内存分配来控制DMA围栏的完成,这意味着使用可恢复页面错误的任何工作负载都不能使用DMA围栏进行同步,而必须改用由用户空间控制... 查看详情

linux内存从0到1学习笔记(8.9可恢复硬件页面错误的含义)

...起的页面错误显然会阻碍加速器上运行的任务,通常需要内存分配来解决错误。但是,不允许内存分配来控制DMA围栏的完成,这意味着使用可恢复页面错误的任何工作负载都不能使用DMA围栏进行同步,而必须改用由用户空间控制... 查看详情

linux内存从0到1学习笔记(9.6,内存优化调试之page_owner拆解)

...过,pageowner用于跟踪每个页面的分配细节。如上图,当有内存被分配时,内存分配调用栈、进程ID、分配时间、掩码信息等都会被记录下来。因此我们可以通过分析这些信息来了解运行时情况下的内存布局;但是,page_owner信息很... 查看详情

linux内存从0到1学习笔记(9.10内存优化调试之panic_on_oom介绍

通过配置/proc/sys/vm/panic_on_oom文件节点可以使能或禁用out-of-memory的panic。接下来我分享下在对该节点功能及代码架构的学习笔记;一,简介文件节点路径:/proc/sys/vm/panic_on_oom相关变量:vm.panic_on_oom该节点有三个值,分别是0,1,2... 查看详情

linux内存从0到1学习笔记(三,高速缓存)

...RMv8最多可以支持7级的高速缓存,即L1级~L7级。接着是内存,本地磁盘。越往上的缓存存储空间越小,速度越快,成本也更高;越往下的存 查看详情

linux内存从0到1学习笔记(9.7内存优化调试之page_owner内存分配堆栈详解)---更新中

...序,解析。最终可以确认那些任务或进程占用了多少内存。无论是正常分配的,还是内存黑洞的内存,我们都可以通过解析pageowner拆分出来。那么接下来我们对pageowner中的内存分配堆栈进行一个详细的介绍和分析。以... 查看详情

linux内存从0到1学习笔记(8.6dma-buf简介)

一,为什么需要DMA?  CPU指令系统通常只支持CPU(寄存器)-存储器,以及CPU-外设之间的数据传送,那么如果外设需要和存储器进行数据交换就必须经过CPU寄存器进行中转。很显然,中转会大大降低CPU的工作效率,浪费时... 查看详情

linux内存从0到1学习笔记(8.6dma-buf简介)

一,为什么需要DMA?  CPU指令系统通常只支持CPU(寄存器)-存储器,以及CPU-外设之间的数据传送,那么如果外设需要和存储器进行数据交换就必须经过CPU寄存器进行中转。很显然,中转会大大降低CPU的工作效率,浪费时... 查看详情