Chinaunix

标题: DMA 什么情况下必须使用流式映射, 什么情况下必须使用 一致性映射 [打印本页]

作者: mordorwww    时间: 2015-08-16 21:43
标题: DMA 什么情况下必须使用流式映射, 什么情况下必须使用 一致性映射
DMA什么情况下必须使用流式映射, 什么情况下必须使用 一致性映射
作者: toky_lee    时间: 2015-08-24 22:26
两种映射方式,对ARM来讲,一种是刷cache,另一种是关cache,都可以用作DMA传输,一般不存在说哪种情况下必须用哪种映射。
作者: mordorwww    时间: 2015-08-25 07:36
toky_lee 发表于 2015-08-24 22:26
两种映射方式,对ARM来讲,一种是刷cache,另一种是关cache,都可以用作DMA传输,一般不存在说哪种情况下必 ...


兄台, kernel DMA how-to 上有说明,但是老衲道行不高, 参透不了

https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt

Good examples of what to use streaming mappings for are:

        - Networking buffers transmitted/received by a device.
        - Filesystem buffers written/read by a SCSI device.


Good examples of what to use consistent mappings for are:

        - Network card DMA ring descriptors.
        - SCSI adapter mailbox command data structures.
        - Device firmware microcode executed out of
          main memory.
作者: toky_lee    时间: 2015-08-25 09:59

- Networking buffers transmitted/received by a device.
为例,
上层已经准备好了buffer,交由device driver通过DMA发送出去,那么显然,以流映射方式更为简便,因为只需要刷cache,DMA就能看到实际的buffer数据。那么采用一致性映射可不可以呢? 也是可以的,只是麻烦而已,那就得申请一块一致性DMA内存,然后把上层的buffer拷贝到这里,然后启动DMA去传输。

在实际开发中,不防考虑一下,分别以这两种方式来实现你的DMA传输需求,哪种更优。
作者: mordorwww    时间: 2015-08-25 15:29
toky_lee 发表于 2015-08-25 09:59

- Networking buffers transmitted/received by a device.
为例,



上层已经准备好了buffer,交由device driver通过DMA发送出去,那么显然,以流映射方式更为简便,因为只需要刷cache,DMA就能看到实际的buffer数据。那么采用一致性映射可不可以呢? 也是可以的,只是麻烦而已,那就得申请一块一致性DMA内存,然后把上层的buffer拷贝到这里,然后启动DMA去传输。

一致性buffer需要拷贝么?这点和streaming buffer没有区别吧,
一致性buffer,你申请一块内存,把指针挂到DMA设备上就OK。DMA原本的目的就是避免拷贝的。
作者: toky_lee    时间: 2015-08-27 16:00
我只是举个例子说明,一致性dma buffer与流式dma buffer,并不是相互排它的。跟你的驱动接口以及驱动的实现质量有关。必须得在一个特定需求下,才能讨论该用何种dma buffer
作者: lyl19    时间: 2015-08-27 18:23
回复 1# mordorwww


对网络设备来说,最简单的,descriptor通常是coherent的,因为它们小,但skb buffer通常是cache的,因为它们大。
buffer的大小是决定是否应该coherent的一个因素,因为有的系统中,coherent memory会比较昂贵。




   
作者: mordorwww    时间: 2015-08-27 21:20
lyl19 发表于 2015-08-27 18:23
回复 1# mordorwww



frame buffer 使用coherent DMA
frame buffer 可不 小




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2