第二章:CCIX 的前世今生
聊到 CCIX,我得先说说它出生的那个年代。大概 2016 年左右,整个数据中心圈子都在焦虑一件事——CPU 不够用了。
不是算力不够,是 IO 跟不上。你想想看,当时 PCIe 3.0 的单向带宽也就 8 GT/s,对于加速器来说,这就像用一根吸管去抽一桶水。我在做 FPGA 加速卡项目时就深有体会,明明逻辑算力绰绰有余,数据却堵在 PCIe 链路上,那叫一个憋屈。
2.1 CCIX 联盟的成立
2016 年,ARM、华为、AMD、IBM 这几家凑到了一起。他们干了件什么事呢?成立 CCIX 联盟。说白了,就是想搞一套能让加速器和 CPU 真正「聊起来」的互联标准。
为什么要这几家牵头?我分析过,ARM 想进服务器市场,华为在做智能计算,AMD 有 GPU 和 EPYC,IBM 有 Power 处理器。大家都有加速需求,但都被 PCIe 的共享总线架构卡住了脖子。
核心痛点:PCIe 本质上是个「主从」模型。CPU 是主,加速器是从。加速器想直接访问 CPU 的内存?没门。必须走 DMA,还得 CPU 先发起请求。这延迟,啧啧,几十微秒就没了。
2.2 技术背景:PCIe 生态的局限性
CCIX 不是凭空冒出来的。它是在 PCIe 生态里「长」出来的。怎么理解呢?
PCIe 物理层已经非常成熟了。SerDes 通道、差分信号、链路训练,这些底层技术花了十几年才稳定下来。CCIX 聪明的地方在于——它直接复用了 PCIe 的物理层。
我记得第一次看 CCIX 协议栈时,心里就一个想法:「这设计真鸡贼。」它把 PCIe 的事务层换掉了,改用自己的协议。但电气特性、链路训练这些,全盘照搬。这意味着什么?
- 现有 PCIe 控制器可以改改就用
- PCB 走线不用重新设计
- 连接器、背板这些基础设施直接复用
我在一个项目中试过,把一块支持 CCIX 的 FPGA 卡插到普通 PCIe 插槽上,它居然能降级成 PCIe 模式工作。这种向后兼容的设计,说实话,很务实。
2.3 核心设计哲学:缓存一致性
CCIX 最核心的设计哲学,就四个字——缓存一致性。
为什么这个这么重要?我给你讲个真实场景。
假设你有个 AI 加速器,它要处理的数据在 CPU 的内存里。传统做法是:CPU 把数据从内存搬到加速器的本地内存,加速器算完,再搬回去。这一来一回,数据拷贝的时间可能比计算时间还长。
CCIX 的做法是:让加速器直接访问 CPU 的内存。而且,它还能保证缓存一致性。
我的理解:缓存一致性说白了就是——CPU 和加速器看到的同一份数据,在任何时刻都是一样的。加速器改了某个地址的数据,CPU 的缓存里对应的行就自动失效。下次 CPU 读的时候,必须从内存重新拿。
CCIX 实现这个靠的是 snoop 协议(侦听协议)。加速器发起内存访问时,CCIX 控制器会发送 snoop 请求给 CPU,检查 CPU 的缓存里有没有这份数据的副本。如果有,要么从缓存拿,要么让缓存失效。
嗯,这里要注意。snoop 协议会增加延迟。每次访问都要先问一下 CPU:「嘿,你缓存里有吗?」这大概会多花几十纳秒。但比起数据拷贝的几十微秒,这点代价完全值得。
2.4 CCIX 的协议栈架构
CCIX 的协议栈分三层,我画了个图帮你理解:
这张图里有个关键点——物理层直接复用 PCIe。这意味着 CCIX 设备可以插在 PCIe 插槽上,只是跑的是 CCIX 协议。我在调试时发现,有些主板 BIOS 不识别 CCIX 设备,需要更新固件。这是个坑,后面会细说。
2.5 CCIX 的拓扑结构
CCIX 支持两种拓扑:
| 拓扑类型 | 描述 | 典型场景 |
|---|---|---|
| 直接连接 | CPU 和加速器点对点直连 | 单加速器卡、低延迟场景 |
| 交换网络 | 通过 CCIX 交换机连接多个节点 | 多加速器池化、资源虚拟化 |
直接连接延迟最低,大概 100-200 纳秒。交换网络会多几十纳秒,但能支持更多设备。我建议小规模部署用直连,大规模集群用交换。
曾经踩过的坑:CCIX 交换机的实现非常复杂。它不仅要转发数据,还要维护全局的缓存一致性目录。我见过一个项目,交换机芯片的 snoop 过滤逻辑有 bug,导致数据不一致,查了整整两周。所以,选型时一定要确认交换机的成熟度。
2.6 CCIX 的局限性
说了这么多优点,也得聊聊它的短板。CCIX 有几个硬伤:
- 生态封闭:CCIX 联盟成员虽然不少,但 Intel 和 NVIDIA 不在里面。这两家一个是 CPU 老大,一个是 GPU 老大,它们不玩,CCIX 就很难成为主流。
- 物理层限制:复用 PCIe 物理层虽然省事,但也限制了带宽。PCIe 4.0 的 16 GT/s 在 2016 年够用,但到了 2020 年就捉襟见肘了。
- 软件栈不成熟:CCIX 需要操作系统和驱动支持。我记得早期在 Linux 上跑 CCIX,内核补丁都得自己打,很折腾。
嗯,这些局限性后来成了 CXL 崛起的契机。但那是后话了。
2.7 小结
CCIX 的出现,本质上是对 PCIe 架构的一次「改良」而非「革命」。它用最小的代价实现了缓存一致性,让加速器能像访问本地内存一样访问系统内存。这个设计哲学,说实话,很聪明。
但它的命运,最终取决于生态。当 Intel 和 NVIDIA 选择站在 CXL 那边时,CCIX 就注定只能在小众市场里发光发热了。
一句话总结:CCIX 是 PCIe 生态里长出来的一朵「缓存一致性」之花,开得早,但没赶上好季节。