首先放Paul大师的论文地址:《Memory Barriers: a Hardware View for Software Hackers》

详细了解大家还是要去看论文,论文太长了我实在是翻译无能。

最近看了好多国内介绍cpu缓存知识的文章,我发现绝大部分文章都说到了缓存一致性协议MESI(或者变种MSI、MOESI之类的),说了内存屏障等等,但是说的都很泛泛,并没有解释清楚他们两者之间的联系,只是硬搬运了概念.
其实在现代的cpu设计中,你如果严格遵守MESI协议,同步通信invalidate或者acknowledgement状态,是会造成cpu stall停顿问题的,这极大的浪费了cpu的性能.

为了性能其实是做了改动的,那就是在cache和cpu之间又加入了一层store buffer,但是引入store buffer又造成了新的问题:

  • 一个是数据同时出现在cache和store buffer造成的selfconsistency数据不一致问题,这个问题可以通过硬件的store forwarding来解决;
  • 但是还有一个问题就是会导致被动的指令重排(当然指令也可以因为流水线执行等原因主动重排),这个问题是硬件分辨不了无法解决的,所以此时我们需要从软件层面来解决所以才有了memory barriers内存屏障的概念.

大白话来说,为了解决cpu和memory速度不匹配问题引入了cache,为了解决引入cache带来的数据一致性问题引入了mesi,为了解决mesi带来的性能问题引入了store buffer,为了解决store buffer带来的问题,引入了store forwarding和memory barriers(当然还有为了解决store buffer很快被填满而引入了invalidate queues),mesi只是其中一个环节,而且是内存屏障出现的因.
给大家安利一下Paul大师关于memory barriers的论文,读完肯定会有收获的

PS:大家有没有发现这个其实就是计算机届著名的解决不了套一个中间层的中间层定律,老套娃了,套一层带来一层的问题

Last modification:June 30th, 2021 at 08:09 am
大家一起分享知识,分享快乐