4. DPAA2对象模型与资源管理
在 Layerscape 平台上,DPAA2 与传统网络驱动最大的区别在于:网口、缓冲池、队列、中断等资源不再由 Linux 内核直接静态分配,而是由一颗独立的 MC(Management Complex)固件统一管理,内核侧通过“对象”的方式去申请、连接和操作这些硬件资源。理解 DPAA2 的对象模型,是后续做安全网关流量分发、队列绑定、零拷贝转发的前提。
一、DPAA2 的核心对象
DPAA2 把硬件资源抽象成一组可被 MC 固件创建、销毁和查询的对象,每个对象有全局唯一的对象 ID(Object ID),由容器 ID 与对象句柄组成。工程中最常打交道的对象如下:
- DPRC(Data Path Resource Container):资源容器,是对象的“归属域”。所有 DPNI、DPIO、DPBP 等对象都必须创建在某个 DPRC 内,权限、隔离和资源配额都以容器为单位。默认存在一个根容器
dprc.1,通常把业务对象放在自定义容器中以便隔离。 - DPNI(Data Path Network Interface):网络接口对象,对应一个 MAC 端口。它描述链路速率、MAC 地址、队列数量、与 DPMAC 的绑定关系,是“网口”在 DPAA2 中的实体。
- DPBP(Data Path Buffer Pool):缓冲区池对象,管理帧缓冲(frame buffer)的分配与回收。收包时硬件从 DPBP 取缓冲,发包或释放时归还,是零拷贝路径上的关键资源。
- DPIO(Data Path I/O):面向软件的门户对象,提供 QBMAN 的入队/出队通道以及中断/事件通知。每个 CPU 或线程通常绑定一个 DPIO,用于无锁地访问队列。
- DPCON(Data Path Concentrator):通知集中器,把多个 DPIO 的中断汇聚后统一上报,减少中断数量,常用于多队列高吞吐场景。
- DPRC / DPMCP / DPMAC:DPMCP 是管理命令门户(MC Portal),用于向 MC 发送管理命令;DPMAC 表示物理 MAC 硬件,DPNI 通过它绑定到真实端口。
这些对象之间不是孤立的:DPNI 依赖 DPMAC 提供物理链路,依赖 DPBP 提供缓冲,依赖 DPIO 提供软件访问通道,而它们全部被 DPRC 容纳并由 MC 固件统一编排。下图给出对象之间的归属与依赖关系。
二、MC 固件交互与资源容器配置
内核或用户态程序并不直接写硬件寄存器,而是通过 MC 命令门户(DPMCP) 向 MC 固件发送管理命令,例如创建 DPNI、查询对象属性、连接 DPNI 与 DPIO。MC 固件负责校验资源配额、分配硬件队列、返回对象 ID。因此“先有容器、再有对象”是基本顺序:
- 确认根容器
dprc.1可用,并查看其资源余量; - 如需隔离,创建自定义 DPRC 容器,并把对象创建到该容器;
- 在容器内创建 DPBP、DPIO、DPNI 等对象;
- 把 DPNI 绑定到 DPMAC,把 DPIO 与 CPU 线程关联;
- 通过
ls-list核对对象是否创建成功、ID 是否正确。
资源容器配置的关键参数包括容器 ID、允许的对象类型、CPU 亲和掩码以及中断路由。若容器配额不足,创建 DPNI 时会返回资源不足错误,此时需要调整容器配置或释放无用对象。
三、命令行工具 ls-addni 与 ls-list
NXP 提供的 restool 工具集(含 ls-addni、ls-list、ls-addmux 等)是操作 DPAA2 对象最直接的手段。常用命令示例:
# 查看当前所有 DPAA2 对象
ls-list
# 查看指定容器内的对象
ls-list --container=dprc.1
# 在根容器中创建一个 DPNI,绑定到 dpmac.5
ls-addni dpmac.5
# 创建带指定队列数的 DPNI
ls-addni --num-queues=8 dpmac.5
# 查看某个 DPNI 的详细属性
ls-list --dpni=dpni.0
执行 ls-addni dpmac.5 后,MC 固件会返回新 DPNI 的对象 ID,例如 dpni.0,同时内核侧会出现对应的网络接口(如 eth0)。此时可用 ip link 查看接口状态,用 ls-list 确认 DPNI 与 DPMAC 的绑定关系。若创建失败,常见原因是容器资源不足、DPMAC 已被占用或 MC 固件版本不匹配。
ls-list 记录对象 ID,后续绑定队列、配置分流规则都要依赖这些 ID。
ls-del 类命令,否则对象会一直占用容器资源。
掌握 DPRC、DPNI、DPBP、DPIO、DPCON 的职责与依赖,理解 MC 固件作为资源仲裁者的角色,并能熟练使用 ls-addni、ls-list 完成对象的创建与核对,就具备了在 Layerscape 平台上搭建 DPAA2 数据面资源框架的基础能力。后续的队列绑定、流量分发与零拷贝转发,都建立在这套对象模型之上。