当前位置: 首页 > wzjs >正文

购物网站后台管理系统模板百度搜索引擎竞价排名

购物网站后台管理系统模板,百度搜索引擎竞价排名,做网站和微信公众号如何招生,虚拟主机 安装wordpress目录 问题提出 内核路径及文件说明 videobuf2-dma-contig.c mmap方式分配 vb2_dc_alloc attrs 总结 问题提出 假设310做pcie ep,视频流接口也做EP,如下图所示,那么数据如何流转到310呢? 首先了解内核对视频处理的流程&#x…

目录

问题提出

   内核路径及文件说明

 videobuf2-dma-contig.c

mmap方式分配

vb2_dc_alloc

 attrs

 总结 


问题提出

假设310做pcie ep,视频流接口也做EP,如下图所示,那么数据如何流转到310呢?

      首先了解内核对视频处理的流程,前述我们整理过总体流程,本文着重介绍底层内存分配接口,而后介绍这些接口的应用。进而在上述问题中的应用。

   内核路径及文件说明

  drivers\media\common\videobuf2   此目录下,主要有三个内存分配的文件,介绍如下

文件内存类型分配方式主要用途
videobuf2-dma-contig.c物理连续内存dma_alloc_coherent硬件要求连续内存(如 ISP、编码器)
videobuf2-dma-sg.c非连续内存(SG 列表)vmalloc/用户缓冲区通用 DMA 硬件(如 USB 摄像头)
videobuf2-cma-sg.cCMA 内存 + SG 抽象CMA 分配兼容旧硬件或特定需求

选择建议

  • 优先使用 dma-contig:若硬件明确需要连续内存(如 MIPI CSI 摄像头或 VPU 加速)。

  • 默认使用 dma-sg:若硬件支持 SG 且无连续内存要求(如大多数 USB 设备)。

  • cma-sg 仅在特定旧平台或驱动中有需求。

这些模块通过 videobuf2 核心框架为视频驱动提供统一的缓冲区管理接口,屏蔽底层内存分配细节。

 videobuf2-dma-contig.c

    根据我们的问题及三个文件的分析说明,我们着重分析videobuf2-dma-contig.c 文件。

    该文件实现了使用连续 DMA 内存的视频缓冲区管理,适用于需要物理连续内存的视频硬件设备(如摄像头、视频编解码器等)。它提供了多种内存操作方式,包括 MMAP、USERPTR 和 DMABUF

    对外统一的接口,后续我们在内存使用时,会看到对这部分接口的回调,此处先行记录。      

const struct vb2_mem_ops vb2_dma_contig_memops = {.alloc		= vb2_dc_alloc,  //mmap 方式的分配接口 分配连续 DMA 内存缓冲区.put		= vb2_dc_put,    //释放 DMA 连续内存缓冲区.get_dmabuf	= vb2_dc_get_dmabuf,.cookie		= vb2_dc_cookie,.vaddr		= vb2_dc_vaddr,.mmap		= vb2_dc_mmap,   //将 DMA 缓冲区映射到用户空间.get_userptr	= vb2_dc_get_userptr,.put_userptr	= vb2_dc_put_userptr,.prepare	= vb2_dc_prepare,   //DMA 传输前后的同步操作.finish		= vb2_dc_finish,   //DMA 传输前后的同步操作.map_dmabuf	= vb2_dc_map_dmabuf, .unmap_dmabuf	= vb2_dc_unmap_dmabuf,.attach_dmabuf	= vb2_dc_attach_dmabuf,.detach_dmabuf	= vb2_dc_detach_dmabuf,.num_users	= vb2_dc_num_users,
};

 

mmap方式分配

 上述接口注释中,alloc  put和mmap用于mmap方式的底层接口。

 prepare和finish则是三种方式通用的接口。

类似的应用场景如下:即

1)用户分配多块连续的物理内存,形成一个物理内存的链表,每个节点单独存储一帧数据。

2)外设将数据写入到这些节点。

 3) 用户从这些节点中读取数据。

   

 

vb2_dc_alloc

核心调用

buf->attrs = attrs;buf->cookie = dma_alloc_attrs(dev, size, &buf->dma_addr,GFP_KERNEL | gfp_flags, buf->attrs);

主要参数: 第二个及最后一个,由调用者传入。

1)   attrs  

2) gfp_flags

 attrs

定义在,\kernel\include\linux\dma-mapping.h,形如DMA_ATTR_SYS_CACHE_ONLY等,具体的请参考源码,此处汇总应用场景等

属性名称作用典型应用场景硬件要求同步要求性能影响限制与风险
DMA_ATTR_SYS_CACHE_ONLY允许缓冲区使用系统/末级缓存(LLC),需手动维护与非一致性设备的一致性非一致性但支持缓存的设备(如DSP、NPU)设备需容忍缓存存在必须显式调用 dma_sync_*减少访问延迟(缓存命中时)设备不支持缓存时会导致数据不一致
DMA_ATTR_SYS_CACHE_ONLY_NWA同上,但禁用写分配(No Write-Allocate)写入密集型设备(如视频编码输出)同上同上减少缓存污染,写入性能更优读取频繁场景可能降低缓存命中率
DMA_ATTR_WEAK_ORDERING允许内存访问弱序执行(读写可乱序)网络设备、DMA引擎(不依赖严格顺序)设备逻辑不依赖内存顺序无需额外同步减少内存屏障开销顺序敏感设备会出错
DMA_ATTR_WRITE_COMBINE合并写入操作(类似WC内存)帧缓冲区(GPU/V4L2)、高频写入设备无特殊要求需手动flush写入提升写入带宽写入延迟可见,需主动同步
DMA_ATTR_NO_KERNEL_MAPPING避免创建内核虚拟地址映射安全敏感设备、协处理私有内存节省内核虚拟地址空间内核无法直接访问缓冲区
DMA_ATTR_SKIP_CPU_SYNC跳过CPU缓存同步(假设设备已更新数据)设备独占写入(加密引擎)、零拷贝接收设备必须保证数据完整性减少冗余同步开销设备未完整写入时会导致脏数据
DMA_ATTR_FORCE_CONTIGUOUS强制分配物理连续内存(即使IOMMU存在)旧硬件(摄像头控制器)、需物理连续的DMA引擎依赖CMA或大页内存避免SG-DMA分散开销大内存可能分配失败
DMA_ATTR_ALLOC_SINGLE_PAGES优先分配单页内存(非大页)小缓冲区高频分配(USB批量传输)减少TLB压力大块内存效率低
DMA_ATTR_PRIVILEGED限制缓冲区仅高特权级访问(如EL2/TEE)安全加密引擎、TrustZone环境依赖MMU权限配置增强安全性需硬件支持特权级隔离
DMA_ATTR_OVERWRITE提示设备将完全覆写缓冲区(无需保留旧数据)零拷贝网络接收、DMA_FROM_DEVICE传输设备必须覆写全部数据跳过预读优化传输性能设备未覆写全部数据时会导致残留数据
默认(无属性)无缓存(Non-Cacheable),严格一致性传统非一致性DMA设备(如旧网卡)无需同步安全性高,性能较低访问延迟高

1) 对于强制分配连续物理内存情形,依赖于cma,而商用操作系统,例如麒麟,cma大小被限制。例如预留1G可以,预留2G则失败。这种情况,对于我们的应用就有限制了

dmesg |grep -i cma
[    0.000000] cma: Reserved 1024 MiB at 0x00000000b1800000
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-5.4.18-52-generic root=UUID=7291d504-6ba9-4b1c-b513-1af62bae982e ro mem=11520M cma=1024M quiet splash resume=UUID=e52cb080-ef37-40c7-beda-3a435f5a6564 audit=0 security=kysec
[    0.000000] Memory: 10377592K/11796480K available (11772K kernel code, 1448K rwdata, 6764K rodata, 960K init, 3169K bss, 370312K reserved, 1048576K cma-reserved)

2) 问题: 哪些设备 会设置skip cache,哪些设置cache only,

将上述宏进行分类汇总如下: 

分类属性名称核心功能硬件要求是否需要同步典型应用场景
物理布局控制DMA_ATTR_FORCE_CONTIGUOUS强制分配物理连续内存(即使IOMMU存在)依赖CMA或大页内存旧硬件(摄像头控制器)、需物理连续的DMA引擎
DMA_ATTR_ALLOC_SINGLE_PAGES优先分配单页内存(非大页)小缓冲区高频分配(USB批量传输)
缓存与一致性DMA_ATTR_SYS_CACHE_ONLY允许使用系统缓存(需手动同步与非一致性设备)设备需容忍缓存存在是(dma_sync_*非一致性但支持缓存的设备(DSP/NPU)
DMA_ATTR_SYS_CACHE_ONLY_NWA同上,但禁用写分配(减少缓存污染)同上高频写入设备(视频编码输出)
DMA_ATTR_WRITE_COMBINE合并写入操作(类似WC内存)无特殊要求是(需手动flush帧缓冲区(GPU/V4L2)、高频写入设备
内存访问顺序DMA_ATTR_WEAK_ORDERING允许内存访问弱序执行(读写可乱序)设备不依赖严格内存顺序网络设备、DMA引擎
安全与隔离DMA_ATTR_PRIVILEGED限制缓冲区仅高特权级访问(如TEE)依赖MMU权限配置安全加密引擎、TrustZone环境
DMA_ATTR_NO_KERNEL_MAPPING避免创建内核虚拟地址映射协处理私有内存、安全敏感设备
性能优化DMA_ATTR_SKIP_CPU_SYNC跳过CPU缓存同步(假设设备已更新数据)设备必须保证数据完整性设备独占写入(加密引擎)、零拷贝接收
DMA_ATTR_OVERWRITE提示设备将完全覆写缓冲区(无需保留旧数据)设备必须覆写全部数据零拷贝网络接收、DMA_FROM_DEVICE传输
调试与容错DMA_ATTR_NO_WARN抑制内存分配失败警告低内存环境、预期可能失败的分配

 总结 

    对于我们的场景, 采用何种参数进行内存布局、缓存控制呢?

http://www.dtcms.com/wzjs/53461.html

相关文章:

  • 怎样找公司做单的网站怎么制作网站详细流程
  • 保定公司做网站域名在线查询
  • p2p免费网站建设兰州网络推广优化怎样
  • 电子商务网站建设实训内容做网站优化哪家公司好
  • 元器件商城网站建设万网域名续费
  • 深圳的设计网站大全营销网络营销
  • 成都高新区网站建设网络推广公司专业网络
  • 个人备案的网站做企业内容网站seo资讯
  • 网站制作方案怎么写网络营销案例分享
  • iis发布网站 主目录重定向到url广州优化营商环境条例
  • 网站开发时app打开很慢网站案例分析
  • 运城网站推广下拉框关键词软件
  • 重庆网站建设服务网站推广计划方案
  • 丹东网站建设平台经典软文案例50字
  • ai做网站步骤附近电脑培训速成班一个月
  • 做网站备案成功之后改怎么操作百度客服24小时人工服务在线咨询
  • 少年宫网站建设模块nba最新排名东西部
  • 有赞分销商城关键词优化是什么工作
  • 宿迁做网站的公司google优化师
  • 网站开发过程的基本环节seo排名优化点击软件有哪些
  • 做的网站如何防止怕爬虫私域流量和裂变营销
  • 营销型门户网站广西seo
  • 大连经营性网站备案广告招商
  • 中华人民共和国商务部网站市场建设司外包网络推广营销
  • 营销型外贸网站制作社群营销方案
  • wordpress自定义分类法常州seo外包
  • 百度联盟怎么做自己的网站线上广告投放方式
  • 有哪些网站是做红酒批发的百度推广可以自己开户吗
  • 做网站公司那家好网站设计模板网站
  • 网站宣传与推广百度推广电话销售好做吗