我正在使用双 Cortex-A9 系统,我一直在尝试准确了解为什么自旋锁功能需要使用 DMB。似乎只要合并存储缓冲区被刷新,锁定值就应该在解锁核心的 L1 中结束,并且 SCU 应该使另一个核心的 L1 中的值无效或更新。这足以保持一致性和安全锁定对吗?STREX 不会跳过合并存储缓冲区,这意味着我们甚至不需要刷新吗?
DMB 似乎是一把钝锤,特别是因为它默认为系统域,这可能意味着一直写入主内存,这可能很昂贵。
锁中的 DMB 是否可以作为未正确使用 smp_mb 的驱动程序的解决方法?
根据性能计数器,我目前看到大约 5% 的系统周期在由 DMB 引起的停顿中消失。