鲲鹏代码迁移工具介绍

news2025/1/18 0:42:07

鲲鹏代码迁移工具介绍

代码迁移工具介绍

代码迁移工具是什么?

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

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

这里我们常见到便是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命令进行编译
在这里插入图片描述

到这里源码移植成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主流组件库学习

主流组件库差异性对比 NutUI - 京东研发的移动端 UI 组件库,支持 Vue3、Taro 多端适配,面向电商业务场景Vant - 有赞研发的移动端 UI 组件库,支持 Vue3、微信小程序、支付宝小程序TDesign Mobile - 腾讯研发的移动端组件库,适合在…

Redis第二章_实战篇_短信登录+缓存策略+秒杀+分布式锁>>

Redis第二章_实战篇_短信登录缓存策略秒杀分布式锁>> 文章目录Redis第二章_实战篇_短信登录缓存策略秒杀分布式锁>>开篇导读1、短信登录1.1、导入黑马点评项目1.1.1 、导入SQL1.1.2、有关当前模型1.1.3、导入后端项目1.1.4、导入前端工程1.1.5 运行前端项目1.2 、基…

Spring(十一)- Spring Bean的依赖注入注解

文章目录一、Spring Bean的依赖注入注解1. 通过Value直接注入普通属性2. 通过Value注入properties文件中的属性3. Autowired注解,用于根据类型进行注入4. Qualifier配合Autowired可以完成根据名称注入Bean实例,使用Qualifier指定名称5. Resource注解既可…

三款Zookeeper可视化工具、ZooInspector、prettyZoo、ZooKeeperAssistant

三款Zookeeper可视化工具、ZooInspector、prettyZoo、ZooKeeperAssistant①Zookeeper图形化工具:ZooInspector1.下载完后,解压压缩包,进入zookeeper-dev-ZooInspector.jar目录后执行run jar包命令2.登录客户端:输入zk服务的ip和端…

XCTF1-web disabled_button weak_auth view_source cookie backup

一个不能按的按钮 题目描述 X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢? 进入场景 题目提示为前端设置的问题,查看网页源码,定位…

Django + Nginx https部署实战(第二辑)

如何使用Nginx把网站升级为Https? Https是Http协议的升级版,由于证书的引入,使得用户与网站之间的通讯变得更加安全。 在使用https之前,我们必须了解的事情 证书颁发机构 证书颁发机构是一家知名且受信任的组织,它对网…

基于MMDetection训练VOC格式数据集

一 环境说明 基于前述安装MMDetection,数据集为VOC格式,主要版本如下: Python:3.7.8 CUDA:11.3 cuDNN:8.4.0 torch:1.12.0 torchvision:0.13.0 mmcv-full:1.6.0 MMDetec…

机器学习极简入门笔记-5-无监督学习-K-means

目录 第17章 KNN算法(有监督学习算法,放在此位置是为了与下一章的K-means做对比) 17.1 KNN算法原理 17.2 KNN中的K 第18章 K-means——最简单的聚类算法 18.1 K-means算法步骤 18.2 K-means算法具体细节 18.3 启发式算法 18.4 K-mean…

介绍a股level2数据接口委托队列的作用

a股level2数据接口可以实现量化交易的准确性,那用户在交易的过程中会发现在“委托队列”中,如果出现一些有规律性的单子,往往是主力之间的盘口暗语。 例如排在靠前的都是大单,封单相当坚决,如果细心一点还会发现都是拖…

Spring Security 自定义拦截器Filter实现登录认证

前言 需求来源: 微信小程序获取授权码code, 通过授权码code, 获取微信用户信息(比如openid,unionId), 并记录登录状态(比如token信息的获取); 原本打算使用Spring Security中OAuth2.0的机制 实现用小程序登录,发现小程序再已经获取授权码code登录流程和Spring Secu…

Intellij插件之~图形界面Swing UI Designer

资料 Java Swing 介绍 JavaFX快速入门 Java Swing 图形界面开发简介 GUI Designer Basics scrcpy ScrcpyController Services 创建一个Gui Form文件(类form文件) 创建一个Gui Form 此时生成两个类, 是自动关联的 鼠标可以拖入控件,每拖入一个组件,在TestForm…

领悟《信号与系统》之 信号与系统的描述-下节

信号与系统的描述-下节一、信号的基本运算1. 信号的基本运算1. 加法 、减法2. 乘法、除法3. 微分 、差分4.积分、迭分2. 关于时间(自变量)的运算1. 位移2. 反折3. 尺度变换二、阶跃信号与冲激信号1. 单位阶跃信号2. 单位阶跃信号的特性3. 单位冲激信号4.…

Android架构师学习必备学习宝典《Android架构开发手册》

吐槽 我想每个程序员在写代码的时候可能都有这些历程(夸张): 这坨代码谁写的,怎么要这样写啊,我这个需求该怎么加代码!(尝试在shit山上小心地走,并添加新代码)写的好难受,shit越改越chou了…算了&#xf…

协程设计原理

文章目录1、协程的背景1.1、同步与异步1.2、为什么使用协程1.3、协程的适用场景2、协程的原语操作3、协程的切换3.1、汇编实现4、协程的定义4.1、多状态集合设计4.2、调度器的定义4.2、调度策略生产者消费者模式多状态运行5、api 封装5.1、hook 机制5.2、hook 函数原型5.3、hoo…

React笔记——github案例(用到axios 和 pubsub)

案例github用上脚手架配置代理 1.完成静态页面构建 小技巧:先在原html页面搜索最外侧框 是否有样式存在,如果样式不存在则不需要剪切过去 给需求或效果分好组件,分别是 Search 和 List 、App 组件 class都改为 className 给图片添加上特定…

JS高级(二):继承、数组的一些api、Object.defineProperty()、call、apply、bind

JavaScript高级(二)一、继承1.call方法改变this指向2.构造函数中模拟类的super实现属性继承3.构造函数借助原型对象实现方法继承4.类的本质二、ES5几个新增方法1.数组forEach()2.数组filter()3.数组some()4.字符串trim()三、Object.definProperty()四、改…

基于STM32结合CubeMX学习Free-RT-OS的源码之深入学习软件定时器实现过程

概述 关于在CUBEMX上的配置 介绍 软件定时器基于硬件定时器实现。 软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,…

什么是需求分析,如何进行需求分析?

目录 前言 需求分析在分析什么 如何看待产品原型设计 技术同学培养产品意识 如何应对需求变更问题 总结 重点:配套学习资料和视频教学 前言 这篇文章,我会将软件工程中关于需求分析相关的知识进行总结梳理,并以自己理解的方式进行阐述…

iNFTnews|风口之上,耐克推出的web3平台.SWOOSH能否引领市场?

本周一,著名的体育运动品牌耐克宣布,公司将进一步进军Web3,并将发布一个旨在通过旗下的数字可穿戴设备吸引用户的新平台——.SWOOSH。 耐克表示,.SWOOSH将成为Web3教育的资源库,以及购买和交易虚拟运动鞋或运动衫等数…

Oracle SQL执行计划操作(3)——物化视图相关操作

3. 物化视图相关操作 该类操作与SQL语句执行计划中访问物化视图数据的路径和方式相关,主要包括物化视图访问类相关操作。根据不同的具体SQL语句及其他相关因素,如下各操作可能会出现于相关SQL语句的执行计划。 1)MAT_VIEW ACCESS FULL 对物化视图(Materialized View)直…