鲲鹏代码迁移工具介绍

代码迁移工具介绍

代码迁移工具是什么?

✨我们为什么会需要用到代码迁移工具?

✨处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。

这里我们常见到便是x86平台的代码往arm平台进行迁移

通常,代码迁移是件复杂又繁琐的工作,需要花费开发者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法指令函数库文件支持情况。

为了解决用户代码可迁移性人工排查困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整体效率低的问题,我们推出Kunpeng Porting Advisor鲲鹏代码迁移工具。

功能介绍

鲲鹏代码迁移工具是一款可以简化客户应用迁移到基于鲲鹏916/920的服务器的过程的工具。工具仅支持x86 LinuxKunpeng Linux的扫描与分析,不支持Windows软件代码的扫描、分析与迁移。

当用户有x86平台上源代码的软件要迁移到基于鲲鹏916/920的服务器上时,既可以使用该工具分析可迁移性和迁移投入,也可以使用该工具自动分析出需修改的代码内容,并指导用户如何修改

鲲鹏代码迁移工具既解决了客户软件迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的痛点,通过该工具能够自动分析并输出指导报告;也解决了用户代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等痛点。
迁移工具界面图

接下了将详细介绍各个功能

软件迁移评估

软件迁移评估主要有以下三大功能:

  • 检查用户软件包(RPM、DEB、TAR、ZIP、GZIP等文件)中包含的SO(Shared Object)依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性。
  • 检查用户Java类软件包(JAR、WAR、EAR)中包含的SO依赖库和二进制文件,并评估SO依赖库和二进制文件的可迁移性。
  • 检查指定的用户软件安装路径下的SO依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性。

下面我们以rpm包迁移为例看看如何进行软件评估
利用分析工具将rpm包上传到指定的目录下,启动迁移评估功能
软件迁移评估功能可以分析用户提供的rpm包。分析完后,工具会输出软件迁移评估报告。

例如:RPM包分析
以分析hadoop-hdfs-3.2.2-1.el7.x86_641.rpm为例(下载地址:https://ci.bigtop.apache.org/view/Releases/job/Bigtop-3.0.0/DISTRO=centos-7,PLATFORM=amd64-slave/lastSuccessfulBuild/artifact/output/hadoop/x86_64/)

首先下载rpm包

将rpm包放置到指定目录下
用软件迁移评估分析软件包功能分析该软件包
分析结果如下:

其中有snappy-java-1.0.5.jarnetty-all-4.1.48.Final.jarleveldbjni-all-1.8.jar这3个依赖文件在鲲鹏平台上是可兼容替换,用户可根据“处理建议”直接下载鲲鹏平台兼容的依赖文件并进行替换。还有bigtop-jsvchadoopbigtop-groovy这3个依赖文件在鲲鹏平台上是否兼容,需要用户进一步验证,若不兼容,需联系供应方获取鲲鹏兼容版本或获取源码并编译成鲲鹏兼容版本。

对于DEB包,分析过程和RPM包一致,差别在于最后的扫描报告展示,对于需要替换的依赖可能会有DEB包进行替换,

通过评估报告我们可以很清晰的查看缺少的依赖以及需要进行迁移的代码

源码迁移

源码迁移可以轻松实现以下功能:

  • 检查用户C/C++/ASM/Fortran/Go软件构建工程文件,并指导用户如何迁移该文件。
  • 检查用户C/C++/Fortran/Go/解释型语言软件构建工程文件使用的链接库,并提供可迁移性信息。
  • 检查用户C/C++/ASM/Fortran/Go/解释型语言软件源码,并指导用户如何迁移源文件。其中,Fortran源码支持从Intel Fortran编译器迁移到GCC Fortran编译器,并进行编译器支持特性、语法扩展的检查。
  • 检查用户Python/Java/Scala程序通过ctypes模块加载的SO文件的兼容性。
  • x86汇编指令转换,分析部分x86汇编指令,并转换成功能对等的鲲鹏汇编指令。

    源码迁移业务流程
    1、输入
    准备需要迁移的源码文件,包括C/C++/Fortran/Python/Go/Java/Scala源码文件
    汇编源代码文件
    软件构建文件
    2、源码文件扫描分析
    需要使用代码迁移工具进行识别分析,评估需要进行迁移的代码
    可以从知识库中给出迁移指导建议
    3、输出
    分析文件、分析时间戳等信息、关键修改内容进行简单说明
    报告会给出详细的csv或html报告,需要修改的代码行号,更改点及指导建议
    如果源码存在依赖库也会给出依赖库迁移的替换建议
    根据需要迁移的代码量进行评估判断工作量

软件包重构

特性说明:在鲲鹏平台上,分析待迁移软件包构成,重构并生成鲲鹏平台兼容的软件包,或直接提供已迁移了的软件包。

rpm包的重构

当用户提供的软件包是RPM时,工具会分析软件包的构成,重构并生成鲲鹏平台兼容的软件包,或直接提供已迁移了的软件包

示例
以对hadoop-hdfs-3.2.2-1.el7.x86_641.rpm为例(下载地址:https://ci.bigtop.apache.org/view/Releases/job/Bigtop-3.0.0/DISTRO=centos-7,PLATFORM=amd64-slave/lastSuccessfulBuild/artifact/output/hadoop/x86_64/hadoop-hdfs-3.2.2-1.el7.x86_64.rpm)

用户上传需要重构的软件包依赖配置文件或者授权访问外部网络获取重构软件包需要的依赖文件,然后执行重构。重构完成后,用户可以直接下载重构后的rpm软件包,同时也可以查看报告了解具体更新替换的依赖文件。

样例中的rpm包需要更新的依赖文件有3个,更新后可以在重构软件包存放路径里找到,重构后的软件包


deb包的重构
当待重构处理的软件包为deb包时,工具会分析包内包含的依赖库和二进制文件,并对deb包进行依赖文件替换,完成deb包的重构。重构过程与rpm包重构过程相同

jar/ERA包的重构
工具支持对JAR/ERA包的自动重构功能,但JAR/ERA包重构所依赖的鲲鹏平台兼容的so库需用户自己获取。

支持场景如下:

so同名替换。如/path/to/a.so,用户需提供a.so文件进行a.so文件的同名替换。
路径中带有架构信息,则新增arm/aarch64路径,同时完成同名so的新增。如/path/to/x86_64/a.so,用户需提供鲲鹏平台下的a.so文件。工具重构时会新建/path/to/aarch64/路径并将鲲鹏平台的a.so复制到此路径。

专项软件迁移

专项软件迁移功能中提供了大数据、数据库、高性能计算、web等几个领域中部分典型软件迁移的工具化集成经验,用户可以通过工具中提供的操作直接生成相应的软件包,也可以参考对应软件的操作步骤进行手工操作,编译生成需要的软件包。


下面以HPC常用软件openfoam迁移为例
软件基本信息

安装依赖包
步骤1
安装依赖组件

sudo yum -y groupinstall 'Development Tools'

步骤2
安装依赖库

sudo yum -y install zlib-devel texinfo gstreamer-plugins-base-devel libXext-devel libGLU-devel libXt-devel libXrender-devel libXinerama-devel libpng-devel libXrandr-devel libXi-devel libXft-devel libjpeg-turbo-devel libXcursor-devel readline-devel ncurses-devel

下载及安装软件
步骤3
执行编译,等待编译完成

./build_openfoam_PortingAdvisor.sh >> last_compile.log

全选执行步骤开始进行迁移

案例演示

下面以源码迁移为例,为大家演示,代码迁移工具的基本使用方法
首先在GitHub下载待迁移的源码
地址:https://github.com/kunpengcompute/devkitdemo/tree/main/Porting_advisor/testdemo/code_migration/code
可以下载完整的zip文件上传到鲲鹏服务器

wget https://github.com/kunpengcompute/devkitdemo/archive/refs/heads/main.zip

解压

下载完成后使用以下命令进行解压
unzip main.zip
如果跟我一样是直接下载的全部的压缩包就需要找到需要扫描迁移的代码,移动到sourcedcode目录下,注意只要在这里code文件才能够被扫描到

确定源码包位置正确后开始进行分析扫描


扫描完成后查看分析报告


从分析报告我们可以看的出来需要一个动态的链接库。在报告中提供了鲲鹏产品官方仓库中的下载链接需要可以直接进行下载

使用以下命令查看本服务器中是否已经下载过动态库
rpm –qa | grep zlib
执行以下命令查看动态库的安装地址
find / -name "libz.so.1"

接下来开始进行源码的修改

点击源码迁移建议


根据提出的修改意见进行修改

这里需要注意的是,可以直接在web端进行修改
值得注意的是需要修改code目录权限,使目录的文件拥有最高权限
使用以下命令修改目录权限
chmod -R 777 code
然后就可以在web端直接修改代码

这里的四个按键作用为,保存修改,撤销,取消,寻找上一个需要修改出,寻找下一需要修改出

将源码完全修改之后,接下来进入到最后的源码编译阶段
因为一些在x86平台的系统头文件在鲲鹏平台上并没有,我们需要补充一些头文件
下载与avx2neon相关的头文件

下载地址:https://github.com/kunpengcompute/AvxToNeon

我们需要将这里的头文件移动到我们的code目录下然后执行编译操作

之后需要在ksw.h文件中修改如下内容

修改完成后返回code目录

然后使用make命令进行编译

到这里源码移植成功!

鲲鹏代码迁移工具介绍相关推荐

  1. 基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】

    [摘要] 基于华为云弹性云服务器ESC(鲲鹏服务器),部署鲲鹏代码迁移工具利用扫描迁移工具进行源码分析,根据扫描建议修改源码,让源码在鲲鹏平台可以正常编译运行 零.前情提要 先来说句题外话,最近华为鲲 ...

  2. 鲲鹏Devkit代码迁移工具课堂总结

                             鲲鹏Devkit代码迁移工具课堂总结 一.为什么要用鲲鹏Devkit代码迁移工具? 1.背景介绍 在国产替代的大背景下,鲲鹏计算平台是一个非常有潜力的 ...

  3. mysql 死锁 代码_MySQL死锁问题解决的代码详细介绍

    一次MySQL死锁问题解决 一.环境CentOS, MySQL 5.6.21-70, JPA 问题场景:系统有定时批量更新数据状态操作,每次更新上千条记录,表中总记录数约为500W左右. 二.错误日志 ...

  4. 达梦数据库DM8-DM数据迁移工具介绍和简单使用

    达梦数据库DM8-DM数据迁移工具介绍和简单使用 系列文章目录 本文环境 1.DM管理工具介绍 2.DM数据迁移工具简单使用 1.打开DM数据迁移工具 2.新建工程 3.新建迁移任务DM到DM 3.新 ...

  5. 30款低代码平台介绍及目前的排名

    目前很火爆是云计算.大数据.人工智能等,而目前低代码火得发紫,查一下一此资料,发现自己7年前就用了. 一.30款低代码平台介绍 史上最全"低代码开发平台"介绍合集,2022年国内3 ...

  6. State详细代码和介绍-Topsis熵权法评分(含视频教程)、Stata灰色关联度分析

    一.topsis熵权法评分 1.数据来源:自主计算 2.时间跨度:无 3.区域范围:无 4.指标说明: 基于熵权法的topsis综合评分方法,结合了熵权法的客观求权重,以及topsis法的综合评分本教 ...

  7. LOAM 原理及代码实现介绍

    文章目录 LOAM 原理及代码实现介绍 LOAM技术点 LOAM整体框架 退化问题 代码结构 LOAM 原理及代码实现介绍 paper:<Lidar Odometry and Mapping i ...

  8. jquery实现流程图绘制工具——展现红警三建造出兵操作 ——二、代码初步介绍,项目结构与文件介绍

    目录 一.简介 二.代码初步介绍 拓展.实现红警三录像文件读取与自动分析生成流程图信息 ======================= 大爽歌作,made by big shuang ======== ...

  9. python实现红警三录像文件读取与自动分析生成流程图信息——二、项目结构与代码初步介绍

    总目录 一.简介 二.项目结构与代码初步介绍 三.拓展给mod使用 ======================= 大爽歌作,made by big shuang ================== ...

最新文章

  1. 《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换
  2. hibernate三种状态:临时状态、游离状态、持久化状态
  3. 【Android】Activity生命周期
  4. python调用math函数_Python中sqrt函数使用方法
  5. oracle未过账是什么意思,EBS R12 GL过帐问题(急)
  6. Siamese Network理解
  7. html 下拉到一定位置,浏览器向下滚动到一定位置继续滚动时,侧边导航固定在页面顶部,再滚动到一定位置时页面再向下滚动侧边导航不再固定。这种效果怎么实现呢...
  8. Win11连接WiFi后显示无Internet访问权限怎么办?
  9. Python入门--多态
  10. Java词汇表(三)L——O
  11. CSS实现文字竖排效果
  12. 遗传算法之:Hello World
  13. Pycharm下载包慢的问题
  14. 盘点近年来的各国各行较知名的互联网安全事件
  15. netware php_Linux中NetWare客户端简易安装说明(转)
  16. 没人带宝宝,所以才要送去托育园?
  17. 解题:POI 2011 Strongbox
  18. ajax拒绝访问,jQuery ajax请求 - IE11访问被拒绝
  19. python自学笔记11之文件(文本、CSV)
  20. HP加易语言数据库,全源码制作的网络验证,可运营,可自行扩展

热门文章

  1. 社群网站广告有效了!竟是普通的陈列广告+小型线上活动
  2. 计算机等级考试光敏电阻,光敏电阻的基础知识介绍
  3. 字符串拆分 split()方法
  4. P2P网络认识与实践
  5. 如何在代码中进行注释?
  6. 在官方网站获得JMeter工具的步骤
  7. 计算机专业要考什么证书?
  8. 金仓数据库 KingbaseES SQL 语言参考手册 (13. SQL语句:ALTER SYNONYM 到 COMMENT)
  9. 牛顿迭代法求平方根倒数
  10. 安全断路器市场现状及未来发展趋势分析