MPAM 内存带宽控制特性
原始问题:你是 ARM64 体系结构专家,现在 MPAM 这个特性,控制内存带宽的,当前是按照百分比限制内存带宽的,有用户提出来,想让新品支持可以设置一个具体值来限制内存带宽,比如xxGB/s , 仔细分析相关手册和内核实现接口,这个可行吗 · 2026-07-24
MPAM 内存带宽控制:绝对带宽(xx GB/s)可行性分析
一、结论概要
| 方案 | 可行性 | 说明 |
|---|---|---|
| 硬件级绝对带宽限制(xx GB/s) | ❌ 不可行 | ARM MPAM 架构寄存器定义即为比例/百分比控制,无绝对带宽字段 |
| 软件级绝对带宽限制 | ✅ 已实现 | 内核 mba_MBps 软件反馈环,通过 MBM 监控 + 周期性调整百分比 HW 寄存器来实现 |
| 硬件厂商专用扩展 | ⚠️ 理论上可能 | 非标准,需要厂商自定义 MSC 实现 |
二、硬件层分析:ARM MPAM 规范决定本质
2.1 所有带宽控制寄存器都是比例控制
MPAM 定义了三种带宽控制机制,均在 MPAMF_MBW_IDR 寄存器中探测:
MPAMCFG_MBW_MAX — 带宽上限(比例)
MPAMCFG_MBW_MIN — 带宽下限(比例)
MPAMCFG_MBW_PROP — 比例步长(STRIDEM1,比例共享)
寄存器格式(ARM IHI0099B.a §9.3):
MBW_MAX 寄存器(0x0208):
Bit [31] HARDLIM — 硬限制 vs 软节流
Bit [15:0] MAX — 固定点小数 0.xxx(比例值)
值域是 fixed-point fraction(0.xxx 固定点小数),编码的是”占总内存总线带宽的比例”,而非绝对带宽值。
2.2 bwa_wd 决定精度
bwa_wd = 从 MPAMF_MBW_IDR 读取的位数(最大 16)
有效 bit = 16 位中最高 bwa_wd 位,在 bit[15] 端左对齐
bwa_wd |
精度 | 步数 | 粒度 |
|---|---|---|---|
| 1 | bit[15] 仅 | 2 步 | 50% |
| 2 | bits[15:14] | 4 步 | 25% |
| 3 | bits[15:13] | 8 步 | 12.5% |
| 6 | bits[15:10] | 64 步 | ~1.56% |
| 7+ | bits[15:9] | 128+ 步 | ≤1% |
2.3 内核转换函数证实行为
percent_to_mbw_max()(百分比 → HW 寄存器值):
static u16 percent_to_mbw_max(u8 pc, struct mpam_props *cprops)
{
u32 val = pc;
val <<= cprops->bwa_wd; // 按步数放大
val = DIV_ROUND_CLOSEST(val, MAX_MBA_BW); // 找到最近的步
val = max(val, 1) - 1; // clamp 最小值
val <<= 16 - cprops->bwa_wd; // 左对齐到 MSB
return val;
}
mbw_max_to_percent()(HW 寄存器值 → 百分比):
```c static u32 mbw_max_to_percent(u16 mbw_max, struct mpam_props *cprops) { u32 val = mbw_max; val »= 16 - cprops->bwa_wd; // 右对齐有效 bit val +=
参考来源
⚠️ 免责声明
本站内容均由 AI 基于公开知识辅助生成,仅供学习参考,请勿直接引用作为依据。作者不对信息的准确性、完整性及适用性作保证,亦不对因使用本站内容产生的任何损失承担责任。