【问题标题】:Dirty bit value after changing data to original state将数据更改为原始状态后的脏位值
【发布时间】:2017-04-27 11:44:52
【问题描述】:

如果缓存的某些部分的值为 4,我们将其更改为 5,则该数据的脏位设置为 1。但是,如果我们将值设置回 4,脏位是否仍保持为 1还是变回0?

我对此很感兴趣,因为这意味着在处理主存和缓存之间的读写操作时,计算机系统会进行更高级别的优化。

【问题讨论】:

标签: cpu cpu-architecture cpu-cache


【解决方案1】:

为了使缓存能够像您所说的那样工作,它需要保留 一半 的数据空间来存储旧值。
由于缓存之所以昂贵,正是因为它们每比特的成本很高,并且考虑到:

  • 该机制只能检测两个级别的写入历史记录:A -> B -> A 而不会更深(如 A -> B -> C -> A)。
  • 写入意味着将当前值复制到旧值中。
  • 缓存中可标记数据的最小数量是整行需要改回原来的值。考虑到一行的大小约为 64 字节,这不太可能发生。
  • 缓存的层次结构(L1、L2、L3...)正好可以缓解problem of eviction

您提出的解决方案与缺点相比几乎没有什么好处,因此没有实施。

【讨论】:

  • 优化直接静默存储(即,存储与当前内存位置相同的值)已在学术上考虑过,但即使是潜在的优化也存在重大问题,并且没有(据我所知) 在实际产品中实现。
  • @PaulA.Clayton 你的意思是write-through
  • 不,请参阅Google Scholar search results。实际上有一个已经实现的静默存储优化示例:Intel 的硬件锁省略。在这种情况下,软件会提示锁的值将被恢复(最大限度地减少检测可能的静默存储的开销),并且省略这种特定类型的 ABA 访问的好处对于允许使用事务内存但与旧硬件兼容非常重要。
  • @PaulA.Clayton 就我的意图而言,OP 问题不是关于静默存储(当前缓存值与当前内存值),而是关于当前缓存值与先前缓存值。谢谢你的有趣点!
  • 您可以将在一个缓存级别内发生的更改和还原视为半静默存储,然后将原始值写回较低级别。这个比较容易检测,大部分时候解决双重存储。
猜你喜欢
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2018-11-22
  • 1970-01-01
相关资源
最近更新 更多