鲲鹏智能计算导论 课件 第8章 鲲鹏应用迁移与开发_第1页
鲲鹏智能计算导论 课件 第8章 鲲鹏应用迁移与开发_第2页
鲲鹏智能计算导论 课件 第8章 鲲鹏应用迁移与开发_第3页
鲲鹏智能计算导论 课件 第8章 鲲鹏应用迁移与开发_第4页
鲲鹏智能计算导论 课件 第8章 鲲鹏应用迁移与开发_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章

鲲鹏应用迁移与开发鲲鹏智能计算导论8.1鲲鹏软件迁移8.2鲲鹏软件开发8.3鲲鹏软件迁移实践学习要点8.1.1 鲲鹏迁移概述计算机技术栈与程序执行过程intmain(){inta=1;intb=2;intc=0;c=a+b;returnc;}上述这段C/C++代码在不同处理器下的指令是不一样的。8.1.1 鲲鹏迁移概述指令汇编代码说明b9400fe1ldrx1,[sp,#12]从内存中将变量a的值放入寄存器x1b9400be0ldrx0,[sp,#8]从内存中将变量b的值放入寄存器x00b000020addx0,x1,x0将x1中的值加上x0中的值放入x0b90007e0strx0,[sp,#4]将x0中的值存入内存(变量c)指令汇编代码说明8b55fcmov-0x4(%rbp),%edx从内存中将变量a的值放入寄存器edx8b45f8mov-0x8(%rbp),%eax从内存中将变量b的值放入寄存器eax01d0add%edx,%eax将edx中的值加上eax中的值放入eax8945f4mov%eax,-0xc(%rbp)将eax中的值存入内存(变量c)代码在鲲鹏处理器中的处理过程代码在x86处理器中的处理过程8.1.1 鲲鹏迁移概述检查软件栈兼容性检索依赖库编译参数修改迁移汇编代码迁移后性能调优12345其主要问题是需要逐一查找编程相关资料确认。其主要问题是反复进行编译才能检测出所有依赖库。其主要问题是部分错误在运行时才能发现。其主要问题是查找和修改需要替换的汇编代码比较耗时。其主要问题是缺乏全量工具来分析性能瓶颈。传统应用迁移的流程8.1.1 鲲鹏迁移概述传统应用迁移流程的缺点在评估软件迁移技术可行性时,人工分析投入大、周期长,需要反复编译、调试,准确率低。在判定软件功能是否可用时,迁移专业技能不高的工程师需要反复定位、试错,准确率低。在性能调优时,依赖经验进行人工定位,调优能力弱,优化效果不佳。8.1.2 鲲鹏迁移工具鲲鹏开发套件的两种模式Web浏览器模式该模式工具部署在服务器端,用户可以通过Web浏览器访问工具界面,以使操作更简单、快捷。其主要工具有鲲鹏代码迁移工具和鲲鹏性能分析工具。VisualStudioCode插件模式该模式沿袭开发者习惯,基于VisualStudioCode为开发者提供一站式开发套件(即IDE)入口,开发者无须在多个工具之间切换。其主要插件有鲲鹏代码迁移插件、鲲鹏开发框架插件、鲲鹏编译插件、鲲鹏性能分析插件。使用鲲鹏开发套件,鲲鹏迁移流程将会大大简化,传统流程中遇到的问题也将迎刃而解。首先,鲲鹏代码迁移工具提供的自动代码迁移功能可以解决约90%的C/C++语言问题和约80%的依赖库问题。其次,加速库重编译的编译过程更智能,具备更优的代码运行效率。最后,鲲鹏性能分析工具使性能数据可视化,可以进行一键式优化。8.1.2 鲲鹏迁移工具鲲鹏开发套件中的主要工具鲲鹏代码迁移工具01OPTION可分析代码可迁移性和迁移投入,也可以自动分析需要修改的代码内容,并指导用户如何修改。用户软件迁移到鲲鹏处理器上时,可以先用该工具分析可迁移性和迁移投入。它既能解决用户软件迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的问题,又能解决用户代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等问题。8.1.2 鲲鹏迁移工具鲲鹏开发套件中的主要工具鲲鹏性能分析工具02OPTION调优助手是针对基于鲲鹏处理器的调优工具,能系统化地组织性能指标,引导用户分析性能瓶颈,实现快速调优。系统性能分析是针对基于鲲鹏处理器的性能分析工具,能收集处理器硬件、操作系统、进程/线程、函数等各层次的性能数据,分析系统性能指标,定位到系统瓶颈点及热点函数,并给出优化建议。系统诊断是针对基于鲲鹏处理器的性能分析工具,提供内存泄漏诊断(包括内存未释放和异常释放)、内存越界诊断、内存消耗信息分析展示、网络丢包分析展示等功能,帮助用户识别出源码中内存使用的问题,提升程序可靠性。Java性能分析是针对基于鲲鹏处理器上运行的Java程序的性能分析和优化工具,可以图形化显示Java程序的堆、线程、锁、垃圾回收等信息,收集热点函数,定位程序瓶颈点,帮助用户采取针对性优化。8.1鲲鹏软件迁移8.2鲲鹏软件开发8.3鲲鹏软件迁移实践学习要点8.2.1 鲲鹏软件开发模式鲲鹏原生开发01OPTION基于鲲鹏处理器进行开发,如TaiShan服务器,在对计算性能和资源要求较高时使用,如自建数据中心。这种开发和通用ARM服务器开发一样,开发者要在物理机上安装开发时需要的操作系统和开发工具。基于鲲鹏处理器的云服务器进行开发,如ECS和BMS等。相对来说,云服务器开发更加灵活、简单,选择丰富,可弹性调整且按需计费。鲲鹏处理器是基于ARMv8架构开发的,所以当使用ARMv8架构的开发环境进行软件开发时,称为鲲鹏原生开发。物理服务器开发云服务器开发8.2.1 鲲鹏软件开发模式鲲鹏交叉开发02OPTION除此以外,华为还为开发者提供云端开发环境CloudIDE。在云端开发环境中进行的软件开发称为鲲鹏云端开发。鲲鹏交叉开发其实是开发环境和运行环境不同时采用的开发模式。它的优势是可以在当前的资源上搭建开发环境,不需要额外的开发成本。例如,如果现有x86架构的服务器资源需要开发鲲鹏架构服务器上运行的软件,那么只需要在x86服务器上搭建交叉编译环境(主要是安装交叉编译器——Linaro)即可进行编译开发。对于基于容器的Web应用开发,可以使用鲲鹏云端开发,它的好处是使用灵活、方便。CloudIDE是DevCloud的云端开发环境服务,向开发者提供按需配置、快速获取的工作空间(包含编辑器和运行环境),支持完成环境配置、代码阅读、编写代码、构建、运行、调试、预览等操作,并支持对接多种代码仓库。8.2.2 鲲鹏软件开发实践鲲鹏交叉开发01OPTION如果要在x86服务器上开发鲲鹏软件,则可以搭建鲲鹏交叉开发环境,具体步骤如下(以CentOS为例)。(1)安装标准的C开发环境。#yumgroupinstallDevelopmentTools(2)在/usr/local下建立名为ARM-toolchain的文件夹。#mkdir/usr/local/ARM-toolchain8.2.2 鲲鹏软件开发实践鲲鹏交叉开发01OPTION(3)使用wget命令下载gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz安装包。#cd/usr/local/ARM-toolchain#wget/components/toolchain/binaries/latest-5/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz使用wget命令下载软件安装包8.2.2 鲲鹏软件开发实践鲲鹏交叉开发01OPTION(4)解压安装包。#tar-xvfgcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz(5)配置环境变量。修改配置文件,在配置文件的最后一行加入路径配置。#vim/etc/profileexportPATH=$PATH:/usr/local/ARM-toolchain/linaro/bin/(6)使环境变量生效。#source/etc/profile(7)安装校验。#aarch64-linux-gnu-gcc-v8.2.2 鲲鹏软件开发实践鲲鹏交叉开发01OPTION若显示下图所示的信息,则表示配置正确。8.2.2 鲲鹏软件开发实践鲲鹏云端开发02OPTION(1)创建CloudIDE实例(2)启动CloudIDE实例(3)CloudIDE编码(4)CloudIDE调试8.1鲲鹏软件迁移8.2鲲鹏软件开发8.3鲲鹏软件迁移实践学习要点8.3.1 鲲鹏软件迁移流程对于鲲鹏软件迁移的整个流程而言,华为提供端到端的服务,具体如下。应用迁移评估迁移方案设计应用改造支持测试验证支持迁移实施保障鲲鹏软件迁移流程8.3.1 鲲鹏软件迁移流程应用迁移评估流程首先分析源码编程语言类型,如果是解释型语言且不涉及编译型类库,则可直接使用源码在鲲鹏环境中进行安装;如果涉及编译型类库,则需要迁移类库重新打包安装。如果源码编程语言是编译型语言且不是Linux软件包,则无法进行迁移。如果是Linux软件包,但是包含x86汇编代码,则需要将x86汇编代码替换为ARM汇编代码。如果不包含x86汇编代码,但是包含图形用户界面(GraphicalUserInterface,GUI),则需要进行具体分析。如果不包含x86汇编代码且不包含GUI,则需要对char类型数据变量、浮点数精度以及是否包含多线程的情况进行具体处理,并重新编译迁移。8.3.2 编译与迁移鲲鹏迁移流程软件编译的基础知识Maven就是最主流的依赖管理开发工具之一。它是Apache下的一个纯Java开发的开源项目,基于项目对象模型,可以对Java项目进行构建、依赖管理。在Java中,可以用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。pom.xml文件中一个典型的依赖引用如图所示,Maven编译时会自动拼接路径和文件名,以在本地仓库或远程仓库中进行查找。8.3.2 编译与迁移Maven仓库远程仓库一般使用国内镜像或者企业自己搭建私服,可以加快JAR包的下载速度。中央仓库aven团队维护的JAR包仓库。本地仓库存储在本地磁盘中,默认在${user.home}/.m2下。010203Maven仓库中部分JAR包依赖x86so库文件,需要在华为鲲鹏上重新编译,部分JAR包已编译好放在华为鲲鹏Maven仓库内,可以直接使用。8.3.2 编译与迁移常见的Linux发行版在类RedHat系列中,软件包的格式为rpm;在类Debian系列中,软件包的格式为deb。在类RedHat系列中,软件包的格式为rpm;在类Debian系列中,软件包的格式为deb。类RedHat系列类Debian系列类RedHat系列提供RPM命令来安装、卸载和升级RPM软件包;类Debian系列提供dpkg命令来安装、卸载、升级deb软件包。8.3.2 编译与迁移RPM软件包文件组成RPM软件包通常包含二进制文件、so库文件、JAR包、配置文件等。鲲鹏通用计算平台RPM软件包获取渠道主要有5个:操作系统本地源操作系统远端源华为云鲲鹏镜像x86RPM重构下载源码编译123458.3.2 编译与迁移需要重构的RPM软件包可以使用鲲鹏开发套件来快速构建,具体分为以下4步。(4)重新扫描,确认是否还有x86依赖文件,并进行安装验证。(1)使用鲲鹏代码迁移工具扫描x86RPM软件包,识别x86依赖文件。(3)解压x86RPM软件包并将x86依赖文件替换成在鲲鹏Maven仓库中查找到的文件或在鲲鹏上重新编译的文件,重新打包。(2)如果是JAR依赖文件,则可在鲲鹏Maven仓库中查找或者在鲲鹏上重新编译。如果是so库文件或其他二进制依赖文件,则可在鲲鹏上重新编译。#yuminstallrpmdevtools#rpmdev-setuptree8.3.3 典型迁移实践准备环境。具体环境要求如下(以华为云ECS为例)。01OPTION①CPU:鲲鹏920。②操作系统:CentOS7.6。③远程SSH登录工具已经在本地安装。④本地yum源已经配置。⑤安装rpmbuild。⑥安装rpmrebuild。#mkdirrpmrebuild#cdrpmrebuild#wget/projects/rpmrebuild/files/rpmrebuild/2.14/rpmrebuild-2.14.tar.gz#tarxvfzrpmrebuild-2.14.tar.gz#make;makeinstall⑦安装rpm2cpio。CentOS7.6自带rpm2cpio,无须安装。8.3.3 典型迁移实践准备环境。具体环境要求如下(以华为云ECS为例)。01OPTION⑧安装鲲鹏代码迁移工具。鲲鹏代码迁移工具可以在“鲲鹏社区>开发者>鲲鹏开发套件>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论