我的理解是两种方法的主要区别在于,在“写透”方法中,数据立即通过缓存写入主存储器,而在“写回”方法中,数据在“稍后的时间”写入。
虽然在“写透”中仍需要等待内存在“稍后的时间”,但是它有什么好处呢?
我的理解是两种方法的主要区别在于,在“写透”方法中,数据立即通过缓存写入主存储器,而在“写回”方法中,数据在“稍后的时间”写入。
虽然在“写透”中仍需要等待内存在“稍后的时间”,但是它有什么好处呢?
希望这篇文章能帮助您了解磁盘Cache写穿透和写回的区别
写穿透: 写入同步进行,同时写入Cache和后端存储。
写回(或写延迟): 只有Cache被写入。修改过的Cache块在被替换前会被写回到存储中。
写穿透: 当数据更新时,数据被写入Cache和后端存储。这种模式易于操作,但数据写入速度较慢,因为要将数据写入Cache和存储。
写回: 当数据更新时,数据只被写入Cache。只有当数据从Cache中被移除时,修改过的数据才会被写回到后端存储。这种模式具有快速的数据写入速度,但如果在更新的数据被写入存储之前出现电力故障,则数据将会丢失。
通过一个例子来看这个问题。假设我们有一个直接映射的缓存,并使用写回策略。因此在缓存行中有一个有效位、脏位、标记和数据字段。
假设我们有一个操作:写入 A(其中 A 映射到缓存的第一行)。
发生的情况是,来自处理器的数据(A)被写入到缓存的第一行。有效位和标记位被设置。脏位被设置为1。
脏位简单地指示自从上次将缓存行带入缓存以来,缓存行是否被写入过!
现在假设执行另一个操作:读取 E(其中 E 也映射到第一缓存行)。
由于我们有直接映射的缓存,第一行可以被从内存中带来的 E 块替换。但由于上次写入行中的块(块 A)还没有被写入内存(由脏位表示),所以缓存控制器将首先向内存发出 写回请求 以将块 A 转移到内存中,然后通过向内存发出读操作将该行替换为块 E。此时脏位被设置为0。
因此写回策略不保证内存中的块和其关联的缓存行是相同的。但每当要替换该行时,首先进行写回。
写透策略与写回策略相反。根据该策略,内存始终具有最新数据。也就是说,如果写入缓存块,则内存也会相应地进行写入(不使用dirty bits)。
写回(Write-Back)是一种更复杂的方式,需要使用复杂的缓存一致性协议(MOESI),但它值得这样做,因为它使系统更快速和高效。
写直通(Write-Through)的唯一好处是它使实现非常简单,并且不需要复杂的缓存一致性协议。
write back
策略性能更好,因为向主存写入数据比向 CPU 缓存写入数据要慢得多,并且在使用过程中数据可能会变短(意味着数据可能很快再次被更改,因此不需要把旧版本存入内存)。虽然较为复杂,但这是一种更加精细的策略,现代 CPU 中的大部分内存都采用该策略。 - Eric