找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

742

积分

0

好友

106

主题
发表于 9 小时前 | 查看: 1| 回复: 0

在高通于LPC 2025(Linux Plumbers Conference)的演讲中,其工程师Yiwei Huang分享了一个关于利用MPAM技术来协调CPU与系统级缓存(SLC)的有趣主题。

高通在LPC 2025上的演讲封面:CPU与系统级缓存的MPAM协调

本次演讲的幻灯片可在此下载:
https://lpc.events/event/19/contributions/2121/attachments/1764/3909/Cooperation%20between%20CPU%20and%20system%20level%20cache%20by%20using%20MPAM.pdf

演讲首先阐述了使用MPAM控制SLC的目的:主要在于通过缓存分区来强制限制某些任务的最大缓存用量,并为内存带宽提供服务质量(QoS)保障。在用户接口层面,MPAM沿用了现有的Resctrl文件系统。

背景介绍:MPAM与Resctrl文件系统

然而,在实际硬件中,并非所有的Memory System Component(MSC)都能很好地支持MPAM标准。CPU缓存(如L2/L3)堪称MPAM的“模范生”,但到了由NOC(片上网络)访问的SLC或DDRSS(DDR子系统)层面,支持就变得很弱,甚至是“假MPAM”。例如,某些硬件只能“模拟”有限的缓存分区,分区数量上限极低(可能只有2个),这严重制约了系统级别的分区灵活性。

存在的问题:部分MSC对MPAM支持不完整

为了解决这个问题,高通团队提出了一种解决方案。

解决方案:引入翻译层

该方案的核心是在支持MPAM的模块(如CPU的L2/L3缓存)与不支持或仅部分支持MPAM的模块(如SLC或DDR)之间,插入一个“翻译层”(Translation Layer)。这个翻译层的功能是将标准的MPAM Partition ID(PartID)转换成下游MSC能够理解的特定ID,并通过一个可配置的映射表(mapping table)来管理这种转换关系。

接下来,演讲者列举了两个实际的应用场景。第一个场景是让“噪音邻居”线程完全绕过SLC。

用例一:噪音线程绕过SLC

在这个场景中,所谓的VIP线程(如游戏的渲染线程、UI线程、音频线程或前台应用的核心线程)期望获得高SLC命中率、低延迟和稳定的内存带宽。而“噪音”线程(如后台下载、OTA更新、日志压缩或AI批量任务)通常具有大量流式内存访问、缓存局部性差、严重占用DDR带宽的特点。通过MPAM映射,可以将噪音线程的访问限制在DDR,从而为VIP线程腾出纯净的SLC空间。

另一个复杂场景则适用于折叠屏设备或多任务并行的高性能游戏场景。在这个例子中,SLC被划分为两个区域。可以看到,标准的PartID 1和2被映射到了SLC的Partition 1,而PartID 3和4则被映射到了SLC的Partition 2。

用例二:多分区映射与复杂场景

最后,Yiwei Huang展示了一个应用MPAM技术后的性能测试结果。在测试中,他们将bw_mem任务作为VIP任务,同时让干扰任务绕过SLC。结果表明,通过这种隔离,作为基准的bw_mem任务性能提升了约8%。

单元测试示例:性能提升对比

这些探讨为我们理解如何深度优化Android系统,特别是其Linux内核层的资源调度提供了宝贵思路。如果你对系统级性能调优或底层技术有更多兴趣,欢迎到云栈社区网络/系统板块与其他开发者交流,或者在计算机基础板块深入探索缓存、内存体系结构等核心原理。




上一篇:如何在飞书中搭建自动化Backlink资源库与提交追踪系统
下一篇:深入解析Git工作原理:快照机制与三种重置模式详解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-27 17:06 , Processed in 0.374902 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表