ARM Cortex-M7 MPU共享属性对性能的影响及与Cortex-A53的差异
问题1:性能差异的背后原因
你测试中配置的ARM_MPU_RASR寄存器的SH位域就是共享属性的控制位,性能差异完全来自该属性对Cortex-M7存储系统优化策略的影响:
- 可共享属性的核心作用是告知硬件:该存储区域会被多个总线主控(如DMA、外设、其他核心)并发访问,需要保证所有主控的访问一致性。Cortex-M7没有硬件缓存一致性互连,所以一旦区域被标记为可共享,硬件会直接禁用该区域的L1缓存投机、预取、写入合并等优化,甚至强制所有读写操作绕开缓存直接走AXI/AHB总线,每次访问都要等待总线握手响应,无法利用缓存的高带宽优势。
- 你最初把SRAM也配置为可共享属性时,哪怕该区域同时开了缓存配置,SRAM到SRAM的拷贝操作也完全无法利用缓存,所有读写都走低速总线,带宽只能跑到70MB/s的水平。
- 外设区域本身不需要缓存,标记为可共享仅为了保证CPU和外设的访问一致性,不会带来额外性能损失。当你关闭SRAM、DRAM、QSPI等内存区域的共享属性后,这些区域的缓存、预取、突发传输等优化全部生效,拷贝操作大部分可以在L1缓存内完成,性能自然提升到600MB/s的正常水平。
问题2:Cortex-M7的MPU共享属性与Cortex-A53的MMU共享属性的区别
二者的底层逻辑、作用场景、实现效果都有明显差异:
- 绑定的管理单元不同:Cortex-M7的共享属性是MPU(内存保护单元)的物理区域配置项,仅作用于连续的物理地址块,没有虚拟地址转换逻辑;Cortex-A53的共享属性是MMU(内存管理单元)的页表项配置项,绑定的是虚拟地址映射后的物理页,支持虚拟地址到物理地址转换的前提下按页配置。
- 一致性实现逻辑不同:Cortex-M7没有硬件缓存一致性互连,共享属性仅用来禁用当前核心的缓存优化,多主控的一致性需要软件手动刷缓存来维护;Cortex-A53默认配套CCI/CMN缓存一致性互连,共享属性分为Inner Shareable、Outer Shareable两个层级,标记为Inner Shareable的区域,硬件会自动保证同集群内所有A53核心的L1/L2缓存一致性,不需要软件手动干预。
- 性能影响不同:Cortex-M7的常规内存区域配置共享属性会直接禁用缓存优化,带来非常明显的性能损失,仅适合外设、DMA共享缓冲区这类场景使用;Cortex-A53的共享属性是多核心系统下进程共享内存、内核态跨核心通信的标准配置,只要在一致性域内几乎不会有额外性能损失。
- 配置粒度不同:Cortex-M7的MPU区域粒度要求为2的幂次方,最小支持32字节,多区域重叠时按优先级生效;Cortex-A53的MMU支持4KB/2MB/1GB等标准页大小,共享属性可以针对每个独立的物理页单独配置,灵活性更高。
内容的提问来源于stack exchange,提问作者Nee
相关产品推荐
相关产品推荐

