绿盟赛—鲲鹏软件迁移实践

目录

鲲鹏软件迁移概述

为什么要做软件迁移

计算技术栈与程序执行过程

在这里插入图片描述

鲲鹏处理器与x86处理器的指令差异

int main(){
	int a = 1;
	int b = 2;
	int c = 0;
	c = a + b;
	return c;
}

在这里插入图片描述

软件迁移过程概述

五个步骤完成软件迁移

在这里插入图片描述

迁移准备——搜集软件栈信息,准备迁移环境

在这里插入图片描述

迁移分析——分析软件栈,制定迁移策略

在这里插入图片描述

编译迁移——软件编译打包,验证基本功能

在这里插入图片描述

性能调优——利用五步法优化软件性能

在这里插入图片描述

测试与认证——保障商用上线,共建鲲鹏生态

在这里插入图片描述

典型案例

华为内部项目:大型平台软件历时4个月完成规模商用

在这里插入图片描述

互联网行业伙伴快速实现软件迁移

在这里插入图片描述

金融行业核心系统整体切换案例

在这里插入图片描述

鲲鹏开发套件,使能开发者,加速算力升级

在这里插入图片描述

C/C++代码迁移

编译性语言源码——可执行程序过程介绍

从源码到可执行程序——编译性语言

  • 编译性语言:典型的如C/C++/Go语言,都属于编译性语言。编译性语言开发的程序在从x86处理器迁移到鲲鹏处理器时,必须经过重新编译才能运行
  • 从源码到程序的过程:源码需要由编译器、汇编器翻译成机器指令,再通过链接器链接库函数生成机器语言程序
    在这里插入图片描述
    C/C++代码需移植的原因:
  • 架构差异: x86和鲲鹏处理器(aarch64)属于不同的架构
  • 指令集差异: x86–复杂指令集,鲲鹏处理器–精简指令集
  • 向量寄存器差异: x86和鲲鹏处理器使用向量寄存器不同,向量指令集也存在差异

C/C++代码编译构建过程

** C/C++代码工程主要包括两类文件:**编译构建脚本、C/C++源码
在这里插入图片描述
可能设计的移植项

  • 编译构建脚本类文件
    编译选项的移植(指定数据类型、生成代码特性、目标执行器架构、处理器硬件加速功能等)
  • C/C++源码类文件
    编译宏移植(用户自定义宏移植、编译器自定义宏移植)
    编译器自带builtin函数移植
    内联汇编移植
    SSE intrinsic函数移植(MMX/SSE类函数移植、AVX函数移植)

在这里插入图片描述

  1. 获取源码:通过github或第三方开源社区获取
  2. 准备编译环境:安装编译器gcc等
  3. 使用源码中的Makelists.txt或configure脚本生成makefile
  4. 执行makefile编译可执行程序
  5. 替换依赖库:重编译或替换依赖X86平台的so库
  6. 将可执行程序安装部署到生产或测试系统

说明: configure脚本也常由源码中的autogen.sh或bootstrap.sh脚本执行后产生

C/C++代码迁移典型移植类问题

代码迁移——编译迁移、编译选项移植

在这里插入图片描述
编译选项修改(典型编译脚本修改参考):

  • Cmakelists.txt文件修改
    ●add_ definitions( -Wall -mabi=lp64 -9)
    ●set(CMAKE_ CXX_ FL AGS “-Wall - mabi=lp64-g” )
    ●add_ compile_ options(-Wall -mabi=lp64 -9)
  • Makefile文件修改
    cc/g++ -Wall -mabi=lp6A -9 -0…-…

链接: https://gcc.gnu.org/onlinedocs/gcc- 7.3.0/gcc/Submodel-Options.html#Submodel-Options

代码迁移——编译迁移、编译宏移植

在这里插入图片描述

代码迁移——builtin函数移植

在这里插入图片描述

代码迁移——内联汇编函数移植

在这里插入图片描述

内联汇编规则参考: https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html#Using-Assembly-Language-with-C
在这里插入图片描述

代码迁移——SSE intrinsic函数移植

  • SIMD(Single Instruction Multi Data)是一 种单指令处理多数据流的并行处理技术,能够在批量数据操作时进行向量化运算加速,具有较高的执行效率,在多媒体处理、矩阵运算等场景都有广泛的应用。
    在这里插入图片描述
代码迁移- SSE itrinsic函数移植(MMX/SSE)

在这里插入图片描述

代码迁移SSE intrinsic函数移植(AVX)

在这里插入图片描述

代码迁移一SSE intrinsic函数移植方法

➢方法1: 基于avx2neon.h、SSE2NEON.h开源文件移植

  • 鲲鹏AvxToNeon开源 工程: https://github.com/kunpengcompute/AvxToNeon
  • 包含SSE类intrinsic函数的NEON实现(字符串比较、crc32值计算、 popcnt计算等)
  • 包含基础的AVX256、AVX512类intrinsic函数的NEON实现 (Load、 strore、 运算、移位等操作指令)
  • 开源的SSE2NEON工程: https://github.com/DLTcollab/sse2neon/blob/master/sse2neon.h
  • 主要实现SSE类intrinsic函数替换(整数、单浮点数据类型)
    涵盖基础的load、strore、 set、 运算操作等指令的NEON实现
    ➢方法2: 手动替换移植
  • SSE Intrinsics Guide网站: https://software.intel.com/sites/landingpage/IntrinsicsGuide/
  • NEON Intrinsic Guide网站: https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics
  • 在需移植文件中添加头文件 arm_ _neon.h

迁移工具——Porting Advisor初步代码扫描

  • Porting Advisor是一 款华为鲲鹏代码迁移工具,针对C/C+ +代码进行扫描分析,检查用户C/C+ +代码中需移植修改的MakeFile编译文件、X86汇 编及SSE intrinsic函数,并指导用户如何移植。
  • 鲲鹏开发套件- Porting Advisor:
    https://www.huaweicloud.com/kunpeng/software/portingadvisor.html
    在这里插入图片描述
    ➢以大数据中的Impala组件为例
  1. Impala源码下载及扫描分析
    在这里插入图片描述
  2. 扫描报告解读及运用
    在这里插入图片描述

本章总结

  • 本章简要介绍:了C/C+ +代码的编译原理及构建流程,重点对典型迁移类问题及方法进行详细介绍。
    最后引入Porting Advisor开发工具,帮助学员快速、高效的完成C/C+ +代码迁移。
  • 核心类移植项及迁移方法:
  1. 编译选项移植:关注平台差异项(用好编译器官方文档)
  2. 编译宏移植:区分编译器/用户自定义宏移植
  3. builtin函数移植:关注常用builtin函数替换
  4. 内联汇编移植:识别核心汇编指令,用好汇编指令/builtin函数替换
  5. SSE intrinsic函数移植:开源工程、官网指导手册相结合

Java/Python代码迁移

Java代码迁移

从源码到可执行案例

在这里插入图片描述

安装合适的JDK版本

在这里插入图片描述

包含SO库调用的jar包迁移方法

在这里插入图片描述

设置JVM参数,稳定快速的运行程序

在这里插入图片描述

案例分析

源码编译、安装OpenJDK9

在这里插入图片描述

netty-all-4.1.34.Final.jar迁移

在这里插入图片描述
在这里插入图片描述

JVM参数设置,解决服务挂死问题

在这里插入图片描述

Java迁移小结

  1. 改动点:安装JDK版本
  • 通过yum安装
  • 源码编译安装
  1. 引用的SO库需重新编译
  2. 根据业务实际情况,调整JVM参数

Python代码迁移

从源码到可执行案例

在这里插入图片描述

典型迁移场景处理

升级Python版本

在这里插入图片描述

含C模块或全C模块的迁移

在这里插入图片描述

案例分析

numpy-1.18.1模块迁移

在这里插入图片描述
在这里插入图片描述

Maven仓软件构建

Java构建工具

在这里插入图片描述

Maven介绍

Maven是Apache下的一个纯Java开发的开源项目,基于项目对象模型(缩写: POM) ,可以对Java项目进行构建、依赖管理

  • Maven官网链接: http://maven.apache.orgl
  • Maven’下载链接: http://maven.apache.org/download.cgi
  • Maven安装指导: http://maven.apache.org/install.html

Maven依赖管理

在Java世界中,可以用groupld、 artifactld、 version组成的Coordination (坐标)唯一标识一个依赖。
pom.xm|文件中一个典型的依赖引用如下图,Maven编译时会自动拼接路径和文件名, 去本地或远程仓查找。
在这里插入图片描述

Maven仓库分类

  • 本地仓库
    存储在本地磁盘,默认在${user.home}/.m2下
  • 远程仓库
    般使用国内镜像或者公司自己搭建私服,可以加快jar包下载速度。
  • 中央仓库
    Maven团队维护的jar包仓库:http://repo1.maven.org/maven2/

Maven仓库搜索顺序

在这里插入图片描述

Maven仓库软件构建流程

Maven软件构建关键流程:将X86依赖文件替换成Kunpeng依赖文件,重新构建,直到不包含X86依赖
在这里插入图片描述

鲲鹏Maven

Maven仓部分jar包依赖x86 so,无法在鲲鹏上直接使用,需要在鲲鹏上重新编译,部分jar包已编译好放在鲲鹏maven仓内,可以直接使用。
鲲鹏Maven链接: htps://mirrors.huaweicloud.com/kunpeng/maven/

如何配置优先搜索鲲鹏Maven仓

前面已了解Maven仓库搜索顺序,可以将鲲鹏Maven远程仓库放在首位,以便Maven优先下载鲲鹏平台jar包。由于鲲鹏Maven仓只放了arm相关jar,所以jar包不全,可以配置第二个Maven远程仓库,当鲲鹏Maven仓搜索不到时,会自动搜索下一个Maven远程仓库。
配置方法

  1. 编辑配置文件
    ${maven.home}/conf/settings.xml
  2. profiles标签 下增加鲲鹏Maven仓
<profile>
	。。。
	<repositories>
		<repository>
			<id>kugpeng</id>
			<url>https://mirrors.huaweicloud.com/kunpeng/maven/</url>
			<releases>
				<enabled>true </enabled>
			</releases>
		</repository>
		<repository>
			<id>huaweicloud</id>
			<url>https://mirrors.huaweicloud.com/repository/maven/</url>
				。。。
		</repository>
	</repositories>
</profles>

鲲鹏Maven仓库软件构建流程

在这里插入图片描述

Hive编译指导

以鲲鹏论坛hive 2.6.3为例(https://bbs huaweicloud.com/forum/thread-41221-1-1.html),此工程多个jar包含x86架构so,而此部分jar已经过适配并上传到鲲鹏maven仓,编译时只需优先搜索鲲鹏maven仓。
在这里插入图片描述

鲲鹏Maven仓编译Hive

在这里插入图片描述

软件包迁移

常见的Linux发行版主要分为两类:类RedHat系列和类Debian系列。 类RedHat系统中,软件包的格式是rpm;类Debian系统中,软件包的格式是deb。类RedHat系统提供了 rpm (全称是: RedHat Package Manager)命令来安装、卸载和升级rpm软件包;类Debian系统提供了dpkg命令来安装、卸载、升级deb软件包。
在这里插入图片描述

rpm介绍

rpm软件包组成

在这里插入图片描述

rpm软件包获取渠道

在这里插入图片描述

传统rpm重构流程

在这里插入图片描述

扫描

在这里插入图片描述

编译

在这里插入图片描述

打包(鲲鹏上重新生成rpm包)

在这里插入图片描述

验证

在这里插入图片描述

rpm迁移

鲲鹏开发套件Porting Advisor

  • 智能计算开放实验室:http://ic-openlabs.huawei.com/openlab/
  • 鲲鹏开发套件Porting Advisor:https://www.huaweicloud.com/kunpeng/software/portingadvisor.html
    在这里插入图片描述

Porting Advisor工具实现迁移自动化

在这里插入图片描述

环境准备

在这里插入图片描述

Porting Advisor快速重构rpm包流程

在这里插入图片描述

rpm迁移实例

在这里插入图片描述

相关链接:

  • 鲲鹏社区首页: https://www.huaweicloud.com/kunpeng/
  • 鲲鹏软件栈: https://www.huaweicloud.com/kunpeng/software.html
  • 鲲鹏伙伴计划: https://www.huaweicloud.com/kunpeng/partners.html
  • 鲲鹏产品与云服务: https://www.huaweicloud.com/kunpeng/product.html
  • 鲲鹏解决方案: https://www.huaweicloud.com/kunpeng/solution.html
  • 鲲鹏论坛: https://bbs.huaweicloud.com/forum/forum-923-1.html
  • 鲲鹏计算产业: https://e.huawei.com/cn/kunpeng
  • 12
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
虚拟化技术是一种通过软件或硬件的方式将物理资源分割成多个逻辑上的虚拟资源,并为多个操作系统或应用程序提供隔离的运行环境的技术。它的基本原理可以分为以下几个方面。 1. 虚拟化层 虚拟化技术的第一个基本原理是引入虚拟化层。虚拟化层是指在主机操作系统之上引入一个虚拟化软件或硬件,用于管理和抽象物理资源,并为虚拟机提供统一的资源接口。虚拟化层的存在,使得多个虚拟机可以在同一台物理主机上运行,每个虚拟机之间相互独立,互不干扰。 2. 资源分配 虚拟化技术的第二个基本原理是资源分配。资源分配是将物理资源划分成多个虚拟资源,并为每个虚拟机分配相应的资源。这些资源包括CPU时间片、内存容量、存储空间等。在虚拟化技术中,每个虚拟机都可以独立地占用分配给它的资源,而不会影响其他虚拟机的运行。 3. 隔离保护 虚拟化技术的第三个基本原理是隔离保护。隔离保护是为每个虚拟机提供独立的运行环境,使其之间相互隔离,互不干扰,从而保证应用程序的安全性和稳定性。虚拟化技术通过虚拟化层来隔离每个虚拟机,并将每个虚拟机看作是一个独立的物理主机。这样,即使一个虚拟机出现问题,也不会影响其他虚拟机的正常运行。 4. 虚拟机监控器 虚拟化技术的第四个基本原理是虚拟机监控器。虚拟机监控器是虚拟化技术的核心组件,负责虚拟机的创建、启动、暂停、恢复和销毁等操作,同时也提供虚拟机的监控和管理功能。虚拟机监控器的存在,使得用户可以方便地管理和控制虚拟机,包括对虚拟机的资源分配、运行状态、网络访问等进行监控和管理。 5. 虚拟机镜像 虚拟化技术的第五个基本原理是虚拟机镜像。虚拟机镜像是指将一个完整的操作系统及其应用程序、配置文件、数据文件等打包成一个文件,用于快速部署和迁移虚拟机。虚拟机镜像可以包含所有的系统配置和软件环境,使得用户可以快速地部署虚拟机,从而提高了虚拟机的可移植性和灵活性。 总之,虚拟化技术的基本原理包括虚拟化层、资源分配、隔离保护、虚拟机监控器和虚拟机镜像等方面。这些基本原理的存在和发展,使得虚拟化技术可以更好地满足用户的需求,提高硬件资源的利用率和灵活性,降低运维成本,同时也为云计算、大数据等技术的发展提供了重要支撑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KeaLoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值