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

高桐@BILL 高桐@BILL     2023-01-29     626

关键词:

在不同时间,结构体dma_fence具有无限期的时间,直到dma_fence_wait()执行完成。例如:

  • Future Fence(未来围栏),在HWC1中使用的,用于在显示器不再使用缓冲区时发出信号,并在屏幕更新时创建,以使得缓冲区可见。此围栏完成的时间完全在用户空间的控制之下。
  • Proxy Fence(代理围栏),建议处理尚未设置围栏的drm_syncobj。用于异步延迟命令提交。
  • Userspace Fence(用户空间围栏)或GPU Futexe(GPU互斥),命令缓冲区内的细密纹理的锁定,用于用户空间跨引擎或CPU同步,然后将其作为DMA围栏导入以集成到现有的winsys协议中。
  • 长时间运行计算命令缓冲,同时仍在使用传统的用于内存管理的批处理 DMA 围栏,而不是上下文抢占 DMA重新计划计算作业时重新附加的围栏。

上面所有的这些方案都有一个共同点,就是用户空间控制这些方案的依赖关系以及控制它们工作的时机。将无限期围栏与普通内核内 DMA 围栏混合使用将不起作用,即使是为了防止恶意用户空间而包含回退超时:

  • 只有内核知道所有 DMA 围栏依赖关系,用户空间不知道由于内存管理或调度程序决策而注入的依赖关系。
  • 只有用户空间知道无限期围栏中的所有依赖项以及它们何时完成,内核没有可见性。

此外,内核必须能够阻止用户空间命令提交以满足内存管理需求,这意味着我们必须支持依赖于 DMA 围栏的无限期围栏。如果内核也像 DMA 围栏一样支持内核中的无限期围栏,就像上述任何建议一样,则可能会出现死锁。       

这意味着内核可能会意外地通过用户空间不知道的内存管理依赖项创

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

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

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

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

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学习笔记(二,arm64物理内存)

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

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学习笔记(6.8,物理内存初始化之buddy伙伴系统)

写在前面在linux启动的那一刻,内存管理就已经开始了。在内核中,实现物理内存管理的allocator包括:初始化阶段物理内存管理memblock连续物理内存管理buddy非连续物理内存管理vmallocallocator小块物理内存管理slaballocator在系统初始... 查看详情

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

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

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

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

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

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

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

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

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

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

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学习笔记(6.3,物理内存初始化之内存基本数据结构初始化)(代码片段)

写在前面这部分主要介绍,bootmem_init()内存基本数据结构初始化,如内存节点,内存域。linux_mainline-5.17.0/arch/arm64/mm/init.c321void__initbootmem_init(void)322323 unsignedlongmin,max;324//获取最大最小页号;325 min=PFN_UP(memblock_start_of_DRAM( 查看详情

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

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

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

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

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

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

linux内存从0到1学习笔记(8.7dma-buf代码解读)

一,基本操作与设备DMA访问drivers/dma-buf/dma-buf.c二,CPU访问DMA缓冲区对象drivers/dma-buf/dma-buf.c三,隐式Fence轮询支持drivers/dma-buf/dma-buf.c四,DMA-BUF统计drivers/dma-buf/dma-buf-sysfs-stats.c五,DMA缓冲区ioctls操作include/uapi/linux/ 查看详情