在CPU Hit/MIss时,Cache和Main Memory之间交互策略
关键词:Hit、Miss、Read Through、Read Allocate、Write Through、Write Back、Write Allocate、No Write Allocate等。
对Cache和Main Memory之间数据维护设计到性能问题,也涉及到一致性问题。
了解下面各种策略,有利于理解Cache和Main Memory行为和配置Cache属性。
1. 各种策略行为和优缺点
Read Through:CPU Read data Through(not Allocate) Cache to Main Memory.
Read Allocate:CPU Read data from Main Memory and Allocate it in cache
Write Through:CPU Write data Through Cache to Main Memory。
Write Back:CPU Write data Back to Cache.
Write Allocate: CPU Write data to Main Memory and Allocate it in Cache.
No Write Allocate: CPU Write data to Main Memory, but No Allocate it in Cache.
Read/Write在Hit/Miss情况下,不同策略的表现行为:
行为 | ||||
Read | Hit | CPU直接从Cache获取数据。 | ||
Miss |
Read Through |
直接从Main Memory读取内容到CPU,不经过Cache。 |
避免Cache占用,但是对统一内容连续读效率很低。 |
|
Read Allocate No Read Through |
先把数据从Main Memory读取到Cache中,再从Cache中读取数据到CPU。 |
占用Cache, | ||
Write | Hit | Write Through | 把数据同时从CPU写到Cache和Main Memory中。 | 优点: - 未命中的读不会导致写到Main Memory。 - 较易实现。 - Main Memory中内容往往是最新的,也即一致性。 缺点: - 写入Main Memory较慢。 - 每次写操作都会触发访问Main Memory。 - 所需带宽更大。 |
Write Back |
只把数据从CPU写到Cache中。 后续可以通过flush方式把数据从Cache写入到Main Memory中。 |
优点: - 写的速度非常快,Cache访问速度远高于Main Memory。 - 多次到Cache的写只需一次到Main Memory的写。 - 所需带宽更小。 缺点: - 实现较难 - Main Memory数据和Cache中不一致。 - 导致Cache替换的读操作会将dirty快写入Main Memory。 |
||
Miss | Write Allocate |
先把要写的数据从Main Memory载入到Cache中,CPU将数据写入到Cache中。 后续通过flush将数据从Cache写入到Main Memory中。 |
||
No Write Allocate | 数据在Main Memory中被修改,直接从CPU写入到Main Memory中。不会被加载到Cache中。 |
2. Write策略组合
不同Write Hit和Write MIss策略组合下的行为:
Write Hit Policy | Write Miss Policy | ||
Write Through | Write Allocate |
Hit:将数据写入Cache和Main Memory。 Miss:将数据从Main Memory读到Cache中,然后CPU Hit,CPU再写到Cache和Main Memory中。 当Miss的时候将数据带到Cache中,然后再将数据写入Cache和Main Memory,其中Cache的操作不太合情理。 |
|
Write Through | No Write Allocate |
Hit:将数据写入到Cache和Main Memory。 Miss:更新Main Memory中内容,并且不会在Cache中存在相关内容。 后续内容写入将更新Main Memory,因为使用了Write Through策略。因此,节省了一些时间,不会在Miss时将内容带进Cache中,因为它看起来毫无用处。 |
|
Write Back | Write Allocate |
Hit:将数据写入Cache并更新dirty位,Main Memory不会被更新。 Miss:更新Main Memory中的内容并将该块带到Cache中; 对同一块的后续写入,如果该块最初导致未命中,则下次将命中Cache,为该块设置脏位。这将消除额外的Main Memory访问,并比Write Through与Write Allocate组合执行更加有效。 |
|
Write Back | No Write Allocate |
Hit:当它写入Cache设置块的脏位时,Main Memory不会被更新; MIss:更新Main Memory中的块,而不将该块带到Cache中; 对同一块的后续写入,如果该块最初为Miss,则会一直导致Miss,并导致执行效率非常低。 |
所以常见的组合是Write Through-No Write Allocate和Write Back-Write Allocate。
3. 一个ARM内存实例
下图是M33的Cache策略实例:
参考文档: