CPU缓存及内存屏障

CPU 性能优化手段 - 缓存

为了避免 CPU 访问主内存的时间开销,处理器会利用高速缓存来提高性能。

CPU 缓存模型:

image.png

多级缓存

L1 Cache (一级缓存) CPU第一级高速缓存,分为数据缓存和指令缓存,一般服务器 CPU 的缓存容量通常在32-4096KB

L2 Cache (二级缓存)为了突破一级缓存的容量限制,提高CPU的性能,CPU外部放置的高速存储器。

L3 Cache (三级缓存)同理二级缓存,提高缓存的容量限制,一般多核共享 L3 缓存,

CPU 优先一级缓存查找数据,逐级查找,最后到外置硬盘。

缓存协议

缓存协议为了处理多核 CPU 缓存数据一致性问题,在多核处理器中,CPU 对缓存中的数据进行修改,需要通知其他 CPU,同理,CPU 不但要处理缓存的读写,也要监听和通知替他CPU,保证数据一致性。

MESI协议定义了四种缓存状态:

修改态 (Modified)缓存内容与主内存不同,为此Cache专有
专有态 (Exclutive)缓存内容与主内存相同,并且仅出现在此 Cache 中
共享态 (Shared) 缓存内容与主内存相同,同时出现在其他 Cache 中
无效态 (Invalid)Cache 中内存无效,需要从主内存获取

问题

CPU 缓存不是实时同步,因此在统一时刻,各 CPU 看到的同一内存地址的缓存数据可能出现不一致情况。

CPU 性能优化手段 - 指令重排

CPU 处理写缓存时可能出现缓存区块被其他 CPU 占用,为了提高性能,可能将后面的读缓存优先执行。当然,指令重排不能影响程序的运行结果,不能对有数据依赖关系的只能进行重排。

问题

在多 CPU 中 指令逻辑无法分辨因果关联,出现乱序执行,影响执行结果。

内存屏障

写内存屏障 (Store Memory Barrier)指定命令强制写入祝内存,CPU 就不会因为考虑性能而对指令重排。能让写入缓存中的最新数据写入主内存,让其他线程可见。

读内存屏障 (Read Memory Barrier)指定命令强制读取主内存,让缓存与主内存一致,避免缓存不一致问题。能让高速缓存中的数据失效,强制从新获取主内存数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容