我正在开发用于DMA的Linux驱动程序。 驱动程序使用dma_alloc_coherent
分配内存区域,我使用_dma_mmap_id = (int*) mmap(NULL, buffer_size, PROT_READ | PROT_WRITE, MAP_SHARED, _dma_device_id, 0);
映射到用户空间。在用户空间中,我写入并读取该区域并触发DMA传输。用于DMA的快速缓冲存储器缓冲区
但是,我注意到写入mmaped区域非常缓慢(〜100MB/s)。 因此,我寻找加快这一点的方法。
我试图分配非相干存储器(使用kmalloc
和dma_alloc_noncoherent
)用于测试目的(只是为了看看是否这加速了存储器存取),但在这些情况下的内存我卡恩分配量是非常有限的(例如,对于kmalloc
,为4MB),这比我要在单个DMA访问中传输的内存量要小。
所以我不确定什么是可能的选择,可能会导致更高的性能。
- 是否有可能将数据复制到该区域比
memcpy
更快? - 是否可以分配更大的缓存内存区域?使用
dma_alloc_coherent
我可以分配最多64 MB - 为什么这比可以使用kmalloc
分配的内存大得多? - 什么是替代方法?
目前,数据传输到mmaped区域是我应用程序的瓶颈。
最好的问候, 阿婆
看看巨大的页面 – stark