阅读ARM Memory(L1/L2/MMU)笔记

发布者:创新思绪最新更新时间:2019-12-25 来源: eefocus关键字:ARM  Memory  MMU 手机看文章 扫描二维码
随时随地手机看文章

《ARM Architecture Reference Manual ARMv8-A》里面有Memory层级框架图,从中可以看出L1、L2、DRAM、Disk、MMU之间的关系,以及他们在整个存储系统中扮演的角色。

涉及到的相关文档有:

《ARM Architecture Reference Manual ARMv8-A》:E2 The AArch32 Application Level Memory Model和G3 The AArch32 System Level Memory Model两个章节,从总体架构上介绍了ARMv8-A Memory系统。

《Cortex-A53 TRM》:6 Level 1 Memory System、5 Memory Management Unit、7 Level 2 Memory System三个章节介绍了MMU/L1/L2三个模块在A53上的实现。

具体到MMU:

《MMU-500 TRM》:MMU-500技术参考手册。

《ARM SMMUv2》:System MMU 架构规格 version 2.0。

具体到L2:

《L2C-310 TRM》:L2控制器技术参考手册。

在Linux内核中查看L1/L2/L3缓存:


lscpu


...

L1d cache:             32K

L1i cache:             32K

L2 cache:              256K

L3 cache:              6144K

...


或者读取节点:


cat /sys/devices/system/cpu/cpu0/cache/indexx/size

cat /sys/devices/system/cpu/cpu0/cache/indexx/level


ARM Architecture Reference Manual ARMv8 

 

ARM Corelink MMU-500 System Memory Management Unit Revision r2p4

1 Introduction

VA:Virtual Address

PA:Physical Address

IPA:Intermediate Physical Address

MMU-500是系统级的存储管理单元,它基于自身寄存器和转换表中的地址映射和存储器属性,将虚拟地址转换成物理地址。

将这个转换过程分为两个阶段:

  • Stage 1 - 将输入的VA转换成PA或者IPA输出。

  • Stage 2 - 将IPA转换成PA。

  • 或者结合Stage 1和Stage 2将输入的VA->IPA->PA。

MMU-500可以将 转换表查找结果缓存到TLB中。

MMU-500包含一下主要部件:

TBU(Translation Buffer Unit) - 包含缓存页表的TLB,MMU-500给每个Master配置了一个TBU,专属于Master。

TCU(Translation Control Unit) - 控制和管理地址转换,一个MMU-500仅包含一个TCU。

Interconnect - 多TBU到TCU之间的连接。

Master可能包括GPU、Video engines、DMA Controller、LCD Controller、Network Controller等。

 

2 Functional description

2.1 About the functions

 从Figure 1-1可知,一个MMU有多个TBU和一个TCU。TBU包含TLB,主要用于缓存经常使用的地址范围;TCU主要查找页表。

2.2 Interfaces 

L2 Cache

摘录A53规格书中关于L2 Cache一段属性描述:


Optional tightly-coupled L2 cache that includes:

— Configurable L2 cache size of 128KB, 256KB, 512KB, 1MB and 2MB.---多种大小可配置

— Fixed line length of 64 bytes.------------------------------------每条Cache Line大小是64Bytes

— Physically indexed and tagged cache.

— 16-way set-associative cache structure.

— Optional ACP interface if an L2 cache is configured.

— Optional ECC protection


Cache Line可以简单的理解为CPU Cache中的最小缓存单位。

大小为64Bytes大小的Cache Line,128KB的L2 Cache,一共有128KB/64B=2048个Cache Line。

 

那么Cache存放规则是什么呢?Fully Associative、Direct Mapped、N-Way Set Associative。

Fully Associative是全关联的意思:如果在一个Cache集内,任何一个地址的数据都可以缓存在任何一个Cache Line里,那么我们称这个Cache是Fully Associative。

给一个内存地址,要知道他是否存在于Cache中,就需要遍历所有Cache Line并比较缓存内容的地址。

 

Direct Mapped给定一个内存地址,就唯一确定了一条Cache Line。以4GB内存空间,128KB L2 Cache,64B Cache Line,那么4GB/(128KB/64B)=2MB共用一条Cache Line,使用率太低。

 

N-Way Set Associative是吧一个缓存按照N个Cache Line作为一组(Set),缓存按组划为等分。

同样以上面32位系统中L2 Cache规格为例,低6位是Cache Line中的偏移量;128KB/16/64B=128,中间7位表示Cache组号(Set Index);剩余高19位就是内存地址的唯一ID。

给定一个内存地址可以唯一对应一个Set,对于Set中只需遍历16个元素就可以确定对象是否在缓存中。

128KB的Cache,分成128个Set;一个Set包含16根Cache Line;每根Cache Line大小64Byte。

即在连续内存地址中每Cache Line Offset+Set Index长度8KB就会出现一个处于同一Cache Set的缓存对象,争抢一个仅有16个空位的缓存池。

每Cache Line Offset+Set Index+16 Way=128KB才会导致一个Set内的Conflict。

 

《关于CPU Cache -- 程序猿需要知道的那些事》

《2.2 Cache的组成结构》

《CACHE的一些基本概念》

《7个示例科普CPU Cache line》

《cpu性能探究-Linux Cache机制》

《深入理解Cache》

 L2C-310在Linux

archarmmmcache-l2x0.c


  #

  # Processor Type

  #

  CONFIG_CPU_V7=y

  CONFIG_CPU_32v6K=y

  CONFIG_CPU_32v7=y

  CONFIG_CPU_ABRT_EV7=y

  CONFIG_CPU_PABRT_V7=y

  CONFIG_CPU_CACHE_V7=y

  CONFIG_CPU_CACHE_VIPT=y

  CONFIG_CPU_COPY_V6=y

  CONFIG_CPU_TLB_V7=y

  CONFIG_CPU_HAS_ASID=y

  CONFIG_CPU_CP15=y

  CONFIG_CPU_CP15_MMU=y


 


#

# Processor Features

#

CONFIG_OUTER_CACHE=y

CONFIG_OUTER_CACHE_SYNC=y

CONFIG_MIGHT_HAVE_CACHE_L2X0=y

CONFIG_CACHE_L2X0=y

CONFIG_CACHE_PL310=y

CONFIG_ARM_L1_CACHE_SHIFT_6=y

CONFIG_ARM_L1_CACHE_SHIFT=6

CONFIG_ARM_DMA_MEM_BUFFERABLE=y

CONFIG_ARM_NR_BANKS=8

CONFIG_CPU_HAS_PMU=y

CONFIG_MULTI_IRQ_HANDLER=y

# CONFIG_ARM_ERRATA_430973 is not set

# CONFIG_ARM_ERRATA_458693 is not set

# CONFIG_ARM_ERRATA_460075 is not set

CONFIG_PL310_ERRATA_588369=y

CONFIG_ARM_ERRATA_720789=y

CONFIG_PL310_ERRATA_727915=y

CONFIG_ARM_ERRATA_743622=y

CONFIG_ARM_ERRATA_751472=y

CONFIG_PL310_ERRATA_753970=y

CONFIG_ARM_ERRATA_754322=y

CONFIG_PL310_ERRATA_769419=y

# CONFIG_ARM_ERRATA_775420 is not set

# CONFIG_FIQ_DEBUGGER is not set


在setup_processor中将cache相关操作函数赋给cpu_cache,同时还包括cpu_tld和cpu_user。


start_kernel-->

    setup_arch-->

        setup_processor-->

static void __init setup_processor(void)

{

...

    list = lookup_processor_type(read_cpuid_id());

...

    processor = *list->proc;

    cpu_tlb = *list->tlb;

    cpu_user = *list->user;

    cpu_cache = *list->cache;

...

}

 

 内核对这些函数的使用又进行了封装,同时对应底层汇编(以v7为例)。在arch/arm/mm/proc-v7.S中实现了汇编函数。


extern struct cpu_cache_fns cpu_cache;


#define __cpuc_flush_icache_all        cpu_cache.flush_icache_all

#define __cpuc_flush_kern_all        cpu_cache.flush_kern_all

#define __cpuc_flush_user_all        cpu_cache.flush_user_all

#define __cpuc_flush_user_range        cpu_cache.flush_user_range

#define __cpuc_coherent_kern_range    cpu_cache.coherent_kern_range

#define __cpuc_coherent_user_range    cpu_cache.coherent_user_range

#define __cpuc_flush_dcache_area    cpu_cache.flush_kern_dcache_area


/*

 * These are private to the dma-mapping API.  Do not use directly.

 * Their sole purpose is to ensure that data held in the cache

 * is visible to DMA, or data written by DMA to system memory is

 * visible to the CPU.

 */

#define dmac_map_area            cpu_cache.dma_map_area

#define dmac_unmap_area            cpu_cache.dma_unmap_area

#define dmac_flush_range        cpu_cache.dma_flush_range

关于TCM

TCM(Tighyly Coupled Memory,紧耦合内存)是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能。

相比于cache的有点是,程序代码可以精确地控制什么函数或什么代码放在哪儿。当然TCM永远不会被踢出主存储器,他会有一个用户预设性能,而不是cache那样是统计特性的提高。

TCM对于以下几种情况的代码是非常有用、也是需要的:可预见的实时处理(中断处理)、时间可预见(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代码(编解码功能)。

随着cache大小的增加以及总线性能的规模,TCM将会变得越来越不重要,但是他提供了一个让你权衡的机会。

 

如何使用TCM?

再支持TCM的处理上,包含头文件#include

使用__tcmdata、__tcmconst、__tcmfunc、__tcmlocalfunc修饰符,将变量、函数放到特定的tcm段中。

还可以使用tcm_alloc/tcm_free申请释放内存。

延伸阅读:

《对ARM紧致内存TCM的理解》- 关于TCM的介绍,以及和Cache相比的优劣。

《内核中tcm(arm)与sram代码》- 如何使用TCM。

关键字:ARM  Memory  MMU 引用地址:阅读ARM Memory(L1/L2/MMU)笔记

上一篇:S3c2410裸板程序入门---单按键(一)
下一篇:在ARM64位开发板上兼容ARM32位的可执行程序

推荐阅读最新更新时间:2024-11-04 23:41

基于嵌入式设备浏览器内存管理策略研究
摘要:为了解决嵌入式设备中内存频繁分配和释放所引起的内存碎片以及浏览器正常运行难问题,提出具有垃圾回收机制的可动态增长池式分配数据结构设计和具有Compaction机制的Vector分配方法;在嵌入式环境系统设计时,采用可回收动态增长池式分配策略,系统无需预潮内存大小,而且可以循环使用池内空间;Compaction机制的Vector分配方法可以移动“在用”对象和“废弃”对象调整内存占用,减少碎片。实验设计中应用上述策略,验证了该内存管理效率比系统级效率要高,嵌入式设备中打开网页文件越大,体现出来的效率更高。 关键词:嵌入式设备;浏览器;池式分配;位图;对象表 0 引言 在嵌入式系统中,由于设备性能限制系统总的可分配内存相对较小
[工业控制]
基于嵌入式设备浏览器<font color='red'>内存</font>管理策略研究
英蓓特积极推动ARM Cortex-M3高校普及计划
全球领先的嵌入式软硬件供应商深圳市英蓓特信息技术有限公司日前宣布, 时至英蓓特大学计划实施5周年之庆,为积极推动国内cortex-M3 技术的普及, 特举办” ARM Cortex-M3高校普及计划” 活动,积极促进中国嵌入式教育行业发展及嵌入式人才培养! Cortex-M3是ARM公司推出的最新的针对微控制器应用的内核,提供业界领先的高性能和低成本的解决方案,将成为MCU应用的热点和主流。英蓓特此次举办的” ARM Cortex-M3高校普及计划” 旨在全国各区范围内严格甄选20所较具实力的院校作为赠送对象,每所院校赠送10套Cortex-M3教学实验平台,无偿帮助受赠高校成立嵌入式联合实验室,同时也会提供专业的师
[单片机]
AMPERE引领Arm服务器市场
文章编译自NEXTPLATFORM,作者Timothy Prickett Morgan 最近几个月来Arm服务器处理器领域发生了一些变化。无论发生了什么,Ampere Computing都在其路线图上全速前进。 Marvell在Hot Chips会议上披露了96核,384线程384线程“Triton”ThunderX3芯片服务器芯片,该公司表示,ThunderX3将仅作为半定制部件提供,只能通过直接参与的方式进行销售,并且不会在向公众公开销售。也就意味着,Marvell已完全取消了ThunderX3芯片,而且设计团队已移交给了Microsoft,据传微软与Ampere Computing合作开发自己的服务器芯片。 Am
[网络通信]
IAR for ARM系列教程(三)_菜单(Ⅰ)
Ⅰ、写在前面 IAR软件有多个系列版本,比如MSP430、STM8等,但为了使软件在使用上“兼容”,IAR推出的多个系列软件在使用在很多地方都有相似之处,包括IAR菜单的内容。因此,本文内容也适用于IAR其他系列软件。 由于菜单内容较多,我将其分为“菜单(Ⅰ)”和“菜单(Ⅱ)”两篇文章。为了使文章内容精简,过于简单和不常用且过于复杂的只简述。 本文内容已经整理成PDF文件,提供给大家下载: http://pan.baidu.com/s/1eSeDSu2 Ⅱ、主菜单内容 主菜单在不同状态下会有一些差异,比如在编辑模式和调试模式下存在差异,不同仿真调试器也存在差异。 1.编辑/调试模式差异 在编辑模式下有8个主菜单
[单片机]
IAR for <font color='red'>ARM</font>系列教程(三)_菜单(Ⅰ)
ARM-LINUX-GCC设置环境变量
在/etc/profile里添加arm-linux-gcc的存放路径 具体是在命令行输入#sudo gedit /etc/profile回车 export PATH=$PATH:/你的arm-linux-gcc存放的路径 保存退出export PATH=/usr/local/arm/bin 注意 这里最好使用 export PATH=$PATH:/usr/local/arm/4.3.2/bin 没有$符号的时候可能会修改了默认路径 然后会回到终端输入命令界面,输入#arm-linux-gcc -v 下面的来自 http://hi.baidu.com/gonghuixue/item/74a18faa2f752292
[单片机]
基于FPGA+DSP+ARM的数据传送总线变换器
  在飞控组件测试时,由于被测系统与上位机有一定距离,如果直接把遥测并行数据传送到上位机,将会出现数据信号的衰减和信号延时问题,有可能使信号时序错位,从而达不到系统测试的要求。为此,需要研制一种数据传送总线变换器,用来完成被测数据无失真的、实时的、远距离与上位机的通信,并能接收上位机的控制指令,实现工作状态的远程交互。    1 数据传送总线变换器的整体设计   综合考虑到测试系统实时性和可靠性的要求,选择以太网口作为数据传送总线变换器与上位机的数据转发接口,以高速串口作为控制口,采用FPGA+DSP+ARM的架构作为实时信息处理平台。   数据传送总线变换器的系统框图如图1所示。其中,FPGA作为数据预处理器,完成并
[嵌入式]
基于ARM体系的嵌入式系统BSP的程序设计
摘要:在介绍基于ARM体系的嵌入式系统启动流程的基础上,结合编程实例,详细、系统地叙述了BSP(板级支持包)程序的各个组成部分及其具体设计方案,并就实际程序设计中的几个难点问题做了说明。 关键词:ARM BSP 嵌入式系统 微处理器 ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。 BSP(Board Support Package)板级支持包介于主板硬件和操作系统之间,其功能与PC机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管
[嵌入式]
ARM公司发布了RealView ICE 3.3版本
英国 ARM 公司发布了 RealView ® ICE 3.3版本,该版本可支持对CortexTM-A9 处理器 的调试。该版本同时也支持TI OMAP3和TI DaVinci 平台 ,以及 ARM 1176JZF-S ® 平台 ,同时还支持Freescale i.MX31应用 处理器 ,进一步增强了 RealView 调试工具的优势。   新功能    RealView ICE 3.3版本固件具有许多新的功能,包括:   ·对 ARM Cortex-A9 处理器 的全面调试支持   ·支持TI OMAP 34xx、TI OMAP 35xx、TI OMAP 1710、TI DaVinci、Freescale i.MX31
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved