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

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

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 时代系统架构真正需要跨过去的那堵"新内存墙"。

相关推荐
湖南天硕国产SSD1 小时前
SSD主控架构到工业存储落地:天硕自研主控技术路径参照
架构·固态硬盘·天硕存储·ssd固态硬盘
V搜xhliang02461 小时前
【进阶篇】OpenClaw 高级技巧:定时任务 + 子 Agent + 自动化工作流
运维·人工智能·算法·microsoft·自动化
玛卡巴卡ldf1 小时前
【LeetCode 手撕算法】(回溯)全排列DFS、子集、电话号码字母组合 九键、组合总和、括号生成、单词搜索、分割回文数
java·算法·leetcode·力扣
风筝在晴天搁浅1 小时前
快手/腾讯 CodeTop LeetCode 43.字符串相乘
算法·leetcode
该昵称用户已存在1 小时前
数智园区・能碳协同:MyEMS 开源能源管理系统的场景化架构
架构·开源·能源
0xDevNull1 小时前
Tomcat 运行原理与架构深度解析
java·架构·tomcat
混迹中的咸鱼1 小时前
Unreal Engine 5 联机网络架构技术手册
网络·架构·ue5
Giggle12182 小时前
上门家政服务平台 | 多端协同,源码交付,用户端小程序+H5、服务端APP、管理后台
java·小程序·架构·产品运营·个人开发
_深海凉_2 小时前
LeetCode热题100-括号生成
算法·leetcode·职场和发展