我有一个 arm cortex-a9 四核设备,我正在编写一个多进程应用程序。这些进程共享相同的输入源——它们都使用 mmap() 调用访问的 DMA 缓冲区。
我注意到进程访问 DMA 内存所需的时间比我将输入源更改为正常分配的缓冲区(即使用 malloc 分配)所需的时间要长得多。
我理解为什么 DMA 缓冲区必须是不可缓存的,但是,因为我有能力确定缓冲区何时稳定(硬件未更改,大多数情况下都是如此)或脏(数据已更改)我想如果我将内存区域设为临时可缓存,我可能会获得显着的速度提升。
有没有办法做到这一点?
我目前正在使用这条线来映射内存:
void *buf = mmap(0, size, PROT_READ | PROT_WRITE,MAP_SHARED, fd, phy_addr);
谢谢!