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)指定命令强制读取主内存,让缓存与主内存一致,避免缓存不一致问题。能让高速缓存中的数据失效,强制从新获取主内存数据。