3 高阶鲲鹏代码移植:23
4 鲲鹏应用发布:18
1 代码移植
1 应用执行过程
1 ISA指令集体系结构,instruction set architecture: ISA是软件和硬件之间接口的一个完整定义。
2 程序编译过程:
2 基于ARMV8的汇编语言简介:
1 ARMv8的运行模式:在ARMv8架构中,原先ARMv7架构中的Thumb指令被称为:T32
在本模式下,所有地址保存在64位寄存器中,基本指令集可以使用64位寄存器来处理。AArch64状态下的指令集称为A64。
在本模式下,所有地址保存在32位寄存器中,基本指令集可以使用32位寄存器来处理。AArch32状态下的指令集可分为A32和T32。
运行模式 | 寄存器位数 | 指令集 | 指令长度 | 备注 |
AArch64 | 64位 | A64 | 32位 | 使用定长指令 |
AArch32 | 32位 | A32 | 32位 | 使用定长指令 |
T32(ARMv7中的Thumb) | 32位和16位 | 混合了16位和32位指令 |
1 ARMv8特权级别划分:级别最高的是EL3
2 Normal world和secure word:
4 ARMv8的通用寄存器:
5 ARMv7的CPU模式:哪个中断,仅能运行在安全模式?MON
哪个中断,仅能运行在非安全级别?HYP
其他:既可以在安全模式,也可以在非安全模式
6 ARMv8中,哪些汇编语言正确使用了MOV指令?MOV X0,X1 //将X1中的,复制到X0
6 数据处理技术:
2 ARMv8 A64基本指令集,正确的是:ARMv8的指令集向下兼容了ARMv7
1 数据处理指令
2 内存访问指令: 将内存中的数据,加载到寄存器中的指令:LDR Rt, Dt
3 流程控制指令
4 系统控制指令
5 伪指令:
6 NEON简介:
3 鲲鹏应用开发:
1 基于编译型语言
2 基于解释型语言
1 JVM设置(3个经验+2个差异)
3个经验:
完成一次GC后,释放70%的堆空间;
假设老年代内存占用为X:
空间 | 倍数 | 参数 |
堆总大小 | X的3-4倍 | Xmx,Xms |
年轻代 | X的1-1.5倍 | Xmn(NewSize+MaxNewSize) |
老年代 | X的2-3倍 | 堆和年轻代相减(Xmx-Xmn) |
永久代 | X的1.2-1.5倍 | PermSize,MaxPermSize |
年轻代大小,占整个堆空间的3/8
2个差异:
差异1:线程栈大小的Xss参数在ARM上默认值为2M,在X86上为1M,若线程开的太多,需要使用Xss调整线程栈的大小,防止OOM
差异2:由于ARM和X86指令集的差异性,导致JDK的JIT编译存在差异。可以通过设置参数ReservedCodeCacheSize,调整CodeCache大小。
3 在将X86代码移植到鲲鹏920平台时,当涉及到内联SIMD,在进行gcc编译时,需要添加什么参数?-march=armv8-a+fp+simd+crypto+crc
4 在鲲鹏架构下,以下哪条汇编指令是做or运算的?EOR Vd, Vn.,Vm
5 在鲲鹏平台上准备C语言的开发环境,需要部署以下哪个工具:GCC
6 在鲲鹏平台上进行编译时,定义编译生成的应用程序为64位的参数:-mabi=lp64
7 在使用NEON时,定义了一个向量的格式为x_t,其中numbers_of_lanes指的是:Lane的数量
8 在鲲鹏分布式存储解决方案场景中,发现某块磁盘成了该集群的性能瓶颈,该如何解决:考虑更换磁盘
9 在提高并行线程数的同时,还是注意尽量减少线程之间的:锁争抢。
10 在相同规格的条件下,下列哪种类型的弹性云服务器实例的计算性能最强:H3
11 在用户访问web服务器时候,鲲鹏SSL加速引擎被部署在哪里?负载均衡/ELB
4 多选
1要将以上代码片段移植到鲲鹏平台时,哪些地方需要修改?
将printf("x86_64 is defined\n");修改为printf("aarch64 is defined\n"); 以及#ifdef x86_64修改为#ifdef aarch64
#include
int main(){
#ifdef x86_64
printf("x86_64 is defined\n");
}
注意:将x86_64转换成aarch6
2 ARMv8定义的内存屏障体系结构提供了那些功能?load/Store指令的排序、流水线的排序
3 将Java开发的程序从x86移植到鲲鹏处理器,需要修改的地方有:
重新编译So库、需要安装ARM版本的JDK,将JVM的参数修改为适合鲲鹏处理器以获取最好的性能。
4 将X86平台的代码一直到鲲鹏平台时,替换汇编指令的方法有哪些?
如果有相同功能的ARM汇编指令,则直接替换;
如果没有相同功能的ARM汇编指令,则重新开发代码来替换
5 在鲲鹏平台,将变量类型为double的转化为long型,则可能的结果为:
0x7FFFFFFFFFFFFFFF、0x8000000000000000
0x7FFFFFFFFFFFFFFF:鲲鹏为long变量,赋值大的正数
0x8000000000000000:鲲鹏为long变量,赋值小的负数
6 在鲲鹏平台,double值转为int,则可能的结果为:
0x7FFFFFFF、0x80000000
0x7FFFFFFF | 鲲鹏为int变量赋值大的正数 |
0x80000000 | 鲲鹏为int变量赋值小的负数 |
7 在鲲鹏平台部署Python开发环境时,在开发环境部署的准备阶段,应该识别以下那些问题?
Python3在设计的时候没有考虑向下兼容;
确认需要使用的Python版本;
为了保持代码一致性,Python2所用的版本,在升级Python3后保持不变;
Python2已于2020年1月停止维护
8 在使用rpmbuild打包应用时,需要编辑spec文件,以下选项中,参数设置正确的是:
Licenses;
Source0;
Name;
Version
9 ARM指令集从v7开始分了不同版本,其中,A系列(Application)针对复杂计算领域,如:智能手机、服务器
R系列(Real time):针对需要实时响应的,如:医疗设备、汽车制动;
M系列(Microcontroller):针对功能、尺寸有一定要求的,如智能家居、通讯模块
10 AVX2NEON加速库,对哪些指令进行了封装移植?
SSE;
AVX2;
AVX512
11 CloudIDE是DevCloud的云端开发环境,向开发者提供按需配置、快速获取的工作空间(包括编辑器和运行环境),以下哪些是CloudIDE的主要功能?
支持完成环境配置;
支持代码阅读和编写;
支持对接多种代码仓库;
支持代码构建、运行和调试
12 Django是一个高级的Python网络框架,可以快速开发安全和可维护的网站。以下关于Django的说法,正确的是:
Django是免费和开源的项目,有活跃繁荣的社区;
Django开源社区提供的解决方案,也全部都是免费的;
Django负责处理网站开发中复杂部分,因此软件开发人员可以专注于编写应用程序
13 dnf相比于yum的优势是什么?
dnf在同步存储库的元数据时,使用的内存较少;
dnf支持多种扩展
14 GCC(The GNU Compiler Collection)是GNU开发的编辑器套装,它支持的处理器架构种类很多,包含以下哪些处理器架构?
X86;
ARM;
ALPHA;
MIPS
15 GCC编译器能够为许多不同的机器生成代码,其支持以下哪些语言?
Java;
Matlab;
Fortran;
C/C++
16 将java代码从X86移植到鲲鹏处理器时,需要修改的地方有:
将JVM参数,修改为适合鲲鹏处理器,以获取最好的性能;
需要安装ARM版本的JDK;
重新编译So库
17 下列选项中,哪些操作系统支持rpm软件管理工具?
Centos;
OpenEuler;
Suse;
Redhat;
Fedora
哪个不支持?Ubuntu
18 使用rpm2cpio/cpio命令,解压rpm源码包后,通常会得到以下哪些文件或源码包?
tar.gz源码包;
spec文件;
patch补丁文件
19 提供单指令、多数据、即SIMD指令的处理器可以提升一下哪些种类的应用程序的执行速率?
视频数据程序、声音数据程序、处理影响的程序
20 通过以下哪些方式,可以构建软件的二进制RPM包?
使用rpmbuild -ba命令从spec文件构建;
使用rpmbuild -rebuild命令从srpm重新构建;
使用rpmbuild -bb命令,从spec文件构建
21
2 鲲鹏应用发布
1 应用发布流程介绍:
注意:鲲鹏应用发布,需要提供完整的说明文档及源码包
2 主流语言的打包工具和方法:
2.1 在基于编译型语言的鲲鹏应用发布流程中,编译阶段最关注的是:编译后的二进制文件是否成功运行。
3 RPM:
1 RPM
2 RPM命令集
3 rpmbuild参数命令:
4 rpmbuild目录介绍
路径 | 宏代码 | 名称 | 用途 |
~/rpmbuild/SPECS | %_specdir | Spec 文件目录 | 保存 RPM 包配置(.spec)文件 |
~/rpmbuild/SOURCES | %_sourcedir | 源代码目录 | 保存源码包(如 .tar 包)和所有 patch 补丁 |
~/rpmbuild/BUILD | %_builddir | 构建目录 | 源码包被解压至此,并在该目录的子目录完成编译 |
~/rpmbuild/BUILDROOT | %_buildrootdir | 最终安装目录 | 保存 %install 阶段安装的文件 |
~/rpmbuild/RPMS | %_rpmdir | 标准 RPM 包目录 | 生成/保存二进制 RPM 包 |
~/rpmbuild/SRPMS | %_srcrpmdir | 源代码 RPM 包目录 | 生成/保存源码 RPM 包(SRPM) |
5 rpm应用制作流程
1 准备测试代码
2 创建rpmbuild目录:
rpmdev-setuptree
3 将测试代码移动到rpmbuild目录
cd /root
mv mysql-boost-8.0.17.tar.gz /root/rpmbuild/SOURCES/
mv 0000-mysql-add-fstack-protector-strong.patch /root/rpmbuild/SOURCES/
4 制作SPEC,并修改
cd /root/rpmbuild/SPECS/
rpmdev-newspec mysql
cd /root/rpmbuild/SPECS
vim mysql.spec
5 rpm打包
使用命令rpmbuild进行rpm包的创建
rpmbuild -ba mysql.spec
rpm安装生成的应用:
rpm -ivh /root/rpmbuild/RPMS/aarch64/hello-1.0-1.aarch64.rpm
6 测试
6 在rpmbuild的SPEC目录下,SPEC配置文件中,用于将软件构建成机器代码(对于编译语言)、或者字节码的(对于解释型语言)的命令是哪个?%build
7 在rpmbuild的SPEC目录下,spec配置文件中的哪个参数,用来记录软件包在不同版本version或内部release版本之间的变更?%changelog
4 Maven
0 Jar文件制作
1 Maven介绍
2 POM文件介绍:
Maven工程中pom文件的作用:确定项目依赖的文件,提供快速研发
3 Maven仓库
4 鲲鹏Maven仓库:
5 Maven生命周期
6 Maven打包:开发、打包、安装
7 鲲鹏应用构建流程
8 Maven构建工程骨架:mvn archetype: generate
9 在Maven工程的目录结构中,Resources的功能是什么?存放配置文件,例如xml类型等。
5 发布后期维护,描述正确的是:对生命周期进行管理,到期即下线所有版本
X 多选
1 Maven全局配置文件settings.xml文件与.m2中的配置文件settings.xml的区别是什么?
2个settings文件同时存在;
Maven全局settings.xml文件,对系统内所有用户生效;
.m2中settings文件只对当前用户生效
2 rpmbuild的SPEC文件的功能是什么?
说明软件包的属性;
说明软件包怎样被配置、安装哪些文件以及被安装到哪里;
声明软件的许可证
3 rpm软件管理工具的功能包括哪些?
查询和验证;
安装;
卸载;
升级
4 rpm软件管理工具的优势有哪些?
提供软件版本资讯、软件名称和软件用途等相关信息;
使用数据库记录rpm文件的相关参数,便于升级、移除、查询与验证;
该工具包含了编译程序,免编译;
预先检查系统版本,避免错误安装
5 rpm软件管理工具如何区分源码文件与二进制bin文件?
软件包的后缀是否为.rpm;
软件包的后缀是否为.tar.gz.zip
6 Java常用的开发配套工具有:
ant;
gradle;
maven
7 代码归一实现的方式有3个:
代码段编译宏控制;
编译文件Makefile控制;
运行态自动适配
错误的:添加自动识别硬件的代码进行自动控制
8 对MySQL内存优化的参数有哪些?
innodb_buffer_pool_size;
innodb_buffer_pool_instance
9 基于变异性语言(C/C++)的鲲鹏应用程序发布时,下列哪些环节属于该流程?
将源代码编译成二进制文件;
将源代码打包成rpm包
不属于该流程的是:
源代码打包成二进制需要对平台进行编译,但最终的结果不会影响我们发布在鲲鹏平台下执行程序;
将源码打包生成rpm包的同时,注意版本号。