鲲鹏操作系统迁移

举报
yd_238822659 发表于 2025/05/03 10:12:05 2025/05/03
【摘要】 (1)鲲鹏迁移实践高级语言经过编译器编译成汇编语言,汇编器生成二进制机器码,从而操作机器码作为指令,运行;鲲鹏处理器和其他处理器的指令有差异;迁移准备:收集软件栈信息,准备迁移环境;迁移分析:业务软件和运行环境:比如开源软件,自研软件和商业软件,对开源软件获取软件包或者下载源码重新编译;对自研软件:编译型语言重新编译,解释语言替换aRm版本或者JDK等;(2)迁移概述代码,安装版本JDK等迁...
(1)鲲鹏迁移实践
高级语言经过编译器编译成汇编语言,汇编器生成二进制机器码,从而操作机器码作为指令,运行;
鲲鹏处理器和其他处理器的指令有差异;
迁移准备:收集软件栈信息,准备迁移环境;
迁移分析:
业务软件和运行环境:比如开源软件,自研软件和商业软件,
对开源软件获取软件包或者下载源码重新编译;
对自研软件:编译型语言重新编译,解释语言
替换aRm版本或者JDK等;
(2)迁移概述
代码,安装版本JDK等迁移:编译型语言重新编译,纯解释型语言直接翻译;软件包含依赖库,需要重新编译;
软件包迁移:
rpm或deb等,扫描软件依赖或者可执行程序,编译型语言要重新编译,解释型语言基于对应虚拟机运行,最后软件打包成适应鲲鹏平台;

(3)性能调优:
建立基准,压力测试,确定瓶颈,实施优化,确认效果;

(3)c/c++代码迁移
编译型语言迁移时候要重新编译;
x86是复杂指令集,鲲鹏是经典指令集;
两者寄存器也有差异;
源码经过编译器预处理生成
预编译文件,经过编译生成汇编代码,再经过汇编生成目标文件;
c/c++代码编译涉及包括编译构建脚本和c/c++源码;
编译构建脚本包括指定数据类型生成代码特性等选项;

源码类文件包括:
编译宏移植(用户自定义和编译器自定义)
编译器自带builtin函数移植,大部分需要迁移的builtin函数集中在sse intrinsic函数里;
内联汇编移植
sse intrinsic函数移植(mmx/sse函数移植,avx函数移植):
方法1可以基于avx2neoh.h,sse2neon.h开源
文件移植;方法2可以手动替换移植;
SIMD(single instrinction multi data)是单指令处理多数据流的并行处理技术,在批量处理数据操作实惠向量化加速运算;
(4)编译构建过程:
获取源码(github或者第三方开源社区获得)
准备编译环境(安装编译器gcc等)
执行makefifle编译可执行程序;
替换依赖库,重新编译或替换依赖x86的so库;
将可执行程序安装在生产或者测试系统;

porting advisor工具实现代码迁移;
(5)java/python代码迁移
1、Java的话安装JDK改动点;
替换为鲲鹏的aarch64的so库;

2、python的话要安装特定版本depython以及
替换为鲲鹏的aarch64的so库;

3、安装运行环境:软件包或者编译安装,
如果代码包含so库,将so库源码重新编译,替换原来发的so库,最后打包为jar包;
(6)maven仓软件构建:
仓库分类:本地仓库:存放在本地磁盘${user.home}/.m2下;
远程仓库:国内镜像或者公司自己搭建私服;
中央仓库:maven团队自己维护的jar包;
搜索顺序:本地仓库-远程仓库-中央仓库;
构建流程:x86依赖文件替换成鲲鹏依赖文件;
可以配置优先搜索鲲鹏maven仓,编辑配置文件${maven.home}/conf/setting.xml,在profiles标签下增加鲲鹏maven仓;
(7)软件包迁移:
rpm软件包有的包含x86等依赖,不能直接鲲鹏平台上使用,需要重新编译构建;
使用Porting工具扫描x86rpm识别x86依赖文件,如果是jar依赖文件,从鲲鹏maven仓寻找或者直接编译,如果是so或其他二进制依赖文件,鲲鹏上重新编译;
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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