【引言】

最近有个需求:要求安装一个MySQL8.0在ARM架构上;CPU的ARM架构听说过,但没实际部署过;且这个ARMCPU架构又是一个什么东东,只是脑子有这么个名字,具体不是很了解。故今日集中学习下,有了此文。

大家都知道,随着linux开源操作系统的推广使用,很多企业级Linux都是部署在cpu架构为x86的服务器上,这是大家都知道的事;但如果有人问CPU的ARM架构,很多都说不清楚了,今天就来聊一聊 CPU的ARM架构。

此篇文章自己对x86和ARM cpu架构的了解是:

通常大家说的linux指的是x86 linux,ARM是不同于X86的CPU架构,对应的指令集不同,故软件编译环境不同,软件代码一般不能互用,一般需要进行兼容性移植。

x86是经典的CISC指令集,指令集复杂,功能多,串行执行,意味着执行效率低下,但性价比突出,被认为是民用终端的主流处理器内置指令集。Intel和AMD的家用处理器都是x86指令集,用的以x86为代表的CISC指令集。

 

要想了解透,就要先溯源CPU是个嘛?

CPU(Central Processing Unit)主要由运算器、控制器、寄存器三部分组成;

运算器起着运算作用,控制器负责发出CPU每条指令所需要的信息,寄存器保存运算或指令的一些临时文件/结果,以保证更高的速度。

CPU有着处理指令、执行操作、控制时间、处理数据四大作用。

 

指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有这些指令集,CPU 就可以更高效地运行。

Intel主要有x86,EM64T,MMX,SSE,SSE2,SSE3,SSSE3 (Super SSE3),

SSE4A,SSE4.1,SSE4.2,AVX,AVX2,AVX-512,VMX等指令集。

AMD主要是x86,x86-64,3D- Now!指令集。

CPU指令的强弱是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。

现阶段主流体系结构讲,指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分。

中央处理器CPU也可分为CISC(Complex Instruction Set Computers,复杂指令集计算集)和RISC(Reduced Instruction Set Computers)两大主流CPU指令集类型。

 

CISC以Intel,AMD的x86 CPU为代表;RISC以ARM,IBM Power为代表。

 

要了解CPU ARM架构,又要先了解啥是复杂指令集(CISC)和精简指令集(RISC)?

 

和大家学习数据库,从share-everything/share-disk/share-nothing三种设计思路出发开始学习一样。要想了解CISC和RISC,首先了解一下两者的设计理念。

1. CISC设计理念

早期的CPU全部是CISC架构,设计理念是要用最少最精炼的机器语言指令来完成所需的计算任务。为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加可实现复杂功能的指令和多种灵活的编址方式。甚至某些指令可支持高级语言语句归类后的复杂操作,但硬件设计也越来越复杂,造价也越来越高。

为实现复杂操作,微处理器除向程序员提供类似各种寄存器和机器指令功能外。还通过存于只读存贮器(ROM)中的微程序来实现其极强功能 ,处理在分析每一条指令之后执行一系列初级指令运算来完成所需的功能;此设计形式被称为复杂指令集计算机(Complex Instruction Set Computer-CISC)结构.一般CISC计算机所含的指令数目至少300条以上,有的甚至超过500条。

CISC架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。

 

2. RISC设计理念

采用CISC复杂指令集合的CPU有较强处理高级语言的能力,对提高计算机的性能有益。但也发现CISC指令系统太复杂不易实现,且还可能降低系统性能。长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器。同时,复杂的指令系统必然带来结构的复杂性。不但增加了设计的时间与成本还容易造成设计失误。实际计算中一个典型程序的运算过程所使用的80%指令,只占一个处理器指令系统的20%,事实上最频繁使用的指令是取、存和加这些最简单的指令。

顺着这个思路,精简指令的设想初衷也有了:即指令系统应当只包含那些使用频率很高的少量指令集,并提供一些必要的指令以支持操作系统和高级语言。

按照这个理念发展而成的计算机被称为精简指令集计算机

(Reduced Instruction Set Computer-RISC)结构,简称RISC。

 

简单来讲:

CISC通过操作内存、寄存器、运算器来完成复杂指令的,在实现时,是将复杂指令转换成了一个微程序,微程序在制造CPU时就已存储于微服务存储器。一个微程序包含若干条微指(令也称微码),执行复杂指令时,实际上是在执行一个微程序。

 

RISC的设计初衷针对CISC CPU复杂的弊端,选择一些可以在单个CPU周期完成的指令,以降低CPU的复杂度,将复杂性交给编译器,RISC架构要求软件来指定各个操作步骤。

RISC架构可降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。

 

这时大家很自然的得出一个直观结论:

CISC这种微程序的执行作为一个原子操作,是不可被打断的;

RISC指令之间是一些可以在单个CPU周期完成的指令,可以被打断,所以理论上RISC可更快响应中断。

了解一下ARM CPU架构_编程语言

理解了设计理念,再从软硬件角度对比CISC和RISC

1. 硬件角度看:

CISC处理的是不等长指令集,必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。

而RISC执行的是等长精简指令集,CPU在执行指令的时候速度较快且性能稳定。因此在并行处理方面RISC明显优于CISC,RISC可同时执行多条指令,它可将一条指令分割成若干个进程或线程,交由多个处理器同时执行。由于RISC执行的是精简指令集,故制造工艺简单且成本低廉。

 

2. 从软件角度看:

CISC由于发展早成熟,软件厂商代理多基于CISC体系结构的PC及其服务,像doc/Microsoft应用程序。

RISC后期发力、势单力薄。应用程序生态环境显得不如CISC丰富多样;而应用程序经过那么多年的人力和资源的投入,惰性较大,各大应用商在已有CISC类应用满足市场需求的前提,再让其投入大量的人力物力去研究运行在RISC上的应用程序,阻力可想而知。

 

好了,到了这里,大家可以稍微扩展性思维,预测下国内CPU的发力点:

国产CPU制作工艺被光刻机技术限制。为了降低CPU的复杂度,可能会向RISC架构重点发力;但RISC架构制作难度的降低,是以提升了编译器软件和应用生态程序的复杂性为代价,后果是开发成本的激增,上游应用供应商不愿意跟风投入。但考虑到目前国际紧张趋势,在民生国防领域,RISC架构的CPU研发具有重要意义。

对于企业服务器来说,应了那句老话:RISC买着便宜用着贵(代码兼容性、周期研发贵,CISC买着贵用着便宜(微程序做了预先集成优化)。

 

再来系统看下CISC和RISC的优缺点:

CISC体系的指令特征,

1. 使用微代码。指令集可以直接在微代码存储器(比主存储器的速度快很多)里执行,新设计的处理器,只需增加较少的电晶体就可以执行同样的指令集,也可以很快地编写新的指令集程序。

2. 庞大的指令集。可以减少编程所需要的代码行数,减轻程序员的负担。高级语言对应的指令集:包括双运算元格式、寄存器到寄存器、寄存器到存储器以及存储器到寄存器的指令。

 

CISC体系的优缺点,

1. 优点:能够有效缩短新指令的微代码设计时间,允许设计师实现 CISC 体系机器的向上兼容。新的系统可以使用一个包含早期系统的指令超集合,也就可以使用较早电脑上使用的相同软件。另外微程序指令的格式与高级语言相匹配,因而编译器并不一定要重新编写。

2. 缺点:指令集以及芯片的设计比上一代产品更复杂,不同的指令,需要不同的时钟周期来完成,执行较慢的指令,将影响整台机器的执行效率。

 

RISC体系的指令特征,

1. 精简指令集:包含了简单、基本的指令,通过这些简单、基本的指令,就可以组合成复杂指令。

2. 同样长度的指令:每条指令的长度都是相同的,可以在一个单独操作里完成。

3. 单机器周期指令:大多数的指令都可以在一个机器周期里完成,并且允许处理器在同一时间内执行一系列的指令。

 

RISC体系的优缺点,

1. 优点:在使用相同的芯片技术和相同运行时钟下,RISC系统的运行速度将是CISC的2~4倍。由于RISC处理器的指令集是精简的,它的内存管理单元、浮点单元等都能设计在同一块芯片上。RISC处理器比相对应的CISC处理器设计更简单,所需要的时间将变得更短,并可以比CISC处理器应用更多先进的技术,开发更快的下一代处理器。

2. 缺点:多指令的操作使得程序开发者必须小心地选用合适的编译器,而且编写的代码量会变得非常大。另外就是RISC体系的处理器需要更快的存储器,这通常都集成于处理器内部,即L1 Cache(一级缓存)。

 

综合上面所述,若要再进一步比较CISC与RISC之差异,可以由以下几点来进行分析:

1. 指令的形成:CISC因指令复杂,故采用微指令码控制单元的设计,而RISC的指令90%是由硬件直接完成,只有10%的指令是由软件以组合的方式完成,因此指令执行时间上RISC较短,但RISC所须ROM空间相对的比较大,至于RAM使用大小应该与程序的应用比较有关系。

2. 寻址模式:CISC的需要较多的寻址模式,而RISC只有少数的寻址模式,因此CPU在计算存储器有效位址时,CISC占用的汇流排周期较多。

3. 指令的执行:CISC指令的格式长短不一,执行时的周期次数也不统一,而RISC结构刚好相反,故适合采用流水线处理架构的设计,进而可以达到平均一周期完成一指令的方向努力。

显然,在设计上RISC较CISC简单,同时因为CISC的执行步骤过多,闲置的单元电路等待时间增长,不利于平行处理的设计,所以就效能而言RISC较CISC占上风,但RISC因指令精简化后造成应用程式码变大,需要较大的存储器空间,且存在指令种类较多等缺点,很是限制RISC的推广使用。

 

文章开始说了,

CISC以Intel,AMD的x86 CPU为代表,

而RISC以ARM,IBM Power为代表。

接下来再看具体一些应用场景。

 

ARM架构CPU基于精简指令(RISC),特点有指令长度固定,执行效率高,低成本,定位于嵌入式平台,简化了硬件逻辑的设计,减少了晶体管,从而降低功耗,流水线等控制并不复杂,进一步降低了晶体管数量,主要是面对轻量级的、目标明确单一的程序,所以主要都是移动端使用。

 

以Intel,AMD为代表的x86 CPU基于复杂指令集CISC,硬件逻辑设计复杂,流水线指令集并行、超线程、虚拟化等,复杂度很高,晶体管数量庞大,主要定位计算密集场景,如多媒体编辑、科研计算场景等。

 

简单一句话:

ARM是为了低功耗,x86是为了高性能。