kunpengcompute / kunpengcompute.github.io

Kunpeng Tech Blog: https://kunpengcompute.github.io/
Apache License 2.0
17 stars 5 forks source link

ARM: 需要了解的背景和问题 #23

Open bzhaoopenstack opened 4 years ago

bzhaoopenstack commented 4 years ago

译者: bzhaoopenstack 作者: Amit Dattatray Khandekar 原文链接:https://amitdkhan-pg.blogspot.com/

Arm 的故事始于1993年,当时苹果与 ARM (当时是 Acorn RISC Machines)组建了一家合资企业,推出了“ Apple Newton”掌上电脑。 这个故事今天还在继续,有消息称苹果将把他们的 Mac换成 ARM 处理器,在这里 ARM 仍然以节能处理器的角色出现。 这是它在智能手机中如此受欢迎,也是它进入智能汽车、无人机和其他物联网设备的主要原因,在这些设备中,电池寿命保持和硬件尽量减少热量的产生是至关重要的。 今天,甚至是数据中心也可以在 ARM 上运行。 由于市场的巨大变更,在此,我考虑抛出关于主角ARM的一些观点,这些观点对于刚刚开始接触 ARM 生态系统的用户和软件开发人员是十分有益的..

Arm 能耗较低的原因与 其所基于的 RISC的硬件架构有关。 RISC 指令非常简单,每个指令执行只需要一个CPU时钟周期; 因此它们需要更少的晶体管,更少的功率,从而产生更少的热量。

OK,是什么促使ARM 处理器开始进入数据中心市场呢? 毕竟,移动电话和数据中心没有任何共同点。 不是吗?

好吧,两者都消耗电力,并且都需要在拟定的成本下表现良好。 尽管数据中心与手机相比是巨大的,同时它们对 CPU需求和 使用量也是巨大的。 对于两个场景功率效率非常重要,能达到市场需求的性能成本也是一样。

分而治之

那么,我们就用更多的,又便宜的 ARM 处理器来替换现有的数据中心中昂贵的处理器不就好了,这样总的 CPU 功耗不就等于现有的功耗了吗? 是的,这确实有用。 假设有4个 cpu 承载16个并行进程,那么最好的办法是将4个高性能CPU替换为8到16个性能较差的 cpu ,这样总吞吐量可能会更高。

但是,当有一个数据库长查询,需要消耗高性能 CPU 的能力时? 即便在这个时候,这个数据库查询请求也可以使用多个 较低性能的cpu 来并行查询。 这里我们看到,即使是软件也需要适应这种范式转换: 就是尽可能地将任务划分为多个并行任务。 我们需要理解这样一个事实: 重要的不仅仅是单个 CPU 的能力,而是所有 CPU 的总能力。

big.LITTLE架构

在 ARM 的big.LITTLE架构中,在同一个 SoC 中可以有两个或多个具有不同性能的核。 如果其中一个处理的工作负载发生变化,如果另一个核更适合已变化的工作负载的话,那么它可以动态地接管工作负载。 这种方式避免消耗不必要的电力和热量的产生,因为ARM定位是低功耗处理器,成本成本!! 在 linux 内核中,这种调度已经得到了支持,特别是针对 big.LITTLE架构。

ARM的商业许可模式

正如我们许多人知道的那样,ARM 公司本身并不生产芯片,而是设计芯片。 它的客户购买了基于 ARM 架构设计的芯片制造许可证。 目前为止,有两种这样的许可证。

一种是核心许可证。 当一家公司购买核心许可证时,它必须使用 ARM 的内部核心设计制造完整的 CPU 核心,而不能做任何更改。 Arm 授权的核心系列名为 Cortex-A 。 例如,在高通的 Snapdragon 855芯片组中,所有的 CPU 核心都基于 Cortex-A 系列; 这意味着它们使用了 ARM 的核心许可证。

另一个是 ARM 架构许可证。 当一家公司购买这个许可证而不是核心许可证时,它必须设计自己的核心,但核心的设计必须与 ARM 指令集兼容。 这样的核心通常被称为定制核心,因为它们有自己的微结构,而不是由 ARM 设计的。 这为某些大公司根据自己的需要生产核心提供了灵活的条件。 高通(Qualcomm)、华为(huawei)、苹果(Apple)和三星(Samsung)等公司都制造了这种定制的核心。

这种许可模式的优点在于: 现成的核心设计可供任何人使用(当然需要购买许可证)。 因此,有许多厂商都制造了兼容的芯片。 从而进一步推动了芯片创新和竞争。

基于ARM的应用程序

移动设备的应用程序已经基于ARM 处理器上编写了。 但是在服务器上运行的软件呢? 好吧,Linux 内核支持 ARM,所以像 Ubuntu,CentOS 和 Debian 这样的操作系统已经正式支持 ARM 镜像。 另外,如果你使用的是 Ubuntu,在Ubuntu 官方库中几乎所有常用的 x86依赖库都已经能安装在 ARM 上了,至少对于 ARMv8来说已经做了该做的porting。 我能够安装 PostgreSQL 数据库包,并且一直在高竞争的情况下运行 pgbench,并且运行得很好。 (可能在以后的博客中,我将进一步阐述 PostgreSQL)此外,gcc / g + + 等编译器已经针对 ARM 架构进行了调优,因此大多数硬件专用编译器都已完成了ARM架构相关的优化。

但是,当涉及到那些运行在数据服务器的软件时,可能需要进行大量的适配工作才能获得比较nice的性能。 例如,在做代码同步的时候,应用程序必须特别注意ARM 的弱内存模型。 其次,应用程序应该利用内置的 ARM 硬件方面的能力,比如 NEON (这是 ARM 对 SIMD 的品牌名称) 指令,以便在多数据流上并行操作等等。

对此,目前已经有很多开发者和团队正投身于大量的研究和分析,以优化整个 ARM 生态系统中的软件。 同时我们已经看到了这个ARM生态系统正在逐渐过渡、完善和适应市场。