Caching 是否根据缓冲区大小在x86 effects缓存上设置memset?

Caching 是否根据缓冲区大小在x86 effects缓存上设置memset?,caching,linux-kernel,linux-device-driver,embedded-linux,dma,Caching,Linux Kernel,Linux Device Driver,Embedded Linux,Dma,我正在使用malloc()和memset()分配一个32MB的缓冲区,其中包含一些数据。当我使用此缓冲区并将其传递给DMA驱动程序时,它使用get\u user\u pages\u fast()锁定页面。当执行DMA操作时,数据到达外围设备 但是,如果我分配了8kB、16kB、32kB或512kB的缓冲区,在DMA之后,过时的数据就会到达外设 我尝试使用dma\u alloc\u coherent()在驱动程序中分配上述缓冲区大小,并刷新分配的地址(使用clflush\u cache\u ran

我正在使用
malloc()
memset()
分配一个32MB的缓冲区,其中包含一些数据。当我使用此缓冲区并将其传递给DMA驱动程序时,它使用
get\u user\u pages\u fast()
锁定页面。当执行DMA操作时,数据到达外围设备

但是,如果我分配了8kB、16kB、32kB或512kB的缓冲区,在DMA之后,过时的数据就会到达外设

我尝试使用
dma\u alloc\u coherent()
在驱动程序中分配上述缓冲区大小,并刷新分配的地址(使用
clflush\u cache\u range()
),如果不使用上述API数据刷新数据,则数据到达终点

所以我有一台x86机器,它使用i7-3930K英特尔处理器,它有12MB的智能缓存

所以这个问题看起来像是缓存效应,但我没有关于用户空间的正确理论,为什么分配和传输32MB缓冲区的DMA是正确的

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