时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

上云实践:从 X86 到 ARM,跨越 CPU 架构鸿沟

  • 2021-03-18
  • 本文字数:3768 字

    阅读完需:约 12 分钟

上云实践:从X86到ARM,跨越CPU架构鸿沟

1、概述


随着 IT 技术的不断演进,公有云、专属云、混合云、云原生等相关技术概念层出不穷,云计算已经有了广泛应用,成为数字经济、政企数字化转型的新型基础设施。


在云计算时代,由于功耗低、高性能以及指令集的优势,越来越多的云厂商开始选择基于 ARM 体系来构建云服务。从 AWS 发布的 Graviton 2,到 Apple 的 M1 芯片,到中国电子云十年磨一剑的“PK 架构”,再到华为鲲鹏体系,ARM 体系成为了未来的趋势方向。


对于企业数字化转型来说,应用上云是必经之路。从狭义来说,上云是将运行在物理机上的应用系统搬迁到云上。从广义上看,上云会涉及到跨架构适配、虚拟化、容器化、云原生等一系列的技术升级和重构。


上云的不同阶段,所依赖的技术并不同。从左至右,应用对云的依存度也越来越高。


下文对几个阶段涉及到的技术做简单阐述。


  • 阶段 1:跨架构适配


传统应用大部分是基于 X86 架构来开发和运行。面对 ARM 架构越来越流行的今天,越来越多的云计算厂商开始围绕 ARM 架构构建云应用生态。并据此引发了大量的适配测试需求。X86 和 ARM 体系架构的差异对于应用有哪些影响?X86 应用向 ARM 体系迁移会碰到哪些技术难题?对于不同编程语言实现的应用来说,迁移的难度是否有区别?


本文将针对以上问题开展分析。


  • 阶段 2:虚拟化


计算虚拟化能力是云计算提供的核心能力。截至到今天,很多行业用户的上云还是停留在这个阶段。虚拟化的最大用途是使得应用与物理机器解耦,将资源池化,按需分配资源,并因此获得弹性伸缩和迁移能力。这个阶段的上云,往往会涉及到 P2V 和 V2V 这两种主要场景。前者是从物理机向虚拟机迁移(Physical to Virtual Migration)),后者是虚拟化的跨云迁移(Virtual Machine to Virtual Machine)。


  • 阶段 3:容器化


容器化是将应用程序及其所需的库、框架和配置文件打包在一起的过程,以便可以在各种计算环境中高效运行它。得益于 Docker 等技术的流行,应用容器化更进一步促进了应用的配置、依赖以及镜像的标准化,使得应用交付、运维等领域有极大的提升。这个阶段的上云,对于软件开发过程有一定的要求,需遵循相应的容器化规范。


  • 阶段 4:云原生


云原生时代的到来,是容器化后的必然阶段。通过 Kubernetes、devops、微服务等技术的不断发展,尤其是对有状态应用支撑能力的不断增强,云原生已然成为新一代应用开发的事实标准。


技术的发展有天才工程师的灵光一现,其背后同样也需要遵循客观自然规律。下文将从阶段 1 入手,尝试从底层技术进行解构,或许能帮助我们更清晰的看到本质。

2、跨越 CPU 架构


纵观计算机技术的发展史,软件系统是一个不断抽象,不断叠加的过程。操作系统的出现,解决的是单机硬件多样性的难题,为上层应用软件提供一致的底层运行环境。云计算的出现,解决的是分布式架构引入的多样性问题,为应用提供跨机器、跨地域的一致运行环境。


我们先从 CPU 指令集的差异对比开始。

2.1 CPU 指令集对比


在计算机体系结构的发展过程中,诞生了 CISC(复杂指令集)和 RISC(精简指令集)这两大流派,它们采用了不同的设计理念和方法,CISC 采用单条复杂指令完成特定复杂功能,提高了存储器访问效率;RISC 则采用多条精简短指令完成特定复杂功能,提高了处理器运行速度。基于这两类指令集,产生了两种主流的 CPU 架构:X86 架构,采用的是 CISC 复杂指令集,而 ARM 架构则采用了 RISC 精简指令集。


CISC 指令集指令系统庞大,指令数目、指令格式和寻址方式复杂,指令字长不固定,各种指令执行周期和访问频率相差很大,采用微指令码控制单元的设计。


RISC 指令集选取使用频率最高的精简指令,避免复杂指令,将指令数目、指令格式和寻址方式种类减少,指令长度固定,大多数的指令都可以在一个机器周期里完成。以控制逻辑为主,不用或者少用微指令码控制。

2.2 对应用迁移的影响


应用本质上是一种程序,程序在运行态是由一系列进程组成,而进程可以说是计算机科学最重要和最成功的概念之一。进程的运行依赖操作系统对 CPU、内存的调度和管理,操作系统保持跟踪进程运行所需的所有状态信息。比如寄存器、PC 计数器、逻辑单元 ALU 等。


综合来说,X86 和 ARM 属于不同的架构。X86 属于复杂指令集,而 ARM 属于精简指令集, X86 上的程序根本不可能毫无阻碍地就可以在 ARM 上使用,必须经过适配迁移。


从另外的角度来看,应用选择不同的编程语言,会有不同的跨架构能力。下面分析下主流的 C++和 Java 应用在不同架构下的差异表现。

2.3.1 C/C++语言


众所周知,C/C++程序是计算机系统级别最为成功的语言之一。业界存在大量的知名开源软件基于 C/C++构建,比如 Windows/Linux 操作系统自身,以及使用广泛的分布式存储系统 Ceph。


在 C/C++世界里,从源代码演变成运行中的进程,需要经历编译、汇编、链接、运行等一系列过程。

Step 1 编译


编译是将源代码经过处理,转变成汇编语言的过程。这一过程的关键工具是编译器。有了编译器的存在,现代编程语言(如 C++)的源代码一般能做到架构无关,通过不同平台编译器(如 GCC)的处理,可以得到不同体系结构下的汇编代码。


举例如下源代码:



在 X86 平台编译器编译后,得到汇编代码如下:


备注:以上 mov、push 等均为 X86 体系架构汇编指令。


在 ARM 平台编译后,得到汇编代码如下:


备注:以上 mov,STR,LDR 均为 ARM 架构汇编指令。


汇编指令的简单对比如下:


功能

X86指令

ARM指令

数据传输

MOV

MOV

算术加

ADD

ADD

算术减

SUB

SUB

比较指令

CMP

CMP


仅从常用指令集名称来看,两者比较相似,但实际大相径庭。举例说明,在 ARM 指令中,MOV 与 ADD 之间需要通过 STR 和 LDR 两条指令完成数据从内存往寄存器的加载,其原因是 ARM 算术指令只能运行在寄存器,而 X86 则无此限制。


其他差异本文不再一一分析。


由此可以看出,X86 和 ARM 架构的指令集差异很大,对于 C++语言来说,编译器帮我们搞定这些差异,但需要从源代码重新编译。

Step 2 汇编


汇编是将汇编代码转变成机器代码的过程。以上汇编代码在 X86 平台下,得到的机器代码如下:


备注:以上为局部截图。


而在 ARM 平台下,得到的机器代码会完全不同。

Step 3 链接


链接在 C++语言特有的处理机制,将 OS 里的链接库与程序进行链接的过程。这一过程的输出物即为可执行程序。最终的运行,对于 C++和 Java 来说,通常都有 Main 函数作为程序的运行入口(某些框架会对其进行封装,如 Java Spring 框架)。


综合以上,对于 C/C++开发的应用程序来说,向 ARM 架构迁移需要完成重新完成编译、汇编、链接的全过程,应用跨架构迁移的难度较大。

2.3.2 Java 语言


Java 语言在 Web 应用开发占据绝对的主导地位。Java 是基于虚拟机的语言,也是所谓提供跨平台运行能力的语言。Java 应用从源代码到运行,需经历编译、运行两个环节。

Step 1 编译


使用 javac 命令进行编译,通常得到 java 字节码文件,以.Class 后缀命名的文件。


以下面的代码为例。



X86 环境编译得到的字节码如下:


备注:以上为局部截图。


ARM 机器上编译,得到如下字节码:



经比较,会发现两者得到的字节码基本一致。

Step 2 执行


Java 体系为 X86 和 ARM 分别提供了不同的 JVM。在运行时,JVM 通过类加载器执行以上字节码文件。


备注:实际运行时,JVM 会将字节码转换成机器码来运行,这个过程暂且忽略不表。


综合来看,对于 Java 应用来说,X86 和 ARM 架构的差异完全由 JVM 层屏蔽,应用跨架构迁移的难度很小。


上文主要从 CPU 架构差异、编程语言差异的角度来分析对应用的影响。下面结合中国电子云的实际上云案例来做进一步的阐述。

3、蓝信上云实践


蓝信是中国电子云上运行的重量级应用之一,作为中国电子云“一云一端”的战略组成部分,提供安全可靠的企业消息通讯、视频会议和协同办公能力,在政企市场有着广泛的应用场景。

3.1 蓝信对中国电子云的适配过程


蓝信原生是构建在 X86 体系架构下的,针对中国电子云底层采用 PKS 架构,需要做整个系统的适配,主要工作体现以下几点:

a.针对体系架构改变的适配


代码级重新编译以适配 ARM 架构,由于目前流行的开发语言早已对 ARM 体系进行过适配(例如,golang,java,c/c++, python 等)这部分工作难度不大。

b.数据库的适配


数据库部分,蓝信需要从 MySQL 迁移到达梦数据库,由于达梦数据库对 MySQL 语句的良好支持,只有部分语法存在兼容性问题,仅需在数据层进行适配,业务层并不需要改动,整体适配可在一个月内完成,其中主要成本集中在适配后的全量功能测试上。

c.基础设施及中间件的适配


蓝信依赖的基础设施及中间件也需要适配,例如 etcd,k8s,redis,kafka,mongoDB 等,这部分工作由于大部分基础组件已经有了 ARM 版本,直接使用即可,极个别的组件,需要进行源码级的编译。

4、总结和思考


在当前数字产业大发展的背景下, 对 ARM 架构的关注必然会不断升温,各行业会出现大量应用从 X86 向 AMR 架构迁移,也催生了大量的应用跨架构适配测试需求。


通过前文的分析,我们可以得出如下结论:


  • X86 架构和 ARM 架构的确存在较大差异。两者在指令集、寄存器等方面均有很大的不同,但对于应用系统的移植来说,并非是不可逾越的鸿沟;

  • 应用开发采用的不同编程语言,会导致跨架构移植难度绝然不同。C/C++等系统级语言所编写的应用程序,其移植需要经过重新编译、链接、运行等全过程,难度相对较大;而以 Java 为代表的虚拟机语言则具备良好的跨平台移植性;而对于 Python、JavaScript 等脚本型语言来说,移植难度会更小。从这个角度来看,在云计算环境下开发应用程序,建议优先选择跨架构友好的编程语言。

  • 在大型应用系统迁移实践中,需要深入分析系统架构,有针对性的设计迁移方案。完成跨 CPU 架构迁移只是一小步,对于应用来说,如何借助云计算实现更好的可部署性、可伸缩性、便捷运维以及高并发带来的性能挑战,值得不断的探索。

2021-03-18 14:554031

评论

发布
暂无评论
发现更多内容

恒源云(Gpushare)_社区小伙伴的技术小闲谈

恒源云

深度学习 算法

恒源云(Gpushare)_VSA:一个可变形尺寸窗口自注意力模型

恒源云

深度学习 GPU算力

已开源!分发业务看过来【跨端动态模板引擎】

阿里巴巴文娱技术

ios android 开源 开发工具 移动开发

已开源,就等你来!优酷动态模板研发体系为分发提效30%!

阿里巴巴文娱技术

开源 前端 开发工具 移动开发 开发框架

KMRE 再升级!你们想要的功能它来了~

优麒麟

开源 软件 安卓 优麒麟 KMRE

神秘男嘉宾登场,引爆全场灯光?

龙智—DevSecOps解决方案

Atlassian Confluence confluence插件

OneFlow学习笔记:从OpExprInterpreter到OpKernel

OneFlow

数据结构 学习笔记 虚拟机 代码 oneflow

三生万物,万企明道|明道云发布三周年

明道云

云原生小课堂 | 一文入门性能凶悍的开源分析数据库ClickHouse

York

数据库 开源 容器 云原生 Clickhouse

华为云持续快速增长 践行“深耕数字化,一切皆服务”

科技热闻

基于SpringBoot2+redis+Vue商管系统,秒杀等,可二次开发接私活

Java架构追梦

Java spring 后端开发

百度ToB垂类账号权限平台的设计与实践

百度开发者中心

字节”再次起跳!内部651页剖析HotSpot 源码手册,GitHub开源

Java架构追梦

Java 程序员 后端开发 字节

张文骁:游戏开发的“零件人”梦碎之后|OneFlow U

OneFlow

堪称完美的SQL调优笔记居然是百万年薪阿里P8大佬熬肝纯手打,内容简直太香

Java架构追梦

Java 程序员 java面试 后端开发

2022年短视频电商品牌营销专题—手机品牌抖音营销分析报告

极客天地

腾讯云百万容器镜像安全治理运营实践

腾讯安全云鼎实验室

安全服务

划重点,2022 常见的面试题和八股文都为大家总结出来了

Java架构追梦

程序员 java面试 后端开发 Java面试八股文

【三级等保】三级等保办理流程经验大分享

行云管家

网络安全 等保 等级保护 等保三级 等保2.0

netty系列之:可能有人听过ThreadLocal,但一定没人听过ThreadLocal对象池

程序那些事

Java Netty 程序那些事 4月月更

没想到我也可以入职阿里,两年CRUD,二本毕业,备战两个月面试阿里,侥幸拿下offer定

Java架构追梦

Java 程序员 后端开发

总结JAVA全栈知识点,七面阿里成功斩获P8Offer

Java架构追梦

程序员 java面试 后端开发

国产ETL自动化运维调度工具 TASKCTL 控制容器概述

敏捷调度TASKCTL

大数据 DevOps 分布式 自动化运维 Kafka ETL

知乎疯传3W次,堪称最强Java面试题,顺利拿下京东T5的35K*16 薪 Offer...

Java架构追梦

程序员 java面试 offer 后端开发

热烈欢迎金蝶云·苍穹正式入驻 InfoQ 写作社区!

金蝶云·苍穹

企评家|上海星光电影股份有限公司成长性报告简述文章

企评家

大数据 企业 企业评价 企业大数据 企业成长性

【堡垒机】2022年网络安全堡垒机厂商排名看这里!

行云管家

网络安全 堡垒机 移动云 网络安全堡垒机

Apache APISIX Summit ASIA 2022——5月20日开启开源生态探索之旅

API7.ai 技术团队

网关 API网关 APISIX 开源生态 summit

浅谈小程序开源业务架构建设之路

百度开发者中心

关于一家企业的成长性评价,其评价维度都有哪些?

企评家

企业 分析 成长性 评价 企业成长性分析

上云实践:从X86到ARM,跨越CPU架构鸿沟_文化 & 方法_王一 中国电子云_InfoQ精选文章