【系列一:DevKit代码迁移工具】 第一讲:鲲鹏代码迁移工具介绍学习笔记

举报
Tianyi_Li 发表于 2022/11/27 14:45:03 2022/11/27
【摘要】 【系列一:DevKit代码迁移工具】 第一讲:鲲鹏代码迁移工具介绍

【系列一:DevKit代码迁移工具】 第一讲:鲲鹏代码迁移工具介绍

代码迁移工具是什么

处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法指令、函数和库文件支持情况。为了解决用户代码可迁移性人工排查困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整体效率低的问题,华为鲲鹏特别地推出了Kunpeng Porting Advisor鲲鹏代码迁移工具。

鲲鹏代码迁移工具是一款可以简化应用迁移到鲲鹏架构服务器过程的工具。主要面向鲲鹏平台的开发者、用户和第三方待迁移软件提供方开发工程师,对海量代码进行快速地自动化扫描和分析,提供专业的迁移指导报告。同时能够自动分析出需修改的代码内容,并指导如何修改,帮助开发者实现高效的代码迁移。同时支持原生开发代码亲和检查等能力。

简单来说,代码迁移工具是帮助我们评估迁移工作量和快速完成代码迁移的工具。

image.png

代码迁移工具功能

代码迁移工具功能涉及软件迁移评估、源码迁移、软件包重构、专项软件迁移和鲲鹏亲和分析。其中专项软件迁移是由华为鲲鹏工程师预先做好的一些常用软件迁移,开发者如有用到可以直接使用,无需做源码迁移。

image.png

功能特性

代码迁移工具可以作为独立软件提供给鲲鹏生态用户安装使用,支持的功能特性如下:

当前工具支持五组功能,支持的功能特性分别如下:

软件迁移评估

检查用户提供的软件安装包,识别依赖关系,并提供鳃鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。

检查用户在x86服务器上已安装的软件,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。

源码迁移

检查用户C/C++/汇编/Fortran代码软件构建工程文件,并指导用户如何迁移该文件。

检查用户C/C++/汇编/Fortran/python/Java/Scala/Go软件构建工程文件使用的链接库,并提供可迁移性信息。

检查用户C/C++/汇编/Fortran软件源码,并指导用户如何迁移源文件。

软件包重构

分析用户x86软件包构成,重构为适用于鲲鹏平台的软件包。

专项软件迁移

基于华为鲲鹏丰富的软件迁移经验,帮助用户快速迁移eb、数据库、大数据、高性能计算四大解决方案类软件。

鲲鹏亲和分析

目前含64位运行模式检查、结构体字节对齐检查、缓存行字节对齐检查、内存一致性检查、构建亲和检查。

用户通过安全传输协议上传软件源码、软件包、二进制文件等资源到工作空间,也可以从Web页面上直接对工作目录下的文件进行删除清理或者覆盖重命名。

支持命令行方式、Web、IDE插件三种工作模式,后两种方式下支持多用户并发扫描。

特别说明: 工具不支持迁移windows环境下的软件或者i0S/Mac OS平台应用至Kunpeng平台Linux环境下。

应用场景

为C/C++代码提供迁移指导

比如,在原x86代码中有-m64的选项,表示生成的应用程序为64位,这是因为x86还兼容32位程序,但鲲鹏平台上都是原生64位程序,所以迁移到鲲鹏平台后,可直接删除该选项。此外,x86还有执行CPU类型,这里需要改为鲲鹏平台的Arm指令集。还有数据类型和编译器定义宏等等,都需要注意。

image.png

对最常用的x86汇编指令进行识别并转换

image.png

这里主要是涉及一些与具体平台绑定的问题,比如汇编代码迁移时,有些指令是与x86平台息息相关,即仅能在x86平台编译,其他平台无法识别。这里就需要转为相同语义,功能相同的鲲鹏平台代码。

支持自动化迁移开源软件和构建鲲鹏软件包

image.png

鲲鹏亲和检查

image.png

这里需要注意的地方很多,需要对硬件架构和特性很熟悉,很难一一展开开,老师也做了些介绍,不过感觉还是要在自己亲身实践时才能有所体会和理解。

部署方式

代码迁移工具采用单机部署方式,部署环境要求如下表所示:

image.png

如何访问和使用

代码迁移工具提供两种用户访问模式,安装时由用户选择,同一套环境只能安装一种:

CLI方式:

通过命令得方式使用代码迁移工具各功能,最终移植分析结果输出到.csv和json文件,用户可以根据迁移建议进行处理。

Web/IDE插件方式:

通过浏览器/IDE远程使用代码迁移工具各功能,最终迁移分析结果输出到.csv和.html文件(可下载中,用户可以根据迁移建议进行处理。如果当前用户已经在登录使用,重复登录会挤掉前面的登录。用户的各种分析和迁移任务都在自己的工作空间内完成。访问Web界面时,对本地浏览器的要求如下表所示。

image.png

源码迁移

  • 识别C/C++/Fortran/汇编源代码,提供修改建议; Make、CMake、Automake编译选项、编译宏的解析及迁移建议

  • 支持100%Intrinsic函数转换(6000+个),包括MMX、SSE及AVXIntrinsic等

  • 支持Fortran内联函数和语法特性以及编译选项的识别

  • 支持Go语言迁移,对go程序使用cgo编译部分中的编译选项、宏定义提供兼容性检查,给出修改建议

  • 支持python、Java、Scala语言,对程序中的动态链接库提供兼容性检查,给出修改建议

image.png

源码迁移业务流程

image.png

源码迁移业务方面,华为鲲鹏工程师做了很多工作,做了大量的封装,提供了较好的可用性,尽量采用自动化和更友好地方式来支持开发者进行源码迁移。

源码迁移

image.png

按照如图所示地选项,按照要求,根据自己环境的实际情况填写或选择即可,基本上是比较简单了。理论上,选择的更具体、更准确,那么分析结果就会更好,后续迁移工作也就有了更多的参考。

源码迁移报告

image.png

还是得自己操作一下试试,光看还是不够的,等实际用到的时候,再来看看吧。

汇编翻译

  • 支持汇编代码自动识别,一键替换迁移,一分钟完成汇编代码的迁移。

  • x86汇编常用指令100%识别,1000+指令自动翻译,覆盖80%的常用应用场景。

image.png

如上图所示,较好实现了迁移,并且保留了原始的代码和迁移替换的代码,很方便开发者学习了解。

软件迁移评估

  • 识别检查x86平台软件安装包或已安装软件中使用的动态链接库、静态链接库和可执行文件,并将检查出的文件与工具内置的依赖文件列表,进行比较匹配,从而为用户提供迁移建议

  • Jar、war包扫描增强,识别鳃鹏平台已经支持的依赖,提供更精准的依赖兼容替换建议

image.png

这里可以直接使用华为鲲鹏工程师已经迁移好的一些包。

软件迁移评估流程

image.png

软件包重构

  • 识别分析用户x86软件包构成,重构适用于鲲鹏平台软件包,并输出重构报告

image.png

专项软件迁移

  • 一键下载开源代码,并编译、构建为鲲鹏软件包

  • 支持大数据、数据库、Web、高性能计算等场景主流软件的一键编译迁移

image.png

内存一致性

  • 静态检查,检查用户软件迁移到鳃鹏平台可能存在的弱内存序问题并修复

  • 自动修复功能,更新用户使用的GCC编译器,在用户软件的编译过程中自动完成弱内存序问题的修复

  • 支持下载静态检查工具产生的BC文件,可根据实际需要进行BC文件扫描分析

  • 静态检查工具、编译器自动修复工具组合使用,可一键式修复

  • 支持自动生成目标工程的中间文件,不需要用户修改编译脚本

image.png

总结

按照官方的介绍,代码迁移工具是一款可以简化客户应用迁移到基于鲲鹏916/920的服务器的过程的工具。该工具可扫描并自动分析待迁移软件,提供可迁移性评估报告;也可对待迁移软件进行源码分析,准确定位需迁移的代码,并给出友好的迁移指导或一键代码替换;同时支持将x86软件包重构成鲲鹏平台软件包、专项软件一键迁移及其他鲲鹏亲和分析等。

不过需要注意的是,根据官方的建议,代码迁移工具仅适用于开发和测试环境,仅支持x86 Linux软件迁移到鲲鹏Linux上的扫描、分析与迁移。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。