dma 和 cache

在linux中采用,之前也会有cache相关问题,但和dma共用时,可能是采用了已经封装好的接口,导致感知不全。此次在裸板调试中,感受更加明确。特此记录。

     在裸板上,cpu 的地址空间管理全部由自己划分。哪段地址配置为cache,哪段不配置等。默认情况下,映射到DDR的地址都没有cache

在dma和cpu core会 访问同一段内存空间时,就引出此问题。而linux分配内存供CPU使用的相关接口中,已经对地址是否cache做了配置。

1) 对地址的cache属性设置通常都可以分段的,即地址段A 可以cache,而地址段B不可以cache.

2) 对cache的操作,包括flush和invalide 两个。分别用在读写两个方面。功能示例如图,

当针对DDR range A和range B的cache功能被使能后,core在接收数据时,要先invalidate当前cache中的数据,以免读到旧数据。

  当然,如果range A 和range B设置为非cache,那么core在进行针对这两段内存的访问时,时延增加明显,不满足应用场景要求。

此外收集些相关资料:

Cache和DMA一致性 - 知乎

深入学习Cache系列 1: 带着几个疑问,从Cache的应用场景学起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

proware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值