「BAT」为什么必须将代码从 x86 迁移到 ARM?( 二 )

  • 迁移准备:信息收集 & 环境申请
    信息的收集主要分为两部分 , 首先是硬件信息的收集 , 主要就是一些型号 , 目的是根据此类信息匹配一个 x86 的服务器;其次是收集软件栈信息 , 包括操作系统、虚拟机、中间件、编译器、上层依赖的开源软件、商业软件、业务软件等信息 。
  • 迁移分析:软件栈分析 & 编程语言分析
    这一过程要做的就是对收集到的信息和软件栈做初步分析 , 目的是判断是否真正需要迁移 , 评估迁移的工作量 。
  • 对开源软件来说 , 因为社区发展已经比较成熟 , 迁移相对较为简单 , 通过基于鲲鹏的架构分支或者鲲鹏支持的软件包 , 自行安装即可 。 对于自研软件来讲 , 情况则较为复杂 , 如 C、C++ 这类编译型软件 , 从指令集差异化出发 , 需要重新编译后才能完成迁移 , 而 Java、Python 这种解释型的语言 , 因为其虚拟机如 JDK、PVM 已经把上层的一些跟指令集相关的东西屏蔽掉了 , 平滑地迁移过去即可 。 对于商用软件而言 , 不会公开源码 , 如果需要迁移 , 就必须要联系厂家去编译一个鲲鹏的版本 , 并且完成一系列的适配 。
    此外像运行环境、虚拟机、编译器和操作系统这些也是要进行替换 , 但是这些并非需要重新编译 , 因为在华为云鯤鹏论坛内有软件仓库 , 可以直接去软件仓库下载由鲲鹏官方所做的经过验证的版本 。
    1. 编译迁移:代码迁移 & 软件包迁移
      编译型的语言 , 之所以迁移起来比较困难 , 原因就在于涉及到比较多的迁移点 , 下面将从代码和软件包两方面进行阐述 。
    对于对指令集有依赖的代码来说 , 与 x86 架构相关的 , 都需要替换成 ARM 架构下的语言;像以 Java、Python 为代表的解释型语言 , 换一下 JDK 和 PVM 就行了 , 如果语言中调用了编译型语言 , 必须把这部分重新编译才可行 。 对于软件包来说 , 其迁移与 Java、Python 语言类似 , 即扫描出来里边的对编译型语言的依赖 , 把这一部分依赖进行替换即可 。
    1. 性能调优:性能指标测试 & 性能优化
      经过前面几个步骤之后 , 软件迁移其实就基本完成了 , 之后要对性能进行调优 , 主要分为建立基准 、压力测试 、确定瓶颈、 实施优化、 确认效果五个步骤 。
    首先需要建立调优基准 , 该基准根据当前的硬件配置、组网、测试模型来做综合评估 , 以建立合理的条有目标;其次在调优目标建立后 , 通过压测工具对软件或系统进行加压 , 在加压过程中暴露性能瓶颈 , 确定瓶颈之后对瓶颈进行优化;第四 , 注意在优化过程中要及时记录 , 因为优化并不一定是正向的 , 出现负向优化时需要及时回退;最后在优化措施实施完成后 , 需要重新启动压力测试工具以确认优化效果 。
    1. 测试与认证:压力测试 & 长稳测试 & 规模商用
      调优结束之后 , 接下来就要把功能运力、长稳运力以及性能运力都跑一遍 , 达到一个商用的标准 , 就可以筹备上线了 。 此外也可以将软件和系统进行鲲鹏展翅认证 , 其可以扩展应用的软件使用空间并能够加入鲲鹏生态 。
    不同语言的迁移注意事项
    实际上 , 像 Java、Python、Perl 这种跨平台的开发语言 , 它的迁移的技术难度相对来说是比较低的 , 主要是因为 Java 有一个 JBM , Python 中存在一个解释器 , 它们屏蔽了大部分的平台架构上的差异 。 与之相反 , C 和 C++ 的难度相对来说要高一些 , 原因是如内敛函数还有 x86 加速的一些指令 , 无法支持像微软这种闭源的开发架构 。


    推荐阅读