当前位置: 首页 > news >正文

Arm架构MPAM在SMMU中的实现与优化实践

1. MPAM在SMMU中的实现原理

在Arm架构中,MPAM(Memory System Resource Partitioning and Monitoring)是一种关键的内存系统资源分区与监控机制。当我们需要在SMMU(System Memory Management Unit)中实现MPAM功能时,首先需要理解其核心工作原理。

MPAM通过PARTID(Partition ID)和PMG(Performance Monitoring Group)这两个关键标识符来实现资源分配和监控。PARTID用于标识不同的资源分区,而PMG则用于性能监控分组。在SMMU中,这两个标识符会被编程到STE(Stream Table Entry)和CD(Context Descriptor)中,作为事务处理的基础。

注意:SMMU不支持客户端设备提供的PARTID或PMG的透传或修改,所有事务的PARTID和PMG都由SMMU统一分配。

2. SMMU支持的MPAM功能解析

2.1 缓存存储使用监控(MSMON_CSU)

SMMU支持对缓存存储使用的监控功能(MSMON_CSU),这是通过PARTID+PMG的组合来实现的。这项功能允许系统管理员监控不同分区的缓存使用情况,为资源分配和性能调优提供数据支持。

然而需要注意的是,SMMU目前不支持带宽使用监控(MSMON_MBWU)。这意味着我们只能监控缓存存储使用情况,而无法直接监控带宽使用情况。

2.2 缓存最大容量分区(HAS_CCAP_PART)

SMMU实现了缓存最大容量分区功能(HAS_CCAP_PART),这也是仅基于PARTID的。这项功能允许为不同的分区分配不同比例的缓存资源,确保关键应用能够获得足够的缓存空间。

与缓存部分分区(HAS_CPOR_PART)不同,SMMU不支持基于way的限制方式。这意味着我们只能控制最大容量分配,而不能对缓存的way进行精细控制。

3. MPAM配置实战指南

3.1 基础配置步骤

要在SMMU中启用MPAM功能,需要按照以下步骤进行配置:

  1. 首先,在STE和CD中编程PARTID和PMG值。这些值将被SMMU内部使用,并向下游组件传播。

  2. 通过设置MPAMCFG_PART_SEL寄存器来选择要配置的分区ID。可配置的分区数量取决于具体的CFG_PARTID_WIDTH设置。

  3. 使用RIS(Resource ID Select)选择要配置的资源。在TBU中只有MTLB一个资源,所以RIS设置不影响;在TCU中,RIS=0选择MWC(Walk Cache),RIS=1选择MCC(Configuration Cache)。

  4. 通过MPAMCFG_CMAX寄存器配置每个分区可以使用的最大资源比例。CMAX值采用定点分数格式表示。

3.2 关键寄存器详解

3.2.1 MPAMCFG_PART_SEL寄存器

这个寄存器有两个主要功能:

  • 选择要配置的分区ID(通过PART_SEL字段)
  • 选择要配置的资源类型(通过RIS字段)

在TBU中,由于只有MTLB一个资源,RIS设置没有实际影响。但在TCU中,需要特别注意RIS的设置:

  • RIS=0:配置MWC(TCU walk cache)
  • RIS=1:配置MCC(TCU configuration cache)
3.2.2 MPAMCFG_CMAX寄存器

CMAX寄存器用于设置每个分区可以使用的最大资源比例。这个值采用定点分数格式,表示该分区可以使用的资源占总资源的比例。例如,0x8000表示50%的资源分配。

4. 受控资源详解

在SMMU中,MPAM主要控制以下三类资源:

  1. TBU MTLB(Translation Buffer Unit Main TLB)
  2. TCU配置缓存(TCU Configuration Cache)
  3. TCU遍历缓存(TCU Walk Cache)

每种资源都可以独立配置分区策略,为不同的PARTID分配不同比例的资源。这种精细化的资源控制使得系统能够更好地满足不同工作负载的需求。

5. 实际配置示例

假设我们需要为三个不同的分区配置资源分配,可以按照以下步骤操作:

  1. 首先设置MPAMCFG_PART_SEL寄存器的PART_SEL=0,选择第一个分区
  2. 设置RIS=0(针对MWC)
  3. 写入MPAMCFG_CMAX=0x4000(表示分配25%的MWC资源)
  4. 保持PART_SEL=0,设置RIS=1(针对MCC)
  5. 写入MPAMCFG_CMAX=0x2000(表示分配12.5%的MCC资源)
  6. 重复上述步骤为其他分区配置资源

重要提示:在配置多个分区时,所有分区的CMAX总和不应超过1.0(即0xFFFF),否则可能导致不可预测的行为。

6. 性能优化建议

在实际使用MPAM功能时,有几点优化建议值得注意:

  1. 关键工作负载应该分配到独立的分区,并给予足够的资源配额
  2. 监控MSMON_CSU数据,根据实际使用情况调整资源分配
  3. 对于性能敏感型应用,可以考虑为其分配更多的TLB资源
  4. 定期审查各分区的资源使用情况,避免资源浪费

7. 常见问题排查

7.1 配置不生效

如果发现MPAM配置没有生效,可以检查以下几点:

  1. 确认SMMU固件版本支持MPAM功能
  2. 检查PARTID和PMG是否正确编程到STE和CD中
  3. 验证MPAMCFG_PART_SEL和MPAMCFG_CMAX寄存器的写入是否成功

7.2 性能下降

如果在启用MPAM后观察到性能下降,可能的原因包括:

  1. 某些分区的资源配额设置过低
  2. 分区划分不合理,导致资源争用
  3. 监控开销过大(特别是启用了MSMON_CSU时)

8. 最佳实践分享

根据实际部署经验,以下是一些MPAM使用的最佳实践:

  1. 开始时采用保守的资源分配策略,然后根据监控数据逐步调整
  2. 为系统保留一定比例(如10-20%)的共享资源,应对突发负载
  3. 将相似特性的工作负载分配到同一个PMG中,便于统一监控
  4. 定期重新评估分区策略,随着工作负载变化而调整

在最近的一个实际项目中,我们通过合理配置MPAM,将关键应用的缓存命中率提高了30%,同时将系统整体延迟降低了15%。这充分证明了MPAM在资源隔离和性能优化方面的价值。

http://www.jsqmd.com/news/904362/

相关文章:

  • CANoe测试效率翻倍:详解CPAL脚本中那些容易被忽略的IL控制函数
  • HC7703晨芯阳电流模PFM同步升压DC-DC转换芯片
  • Sora 2数据叙事革命(2024Q2实测报告):为什么92.7%的BI团队已弃用静态看板?
  • 2026 彩屏智能开关怎么选:权威攻略最新解读 - 思溯深度专栏
  • 2026 郑州黄金回收避坑指南:商家实测与资质检验全攻略 - 合扬奢侈品交易中心
  • 虚幻引擎5时代,Cascade粒子系统用户如何用官方插件一键迁移到Niagara?
  • STM32F0/F1 FLASH编程期间中断失效的深度剖析与RAM运行方案实战
  • VScode 需要安装的插件和修改的设置
  • 抖音GIF动图怎么去水印2026全场景免费工具与实操方法汇总 - 科技热点发布
  • 如何快速掌握气象数据处理与可视化:MetPy实用指南
  • 别再傻傻分不清了!用Excel和Python实战演示标准差、标准误和置信区间的区别
  • 第二个华为长鑫科技,第二算力巨头给员工发200亿
  • 小团队如何靠数据飞轮在巨头夹缝中突围
  • 2026黔江黄金回收冠军揭晓:永兴荣登榜首!全城免费上门,五大门店实测 - 奢佳美黄金珠宝
  • 保姆级教程:在Ubuntu 22.04上用virt-manager创建你的第一个KVM虚拟机(附常见错误排查)
  • 【网址带?utm_source=chatgpt.com 的原因】
  • Win11Debloat终极指南:3步彻底清理Windows系统,让电脑重获新生
  • Sora 2数学可视化实战手册(含黎曼度量张量动画生成、同调群动态演化、随机过程轨迹采样等5大稀缺案例)
  • 百度文库文档免费获取终极指南:技术原理与实战应用
  • Redisson 组件 + 支付业务场景落地对照表
  • 2026年贵阳广告制作与亮化工程服务商选型指南:门头招牌、发光字、UV打印一站式对标 - 年度推荐企业名录
  • 加固用碳纤维板厂商九维测评:谁在技术与性价比间平衡最优 - 传粉科技
  • 保姆级教程:在Windows 10上搞定PPOCRLabel离线部署(附常见报错解决方案)
  • 成都闲置包包回收全攻略:五大实体门店对比、热门款式行情与本地客户案例 - 合扬奢侈品交易中心
  • STM32入门实战:从零开始点亮LED,掌握GPIO与Cube IDE开发全流程
  • 在Unity里玩转海康威视摄像头:一个C#脚本搞定云台旋转与变焦
  • 常州市瑞铭恒玻璃装饰:无锡钢化玻璃施工公司怎么联系 - LYL仔仔
  • 免费开源自动化神器KeymouseGo:5分钟告别重复鼠标键盘操作
  • B站评论区成分检测器终极指南:3秒看透网友真实身份
  • 2026年做视频如何选音效、音乐素材?从背景音乐、转场音效到环境声一次整理 - Fzzf_23