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 基于公开知识辅助生成,仅供学习参考,请勿直接引用作为依据。作者不对信息的准确性、完整性及适用性作保证,亦不对因使用本站内容产生的任何损失承担责任。