arm64架构简介

Linux加油站 Linux加油站     2023-03-29     732

关键词:

1 ARM64的历史

早在2007年,ARM公司已经开始了64位架构的研发;2011年ARM官方公布了第一套64位处理器架构“ARMv8”,并于当年11月签署了第一份授权协议。2012年10月,ARM公司发布了第一款基于64位架构的处理器核心“Cortex-A50”系列,该系列首批包括Cortex-A57和Cortex-A53两款型号,而这两款可以单独工作,也可以以big.LITTLE的形式协同工作。今年2月,ARM公司又发布了Cortex-A57的升级型号Cortex-A72,性能再次提升接近1倍,同样可以与Cortex-A53搭配形成big.LITTLE双架构组合。

在ARM公司提出64位处理器战略之初,各方人士均预测ARM准备抢占Intel的服务器市场,但随着智能终端设备的高速发展,ARM64却成为了高性能智能设备的主流选择,包括苹果与绝大多数Android设备厂商。目前为止,智能手机处理器前十大厂商已经全部购买ARM64授权,并且Intel开始代工生产ARM64芯片。可以预见,未来的智能终端一定是ARM64的天下。

当然,并不排除ARM64与Intel抢占服务器市场的可能性,尤其是“微服务器”市场。ARM64在注重功耗、网络能力的“微服务器”市场具有一定优势,DELL等厂商已经推出了基于ARM64的微型服务器。

2 ARM64的优势

首次实现ARM64的ARMv8-A架构在功能和性能上都有着32位ARM(ARMv7及更早)无可比拟的优势,同时ARMv8完全兼容32位的ARMv7。

从上图可以看出,基于ARMv8的Cortex-A53最高性能可以达到A7的1.7倍,Cortex-A53可以达到A15的近2倍。即使是运行原来相同的32位程序,ARM64处理器也远超过之前的32位处理器。

性能提升的同时,功耗并没有增加,反而有一定下降,如下图所示

3 ARM64新增特性

ARMv8引入了64位架构,新增64位指令集,完全兼容ARMv7架构,同时对原有的功能进行了改进。

3.1 新增A64指令集

ARM64引入“Execution State”的概念,用以区分64位架构模式和兼容的32位架构模式,分别是AArch64和AArch32两种模式。其中AArch64模式可以执行64位指令集A64,AArch32模式可以执行32位指令集A32和T32。

A32(或ARM):32位固定长度指令集,通过不同架构变体增强部分32位架构执行环境现在称为AArch32。

T32 (Thumb) 是以16位固定长度指令集的形式引入的,随后在引入Thumb-2技术时增强为16位和32位混合长度指令集。

A64:提供与ARM和Thumb指令集类似功能的32位固定长度指令集。随ARMv8-A一起引入,它是一种AArch64指令集。

A64是一种支持AArch64执行状态的全新32位固定长度指令集,主要有以下特点:

基于5位寄存器说明符的简洁解码表

指令语义与AArch32中大致相同

31个随时可供访问的通用64位寄存器

无模式GP寄存器组 - 改进的性能和能耗

程序计数器(PC)和堆栈指针(SP)非通用寄存器

可用于大多数指令的专用零寄存器

A64与A32的主要差异有:

支持 64 位操作数的新指令 大多数指令可具有 32 位或 64 位参数

地址假定为 64 位大小L P64和LLP64是主要目标数据模型

条件指令远少于 AArch32 条件 跳转、比较、选择

无任意长度的加载/存储多重指令 增加了用于处理寄存器对的 LD/ST 'P'

3.2 增强的SIMD和浮点指令集

A64 高级 SIMD 和标量浮点支持在语义上类似于 A32 支持;它们共享浮点/向量寄存器文件(V0 至 V31)。A64 提供了 3 项主要功能增强:

更多 128 位寄存器:32 x 128 位宽寄存器;可视为 64 位宽寄存器

高级 SIMD 支持 DP 浮点执行

高级 SIMD 支持完全 IEEE 754 执行;舍入模式、非规范化数字、NaN 处理

有一些针对 IEEE754-2008 的附加浮点指令:

MaxNum/MinNum 指令

使用 RoundTiesAway 的浮点到整数转换

A64 中的寄存器封装模型也不同于 A32,所有向量寄存器均为 128 位宽,Vx[127:0]:

双精度标量浮点使用 Vx[63:0]

单精度标量浮点使用 Vx[31:0]

3.3 指令级支持加解密算法

支持AES。2个加密和2个解密指令。基于增强的SIMD 128位寄存器,2条加密/解密指令完成一轮AES算法。

支持SHA-1 and SHA-256。哈希算法持续在2个128位寄存器中进行,1条指令完成4个字的数据哈希,key的生成也可以通过指令加速。

Linux内核技术交流群: 【977878001】进群免费领取 内核资料包↓(含视频教程、电子书、实战项目及代码)

3.4 处理器特权级别模型Exception Level

与以往的处理器模式和特权级别定义不同,ARM64定义了EL0~EL3四个特权等级,级别从低到高。一个典型的应用如下图所示:

不同EL级别之间的转换必须遵循以下准则:

在AArch64模式下,EL转换只会发生在异常发生或者异常返回时;

异常发生时,EL级别只能提升或者保持不变;

异常返回时,EL级别只能下降或者保持不变;

EL转换的目标级别成为“目标异常级别”,只能由异常自身特征或者配置系统控制寄存器决定;

目标异常级别不能是EL0;

不同的EL级别访问的保留寄存器不同:

3.5 MMU 支持AArch64 模式

在AArch64模式下,处理能够访问更大范围的地址空间,不再仅仅是2^32B,地址可以用64位表示,但其中有效位是48位。也就是可以访问256T字节范围的物理地址。

在不同的EL级别下,MMU使用的地址转换机制不同,进而使用的地址转换控制寄存器也不同。MMU最关键的寄存器是TTBR(Translation Table Base Register)和TCR(Translation Control Register)

在EL1,根据TCR配置的不同,MMU访问的地址范围也有所不同,使用不同的基址寄存器进行地址转换。通常情况下,用户程序使用TTBR0,内核空间使用TTBR1。如下图:

AArch64模式有3个不同的地址转换粒度,4KB、16KB和64KB,不同的粒度大小定义了不同的内存页大小和各级页表大小:

以4K页和64K页为例,在这两种粒度下的虚拟地址使用方式如下:

优化系列汇编优化技术:arm架构64位(aarch64)汇编优化及demo

DATE:2021.8.15文章目录1、arm架构64位优化基础知识2、ARMv8/AArch64neon指令格式3、ARM相关编译参数4、查看状态标记位NZCV的方法5、A64指令集特有的指令及其用法6、资料文档查阅7、AArch64asmdemo8、优化经验总结(满满的干货)1、arm架构6... 查看详情

二进制文件无效,二进制文件缺少架构[arm64]

】二进制文件无效,二进制文件缺少架构[arm64]【英文标题】:Invalidbinary,thebinaryismissingarchitectures[arm64]【发布时间】:2014-09-1008:04:09【问题描述】:今天我无法将二进制文件提交到AppStore,出现错误“二进制文件无效,二进制文... 查看详情

警告“将架构 arm64 映射到 x86_64”是啥意思?

】警告“将架构arm64映射到x86_64”是啥意思?【英文标题】:Whatdoeswarning"Mappingarchitecturearm64tox86_64"mean?警告“将架构arm64映射到x86_64”是什么意思?【发布时间】:2018-11-1823:48:15【问题描述】:将我的框架迁移到Xcode10beta(1... 查看详情

架构 arm64 的未定义符号

】架构arm64的未定义符号【英文标题】:Undefinedsymbolsforarchitecturearm64【发布时间】:2013-10-0620:47:29【问题描述】:每次从CocoaPods导入文件时,我都会收到AppleMach-O链接器错误。Undefinedsymbolsforarchitecturearm64:"_OBJC_CLASS_$_FBSession",referenc... 查看详情

架构 arm64 的未定义符号

】架构arm64的未定义符号【英文标题】:Undefinedsymbolsforarchitecturearm64【发布时间】:2013-10-0620:47:29【问题描述】:每次从CocoaPods导入文件时,我都会收到AppleMach-O链接器错误。Undefinedsymbolsforarchitecturearm64:"_OBJC_CLASS_$_FBSession",referenc... 查看详情

Xcode 12 - AppName 的架构 (arm64) 不包括 iPhone 11 Pro 可以执行的架构(英特尔 64 位)

】Xcode12-AppName的架构(arm64)不包括iPhone11Pro可以执行的架构(英特尔64位)【英文标题】:Xcode12-AppName\'sarchitectures(arm64)includenonethatiPhone11Procanexecute(Intel64-bit)【发布时间】:2020-07-2512:04:49【问题描述】:我正在获取AppName的架构(arm... 查看详情

2 架构 arm64 的重复符号

】2架构arm64的重复符号【英文标题】:2Duplicatesymbolsforarchitecturearm64【发布时间】:2020-11-1610:41:10【问题描述】:我在使用xcode12对原生ios进行反应时出错。我安装了react-native-sensors和react-native-share,好像它们有相同的课程。这是... 查看详情

缺少所需的架构 arm64

】缺少所需的架构arm64【英文标题】:Missingrequiredarchitecturearm64【发布时间】:2016-02-2510:51:08【问题描述】:在整个开发过程中,我一直在ipadmini上运行我的应用程序,但今天尝试在iPadair2上对其进行测试,但它无法运行。我收到... 查看详情

关于arm架构的一些知识

...Mv8含32位和64位两个指令集,ARM没有64位技术,它是在MIPS64架构上增加了ARMv7架构的技术;ARM64其实只是ARMv8的一半,只含64位指令集;A53开始之后,都是ARM64。ARMv8指令集分为Aarch64和Aarch32。后者与ARMv7基本相同,但是多了一些vfp的... 查看详情

存档 ReactNative 获得了架构 arm64 的重复符号

】存档ReactNative获得了架构arm64的重复符号【英文标题】:ArchiveReactNativegotduplicatesymbolsforarchitecturearm64【发布时间】:2017-09-2416:31:21【问题描述】:我尝试使用ReactNative归档一个IOS项目。收到此错误:duplicatesymbol_OBJC_IVAR_$_RCTWebSocke... 查看详情

Xcode 12 Apple M1 arm64 - 可设计错误:“错误的架构”

】Xcode12AppleM1arm64-可设计错误:“错误的架构”【英文标题】:Xcode12AppleM1arm64-Designableerror:"wrongarchitecture"【发布时间】:2020-12-1407:57:22【问题描述】:在基于AppleSilicon的机器上使用Interfacebuilder时,我当前的项目会引发IBDe... 查看详情

Firebase pod 为架构 arm64 生成重复符号

】Firebasepod为架构arm64生成重复符号【英文标题】:Firebasepodsgenerateduplicatesymbolsforarchitecturearm64【发布时间】:2019-10-3121:34:24【问题描述】:我需要帮助来解决我的重复符号错误。它是在使用CocoaPods安装FirebaseAnalytics后开始的。重... 查看详情

arm64 armv7 armv7s 架构设置

】arm64armv7armv7s架构设置【英文标题】:arm64armv7armv7sArchitecturessettings【发布时间】:2014-02-1404:51:06【问题描述】:标准:仅限iPad的应用程序。仅支持iPad2或更高版本。想要利用最新iPad的64位代码。最低iOS6。Xcode5.02和iOS7SDK(当前... 查看详情

文件是为 arm64 构建的,它不是被链接的架构 (x86_64)

】文件是为arm64构建的,它不是被链接的架构(x86_64)【英文标题】:filewasbuiltforarm64whichisnotthearchitecturebeinglinked(x86_64)【发布时间】:2015-05-0807:18:01【问题描述】:我正在构建一个首先在我的ios模拟器中使用的框架。但是,在将其... 查看详情

XCode - 架构 armv7 arm64 的未定义符号

】XCode-架构armv7arm64的未定义符号【英文标题】:XCode-undefinedsymbolsforarchitecturearmv7arm64【发布时间】:2015-10-1406:28:57【问题描述】:我参加了一个较旧的项目,该项目需要为其使用的扫描仪更新SDK。新的SDK已准备好64位,因此应用... 查看详情

Xcode 5 命令行:架构“arm64”的部署目标“3.0.0”无效

】Xcode5命令行:架构“arm64”的部署目标“3.0.0”无效【英文标题】:Xcode5CommandLine:invaliddeploymenttarget\'3.0.0\'forarchitecture\'arm64\'【发布时间】:2013-09-3006:41:13【问题描述】:我正在使用iOS7SDK从Xcode5下的命令行构建一个胖Crypto++库。... 查看详情

我可以构建 Armv7 + Arm64 架构,但不能单独构建 Armv7

】我可以构建Armv7+Arm64架构,但不能单独构建Armv7【英文标题】:IcanbuildArmv7+Arm64architecturebutnotArmv7alone【发布时间】:2015-02-0815:24:47【问题描述】:使用Armv7+Arm64架构构建统一的API应用程序(迁移后)工作正常,该应用程序在iPhone... 查看详情

docker入门之多架构支持(代码片段)

...chitecturesupport|DockerDocumentation1.简介Docker镜像可以支持多种架构,单个镜像可能包含不同架构的变体,有时针对不同的操作系统运行具有多架构支持的映像时,docker会自动选择与当前操作系统和架构匹配的映像变体。DockerHub上的大... 查看详情