写点什么

arm64 还是 x86-64:Amazon EC2 实例该如何选择?

作者:魏临
  • 2023-11-10
    北京
  • 本文字数:1833 字

    阅读完需:约 6 分钟

arm64 还是 x86-64:Amazon EC2 实例该如何选择?

近年来,arm64 指令集架构已经从移动设备发展到了服务器和 PC 市场,取得了亮眼的成绩。在 PC 端,苹果公司搭载 Apple Silicon 芯片的 Mac 设备创下了市场份额新高,高通公司开发的,据称可以媲美高端 x86 芯片的 X Elite 处理器也将在明年面市。在服务器市场,亚马逊云服务、华为、阿里巴巴等企业都开发了自己的 arm64 架构服务器处理器,并应用在对外提供的云服务中。

 

其中,由亚马逊自研的 Graviton 系列处理器是市面上应用最早,也是应用最为广泛的 arm64 服务器处理器。如今,Graviton 处理器已经发展到了第三代,并替换了 Amazon EC2 云服务器的几乎所有 arm64 实例。用户启动 Amazon EC2 实例时,在下方的选项中就可以自由选择 x86-64 或 arm64:


在下方的实例细节中,我们很容易发现 arm64 实例的报价比规格近似的 x86-64 实例要低不少。例如,以下是一个 arm64 实例:


以下则是一个 x86-64 实例:


我们可以看到,x86-64 实例只有一个 vCPU,但三种 OS 的基础定价(RHEL、SUSE、Linux)都比两个 vCPU 的 arm64 实例更低,SUSE 和 Linux 的定价低了 28% 左右,RHEL 报价也低了近 5%。看起来,arm64 实例更加划算,尤其考虑到更多的 vCPU 数量更是如此。

 

那么我们是不是就该毫不犹豫地选择 arm64 实例呢?其实不然。

 

首先我们要知道,Amazon Graviton 处理器已经发展到了第三代,它的性能相比一流的 x86 CPU 已经各有千秋。在 Phoronix 网站所做的服务器应用测试中可以看到:


Graviton3 相比 x86 处理器,整体性能已经取得了优势。不过在一些测试中,x86 处理器依旧有 30%-50% 的性能优势:


Gravion3 相比 x86 的性能劣势,主要体现在一些优化不足的应用程序,和单线程为主的应用程序中。如果用户的应用更多依赖单线程性能,就应该优先选择 x86-64 的实例。

 

另一方面,很多应用程序从一开始就是为 x86-64 指令集设计和优化的。这些程序要么没有开源,要么向 arm64 架构的移植存在很多障碍。例如,如果应用程序大量使用 x86-64 体系中常见的 sse2、avx 向量扩展指令集,那么向 arm64 体系迁移时,就需要使用诸如 sse2neon 这样的第三方库,将 sse 指令集代码转换成 arm64 使用的 neon 向量指令集代码来运行。这样的转换是有性能开销的,并且实践中可能会出现意外的错误,需要开发人员通过完整的测试才能修复。

 

对于闭源的商业软件,开发人员往往需要等待软件提供商提供 arm64 的移植版本,而且这些版本需要一段时间的应用,经过迭代达到稳定程度才适合投入生产环境。用户的开源项目中如果使用了某些第三方库,往往也要等待库作者提供移植。考虑到这些因素,在 arm64 实例上可以稳定运行的生产应用范围就比较狭窄了。

 

有一种应用类型特别适合运行在 arm64 实例上,那就是一些通过容器运行移动应用的程序,往往是提供云端手机应用的服务。这类程序天然就是为移动设备的 arm64 芯片设计的,它们只需要很少的改造,甚至完全不需要改造,就能轻松在 arm64 EC2 实例上全速工作。相比之下,它们运行在 x86-64 实例上反而需要模拟环境,需要通过代码转译来工作,运行效率大幅降低。

 

还有一类应用也适合在 arm64 体系中先行尝试,那就是有着国产化需求前景的应用。一些开发人员和企业正在面临国产化需求,他们需要将已有的 x86-64 应用移植到国产化设备上。考虑到国产化设备中,最具市场前景和影响力的设备类型(如鲲鹏、飞腾平台)都是 arm64 体系,那么选择 Amazon EC2 arm64 实例就可以获得最佳的兼容性。例如,企业开发的应用可能同时需要运行在海外市场和国内市场,那么为鲲鹏平台开发的应用就可以几乎不做修改而运行在 Amazon EC2 实例中。

 

一些已经有了成熟 arm64 版本的开源应用选择在 arm64 实例上运行则可以节约成本。如前所述,arm64 实例以更低的价格,在这类应用中往往可以获得更好的性能,可以有效降低应用的云端计算支出。

 

最后,Amazon EC2 还提供了云端 Mac 实例,运行 macOS 系统。需要注意的是,这些实例都是基于苹果公司的 Apple Silicon 芯片 Mac 设备的,自然也是 arm64 架构。


这样,在 x86-64 和 arm64 实例中该如何选择的问题就大致清楚了。我们要根据自身的实际情况,考虑应用类型、社区支持情况、企业发展规划等因素来作出选择。对于个人开发者而言,即便我们当前主要使用的 x86-64 技术栈,我也推荐大家尝试一些 arm64 实例,探索 arm 技术栈,为将来的职业生涯做更多准备。毕竟,arm64 与 x86-64 二分天下的格局已经大致成型,未来我们会看到更多程序向前者迁移,也会有更多用户习惯使用基于 arm64 的解决方案。

用户头像

魏临

关注

一个希望被保护的小女孩 2020-06-25 加入

温暖善良

评论

发布
暂无评论
arm64 还是 x86-64:Amazon EC2 实例该如何选择?_魏临_InfoQ写作社区