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

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

关键词:

 现在我们对dma几个紧密关联的结构体有所了解,再结合相应的导入器,导出器使用示例,dma-buf的使用已经不再陌生。那么在日常使用过程中常常会遇到哪些问题呢?

当然,dma-buf也是内存使用大法的一部分,那就免不了遇到这几大件:1.dma不足(合理使用),这部分的优化慎之又慎,要么从系统内存的大锅里多盛一点,要么自己节衣缩食;2.dma-buf泄漏(不合理使用),这部分问题的排查需要一些手段,除了常规的日志埋点,我也总结了一些排查方法。

一, /proc/meminfo

查看meminfo中CmaTotal,CmaFree的分配以及占用情况。

/sys/kernel/debug/dma_buf # cat /proc/meminfo   
MemTotal:        1027036 kB                     
MemFree:         1012096 kB                     
MemAvailable:    1009132 kB                     
Buffers:             136 kB                     
Cached:             2700 kB                     
SwapCached:            0 kB                     
Active:             2132 kB                     
Inactive:            932 kB                     
Active(anon):          0 kB        

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

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

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/ 查看详情

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/ 查看详情

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学习笔记(8.14dma-buf内存调试二bufinfo介绍)--更新中(代码片段)

bufinfo是我们调试dmabuf使用的一个非常有效的debug信息。因此我们需要了解下它的由来以及记录的关键信息。并且根据场景需要来对跟踪的信息进行调整和完善,以满足我们的调试需要。一,bufinfo的生成首先在内核初始化子系统... 查看详情

linux内存从0到1学习笔记(8.14dma-buf内存调试二bufinfo介绍)--更新中(代码片段)

bufinfo是我们调试dmabuf使用的一个非常有效的debug信息。因此我们需要了解下它的由来以及记录的关键信息。并且根据场景需要来对跟踪的信息进行调整和完善,以满足我们的调试需要。一,bufinfo的生成首先在内核初始化子系统... 查看详情

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

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

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

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

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.12dma-buf导出器和导入器使用示例三)

  前面解释了使用dma_buf所涉及的几个重要的结构体,今天我们来介绍下dma_buf使用的具体示例。mock_dmabuf_exp.c示例  1#include<linux/dma-buf.h> 2#include<linux/module.h> 3#include<linux/slab.h>&nb 查看详情

linux内存从0到1学习笔记(8.12dma-buf导出器和导入器使用示例三)

  前面解释了使用dma_buf所涉及的几个重要的结构体,今天我们来介绍下dma_buf使用的具体示例。mock_dmabuf_exp.c示例#include<linux/dma-buf.h>#include<linux/module.h>#include<linux/slab.h>structdma_buf*dmabuf_of_export 查看详情

linux内存从0到1学习笔记(8.10dma-buf导出器和导入器使用示例一)

  前面的博客提到过,dma-buf的使用包括导出器(exporter)和导入器(importer),导出器需要实现并管理dma_buf_ops<dma_buf_ops>中定义的操作,而导入器的操作由结构体dma_buf_attachment<dma_buf_attachment>来提供。  下... 查看详情

linux内存从0到1学习笔记(8.12dma-buf导出器和导入器使用示例四)

  前面解释了使用dma_buf所涉及的几个重要的结构体以及导出器的示例,我们再来介绍下导入器具体示例。mock_dmabuf_imp.c示例 1#include<linux/device.h> 2#include<linux/dma-buf.h> 3#include<linux/module.h> 4 查看详情

linux内存从0到1学习笔记(8.12dma-buf导出器和导入器使用示例四)

  前面解释了使用dma_buf所涉及的几个重要的结构体以及导出器的示例,我们再来介绍下导入器具体示例。mock_dmabuf_imp.c示例#include<linux/device.h>#include<linux/dma-buf.h>#include<linux/module.h>#include<linux/slab.h> 查看详情

linux内存从0到1学习笔记(8.11dma-buf导出器和导入器使用示例二)(代码片段)

    除了前面介绍的非常重要的导出器操作管理结构体dma_buf_ops,我们再来了解下设备缓冲区的附着数据(attachmentdata)的结构体以及共享缓冲区对象的构成结构体dma_buf。一,dma_buf_attachment解读dma_buf_attachment结构体... 查看详情

linux内存从0到1学习笔记(8.11dma-buf导出器和导入器使用示例二)(代码片段)

    除了前面介绍的非常重要的导出器操作管理结构体dma_buf_ops,我们再来了解下设备缓冲区的附着数据(attachmentdata)的结构体以及共享缓冲区对象的构成结构体dma_buf。一,dma_buf_attachment解读dma_buf_attachment结构体... 查看详情