当缓存一致性遇上推理分层:为什么未来的系统不再只是“更快”,而是“更少搬运”

Kevin Di

Hatched by Kevin Di

Jul 11, 2026

2 min read

87%

0

先问一个反直觉的问题

为什么一块看似“更先进”的硬件,有时反而会让系统变慢?

很多人看到 CXL、NVLink、RDMA、prefill 和 decode 分离,第一反应都是“吞吐更高了”“带宽更大了”“架构更现代了”。但真正决定性能的,往往不是峰值带宽,而是数据是否必须绕远路。一旦访问路径里多了门铃、队列、轮询、批处理等待、缓存失配,系统就会从“直接取用”退化成“层层转交”。

这正是今天这两个看似分属不同领域的话题,实际上共享的同一个核心问题:当计算越来越细、越来越异构、越来越分层时,系统的瓶颈不再是算力本身,而是协调成本。


真正的分界线,不在于“快内存”还是“慢内存”

一个很容易被忽略的事实是,现代系统里最贵的操作,不一定是算,而是“让数据到对的地方去”。

在传统 PCIe 语境下,device memory 对 CPU 来说往往是 uncacheable 的。表面上看,CPU 只是“读一块内存”;实际上,它每一次访问都像是去外地柜台取件,不能先把常用物品放进抽屉里反复顺手拿。结果就是,哪怕程序逻辑本身很短,数据路径却长得惊人。一个原本只需几秒完成的启动流程,可能被拉长到几十分钟,差距不是 10 倍,而是数百倍。

这个现象告诉我们一个更深层的规律:延迟不是一个点,而是一条路径。

如果路径上每一环都需要显式协调,比如:

  1. 软件写入工作项。
  2. 通过 doorbell 通知设备。
  3. 设备再去内存取任务。
  4. 再 DMA 数据。
  5. 再发包。
  6. 再写回完成事件。
  7. 最后 CPU 轮询结果。

那么系统的时间消耗就不是“访问一次内存”,而是“组织一次跨设备协作”。这也是为什么很多异步通信机制看起来优雅,实际却会把小操作放大成一串管理开销。

相对地,Load/Store 语义之所以迷人,不只是因为它“更像程序员熟悉的内存操作”,而是因为它把复杂协商压缩成了一条同步的意图表达。CPU 或 GPU 发出一个 Load/Store,就像直接按下“请把这个值取来”的按钮,硬件负责把后面的细节藏起来。系统从“请求驱动”转向“语义驱动”,这是一个本质变化。

高性能系统的第一原则,不是让每一步都更快,而是让更多步骤根本不需要出现。


预填充和解码的分离,本质上也是一次“减少不必要协调”

把视角切到大模型推理,表面上看,prefill 和 generate 分离解决的是调度问题、批处理问题、硬件利用率问题。可如果继续往下看,它解决的其实还是同一个老问题:两个性质完全不同的工作,为什么要被迫共享一条执行路径?

prefill 的特点是计算密集,像一次性把整篇文章通读一遍,重点在于吞吐和并行度;decode 的特点是逐 token 生成,像一边写一边思考,重点在于延迟和稳定响应。把它们塞进同一个 GPU 批处理中,表面上是“提高利用率”,本质上却是在让两种不同节奏的任务互相干扰。

这会带来几个很具体的问题。

首先,prefill 会拖慢 decode。因为 prefill 通常更大、更重,它会占用更多算力和显存带宽,导致原本只需要快速吐出下一个 token 的请求被迫排队。其次,decode 会反过来限制 prefill 的批处理规模。为了保证 tail latency,系统不能无限堆大 prefill batch,否则所有请求都会被延迟目标绑住。

于是,一种非常自然的架构演化出现了:把两阶段拆开,让每一阶段各自为战。

这个拆分最重要的价值,并不是“更复杂的系统更先进”,而是它承认了一个现实:不同阶段有不同的最优资源形态。

  • prefill 更像计算型工作负载,适合追求高并行和大批处理。
  • decode 更像内存和延迟型工作负载,适合追求稳定、低抖动和持续输出。

这和 CXL 或 NVLink 带来的变化非常像。前者强调把远端资源“像本地一样访问”,后者强调把不同硬件节点“像统一内存一样协调”。表面上是接口升级,深层上是把原本必须经过多轮软件协调的操作,改造成更贴近硬件语义的直接访问。

换句话说,prefill 和 decode 的分离,是推理系统中的“语义重构”。它不是单纯拆任务,而是在重新定义任务边界,让系统不再强迫所有事情都走同一套节奏。


更深的一层:缓存一致性真正解决的,不只是访问快慢,而是“谁可以假装数据没变”

如果只把 cache coherency 理解成“减少延迟”,就低估了它的意义。它真正改变的是系统中的信任模型。

在没有一致性语义时,CPU 和 device 之间像是两个各自记账的部门。一个部门改了数据,另一个部门不一定立刻知道。于是你不得不通过显式同步、显式 flush、显式轮询去确认状态。所有这些动作,本质上都是在弥补一个问题:大家对同一份数据的认知不同步。

一致性提供的不是“更快读到数据”,而是“可以放心地把某些数据当成同一份现实”。这听起来抽象,但它的影响极其具体。比如在 CXL 语境下,主机内 CPU core 和 device 之间如果能维持一致性,那么 CPU 对某些远端内存的访问就不再需要额外把每次读写都看成一次跨系统事务。它可以像访问本地寄存器或本地缓存一样,依赖硬件保证数据视图的统一。

这背后有一个很重要的设计哲学:系统不应该要求软件知道每一次数据转手的全部细节。

想象一个仓库,如果每次拣货都要求仓管员先打电话给财务,再找运输,再回电确认,那仓库不管多大都慢。真正高效的仓储不是“每一辆车都开得更快”,而是有一套规则让很多动作根本不用人工确认。cache coherency 就像这套规则,它减少的是“状态确认成本”。

这也解释了为什么在远程内存、RDMA、CXL、NVLink 这些话题里,最有价值的指标不只是带宽,而是语义密度。语义密度越高,软件越少需要显式协调,系统越接近“直接表达意图”。


统一视角:现代系统竞争的是“搬运次数”,不是单点速度

把前面的线索串起来,会得到一个非常统一的结论:无论是数据中心互连,还是大模型推理,真正的性能战场都在削减搬运次数。

这里的“搬运”不只指物理数据拷贝,也包括以下几种隐性搬运:

  • 把一个操作拆成多个软件消息来回传递。
  • 把一个本可以直接访问的值,变成先查队列再确认完成。
  • 把两种不同特性的工作硬塞进同一个批次。
  • 把本可共享的中间状态,反复序列化、反序列化、同步、轮询。
  • 把本地能解决的问题,升级成跨层、跨设备、跨阶段协同。

从这个角度看,CXL 和 NVLink 代表的是更短的数据路径,prefill 和 decode 分离代表的是更少的任务互扰,而 context caching 和 elastic memory pool 则代表的是更少的重复计算和重复占用。它们看似分散,其实都在走向同一个系统范式:

把“显式协调”变成“可共享状态”,把“重复搬运”变成“一次建立,多次复用”。

这也是为什么工业级推理系统越来越像分布式系统,而分布式互连又越来越像统一内存系统。两者正在互相靠拢。推理系统需要更像硬件,因为它要减少控制开销;互连系统需要更像软件,因为它要支持复杂的共享语义。

这不是巧合,而是规模化之后的必然。


一个实用框架:判断系统设计优劣,看它是否在做这三件事

如果你在设计 AI 推理系统、存储系统、互连架构,或者任何涉及异构资源调度的系统,可以用下面这个三问框架判断方案是否真的有效。

1. 它是在减少访问路径,还是只是换了条更贵的路径?

很多方案只是把“慢”改成“复杂”。例如,多了一层 queue,多了一次同步,多了一次调度,表面上减少了某个瓶颈,实际上把成本搬到了别处。真正的优化应该让一次访问少经过一些人、一些环节、一些状态确认。

2. 它是在共享语义,还是在共享硬件?

共享硬件不等于共享效率。把 prefill 和 decode 放在同一块 GPU 上,并不自动带来更好的推理体验。相反,很多时候最优解是共享更高层的资源语义,比如共享缓存、共享调度视图、共享内存池,而不是强行共享执行节奏。

3. 它是在消除重复计算,还是在重复地管理重复计算?

Context caching 的价值,不只是缓存 prompt,更是减少“已经知道过一次的内容”再次进入系统的概率。类似地,一致性机制的价值,不只是保证正确性,也是在减少“确认这个值有没有变”的额外成本。最好的系统,会让重复本身变得不容易发生。


Key Takeaways

  1. 真正的瓶颈往往不是算力,而是协调成本。 只要路径里有过多门铃、轮询、批处理等待和状态同步,性能就会迅速塌陷。

  2. cache coherency 的价值,不只是快,而是让软件少操心。 它降低的是状态确认成本,让 CPU 和 device 能共享更统一的数据现实。

  3. prefill 和 decode 分离,本质上是在匹配不同工作负载的节奏。 一个追求吞吐,一个追求延迟,把它们混在一起通常会让两者都变差。

  4. 优秀的系统设计,应该减少“搬运次数”而不是迷信单点峰值。 无论是数据搬运、队列搬运,还是语义搬运,少一步往往比快一步更重要。

  5. 观察一个架构是否先进,看它是否把显式协调变成了可共享状态。 这往往意味着更少重复、更少抖动、更强的扩展性。


结语:未来的系统,不是更像一台更快的机器,而是更像一套更少解释的规则

我们习惯把进步理解为“更快的总线”“更大的显存”“更高的吞吐”“更多的 batch”。但真正决定下一代系统形态的,可能是另一种更朴素也更深刻的能力:让数据和任务更少被解释、更少被转交、更少被重复确认。

CXL、NVLink、cache coherency、prefill 和 decode 分离、context caching,这些名字看起来分散,实则都指向同一件事:系统正在从“搬运驱动”走向“语义驱动”。未来最强的架构,不一定是把每一步都做得更快,而是把很多步骤直接消解掉。

换句话说,真正的竞争不再是谁跑得更快,而是谁能让自己少跑几步。

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣