本文课程链接:https://www.hikunpeng.com/zh/developer/live/detail/1533984621405396993
本文主要介绍鲲鹏代码迁移工具的功能与特性。通过本文,你可以了解到:
① 了解什么是代码迁移工具
② 了解代码迁移工具的功能
③ 了解到代码迁移工具在实际案例中如何运用
## 1.代码迁移工具是什么
处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法、指令、函数和库文件支持情况。为了解决用户代码可迁移性人工排查困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整体效率低的问题,我们推出kunpeng porting advisor鲲鹏代码迁移工具。

2.代码迁移工具功能
鲲鹏代码迁移工具是一款可以简化应用迁移到鲲鹏架构服务器过程的工具。主要面向鲲鹏平台的开发者、用户和第三方待迁移软件提供方开发工程师,对海量代码进行快速地自动化扫描和分析,提供专业的迁移指导报告。同时能够自动分析出需修改的代码内容,并指导如何修改,帮助开发者实现高效的代码迁移。同时支持原生开发代码亲和检查等能力。
3.功能特性
代码迁移工具可以作为独立软件提供给鲲鹏生态用户安装使用
支持的功能特性如下∶
当前工具支持五组功能,支持的功能特性分别如下:
软件迁移评估
检查用户提供的软件安装包,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包os发行版官方下载链接。·检查用户在x86服务器上已安装的软件,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包os发行版官方下载链接。
源码迁移
· 检查用户c/c /汇编/fortran代码软件构建工程文件,
并指导用户如何迁移该文件。
检查用户c/c /汇编/fortran/python/java/scalalgo软件构建工程文件使用的链接库,并提供可迁移性信息。
- 检查用户c/c /汇编/fortran软件源码,并指导用户如何迁移源文件。
- 软件包重构,分析用户x86软件包构成,重构为适用于鲲鹏平台的软件包。
- 专项软件迁移,基于我们丰富的软件迁移经验,帮助用户快速迁移web、数据库、大数据、高性能计算四大星辰平台的解决方案类软件。鲲鹏亲和分析,目前含64位运行模式检查、结构体字节对齐检查、缓存行字节对齐检查、内存一致性检查、构建亲和检查。
- 用户通过安全传输协议上传软件源码、软件包、二进制文件等资源到工作空间,也可以从web页面上直接对工作目录下的文件进行删除清理或
者覆盖重命名。
- 支持命令行方式、web、ide插件三种工作模式,后两种方式下支持多用户并发扫描。
> 特别说明:工具不支持迁移windows环境下的软件或者iosmacos平台应用至kunpeng平台linux环境下。
4.应用场景

对最常用的x86汇编指令进行识别并转换
- 最常用的100o 条汇编指令自动翻译。
针对受支持的嵌入式汇编指令,提供修改指导;针对完全由受支持的完整汇编指令构成的文件,支持自动转换为结果汇编文件;
- 支持对尚无法指导修改和转换的汇编指令的识别、提醒。

鲲鹏迁移亲和检查可以告知用户需要修改的地方,而不需要自己去查找,节约时间,提高开发效率。
5.部署方式
代码迁移工具采用单机部署方式,部署环境要求如下表所示。

6. 如何访问使用
代码迁移工具提供两种用户访问模式,安装时由用户选择,同一套环境只能安装一种:
- cli方式:
通过命令行方式使用代码迁移工具各功能,最终移植分析结果输出到.csv和.json文件,用户可以根据迁移建议进行处理。.
- web/ide插件方式:
通过浏览器ide远程使用代码迁移工具各功能,最终迁移分析结果输出到.csv和.html文件(可下载)中,用户可以根据迁移建议进行处理。如果当前用户已经在登录使用,重复登录会挤掉前面的登录。用户的各种分析和迁移任务都在自己的工作空间内完成。访问web界面时,对本地浏览器的要求如下表所示。
## 2. 代码迁移工具的功能
### 2.1 源码迁移
- 识别c/c /fortran(汇编源代码,提供修改建议;make、cmake、automake编译选项、编译宏的解析及迁移建议
- 支持100%intrinsic函数转换(6000 个),包括mmx、sse及avx intrinsic等
- 支持fortran内联函数和语法特性以及编译选项的识别
- 支持go语言迁移,对go程序使用cgo编译部分中的编译选项、宏定义提供兼容性检查,给出修改建议
- 支持python、java、scala语言,对程序中的动态链接库提供兼容性检查,给出修改建议
### 2.2 源码迁移业务流程

### 2.3 源码迁移
源码迁移中如果有不同的源码混合编程则需要填写全部源码类型

### 2.4 迁移报告
### 2.5 汇编翻译
鲲鹏devkit支持全汇编翻译和嵌入式汇编翻译
- 支持汇编代码自动识别,一键替换迁移,一分钟完成汇编代码的迁移。
- x86汇编常用指令100%识别,1000 指令自动翻译,覆盖80%的常用应用场景。
### 2.6 软件迁移评估
- 识别检查x86平台软件安装包或已安装软件中使用的动态链接库、静态链接库和可执行文件,并将检查出的文件与工具内置的依赖文件列表进行比较匹配,从而为用户提供迁移建议
- jar,war包扫描增强,识别鲲鹏平台已经支持的依赖,提供更精准的依赖兼容替换建议

### 2.7 软件迁移评估流程

### 2.8 软件包重构
识别分析用户x86软件包构成,重构适用于鲲鹏平台软件包,并输出重构报告
软件包重构功能主要对包内包含的.so文件,.a文件和.jarl.war文件进行分析,会对其中需要适配鲲鹏平台的依赖文件进行替换,然后执行软件包的重构,最终输出鲲鹏兼容版本的软件安装包。如果包中需要的依赖不确定是否鲲鹏平台兼容,可在鲲鹏平台验证后,手动上传依赖配置文件,进行重构操作。

### 2.9专项软件迁移
- —键下载开源代码,并编译、构建为鲲鹏软件包
- 支持大数据、数据库、web、高性能计算等场景主流软件的一键编译迁移

### 2.10 内存一致性
- 静态检查,检查用户软件迁移到鲲鹏平台可能存在的弱内存序问题并修复
- 支持下载静态检查工具产生的bc文件,可根据实际需要进行bc
- 自动修复功能,更新用户使用的gcc编译器,在用户软件的编译过程中自动文件扫描分析完成弱内存序问题的修复
- 静态检查工具、编译器自动修复工具组合使用,可一键式修复
- 支持自动生成目标工程的中间文件,不需要用户修改编译脚本

## 3.案例演示
### 3.1 源码迁移1
案例下载链接:
https://github.com/kunpengcompute/devkitdemo/tree/main/porting_advisor/testdemo/code_migrationlcode
操作步骤上传源码,选择cic 、make参数扫描出源码需修改文件进行逐个修改然后进行保存。

### 3.2 源码迁移2
python语言扫描,识别出工程中使用的依赖库,对其兼容性进行判断,样例报告中可直接下载使用依赖库。
### 3.3 软件迁移与软件包重构案例
软件迁移评估:找出so依赖库和可执行文件,并评估so依赖库和可执行文件的可迁移性。
软件包重构:用户上传需要重构的软件包和依赖配置文件,重构完成后,用户可以直接下载重构后的rpm软件包,然后在鲲鹏平台上直接使用。

### 3.4 内存一致性案例
操作步骤
上传源码,填写编译命令,样例中使用“make no_lapacke=1”,点击下一步,开始bc文件解析,选择生成的bc文件,进行弱内存问题检查。

感谢分享
--- 高级云网管
2022-6-8 10:21
感谢分享