三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Arm CMN-650 CCIX架构配置与优化指南

Arm CMN-650 CCIX架构配置与优化指南

1. CMN-650 CCIX架构概述

Arm Neoverse CMN-650的CCIX实现基于三个核心网关模块:CXRA(CCIX Request Agent)、CXHA(CCIX Home Agent)和CXLA(CCIX Link Agent)。这种架构设计允许在保持低延迟的同时,实现跨多芯片的缓存一致性。在实际部署中,我们通常需要配置2-4个CXG(CCIX Gateway)模块来满足不同场景的带宽需求。

关键提示:在启用CXSA(CCIX Slave Agent)模式时,部分配置步骤可以跳过,这能显著简化初始化流程。但需要注意,CXSA模式仅适用于单向通信场景。

CCIX协议栈在CMN-650中通过PCIe物理层扩展实现,其关键性能指标包括:

  • 单链路理论带宽:16GT/s(Gen4)或32GT/s(Gen5)
  • 典型往返延迟:100-150ns(取决于拓扑距离)
  • 最大支持缓存行大小:256字节

2. LDID分配与远程代理配置

2.1 LDID分配原理

LDID(Local Device ID)是CMN-650用于跟踪远程缓存代理(RN-F)的关键标识符。每个可能向HN(Home Node)发送请求的远程RN-F都必须分配唯一的LDID。这个设计主要服务于SF(Snoop Filter)的跟踪机制。

在典型的双芯片系统中,建议采用以下LDID分配策略:

  • 芯片0:LDID 0-31
  • 芯片1:LDID 32-63 这种分配方式可以避免LDID冲突,同时保留足够的扩展空间。

2.2 具体配置步骤

2.2.1 寄存器编程
  1. por_cxg_ha_rnf_exp_raid_to_ldid_reg 配置
# 示例:为远程RN-F分配LDID 32 mmio_write 0x20000000 0x20 # CXHA基址+0x20000000写入0x20
  1. 标记缓存代理属性
  • 设置ldid<X>_rnf位标识远程代理类型
  • 设置对应valid位使能配置
  1. HN-F节点ID映射: 通过por_hnf_rn_cluster<X>_physid_reg<Y>寄存器设置:
  • remote_bit:标识远程代理
  • CPA_enable:是否启用端口聚合
  • CPA_group:端口聚合组信息

常见问题:如果发现SF跟踪异常,首先检查LDID是否与本地RN-F范围重叠。可以通过por_cxg_ra_rnf_ldid_to_ovrd_ldid_reg覆盖默认分配。

3. SAM系统地址映射配置

3.1 RA SAM编程

RA SAM(Remote Agent System Address Map)负责将CCIX请求路由到正确的目标节点。每个CXRA都需要配置以下参数:

  1. 地址区域定义
  • 基地址(Base Address)
  • 区域大小(Region Size)
  • 目标HAID(Home Agent ID)

典型配置表示例:

寄存器偏移基地址大小HAIDValid
0x10000x800000001GB0x121
0x10100xC0000000512MB0x151

3.2 RN SAM配置

RN SAM需要与本地HN的内存映射保持一致。关键步骤包括:

  1. 编程每个CXHA中的RN SAM
  2. 配置本地HN的地址范围
  3. 设置内存属性(缓存性、共享性等)
# 示例:配置RN SAM地址区域 mmio_write 0x30004000 0x80000000 # 基地址 mmio_write 0x30004008 0x40000000 # 区域大小(1GB) mmio_write 0x30004010 0x00000001 # 使能位

4. CCIX协议链路管理

4.1 链路控制寄存器配置

每个CCIX协议链路都需要独立配置信用分配。CMN-650支持灵活的信用分配策略:

  1. 基本配置
# CXRA链路控制寄存器示例 mmio_write 0x40001000 0x0000000F # 启用链路并分配信用
  1. 信用分配策略
  • 均分模式(默认):所有活跃链路平分信用
  • 自定义比例:支持25%/75%、33%/33%/33%等分配方案

性能提示:对于非对称流量场景,建议根据实际流量模式调整信用分配比例。例如,GPU加速器场景可以给下行链路分配更多信用。

4.2 链路状态管理

链路状态转换遵循严格的状态机:

  1. 链路启动序列
  • 检查lnk<X>_link_en状态
  • 设置lnk<X>_link_req
  • 等待lnk<X>_link_ack
  • 确认lnk<X>_link_down清除
  • 设置lnk<X>_link_up
  1. 链路关闭序列
  • 清除lnk<X>_link_req
  • 等待lnk<X>_link_ack清除
  • 确认lnk<X>_link_down置位
  • 清除lnk<X>_link_up

5. CPA功能配置

5.1 RN SAM中的CPA设置

端口聚合(CPA)需要RN SAM和HN-F SAM协同配置:

  1. 启用CPA模式
# 启用region0的CPA并设置组ID mmio_write 0x50003000 0x00000001 # region0_pag_en=1, region0_pag_grpid=0
  1. 地址掩码配置
# 设置CPA组0的地址掩码 mmio_write 0x50003040 0x0000FFFF # 使用PA[21:6]进行哈希
  1. CXG特性配置
  • 设置CPAG中的CXG数量(num_cxg_pag )
  • 编程每个CXG的CHI节点ID

5.2 HN-F SAM中的CPA配置

HN-F SAM需要与RN SAM保持镜像配置:

  1. 物理ID寄存器设置
  • nodeid_lid _ra :匹配RN SAM的pag_tgtid0
  • remote_lid _ra :标识远程请求者
  • cpa_grp_lid _ra :设置CPA组
  1. 地址掩码同步: 必须确保HN-F SAM的addr_mask与RN SAM完全一致。

6. SLC内存系统专项配置

6.1 HN-F基础参数设置

CMN-650的SLC支持丰富的配置选项:

  1. 容量配置
# 设置2MB SLC和4MB SF mmio_write 0x60000000 0x00022000 # SLC_SIZE=2MB, SF_SIZE=4MB
  1. 延迟配置
# 2周期tag RAM和3周期data RAM mmio_write 0x60000008 0x00000102

6.2 高级功能配置

  1. eLRU替换策略
# 启用增强型LRU mmio_write 0x60000020 0x00000001
  1. 内存区域锁定
# 锁定way0-way3用于关键数据 mmio_write 0x60001000 0x0000000F
  1. TrustZone支持
# 配置安全属性 mmio_write 0x60002000 0x00000001 # 启用NS比特检查

7. 调试与性能优化

7.1 常见问题排查

  1. CCIX链路无法建立
  • 检查物理层训练状态
  • 验证协议层credit分配
  • 确认两端LDID映射一致
  1. SLC命中率低
  • 调整eLRU偏置参数
  • 检查地址哈希分布
  • 考虑way locking优化热点数据

7.2 性能调优建议

  1. 信用分配优化
# 非对称信用分配示例(75%/25%) mmio_write 0x40001004 0x1E000000 # link0 75%, link1 25%
  1. CPA哈希优化
  • 分析实际流量模式调整PA掩码
  • 避免哈希冲突(建议使用PA[18:6])
  1. SLC QoS配置
# 设置POCQ水位线 mmio_write 0x60003000 0x10204080 # 不同QoS类别的资源分配
← 返回列表