MPAM BE/ FE 的区别及功能
在 MPAM DDR 语境里,FE 和 BE 通常表示:
| 缩写 | 全称 | 中文含义 | 位置/作用 |
|---|---|---|---|
| FE | Front-End | 前端 | 靠近 CPU/GPU/NPU/DMA 等发起访问的一侧,用于识别、分类、标记请求 |
| BE | Back-End | 后端 | 靠近 DDR Controller/Memory Controller 的一侧,用于真正执行带宽限制、优先级控制、统计监控等 |
1. MPAM DDR 简要背景
MPAM 是 ARM 的 Memory System Resource Partitioning and Monitoring 机制。
它主要用于:
- 对不同软件实体进行 资源隔离
- 对不同 VM / Process / Thread / Master 进行 带宽限制
- 对 DDR、Cache、Interconnect 等资源做 监控
- 支持 QoS、性能隔离、实时性保障
在 DDR 场景中,MPAM 主要关心:
- 谁在访问 DDR
- 访问属于哪个 Partition
- 该 Partition 能使用多少 DDR 带宽
- 不同请求之间如何仲裁
- 每个 Partition 消耗了多少带宽
2. FE 是什么?
FE = Front-End,前端。
它通常位于 请求发起端附近,比如:
- CPU cluster
- GPU
- NPU
- Display
- Camera
- DMA
- PCIe
- Modem
- 其他 bus master
FE 的核心作用是:
- 接收来自 master 的 memory request
- 根据请求携带的信息识别来源
- 给请求打上 MPAM 相关的控制信息
- 将请求映射到某个
PARTID/PMG - 把 MPAM tag 随请求传递到 interconnect 或 DDR path
3. FE 主要负责什么?
FE 主要负责 分类和标记。
常见功能包括:
- 根据 CPU exception level、VMID、ASID、StreamID、MasterID 等区分请求来源
- 为请求分配
PARTID - 为请求分配
PMG - 将不同业务流量映射到不同 MPAM partition
- 将 MPAM 信息插入到 transaction 中
- 把请求转发给后端 DDR 资源控制单元
可以简单理解为:
FE 不一定直接限制 DDR 带宽,它主要负责判断“这个请求是谁的”。
4. BE 是什么?
BE = Back-End,后端。
它通常位于 共享资源附近,比如:
- DDR Controller
- Memory Controller
- NoC 到 DDR 的出口
- LLC / SLC / System Cache
- Interconnect 资源节点
在 MPAM DDR 场景中,BE 通常靠近 DDR 侧。
BE 的核心作用是:
- 根据 FE 传来的
PARTID/PMG - 对 DDR 访问进行仲裁
- 执行带宽限制
- 执行优先级控制
- 执行资源分配
- 进行带宽统计和监控
5. BE 主要负责什么?
BE 主要负责 控制和统计。
常见功能包括:
- 根据
PARTID控制 DDR 带宽 - 对不同 partition 设置最大带宽限制
- 对不同 partition 设置最小保障带宽
- 统计每个 partition 的 DDR 访问量
- 统计 read/write bandwidth
- 对超限请求进行 throttle
- 参与 QoS arbitration
- 对 memory request 做调度控制
可以简单理解为:
BE 负责真正执行“这个请求能用多少 DDR 资源”。
6. FE 和 BE 的关系
整体流程可以理解为:
CPU/GPU/NPU/DMA 等 Master
|
v
MPAM FE
识别请求来源,分配 PARTID/PMG
|
v
NoC / Interconnect
携带 MPAM 信息传递
|
v
MPAM BE
根据 PARTID/PMG 执行限速、仲裁、统计
|
v
DDR Controller
|
v
DDR Memory
7. PARTID 和 PMG 是什么?
MPAM 中常见两个重要字段:
| 字段 | 含义 | 作用 |
|---|---|---|
PARTID |
Partition ID | 表示请求属于哪个资源分区 |
PMG |
Performance Monitoring Group | 表示性能监控分组 |
PARTID
PARTID 用于资源控制。
例如:
| 业务 | PARTID |
|---|---|
| Android foreground app | PARTID 1 |
| Background task | PARTID 2 |
| Camera | PARTID 3 |
| Display | PARTID 4 |
| NPU | PARTID 5 |
BE 可以基于 PARTID 对 DDR 做带宽控制。
例如:
PARTID 1: max 8 GB/s
PARTID 2: max 2 GB/s
PARTID 3: min 4 GB/s
PARTID 4: high priority
PMG
PMG 主要用于性能监控分类。
例如:
PMG 0: CPU traffic
PMG 1: GPU traffic
PMG 2: Camera traffic
PMG 3: Display traffic
BE 可以按 PMG 统计 DDR bandwidth。
8. FE 和 BE 的典型区别
| 对比项 | FE | BE |
|---|---|---|
| 全称 | Front-End | Back-End |
| 中文 | 前端 | 后端 |
| 靠近位置 | 请求发起端 | DDR/共享资源端 |
| 核心作用 | 分类、标记 | 控制、仲裁、统计 |
| 处理对象 | Master request | Shared resource access |
| 主要字段 | PARTID、PMG 生成/传递 | PARTID、PMG 消费/执行 |
| 是否直接限 DDR 带宽 | 通常不是 | 通常是 |
| 是否做监控统计 | 可能辅助 | 主要执行点 |
| 典型位置 | CPU/GPU/NPU/DMA path | DDR Controller/NoC DDR出口 |
9. 一个实际例子
假设系统中有 CPU、GPU、Camera 同时访问 DDR:
CPU request -> FE 标记 PARTID=1
GPU request -> FE 标记 PARTID=2
Camera request -> FE 标记 PARTID=3
Camera request -> FE 标记 PARTID=3
显示更多行
这些请求经过 NoC 到 DDR BE。
BE 上配置:
PARTID=1 CPU max bandwidth = 6 GB/s
PARTID=2 GPU max bandwidth = 10 GB/s
PARTID=3 Camera min bandwidth = 4 GB/s
然后 BE 根据配置控制 DDR 访问:
- CPU 超过 6 GB/s 时被 throttle
- GPU 最多能用 10 GB/s
- Camera 至少保障 4 GB/s,避免丢帧
- BE 同时统计各 PARTID 的 DDR 使用量
10. 简单理解
可以这样记:
FE:谁发起的?
BE:给它多少资源?
或者:
FE = 分类打标签
BE = 根据标签做控制
更具体一点:
FE 负责把 memory request 标记成某个 MPAM PARTID/PMG
BE 负责根据 PARTID/PMG 对 DDR bandwidth 做限制、保障、仲裁和统计
11. 在 DDR bandwidth debug 中怎么看
如果你在 debug DDR bandwidth、QoS、MPAM 配置,一般需要关注:
FE 侧
确认请求是否被正确分类:
- CPU/GPU/Camera/Display 是否映射到正确 PARTID
- StreamID/MasterID 是否匹配
- PARTID/PMG 是否正确传递
- OS/Hypervisor 是否正确配置 MPAM context
BE 侧
确认 DDR 侧策略是否生效:
- 对应 PARTID 是否配置 bandwidth limit
- 对应 PARTID 是否配置 priority
- monitor counter 是否在增长
- throttle 是否被触发
- DDR controller/NoC 是否支持对应 MPAM feature
12. 总结
MPAM DDR 中:
FE = Front-End
作用:识别请求来源,分配/携带 MPAM PARTID、PMG
BE = Back-End
作用:在 DDR/Memory Controller 侧根据 PARTID、PMG 执行带宽控制、QoS 仲裁和性能统计
一句话:
FE 负责给 DDR 请求打标签,BE 负责根据标签管 DDR 资源。


浙公网安备 33010602011771号