冯诺依曼体系有一天会被打破吗

过去几十年里,计算机系统一直绕不开一个经典问题:内存墙。

CPU 越来越快,内存访问却跟不上。于是我们发明了缓存、预取、NUMA、高带宽内存、近内存计算,试图让处理器不要"饿死"。

但到了今天,真正麻烦的可能已经不只是"内存够不够快"。

在 GPU、DPU、AI 加速器、CXL 内存池、PCIe 设备、压缩引擎、交换芯片共同组成的异构服务器里,新的瓶颈正在出现:

我们不再只是搬不动数据,而是越来越难知道数据到底是怎么被搬动的。

更准确地说,现代机器遇到的是一种新的"内存墙":

异构内存墙。

它不是单纯的带宽问题,而是一个关于控制流、数据流、可观测性、调试、迁移和安全审计的问题。

这也是本文要讨论的 Slug Architecture 的核心动机:
能不能让未来的 CXL 异构系统,像传统冯·诺依曼机器一样,可以被观察、记录、回放和验证?


一、传统冯·诺依曼机器为什么好调试?

经典冯·诺依曼模型有一个很强大的抽象:

一个处理器读取内存中的状态,执行一串指令,然后通过 load/store 改写内存状态。

这听起来很普通,但它带来了巨大的工程便利。

因为只要我们在合适的边界上记录:

  • CPU 寄存器;
  • 内存内容;
  • 指令流;
  • 中断和特权状态;
  • 一些关键 I/O 事件;

理论上就可以把一段执行过程保存下来,之后迁移、调试、重放,甚至在另一台机器上复现。

操作系统、虚拟机、调试器、checkpoint/restart、确定性回放,这些能力本质上都建立在这个抽象之上。

换句话说,传统计算机之所以"可控",是因为我们大体相信:

CPU 是因果关系的中心,内存是被动对象,设备行为可以由操作系统或驱动程序中介。

但这个假设在今天已经越来越站不住了。


二、现代服务器已经不是"一颗 CPU + 一堆内存"

现在的服务器,尤其是 AI 和云计算场景里的服务器,已经更像一个小型联邦系统。

里面可能有:

  • CPU;
  • GPU;
  • DPU;
  • NPU / AI 加速器;
  • 压缩与加密引擎;
  • DMA 控制器;
  • PCIe 设备;
  • CXL switch;
  • CXL Type-3 内存扩展设备;
  • HBM;
  • 持久化内存;
  • 存储级内存;
  • 甚至未来的 UCIe chiplet。

每个组件内部可能都有自己的执行逻辑、缓存、队列、固件、微码、调度器和私有内存。

从局部看,它们也许都是"小型冯·诺依曼机器"。

但从全局看,这台机器已经不是一个简单的冯·诺依曼系统了。

CPU 把任务 offload 给 GPU,GPU 通过命令队列执行 kernel;统一内存系统在后台做 page migration;DMA 引擎悄悄把数据写入某段内存;CXL 设备通过 CXL.cache 和 CXL.mem 参与缓存一致性和内存访问;交换芯片又可能影响请求的排序。

于是问题来了:

当某个 tensor 被错误修改时,到底是谁写的?

是 CPU?

是 GPU kernel?

是 DMA?

是 CXL 设备?

是驱动?

是统一内存迁移?

还是某个加速器在合法事务中做了非法事情?

传统的 CPU trace 很难回答这个问题。


三、异构系统里的"残余流":真正难观察的部分

在异构计算里,CPU 往往只是提交任务的人。

比如:

  • CUDA kernel launch;
  • GPU command buffer;
  • DMA descriptor;
  • DSA work queue;
  • AMX 调用;
  • I/O accelerator request;
  • 统一内存 page fault;
  • completion interrupt;
  • device firmware decision。

这些行为不是简单地出现在 CPU 指令流里。

它们跨过了 CPU、驱动、runtime、设备队列、内存系统、互连 fabric 和设备固件。

论文里把 CPU trace 之外仍然影响系统执行结果的部分称为 residual flow,可以翻译成"残余流"或者"剩余因果流"。

它包括两类:

第一类是残余控制流,比如队列提交、设备调度、完成中断、page fault、固件决策。

第二类是残余数据流,比如隐式内存迁移、cache line 所有权转移、DMA 写入、设备私有内存更新。

这部分流量恰恰是现代系统里最关键、也最难观测的东西。

很多软件系统可以在训练 epoch 之间做 checkpoint,也可以序列化对象状态,或者强制 runtime 走确定性队列。

但这些方法往往是在很高的软件层观察系统。

它们看到的是"事情发生之后的结果",而不是"事情发生时的因果事件"。

这对于粗粒度恢复还可以接受。

但对于下面这些场景就不够了:

  • 指令级调试;
  • 低延迟迁移;
  • 连续安全审计;
  • 透明加速器虚拟化;
  • 细粒度故障恢复;
  • 跨 CPU/GPU/CXL 设备的确定性 replay。

所以,Slug Architecture 的出发点是:

不要只在软件层追着结果跑,而要在内存 fabric 的边界上记录因果事件。


四、CXL 不只是扩内存,也可以成为"可回放的底座"

CXL,也就是 Compute Express Link,通常被理解成一种内存扩展和设备互连技术。

它主要有三类能力:

  • http://CXL.io:兼容 PCIe 的发现、配置和控制通道;
  • CXL.cache:允许设备参与主机缓存一致性;
  • CXL.mem:允许主机访问设备侧内存。

很多人讨论 CXL 时,关注的是:

  • 能不能扩展内存容量;
  • 能不能做内存池化;
  • 能不能减少 CPU 和加速器之间的数据拷贝;
  • 能不能做 disaggregated memory;
  • 能不能服务更大的 AI 模型。

这些都很重要。

但 Slug Architecture 提出了另一个视角:

如果 CXL fabric 本来就承载了跨 CPU、设备和内存池的关键事务,那么它也应该成为记录和回放这些事务的地方。

也就是说,CXL 不只是"搬运数据的高速公路",还可以是"记录数据如何被搬运的黑匣子"。

这就是所谓 CXL Fabric Replay 的核心想法。


五、Slug Architecture 的基本思想:每个端点都是一个小岛

Slug Architecture 把整个异构系统看成一组通过可回放内存 fabric 连接起来的"冯·诺依曼小岛"。

每个小岛可以是:

  • CPU core complex;
  • GPU;
  • DPU;
  • CXL Type-3 内存设备;
  • CXL switch;
  • 压缩引擎;
  • UCIe chiplet;
  • 其他专用加速器。

每个小岛内部可以非常复杂。

它可以有自己的 ISA、scheduler、firmware、microcode、cache、local memory,甚至可以是完全黑盒。

Slug Architecture 并不要求所有设备暴露内部微架构,也不要求所有加速器统一成同一种 ISA。

它只要求一件事:

每个端点在对外的内存和 offload 边界上,暴露一个可编程的 External Memory Controller。

这个 External Memory Controller 可以理解成一种"外部内存控制器"或"边界控制器"。

它不是普通的 load/store 通道,而是一个能观察、过滤、压缩、标注和回放外部可见事务的可编程控制平面。

它需要观察的对象包括:

  • memory read / write;
  • cache ownership transition;
  • invalidation;
  • DMA;
  • peer-to-peer transfer;
  • offload descriptor;
  • doorbell;
  • completion;
  • interrupt;
  • 地址翻译;
  • page migration;
  • security label;
  • protection key;
  • provenance tag。

注意这里的重点:

它不需要理解 GPU 内部每条指令是怎么执行的。

它只需要知道这个 GPU 或加速器在系统边界上做了什么:

读了哪里,写了哪里,什么时候发起了请求,哪个队列提交了任务,哪个事务产生了影响,哪些内存范围被修改,哪些一致性关系被建立或打破。

这就像调试分布式系统时,我们不一定要知道每台机器上每条指令的执行细节,但必须知道机器之间发了什么消息、消息顺序是什么、哪些消息影响了最终状态。


六、Hardware JIT:给内存控制器装一个"可编程探针"

如果每个设备都要记录所有事务,开销肯定爆炸。

所以 Slug Architecture 引入了第二个关键机制:

Hardware JIT。

它可以理解成一种运行在硬件边界上的动态编译机制。

系统不会永远开启一个笨重的全量 tracer,而是根据当前 workload、拓扑、页面布局、安全策略和 replay 目标,动态生成一组很小的硬件程序,安装到各个 External Memory Controller 里。

输入是一组 policy bundle,例如:

  • 当前有哪些 CPU、GPU、CXL switch、内存池和 chiplet;
  • 当前页表和 protection domain 是什么;
  • 哪些共享内存区域值得关注;
  • 哪些 GPU kernel 或 queue 是关键边界;
  • 当前目标是调试、迁移、入侵检测还是故障恢复;
  • 允许多少 metadata 带宽;
  • 最大采样率是多少;
  • 哪些内存范围需要完整记录,哪些只需要 hash。

输出则是安装在控制器里的小程序。

这些程序可以:

  • 分类事务;
  • 绑定 epoch ID;
  • 过滤不重要流量;
  • 压缩重复模式;
  • 记录依赖边;
  • 为事务添加 provenance 标签;
  • 对特定地址范围做安全检查;
  • 生成 replay record。

可以把它类比成:

面向 CXL memory fabric 的 eBPF。

只不过 eBPF 的目标通常是操作系统内核,而这里的目标是设备和内存边界上的控制器。


七、Replay Record:不记录所有细节,只记录重建因果关系所需的信息

Slug Architecture 不是要把整个系统每个周期都完整录下来。

那样成本太高,也没必要。

它关注的是:

哪些 fabric-visible event 足以重建程序可见的执行结果?

一个 replay record 大致包含:

  • 源 endpoint;
  • 目标 endpoint;
  • epoch ID;
  • 事务类型,比如 cache read、writeback、invalidation、CXL.mem read、CXL.mem write、http://CXL.io doorbell;
  • 地址或对象 ID;
  • ordering metadata;
  • dependency edge;
  • fence;
  • payload hash、delta 或 full payload;
  • provenance label;
  • security label。

这里有一个重要设计:不同场景可以使用不同记录模式。

第一种是 Validation Mode 。

只记录 hash 和 ordering metadata。系统假设端点重新执行时可以产生同样 payload,所以只需要验证结果是否一致。

第二种是 Delta Mode 。

记录压缩后的差异,适合那些可能存在一定不确定性的内存区域。

第三种是 Full Mode 。

完整记录 payload,适用于不可信设备、外部输入、可疑区域或短时间的深度调试窗口。

这种分层策略很重要。

因为它意味着 Slug Architecture 不追求"永远全量记录",而是追求:

在大多数时候低成本记录,在关键时刻提高记录精度。


八、CXL Fabric Replay:回放的不是设备内部,而是边界行为

Slug Architecture 最核心的思想是:

不需要复刻每个设备内部的执行细节,只需要在 fabric 边界上复现等价行为。

比如一个 GPU 内部如何调度 warp,某个 AI 加速器内部如何安排矩阵计算,这些都可以是黑盒。

只要它在某个 epoch 内对外部内存产生的可见行为是一致的,系统就可以认为 replay 成功。

CXL Fabric Replay 的过程大致分为四步。

第一步是 Checkpoint 。

系统保存 CPU architectural state、部分 endpoint state、memory pool mapping,以及 External Memory Controller 的程序版本。

第二步是 Record 。

各个控制器在系统正常运行时记录压缩后的事务、依赖边和必要的 payload 信息。

第三步是 Seal 。

在 epoch 边界上,系统对内存范围、队列状态、未完成的一致性所有权等生成紧凑承诺。

第四步是 Reconstruct 。

在 replay 机器上重新安装兼容的控制器程序,重放或验证 fabric event,并在端点提前越过 epoch 边界时进行 stall,直到相关依赖满足。

这里最重要的一句话是:

replay 不需要保存每个 cycle,它只需要保存影响 memory-visible behavior 的 happens-before 关系。

也就是说,只要 GPU 写入、CPU 读取、CXL switch 排序这些关键依赖关系被正确记录,系统就可以在不同的物理 GPU 或不同的内存池上复现同样的程序可见状态。


九、Epoch 和 Stall:让异构系统"等一等"

为了控制 replay 粒度,Slug Architecture 使用 deterministic epoch。

epoch 可以由很多事件定义:

  • GPU kernel launch;
  • queue submission;
  • page-fault batch;
  • timer interrupt;
  • memory fence;
  • Hardware JIT 插入的 synthetic boundary。

在 replay 时,如果某个 endpoint 到达 epoch 边界,但它依赖的 fabric event 还没有被重放完成,那么 External Memory Controller 可以暂时 stall 它的请求。

这听起来像是在执行流里插入"内存操作气泡"。

设备不需要永久停机,只是在因果关系还没追上时等一下。

未来如果有 ISA 支持,这种等待可以变成轻量 replay/debug 扩展。

如果没有 ISA 支持,也可以通过 queue throttling、page protection、CXL switch backpressure 或 device firmware cooperation 来近似实现。

这套机制的价值在于:

它不试图控制每个设备内部的每个细节,而是在跨设备交互的边界上控制因果顺序。


十、安全意义:谁写坏了内存,终于可以追责了

Slug Architecture 不只是为了调试。

它还有一个很强的安全含义。

在异构系统里,恶意或故障设备可能通过"合法事务"完成"非法行为"。

比如:

  • GPU kernel 写了不该写的页;
  • DMA 引擎读取了未授权 descriptor;
  • CXL 内存设备返回了过期数据;
  • 某个设备绕过 CPU trace 修改了关键状态;
  • 加速器通过合法 CXL transaction 破坏了高层安全策略。

CPU-only trace 很可能看不到这些事情。

但如果每个 endpoint 的边界都有 External Memory Controller,系统就可以在事务发生时做 provenance 和 policy 检查。

比如:

  • 这个 GPU kernel 只能写这些 page;
  • 这个 DSA engine 只能读这个 protection domain 签名过的 descriptor;
  • 这个 memory expander 在 ownership transition 后不能返回 stale data;
  • 某个 CXL switch 的排序行为必须满足指定依赖关系。

正常运行时,控制器可以只输出紧凑的 provenance commitment。

一旦发现异常,就切换到 full recording,对可疑 page、queue 和 epoch 进行精细记录。

这样在事故响应时,系统可以更明确地回答:

这次内存破坏到底来自 CPU 代码、GPU kernel、DMA 写入、CXL 事务,还是外部设备?

这对云厂商、AI 训练集群、金融系统和高可靠计算都非常关键。


十一、它和现有技术是什么关系?

Slug Architecture 并不是要推翻现有系统,而是把一些已有能力向更底层推进。

CPU 侧已经有一些硬件 tracing 能力,比如 Intel Processor Trace 和 Arm CoreSight。它们证明了低开销硬件 tracing 是可行的。

GPU 和统一内存 runtime 也已经能提供 kernel、queue、allocation 等语义边界。

CXL 则提供了跨 CPU、设备和内存池的互连基础。

Slug Architecture 的新意在于:

把这些能力统一成一个 replay-first 的架构契约。

也就是说,未来设备不只是要支持"更快访问内存",还要支持"让这次访问可以被记录、解释、验证和回放"。

它不要求今天所有 CXL 设备立刻具备完整能力。

更现实的路径是:

  • CPU 继续使用现有 tracing;
  • GPU runtime 提供 kernel、queue、allocation 边界提示;
  • CXL switch 和 Type-3 设备先对特定地址范围记录有序内存事务;
  • 操作系统像管理 IOMMU、性能计数器和设备固件一样,管理 External Memory Controller 程序;
  • 未来这些能力进入 CXL capability structure,成为跨厂商标准接口的一部分。

十二、怎么验证这个架构是否有价值?

Slug Architecture 目前更像一个架构提案,而不是已经量产的系统。

要验证它,不能只问"tracing 是否更快",而要问:

fabric-level replay 是否能以比软件 checkpoint 和设备专用 profiler 更低的代价,提供更强的可观测性?

一个合理的 prototype 可以分三层。

第一层是软件 CXL fabric simulator/emulator,用来模拟 CXL.cache、CXL.mem、http://CXL.io、switch ordering 和 endpoint-local queue。

第二层是 runtime shim,用来插桩 CPU thread、GPU kernel launch、DMA descriptor 和 memory allocation boundary。

第三层是 Hardware JIT compiler,把 replay policy 编译成 transaction filter、dependency tracker 和 compression rule。

后续可以用 FPGA CXL endpoint 或带可编程逻辑的 CXL.mem 设备做硬件原型。

关键不是造一个完整 GPU,而是证明:

只记录边界级 transaction,就足以回放代表性的异构 workload。

适合评估的 workload 包括:

  • 带 unified memory page migration 的 GPU kernel;
  • CPU + accelerator 的 DMA queue pipeline;
  • 基于 CXL.mem 的 disaggregated memory workload;
  • LLM 推理或训练中 CPU memory、GPU memory、pooled memory 之间的 tensor 移动;
  • 通过 CPU store、DMA write、CXL transaction 注入故障的内存破坏场景。

指标可以包括:

  • 相比原生执行的 runtime overhead;
  • 每 GiB application memory traffic 产生多少 metadata;
  • replay fidelity;
  • 是否能稳定复现 bug;
  • checkpoint size;
  • replay time;
  • 是否能把未授权内存流正确归因到 endpoint。

论文中的合理假设是:

Slug Architecture 不会做到零开销,但有机会让关键 workload 的连续可观测性足够便宜,甚至在大多数时候保持开启。

在大部分 payload 只用 hash 或 commitment 验证,而不是完整复制的情况下,确定性 replay window 的目标开销可以控制在一个较低区间。对于可疑或不确定区域,开销会更高,但系统可以把 full recording 限制在真正重要的 page、queue 和 epoch 上。


十三、为什么这个方向值得关注?

我认为 Slug Architecture 最有意思的地方,不在于它提出了某个单点优化,而在于它重新定义了"未来计算机应该暴露什么接口"。

过去我们希望硬件暴露:

  • 更高带宽;
  • 更低延迟;
  • 更大容量;
  • 更强算力;
  • 更多 cache;
  • 更好的能效。

但在异构计算时代,也许还需要一个新的硬件接口:

可回放性。

如果一台服务器由几十种 endpoint 组成,而且每个 endpoint 都能独立读写内存、迁移数据、参与一致性、执行 offload,那么系统软件只靠 CPU 视角已经不够了。

未来真正重要的问题会变成:

  • 这次内存写入是谁产生的?
  • 这个设备有没有越权访问?
  • 这个 GPU kernel 是否真的只影响了允许的内存范围?
  • 这次训练崩溃能不能在另一台机器上复现?
  • 这个 bug 是 CPU、GPU、DMA、CXL switch 还是内存池导致的?
  • 在不暂停整个系统的情况下,能不能持续审计关键数据流?

这些问题不是"更快的内存"单独能解决的。

它们需要 memory fabric 自己变得可观察、可验证、可回放。


结语:下一堵内存墙,不只是性能墙

传统内存墙讲的是 bytes per second。

但异构时代的新内存墙,讲的是:

我们是否还能理解一台机器内部发生了什么。

当 CPU、GPU、DPU、CXL 设备、内存池和交换芯片一起构成一个复杂系统时,调试、迁移、审计和恢复不能再依赖"英雄式的软件重建"。

Slug Architecture 的核心主张可以概括成一句话:

如果 CXL 会成为未来服务器、加速器和内存池的骨干,那么 replay 就应该成为 fabric 的原生能力,而不是事后补救的软件技巧。

这也是它最有想象力的地方。

它把异构系统重新组织成一组局部自由、边界可控的冯·诺依曼小岛:

每个设备内部可以保持复杂和专有,但只要它跨越内存和 offload 边界,就必须留下可验证、可压缩、可回放的因果记录。

如果这个方向成立,那么未来的服务器不仅会更快、更大、更省电,也会更可调试、更可迁移、更可审计、更可信。

而这可能才是 AI 时代系统架构真正需要跨过去的那堵"新内存墙"。

相关推荐
潼心1412o37 分钟前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者1 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
-森屿安年-1 小时前
按身高排序
c++·算法
程序员清风1 小时前
算法与数据结构入门:复杂度、数组与链表
数据结构·算法·链表
无定义_2 小时前
Codeforces Round 1124 (Div. 2)
算法
垆边人似月.3 小时前
任务混部(200 分档)
算法
言乐63 小时前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
如意猴4 小时前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i4 小时前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
Learn_PLC4 小时前
自动化工程师Demand与工业机器人技术发展的未来趋势分析
架构