DMA, CMA, coherence and performance

Steven Bell botsnlinux at gmail.com
Thu Jan 2 18:20:16 EST 2014


Hi,

I'm working on a device driver for a video device which continuously reads
and writes image frames using DMA. The frames are fairly large, in the
range of 2-8MB, and I would like the buffers for them to be contiguous
because of my hardware. My understanding is that using the contiguous
memory allocator is the current "right way" to get the buffers, and that
CMA operates entirely behind the scenes when calls are made to
dma_alloc_coherent().

However, it seems that for this system, a streaming DMA setup would be more
appropriate.  The buffer gets filled with data once, handed to the device,
and then isn't touched again until it gets reused with new data.  The
resources I've read have hinted that streaming DMA has some performance
benefits over coherent DMA, so this seems like the way to go.  But I
haven't seen any discussion of how to use CMA with streaming DMA (or
whether such a thing is even necessary).

Does the CMA also work behind get_free_pages, or other kernel memory
allocation methods?  Does it matter?  The kernel newbies page on memory
allocation (http://kernelnewbies.org/KernelMemoryAllocation) says that
get_free_pages up to about 8MB are ok.  Is that a generalization based on
typical memory fragmentation, or a guarantee?

Thanks,
Steven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20140102/7d46f3d3/attachment.html 


More information about the Kernelnewbies mailing list