(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或其他二进制依赖文件,鲲鹏上重新编译;
评论(0)