目录
处理器协同机制其二内存屏障与内存顺序(及Store Buffer与Invalidate Queue)
一、缓存结构
现代CPU的速度远快于内存系统,因此引入缓存(Cache),其结构如下:
缓存和内存以固定大小的数据块进行交互,这些数据块被称为缓存行,其大小一般是2的整数幂次。在硬件上,用哈希表来实现高速缓存。
Cache miss : 缓存缺失,CPU要操作的数据不在其缓存中,需要从他处获取(一般是内存)。
Cache hit : 缓存命中,CPU要操作的数据在其缓存中,可以直接操作缓存。
提升缓存命中率,能提高系统性能。从缓存为空,CPU不断处理数据(从内存中读取),缓存越来越满,而缓存大小有限,会出现要缓存缺失的数据必须要覆盖(驱逐)一些已缓存的数据,这样会达到缓存的稳定状态,此时缓存命中率越高则性能越优。
二、缓存一致性协议
此处只讲MESI协议:
M : modified,该缓存行刚被修改,其数据不会存在于他处,负责将之写回内存或者交给其他缓存(驱逐此缓存行之前必须完成)。
E : exclusive,该缓存行是当前核心独有的,其与内存一致,可以直接对其操作。
S : shared,其数据可能在一个或多个CPU cache中,其与内存一致,需先转换为E状态才能进行修改(需要和其他CPU cache进行沟通)。
I : invalid,该缓存行是空的。
当需要驱逐缓存行时,优先使用I状态的缓存行,其次驱逐S和E状态的缓存行。
MESI协议消息:
1、Read : 读消息包含需要读取的缓存行的物理地址。
2、Read Response : 回应读消息包含之前读消息所请求的数据,它可能来自内存或其他缓存,若另一个缓存拥有请求的缓存行数据且为M状态,则必须回应读消息。
3、Invalidate : 使无效消息包含需要改为I状态的缓存行的物理地址,其他缓存必须移除相应的数据并回应。
4、Invalidate Acknowledge : 认可使无效消息,收到使无效消息且移除相应数据後,必须回复认可使无效消息。
5、Read Invalidate : 使无效读消息包含要读取的缓存行的物理地址,等同于Read+Invalidate,其希望收到一个回应读消息和多个认可使无效消息。
6、Writeback : 写回消息包含要写回内存的地址和数据,M状态的缓存行通过写回消息的完成以允许被驱逐,从而为其他数据腾出空间。
MESI状态图解:
EM : 修改,处理器可以直接修改E状态的缓存行,这不需要MESI消息。
ME : 写回,缓存行写回内存,这需要“写回消息”。
有关“读消息”:
IS : 读消息,处理器加载未命中的缓存,由其他缓存响应。
IE : 读消息,加载未命中的缓存,由内存响应(有些体系将此归为IS,即读消息不会将缓存行状态改为E)。
ES : 回应读消息,其他处理器读取此缓存行必须以回应,不用写回内存。
MS : 回应读消息,其他处理器读取此缓存行必须以回应,可能会写回内存。
有关“使无效消息”:
SE : 使无效消息,处理器将要修改此缓存行。或者所有其他缓存弹出该缓存行。
SM : 使无效消息,处理器原子的修改此缓存行。
SI : 认可使无效消息,收到使无效消息後做出回应。或者主动弹出缓存行。
有关“使无效读消息”:
IE : 使无效读消息,处理器将要修改未命中的缓存行。
IM : 使无效读消息,处理器原子的修改未命中的缓存行。
EI : 认可使无效消息且回应读消息。或者主动弹出缓存行。
MI : 认可使无效消息且回应读消息。或者主动弹出缓存行(伴有写回内存)。