一、缓存机制基础
1.1 缓存类型对比
属性 | Cache Buffer(缓存) | No Cache Buffer(非缓存) |
是否经过 CPU cache | 是 | 否(直接访问内存) |
访问速度 | 快(命中时) | 慢(每次都访问主存) |
数据一致性 | 需要手动 flush/invalidate | 自动同步,无需额外操作 |
1.2 典型应用场景
缓存缓冲区 :适用于高频CPU访问场景(如AI推理中间数据)
非缓存缓冲区 :适用于设备直传场景(如DMA数据流)
二、数据一致性问题深度解析
2.1 DMA-CPU缓存协同问题
当DMA设备与CPU缓存系统协同工作时,可能引发以下同步异常:
场景 | 现象 | 后果 |
CPU写入未Flush | DMA读取到过期数据 | 处理结果基于旧数据 |
DMA写入未Invalidate | CPU使用缓存旧数据 | 计算逻辑错误 |
并发访问未同步 | 内存与缓存数据不一致 | 系统稳定性风险 |
典型异常表现 :
感知输出图像中出现非连续绿色伪影(数据不同步导致的像素错位)

三、缓存管理技术方案
3.1 手动缓存控制接口
3.2 自动化缓存配置
输入缓冲区配置
"in_buf_noclean": 0 # 0=自动执行flush(默认1不执行)
"in_buf_noncached": 0 # 0=使用缓存内存(默认)
输出缓冲区配置
"out_buf_noinvalid": 0 # 0=自动执行invalidate(默认1不执行)
"out_buf_noncached": 0 # 0=使用缓存内存(默认)
四、配置策略建议
4.1 性能敏感场景
"in_buf_noclean": 1 # 关闭自动flush
"out_buf_noinvalid": 1 # 关闭自动invalidate
适用场景:高频数据流(>60fps视频流)
注意事项:需配合手动缓存控制接口使用
4.2 数据安全场景
"in_buf_noclean": 0 # 强制自动flush
"out_buf_noncached": 1 # 使用非缓存内存
适用场景:自动驾驶感知推理场景
性能影响:增加约15-20%的CPU开销
五、最佳实践指南
混合使用策略 :对处理流水线中的中间缓冲区采用Cache Buffer,终端输出使用No Cache Buffer
批处理优化 :对连续内存区域执行批量flush/invalidate操作(减少系统调用开销)