【云驻共创】5步带你掌握鲲鹏软件迁移流程
X86与鲲鹏的差异
计算机的计算基础架构,从底层的晶体管、物理原材料,二极管也就是逻辑门电路,到往上走的微架构、自评级架构,再往上面走就到了操作系统所完成的二进制机器译码汇编高级语言、JavaC等等,整个技术站从复杂到抽象,技术语言也从经历一个简单的交换指令发展为汇编进行访存和锁存,再到形成机器码,这个过程中最核心的变化在指令集上。
鲲鹏处理器架构采用精简指令集。RISC是一种执行较少类型计算机指令的微处理器。它可以以更快的速度执行操作,这使得计算机结构更简单、更合理,以提高运行速度。与X86处理器体系结构相比,RISC具有更均衡的性能功耗比。
x86处理器架构使用复杂指令集(cisc)。cisc命令集中的每个小指令都可以执行一些低级硬件操作。指令的数量众多且复杂,每条指令的长度也不同。由于指令执行的复杂性,每条指令都需要很长时间。
计算技术栈与程序执行过程
鲲鹏处理器与x86处理器的指令差异
上图列出了鲲鹏处理器和x86处理器的指令差异,列了一个简单的两个数相加,两个int型相加的这样一个简单程序。通过GCC编译完之后,通过OMGD,就能看到指令的具体的格式形式以及相应的对应的汇编代码。可以看出,对应x86平台而言, X86是复杂指令集,鲲鹏是完全兼容Arm64架构的,指令集也是和Arm64精简指令集是完全兼容的。
迁移的五个步骤
1) 迁移准备–收集软件栈信息,准备迁移环境
首先我们要收集需要迁移的软件信息,包括软件信息和硬件信息。一般来说软件信息分为以下几类:自研软件、开源软件和商业软件、中间件/编译器、操作系统/虚拟机。针对不同类型的软件信息,我们迁移的策略是不同的。硬件信息包括芯片/服务器信息。
准备迁移环境过程,华为云准备了上千台的openlab服务器,可以帮助开发者学习使用。
2)迁移分析–分析软件栈,指定迁移策略
迁移分析要做的,就是对收集到的信息和软件栈做初步分析,判断是否真正需要迁移,评估迁移的工作量。
上一步我们分析过不同的软件需要不同的迁移策略,现在我们着重分析一下不同软件的迁移策略。
- 开源软件:
- 开源软件:获取开源软件ARM64软件包或下载源码重新编译。
- 依赖组件:获取ARM64包或获取源码重新编译,闭源组件需要升级替换ARM版本或替换类似组件库。
- 自研软件:
- 编译语言:C/C++/Go类编译语言重新编译
- 解释语言:Java/Python等解释型语言替换ARM版本和JDK或PVM虚拟机。
- 商用软件:
- 获取支持鲲鹏处理器或TaiShan服务器的软件版本
- 如无法获取到兼容版本,需要更换其他类似软件。
Java迁移分析运行环境
JDK:替换支持鲲鹏版本的JDK,推荐使用OpenJDK(高版本),Huawei JDK等。
编译器:替换支持鲲鹏的编译器,推荐使用高版本的GCC,如GCC9.1。
操作环境:替换支持鲲鹏操作系统,可使用智能计算产品兼容查询助手查询。推荐使用CentOS,Ubuntu。
3)编译迁移–软件编译打包,验证基本功能
编译迁移主要分为两类,一类是代码迁移,一类是软件包迁移。
代码迁移可以分为编译型语言和解释型语言,编译型语言修改点主要涉及代码修改、编译脚本修改、内联汇编修改以及不兼容指令,如SSEIntrinsic类加速指令。解释型语言,主要分为直接翻译,如纯解释型语言开发的应用程序,如果软件含依赖库,需要重新编译。
软件包迁移主要是我们对RPM进行重构,包括扫描软件包所依赖的依赖项,对这些依赖库获取源码进行重新编译、打包。
4) 性能调优–利用五步法优化软件性能
在软件迁移完成之后,软件能够正常运行在鲲鹏平台上时,我们发现他的性能可能没有在X86中运行性能高,此时我们就需要使用软件调优策略。
性能调优的步骤大概分为:建立基准-压力测试-确定瓶颈-实施优化-确认效果5个步骤。
建立基准:根据当前的硬件配置、组网、测试模型做综合评估,建立合理的调优目标。
压力测试:通过压力测试工具对系统加压,同时监控系统数据,记录数据变化。
确定瓶颈:在压力测试下,测试系统瓶颈比较容易显现。系统的瓶颈通常会在CPU过于繁忙、IO等待/网络等待、响应时延等方面出现。
实施优化:根据瓶颈点针对性的实施优化措施,同时记录优化措施,一旦出现负向效果,及时回退。
确认效果:重启压力测试,准备好相关的工具监视系统,确认优化效果。
5)测试与认证:保证商用上线,共建鲲鹏生态
通过测试和论证保证迁移完后,性能正常达标,包括压力测试、长稳测试、鲲鹏展翅论证等。
测试的话会经过功能测试、性能测试、长稳测试,这些测试的最终目的都是为了保证规模的商用。这个其实还有一个就是鲲鹏展翅论证。在认证上面,截止2020年2月23日,累计有上千家行业伙伴获得鲲鹏展翅论证。
迁移的开发套件
1) 分析扫描工具
扫描x86平台软件安装包,识别安装包对系统SO的依赖和包内部的SO、JAR依赖,支持的软件安装包格式包括RPM、DEB、JAR、WAR、ZIP、TAR、GZIP。针对这些依赖,给出迁移的一下建议,获取源码,并进行编译。
2) 代码迁移工具
鲲鹏代码迁移工具是一款可以简化客户应用迁移到基于鲲鹏916/920的服务器的过程的工具。工具仅支持x86 Linux到Kunpeng Linux的扫描与分析,不支持Windows软件代码的扫描、分析与迁移。
当客户有x86平台上源代码的软件要迁移到基于鲲鹏916/920的服务器上时,既可以使用该工具分析可迁移性和迁移投入,也可以使用该工具自动分析出需修改的代码内容,并指导用户如何修改。
鲲鹏代码迁移工具既解决了客户软件迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的痛点,通过该工具能够自动分析并输出指导报告;也解决了用户代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等痛点。
鲲鹏代码迁移工具主要针对源代码进行扫描,检查指定的用户软件安装路径下的SO依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性。
3) 性能优化工具
包括性能分析全景,系统/进程/线程函数分析,JAVA性能分析。提供一些火焰图等信息,给出软件迁移的建议。后面会讲一下JAVA代码迁移的案例,所以我们重点讲一下JAVA性能分析。
Java性能分析是针对基于鲲鹏的服务器上运行的Java程序的性能分析和优化工具,能图形化显示Java程序的堆、线程、锁、垃圾回收等信息,收集热点函数、定位程序瓶颈点,帮助用户采取针对性优化。
Java性能分析支持的功能特性如下:
在线分析包含对于目标JVM和Java程序的双重分析。包括Java虚拟机的内部状态如Heap,GC活动,线程状态及上层Java程序的性能分析,如调用链分析,热点函数,锁分析,程序线程状态及对象生成分布等。通过Agent的方式在线获取JVM运行数据,进行精确分析。
通过采样的方式,收集JVM的内部活动/性能事件,通过录制及回放的方式来进行离线分析。这种方式对系统的额外开销很小,对业务影响不大,适用于大型的Java程序。
基于上述功能,Java性能分析为程序开发时刻调优、集成压力测试时系统调优提供两种维度的性能优化视角,具体如图1所示。
图1 性能优化视角
JAVA代码迁移
从源码到可执行案例
Java源码移植过程如下:首先安装JDK,将Java源码通过Java编译器编译;其次,对被调用的SO库,我们需要替换成aarch6464版本;再次,在程序运营时,可能涉及到一些参数的修改。
1)安装JDK改动点
在CentOS下使用yum install java-1.8.0-openjdk -y 命令进行安装
2)SO库调用jar包迁移
因为指令集的差异,不能直接运行在鲲鹏平台上,需要重新编译才能使用。这里我们用Dependency Advisor工具分析扫描jar包,直接识别所依赖SO库,下载SO源代码,随后安装编译环境比如说Maven、GCC,然后设置编译选项-fsigned-char,之后可以编译aarch64版本的SO库,然后替换掉SO库,然后我们重新打包jar文件,放在本地的目录下进行调用,这样得到的jar包是可以在鲲鹏平台上运行的。
3)设置JVM参数
本文整理自华为云社区内容共创活动第二期之【线上直播】只需五步,带你经历x86到ARM的神奇体验。
查看活动详情:https://bbs.huaweicloud.com/forum/thread-111494-1-1.html
- 点赞
- 收藏
- 关注作者
评论(0)