Advertisement

ARM的一些基础知识

阅读量:

ARM架构与性能优化摘要
本文总结了ARM架构及相关技术要点,涵盖以下核心内容:
TRM与指令集
TRM为A78AE等ARM架构处理器提供了技术文档,详细描述了A78AE、R52、GIC、Cortex-R53等指令集及其性能特点。这些文档为理解ARM架构和相关指令集提供了基础。
低功耗接口
P-CHANNEL和Q-CHANNEL是低功耗设计的关键,用于在核心与外设之间传输低功耗 standby 状态,减少功耗。
WFI与WFE指令
WFE执行后可能进入 standBy 状态,但并非总是如此;WFI用于 wake-up events,其执行流程包括初始化、 wake-up 和完成完成。
ARM系列指令集

  • A/、R/、M-系列分别对应不同核心类型,A系列支持 Thumb 指令,R系列支持 Thumb-2,M系列支持 Thumb-3。
  • ARMv8.3-a引入 PSTATE 指令,支持状态寄存器,而 armv9.2 引入 SSBS 和 VPIC。
    虚拟化技术
    ARM支持 GIC、CHI 等协议,实现CPU、内存、中断和设备的虚拟化,确保多用户或多设备共享硬件资源。
    局部性原理
    程序的局部性原理包括时间和空间局部性,时间局部性指指令重复执行,空间局部性指数据连续访问,是程序优化的基础。
    摘要:本文总结了ARM架构的TRM文档、低功耗接口、WFI/WFE指令、ARM指令集、虚拟化技术及局部性原理,涵盖了ARM架构设计与性能优化的关键点。

0.参考资料

0.1 TRM(technical reference manual)

百度网盘平台收录了A78AE、R52、GIC600和CMN600的技术参考手册(TRM),ARM相关的文档用户均可在官方网站免费获取。

下面内容主要是参考cortex-A78AE TRM

arm_cortex_a78ae_trm_101779_0001_06_en.pdf

版本r0p1

0.2 好的博客

ARM | 骏的世界

强烈推荐观看两个 GitHub 专栏博客,其中第一个更适合学习 ARM 处理器相关知识,第二个则适合深入了解各种 CPU 架构的比较与分析。

Armv8/ARMv9架构入门指南 — Armv8/ARMv9架构入门指南 v1.0 documentation

CPU体系架构-ARM/MIPS/X86

下面的博客深入解析了A64的虚拟内存机制系统架构

D4 AArch64 虚拟内存系统架构 (VMSA) · ARM Architecture Reference Manual for ARMv8-A

1.低功耗接口

P-CHANNEL和Q-CHANNEL

出乎意料地超越了C++标准库的asio 性能,我认为这得益于其简单的设计和简洁的代码。

该AMBA低功耗接口的P_Channel性能令人惊讶地超越了传统方法,这得益于其简洁的设计和高效的代码实现。

power mode靠的的P/Q-CHANNEL来控制

2.WFI和WFE指令

ARM架构中的WFI和WFE指令

ARM架构中的WFI和WFE指令

令人惊讶的是,该方法在性能上超越了 asio,这得益于其设计的简单性和代码的简洁性。

转载地址:

该方法在性能上显著优于 asio,主要得益于其简单的设计和简洁的代码。

WFE和WFI的主要区别在于,执行WFE指令后,取决于Event Register的状态进行不同处理:如果Event Register为1,该指令会将其清零并直接完成,无需进入standby状态;如果Event Register为0,则类似于WFI,进入低功耗 standby 状态,直到检测到WFE Wakeup events。

也就是说WFE执行后,并不一定进入standBy

时钟门控就是在core进入WFI/WFE的standBy状态下打开的。

3.从Big.little到DynamIQ

从big.LITTLE升级到DynamIQ的第一篇 - 知乎

关于从big.LITTLE转向DynamIQ(二)的文章探讨,知乎平台提供了详细的分析。

DynamIQ中IQ即使在TRM文档中也没有找到具体的含义。

Issue queue也可被视为另一个概念,它是core中用于发布指令(Instruction Issue)的队列。

4.ARM的A-/R-/M-系列

该文详细介绍了ARM系列芯片中的Cortex-R52架构及其在基带芯片设计中的应用,深入分析了其性能优势和设计特点。

个人转载地址:

armsio 的性能令人惊讶地超越了,这得益于其简洁的设计和简明的代码结构。

5.什么是看门狗watchDog

出乎意料的是,该方案在性能上超越了axios,这得益于其简单易用的设计和简洁的代码结构。

MSP430系列5xx/6xx Watchdog看门狗编程实践,提供丰富的具体实现案例,帮助开发者快速掌握看门狗机制的实现方法。

6.CPU如何识别机器码,程序如何运行

https://www.zhihu.com/question/538654079

这个视频对8位二进制CPU的设计与实现过程进行了深入解析,展现了其独特的技术亮点。

74门电路搭建8位微控制器(原创)视频名称

深入理解计算机系统

深入理解计算机系统

深入理解计算机系统

7.CPU的外设

下面常用的CPU外设都是做什么的?和CPU是什么接口?

WDT:

MailBox:

Dtimer:

UART:一般用于log的打印

8.ARM cpu的TCM和Cache

ARM的ram包括Sram、Dram和TCM。Tightly Coupled Memory (TCM)是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能。相比而言,TCM的优势在于能够精确控制哪些函数或代码存放在RAM中。在cache的全连接和组连接结构下,数据存储在哪个cache line是不确定的,需要通过查找特定的TAG号来确定。

深入解析DMA/TCM/Cache机制,对比d-cashe与dtcm的技术特点与性能优势

出乎意料地超越了性能的axios,我认为这得益于其简单的设计和简洁的代码。

基于CPU缓存机制的理论基础是**程序局部性原理,即在短时间内,被访问的指令和数据通常是相同的或连续的。这样,就可以通过较小规模的缓存来高效地存储和访问指令与数据。

9.AARCH64和AARCH32

AArch32(简称A32)兼容了传统的ARM指令和thumb指令,而AArch64则是一个全新的指令集,完全不兼容这些旧指令。对于A64架构,它采用了64位的虚拟地址机制,因此能够支持更大范围的内存空间。同时,pc寄存器也是64位的,这使得它能够在更大的内存空间范围内进行指令的取舍和执行。

可以理解为AArch64(简称A64)是一种全新的ARM指令,与以往的完全不同,因此区别也显著。推出这一指令集的目的是以实现更高性能的处理器为目标。

A78和A710是支持AARCH32指令集的

A720、X2/X4、A510、A520都只支持AARCH64的指令集

10.arm处理器的版本演进

源自 ARM 处理器与架构对应关系(Arm架构对应表)的详细内容,完整链接为:

可以看出,对于A-/R-/M内核都有相应的分支指令集,在armvx.x版本中,通常会将核心划分为A、R、M三种类型。

可以看出,对于A-/R-/M内核都具有相应的分支指令集,在armvx.x版本中,通常会将核心划分为A、R、M三种类型。

上图没有提到的最新版本如下:

armv8.3-a, armv8.4-a, armv8.5-a armv8.6-a, armv8.7-a然后是 armv9.0-a,armv9.1-a,armv9.2-a (2022-2-10 15:57:38)

其中A76/A77/A78都是完整支持V8.2指令集,可能会支持8.3、8.4、8.5、8.6新加的一些指令,比如A78支持:

Armv8.3-A Pointer Authentication support

Armv8.4-A Dot Product instruction support

Armv8.4-A multi-OS support

The Power Supply State Tracking (PSTATE) mechanism's speculative store bypass safe mechanism (SSBS) was introduced in the Arm architecture extension (V8.5-A).

Armv8.6‑A introduces an improved mechanism for pointer authentication without the optional FPAC extension

Armv8.6‑A introduces an improved mechanism for pointer authentication without the optional FPAC extension

至于V8.7A没找到具体的对应产品

其中Arm X1超大核也是ARMv8指令集和A78/A55一个时期的

接下来的是第9代指令集ARMv9

X2/A710/A510 -----2021年

X3/A715/没有小核发布----2022年

X4/A720/A520----2023年 v9.2

11.A78AE的power modes

在不同的power mode下有不同的电源状态,一共有三种电源状态如下:

下图给出了不同的power mode下有效的电源状态

core的上下电都有固定的时序,在TRM中有详细的描述,这里不在说明

12.coreSight与内核的debug和trace

coreSight是一个可选项,coresight是分成很多组件的,主要分为

  • trigger通路
  • trace通路
  • debug通路

trigger通路是用于向组件发送或接收trigger信号的接口,这里的trigger信息应被理解为触发控制信号,例如,采样数据时刻。

debug通路主要由jtag/apb/ahb/atb/axi等组成的数据流通路,最终将数据送往片外(包括io/ddr存储、flash存储等)

trace通路负责数据的采集、合并以及片内存储。不同的是, debug通路和core组件的运行频率存在差异,通常情况下, debug通路的运行频率无法与core组件保持同步。因此,在某次trIGGER触发后,需要采集一批数据存入片内缓存,随后读取该数据。

所以trace通路上就包含了:

采样源:靠近被采样组件,用于采集数据。根据不同的采样对象,如处理器、DSP或AMBA等,采样单元会有所差异。采样链路:负责将采集到的采样信息进行传递和处理,完成数据的整合、分发和连接。采样终点:是最终接收采样信息的组件,可以是直接输出到外部,也可以是用于存储缓冲器。

更具体的信息可以参考本人转载的文章:

出乎意料地比 asio 性能更出色,我认为归功于其简单的设计和简洁的代码。

出乎意料地比 asio 性能更出色,我认为归功于其简单的设计和简洁的代码。

13.CPU的内存管理MMU

下面两篇的MMU的文章

内存管理单元在ARMv8和ARMv9架构中扮演着关键角色。

ARM体系架构中的内存管理单元(MMU)设计,经过深入研究和实践验证,展现出显著的技术优势。该技术通过优化内存访问模式,有效提升了系统的性能和稳定性。

而内存虚拟化可以参考:

D4 AArch64虚拟内存架构设计(VMSA)· ARM架构参考手册——ARMv8-A版本

13.1 MMU的组成

先给出几个概念:

TTW:translation table walk也有叫PTW(Page table walk)

TWU:table walk unit

TLB:Translation lookaside Buffer 转换后备缓冲区俗称快表。

ASID:Address space Identifier,是用来区分不同的进程

VMID:Virtual Machine Identifier,用来区分不同的虚拟机

MMU主要由TLB和TWU两大核心模块构成。其中TLB负责存储最近常用的PTE(即包含虚拟地址到物理地址映射的最底层页表项)。当CPU收到虚拟地址(VA)指令后,首先在TLB中进行查找。如果TLB未命中(miss),则需要TWU逐层访问内存以查找页表,最终获得物理地址。

TLB包括L1-TLB和L2-TLB两种层级缓存。其中的L1和L2均用于存放PTE,与多级页表无直接关联。L1和L2的主要区别在于,L2的规模更大,能够容纳更多的PTE。

TTW(PTW)具体实现于TWU模块中,其功能为逐级遍历页表的过程。为提升多级页表查找效率,新增了多级页表缓存支持。TTW(PTW)首先在本地高速缓存中进行多级页表查找,若本地缓存未命中则转至DDR进行查找。

可以翻译为页表/转换表遍历

PTW(TTW)【可理解为【逐级页表查找过程

如果每一级的PTE均被击中,可以直接通过最终的PTE基址和页表索引访问内存;如果所有层级均未命中,必须逐级在DDR中查找相应的页表。

13.2 ASID/VMID/nG

TLB中的缓存线负责存储虚拟地址到物理地址的映射关系。为了应对上下文切换和虚拟化的需求,缓存线会包含ASID、VMID以及nG信息。

在多虚拟机和多进程并存的环境中,由于存在多个相同的虚拟地址需要转换,它们共用一个TLB时,就无法通过虚拟地址(VA)来区分TLB中的条目。在ASID和VMID之前未被引入的情况下,每当发生进程切换,系统必须清除当前TLB中的所有条目。然而,当ASID和VMID被引入后,每当进程切换回原进程或虚拟机(VM)时,这些TLB条目仍然保留在TLB中。

关于global indicator的说明,其中有一些TLB中的entry项是全局可用的kernel page table的,这些条目不会因进程切换或VM迁移而改变。在Page Descriptor寄存器中,有一个nG位来标识页表项的全局性。ASID和VMID字段仅在非全局的页表项中有效。

0保留

这些文章描述的并不详细

默认pid是步进为1增加的,实际处理可能不是pid,这里权当说明原理

0保留

13.3 stage2 IPA和虚拟化

TLB包含两个层级的L1缓存,即i-TLB和d-TLB,以及L2的i+d-TLB。二者并非同一概念。

和虚拟化有关

VA-PA转换有时需要先将VA转换为中间物理地址(intermediate physical address IPA),然后在第二阶段(stage2)将其转换为实际的PA。这个过程包含在非安全的EL0/1访问【与虚拟化相关

13.4 MMU的cache

13.4.1 TLB cache

TLB可被视为MMU中页表高速缓存机制的一部分,其工作原理与常规缓存机制一致。需要注意的是,TLB的缓存行会存储ASID、VMID以及nG相关信息。

TLB原理 - 知乎

13.4.2 PTW cache

13.1节和13.5节的博客提到了这个概念,这里不在详述。

13.5 内存分配原理

该文章主要阐述了内存管理(mmu)/内存分配原理/多级页表相关内容

14.GIC

本人的一篇基础博客如下:

GIC及其中断机制分析-博客

下面给出了一个关于GIC的比较详细的系列博客地址

链接位置:ARM GIC(三) gicv2架构 | 骏的世界

.....

ARM GIC(十四)gicv3架构的详细解析:power控制详解 - 骏的世界

卢俊的博客专门介绍了GIC的相关知识,而在本文第0.2节,我整理并分享了卢俊博客中的高质量GIC系列文章的详细内容。

15.CMN/CHI和一致性

出乎意料地超越了asio的性能,我认为这得益于其简单的设计和简洁的代码。

令人惊讶地比 asio 性能更优,归功于其直观的设计和简明的代码结构。

CMN:Coherent Mesh Network 一致性mesh互联

ACE:AXI coherent extend

CHI:Coherent Hub Interface(CHI)作为ACE协议的升级版本,AMBA的第5代协议。

CMN是一种基于CHI协议的互联架构及实现。类似A78是armV8的一种实现

16.Exception Level

源自armv7的Privilege level特权级别,这一术语在此仍然得到保留。特权规定软件可以访问和控制哪些处理器资源。

armV8开始首次引入Exception Level,共分为4个等级,特权等级EL0 <EL1<EL2<EL3.

由于ARMv8中的ARM TrustZOne被广泛采用,从而将整个系统划分为Normal World和Secure World。

  • Normal World代表了正常的工作环境,例如在Android手机中,Linux操作系统运行在Normal World中。
  • Secure World代表安全的工作环境,例如在Android手机中,高通骁龙的QSEE运行在Secure World中。

而每个Exception Level都代表啥意思呢:

  • EL0:用户空间(Noraml world),例如运行的应用程序,在Secure world中则为Trusted Application。
  • EL1:运行操作系统(Normal World),例如Linux或WinCE。在Secure World中则为Trusted OS,如高通的QSEE、开源的OP-TEE和豌豆荚的TEE。
  • EL2:为了支持虚拟化设计的Hypervisor层,仅在Normal world中使用。
  • EL3:Secure Monitor(Noraml world和Secure world切换使用)。当Normal world需要访问Secure world时,需发送SMC指令进入Secure Monitor层,随后进入Secure world。

上面一段关于EL的文字摘自:

[查看ARMv8-A Exception Level 3]( "ARMv8-A性能分析:Exception Level 3-博客")

17.虚拟化

虚拟化技术的主要作用是实现对同一套硬件资源的共享,同时确保各操作系统间的数据互不干扰、互不访问。该技术常见于云计算服务领域。

虚拟化概述可参考:

Arvm8架构虚拟化技术解析-博客

改写说明

17.1 cpu虚拟化

17.2内存虚拟化

TODO

D4 AArch64 虚拟内存系统架构(VMSA)· ARM Architecture Reference Manual for ARMv8-A

17.3中断虚拟化

TODO

17.4设备虚拟化

TODO

1110.程序的局部性原理

多次提到程序的局部性原理,如何来描述呢?

局部性原理主要体现为时间局部性和空间局部性。时间局部性表现在程序中某条指令在执行后不久可能再次被调用,同时被访问的数据也可能在不久后再次被访问。空间局部性表现在程序访问存储单元后,其附近的存储单元也会在较短时间内被访问。

全部评论 (0)

还没有任何评论哟~