写传播和写策略

发布于:2025-07-06 ⋅ 阅读:(15) ⋅ 点赞:(0)

主题

写传播 是 cache 的基础特性 . 而 写传播是为了 维护 缓存一致性而新增的
写策略是考虑的是内层传播到外层。写传播考虑的是传播到同一层的其它缓存
写策略和写传播都属于传播,在一个多核架构中, 应该有三个特性(how,When_actual,When_visible)
但是 实际上 写策略和写传播只定义了 三元组中的 how,When_actual , 串行化定义了When_visible

🧠 写策略 / 写传播 都包含:

维度 含义 谁控制 / 定义
How 如何传播(通过什么路径/机制) 策略本身:Write-Back / Invalidate 等
When₁(实际发生) 行为何时在系统中物理执行 Cache 控制器 / 一致性协议
When₂(可见顺序) 系统中其他核心何时认为它发生了 ✅ 串行化机制(如 memory model)

📌 举例再强化这个模型(可用于写论文、讲课):

对于写策略(如 Write-Back):

  • How:数据先写入 L1 Cache,不直接写主存
  • When₁:只有在该 cache line 被替换或显式 flush 时才写主存
  • When₂:其他核只能在系统保证“这次写已经生效”的顺序之后看到(串行化控制)

对于写传播(如 Invalidate-based MESI):

  • How:通过 Invalidate 机制通知其他核放弃该行副本
  • When₁:Invalidate 消息实际什么时候发出(可能延迟、可能打包发送)
  • When₂:系统保证所有核都认为这个写已经生效之后(比如在 memory barrier 之后 load 必须看到这个值)

✅ 可以封装成一个“写传播/写策略三元语义模型”:

操作 = (How, When_actual, When_visible)

其中:
- How: 由协议/策略定义的传播机制
- When_actual: 实际执行时间,由控制器/硬件实现
- When_visible: 全局可见时间,由串行化机制统一控制

🌟 总结句式(推荐用于文档或教材):

无论是写策略还是写传播,其完整行为都可以建模为 (How, When_actual, When_visible) 三元组。
其中 How 决定了传播机制,When_actual 决定了物理传播时机,When_visible 则由串行化机制定义一致性可见性。
这三元模型统一了“行为层”和“一致性层”的语义接口。

🧠 写策略和写传播都没有定义 when_visible,但它们都定义了 howwhen_actual


how(怎么传播)

  • 写策略:定义写的是 L1、L2、还是主存?通过什么路径?(Write-through / Write-back)
  • 写传播:定义传播方式是 Invalidate / Update?

👉 ✅ 都有明确定义。


when_actual(物理行为什么时候发生)

  • 写策略

    • Write-through:写入时立即写主存 ⇒ when_actual 明确。
    • Write-back:只有在替换、flush 时写 ⇒ when_actual 延后,但由策略定义清楚
  • 写传播

    • 协议定义何时触发传播动作,例如:

      • 写 miss 时触发 Invalidate
      • 有 memory barrier 时触发
    • 由协议状态机 + 控制器行为决定传播的真实发起时间点

👉 ✅ 两者都定义了具体行为什么时候触发,属于 when_actual。


when_visible(全系统认为“它发生了”的时间点)

  • 这是一个逻辑顺序,由一致性模型 / 串行化机制决定,而不是写策略或传播机制单独能定义的。

  • 比如一个写已经写到 L1(或者 invalidate 已经发出),但**系统是否允许其他核 load 看到它?**取决于串行化约束,比如:

    • 是否需要 memory barrier?
    • 是否 store-load 顺序要维护?

👉 所以:

写策略和写传播本身并不定义 when_visible,它是由 串行化机制(consistency model)统一定义的全局行为语义


✅ 所以你说得很对,可以总结为:

写策略和写传播分别定义了传播的 howwhen_actual,但它们并不定义 when_visible
when_visible 由串行化机制提供,是系统级一致性语义的核心控制点。


🧠 可视化三层职责图:

                     ┌──────────────┐
                     │  串行化机制   │ ← 定义 when_visible
                     └──────────────┘
                              ▲
                              │
       ┌──────────────────────┴──────────────────────┐
       │                                             │
┌──────────────┐                           ┌────────────────┐
│   写策略     │ ← 定义 how, when_actual    │   写传播         │ ← 定义 how, when_actual
└──────────────┘                           └────────────────┘

✅ 总结句式(推荐记下来):

写策略和写传播负责定义传播机制与触发时机(how + when_actual)
是否对其他核心“可见”,即 when_visible,由串行化机制统一调度控制
这构成了缓存一致性语义的三层职责划分:机制层、行为层、观察层


网站公告

今日签到

点亮在社区的每一天
去签到