本文是“Understanding Caching”的笔记:
(1)什么是cache line
?
A cache line is the smallest unit of memory that can be transferred to or from a cache. The essential elements that quantify a cache are called the read and write line widths. These signify the minimum amount of data the cache must read or write from the memory or cache below it. Frequently, these quantities are the same, so caches often are quantified simply by the line width. Even if they differ, the longest width usually is called the line width.
(2)inclusive
和exclusive
:
A multilevel cache can be either inclusive or exclusive. Exclusive means a particular cache line may be present in exactly one of the cache levels and no more than one. Inclusive means the line may be present simultaneously in more than one level of cache. Nothing prevents the line widths from being different in differing cache levels.
(3)Write through
和write back
:
Write through means the cache may store a copy of the data, but the write must be completed at the next level down before it can be signaled as complete to the layer above. Write back means a write may be considered complete as soon as the data is stored in the cache. For a write back cache, as long as the written data is not transmitted, the cache line is considered dirty, because it ultimately must be written out to the level below.
(4)Coherency
:
A cache line is termed coherent when the data in the line is identical to the data stored in the main memory being cached. If this is not true, the cache line is termed incoherent.
没有coherency
带来的两个问题:
a)所有种类cache
都有可能发生(stale data
):主存数据更新了,但是cache
数据不是最新的。因此会导致读错误。如下图所示:
这是一个暂时的错误,因为正确的数据在主存中,只需让cache
重新读一下即可。
b)这种错误只发生在write back cache
中:主存和cache
里分别更新了数据,现在要使二者数据一致。由于每次cache
要更新一个cache line
,所以必然要导致更新的数据出现不一致。如下图所示: