写在L1和L2缓存上的行也写在LLC中吗

时间:2019-03-14 09:22:34

标签: caching memory-management cpu scheduler

我读到“当程序尝试在缓存中存在的页面上写时发生写命中”。如果程序开始在L1高速缓存中写入并且找到足够的行来写入数据,那么它也将被写入LLC吗?我有一个疑问,因为在读取带到L1和L2缓存的值时,也会带到LLC。

请帮助我理解。预先谢谢你

1 个答案:

答案 0 :(得分:0)

我会尝试分点回答这个问题,希望如果我错过了什么,有人可以添加它,或者更正我的答案:

<块引用>

当程序尝试在缓存中存在的页面上写入时发生写入命中

  • 确实,当 CPU 尝试更新在 L1 数据缓存中找到的数据块(也称为缓存行)时,就会发生写命中。但是,更新的缓存块会根据您的系统使用的回写/直通方案(或其他方案)在内存层次结构(即 L2、LLC)中进行更新。
  • 快速说明:据我所知,缓存中的数据通常称为缓存块或缓存行,而不是缓存页。
<块引用>

如果程序开始写入 L1 缓存并找到足够的行来写入数据,它是否也会写入 LLC?

  • 这在很大程度上取决于内存管理单元 (MMU) 和回写/直通方案。在多核多缓存系统中,如果一个数据块同时被多个核需要/处理/更新,则该块很可能在更新时立即在各级缓存中更新(直写)通过任何内核。如果每个内核单独工作而没有数据共享或数据共享很小,如果一个块被一个内核更新,则只有当它从更新该块的内核的 L1 缓存中逐出以保持一致性时,它才会在更高级别的缓存中更新(回信)。
<块引用>

我有疑问,因为在读取 L1 和 L2 缓存的值时,也会将其带到 LLC。

  • 如果您使用的是多核系统,该进程很可能同时由多个核处理,因此任何核对数据引入的任何更改都需要更新整个内存中的块层次结构以避免一致性问题。