1 、Arm 与 X86
越来越多的公司转向 Arm 以降低成本和能源消耗。虽然 x86 仍然是专有的 CPU 架构,但 Arm 向其他公司提供许可证。这允许这些公司使用 Arm 的专利技术设计定制处理器。
亚马逊定制设计的 Graviton 处理器是 Arm 在云计算中的一个很好的例子。通过使用这些处理器,AWS A1 实例可提供与 x86 EC2 实例相当的性能,同时节省 40%的成本。
Arm 和 x86 之间的主要区别可以追溯到这些 CPU 执行指令的方式。例如,普通的 x86 台式机 CPU 使用复杂指令集计算机 (CISC) 架构的实现,允许单个指令在每个时钟周期内执行多步操作。
另一方面,Arm 使用精简指令集计算机 (RISC) 架构的实现,允许它使用有限的、高度优化的指令集在每个时钟周期执行一条指令。
2 、Arm 容器
大多数人可能会想,“许多容器运行时环境,例如 Docker ,可以使用 buildx (或类似的)命令为各种 CPU 架构创建容器,那么我们为什么还要进行这种对话呢?”
尽管 docker build --platform 可以创建特定于平台的映像,但不能运行从配方 (Dockerfile) 执行二进制文件的命令。
在以下示例中,大家可以看到由于主机和二进制架构类型之间的差异而导致的构建失败。
容器与主机共享 CPU 和内核,这意味着底层硬件决定了可以在容器环境中使用的指令集。这可以在之前的 Docker 构建输出中以红色突出显示。
我们使用的可执行程序被编译为二进制文件。编译是软件开发过程中的一个神奇步骤,其中编译器(软件)获取一段源代码(可以说是人类可读的)并将其转换为特定于 CPU 的二进制机器代码(即 1 和 0 )。简单来说:程序是由其他程序制作的。有一些基于解释器的语言可以直接从源代码执行指令,但我们不要深陷其中。
3 、使用 Linux
Linux 内核包含许多功能,是一个模块化软件,可以根据使用要求进行广泛定制。其中一项功能 binfmt_misc 允许用户使用解释器在系统中运行几乎任何二进制文件,而不管二进制编译的体系结构如何。Linux 可以配置为使用 binfmt_misc 并匹配二进制文件的开始字节,以确定哪个解释器适合执行它。
在我们的例子中,我们需要使用能够理解 ARM64 CPU 指令的解释器来运行所有内容。
ProjectMultiarch 使用相同的概念将管理程序 QEMU 注册为解释器,允许用户模拟容器的各种 CPU 架构。
4 、仿真成本
仿真是一种无需实际硬件即可开始测试和开发解决方案的好方法。然而,值得注意的是,仿真在原生平台之上增加了一层开销,使其不适合生产环境。
有限的功能和边缘情况,例如由于不是原生而导致的性能输出较低,可能是仿真成本的一个例子。
那么 Arm 架构的发展会怎样呢?大家可以一起讨论下。
Cloudpods 是一个开源的 Golang 实现的云原生的多云和混合云融合平台。
Cloudpods 不仅可以管理本地的虚拟机和物理机资源,还可以管理其他公有云和私有云平台的资源。
GitHub: https://github.com/yunionio/cloudpods,欢迎使用+star
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.