TA(Transaction Layer,事务层)学习笔记

一、TA 在协议栈中的定位

UB 协议栈自顶向下四层:

Transaction(TA)  →  Transport(TP/CTP)  →  Network(NL)  →  DataLink+Physical(DL_PHY)
                                                                    ↓
                                                               H112 SerDes

TA 是最上层,面向软件,负责:

  • JFS 队列调度、上下文维护
  • WQE 拆解发送、RCE 回复 Rd Response / TAACK
  • CQE / EQE 上报
  • 超时检测、RNR 重传、Jetty 注销、Function 级复位

学习要点:TA 之下还有 TP(可靠传输)/ CTP(简易传输,无端到端重传)。TA 不直接碰链路,它把软件下发的"事务"交给 TP 去搬运。


二、三种编程接口

TA 为软件提供 三种 编程入口:

接口 用途 说明
Mailbox 控制面表项创建/修改/读取/注销
Doorbell 通知硬件执行任务、更新指针、使能事件 硬 DB(写地址空间 → TP LSAR → TA)与软 DB(record,软件写内存硬件读)
DirectWQE 低延时直接下发 WQE 64B 或 128B,不经 cache 访存

Doorbell 方向速记(软更 PI/CI 指软件维护的指针):

队列 软件维护 硬件维护
JFS PI CI
JFC CI PI
JFR PI CI
EQ CI PI

记忆:JFS/JFR 软件生产(PI),JFC/EQ 软件消费(CI)。
各队列对 DB 的支持:JFS 仅硬 DB;JFC 硬+软;JFR 仅软 DB;EQ 仅硬 DB。


三、Jetty / JFS / JFR / JFC 队列模型

3.1 核心概念

  • Jetty:URMA 编程接口对象,绑定一对发送/接收队列
  • JFS(Jetty For Send):发送队列
  • JFR(Jetty For Receive):接收队列
  • JFC(Jetty For Completion):完成队列,上报 CQE

3.2 关键规格

规格
每 Entity JFS/Jetty 数 最大 65536(64K)
JFS/Jetty 队列深度 1~32768(32K),2 的幂次方;深度 1/2/4 仅 Normal SQE
每 Entity JFR 数 最大 65536
JFR 队列深度 64~32768
JFR RQE 大小 最大 4(单位 16B)
JFR RQE Buffer Size 2KB/4KB,1 报文最多 4 RQE
Jetty Group 数 每 Entity 最大 65536
Jetty Group 内最大 Jetty 数 32
Jetty Group Hash 按包头 Hint 选 JFR
JFC 队列数 最大 65536;1 JFC 绑多 JFS/JFR,1 JFS/JFR 属 1 JFC
JFC CQE 深度 64~1048576(1M)
JFC CQE 大小 Normal 64B;Raw 固定 64B
JFC inline 模式 Send/SendImm/SendInv 时 Payload 写入 CQE,最大 20B(带立即数减 8B)
JFC PA 地址 可 Bypass UMMU 降低 CQE 时延

学习要点:

  • 1 JFC 绑多 JFS/JFR,但 1 JFS/JFR 只属 1 JFC(多对一关系)。
  • JFC 可 Bypass UMMU 直接用 PA 地址,用于降低 CQE 时延。

四、URMA 操作语义

4.1 支持的操作

Send、Send with invalidate(仅软件方案)、Send with immediate data(CTP 最大 1 MTU)、Send with inline data(最大 208B)、Write、Write with immediate、Write with Notify、Write with Reduce(≤MTU)、Write with inline(最大 208B)、Read、Read with Reduce(≤MTU)、Compare&Swap Atomic(4/8/16B)、Fetch&Add Atomic(4/8B)、User Data 上报 CQE、NOP。

4.2 操作规格(Normal SQE)

操作 最小 最大
Send 0B(SGE_Num=0) 可靠 TP 64KB;CTP 1 MTU
Write 0B 256MB(0x40000 KB)
Read 0B 256MB
Atomic CAS 4B 16B(操作数×2)
Atomic FetchAdd 4B 8B
Raw SQE Payload 0B 4KB
Write/Send inline 208B

4.3 WQE 切片规则

  • Write/Read 可切片给 Transport,切片大小 = Payload size(不含包头)
  • 可靠 TP 最大 65536(64KB),最小 1KB,2 的幂次方
  • Send / Read Response / Raw / Atomic 不切片
  • 无 TP 时按 MTU 拆

4.4 序模型

模型 说明
No Order 无序
Strong Order 强序
Fence 栅栏
Relax Order 宽松序

均在 WQE 中配置。


五、SQE 规格

  • SQEBB(SQE Base Block)= 64B,是计量单位
  • Raw SQE:最大 5 SQEBB;最大 18 SGE(每 SGE 16B);用于传统 NIC
  • Normal SQE:最大 4 SQEBB;Write/Send 最大 13 SGE;Read 最大 6 SGE;Atomic 1 SGE
  • JFS Context User Data:最大 8B 填入 CQE

记忆:64B 是基本块。Raw 给传统 NIC 用(5 BB / 18 SGE),Normal 是 URMA 主力(4 BB)。

SGE 是 Scatter/Gather Element(散集元素) 的缩写。它是一种用于描述非连续或离散内存数据段(Buffer)的结构单元,主要在传输请求WQE中指定数据的内存地址、长度和访问权限,从而支持高效的向量化 I/O 与零拷贝数据搬移。
SGE 的核心作用描述内存段:每个SGE 包含一段物理或虚拟内存的起始地址(Buffer Address)以及数据长度(Length)。
SGL:多个 SGE 可以组合成一个散集列表(Scatter/Gather List, SGL),用来一次性处理分布在内存中不同位置的多个数据块。

  • SGE 的核心字段(硬件数据结构)在硬件底层,一个 SGE 通常占用 16 字节(Bytes) 或 32 字节 的固定内存空间,主要由以下三个核心核心字段组成:

    • Addr (64-bit 地址):指向本段内存缓冲区的起始虚拟地址(VA)或物理地址。
    • Length (32-bit 长度):指定该内存段的大小(以字节为单位),定义了硬件可以读取或写入的边界。
    • Lkey (32-bit 局部密钥):这是硬件进行内存保护的核心机制。它是该内存区域在注册(Memory Region, MR)时生成的令牌。硬件通过检查 Lkey 来验证当前进程是否有权限读写该段内存,防止非法内存越界。
  • SGE 的组织与执行形式:WQE ↔ SGL ↔ SGESGE
    它是通过工作队列(Work Queue)和散集列表(SGL)来协同工作的:软件提交(Gather / 发送端):软件(如应用层或网络协议栈)要发送 3 块不连续的数据。软件构建一个 WQE(工作队列元素),并在 WQE 内部包含一个由 3 个 SGE 组成的 SGL(Scatter/Gather List)。


六、RC 表(Remote Command 表)

存收到的远端 Read / Atomic 请求;RM 模式需回 TAACK 的 Write/Send 也用。

规格
每 Entity RC 表数 最大 65536,可配置(每 VL 2 的幂次方深度)
RC 表大小 Ring Buffer,RCE BB 固定 64B;单命令占 1+ RCE BB;最小 64B,最大 128B(2 RCE)
RC 表深度 64 ~ 32768 RCEBB
拥塞反馈 RC 表达水线返回拥塞指示,源端降速(解除活锁,非协议拥塞控制)

学习要点:RC 表是"接收侧"用来暂存远端发来的 Read/Atomic 请求的环形缓冲。达水线会反压源端降速——注意这是解除活锁,不是协议级拥塞控制。


七、Direct WQE / WQE Lock Buffer / Stars Lock Buffer

7.1 DirectWQE 机制

硬件收到 DirectWQE 后,按 Jetty 范围判断存入:

  • Stars Lock Buffer
  • WQE Lock Buffer
  • WQE cache

Lock Buffer 模式下 SQE 只存片上,无访存,DSQE 源保证不溢出(低延时场景)。

7.2 WQE Lock Buffer

  • XPU(CPU/CCU/AIV/AICPU)下发的 DirectWQE 存入
  • 使用此 Buffer 的 Jetty 仅支持 DirectWQE,不支持 doorbell
  • FE 内连续 Jetty 范围,静态配置(start_jetty_id / end_jetty_id),所有 FE 范围相同
  • 每 FE 配 1bit 使能 + fe_start_buf_idx;FE 内 jetty 深度相同(2^bb_shift,最大 2^12)
  • 片上容量 4K×64B
  • JFS context 中 wqe_lock_buffer_en=1 时 sqe_base_addr 为此 Jetty 在 Buffer 起始地址

地址计算

addr = fe_start_buf_idx + (jetty_id - start_jetty_id)*(2^bb_shift) + sqebb_idx%(2^bb_shift)
  • 64B DWQE:sqebb_idx = DWQE.sqe_bb_idx - 1
  • 128B DWQE:第 1 个 sqebb_idx = sqe_bb_idx-2,第 2 个 = sqe_bb_idx-1

7.3 Stars Lock Buffer

  • 深度 128×64B
  • 与 WQE Lock Buffer 的 Jetty 范围不交叠

学习要点:DirectWQE 是低延时关键路径。Lock Buffer 把 SQE 留在片上免访存,但要付出"Jetty 范围受限、不支持 doorbell"的代价。


八、Write with AtomicStoreAdd

模式 opcode 结构 说明
单 WQEBB 0x19 仅 1 SGE,1 WQEBB;EID 32bit,TokenValue 24bit;不支持 UDF Payload 最大 64KB(TP)/ 4KB(CTP,≤MTU);inline 最多 8B;TA 不切片发 TP;sge_num=0 表 payload=0
两 WQEBB 0x1A 数据结构同 write with notify;1 SGE(sge_num=0/1) inline 最多 16B;TP 0~64KB / CTP 0~4KB;TA 固定不切片,超切片大小不发送上报 AE

九、流量管理 TM 4 层调度

层级 节点 典型数量 调度 Shaper
L5 Queue (Q) 128
L4 Queue Set 128 固定一一映射 L5 单桶 1Mbps~200Gbps,精度 1%
L3 Function (VF/PF) Entity 64 最多 16 L4 → 1 L3,SP+DWRR 双桶 CIR/PIR
L2 Function Group 16 最多 8 L3 → 1 L2,SP+DWRR 双桶
L1 Network Port 1 32 FG → 1,SP+DWRR 单桶
  • Jetty 流量控制最低 1Mbps
  • SL→VL 映射表,同 FE 同 VL SQ 映射到同 FE+VL Queue

学习要点:自底向上 L1(端口)→ L2(FG)→ L3(FE)→ L4(QS)→ L5(Q)。调度算法 SP(严格优先级)+ DWRR(加权轮询)组合。L3/L2 用双桶(CIR/PIR),L1/L4 用单桶。


十、性能指标

10.1 昇腾场景

操作 RC 单向 RC 双向 RM 单向 RM 双向
Send/Rcv 最快
  • CTP 模式 4KB 打满
  • 带宽场景:10 Jetty 对 10 Port,4KB 打满
  • context cache miss 时双向包率之和 80Mmps
  • 达成条件:JFS 32~384,RC 32~64,单 Jetty WQE≥4,CQE 非 inline,4KB 打满带宽,≤1KB 打满包率

学习要点:RC 比 RM 快约 2 倍。Cache hit/miss 对带宽影响巨大。


十一、图速记

软件 ──Mailbox──▶ [表项配置] ──IMP──▶ TA
     ──Doorbell──▶ [PI/CI更新] ──TP LSAR──▶ TA
     ──DirectWQE─▶ [低延时] ──┬─ Stars Lock Buffer (128×64B)
                              ├─ WQE Lock Buffer (4K×64B, 昇腾)
                              └─ WQE cache

TA 内部:
  JFS(发送) ──SQE──▶ [拆解/切片] ──▶ TP ──▶ NL ──▶ DL_PHY
  JFR(接收) ◀──RQE──  [收报文] ◀── TP
  RC表(远端命令暂存) ──RdResp/TAACK──▶
  JFC(完成) ──CQE──▶ 软件
  EQ(事件) ──EQE──▶ 软件


Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐