DMA cache一致性二

参考资料:
注:本节有一些个人理解,如有误请谅解
 
dma_alloc_coherent与dma_alloc_writecombine的区别(无保证cache一致性情况下):
dma_alloc_coherent 在 arm 平台上会禁止页表项中的 C (Cacheable) 域以及 B (Bufferable)域。而 dma_alloc_writecombine 只禁止 C (Cacheable) 域.
C 代表是否使用高速缓冲存储器, 而 B 代表是否使用写缓冲区。
这样,dma_alloc_writecombine 分配出来的内存不使用缓存,但是会使用写缓冲区。而 dma_alloc_coherent 则二者都不使用。
C B 位的具体含义:
0 0 无cache,无写缓冲;任何对memory的读写都反映到总线上。对 memory 的操作过程中CPU需要等待。
0 1 无cache,有写缓冲;读操作直接反映到总线上;写操作,CPU将数据写入到写缓冲后继续运行,由写缓冲进行写回操作。
1 0 有cache,写通模式;读操作首先考虑cache hit;写操作时直接将数据写入写缓冲,如果同时出现cache hit,那么也更新cache。
1 1 有cache,写回模式;读操作首先考虑cache hit;写操作也首先考虑cache hit。
 
后面加了一条无保证cache一致性的情况下,原因在于假设使用dma_alloc_coherent使用了cache,就得进行不断地invalidate cache和TLB,并且还无法保证百分百不出问题,所以直接不使用cache缓存和缓冲
但是如果有硬件可以确保cache一致性的话,如CMN,那么dma_alloc_coherent就不一定不使用cache了,并且dma_alloc_coherent申请的物理内存也不一定是连续的,这跟芯片原厂实现方式强相关。具体可见参考资料的博客
 
 
 
 
 
 
 
 
 
 
 
posted @ 2024-04-01 09:02  lethe1203  阅读(32)  评论(0编辑  收藏  举报