15 | MESI协议:多核CPU是如何同步高速缓存的?
缓存写策略
- 深入了解
- 翻译
- 解释
- 总结
多核CPU中的高速缓存同步问题是一个重要的技术挑战。本文介绍了在多核体系结构下解决缓存一致性问题的相关内容。首先讲解了缓存的写策略,包括写回和写直达,以及写更新和写无效的策略。接着介绍了缓存一致性问题的概念,以及写传播和事务串行化的重要性。最后,详细介绍了基于写直达和写回的缓存一致性协议。通过本文的内容,读者可以快速了解多核CPU中缓存同步的挑战和相关解决方案。 在多核CPU中,缓存一致性问题是由CPU对自己的缓存进行写操作,而未能及时通知到其他CPU所引起的。本文详细介绍了缓存的写策略,包括写回和写直达,以及写更新和写无效的策略。此外,还讨论了在写回策略和写直达策略中,缓存的状态和状态迁移的情况,以及缓存一致性协议的重要性。通过了解这些内容,读者可以更好地理解多核CPU中缓存同步的挑战,并掌握相关解决方案。 总之,本文深入探讨了多核CPU中的高速缓存同步问题及相关解决方案,为读者提供了全面的技术视角和解决思路。
《编程高手必学的内存知识》,新⼈⾸单¥59
全部留言(16)
- 最新
- 精选
- raisecomer有一个问题,当IO设备通过DMA通道修改内存数据时,如果这个内存数据刚好被一个CPU已经加载到本地缓存了,也就是内存数据修改的源头不是CPU,那么缓存一致性怎么保证的,也是MESI协议吗?
作者回复: 这是两个级别的事情。CPU与内存之间打交道,中间会经过缓存。这是一个级别,CPU与外设之间通过DMA通讯,内存做为buffer,这是另外一个级别。你担心的DMA区域的读写冲突,CPU会保证的,CPU把一块内存当做DMA区域之后,这块区域的所有权可以认为是外设的,只有当DMA完成后,外设发起中断通知CPU,这块内存还给你了,CPU再会去读这一块的内容。
2021-12-087 - sc老师,请问 1. 在 基于“写直达”的缓存一致性协议 中,""“写传播”的缓存一致性的缺点是需要很高的带宽。原因是对于缓存块的每次写入,都会触发 BusWr 从而占用带宽。相反的是,在“写无效”缓存策略下,如果同一个缓存块中的数据被多次写入,只需占用一次总线带宽来失效其他处理器的缓存副本即可。",这个相反的是,说的是什么意思,读了好几次,没有读明白,我理解的是:前面说的是缓存块的每次写入,都会触发 BusWr,后面说的是在写无效策略下,即使每次写入都会触发 BusWr,但是对于 I 状态的缓存块,即使侦听到 BusWr ,也不会有影响,请问老师是这样吗 2. 在最后总结中,说的是 “在写回策略中主要包括失效和有效两种状态;在写直达策略中又通过引入独占和修改状态,提升了缓存同步的效率。”,老师这里是不是写反了,看上面的文章中,应该是写直达只有两种状态,然后在写回中又增加了独占和修改状态。
作者回复: 1. 写传播不光要告诉其他CPU(比如就是CPU1)那块缓存无效了,还要告诉它新的值是什么。有些时候,CPU1其实并不太需要立即知道那里的值是什么。只需要在CPU1读数据的时候再知道。所以写无效就是通知一下CPU1,你那里的副本失效了啊,你需要的话再来问我要。写传播则是我每一次更新都要把新的值通知给你。这是两者的区别。 2. 这个是确实是笔误,我尽快修复。谢谢。
2021-12-102 - 送过快递的码农老师,你这边讲的总线上什么总线啊?是cpu内部的总线,还是负责cpu和内存通讯的总线啊?
作者回复: 我们讲核间通讯,默认就是核间总线了。是cpu内部的。
2021-12-022 - shenglin还有一个问题,一个 CPU 发起请求的同时,也会产生总线事件,导致其他CPU的缓存的状态改变,这样不是会频繁占用总线带宽?
作者回复: 必然,所以第16课讲解了一些优化的办法,但这需要软件工程师的配合。
2021-12-02 - shenglinVI协议的状态机示意图中,右边的情况,当缓存处于valid状态时,收到BusWr事件,此缓存不会产生总线事务,但是会变成invalid状态,示意图的箭头画反了吧,由V指向I?
作者回复: 是的,已经修复,谢谢。
2021-12-02 - 无嘴小呆子既然MESI保证CPU缓存一致性了,为何java还要使用volatile关键字呢?就是MESI何时触发老师没有讲解清楚呀!硬件篇应该加上这个吧~
作者回复: 请读一下第16节课,了解了内存屏障,然后我们会在第18节课再讲Java内存模型。所以volatile需要的前置知识非常多。你可以看一下目录先了解一下后面的课程内容。
2021-12-02 - Corner所以缓存一致性协议是硬件保证吗?也就是不管你怎么写代码,它都是存在的?
作者回复: 不一定,学完第16节和第18节课你就明白了,有的CPU,比如x86,它的硬件提供了比较强的缓存一致性支持,但有的CPU,比如Arm,它指供的缓存一致性支持就很弱,这就需要软件工程师在正确的位置插入内存屏障来保证这种一致性。
2021-12-022 - springXu提个小建议,有没有这个协议的说明资料,比如intel的哪个文档中有这个介绍?又或者是AMD的。能给个链接么?
作者回复: Wiki吧。因为其实各个CPU的设计都不相同。MESI只是一个基本的总结。Intel和AMD两家使用的核间同步协议都不相同。比如AMD真正使用的是自己改进的版本MOSEI,可以看各家CPU自己的编程手册,例如AMD的:http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf
2021-12-014 - xzy在写回策略中主要包括失效和有效两种状态;在写直达策略中又通过引入独占和修改状态,提升了缓存同步的效率。 这个总结写反了吧2022-06-231
- 苏志辉mesi的右图中,e状态只会产生busrdx不会产生busupgr吧,因为当前是e其他核应该都没有效数据。2022-01-2911