首页 > 解决方案 > 在 x86 cpu 中窥探内存访问

问题描述

我正在阅读有关缓存控制协议的信息,因为它记录在Intel Manual Vol.3(p11). 尚不清楚的是窥探内存访问。这是它的描述:

从 P6 系列处理器开始,如果一个处理器(通过监听)检测到另一个处理器正在尝试访问它在其缓存中修改但尚未写回系统内存的内存位置,则监听处理器将向另一个处理器发出信号处理器(通过HITM#信号)高速缓存行保持在修改状态,并将执行修改数据的隐式写回。隐式回写直接传送到初始请求处理器,并由内存控制器窥探,以确保系统内存已更新。在这里,具有有效数据的处理器可以将数据传递给其他处理器,而无需实际将其写入系统内存;然而,监听这个操作并更新内存是内存控制器的责任。

考虑以下缓存状态(根据 MESI):

       CPU1    CPU2   CPU3
Line1   M       I      -

CPU2写入Line1.

这就是我看到窥探的方式:

  1. CPU2对缓存在 中的内存执行写入操作Line1
  2. CPU1窥探并发现CPU2.
  3. CPU1用信号通知其他CPUsHITM#处于Line1修改状态
  4. CPU1执行Line1数据回写 因为CPU1此时有有效数据,数据将被传输到两者CPU2CPU3传输Line1到共享(S)状态。

  5. CPU2在修改 (M) 状态和无效 (I) 状态中执行实际写入传输Line1在其缓存中。Line1CPU1CPU3

因此,通过窥探内存访问,系统总线访问可以避免保持高速缓存的一致性,即使在某些 CPU 写入位于缓存Invalid队列中的内存位置的情况下也是如此。这基本上就是他们所说的窥探的意思吗?

标签: multithreadingx86x86-64cpu-architecturemesi

解决方案


推荐阅读