【云驻共创】【鲲鹏DevKit直播】代码迁移工具关键特性与实战演示
本次直播介绍DevKit代码迁移工具通过自动扫描和分析待迁移代码,为应用从X86到鲲鹏平台的迁移提供专业指导,简化迁移过程。重点介绍代码迁移工具的主要功能,以及C++/C++的迁移实践,帮助用户快速掌握工具使用技巧。
前言
主要介绍DevKit代码迁移工具可以简化应用到鲲鹏平台的迁移过程,解决软件迁移过程中人工分析投入大、准确率低、兼容性人工排查困难、反复依赖编译调错定位等痛点,主要提供以下主要功能:
- 软件迁移评估
扫描并自动分析软件包(非源码包),提供可迁移性评估报告,同时提供鲲鹏兼容的依赖文件下载链接。
- 源码迁移
扫描并自动分析软件代码(包括C/C++/Fortran/汇编/Python/Java/Scala/Go等),评估迁移所需替换的依赖文件,给出修改建议,并将源码中的x86汇编指令翻译成功能对等的鲲鹏汇编指令。用户可根据建议快速修改,或一键替换建议源码。
- 软件包重构
分析软件包的构成及依赖性,将平台相关的依赖文件替换为鲲鹏平台兼容的版本,并重构成适用于鲲鹏平台的软件包。
- 专项软件迁移
支持将部分专项软件源码一键自动化迁移修改、编译并构建成鲲鹏平台兼容的软件包。
- 增强功能
支持软件代码质量的检查功能,如在64位环境中运行的兼容性检查、结构体字节对齐检查和内存一致性检查等增强功能。
目录
1.代码迁移工具介绍
- 代码迁移工具是什么
- 代码迁移工具逻辑架构
- 功能特性
- 应用场景
- 部署方式
- 如何访问和使用
2.新增功能&功能变化介绍
3.案例演示
一、代码迁移工具介绍
代码迁移工具是什么
处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法、指令、函数和库文件支持情况。为了解决用户代码可迁移性人工排查困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整体效率低的问题,华为推出Kunpeng Porting Advisor华为鲲鹏代码迁移工具。
华为鲲鹏代码迁移工具是一款可以简化应用迁移到鲲鹏架构服务器过程的工具。主要面向鲲鹏平台的开发者、用户和第三方待迁移软件提供方开发工程师,对海量代码进行快速地自动化扫描和分析,提供专业的迁移指导报告。同时能够自动分析出需修改的代码内容,并指导如何修改,帮助开发者实现高效的代码迁移。
代码迁移工具逻辑架构
鲲鹏代码迁移工具是一款可以简化客户应用迁移到基于鲲鹏916/920的服务器的过程的工具。工具仅支持x86 Linux到Kunpeng Linux的扫描与分析,不支持Windows软件代码的扫描、分析与迁移。
当客户有x86平台上源代码的软件要迁移到基于鲲鹏916/920的服务器上时,既可以使用该工具分析可迁移性和迁移投入,也可以使用该工具自动分析出需修改的代码内容,并指导用户如何修改。
鲲鹏代码迁移工具既解决了客户软件迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的痛点,通过该工具能够自动分析并输出指导报告;也解决了用户代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等痛点。
代码迁移工具功能
功能 |
描述 |
---|---|
软件迁移评估 |
|
源码迁移 |
|
软件包重构 |
在鲲鹏平台上,分析待迁移软件包构成,重构并生成鲲鹏平台兼容的软件包,或直接提供已迁移了的软件包。 |
专项软件迁移 |
在鲲鹏平台上,对部分常用的解决方案专项软件源码,进行自动化迁移修改、编译并构建生成鲲鹏平台兼容的软件包。 |
增强功能 |
|
工具提供工作空间容量检查,当工作空间容量过低时,向用户提供告警信息。
工具向用户提供软件迁移报告,提供迁移工作量评估,支持用户自定义工作量评估标准。
用户通过安全传输协议上传软件源码、软件包、二进制文件等资源到工作空间,也可以下载软件迁移报告到本地。
工具的安装方式有Web和CLI两种,Web方式下支持Web浏览器访问和CLI命令行方式访问,CLI方式下只支持CLI命令行访问。其中Web浏览器访问支持所有的功能,CLI命令行访问只支持软件迁移评估和源码迁移功能。Web方式下支持多用户并发扫描。
- 软件迁移评估:·非源码软件包(RPM/DEB/JAR/ZIP/TAR等) ·检查需迁移的依赖文件·评估报告
- 源码迁移:·软件源码:C/C++/汇编/Fortran等 ·迁移报告 ·修改建议一键替换
- 软件包重构:·将待迁移的RPM/DEB包自动重构为鲲鹏版本 ·提供已有鲲鹏软件或直接获取鲲鹏依赖文件重构 ·获取重构后的鲲鹏软件
- 专项软件迁移:·对部分专项开源软件提供一键快速迁移(CentOS 7.6)及迁移参考 ·大数据、数据库、Web、HPC
- 增强功能:·64位运行模式检查 ·结构体字节对齐检查 ·内存一致性检查(静态检查&编译器自动修复)
功能特性
代码迁移工具可以作为独立软件提供给鲲鹏生态用户安装使用,支持的功能特性如下:。
当前工具支持五组功能,支持的功能特性分别如下:
软件迁移评估:
- 检查用户提供的软件安装包,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。
- 检查用户在x86服务器上已安装的软件,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。
源码迁移:
- 检查用户C/C++/汇编/Fortran代码软件构建工程文件,并指导用户如何迁移该文件。
- 检查用户C/C++/汇编/Fortran/python/Java/Scala/Go软件构建工程文件使用的链接库,并提供可迁移性信息。
- 检查用户C/C++/汇编/Fortran软件源码,并指导用户如何迁移源文件。
软件包重构,分析用户x86软件包构成,重构为适用于鲲鹏平台的软件包。
专项软件迁移,基于华为丰富的软件迁移经验,帮助用户快速迁移Web、数据库、大数据、高性能计算四大解决方案类软件。
增强功能,目前含64位运行模式检查、结构体字节对齐检查、内存一致性检查。前两者帮助用户检查x86平台上32位应用修改为64位应用涉及的修改点、字节对齐相关性能优化;内存一致性检查功能帮助用户识别已迁移至鲲鹏平台的应用在何处存在弱内存序问题风险,并提供修复指令。
用户通过安全传输协议上传软件源码、软件包、二进制文件等资源到工作空间,也可以从Web页面上直接对工作目录下的文件进行删除清理或者覆盖重命名。支持命令行方式和Web两种工作模式,Web方式下支持多用户并发扫描。
特别说明:工具不支持迁移windows环境下的软件或者IOS/Mac OS平台应用至Kunpeng平台Linux环境下。
SO依赖库
Linux中的SO(Shared Object)文件,其名称类似“libname.so.1.1.1”。
依赖字典
用来记录鲲鹏平台已经支持的SO文件、软件及获取方式(二进制安装或者源码编译安装)的列表,可下载并更新。
功能特性-软件迁移评估流程
1、在登录成功的页面里选择“软件迁移评估”功能,勾选“分析软件包”选项,单击“上传”上传待分析的x86的RPM包,操作系统根据实际情况选择,默认为CentOS 7.6 ,然后单击“开始分析”。
2、分析完成后会在右侧历史报告中生成分析报告,单击图中报告名或查看报告进入报告。报告中会显示需要替换的可执行文件、jar包、so文件以及安装过程中依赖的软件包如图所示。
以分析hadoop-hdfs-2.10.1-1.el7.x86_64.rpm为例,扫描结果包含需要迁移的依赖库文件,具体处理建议所表示。表中“/opt/portadv/portadmin/”路径的“/opt/”为鲲鹏代码迁移工具的安装路径,默认为“/opt/”,“/portadmin/”为当前分析软件包的用户的工作空间路径。如果报告中显示需要替换的jar包鲲鹏maven仓库已存在,则可跳过jar包编译的过程。重构的过程中会自动从鲲鹏maven仓库下载并替换相关jar包。
序号 |
依赖库文件 |
所在路径 |
处理建议 |
---|---|---|---|
1 |
bigtop-groovy |
该可执行文件是从当前分析的软件包中获取的依赖信息。 |
扫描后软件包不支持鲲鹏平台,需要自行编译后再替换。 |
2 |
hadoop |
该可执行文件是从当前分析的软件包中获取的依赖信息。 |
|
3 |
bigtop-jsvc |
该可执行文件是从当前分析的软件包中获取的依赖信息。 |
|
4 |
leveldbjni-all-1.8.jar |
/opt/portadv/portadmin/package/hadoop-hdfs-2.10.1-1.el7.x86_64.rpm/usr/lib/hadoop-hdfs/lib/leveldbjni-all-1.8.jar |
由分析报告中的分析结果可知,这2个jar包兼容鲲鹏平台,可直接单击右边“下载”下载。 |
5 |
netty-all-4.1.50.Final.jar |
/opt/portadv/portadmin/package/hadoop-hdfs-2.10.1-1.el7.x86_64.rpm/usr/lib/hadoop-hdfs/lib/netty-all-4.1.50.Final.jar |
3、获取需要替换的对应的二进制文件、so文件。
分析扫描报告,当前版本RPM包需要替换的jar包有3个:leveldbjni-all-1.8.jar、netty-all-4.0.52.Final.jar。这3个jar包鲲鹏maven仓库已存在,不用编译。只需关注可执行文件和so文件。
功能特性-源码迁移
Megahit是一个超快速和内存高效的NGS汇编程序。它是针对多基因组优化的,但也适用于一般的单基因组组装和单细胞组装。Megahit源码包存在大量汇编,迁移到鲲鹏平台前需要识别并验证通过“鲲鹏代码迁移工具”迁移后的代码是否正确,以及识别出是否还有“鲲鹏代码迁移工具”遗漏的相关文件。
本实践使用“鲲鹏代码迁移工具”分析嵌入式汇编软件项目,给出合理建议,帮助用户迁移嵌入式汇编软件项目。
语言:C++/C/Python
开源协议:GPL3.0
建议的版本
“鲲鹏迁移工具”建议使用版本为2.2.T3。
Megahit建议使用版本为“Megahit 1.2.9”。
功能特性-源码迁移报告
- 在页面左侧,选择“源码迁移”。
- 在历史报告的列表中,单击指定分析任务的报告名称。
进入“迁移报告”界面。
参数 |
说明 |
---|---|
配置信息 |
显示源码文件存放路径,编译器版本,构建工具,编译命令,目标操作系统和目标系统内核版本。 |
与架构相关的依赖库文件 |
显示SO文件。
|
需要迁移的源文件 |
显示需要迁移的源文件个数,需要迁移的源码行数和汇编代码行数,通过单击操作列“查看建议源码”可以快速进入对应的源码迁移建议页面。 |
功能特性-代码迁移业务流程
1、输入
- 源码文件:.C/C++/Fortran/Python/Go/Java/Scala源代码文件
- 汇编源代码文件
- 软件构建文件
2、分析处理
源码文件扫描分析:
- 用户:C/C++/Fortran/python/Go/Java/Scala需要迁移部分识别
- 汇编源码同功能指令集、兼容指令集迁移部分
- 从构建工程配置文件中识别需要迁移/替代的编译依赖库
- 根据知识库给出迁移指导建议
3、输出
报告文件:
- 分析文件、分析时间戳等信息
- 关键修改内容综述,简单说明
- 详细csv或html报告,需修改的代码行号,更改点及指导建议
- 编译依赖库迁移或替换建议
- 迁移预估工作量
应用场景
C/C++ 代码迁移
编译型语言源码——可执行程序过程介绍
-
编译型语言:典型的C/C++/Go语言,都属于编译型语言
-
编译型语言开发的程序在从x86处理器迁移到鲲鹏处理器时,必须经过重新编译才能运行
-
从源码到程序的过程:源码需要由编译、汇编器翻译成机器指令,再通过链接器链接库函数生成机器语言程序
C/C++代码需移植的原因?
架构差异:x86和鲲鹏处理器(aarch64)属于不同的架构(预处理阶段预编译宏可能有所差异,编译器有些编译选项争对不同的架构也可能有不同的设计)
指令集差异:x86--复杂指令集,鲲鹏处理器--精简指令集(汇编指令存在差异)
向量寄存器差异:x86和鲲鹏处理器使用向量寄存器不同,向量指令集也存在差异
软件迁移评估:自动扫描并分析软件包(非源码包)、已安装的软件,提供可迁移性评估报告。
源码迁移:当用户有软件要迁移到基于鲲鹏916/920的服务器上时,可先用该工具分析源码并得到迁移修改建议。
软件包重构:帮助用户重构适用于鲲鹏平台的软件安装包。
专项软件迁移:使用华为提供的软件迁移模板修改、编译并产生指定软件版本的安装包,该软件包适用于鲲鹏平台。
增强功能:支持x86平台GCC 4.8.5~GCC 9.3版本32位应用向64位应用的64位运行模式检查,结构体字节对齐检查和鲲鹏平台上的内存一致性检查。
对80%最常用的x86汇编指令进行识别并转换
最常用的1000+条汇编指令自动翻译,覆盖80%的常用应用场景。
针对受支持的嵌入式汇编指令,提供修改指导;针对完全由受支持的完整汇编指令构成的文件,支持自动转换为结果汇编文件;支持对尚无法指导修改和转换的汇编指令的识别、提醒。
工具支持对x86平台高频汇编代码的自动转换功能,可以将x86汇编代码转换为鲲鹏汇编代码,当前支持70%常用场景下的汇编代码转换,随着版本更新完善,后续将达到x86汇编指令的全覆盖。
汇编指令
- 存在以下场景时,仅能提示用户注意转换代码的使用,不能提示100%精确的修改建议:
- 当函数存在参数的时候,提示可能存在特殊结构导致函数转换出错
- 将栈上的数据入栈传参时,默认该参数为整型
- 存在以下场景时无法支持100%准确的自动转换,仅能提示需要手动转换:
- goto语句、call语句和ret语句
- 使用段寄存器或未赋值的物理寄存器
- 访问全局符号
- 输入输出的变量位宽大于128位
- 输入输出的全局变量大于21个
- 指令的位宽与变量位宽不一致
- 使用intel 和 AT&T混合的汇编格式
- 汇编存在语法错误
支持自动化迁移开源软件和构建鲲鹏软件包
代码迁移工具之专项软件迁移:
- 一键下载开源代码、并编译、构建鲲鹏软件包
- 支持Kudu、MySQL & Nginx等开源软件迁移
代码迁移工具之软件包重构:
- 快速构建鲲鹏软件包
- 支持RPM和DEB格式的软件包
支持增强功能
64位运行模式检查
- 适用于x86服务器
- 支持x86平台GCC 4.8.5~GCC 9.3版本32位应用向64位应用的迁移预检
字节对齐检查
- 适用于x86服务器
- 支持对比32位和64位两种运行模式下的结构体数据类型内存占用情况比较,辅助优化内存占用
内存一致性检查
- 适用于鲲鹏服务器
- 提供静态检查工具和编译器自动修复工具两种模式使用。前者集成在代码迁移工具中提供;后者以独立GCCPatch形式提供,供用户在编译程序代码时使用。
部署方式
单机部署,即将鲲鹏代码迁移工具部署在用户的开发、测试的x86服务器或者基于鲲鹏916/920的服务器。
如何访问和使用
代码迁移工具提供两种用户访问模式,安装时由用户选择,同一套环境只能安装一种:
CLI方式:
通过命令行方式使用代码迁移工具各功能,最终移植分析结果输出到.csv和.json文件,用户可以根据迁移建议进行处理。
Web/IDE插件方式:
通过浏览器/DE远程使用代码迁移工具各功能,最终迁移分析结果输出到csv和.html文件(可下载)中,用户可以根据迁移建议进行处理。如果当前用户已经在登录使用,重复登录会挤掉前面的登录。用户的各种分析和迁移任务都在自己的工作空间内完成。访问Web界面时,对本地浏览器的要求如下表所示。
二、新增功能&功能变化介绍
交付特性 (特性&价值描述)
T10语言迁移优化:支持go语言源码分析. Fortran语言迁移增强.C/C++语言源码迁移增强·支持Python/Java/Scala解释型语言的扫描分析
内存一致性:扩展语言支持场景,对关键算法进行改进 ·增加自动修复功能 ·支持下载静态检查工具产生的BC文件 ·支持自动生成目标工程的中间文件
软件迁移评估:Jar、War包扫描提示优化,识别鲲鹏平台已经支持的依赖,在报告中给出提示;
专项软件迁移:·扩充“一键式软件迁移”支持的软件范围:增加HPC场景5款软件的过移文持;
支持Top16款操作系统: 新增支持openEuler 20.03(LTS-SP1) 、openEuler 20.03 (LTS-uoS Server 20 Euler (1000).BC- Linux 7.6、BC- Linux 7.7和普华(iSoft)5.1六款操作系统运行环境和目标操作系统;
源码迁移
- 识别C/C+/Fortran/汇编源代码,提供修改建议;Make、CMake、Automake编译选项、编译宏的解析及迁移建议
- 支持100%Intrinsic函数转换(6000+个),包括MMX 、SSE及AVX Intrinsic等
- 支持更多的Fortran内联函数和诰法特性以及编译选项的识别
- 支持Go语言迁移,对go程序使用cgo编译部分中的编译选项、宏定义提供兼容性检查,给出修改建议
- 支持python、Java、Scala语言,对程序中的动态链接库提供兼容性检查,给出修改建议
- 新增支持openEuler、BC_Linux等六款主流操作系统
C/C++
- x86Intrinsic函数实现了一键式自动迁移;
- 平台相关宏扫描准确率和覆盖率提升;
- 构建文件编译选项、宏定义识别率提升。
Fortran
- Fortran内联函数识别(增加xx条),增加Fortran语法特性解析,整体准确率提升70%;
- 构建文件中针对Fortran语言中所使用编译选项的识别率和准确率达到100%。
Go
- 对编译选项、宏定义、依赖库提供兼容性检查,一键下载替换。
Python/Java/Scala
- 识别源码中的加载动态库的函数;
- 识别依赖库文件,进行兼容性检查,一键下载替换。
汇编翻译
支持汇编代码自动识别。,一键替换迁移,一分钟完成汇编代码的迁移。
X86汇编常用指令100%识别。1000+指令自动醛译,覆盖80%%的常用应用场景。
软件迁移评估
识别检查x86平台软件安装包或已安装软件中使用的动态链接库、静态链接库和可执行文件,并将检查出的文件与工具内置的依赖文件列表进行比较匹配,从而为用户提供迁移建议。
Jar、war包扫描增强,识别鲲鹏平台已经支持的依赖,提供更精准的依赖兼容替换建议。
软件包重构
识别分析用户x86软件包构成,重构适用于鲲鹏平台软件包,并输出重构报告。
软件包重构功能主要对包内包含的.so文件,.a文件和.jar/.war文件进行分析,会对其中需要适配鲲鹏平台的依赖文件进行替换,然后执行软件包的重构,最终输出鲲鹏兼容版本的软件安装包。
如果包中需要的依赖不确定是否鲲鹏平台兼容,可在鲲鹏平台验证后,手动上传依赖配置文件,进行重构操作。
专项软件迁移
- 一键下载开源代码,并编译、构建为鲲鹏软件包
- 支持大数据、数据库、Web、高性能计算等场景主流软件的一键编译迁移
- 增加HPC场景5款软件的迁移支持
内存一致性
内存一致性
- 静态检查,检查用户软件迁移到鲲鹏平台可能存在的弱内存序问题并修复
- 自动修复功能,更新用户使用的GCC编译器,在用户软件的编译过程中自动完成弱内存序问题的修复
- 扩展语言支持场景,对关键算法进行改进,提升工具的覆盖率,降低工具的误报率
- 支持下载静态检查工具产生的BC文件,可根据实际需要进行BC文件扫描分析
- 静态检查工具、编译器自动修复工具组合使用,可一键式修复
- 支持自动生成目标工程的中间文件,不需要用户修改编译脚本
三、案例演示
源码迁移
案例下载链接: https://github.com/kunpengcompute/devkitdemo/tree/main/Porting_advisor/testdemo/code_migration/code
操作步骤上传源码,选择C/C++、make参数,执行扫描操作,对扫描出源码需修改文件进行逐个修改,然后进行保存。
案例下载链接:
go语言https://github.com/rai-project/go-caffe
python语言https://github.com/rjpower/ctypes-snappy
Python语言扫描。识别出工程中使用的依赖库,对其兼容性进行判断,样例报告中可直接下载使用依赖库。
Go语言扫描,识别出工程中使用的依赖库,对于可兼容性替换的依赖库给出提示建议。
软件迁移与软件包重构
案例下载链接: parquet-1.5.0+cdh5.12.1+187-1.cdh5.12.1.p0.3.el7.noarch.rpm
软件迁移评估:找出so依赖库和可执行文件,并评估so依赖库和可执行文件的可迁移性。
软件包重构:用户上传需要重构的软件包和依赖配置文件,重构完成后,用户可以直接下载重构后的rpm软件包,然后在鲲鹏平台上直接使用。
内存一致性
案例下载链接: https://github.com/xianyi/OpenBLAS/releases?page=2
操作步骤:上传源码,填写编译命令,样例中使用“make NO_LAPACKE=1”,点击下一步,开始BC文件解析,选择生成的BC文件,进行弱内存问题检查。
专项软件迁移
案例下载链接:高性能计算-GROMACS
专项软件迁移功能中提供了大数据、数据库、高性能计算、web等几个领域中部分典型软件迁移的经验工具化集成,用户可以通过工具中提供的操作直接生成相应的软件包,也可以参考对应软件的操作步骤进行手工操作,编译生成需要的软件包。
根据提示信息,进行环境配置,当满足环境检查的时候,下方开始迁移按钮置于可点击状态,点击开始迁移,开始该软件的迁移工作。
总结
DevKit代码迁移工具通过自动扫描和分析待迁移代码,为应用从X86到鲲鹏平台的迁移提供专业指导,简化迁移过程。重点介绍代码迁移工具的主要功能,以及C/C++的迁移实践,帮助用户快速掌握工具使用技巧。
鲲鹏代码迁移工具既解决了客户软件迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的痛点,通过该工具能够自动分析并输出指导报告;也解决了用户代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等痛点。
本文整理自华为云社区【内容共创系列】活动。
查看活动详情:https://bbs.huaweicloud.com/blogs/314887
相关任务详情:【鲲鹏DevKit直播】代码迁移实践
华为开发者空间发布
让每位开发者拥有一台云主机
- 点赞
- 收藏
- 关注作者
评论(0)