3. CMN节点类型:HN、SN、MN、RN
CMN-600/700这套互联架构里,节点类型是绕不开的基础概念。我刚开始接触CMN时,被这堆缩写搞得有点晕——HN、SN、MN、RN,每个节点到底干嘛的?说白了,它们就是互联网络里的不同角色,各司其职。
你想想看,一个SoC里那么多IP核,总得有人发起请求、有人响应请求、有人负责一致性管理吧?CMN就把这些职责分给了四种节点类型。
3.1 RN(Request Node)—— 请求发起者
RN是请求的发起方。CPU核、GPU、DMA控制器,这些都属于RN。它们向系统发出读写请求,然后等待响应。
我记得在某个AI芯片项目中,RN的数量直接决定了互联的带宽需求。当时我们挂了16个CPU核和4个GPU,每个RN的请求带宽加起来,差点把CMN的瓶颈给撑爆了。
RN的关键特征:
- 只发起请求,不处理一致性
- 可以缓存数据(L1/L2 cache)
- 通过CHI协议与HN通信
3.2 HN(Home Node)—— 一致性管家
HN是CMN里最核心的节点。它负责管理数据的一致性,说白了就是「这个地址的数据在谁手里?谁有最新版本?」。
每个地址区间都会映射到一个HN。当RN想读写某个地址时,HN会去查这个地址的缓存状态,然后决定怎么处理。
我建议你记住一点:HN的数量决定了系统的并发一致性处理能力。HN太少,所有请求都挤在同一个HN上,性能就上不去。HN太多,又会导致跨片通信开销变大。
实战经验:我曾经在一个16核项目中,把4个HN分布在不同的mesh节点上。结果发现,某些地址区间的访问延迟特别高。后来一查,是因为这些地址都映射到了同一个HN上,形成了热点。解决办法是把地址区间打散,均匀分布到所有HN上。
3.3 SN(Slave Node)—— 从设备接口
SN是连接从设备的节点。DRAM控制器、PCIe控制器、NIC这些,都属于SN。它们不发起请求,只响应请求。
SN的职责很简单:收到HN转发的请求后,去访问实际的从设备,然后把数据返回。
| 节点类型 | 典型设备 | 主要职责 |
|---|---|---|
| SN | DRAM控制器 | 响应内存读写 |
| SN | PCIe控制器 | 响应外设访问 |
| SN | NIC | 响应网络数据 |
嗯,这里要注意:SN本身不处理一致性。它只负责把数据从设备搬出来或搬进去。一致性的事,全交给HN去操心。
3.4 MN(Master Node)—— 系统主控
MN是CMN里的「大脑」。它负责系统级的配置、初始化、电源管理这些事。每个CMN实例只有一个MN。
MN不参与正常的数据传输。它只在系统启动时配置各个节点的寄存器,或者在低功耗模式下管理电源状态。
避坑指南:我曾经在调试一个系统时,发现某个RN死活连不上HN。查了半天,原来是MN的配置寄存器里,那个RN的ID没使能。所以,系统启动后第一件事,就是检查MN的配置是否正确。
3.5 四种节点的协作关系
这四种节点怎么配合工作?我画了一张图,你看完就明白了。
流程是这样的:
- RN发起请求:比如CPU要读内存地址0x8000_0000
- HN收到请求:根据地址映射,找到负责这个地址的HN
- HN查询一致性:检查这个地址的数据在哪个cache里,有没有被修改
- HN转发给SN:如果数据不在cache里,就去DRAM里读
- SN返回数据:DRAM控制器把数据读出来,返回给HN
- HN返回给RN:HN把数据发给RN,同时更新一致性状态
整个过程里,MN不参与数据传输。它只负责在系统启动时,告诉每个节点「你是谁,你该干什么」。
3.6 节点配置的实战要点
在实际项目中,节点配置有几个坑要注意:
节点配置检查清单:
- RN数量:不能超过CMN支持的最大值(CMN-600支持最多32个RN)
- HN分布:尽量均匀分布在mesh的不同位置,避免热点
- SN映射:每个SN要正确映射到对应的地址区间
- MN初始化:系统启动时,MN必须完成所有节点的配置
我个人习惯在项目初期,先用一个表格把节点清单列出来。这样后面做地址映射时,心里就有底了。
| 节点ID | 类型 | 连接的设备 | 地址区间 | 备注 |
|---|---|---|---|---|
| RN0 | RN | CPU0 | - | L1/L2 cache |
| RN1 | RN | CPU1 | - | L1/L2 cache |
| HN0 | HN | - | 0x0000_0000 - 0x3FFF_FFFF | 负责低1GB |
| HN1 | HN | - | 0x4000_0000 - 0x7FFF_FFFF | 负责高1GB |
| SN0 | SN | DRAM控制器0 | 0x0000_0000 - 0x3FFF_FFFF | 低地址区间 |
| SN1 | SN | DRAM控制器1 | 0x4000_0000 - 0x7FFF_FFFF | 高地址区间 |
嗯,这四种节点类型,说白了就是CMN互联架构里的四个角色。RN负责问问题,HN负责查答案,SN负责去拿答案,MN负责告诉大家「你们该怎么干活」。搞清楚了这些,后面做地址映射和拓扑规划就顺了。