版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
鲲鹏应用迁移概述010203应用迁移原理交叉编译鲲鹏代码迁移工具应用迁移原理应用迁移概述应用程序通过一定的软件算法完成业务功能,应用程序通常使用C/C++/Java/Go/Python等高级语言开发。高级语言需要先被编译成汇编语言,再由汇编器按照CPU指令集转换成二进制的机器码。一个应用程序在磁盘上存在的形式,是一堆指令和数据所组成的二进制机器码,也就是我们通常所说的二进制文件。硬件系统中,物理原材料和晶体管构成门电路和寄存器,进而组成CPU的微架构。CPU的指令集是硬件和软件的接口,应用程序通过指令集中定义的指令驱动硬件完成计算。计算机系统架构
Application(应用):常说的应用,一般指手机和平板电脑的应用。在面向对象上通常分为个人用户应用与企业级应用,在移动端系统分类上主要包括iOSApp、AndroidApk及WindowsPhone的xap和appx。Algorithm(算法):指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表用系统的方法描述解决问题的策略机制。
High-LevelLanguage(高级语言):高级语言相对于机器语言[MachineLanguage,是一种指令集的体系,这种指令集称为机器码(MachineCode),是计算机的CPU可直接解读的数据]而言,是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序员编写代码更容易,且有较高的可读性,以方便对计算机认知较浅的人也可以大概明白其内容。
AssemblyLanguage(汇编语言):汇编语言是一种用于计算机、微处理器、微控制器或其他可编程器件的低级语言,也称为符号语言。Application应用Algorithm算法High-LevelLanguage高级语言AssemblyLanguage汇编语言MachineCode二进制机器码ISA指令集架构MicroArchitecture微架构Registers门电路/寄存器Transistors晶体管Physics物理原材料SoftwareHardware计算机系统架构
MachineCode(二进制机器码):二进制机器码学名机器语言指令,有时也被称为原生码(NativeCode),是计算机的CPU可直接解读的数据(计算机只认识0和1)。
InstructionSetArchitecture(指令集架构):微处理器的指令集架构常见种类如下,复杂指令集计算机(CISC);精简指令集计算机(RISC);显式并行指令集计算(EPIC);超长指令字(VLIW)。
MicroArchitecture(微架构):又称为微体系结构/微处理器体系结构,是在计算机工程中,将一种给定的指令集架构在处理器中执行的方法。一种给定的指令集可以在不同的微架构中执行。计算机架构是微架构和指令集设计的结合。
Transistors(门电路/寄存器):寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,所以存放n位二进制代码的寄存器,需要由n个触发器来构成。按照功能的不同,可将寄存器分为基本寄存器和移位寄存器两大类。
Gates/Registers(晶体管):一种固体半导体器件(包括二极管、三极管、场效应管、晶闸管等,有时特指双极型器件),具有检波、整流、放大、开关、稳压、信号调制等多种功能。Application应用Algorithm算法High-LevelLanguage高级语言AssemblyLanguage汇编语言MachineCode二进制机器码ISA指令集架构MicroArchitecture微架构Registers门电路/寄存器Transistors晶体管Physics物理原材料SoftwareHardware计算机系统架构计算机的计算基础架构是一个从底层到顶层逐步递进的系统。它从最基本的晶体管和物理原材料开始,通过二极管逻辑门电路实现逻辑运算。随着技术的发展,逐渐演化至微架构和自评级架构,进而涉及操作系统的功能。在操作系统的支持下,计算机能够完成从二进制机器码到译码汇编、高级语言(如Java和C语言)等的转换。在整个架构从底层到顶层的演进过程中,技术逐渐变得复杂和抽象,技术语言也经历了从简单指令交换到汇编访存和锁存的发展,最终形成机器码。在这一过程中,指令集的变化起着至关重要的作用。鲲鹏处理器与x86处理器的指令差异程序代码(C/C++):intmain(){inta=1;intb=2;intc=0;c=a+b;returnc;}编译指令汇编代码说明b9400fe1ldrx1,[sp,#12]从内存将变量a的值放入寄存器x1b9400be0ldrx0,[sp,#8]从内存将变量b的值放入寄存器x00b000020addx0,x1,x0将x1(a)中的值加上x0(b)的值放入x0寄存器b90007e0strx0,[sp,#4]将x0寄存器的值存入内存(变量c)指令汇编代码说明8b55fcmov-0x4(%rbp),%edx从内存将变量a的值放入寄存器edx8b45f8mov-0x8(%rbp),%eax从内存将变量b的值放入寄存器eax01d0add%edx,%eax将edx(a)中的值加上eax(b)的值放入eax寄存器8945f4mov%eax,-0xc(%rbp)将eax寄存器的值存入内存(变量c)鲲鹏处理器指令x86处理器指令为什么需要应用迁移鲲鹏处理器使用RISC。RISC是一种执行较少类型计算机指令的微处理器。它可以以更快的速度执行操作,这使得计算机的结构更加简单、合理,从而提高运行速度。与x86处理器体系结构相比,RISC具有更均衡的性能功耗比。x86处理器使用CISC。CISC指令集中的每条小指令都可以执行一些低级硬件操作。指令的数量众多且复杂,每条指令的长度也不同。由于指令执行的复杂性,每条指令的执行都需要很长时间。一行简单的C/C++代码,c=b+a,在鲲鹏处理器和x86处理器两个平台下编译的指令有很大不同。鲲鹏处理器下是由两条ldr指令完成从内存将数据加载到寄存器,一条add指令完成加法计算,再使用一条str指令将数据存储到内存中。在x86处理器下,使用了三条mov指令和一条add指令。两条mov指令将内存中的数据加载到寄存器,一条add指令完成加法,再使用一条mov指令将计算后的数据存储到变量c对应的内存。二者使用的CPU的指令也是不同的:在x86处理器中使用的指令是不定长的,有24位、16位;在鲲鹏处理器中使用的指令是定长的32位。除此之外,二者使用的寄存器也是不同的。CPU处理器使用的指令集的差异决定了在x86处理器中编译后的程序无法直接在鲲鹏处理器中运行,这也就是使用鲲鹏处理器需要做应用迁移的原因。应用迁移步骤迁移准备——收集软件栈信息,申请迁移环境首先我们要收集需要迁移的信息,包括软件信息和硬件信息。一般来说软件信息分为以下几类:自研软件、开源软件和商业软件、中间件/编译器、操作系统/虚拟机。针对不同类型的软件信息,使用的迁移策略是不同的。硬件信息包括芯片/服务器信息。迁移环境可以使用华为云准备的Openlab服务器,从而帮助开发者学习。迁移分析——分析软件栈,指定迁移策略迁移分析是指对收集到的信息和软件栈做初步分析,判断是否真正需要迁移,以及评估迁移的工作量。不同类型的软件信息需要使用不同的迁移策略,现在我们着重分析一下不同类型的软件信息所使用的迁移策略。软件技术栈分成了两大类:业务软件和运行环境软件。业务软件 开源软件开源软件:获取开源软件ARM64软件包或下载源码重新编译。开源软件依赖组件:获取ARM64软件包或获取源码重新编译,闭源组件需要升级替换ARM版本或替换类似组件库。 自研软件编译型语言:使用C/C++/Go类编译语言重新编译。解释型语言:使用Java/Python等解释语言替换ARM版本JDK或PVM虚拟机。
商用软件:
获取支持鲲鹏处理器或TaiShan服务器的软件版本,如果无法获取到兼容版本,则需要更换其他类似软件。 运行环境软件
JDK:替换支持鲲鹏版本的JDK,推荐使用OpenJDK(高版本)、HuaweiJDK等。 编译器:替换支持鲲鹏的编译器,推荐使用高版本的GCC,如GCC9.1。操作系统:替换支持鲲鹏的操作系统,可使用智能计算产品兼容性查询助手查询,推荐使用CentOS、Ubuntu。迁移分析——分析软件栈,指定迁移策略编译迁移——软件编译打包,验证基本功能编译迁移主要分为两类:一类是代码迁移,另一类是软件包迁移。代码迁移可以分为编译型语言和解释型语言,编译型语言修改点主要涉及代码修改、编译脚本修改、内联汇编修改及不兼容指令,如SSEIntrinsic类加速指令。解释型语言修改点主要涉及直接翻译和依赖库编译,如使用纯解释型语言开发的应用程序,如果软件含依赖库,则需要重新编译。软件包迁移主要是对RPM进行重构,包括扫描软件包所依赖的依赖项,获取源码对这些依赖库进行重新编译、打包。编译迁移——软件编译打包,验证基本功能性能调优——利用五步法优化软件性能在应用迁移完成,软件能够正常运行在鲲鹏平台上时,我们发现它的性能可能没有在x86中运行的性能高,此时我们就需要使用性能调优策略。性能调优的步骤大概分为建立基准—压力测试—确定瓶颈—实施优化—确认效果。 建立基准:根据当前的硬件配置、组网、测试模型做综合评估,建立合理的调优目标。 压力测试:通过压力测试工具对系统加压,同时监控系统数据,记录数据变化。 确定瓶颈:在压力测试下,系统瓶颈比较容易显现。系统瓶颈通常会在CPU过于繁忙、IO等待/网络等待、响应时延等方面显现。 实施优化:根据瓶颈点实施针对性的优化措施,同时记录优化措施,一旦出现负向效果,及时回退。 确认效果:重启压力测试,准备好相关的工具来监控系统,确认优化效果。性能调优——利用五步法优化软件性能测试与认证——保证商用上线,共建鲲鹏生态通过测试与认证来保证迁移完后,性能正常达标,包括功能测试、长稳测试、鲲鹏展翅认证等。测试会经过功能测试、性能测试、长稳测试,这些测试的最终目的是保证规模的商用。另外,鲲鹏展翅伙伴计划是华为智能计算围绕TaiShan服务器推出的一项合作伙伴计划,旨在帮助更多的合作伙伴将应用迁移到TaiShan服务器上,并和华为共建鲲鹏生态,智能计算为合作伙伴提供培训、技术、营销、市场的全面支持。通过鲲鹏展翅认证,可以获得研发技术专家的专项技术支持、鲲鹏技术的专项技术培训、鲲鹏技术兼容性认证证书等权限。目前已经累计有上千个行业伙伴获得鲲鹏展翅认证。交叉编译编译概述在程序开发中,使用高级语言编写的代码被称为源代码,比如使用C语言编写的后缀为.c的文件,或者使用C++语言编写的后缀为.cpp的文件。源代码不能被机器执行,必须转换成二进制机器码(指令+数据)才能被机器执行。将源代码转换成二进制机器码的过程称为编译(Compile),编译的工作需要编译器来完成。编译器对源代码进行语法检查,只有没有语法错误的源代码才能被编译通过。源代码经过编译后,并不是生成最终的可执行文件,而是生成一种被称为目标文件(ObjectFile)的中间文件。比如,VisualC++的目标文件后缀为.obj,而GCC的目标文件后缀为.o。源代码可能包含多个源文件,如main.c、fun1.c、fun2.c等,编译器会对源文件逐个进行编译。因此,有几个源文件,就会生成几个目标文件;目标文件并不能被执行,因为它可能存在一些问题,比如源文件之间的引用关系导致的问题。把经过编译后生成的目标文件,按照其内在引用关系相连接而生成一个完整的、可执行的文件的过程称为链接,链接工作由链接器完成。因此,源文件生成可执行文件要经过编译和链接两个步骤才能完成。为了方便,我们把这个过程统称为编译。软件编译类型软件编译根据编译环境可以分成以下几种类型。 本地编译(NativeCompilation):本地编译是指将源代码在与目标平台相同的环境中进行编译。编译器和库都是针对目标平台的,生成的可执行文件可以直接在该平台上运行。本地编译适用于开发和部署都在同一个平台上的应用程序。 交叉编译(CrossCompilation):交叉编译是指将源代码在与目标平台不同的环境中进行编译。编译器和库需要根据目标平台进行适配,生成的可执行文件可以在目标平台上运行。交叉编译适用于开发和部署在不同平台上的应用程序。 混合编译(HybridCompilation):混合编译是指将源代码在多个不同的编译环境中进行编译。例如,首先在本地编译环境中进行一部分编译,然后在交叉编译环境中进行另一部分编译。混合编译可以结合本地编译和交叉编译的优势,适用于复杂的应用程序或需要在多个平台上部署的应用程序。这些不同类型的编译环境之间的区别在于编译器、库和配置的不同。本地编译和交叉编译需要使用不同的编译器和库,以及针对目标平台进行适配。混合编译则是结合了多个编译环境的特点,可以根据具体需求灵活选择编译环境。选择不同类型的编译环境取决于应用程序的需求和目标平台的要求。本地编译&交叉编译本地编译(通常称为编译)是指编译源代码的平台和执行源代码编译后的程序的平台是同一个平台(是在一个平台上生成在该平台上的可执行代码)。这里的平台,可以理解为CPU架构+操作系统。比如,在Intelx86架构/Windows10平台下使用VisualC++编译生成的可执行文件,在同样的Intelx86架构/Windows10平台下执行。交叉编译是指在一个平台上生成另一个平台上的可执行代码。例如,我们在Windows上面编写C51代码,并编译成可执行代码,这个代码是在C51上面运行,而不是在Windows上面运行的。再如,我们在Ubuntu上面编写树莓派的代码,并编译成可执行代码,这个代码是在树莓派上面运行,而不是在Ubuntu、Linux上面运行的。这就是典型的交叉编译。交叉编译概述交叉编译是相对复杂的,用户必须考虑如下几个问题。
CPU架构:比如ARM、x86、MIPS等;字节序:大端(big-endian)和小端(little-endian);浮点数的支持;应用程序二进制接口(ApplicationBinaryInterface,ABI)。交叉编译的主要原因和优势如下。跨平台开发:交叉编译可以先在一个平台上进行开发,然后将代码编译成在其他平台上运行的可执行文件。这对于开发人员来说非常方便,其可以在自己熟悉的开发环境中进行开发,而无须在不同的平台上进行开发和测试。节约资源:交叉编译可以将开发和编译的工作分离到不同的环境中。开发人员可以在高性能的开发环境中进行开发,而将编译工作交给低功耗或资源有限的目标平台。这样可以节约资源,提高效率。提高性能:交叉编译可以针对目标平台进行优化,生成针对该平台的可执行文件。这样可以充分利用目标平台的硬件和软件特性,提高应用程序的性能。 扩展应用范围:交叉编译可以将应用程序部署到不同的平台上,扩展应用程序的适用范围。例如,可以将应用程序从PC平台编译后部署到嵌入式平台,或者从x86架构编译后部署到ARM架构。跨平台兼容性:交叉编译可以解决不同平台的兼容性问题。通过将代码编译成适用于目标平台的可执行文件,可以确保应用程序在目标平台上的正常运行。交叉编译概述交叉编译可以简化开发流程、节约资源、提高性能、扩展应用范围,并解决跨平台兼容性问题。这使得交叉编译在嵌入式开发、移动应用开发、跨平台开发等领域得到广泛应用。在进行交叉编译时需要使用交叉编译器、交叉编译工具链(CrossCompilationToolChain)。要进行交叉编译,我们首先需要在主机平台上安装对应的交叉编译工具链,然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下。在WindowsPC上,利用ADS(ARM开发环境),使用armcc编译器,则可编译出针对ARMCPU的可执行代码。在LinuxPC上,使用arm-linux-gcc编译器,可编译出针对LinuxARM平台的可执行代码。在WindowsPC上,利用cygwin环境,使用arm-elf-gcc编译器,可编译出针对ARMCPU的可执行代码。鲲鹏代码迁移工具鲲鹏代码迁移工具鲲鹏代码迁移工具是一款可以简化用户应用迁移到基于Kunpeng916/920的服务器的过程的工具。该工具仅支持x86Linux到鲲鹏Linux的扫描与分析,不支持Windows软件代码的扫描、分析与迁移。当用户有x86平台上源代码的软件要迁移到基于鲲鹏916/920的服务器上时,该工具既可以分析出可迁移性和迁移投入,也可以自动分析出需要修改的代码内容,并指导用户如何修改。鲲鹏代码迁移工具既解决了用户应用迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的痛点(通过该工具能够自动分析并输出指导报告),也解决了用户代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等痛点。鲲鹏代码迁移工具支持的功能功能描述应用迁移评估检查用户软件包(RPM、DEB、TAR、ZIP、GZIP等文件)中包含的SO(SharedObject)依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性。检查用户Java类软件包(JAR、WAR、EAR)中包含的SO依赖库和二进制文件,并评估SO依赖库和二进制文件的可迁移性。检查指定的用户软件安装路径下的SO依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性源码迁移检查用户C/C++/ASM/Fortran/Go软件构建工程文件,并指导用户如何迁移该文件。检查用户C/C++/Fortran/Go/解释型语言软件构建工程文件使用的链接库,并提供可迁
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第一单元 第4节 物联网的感知 教学设计 -粤教清华版初中信息技术八年级下册
- 活动5 环保小达人教学设计小学劳动四年级北师大·深圳报业版《劳动实践指导手册》(主编:韩震)
- 第一课 学习妙方教学设计小学心理健康六年级下册大百科版
- 第五单元教学设计2023-2024学年统编版语文七年级下册
- 2025年全国计算机二级MSOffice高级应用历年真题汇编试卷附答案详解
- 人教版八年级下册美术《第2课 弘扬真善美》教学设计
- 一带一路数字丝绸之路现状与发展趋势
- 写字楼物业前台年终工作总结
- 2023年土地租赁合同集锦15篇
- 小学英语五年级下册《学校科目》单元整体教学设计-牛津上海版5B Module2 Unit3
- 2026年南京大数据集团有限公司校园招聘考试参考试题及答案解析
- 2025年湖南省益阳市事业单位招聘笔试试题及答案解析
- 2026新疆喀什地区地直机关遴选公务员、事业单位选聘31人考试参考试题及答案解析
- 2026年浙江省衢州市六校联谊初三百日冲刺考试英语试题含解析
- 一次性使用止血套环产品技术要求北京中诺恒康生物
- 五年级上册心理健康教育课件-3记忆加油站|辽大版 (共12张PPT)
- LNG液化工艺(课堂PPT)课件(PPT 43页)
- 水泥搅拌桩首件工程总结
- 配电网工程典型设计10kV电缆分册参考模板
- 小学数学单位换算表
- 钻孔桩水下混凝土灌注记录(自动生成)
评论
0/150
提交评论