一、CMN架构概述:CMN是什么?为什么需要CMN?CMN在SoC中的位置与作用
各位同学好,我是老李。做芯片互联这行十几年了,今天咱们聊聊CMN。说实话,每次给新人讲CMN,我都有点感慨——这玩意儿刚出来的时候,我还觉得不就是个互联嘛,后来被现实狠狠教育了一顿。
1.1 CMN到底是什么?
CMN,全称是Coherent Mesh Network,直译过来就是「一致性网格网络」。但说白了,它就是ARM公司推出的一套片上互联方案,专门解决多核处理器之间的数据一致性问题。
你想想看,一个SoC里动辄几十个CPU核、GPU、NPU、DSP,它们都要访问内存。如果没有一个统一的管理机制,A核改了数据,B核还在用旧数据,那系统就乱套了。CMN就是干这个的——保证所有处理器看到的数据是一致的。
核心要点:CMN本质上是一个硬件一致性协议引擎 + 高性能互联网络的组合体。它负责在多个主设备(CPU、GPU等)之间维护缓存一致性,同时提供高带宽、低延迟的数据通路。
我个人习惯把CMN理解成一个「智能交通系统」。各个处理器核就像路上的汽车,内存就像目的地。CMN不仅要规划最快的路线,还要确保每辆车都遵守交通规则——谁先改了数据,谁就得通知其他人。
1.2 为什么需要CMN?
这个问题我经常被问到。其实答案很简单:因为传统的总线架构扛不住了。
我在2015年做过一个项目,用的是ARM的NIC-400总线。当时只有4个A53核,跑得还挺欢。后来客户要求加到8核,再加一个GPU,总线直接成了瓶颈。为什么?因为总线是共享的,所有设备抢一条路,带宽上不去,延迟下不来。
CMN的出现解决了三个核心痛点:
- 可扩展性:总线架构最多支持十几个主设备,CMN的Mesh网络可以扩展到上百个节点。你想想看,一个64核的服务器芯片,用总线根本不可能。
- 一致性管理:传统总线的一致性协议(比如MOESI)在节点多了以后,广播开销巨大。CMN采用目录式一致性协议,每个缓存行都有对应的目录记录谁在使用它,大大减少了无效的广播。
- 带宽与延迟:Mesh网络天然支持多路径并发。A核和B核可以同时访问不同的内存区域,互不干扰。总线架构下,它们得排队。
避坑指南:我曾经在一个项目中,为了省面积,用了CMN的最小配置——只有2个Mesh节点。结果发现性能还不如总线。后来才明白,CMN的优势在于规模,小规模场景下它的协议开销反而比总线大。所以,别盲目上CMN,先评估你的节点数量。
1.3 CMN在SoC中的位置与作用
咱们来看一张图,这是我手绘的CMN在SoC中的位置示意:
从这张图可以看出,CMN处于SoC的「腰部」位置。所有高性能主设备——CPU、GPU、NPU——都通过CHI(Coherent Hub Interface)协议连接到CMN的Mesh网络上。外设如PCIe、USB则通过非一致性接口接入。
CMN在SoC中扮演三个关键角色:
- 数据高速公路:提供高带宽、低延迟的数据通路。我记得有个项目,CPU和GPU之间需要频繁共享数据,用CMN之后延迟降低了40%。
- 一致性管家:维护所有缓存的一致性。当CPU 0修改了地址A的数据,CMN会通知所有缓存了地址A的节点,让它们把旧数据标记为无效。
- 系统资源调度器:管理带宽分配、QoS优先级、电源状态等。这部分我们后面章节会详细讲。
注意:CMN不是万能的。它主要解决的是「一致性」和「互联」问题。如果你的SoC里只有几个独立的加速器,彼此不需要共享数据,那用简单的总线或者交叉开关可能更划算。CMN的协议开销和面积成本都不低。
1.4 CMN的演进路线
ARM的CMN家族经历了几个重要版本:
| 版本 | 发布年份 | 最大节点数 | 关键特性 |
|---|---|---|---|
| CMN-600 | 2015 | 24 | 首代Mesh架构,支持CHI协议 |
| CMN-650 | 2018 | 32 | 增加QoS、带宽管理 |
| CMN-700 | 2021 | 64 | 支持DDR5、CXL、高级电源管理 |
| CMN-750 | 2024 | 128 | 支持CXL 3.0、UCIe、chiplet互联 |
我个人用得最多的是CMN-700。说实话,从CMN-600到CMN-700的升级,最大的感受就是带宽管理终于好用了。CMN-600的QoS配置特别麻烦,我当年调了一个月才把GPU的优先级调对。CMN-700引入了更细粒度的带宽分配,一个寄存器就能搞定。
1.5 什么时候该用CMN?
这个问题没有标准答案,但我可以分享一些经验:
- 节点数超过8个:如果你的SoC里有8个以上的主设备需要共享内存,CMN是首选。
- 需要硬件一致性:如果软件维护一致性太复杂(比如异构计算场景),CMN能帮你省很多事。
- 对带宽有极致要求:Mesh网络的多路径特性,让CMN在带宽密集型场景下表现优异。
- 芯片面积预算充足:CMN的面积不小,一个CMN-700的Mesh节点大概占0.5-1mm²(7nm工艺)。
个人建议:如果你在做手机SoC或者服务器芯片,CMN基本是标配。但如果是IoT或者MCU级别的芯片,别碰CMN,用简单的总线就够了。我曾经见过一个团队在低功耗芯片里硬塞CMN,结果功耗翻了三倍,性能还没提升多少。
好了,这一章就到这里。CMN的概念和定位搞清楚了,后面我们才能深入聊拥塞控制和带宽分配。记住一句话:CMN是SoC的脊梁,脊梁硬了,整个系统才能站得稳。
公众号:蓝海资料掘金营,微信deep3321