[AI][昇腾950]NVMe驱动方式分析

发布时间:2026/7/25 0:48:35
[AI][昇腾950]NVMe驱动方式分析 1. 摘要昇腾950 平台驱动 NVMe SSD 有4 条可行路径硬件支撑度从高到低#路径Master硬件支撑软件复杂度适用场景1Host CPU PCIe DMAHost CPU / STARS 调度 PCIe DMA✅低标准 NVMe driver主流方案大块数据2AIV PCIE-THROUGH 直接搬运AIVMTE2/MTE3✅中需配 VA window AIV kernelAIV 自治、低延迟小数据3STARS PCIe ThroughSTARSc-core/A55✅中STARS 软件 PCIe TH 配置STARS 直接与 Host 交互 SQE/CQE4SDMA PCIe BARSTARS 调度 SDMA✅ SDMAA→PCIe Bar 支持 STARS→SDMA 单向中高SDMA SQE 跨 PCIe 拆分约束大块 HBM↔PCIe 搬运关键差异昇腾950昇腾950AIV PCIE-THROUGH 硬件能力后续能力兼容昇腾950调度链路受限HSCB 1.0 硬连线仅 STARS→AICORE/SDMA 单向AICPU 不能调度 AICoreAICore 不能调度 CCU因此 昇腾950 下 AIV 自治驱动 NVMe路径2AICPU 介入调度的能力弱AIV 直接走 PCIe-THROUGH 反而更顺畅2. 昇腾950 PCIe-Through 能力项昇腾950配置方式SPR 或 VA spaceVA 优先VA 窗口≥1GBboot-time 配置Burst512B/256B/128B 可配支持 pipeAIV MTE2BUS→UB MTE3UB→BUSAtomic不支持数据返回64B/128B 粒度乱序MTE ROB 重排128B 边界拼接不跨 128B 边界结论AIV 通过 PCIE-THROUGH 直接访问 PCIe含 NVMe的硬件能力在 昇腾950 即已具备后续兼容未做机制性改动。结论昇腾950 是多 master 共享的 PCIe 访问机制AICORE含 AIV是其中之一。3. 四条 NVMe 驱动路径详解路径 1Host CPU PCIe DMA昇腾950 主流方案Host CPU 昇腾950 │ │ │ 1. PCIe 枚举发现 NVMe EP │ │ 2. NVMe driver 初始化 Admin/SQ/CQ│ │ 3. 提交 NVMe Read/Write SQE │ │◀────── PCIe Doorbell ─────────────│ │ │ │ STARS 调度 PCIe DMA ────┤ │ │ PCIe DMA 通道搬运数据 │◀────── PCIe DMA 数据 ─────────────┤ │ │ │ 4. CQ 中断MSI-X上报完成 │ │◀────── MSI-X ─────────────────────│硬件支撑STARS 调度 PCIe DMA 通道昇腾950 原生支持软件链路Host CPU 运行标准 Linux NVMe driverNVMe driver 经 PCIe BAR 发现 NVMe 控制器寄存器STARS 或 Host CPU 配置 PCIe DMA 通道搬运 SQE/CQE/dataNVMe 完成后 MSI-X 中断上报 Host优点成熟、标准、大块数据高效缺点依赖 Host CPUDevice 侧不能自治路径 2AIV PCIE-THROUGH 直接搬运AIV 自治AIV Kernel (昇腾950) │ │ DataCopyAIV::Copy(ubBuf, nvmeBufVA_in_PCIE_window, size) │ → MTE2 DMA MOV (pcie_through enabled) │ → BIF → NoC BUS → PCIe RC ATU → PCIe TLP → NVMe │ │ DataCopyAIV::Copy(nvmeBufVA_in_PCIE_window, ubBuf, size) │ → MTE3 DMA MOV (pcie_through enabled) │ → PCIe RC ATU → PCIe TLP → NVMe │ └─ 绕过 STARS / SDMA / PCIe DMA / AICPU硬件支撑AIV MTE2/MTE3 PCIE-THROUGH mode 完整支持AICORE → PCIE支持 1B~512B配置 VA→PCIe BUS 地址配置要点boot-time 配置 PCIE-THROUGH VA window≥1GB对齐窗口大小配置 AIV SMMU bypassPCIe-through 走 bypass由 PCIe ATU 翻译配置 PCIe 把 VA window 映射到 NVMe BAR 空间AIV Kernel 用 DataCopy 访问 VA window保证 128B 对齐、stride×repeat 不跨窗口、单 burst ≤512BNVMe 命令提交AIV 不能直接 ring NVMe DoorbellMMIO 寄存器需 CPU 类指令需配合模式 AHost CPU / STARS CPU 提交 NVMe 命令AIV 只搬数据模式 BSTARS CPU 运行精简 NVMe driver 子集提交 Admin/SQ/CQ DoorbellAIV 搬运 data buffer优点无 STARS/SDMA 调度开销AIV 自治低延迟小数据缺点单 burst ≤512B、不支持 atomic、不支持 L2Cache hint、需配合 CPU 提交 NVMe 命令路径 3STARS PCIe ThroughSTARS 直接与 Host 交互与 NVMe 关系此路径主要用于 STARS↔Host 控制面交互若 Host 侧 NVMe driver 把 SQ/CQ 暴露给 STARSSTARS 可直接提交 NVMe SQE。但 STARS 本身不搬运数据数据搬运由 PCIe DMA路径1或 AIV PCIE-THROUGH路径2完成。优点STARS 主动调度减少 Host CPU 介入缺点STARS 软件开发复杂昇腾950 STARS 算力有限路径 4SDMA PCIe BAR大块数据搬运STARS → SDMAM → SDMAA → HA → PCIe BAR → NVMe ↑ SDMAA → PCIe Bar 支持 128B/256B/512Bclose门控硬件支撑SDMAA 经 HA→PCIE 访问 PCIe BAR支持 128B/256B/512B昇腾950 支持 STARS→SDMA 单向调度跨 PCIe 搬运 SDMAA 根据地址拆分请求不受 HA MRRS 限制PCIe 不支持 atomic跨 PCIe reduce 需下发到目的地址所在片约束跨 PCIe 搬运需用目的地址同片的 SDMAMPCIe 不支持 atomicreduce 需片内做SDMAA 请求拆分不受 HA MRRS 限制Bypass SMMU 模式下用 PA 搬运优点大块数据高带宽SDMA 40 通道并行缺点调度开销高STARS SQE SDMAM 解析不适合低延迟小数据4. 昇腾950 NVMe 驱动推荐方案4.1 主流方案Host CPU PCIe DMA路径1适用绝大多数生产场景。Host CPU 运行标准 NVMe driverSTARS 调度 PCIe DMA 搬运大块数据。硬件支撑度最高软件最成熟。4.2 低延迟方案AIV PCIE-THROUGH路径2适用 AIV 需要低延迟访问 NVMe 小批量数据的场景如 KV-Cache 拉取、梯度写回。配置要点1. SC boot-time: - 配置 PCIe RC TX ATUVA window (≥1GB) → NVMe BAR 空间 - 配置 AIV MTE PCIE-THROUGH VA window与 ATU 对应 - 配置 AIV SMMU bypass 2. STARS CPU 运行精简 NVMe driver: - 枚举 NVMe EP经 PCIE TH系统参数行42 - 初始化 Admin/SQ/CQring Doorbell - 在 HBM 分配 NVMe data bufferATU 映射 3. AIV Kernel: - DataCopyAIV::Copy 从 PCIE window 读 data buffer 到 UB (MTE2) - 计算 - DataCopyAIV::Copy 从 UB 写回 PCIE window (MTE3) - PipeBarrier 等待完成 4. STARS CPU 检查 CQ确认 NVMe 写完成昇腾950 特有优势因 AICPU 不能调度 AICore AIV 直接经 PCIE-THROUGH 访问 NVMe 避免了对 AICPU 调度链路的依赖。4.3 大块数据方案SDMA PCIe BAR路径4适用 HBM↔NVMe 大块数据搬运模型加载、checkpoint 落盘。STARS 调度 SDMASDMAA 经 PCIe BAR 搬运。需遵守跨 PCIe 拆分约束。5. AIV NVMe 读写性能不对称与读易受干扰从硬件机制层面解释 AIV 经 PCIE-THROUGH 驱动 NVMe 时读性能显著低于写性能且读易受干扰的根因。5.1 典型现象现象表现读写带宽不对称AIV 写 NVMeMTE3 UB→BUS带宽 AIV 读 NVMeMTE2 BUS→UB带宽读延迟远高于写写几乎只受 PCIe link RTT NVMe ACK 主导读额外承受 NVMe 介质访问延迟 ROB 重排延迟读易受干扰BUS 上其他 master 流量、TAGID 耗尽、PCIe 乱序返回、NVMe 内部调度、其他 AIV 核竞争 ROB/outstanding 都会拖慢读写不易受干扰写是fire-and-forgetMTE 发出后即释放资源PCIe 端缓冲吸收干扰窗口极小5.2 根因一句话写路径单向、顺序、无需重排、资源占用瞬时释放读路径双向、乱序、必须 ROB 重排、资源长期占用且对 BUS 反压敏感。5.3 根因分层┌─────────────────────────────────────────────────────────────┐ │ 应用层NVMe Read 需介质访问(50~100us)Write 只需 ACK(1us) │ ├─────────────────────────────────────────────────────────────┤ │ PCIe 层Read TLP 需 Completion TLP 返回(乱序)Write TLP │ │ 即发即弃(缓冲吸收) │ ├─────────────────────────────────────────────────────────────┤ │ MTE 层读需 ROB 重排拼接(64B块)占用 TAGIDROB entry │ │ 写保持 128B 粒度无需拆分资源瞬时释放 │ ├─────────────────────────────────────────────────────────────┤ │ BUS 层读通道受 back pressure(TAGID满/BUS反压)写通道反压小 │ ├─────────────────────────────────────────────────────────────┤ │ 资源层outstanding 读 64~128 笔TAGID 共享ROB 容量有限 │ │ 写 outstanding 同等但占用时间短 │ └─────────────────────────────────────────────────────────────┘5.4 写路径的快来自写路径 back pressure小; 写通道反压仅在TAGID 全部占用或BUS 主动反压时触发。由于 Write TLP 是 postedPCIe 端缓冲深度大BUS 反压概率低TAGID 占用时间短发出即释放不等 ACK。因此写路径反压窗口极小。写路径无需 ROB 重排; 写路径数据来自 UB顺序读出MTE 按顺序发 write request不需要 ROB 重排。5.5 读路径的慢来自环节特性影响NVMe 介质读需真实介质访问50~100us主导延迟PCIe Completion非 posted必须等 NVMe 返回数据双向 RTT 介质延迟PCIe 乱序burst 间 burst 内乱序64B/128B 混合粒度必须 ROB 重排重排有延迟ROB 重排按 TAGID 链表顺序拼接 64B 块占用 ROB entry重排算法有开销128B 拼接约束128B 数据拼接不能跨 128B 地址边界不对齐时需额外缓冲对齐TAGID 占用读 request 发出后 TAGID 持续占用直到数据返回重排完成长时间占用易耗尽outstanding 限制PCIe mode 读 outstanding 64~128 笔并发上限受 NVMe 响应速度制约BUS 反压读通道在 TAGID 满或 BUS 反压时 on-hold核心干扰点UB 写回 bank conflictUB Write 与 BUS Write 同 bank 冲突时 BUS Write 被反压读路径末端反压读路径 back pressure大核心干扰点读路径有双重反压请求侧反压TAGID 耗尽或 BUS 反压 → 新读请求 on-hold → outstanding 不再增加 → 吞吐下降数据侧反压ROB 重排后的数据写 UB 时若 UB bank conflict 或写接口反压 → 数据滞留在 back pressure data FIFO → ROB 空间不释放 → 反向影响新数据接收6. 读写不对称的 6 个根因逐条对照根因 1NVMe 介质延迟不对称应用层主导因素操作NVMe 侧延迟Write控制器缓冲接收ACK 快速返回1us介质写入异步后台Read必须真实介质访问50~100usTLCQLC 更长AIV 发一笔 512B writePCIe RTT(~1us) NVMe ACK(1us) ≈ 2us 即可释放资源发下一笔。AIV 发一笔 512B readPCIe RTT(~1us) NVMe 介质(50~100us) ROB 重排 ≈ 50~100us 才能释放资源。单笔延迟差 25~50 倍这是读写不对称的最主要来源。根因 2PCIe 事务类型不对称协议层事务PCIe 类型行为WriteMemory Write TLPposted即发即弃无需 CompletionRC/switch 缓冲吸收ReadMemory Read TLPnon-posted必须等 Completion TLP 返回占用 outstanding 信用Write TLP 不占 read completion 信用PCIe 端缓冲深几乎不反压。Read TLP 占用 outstanding 信用PCIe 协议层 credit受 NVMe 响应速度制约credit 回收慢。根因 3MTE 数据处理不对称MTE 层项写MTE3读MTE2数据来源UB本地顺序快PCIe BUS远端乱序慢数据粒度处理保持 128B无需拆分64B/128B 混合粒度需拼接ROB不涉及必须 ROB 重排64B 块按 TAGID 链表顺序128B 边界无约束拼接不跨 128B 地址边界对齐缓冲无alignment buffer 收集拼接每行数据读路径的 ROB 重排是写路径完全没有的额外环节。重排需维护链表、按 recycle status 调度有固有开销且 ROB 容量有限。根因 4资源占用时长不对称资源层资源写占用时长读占用时长TAGID短发 request 后即可回收不等 ACK长发 request 到数据返回重排完成outstanding短长受 NVMe 介质延迟制约ROB entry不占用占用直到重排完成RRETMSG不占用占用返回消息缓冲back pressure FIFO不涉及滞留数据时占用读路径资源占用时长 PCIe RTT NVMe 介质 ROB 重排是写路径的 25~50 倍。资源长期占用导致 outstanding 耗尽快新请求被 on-hold。根因 5outstanding 上限不对称的影响放大MTE FSPCIE modeoutstanding 限制512B burst64 outstandingline 1413256B/128B burst128 outstanding写路径64 笔 outstanding × 512B 32KB 在途因释放快可持续填满。读路径64 笔 outstanding × 512B 32KB 在途但因每笔占用 50~100us32KB 耗尽后必须等回收才能发新请求。读有效带宽上限≈ 32KB / 50us 640 MB/s最坏 NVMe 介质延迟下写有效带宽上限≈ outstanding × 512B / PCIe RTT ≈ 32KB / 2us 16 GB/s理论实际受 NVMe 控制器、PCIe link 带宽限制但读写差距可达10~25 倍。根因 6读路径干扰源多干扰敏感性读路径因资源长期占用 双重反压对以下干扰源敏感干扰源机制影响BUS 其他 master 流量共享 NoC BUS其他 masterAIC MTE、DVPP、SDMA占用 read 通道读 request 被仲裁延迟completion 被 BUS 拥塞TAGID 共享竞争TAGID 跨指令/跨核共享line 2291: “all read outstanding shared with all CORE”多核同时读 PCIe 时 TAGID 耗尽更快ROB 容量竞争ROB 被多条读指令占用一条指令的 ROB entry 不足重排阻塞UB bank conflictROB 数据写 UB 时与 AIV 本地 UB 写冲突BUS Write 被反压line 1575: write-write conflict BUS Write 反压PCIe completion 乱序加剧多笔 read outstanding 时 NVMe 乱序返回ROB 链表碎片化重排延迟增加NVMe 内部调度NVMe 控制器多队列调度读优先级可能低于写读 completion 延迟抖动大PCIe link 重传PCIe 链路误码重传completion 延迟尖峰其他 AIV 核 PCIe 读多核同时 PCIE-THROUGH 读TAGID/ROB/outstanding 竞争互相拖慢写路径因资源瞬时释放上述干扰源影响极小。7. 读易受干扰的具体场景7.1 场景 A多 AIV 核并发读 NVMeAIV0 读 NVMe LBA 0~63 ─┐ AIV1 读 NVMe LBA 64~127 ├─ 共享 TAGID 池64~128 笔 ROB 容量 AIV2 读 NVMe LBA 128~191─┘ 问题 - 3 核各需 outstandingTAGID 池快速耗尽 - ROB 容量被 3 条指令瓜分每条指令重排空间不足 - NVMe 乱序返回 3 核的 completion 混杂ROB 链表碎片化 - 读有效带宽随核数增加而下降非线性7.2 场景 B读与 AIC MTE 流量竞争 BUSAIC MTE2 从 HBM 读 L1 数据高带宽、持续 AIV MTE2 从 NVMe 读PCIE-THROUGH低带宽、长延迟 问题 - NoC BUS read 通道被 AIC MTE2 占用AIV read request 仲裁延迟 - AIV read completion 经 BUS 返回时被 AIC 流量拥塞 - AIV TAGID 占用时间进一步拉长 → outstanding 耗尽 → on-hold7.3 场景 C读数据写回 UB 时 bank conflictAIV 正在向 UB 写本地计算结果UB Write高优先级 MTE2 ROB 重排完成后向 UB 写 NVMe 读回数据BUS Write低优先级 MTE FS line 1575: When bank conflict between UB Write and BUS Write (write-write conflict), the BUS Write is back pressured. 问题 - BUS WriteNVMe 读回数据被 UB Write 反压 - 数据滞留在 back pressure data FIFO - ROB 空间不释放 → 新 completion 无法进入 ROB → 恶性循环7.4 场景 DNVMe 介质延迟抖动AIV 连续发 64 笔 512B readoutstanding 上限 预期每笔 50us 返回流水线持续 实际 - NVMe 某些 LBA 命中缓存10us某些需介质100us - completion 乱序加剧ROB 链表需大跨度重排 - 介质慢的笔占用 TAGID 100usoutstanding 被少量慢笔耗尽 - head-of-line blockingROB 链表头部慢笔未到后续快笔数据无法写出7.5 缓解措施手段原理配置增大 burst512B减少 read request 数量降低 TAGID 压力SC 配 max_burst_len512B对齐 128B避免 ROB 拼接跨边界开销buffer 分配8. 读写不对称对照表维度写MTE3 UB→PCIe→NVMe读NVMe→PCIe→MTE2→UBNVMe 介质延迟无ACK 异步50~100us主导PCIe 事务Posted Write TLPNon-posted Read CompletionPCIe 返回无缓冲吸收64B/128B 粒度乱序MTE 处理保持 128B无拆分ROB 重排 64B 块 128B 拼接ROB 占用无有长期TAGID 占用时长短发后释放长等数据返回重排outstanding 有效上限高释放快低占用久back pressure小write channel 反压少大read channel data channel 双重BUS 干扰敏感度低高UB bank conflict不涉及UB 是源涉及UB 是目的BUS Write 被反压单笔延迟12us50100us典型带宽比10~25x1x基准