代码迁移工具是什么 处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发 者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识 别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法、 指令、函数和库文件支持情况。为了解决用户代码可迁移性人工排查 盟鹏代码迁移工具 困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整 体效率低的问题,我们推出Kunpeng Porting Advisor鲲鹏代码迁移 工具。
鲲鹏代码迁移工具是一款可以简化应用迁移到鲲鹏架构服务器过 程的工具。主要面向鲲鹏平台的开发者、用户和第三方待迁移软件提 供方开发工程师,对海量代码进行快速地自动化扫描和分析,提供专 业的迁移指导报告。同时能够自动分析出需修改的代码内容,并指导 如何修改,帮助开发者实现高效的代码迁移。同时支持原生开发代 码亲和检查等能力。
代码迁移工具功能
软件迁移评估 源码迁移 软件包重构 专项软件迁移 鲲鹏亲和分析
.非源码软件包 ·软件源码:C/C++/汇编 .将待迁移的RPM/DEB包自 ·对部分专项开源软件提供一 .64位运行模式检查
(RPM/DEB/ZIP/TAR等) /Fortran等 动重构为鲲鹏版本 键快速迁移 (CentOS 7.6) ·结构体字节对齐检查
.检查需迁移的依赖文件 .迁移报告 .提供已有鲲鹏软件或直接获 及迁移参考 .结构体缓存行对齐检查
.评估报告 .修改建议一键替换 取鲲鹏依赖文件重构 .大数据,数据库,Web, .内存一致性检查
.获取重构后的鲲鹏软件 HPC .构建亲和检查
功能特性
代码迁移工具可以作为独立软件提供给鲲鹏生态用户安装使用,支持的功能特性如下:
· 当前工具支持五组功能,支持的功能特性分别如下:
· 软件迁移评估
·检查用户提供的软件安装包,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。
•检查用户在x86服务器上已安装的软件,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。
. 源码迁移
·检查用户C/C++/汇编/Fortran代码软件构建工程文件,并指导用户如何迁移该文件。
•检查用户C/C++/汇编/Foruan/python/Java/Scala/Go软件构建工程文件使用的链接库,并提供可迁移性信息。
·检查用户C/C++/汇编/Fortran软件源码,并指导用户如何迁移源文件。
· 软件包重构,分析用户×86软件包构成,重构为适用于鲲鹏平台的软件包。
· 专项软件迁移,基于我们丰富的软件迁移经验,帮助用户快速迁移Web、数据库、大数据、高性能计算四大解决方案类软件。
. 鲲鹏亲和分析,目前含64位运行模式检查、结构体字节对齐检查、缓存行字节对齐检查、内存一致性检查、构建亲和检查。
· 用户通过安全传输协议上传软件源码、软件包、二进制文件等资源到工作空间,也可以从Web页面上直接对工作目录下的文件进行删除清理或者漫盖重命名。
· 支持命令行方式、Web、IDE插件三种工作模式,后两种方式下支持多用户并发扫描。
. 特别说明:工具不支持迁移windows环境下的软件或者IOS/Mac OS平台应用至Kunpeng平台Linux环境下。
应用场景
为c/c++代码提供迁移指导
编译构建文件迁移 类型 功能说明 X86指令集代码 Arm指令集鲲鹏代码
makefile/cmak 64位编译 定义编译生成的应用程序为 64位, 编译选项不同 -m64 删除
elists/autoconfi 编译选项不同
ARM指令集 型 Makefile中定义指令集类型, //指定目标环境CPU类型 //指定CPU类型是ArmV8.2-A
由x86修改为ARM -march=skylake -march=armv8.2-a
-mtune=tsv110
c/c++源码迁移 数据类型 定义字符类型变量 //x86平台“char”是有符号数 //鲲鹏平台“char“ 类型默认是无符号类型,可变
chara=‘a’ //修改Makefie. 增加-fsigned-char,chara=‘a’
编译器定义宏 原有X86版编译宏替换成 #if defined #if defined ( _x86_64_)...
Arm版 _x86_64_ #endif defined( -aarch64-)...
#endif #else... #endit
.支持自动化迁移开源软件和构建鲲鹏软件包
代码迁移工具之专项软件迁移 代码迁移工具之软件包重构
. 一键下载开源代码、并编译、构建鲲鹏软件包 . 快速构建鲲鹏软件包
. 支持Kudu、MySQL & Nginx等开源软件迁移 . 支持RPM和DEB格式的软件包
.鲲鹏亲和检查
运行模式检查 :支持GCC 4.8.5-9.3.0版本32位应用向64位应用的迁移预检
字节对齐检查:支持对比32位和64位两种运行模式下的结构体数据类型内存占用情况比较,辅助优化内存占用
缓存行对齐:对C/C++源码中结构 体变量进行128字节对齐检查,提升访存性能
内存一致性检查:适用于鲲鹏服务器 ,提供静态检查工具和编译器自动修复工具两种模式使用。前者集成在代码迁移工具中提供;后者以独立GCCPatch形式提供,供用户在编译程序代码时使用
构建亲和力检查:分析makefile、 CMakeLists.txt中可以替换成鲲鹏加速库的内容,并提供替换建议和功能修复
如何访问和使用
代码迁移工具提供两种用户访问模式,安装时由用户选择,同一套环境只能安装一种:
• CLI方式:
通过命令行方式使用代码迁移工具各功能,最终移植分析结果输出到.csv和.json文件,用户可以根据迁移建议进行处理。
• Web/IDE插件方式:
通过浏览器/IDE远程使用代码迁移工具各功能,最终迁移分析结果输出到.csv和.html文件(可下载)中,用户可以根据迁移建议进行处理。如果当前用户已经在登录使用,重复登录会挤掉前面的登录。用户的各种分析和迁移任务都在自己的工作空间内完成。访问Web界面时,对本地浏览器的要求如下表所示。
源码迁移
• 识别C/C++/Fortran/汇编源代码,提供修改建议;Make、CMake、Automake编译选项、编译宏的解析及迁移建议
• 支持100%Intrinsic函数转换(6000+个),包括MMX、SSE及AVXIntrinsic等
• 支持Fortran内联函数和语法特性以及编译选项的识别
• 支持Go语言迁移,对go程序使用cgo编译部分中的编译选项、宏定义提供兼容性检查,给出修改建议
• 支持python、Java、Scala语言,对程序中的动态链接库提供兼容性检查,给出修改建议
源码迁移业务流程
输入 分析处理 输出
源码文件: 源码文件扫描分析: 报告文件:
• C/C++/Fortran/Python/G • 用户 • 分析文件、分析时间戳等信息
• o/Java/Scala源代码文件 C/C++/Fortran/python/Go/Java/Scala需要迁移部分识别 •关键修改内容综述,简单说明详细csv或html报告,需修改的
代码行号,更改点及指导建议
• 汇编源代码文件 汇编源码同功能指令集、兼容指令集迁移部分 • 编译依赖库迁移或替换建议
• 软件构建文件 •从构建工程配置文件中识别需要迁移/替代的编译依赖库 •迁移预估工作量
根据知识库给出迁移指导建议
软件包重构
• 识别分析用户x86软件包构成,重构适用于鲲鹏平台软件包,并输出重构报告
软件包重构功能主要对包内包含的.so文件,.a文件和jar/.war文件进行分析,会对其中需要适配鲲鹏平台的依赖文件进行替换,然后执行软件包的重构,最终输出鲲鹏兼容版本的软件安装包。 如果包中需要的依赖不确定是否鲲鹏平台兼容,可在鲲鹏平台验证后,手动上传依赖配置
专项软件迁移
•一键下载开源代码,并编译、构建为鲲鹏软件包
•支持大数据、数据库、Web、高性能计算等场景主流软件的一键编译迁移
内存一致性
•静态检查,检查用户软件迁移到鲲鹏平台可能存在的弱内存序问题并修复自动修复功能,更新用户使用的GCC编译器,在用户软件的编译过程中自动完成弱内存序问题的修复 支持下载生成的BC文件
• 支持下载静态检查工具产生的BC文件,可根据实际需要进行BC文件扫描分析 静态检查工具、编译器自动修复工具组合使用,可一键式修复• 支持自动生成目标工程的中间文件,不需要用户修改编译脚本
源码迁移1
操作步骤 上传源码,选择 C/C++、make参数,执行扫描操作,对扫描出源码需修改文件进行逐个修改,然后进行保存。
案例下载链接: https://github.com/kunpengcompute/devkitdemo/tree/main/Porting_advisor/testdemo/code_migration/code
源码迁移2
Python语言扫描,识别出工程中使用的依赖库,对其兼容性进行判断,样例报告中可直接下载使用依赖库。
Go语言扫描,识别出工程中使用的依赖库,对于可兼容性替换的依赖库给出提示建议。
案例下载链接:go语言:https://github.com/rai-project/go-caffe
python语言:https://github.com/rjpower/ctypes-snappy
软件迁移与软件包重构
软件迁移评估:找出so依赖库和可执行文件,并评估so依赖库和可执行文件的可迁移性。
软件包重构:用户上传需要重构的软件包和依赖配置文件,重构完成后,用户可以直接下载重构后的rpm软件包,然后在鲲鹏平台上直接使用。
案例下载链接:parLet-1.5.0+cdh5.12.1+187-1.cdh5.12.1.p0.3.el7.noarch.rpm
处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发 者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识 别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法、 指令、函数和库文件支持情况。为了解决用户代码可迁移性人工排查 盟鹏代码迁移工具 困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整 体效率低的问题,我们推出Kunpeng Porting Advisor鲲鹏代码迁移 工具。
鲲鹏代码迁移工具是一款可以简化应用迁移到鲲鹏架构服务器过 程的工具。主要面向鲲鹏平台的开发者、用户和第三方待迁移软件提 供方开发工程师,对海量代码进行快速地自动化扫描和分析,提供专 业的迁移指导报告。同时能够自动分析出需修改的代码内容,并指导 如何修改,帮助开发者实现高效的代码迁移。同时支持原生开发代 码亲和检查等能力。
代码迁移工具功能
软件迁移评估 源码迁移 软件包重构 专项软件迁移 鲲鹏亲和分析
.非源码软件包 ·软件源码:C/C++/汇编 .将待迁移的RPM/DEB包自 ·对部分专项开源软件提供一 .64位运行模式检查
(RPM/DEB/ZIP/TAR等) /Fortran等 动重构为鲲鹏版本 键快速迁移 (CentOS 7.6) ·结构体字节对齐检查
.检查需迁移的依赖文件 .迁移报告 .提供已有鲲鹏软件或直接获 及迁移参考 .结构体缓存行对齐检查
.评估报告 .修改建议一键替换 取鲲鹏依赖文件重构 .大数据,数据库,Web, .内存一致性检查
.获取重构后的鲲鹏软件 HPC .构建亲和检查
功能特性
代码迁移工具可以作为独立软件提供给鲲鹏生态用户安装使用,支持的功能特性如下:
· 当前工具支持五组功能,支持的功能特性分别如下:
· 软件迁移评估
·检查用户提供的软件安装包,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。
•检查用户在x86服务器上已安装的软件,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。
. 源码迁移
·检查用户C/C++/汇编/Fortran代码软件构建工程文件,并指导用户如何迁移该文件。
•检查用户C/C++/汇编/Foruan/python/Java/Scala/Go软件构建工程文件使用的链接库,并提供可迁移性信息。
·检查用户C/C++/汇编/Fortran软件源码,并指导用户如何迁移源文件。
· 软件包重构,分析用户×86软件包构成,重构为适用于鲲鹏平台的软件包。
· 专项软件迁移,基于我们丰富的软件迁移经验,帮助用户快速迁移Web、数据库、大数据、高性能计算四大解决方案类软件。
. 鲲鹏亲和分析,目前含64位运行模式检查、结构体字节对齐检查、缓存行字节对齐检查、内存一致性检查、构建亲和检查。
· 用户通过安全传输协议上传软件源码、软件包、二进制文件等资源到工作空间,也可以从Web页面上直接对工作目录下的文件进行删除清理或者漫盖重命名。
· 支持命令行方式、Web、IDE插件三种工作模式,后两种方式下支持多用户并发扫描。
. 特别说明:工具不支持迁移windows环境下的软件或者IOS/Mac OS平台应用至Kunpeng平台Linux环境下。
应用场景
为c/c++代码提供迁移指导
编译构建文件迁移 类型 功能说明 X86指令集代码 Arm指令集鲲鹏代码
makefile/cmak 64位编译 定义编译生成的应用程序为 64位, 编译选项不同 -m64 删除
elists/autoconfi 编译选项不同
ARM指令集 型 Makefile中定义指令集类型, //指定目标环境CPU类型 //指定CPU类型是ArmV8.2-A
由x86修改为ARM -march=skylake -march=armv8.2-a
-mtune=tsv110
c/c++源码迁移 数据类型 定义字符类型变量 //x86平台“char”是有符号数 //鲲鹏平台“char“ 类型默认是无符号类型,可变
chara=‘a’ //修改Makefie. 增加-fsigned-char,chara=‘a’
编译器定义宏 原有X86版编译宏替换成 #if defined #if defined ( _x86_64_)...
Arm版 _x86_64_ #endif defined( -aarch64-)...
#endif #else... #endit
.支持自动化迁移开源软件和构建鲲鹏软件包
代码迁移工具之专项软件迁移 代码迁移工具之软件包重构
. 一键下载开源代码、并编译、构建鲲鹏软件包 . 快速构建鲲鹏软件包
. 支持Kudu、MySQL & Nginx等开源软件迁移 . 支持RPM和DEB格式的软件包
.鲲鹏亲和检查
运行模式检查 :支持GCC 4.8.5-9.3.0版本32位应用向64位应用的迁移预检
字节对齐检查:支持对比32位和64位两种运行模式下的结构体数据类型内存占用情况比较,辅助优化内存占用
缓存行对齐:对C/C++源码中结构 体变量进行128字节对齐检查,提升访存性能
内存一致性检查:适用于鲲鹏服务器 ,提供静态检查工具和编译器自动修复工具两种模式使用。前者集成在代码迁移工具中提供;后者以独立GCCPatch形式提供,供用户在编译程序代码时使用
构建亲和力检查:分析makefile、 CMakeLists.txt中可以替换成鲲鹏加速库的内容,并提供替换建议和功能修复
如何访问和使用
代码迁移工具提供两种用户访问模式,安装时由用户选择,同一套环境只能安装一种:
• CLI方式:
通过命令行方式使用代码迁移工具各功能,最终移植分析结果输出到.csv和.json文件,用户可以根据迁移建议进行处理。
• Web/IDE插件方式:
通过浏览器/IDE远程使用代码迁移工具各功能,最终迁移分析结果输出到.csv和.html文件(可下载)中,用户可以根据迁移建议进行处理。如果当前用户已经在登录使用,重复登录会挤掉前面的登录。用户的各种分析和迁移任务都在自己的工作空间内完成。访问Web界面时,对本地浏览器的要求如下表所示。
源码迁移
• 识别C/C++/Fortran/汇编源代码,提供修改建议;Make、CMake、Automake编译选项、编译宏的解析及迁移建议
• 支持100%Intrinsic函数转换(6000+个),包括MMX、SSE及AVXIntrinsic等
• 支持Fortran内联函数和语法特性以及编译选项的识别
• 支持Go语言迁移,对go程序使用cgo编译部分中的编译选项、宏定义提供兼容性检查,给出修改建议
• 支持python、Java、Scala语言,对程序中的动态链接库提供兼容性检查,给出修改建议
源码迁移业务流程
输入 分析处理 输出
源码文件: 源码文件扫描分析: 报告文件:
• C/C++/Fortran/Python/G • 用户 • 分析文件、分析时间戳等信息
• o/Java/Scala源代码文件 C/C++/Fortran/python/Go/Java/Scala需要迁移部分识别 •关键修改内容综述,简单说明详细csv或html报告,需修改的
代码行号,更改点及指导建议
• 汇编源代码文件 汇编源码同功能指令集、兼容指令集迁移部分 • 编译依赖库迁移或替换建议
• 软件构建文件 •从构建工程配置文件中识别需要迁移/替代的编译依赖库 •迁移预估工作量
根据知识库给出迁移指导建议
软件包重构
• 识别分析用户x86软件包构成,重构适用于鲲鹏平台软件包,并输出重构报告
软件包重构功能主要对包内包含的.so文件,.a文件和jar/.war文件进行分析,会对其中需要适配鲲鹏平台的依赖文件进行替换,然后执行软件包的重构,最终输出鲲鹏兼容版本的软件安装包。 如果包中需要的依赖不确定是否鲲鹏平台兼容,可在鲲鹏平台验证后,手动上传依赖配置
专项软件迁移
•一键下载开源代码,并编译、构建为鲲鹏软件包
•支持大数据、数据库、Web、高性能计算等场景主流软件的一键编译迁移
内存一致性
•静态检查,检查用户软件迁移到鲲鹏平台可能存在的弱内存序问题并修复自动修复功能,更新用户使用的GCC编译器,在用户软件的编译过程中自动完成弱内存序问题的修复 支持下载生成的BC文件
• 支持下载静态检查工具产生的BC文件,可根据实际需要进行BC文件扫描分析 静态检查工具、编译器自动修复工具组合使用,可一键式修复• 支持自动生成目标工程的中间文件,不需要用户修改编译脚本
源码迁移1
操作步骤 上传源码,选择 C/C++、make参数,执行扫描操作,对扫描出源码需修改文件进行逐个修改,然后进行保存。
案例下载链接: https://github.com/kunpengcompute/devkitdemo/tree/main/Porting_advisor/testdemo/code_migration/code
源码迁移2
Python语言扫描,识别出工程中使用的依赖库,对其兼容性进行判断,样例报告中可直接下载使用依赖库。
Go语言扫描,识别出工程中使用的依赖库,对于可兼容性替换的依赖库给出提示建议。
案例下载链接:go语言:https://github.com/rai-project/go-caffe
python语言:https://github.com/rjpower/ctypes-snappy
软件迁移与软件包重构
软件迁移评估:找出so依赖库和可执行文件,并评估so依赖库和可执行文件的可迁移性。
软件包重构:用户上传需要重构的软件包和依赖配置文件,重构完成后,用户可以直接下载重构后的rpm软件包,然后在鲲鹏平台上直接使用。
案例下载链接:parLet-1.5.0+cdh5.12.1+187-1.cdh5.12.1.p0.3.el7.noarch.rpm