多核处理器的MESI协议细节



多核处理器的MESI协议的细节对我来说非常重要,但是我在任何地方都找不到它们。甚至http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf也没有包含足够的细节。例如:假设一个私有L1和共享L2缓存。如果一行的状态在L1中是排他的,那么它在L2中也是排他的吗(或者无效,因为只有在一个缓存中可能是行排他的状态)?显然,如果另一个核心写入这行,那么L1中先前独占行的状态将无效,但是如何更改L2缓存行的状态呢?如果在L1中修改的行被另一个核心读取,那么该行的新状态将被共享,并且它是通过L2缓存写回主存,还是在L2中也保持修改?等。

你很难找到这些答案的原因是因为传统协议没有为分层缓存架构定义,所以MESI协议本身并没有定义当你有一个L1和一个L2缓存时会发生什么。它取决于另外三个系统属性。

如果L2被设计为L1的排他性(即,保证L2和L1永远不会有共同的缓存行),那么L1中的任何行在L2中都将是无效状态(基本上不存在)。

如果L2包含L1,也就是说,L1中的每一行都必须在L2中有一个条目,L2中的条目将包含一个描述符,说明哪个L1缓存中有处于E状态的行。

在从E或W阶段读取时是否将值写入L2或内存取决于您的系统是否支持缓存到缓存传输。在过去,当每个芯片都是一个核心时,核心到核心的通信就像读/写内存一样昂贵,系统将数据写入内存并让其他处理器读取它(这使得它们不支持缓存到缓存的传输)。在多核中,与与芯片上的其他核心通信相比,通过内存进行通信的成本高得惊人,因此今天几乎所有的多核芯片都支持缓存到缓存传输。因此,从E或W阶段的读取不会通过写入内存来满足。

我希望这对你有帮助。

我发现了这个。这可能会有帮助。
第三条注释可能也有用。

最新更新