我正在阅读MESI snooping cache coherence protocol,我猜这是现代多核 x86 处理器中使用的协议(如果我错了,请纠正我)。现在那篇文章在一个地方说了这一点。
保持处于修改状态的行的高速缓存必须侦听(拦截)相应主内存位置的所有尝试读取(来自系统中的所有其他高速缓存)并插入它所拥有的数据。这通常通过强制读取后退(即稍后重试),然后将数据写入主存储器并将高速缓存行更改为共享状态来完成。
现在我不明白的是为什么需要将数据写入主存储器。缓存一致性不能在不进入内存的情况下保持缓存中的内容同步(除非缓存行确实被驱逐了)?我的意思是,如果一个内核不断读取,另一个内核不断写入,为什么不将数据保留在缓存中,并不断更新缓存中的数据。为什么会产生回写到主存的性能?
换句话说,读取数据的核心不能直接从写入核心的缓存中读取并相应地修改他们的缓存吗?