ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

[AI][昇腾950]AIV 直驱 URMA(UDMA)与 RoCE 对比学习

[AI][昇腾950]AIV 直驱 URMA(UDMA)与 RoCE 对比学习 基于 CANN / ACLSHMEMcann/shmem开源实现梳理。核心对照URMA / UDMAAscend950 上 AIV 直驱 UB灵衢远程内存访问RoCE / RDMAAIV 直驱 RoCEv2 QP跨节点以太网 RDMA本文侧重“控制面谁建链、数据面 AIV 怎么敲铃、语义与选型差异”。0. 一分钟结论问题答案AIV 如何直驱 URMAHost 用 HCOMM 建channel[UB endpoint jettyJFS/JFC]把 SQ/CQ/DB/token/EID 表拷到 DeviceAIV 在 kernel 内组装SQESGE 敲SW doorbell再 pollJFC CQE与 RoCE 的本质差别同一套“AIV 组 WQE → 敲 DB → 轮询 CQE”范式但底层是两套协议栈与对象模型URMA/UBEID、jetty、token vs RoCEv2QP、GID、lkey/rkey何时用谁机内 / UB 域优先 UDMA跨节点以太网走 RoCE高阶 RMA 优先级SDMA → UDMA → MTE → RoCE术语对应缩写含义在 shmem 中的角色URMAUnified Remote Memory AccessUB 上的远程内存访问协议/语义UDMAUnified Direct Memory AccessSHMEM aclshmemx_udma_*实现上消费 URMA jettyRoCERDMA over Converged EthernetRDMA 引擎使用的网络协议aclshmemx_roce_*Jetty / JFS / JFCURMA 队列对象JFS发送 jettySQJFC完成 jettyCQQPQueue PairRoCE 侧 SQ/RQ/SCQ/RCQ 配对AIVVector Core数据面真正写 WQE、敲 DB、poll CQE 的执行核Channelchannel非常重要的概念表达一对endpoint 的连接携带数据从控制面数据面1. 背景为什么是“AIV 直驱”传统路径Host / AICPU 组 WQE、敲 doorbellAIV 只能等结果。ACLSHMEM 把数据面下沉到 AIV后续设计把通信部分功能下沉到asc-comm仓实现通信的统一管理Host 只做控制面(Channel)建链、注册 MR、把队列上下文发布到 Device HBM。AIV 在 kernel 内直接从(Channel) 获取读队列上下文SQ/CQ/DB、远端寻址信息组装 WQE 到 SQ ring写 doorbellpoll CQE 完成 quietURMA 与 RoCE共享这一范式差别在 Host 建的是什么对象、WQE 字段语义、以及网络/总线路径。2. 整体架构对照2.1 AIV 直驱 URMAUDMA┌──────────────── Host / InitUdmaTransportManager──────────────┐ │ 1) HcommEndpointCreate(COMM_PROTOCOL_UBC_CTP, EID) │ │ 2) HcommMemReg对称堆 → tokenId / tokenValue │ │ 3) HcommChannelCreate(..., COMM_ENGINE_AIV, ...) │ │ → 分配 jettyubJfs(SQDB) / ubJfc(CQDB) │ │ 4) D2H 读 ChannelEntity → FillWqCtx / FillCqCtx / FillMemInfo │ │ 5) H2D 发布 aclshmemi_aiv_udma_info_tSQ/CQ/mem/EID/AMO │ └───────────────────────────────┬──────────────────────────────────┘ │ Device VA: jetty rings SW DB ▼ ┌──────────────── URMA / UB 硬件 ──────────────────────────────────┐ │ JFS: SQ ring SQ DB JFC: CQ ring CQ DB │ │ 远端段tokenId / tokenValue / remote EID │ └───────────────────────────────▲──────────────────────────────────┘ │ AIV: fill SQESGE → st_dev(SQ DB) ┌──────────────── AIV Kernel数据面─────────────────────────────┐ │ aclshmemx_udma_{put,get}_nbi → aclshmemi_udma_post_send[_mte3] │ │ aclshmemx_udma_quiet → poll JFC CQE → st_dev(CQ DB) │ └──────────────────────────────────────────────────────────────────┘2.2 AIV 直驱 RoCERDMA┌──────────────── Host / Init ─────────────────────────────────────┐ │ 910B/C: RdmaTransportManager HCCP RA / RaAiQpCreate │ │ 950: RdmaTransportManagerV2 HCOMM COMM_PROTOCOL_ROCE │ │ │ │ 1) 建 endpoint / RA 设备 │ │ 2) 注册 MR → lkey / rkey │ │ 3) 建 RC QPCONN_QP_AI_CORE / COMM_ENGINE_AIV │ │ 4) 发布 AiQpRMAQueueInfo ↔ aclshmemi_rdma_info 到 Device │ └───────────────────────────────┬──────────────────────────────────┘ │ Device VA: SQ/CQ HW/SW DB ▼ ┌──────────────── RoCEv2 NIC / 网卡数据面 ─────────────────────────┐ │ RC QP: SQ SCQAIV 驱动RQ/RCQ 按后端保留 │ │ 寻址remote VA rkey路径GID / sgid_index / TC / SL │ └───────────────────────────────▲──────────────────────────────────┘ │ AIV: fill WQE → ring SQ DB ┌──────────────── AIV Kernel数据面─────────────────────────────┐ │ aclshmemx_roce_{put,get}_nbi → post_sendBACKEND, WRITE/READ │ │ aclshmemx_roce_quiet → poll SCQ必要时敲 CQ DB │ │ Backend 编译期选择IN_DIE / XSCALE / HNS_1825 │ └──────────────────────────────────────────────────────────────────┘2.3 侧车对照同一范式不同对象Host 控制面 Device 数据面 底层 UDMA HCOMM UBC_CTP Jetty SQE/SGE SW DB JFC CQE URMA over UB RoCE HCCP/HCOMM RoCE QP WQE HW/SW DB SCQ CQE RoCEv2 Ethernet3. AIV 直驱 URMA 详细流程3.1 Host 控制面一次性步骤动作说明1OpenDevice/CreateEndpointCOMM_PROTOCOL_UBC_CTP按 Clos/EID 建本地 endpoint2RegisterMemoryRegion对每个 endpointHcommMemReg得到 token 保护信息3Connect/AsyncConnectallgatherEndpointDesc按 peer或 relay slot建 channel4HcommChannelCreate(..., COMM_ENGINE_AIV, ...)明确把数据面引擎交给 AIVHCOMM 内部分配 jetty5WaitHcommChannelReady等 channel READY6BuildUdmaInfo从SqContext.ubJfs/CqContext.ubJfc/ remote MR 填设备可见表7H2D 发布udmaInfoAddress→ device metakernel 经aclshmemi_get_udma_info_address取用Jetty 创建发生在HCOMM 内部SHMEM 读回的关键字段来源填到含义ubJfs.jfsIDwq.wqn发送 jetty 号ubJfs.sqVawq.buf_addrSQ ring 基址ubJfs.wqeSizewq.wqe_size单 WQE 字节数ubJfs.dbVawq.db_addrSW doorbellVAubJfc.jfcIDcq.cqn完成 jetty 号ubJfc.scqVacq.buf_addrCQ ring 基址ubJfc.dbVacq.db_addrCQ SW doorbellremotetokenId/Value EIDubmem_infoSQE 远端寻址与鉴权db_mode固定为SW_DBAIV 用st_dev直接写 DB 内存/寄存器镜像。3.2 Device 数据面aclshmemi_udma_post_send入口aclshmemx_udma_put/get_nbi→aclshmem_ptr取远端 VA →post_send。步骤算 slotdirectslot perelayslot pe * rank_count relay_pe取 WQ 上下文sq_ptr[slot][qp_idx]→head / buf_addr / wqe_size / db_addr / wqe_cntSQ 将满则先 poll CQ防 ring 覆盖读远端ubmem_infotoken、tid、tpn、eid_addr、rmt_jetty_type1组装 WQEPIPE_S标量直接写 SQ GM dcci_cachelinesPIPE_MTE3公开 API 默认在 UB scratch 组 SQESGE再DataCopyPad到 SQ推进 PI / 敲 SQ DBst_dev(cur_head, db_addr)更新head、wqe_cnt返回NBI完成靠aclshmemx_udma_quiet(pe)put/get 差异主要是 opcodeWRITEvsREAD远端 VA / 本地 VA 角色对调。3.3 Quiet / CQEaclshmemx_udma_quiet(pe)对目标 slotrelay 时对所有相关 slotpoll SCQ直到tail wqe_cnt等待 CQEowner bit翻转检查status/substatus 0st_dev(cur_tail 0xFFFFFF, cq_db)—— 注释明确reference URMA同步写回 WQtail语义*_nbi只保证 WQE 已提交读 get 目的地或复用 put 源缓冲前必须 quiet或 signal 协议。3.4 UDMA SQE 关键字段学习用aclshmemi_sqe_ctx_t再加aclshmemi_sge_ctx_t数据搬路径约 64B 一块 WQEBB字段来源 / 填法含义token_en/rmt_token_valueremote MR tokenUB 段访问鉴权rmt_jetty_type固定1peer jetty远端对象类型opcodeWRITE / READ / WRITE_WITH_NOTIFY / FAA / CAS…操作类型tp_idubJfs.tpID传输层实例rmt_jetty_or_seg_idtokenIdtid远端段/jetty 标识rmt_eid_{l,h}16B URMA EID远端 endpoint 身份rmt_addr_*aclshmem_ptr结果远端 VASGEva/len/token_id本地缓冲本端 payload或 AMO scratch4. RoCE 路径要点对照学习4.1 Host 控制面差异项UDMA / URMARoCE / RDMA传输管理器UdmaTransportManagerv1RdmaTransportManager950 上 v2RdmaTransportManagerV2控制面 APIHCOMM only910HCCP RARaAiQpCreate等950HCOMM协议COMM_PROTOCOL_UBC_CTPCOMM_PROTOCOL_ROCE/ RoCEv2队列对象JettyJFS/JFCRCQPSQ/RQ/SCQ/RCQ寻址身份EID16BGID / sgid_index IPV2 endpoint内存钥匙tokenId / tokenValuelkey / rkeyAIV 标记COMM_ENGINE_AIV同COMM_ENGINE_AIV或CONN_QP_AI_COREcq_cstm1AIV poll CQ4.2 Device 数据面差异项UDMARoCEAPIaclshmemx_udma_*aclshmemx_roce_*WQE 布局URMA SQESGEjetty/EID/token后端相关IN_DIE 32B16BXSCALE 128BHNS_1825 64B BEDoorbell统一 SW_DBst_dev(PI)IN_DIE/XSCALE/HNS 各有 HW/SW/双写模型常打包 QPN、PI、SL/COS完成队列JFC CQEis_jetty等SCQ CQEowner / wqe_id / statusBackend单套 UDMA 实现编译期三后端IN_DIE910、XSCALE/HNS_1825950平台仅 Ascend950910B/C Ascend950原子内建 FAA/CAS/…float add 走 reduce-write主要XSCALE支持IN_DIE/HNS 基本不支持单次上限put 请求 ≤256MB受 WQE/后端与 MR 约束实现按消息长度切分/限流4.3 RoCE WQE/DB 直觉与 UDMA 对照IN_DIE910WQE 像经典 HNS RoCEv2——ctrlopcode/owner/rkey/remote VA SGESQ DB 打包 QPN HNS_ROCE_V2_SQ_DB PI SL。XSCALE950更大 WQE128BDiamond send doorbellqp_idnext_pid支持 batch defer/submit 与 atomics。HNS_182595064B WQEBB、大端字段SW PI 镜像 HW DB含sgid_index。共同点都是 AIV 写 ring → 刷可见性 → 敲铃 → poll CQ。不同点URMA jetty PI还是RoCE QPN/PI/SL。5. 对比总表建议背下来维度AIV→URMAUDMAAIV→RoCERDMA互联灵衢UB以太网 RoCEv2SHMEM 引擎名UDMARDMA / ROCEHost 协议枚举UBC_CTPROCE队列抽象JettyJFS/JFCQP远端身份EIDGID / IP内存保护tokenlkey/rkeyDB 模型SW_DB 为主后端相关 HW/SW典型场景950 节点内/UB 域低时延 RMA跨节点、无 UB 或需以太网高阶路由位ACLSHMEM_TRANSPORT_UDMAACLSHMEM_TRANSPORT_ROCEInit 开关ACLSHMEM_DATA_OP_UDMAACLSHMEM_DATA_OP_ROCE与 HCCP 关系不用 HCCP 数据面910 控制面核心是 HCCP950 迁到 HCOMM高阶aclshmem_get/put路由同 PE 多引擎时SDMA → UDMA → MTE → RoCE即能走机内 SDMA/UB UDMA 时不会落到 RoCE。6. 学习路径如何读代码建议按“先 Host 建链再 Device 敲铃最后对照字段”阅读Host 控制面从UdmaTransportManager/RdmaTransportManager开始跟踪HcommChannelCreate或RaAiQpCreate流程理解如何为 AIV 分配队列对象jetty/QP并发布上下文到设备。Device 数据面看aclshmemi_udma_post_send或aclshmemi_rdma_post_send重点关注如何从udma_info/rdma_info读取队列上下文如何组装 WQE/SQE 并填充关键字段token/EID 或 rkey/GID如何敲 doorbellst_dev或ring_sq_doorbell对照字段对比 UDMA 与 RoCE 的 WQE 布局、doorbell 模型、完成队列处理理解协议差异如何体现在数据结构中。调试技巧关注db_mode、owner bit、wqe_cnt等状态字段以及 quiet 轮询逻辑。7. 参考仓库https://gitcode.com/cann/shmemIssueSHMEM 支持 AIV 直驱 UDMA控制面 jetty/HCCP 封装 数据面 put/get组 WQE、敲 DB、轮询 CQE项目术语docs/glossary.mdURMA / UDMA / RoCE / AIVDevice APIdocs/api/device_api.rstshmem_device_udma.h/shmem_device_rdma.h构建Ascend950 需-soc_type Ascend950RoCE 另需-enable_rdma950 指定-rdma_backend XSCALE|...
返回列表