x86上的memset根据缓冲区大小影响缓存?

时间:2016-09-19 15:07:41

标签: caching linux-kernel linux-device-driver embedded-linux dma

我正在使用malloc()memset()分配一个32MB的缓冲区和一些数据。当我使用此缓冲区并将其传递给DMA驱动程序时,它使用get_user_pages_fast()来固定页面。执行DMA操作时,数据到达外设。

但如果我分配了8kB或16kB或32kB或512kB的缓冲区,则在DMA之后,将到达外围设备的过时数据。

我尝试使用dma_alloc_coherent()在驱动程序中分配缓冲区大小并刷新分配的地址(使用clflush_cache_range()),然后数据到达终点,如果不使用上面的API数据刷新数据则不是达到。

所以我有x86机器,它使用i7-3930K Intel处理器,有12MB​​智能缓存。

所以有些问题看起来像缓存效果,但我没有适当的理论与用户空间为什么32 MB缓冲区分配和传输是正确的DMA。

任何指导/帮助都会给我更好的洞察力。

0 个答案:

没有答案